PieSeries.js revision a5057260e5538ddf2faca20fa81271eeff2bf892
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * PieSeries visualizes data as a circular chart divided into wedges which represent data as a
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * percentage of a whole.
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @class PieSeries
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @constructor
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @extends MarkerSeries
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTrippY.PieSeries = Y.Base.create("pieSeries", Y.MarkerSeries, [], {
91d40744967aabc3e1c105820a22e279fdecc689Tripp _setMap: function()
91d40744967aabc3e1c105820a22e279fdecc689Tripp var id = "pieHotSpotMapi_" + Math.round(100000 * Math.random()),
91d40744967aabc3e1c105820a22e279fdecc689Tripp this._image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==";
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataReady", Y.bind(this._categoryDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataUpdate", Y.bind(this._categoryDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataReady", Y.bind(this._valueDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataUpdate", Y.bind(this._valueDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this.after("categoryAxisChange", this.categoryAxisChangeHandler);
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this.after("valueAxisChange", this.valueAxisChangeHandler);
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this._renderered = true;
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataReady", Y.bind(this._categoryDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp categoryAxis.after("dataUpdate", Y.bind(this._categoryDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataReady", Y.bind(this._valueDataChangeHandler, this));
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp valueAxis.after("dataUpdate", Y.bind(this._valueDataChangeHandler, this));
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * Constant used to generate unique id.
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @private (protected)
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * Handles updating the graph when the x < code>Axis</code> values
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp if(this._rendered && this.get("categoryKey") && this.get("valueKey"))
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @private (protected)
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * Handles updating the chart when the y <code>Axis</code> values
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp if(this._rendered && this.get("categoryKey") && this.get("valueKey"))
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @protected
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Draws the series. Overrides the base implementation.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @method draw
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp draw: function()
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp this._rendered = true;
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp var values = this.get("valueAxis").getDataByKey(this.get("valueKey")).concat(),
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp catValues = this.get("categoryAxis").getDataByKey(this.get("categoryKey")).concat(),
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp w = graph.get("width") - (padding.left + padding.right),
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp h = graph.get("height") - (padding.top + padding.bottom),
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp for(; i < itemCount; ++i)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp color:tfc ? tfc.shift() : this._getDefaultColor(i, "slice"),
91d40744967aabc3e1c105820a22e279fdecc689Tripp ax = x + Math.cos(startAngle / 180 * Math.PI) * radius,
91d40744967aabc3e1c105820a22e279fdecc689Tripp ay = y + Math.sin(startAngle / 180 * Math.PI) * radius,
91d40744967aabc3e1c105820a22e279fdecc689Tripp divAngle = (arc/(Math.floor(arc/10)) / 180) * Math.PI,
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (x + (radius * Math.cos(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (y + (radius * Math.sin(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (x - (radius * Math.cos(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp pts += ", " + (y - (radius * Math.sin(angleCoord + (divAngle * i))));
91d40744967aabc3e1c105820a22e279fdecc689Tripp areaNode.setAttribute("id", "hotSpot_" + seriesIndex + "_" + index);
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Resizes and positions markers based on a mouse interaction.
91d40744967aabc3e1c105820a22e279fdecc689Tripp * @protected
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @method updateMarkerState
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @param {String} type state of the marker
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @param {Number} i index of the marker
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp markerStyles = state == "off" || !styles[state] ? styles : styles[state];
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp indexStyles.fill.color = indexStyles.fill.colors[i % indexStyles.fill.colors.length];
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp indexStyles.fill.alpha = indexStyles.fill.alphas[i % indexStyles.fill.alphas.length];
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * Creates a shape to be used as a marker.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @method _createMarker
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @param {Object} styles Hash of style properties.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @param {Number} order Order of the series.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @param {Number} index Index within the series associated with the marker.
cc21b565833307c2b0b06deb4e3ab22c2a94be3eTripp * @return Shape
c6624d55071139dbc6ebd4252f6c7ee46a5800a9Tripp for(; i < len; ++i)
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultLineColors:["#426ab3", "#d09b2c", "#000000", "#b82837", "#b384b5", "#ff7200", "#779de3", "#cbc8ba", "#7ed7a6", "#007a6c"],
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultFillColors:["#6084d0", "#eeb647", "#6c6b5f", "#d6484f", "#ce9ed1", "#ff9f3b", "#93b7ff", "#e0ddd0", "#94ecba", "#309687"],
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultBorderColors:["#205096", "#b38206", "#000000", "#94001e", "#9d6fa0", "#e55b00", "#5e85c9", "#adab9e", "#6ac291", "#006457"],
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp _defaultSliceColors: ["#66007f", "#a86f41", "#295454", "#996ab2", "#e8cdb7", "#90bdbd","#000000","#c3b8ca", "#968373", "#678585"],
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @description Colors used if style colors are not specified
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Read-only attribute indicating the type of series.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute type
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type String
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @default pie
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Order of this instance of this <code>type</code>.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute order
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Number
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Reference to the <code>Graph</code> in which the series is drawn into.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute graph
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Graph
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Reference to the <code>Axis</code> instance used for assigning
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * category values to the graph.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute categoryAxis
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Axis
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Reference to the <code>Axis</code> instance used for assigning
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * series values to the graph.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute categoryAxis
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type Axis
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Indicates which array to from the hash of value arrays in
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * the category <code>Axis</code> instance.
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * Indicates which array to from the hash of value arrays in
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * the value <code>Axis</code> instance.
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Name used for for displaying category data
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute categoryDisplayName
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type String
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp getter: function()
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp return this._categoryDisplayName || this.get("categoryKey");
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Name used for for displaying value data
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @attribute valueDisplayName
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @type String
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp getter: function()
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp return this._valueDisplayName || this.get("valueKey");
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * Style properties used for drawing markers. This attribute is inherited from <code>MarkerSeries</code>. Below are the default values:
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>fill</dt><dd>A hash containing the following values:
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>colors</dt><dd>An array of colors to be used for the marker fills. The color for each marker is retrieved from the
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * array below:<br/>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <code>["#66007f", "#a86f41", "#295454", "#996ab2", "#e8cdb7", "#90bdbd","#000000","#c3b8ca", "#968373", "#678585"]</code>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>alphas</dt><dd>An array of alpha references (Number from 0 to 1) indicating the opacity of each marker fill. The default value is [1].</dd>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>border</dt><dd>A hash containing the following values:
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>color</dt><dd>An array of colors to be used for the marker borders. The color for each marker is retrieved from the
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * array below:<br/>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <code>["#205096", "#b38206", "#000000", "#94001e", "#9d6fa0", "#e55b00", "#5e85c9", "#adab9e", "#6ac291", "#006457"]</code>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker border. The default value is 1.</dd>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>weight</dt><dd>Number indicating the width of the border. The default value is 1.</dd>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * <dt>over</dt><dd>hash containing styles for markers when highlighted by a <code>mouseover</code> event. The default
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * values for each style is null. When an over style is not set, the non-over value will be used. For example,
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * the default value for <code>marker.over.fill.color</code> is equivalent to <code>marker.fill.color</code>.</dd>
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @attribute styles
0abcc4acb057a275ed7f098295ecd5de79b6a510Tripp * @type Object