#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: charts/js/OHLCSeries.js

    /**
     * Provides functionality for creating a ohlc series.
     *
     * @module charts
     * @submodule series-ohlc
     */
    /**
     * The OHLCSeries class renders lines representing the open, high, low and close
     * values for a chart.
     *
     * @class OHLCSeries
     * @extends RangeSeries
     * @constructor
     * @param {Object} config (optional) Configuration parameters.
     * @submodule series-ohlc
     */
    function OHLCSeries()
    {
        OHLCSeries.superclass.constructor.apply(this, arguments);
    }

    OHLCSeries.NAME = "ohlcSeries";

    OHLCSeries.ATTRS = {
        /**
         * Read-only attribute indicating the type of series.
         *
         * @attribute type
         * @type String
         * @readOnly
         * @default ohlc
         */
        type: {
            value: "ohlc"
        },

        /**
         * The graphic in which drawings will be rendered.
         *
         * @attribute graphic
         * @type Graphic
         */
        graphic: {
            lazyAdd: false,

            setter: function(val) {
                //woraround for Attribute order of operations bug
                if(!this.get("rendered")) {
                    this.set("rendered", true);
                }
                this.set("upmarker", val.addShape({
                   type: "path"
                }));
                this.set("downmarker", val.addShape({
                   type: "path"
                }));
                return val;
            }
        },

        upmarker: {},

        downmarker: {}

        /**
         * Style properties used for drawing markers. This attribute is inherited from `RangeSeries`. Below are the default values:
         *  <dl>
         *      <dt>upmarker</dt><dd>Properties for a marker representing a period that closes higher than it opens.
         *          <dl>
         *              <dt>fill</dt><dd>A hash containing the following values:
         *                  <dl>
         *                      <dt>color</dt><dd>Color of the fill. The default value is "#00aa00".</dd>
         *                      </dd>
         *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker fill. The default value is 1.</dd>
         *                  </dl>
         *              </dd>
         *              <dt>border</dt><dd>A hash containing the following values:
         *                  <dl>
         *                      <dt>color</dt><dd>Color of the border. The default value is "#000000".</dd>
         *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker border. The default value is 1.</dd>
         *                      <dt>weight</dt><dd>Number indicating the width of the border. The default value is 0.</dd>
         *                  </dl>
         *              </dd>
         *          </dl>
         *      </dd>
         *      <dt>downmarker</dt><dd>Properties for a marker representing a period that opens higher than it closes.
         *          <dl>
         *              <dt>fill</dt><dd>A hash containing the following values:
         *                  <dl>
         *                      <dt>color</dt><dd>Color of the fill. The default value is "#aa0000".</dd>
         *                      </dd>
         *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker fill. The default value is 1.</dd>
         *                  </dl>
         *              </dd>
         *              <dt>border</dt><dd>A hash containing the following values:
         *                  <dl>
         *                      <dt>color</dt><dd>Color of the border. The default value is "#000000".</dd>
         *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker border. The default value is 1.</dd>
         *                      <dt>weight</dt><dd>Number indicating the width of the border. The default value is 0.</dd>
         *                  </dl>
         *              </dd>
         *          </dl>
         *      </dd>
         *  </dl>
         *
         * @attribute styles
         * @type Object
         */
    };

    Y.extend(OHLCSeries, Y.RangeSeries, {
        /**
         * Draws markers for an OHLC series.
         *
         * @method
         * @param {Array} xcoords The xcoordinates to be plotted.
         * @param {Array} opencoords The coordinates representing the open values.
         * @param {Array} highcoords The coordinates representing the high values.
         * @param {Array} lowcoords The coordinates representing the low values.
         * @param {Array} closecoords The coordinates representing the close values.
         * @param {Number} len The number of x coordinates to plot.
         * @param {Number} width The width of each ohlc marker.
         * @param {Number} halfwidth Half the width of each ohlc marker.
         * @param {Object} styles The styles for the series.
         * @private
         */
        _drawMarkers: function(xcoords, opencoords, highcoords, lowcoords, closecoords, len, width, halfwidth, styles)
        {
            var upmarker = this.get("upmarker"),
                downmarker = this.get("downmarker"),
                opencoord,
                highcoord,
                lowcoord,
                closecoord,
                left,
                right,
                leftPadding = styles.padding.left,
                marker,
                up;
            upmarker.set(styles.upmarker);
            downmarker.set(styles.downmarker);
            upmarker.clear();
            downmarker.clear();
            for(i = 0; i < len; i = i + 1)
            {
                cx = xcoords[i] + leftPadding;
                left = cx - halfwidth;
                right = cx + halfwidth;
                opencoord = opencoords[i];
                highcoord = highcoords[i];
                lowcoord = lowcoords[i];
                closecoord = closecoords[i];
                up = opencoord > closecoord;
                height = lowcoord - highcoord;
                marker = up ? upmarker : downmarker;
                marker.moveTo(left, opencoord);
                marker.lineTo(cx, opencoord);
                marker.moveTo(cx, highcoord);
                marker.lineTo(cx, lowcoord);
                marker.moveTo(cx, closecoord);
                marker.lineTo(right, closecoord);
            }
            upmarker.end();
            downmarker.end();
        },

        /**
         * Toggles visibility
         *
         * @method _toggleVisible
         * @param {Boolean} visible indicates visibilitye
         * @private
         */
        _toggleVisible: function(visible)
        {
            this.get("upmarker").set("visible", visible);
            this.get("downmarker").set("visible", visible);
        },

        /**
         * Destructor implementation for the CartesianSeries class. Calls destroy on all Graphic instances.
         *
         * @method destructor
         * @protected
         */
        destructor: function()
        {
            var upmarker = this.get("upmarker"),
                downmarker = this.get("downmarker");
            if(upmarker)
            {
                upmarker.destroy();
            }
            if(downmarker)
            {
                downmarker.destroy();
            }
        },

        /**
         * Gets the default value for the `styles` attribute. Overrides
         * base implementation.
         *
         * @method _getDefaultStyles
         * @return Object
         * @private
         */
        _getDefaultStyles: function()
        {
            var styles = {
                upmarker: {
                    stroke: {
                        color: "#00aa00",
                        alpha: 1,
                        weight: 1
                    }
                },
                downmarker: {
                    stroke: {
                        color: "#aa0000",
                        alpha: 1,
                        weight: 1
                    }
                }
            };
            return this._mergeStyles(styles, OHLCSeries.superclass._getDefaultStyles());
        }
    });
    Y.OHLCSeries = OHLCSeries;