whole_func_string: function(event) {
        if (context.isZooming) {
          // When the mouse moves >200px from the chart edge, cancel the zoom.
          var d = distanceFromChart(event, g);
          if (d < DRAG_EDGE_MARGIN) {
            DygraphInteraction.moveZoom(event, g, context);
          } else {
            if (context.dragEndX !== null) {
              context.dragEndX = null;
              context.dragEndY = null;
              g.clearZoomRect_();
            }
          }
        } else if (context.isPanning) {
          DygraphInteraction.movePan(event, g, context);
        }
      }
func_code_string: function(event) {
        if (context.isZooming) {
          // When the mouse moves >200px from the chart edge, cancel the zoom.
          var d = distanceFromChart(event, g);
          if (d < DRAG_EDGE_MARGIN) {
            DygraphInteraction.moveZoom(event, g, context);
          } else {
            if (context.dragEndX !== null) {
              context.dragEndX = null;
              context.dragEndY = null;
              g.clearZoomRect_();
            }
          }
        } else if (context.isPanning) {
          DygraphInteraction.movePan(event, g, context);
        }
      }
func_documentation_string: Note: we register mousemove/mouseup on document to allow some leeway for events to move outside of the chart. Interaction model events get registered on the canvas, which is too small to allow this.