diff -r 322d0feea350 -r 89ef5ed3c48b src/cm/media/js/lib/yui/yui_3.10.3/build/series-column-stacked/series-column-stacked.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui_3.10.3/build/series-column-stacked/series-column-stacked.js Tue Jul 16 14:29:46 2013 +0200 @@ -0,0 +1,358 @@ +/* +YUI 3.10.3 (build 2fb5187) +Copyright 2013 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +http://yuilibrary.com/license/ +*/ + +YUI.add('series-column-stacked', function (Y, NAME) { + +/** + * Provides functionality for creating a stacked column series. + * + * @module charts + * @submodule series-column-stacked + */ +var Y_Lang = Y.Lang; + +/** + * The StackedColumnSeries renders column chart in which series are stacked vertically to show + * their contribution to the cumulative total. + * + * @class StackedColumnSeries + * @extends ColumnSeries + * @uses StackingUtil + * @constructor + * @param {Object} config (optional) Configuration parameters. + * @submodule series-column-stacked + */ +Y.StackedColumnSeries = Y.Base.create("stackedColumnSeries", Y.ColumnSeries, [Y.StackingUtil], { + /** + * Draws the series. + * + * @method drawSeries + * @protected + */ + drawSeries: function() + { + if(this.get("xcoords").length < 1) + { + return; + } + var isNumber = Y_Lang.isNumber, + style = Y.clone(this.get("styles").marker), + w = style.width, + h = style.height, + xcoords = this.get("xcoords"), + ycoords = this.get("ycoords"), + i = 0, + len = xcoords.length, + top = ycoords[0], + seriesCollection = this.get("seriesTypeCollection"), + ratio, + order = this.get("order"), + graphOrder = this.get("graphOrder"), + left, + marker, + fillColors, + borderColors, + lastCollection, + negativeBaseValues, + positiveBaseValues, + useOrigin = order === 0, + totalWidth = len * w, + dimensions = { + width: [], + height: [] + }, + xvalues = [], + yvalues = [], + groupMarkers = this.get("groupMarkers"); + if(Y_Lang.isArray(style.fill.color)) + { + fillColors = style.fill.color.concat(); + } + if(Y_Lang.isArray(style.border.color)) + { + borderColors = style.border.color.concat(); + } + this._createMarkerCache(); + if(totalWidth > this.get("width")) + { + ratio = this.get("width")/totalWidth; + w *= ratio; + w = Math.max(w, 1); + } + if(!useOrigin) + { + lastCollection = seriesCollection[order - 1]; + negativeBaseValues = lastCollection.get("negativeBaseValues"); + positiveBaseValues = lastCollection.get("positiveBaseValues"); + if(!negativeBaseValues || !positiveBaseValues) + { + useOrigin = true; + positiveBaseValues = []; + negativeBaseValues = []; + } + } + else + { + negativeBaseValues = []; + positiveBaseValues = []; + } + this.set("negativeBaseValues", negativeBaseValues); + this.set("positiveBaseValues", positiveBaseValues); + for(i = 0; i < len; ++i) + { + left = xcoords[i]; + top = ycoords[i]; + + if(!isNumber(top) || !isNumber(left)) + { + if(useOrigin) + { + negativeBaseValues[i] = this._bottomOrigin; + positiveBaseValues[i] = this._bottomOrigin; + } + this._markers.push(null); + continue; + } + if(useOrigin) + { + h = Math.abs(this._bottomOrigin - top); + if(top < this._bottomOrigin) + { + positiveBaseValues[i] = top; + negativeBaseValues[i] = this._bottomOrigin; + } + else if(top > this._bottomOrigin) + { + positiveBaseValues[i] = this._bottomOrigin; + negativeBaseValues[i] = top; + top -= h; + } + else + { + positiveBaseValues[i] = top; + negativeBaseValues[i] = top; + } + } + else + { + if(top > this._bottomOrigin) + { + top += (negativeBaseValues[i] - this._bottomOrigin); + h = top - negativeBaseValues[i]; + negativeBaseValues[i] = top; + top -= h; + } + else if(top <= this._bottomOrigin) + { + top = positiveBaseValues[i] - (this._bottomOrigin - top); + h = positiveBaseValues[i] - top; + positiveBaseValues[i] = top; + } + } + if(!isNaN(h) && h > 0) + { + left -= w/2; + if(groupMarkers) + { + dimensions.width[i] = w; + dimensions.height[i] = h; + xvalues.push(left); + yvalues.push(top); + } + else + { + style.width = w; + style.height = h; + style.x = left; + style.y = top; + if(fillColors) + { + style.fill.color = fillColors[i % fillColors.length]; + } + if(borderColors) + { + style.border.color = borderColors[i % borderColors.length]; + } + marker = this.getMarker(style, graphOrder, i); + } + } + else if(!groupMarkers) + { + this._markers.push(null); + } + } + if(groupMarkers) + { + this._createGroupMarker({ + fill: style.fill, + border: style.border, + dimensions: dimensions, + xvalues: xvalues, + yvalues: yvalues, + shape: style.shape + }); + } + else + { + this._clearMarkerCache(); + } + }, + + /** + * Resizes and positions markers based on a mouse interaction. + * + * @method updateMarkerState + * @param {String} type state of the marker + * @param {Number} i index of the marker + * @protected + */ + updateMarkerState: function(type, i) + { + if(this._markers && this._markers[i]) + { + var styles, + markerStyles, + state = this._getState(type), + xcoords = this.get("xcoords"), + marker = this._markers[i], + offset = 0, + fillColor, + borderColor; + styles = this.get("styles").marker; + offset = styles.width * 0.5; + markerStyles = state === "off" || !styles[state] ? Y.clone(styles) : Y.clone(styles[state]); + markerStyles.height = marker.get("height"); + markerStyles.x = (xcoords[i] - offset); + markerStyles.y = marker.get("y"); + markerStyles.id = marker.get("id"); + fillColor = markerStyles.fill.color; + borderColor = markerStyles.border.color; + if(Y_Lang.isArray(fillColor)) + { + markerStyles.fill.color = fillColor[i % fillColor.length]; + } + else + { + markerStyles.fill.color = this._getItemColor(markerStyles.fill.color, i); + } + if(Y_Lang.isArray(borderColor)) + { + markerStyles.border.color = borderColor[i % borderColor.length]; + } + else + { + markerStyles.border.color = this._getItemColor(markerStyles.border.color, i); + } + marker.set(markerStyles); + } + }, + + /** + * Gets the default values for the markers. + * + * @method _getPlotDefaults + * @return Object + * @protected + */ + _getPlotDefaults: function() + { + var defs = { + fill:{ + type: "solid", + alpha: 1, + colors:null, + alphas: null, + ratios: null + }, + border:{ + weight: 0, + alpha: 1 + }, + width: 24, + height: 24, + shape: "rect", + + padding:{ + top: 0, + left: 0, + right: 0, + bottom: 0 + } + }; + defs.fill.color = this._getDefaultColor(this.get("graphOrder"), "fill"); + defs.border.color = this._getDefaultColor(this.get("graphOrder"), "border"); + return defs; + } +}, { + ATTRS: { + /** + * Read-only attribute indicating the type of series. + * + * @attribute type + * @type String + * @default stackedColumn + */ + type: { + value: "stackedColumn" + }, + + /** + * @attribute negativeBaseValues + * @type Array + * @default null + * @private + */ + negativeBaseValues: { + value: null + }, + + /** + * @attribute positiveBaseValues + * @type Array + * @default null + * @private + */ + positiveBaseValues: { + value: null + } + + /** + * Style properties used for drawing markers. This attribute is inherited from `ColumnSeries`. Below are the default values: + *