docs: function Trendline() { // Closure function
      var p = {},  // Container for private, direct access mixed in variables
          dispatch = d3_dispatch('mouseenter', 'mouseout', 'mousemove', 'drag', 'dragstart', 'dragend');
  
      function trendline(g) {
        var group = plot.groupSelect(g, plot.dataMapper.unity),
            trendlineGroup = group.entry.append('g').attr('class', 'trendline');
  
        trendlineGroup.append('path').attr('class', 'body');
        trendlineGroup.append('circle').attr({ class: 'start', r: 1 });
        trendlineGroup.append('circle').attr({ class: 'end', r: 1 });
  
        var interaction = group.entry.append('g').attr('class', 'interaction').style({ opacity: 0, fill: 'none' })
          .call(plot.interaction.mousedispatch(dispatch));
  
        interaction.append('path').attr('class', 'body').style('stroke-width', 16);
        interaction.append('circle').attr({ class: 'start', r: 8 });
        interaction.append('circle').attr({ class: 'end', r: 8 });
  
        trendline.refresh(g);
      }
  
      trendline.refresh = function(g) {
        refresh(g, p.accessor, p.xScale, p.yScale);
      };
  
      trendline.drag = function(g) {
        g.selectAll('.interaction circle.start')
          .call(dragEnd(dispatch, p.accessor, p.accessor.sd, p.xScale, p.accessor.sv, p.yScale));
        g.selectAll('.interaction circle.end')
          .call(dragEnd(dispatch, p.accessor, p.accessor.ed, p.xScale, p.accessor.ev, p.yScale));
        g.selectAll('.interaction path.body')
          .call(dragBody(dispatch, p.accessor, p.xScale, p.yScale));
      };
  
      // Mixin 'superclass' methods and variables
      plotMixin(trendline, p)
        .plot(accessor_trendline())
        .on(dispatch);
  
      return trendline;
    }