| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- import H from './../parts/Globals.js';
 
- import './../parts/Utilities.js';
 
- import eventEmitterMixin from './eventEmitterMixin.js';
 
- /**
 
-  * A control point class which is a connection between controllable
 
-  * transform methods and a user actions.
 
-  *
 
-  * @constructor
 
-  * @mixes eventEmitterMixin
 
-  * @memberOf Annotation
 
-  *
 
-  * @param {Highcharts.Chart} chart a chart instance
 
-  * @param {Object} target a controllable instance which is a target for
 
-  *        a control point
 
-  * @param {Annotation.ControlPoint.Options} options an options object
 
-  * @param {number} [index]
 
-  **/
 
- function ControlPoint(chart, target, options, index) {
 
-     this.chart = chart;
 
-     this.target = target;
 
-     this.options = options;
 
-     this.index = H.pick(options.index, index);
 
- }
 
- /**
 
-  * @typedef {Object} Annotation.ControlPoint.Position
 
-  * @property {number} x
 
-  * @property {number} y
 
-  */
 
- /**
 
-  * @callback Annotation.ControlPoint.Positioner
 
-  * @param {Object} e event
 
-  * @param {Controllable} target
 
-  * @return {Annotation.ControlPoint.Position} position
 
-  */
 
- /**
 
-  * @typedef {Object} Annotation.ControlPoint.Options
 
-  * @property {string} symbol
 
-  * @property {number} width
 
-  * @property {number} height
 
-  * @property {Object} style
 
-  * @property {boolean} visible
 
-  * @property {Annotation.ControlPoint.Positioner} positioner
 
-  * @property {Object} events
 
-  */
 
- H.extend(
 
-     ControlPoint.prototype,
 
-     eventEmitterMixin
 
- );
 
- /**
 
-  * Set the visibility.
 
-  *
 
-  * @param {boolean} [visible]
 
-  **/
 
- ControlPoint.prototype.setVisibility = function (visible) {
 
-     this.graphic.attr('visibility', visible ? 'visible' : 'hidden');
 
-     this.options.visible = visible;
 
- };
 
- /**
 
-  * Render the control point.
 
-  */
 
- ControlPoint.prototype.render = function () {
 
-     var chart = this.chart,
 
-         options = this.options;
 
-     this.graphic = chart.renderer
 
-         .symbol(
 
-             options.symbol,
 
-             0,
 
-             0,
 
-             options.width,
 
-             options.height
 
-         )
 
-         .add(chart.controlPointsGroup)
 
-         .css(options.style);
 
-     this.setVisibility(options.visible);
 
-     this.addEvents();
 
- };
 
- /**
 
-  * Redraw the control point.
 
-  *
 
-  * @param {boolean} [animation]
 
-  */
 
- ControlPoint.prototype.redraw = function (animation) {
 
-     this.graphic[animation ? 'animate' : 'attr'](
 
-         this.options.positioner.call(this, this.target)
 
-     );
 
- };
 
- /**
 
-  * Destroy the control point.
 
-  */
 
- ControlPoint.prototype.destroy = function () {
 
-     eventEmitterMixin.destroy.call(this);
 
-     if (this.graphic) {
 
-         this.graphic = this.graphic.destroy();
 
-     }
 
-     this.chart = null;
 
-     this.target = null;
 
-     this.options = null;
 
- };
 
- /**
 
-  * Update the control point.
 
-  */
 
- ControlPoint.prototype.update = function (userOptions) {
 
-     var chart = this.chart,
 
-         target = this.target,
 
-         index = this.index,
 
-         options = H.merge(true, this.options, userOptions);
 
-     this.destroy();
 
-     this.constructor(chart, target, options, index);
 
-     this.render(chart.controlPointsGroup);
 
-     this.redraw();
 
- };
 
- export default ControlPoint;
 
 
  |