whole_func_string: function() {
  
  	this.$el.empty();
  
          // A special markup can be given in the `properties.markup` property. This might be handy
          // if e.g. arrowhead markers should be `<image>` elements or any other element than `<path>`s.
          // `.connection`, `.connection-wrap`, `.marker-source` and `.marker-target` selectors
          // of elements with special meaning though. Therefore, those classes should be preserved in any
          // special markup passed in `properties.markup`.
          var children = V(this.model.get('markup') || this.model.markup);
  
          // custom markup may contain only one children
          if (!_.isArray(children)) children = [children];
  
          // Cache all children elements for quicker access.
          this._V = {} // vectorized markup;
          _.each(children, function(child) {
              var c = child.attr('class');
              c && (this._V[$.camelCase(c)] = child);
          }, this);
  
          // Only the connection path is mandatory
          if (!this._V.connection) throw new Error('link: no connection path in the markup');
  
          // partial rendering
          this.renderTools();
          this.renderVertexMarkers();
          this.renderArrowheadMarkers();
  
          V(this.el).append(children);
  
          // rendering labels has to be run after the link is appended to DOM tree. (otherwise <Text> bbox
          // returns zero values)
          this.renderLabels();
  
          // start watching the ends of the link for changes
          this.watchSource(this.model, this.model.get('source'))
              .watchTarget(this.model, this.model.get('target'))
              .update();
  
          return this;
      }
func_code_string: function() {
  
  	this.$el.empty();
  
          // A special markup can be given in the `properties.markup` property. This might be handy
          // if e.g. arrowhead markers should be `<image>` elements or any other element than `<path>`s.
          // `.connection`, `.connection-wrap`, `.marker-source` and `.marker-target` selectors
          // of elements with special meaning though. Therefore, those classes should be preserved in any
          // special markup passed in `properties.markup`.
          var children = V(this.model.get('markup') || this.model.markup);
  
          // custom markup may contain only one children
          if (!_.isArray(children)) children = [children];
  
          // Cache all children elements for quicker access.
          this._V = {} // vectorized markup;
          _.each(children, function(child) {
              var c = child.attr('class');
              c && (this._V[$.camelCase(c)] = child);
          }, this);
  
          // Only the connection path is mandatory
          if (!this._V.connection) throw new Error('link: no connection path in the markup');
  
          // partial rendering
          this.renderTools();
          this.renderVertexMarkers();
          this.renderArrowheadMarkers();
  
          V(this.el).append(children);
  
          // rendering labels has to be run after the link is appended to DOM tree. (otherwise <Text> bbox
          // returns zero values)
          this.renderLabels();
  
          // start watching the ends of the link for changes
          this.watchSource(this.model, this.model.get('source'))
              .watchTarget(this.model, this.model.get('target'))
              .update();
  
          return this;
      }
func_documentation_string: Rendering ----------