charts.js
2060 lines
| 47.8 KiB
| application/javascript
|
JavascriptLexer
r547 | /* | |||
r1073 | Copyright (c) 2010, Yahoo! Inc. All rights reserved. | |||
r547 | Code licensed under the BSD License: | |||
r1073 | http://developer.yahoo.com/yui/license.html | |||
version: 2.8.2r1 | ||||
r547 | */ | |||
/** | ||||
* The Charts widget provides a Flash control for displaying data | ||||
* graphically by series across A-grade browsers with Flash Player installed. | ||||
* | ||||
* @module charts | ||||
* @requires yahoo, dom, event, datasource | ||||
* @title Charts Widget | ||||
* @experimental | ||||
*/ | ||||
/****************************************************************************/ | ||||
/****************************************************************************/ | ||||
/****************************************************************************/ | ||||
/** | ||||
* Chart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class Chart | ||||
* @uses YAHOO.util.AttributeProvider | ||||
* @constructor | ||||
* @param type {String} The char type. May be "line", "column", "bar", or "pie" | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.Chart = function(type, containerId, dataSource, configurationAttributes) | ||||
{ | ||||
this._type = type; | ||||
this._dataSource = dataSource; | ||||
var possibleParams = {align:"", allowNetworking:"", allowScriptAccess:"", base:"", bgcolor:"", menu:"", name:"", quality:"", salign:"", scale:"", tabindex:"", wmode:""}; | ||||
var attributes = {fixedAttributes:{allowScriptAccess:"always"}, flashVars:{allowedDomain : document.location.hostname}, backgroundColor:"#ffffff", host:this, version:9.045}; | ||||
for(var i in configurationAttributes) | ||||
{ | ||||
if(possibleParams.hasOwnProperty(i)) | ||||
{ | ||||
attributes.fixedAttributes[i] = configurationAttributes[i]; | ||||
} | ||||
else | ||||
{ | ||||
attributes[i] = configurationAttributes[i]; | ||||
} | ||||
} | ||||
this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen"); | ||||
if(attributes.version && attributes.version != null && attributes.version != undefined && attributes.version != "undefined") | ||||
{ | ||||
var version = (/\w*.\w*/.exec(((attributes.version).toString()).replace(/.0./g, "."))).toString(); | ||||
var verSplit = version.split("."); | ||||
version = verSplit[0] + "."; | ||||
switch((verSplit[1].toString()).length) | ||||
{ | ||||
case 1: | ||||
version += "00"; | ||||
break; | ||||
case 2: | ||||
version += "0"; | ||||
break; | ||||
} | ||||
version += verSplit[1]; | ||||
attributes.version = parseFloat(version); | ||||
} | ||||
this._swfURL = YAHOO.widget.Chart.SWFURL; | ||||
this._containerID = containerId; | ||||
this._attributes = attributes | ||||
this._swfEmbed = new YAHOO.widget.SWF(containerId, YAHOO.widget.Chart.SWFURL, attributes); | ||||
this._swf = this._swfEmbed.swf; | ||||
this._swfEmbed.subscribe("swfReady", this._eventHandler, this, true); | ||||
/** | ||||
* Fires when the SWF is initialized and communication is possible. | ||||
* @event contentReady | ||||
*/ | ||||
//Fix for iframe cross-domain issue with FF2x | ||||
try | ||||
{ | ||||
this.createEvent("contentReady"); | ||||
} | ||||
catch(e){} | ||||
/** | ||||
* Fires when the user moves the mouse over the bounds of an item renderer in the chart. | ||||
* | ||||
* @event itemMouseOverEvent | ||||
* @param event.type {String} The event type | ||||
* @param event.item {Object} The data displayed by the renderer | ||||
* @param event.index {Number} The position within the series that the item appears. | ||||
* @param event.seriesIndex {Number} The position within the series definition that the series appears. | ||||
* @param event.x {Number} The horizontal position of the mouse, relative to the SWF. | ||||
* @param event.y {Number} The vertical position of the mouse, relative to the SWF. | ||||
*/ | ||||
this.createEvent("itemMouseOverEvent"); | ||||
/** | ||||
* Fires when the user moves the mouse out of the bounds of an item renderer in the chart. | ||||
* | ||||
* @event itemMouseOutEvent | ||||
* @param event.type {String} The event type | ||||
* @param event.item {Object} The data displayed by the renderer | ||||
* @param event.index {Number} The position within the series that the item appears. | ||||
* @param event.seriesIndex {Number} The position within the series definition that the series appears. | ||||
* @param event.x {Number} The horizontal position of the mouse, relative to the SWF. | ||||
* @param event.y {Number} The vertical position of the mouse, relative to the SWF. | ||||
*/ | ||||
this.createEvent("itemMouseOutEvent"); | ||||
/** | ||||
* Fires when the user clicks an item renderer in the chart with the mouse. | ||||
* | ||||
* @event itemClickEvent | ||||
* @param event.type {String} The event type | ||||
* @param event.item {Object} The data displayed by the renderer | ||||
* @param event.index {Number} The position within the series that the item appears. | ||||
* @param event.seriesIndex {Number} The position within the series definition that the series appears. | ||||
* @param event.x {Number} The horizontal position of the mouse, relative to the SWF. | ||||
* @param event.y {Number} The vertical position of the mouse, relative to the SWF. | ||||
*/ | ||||
this.createEvent("itemClickEvent"); | ||||
/** | ||||
* Fires when the user double-clicks an item renderer in the chart with the mouse. | ||||
* | ||||
* @event itemDoubleClickEvent | ||||
* @param event.type {String} The event type | ||||
* @param event.item {Object} The data displayed by the renderer | ||||
* @param event.index {Number} The position within the series that the item appears. | ||||
* @param event.seriesIndex {Number} The position within the series definition that the series appears. | ||||
* @param event.x {Number} The horizontal position of the mouse, relative to the SWF. | ||||
* @param event.y {Number} The vertical position of the mouse, relative to the SWF. | ||||
*/ | ||||
this.createEvent("itemDoubleClickEvent"); | ||||
/** | ||||
* Fires when the user presses the mouse down on an item to initiate a drag action. | ||||
* | ||||
* @event itemDragStartEvent | ||||
* @param event.type {String} The event type | ||||
* @param event.item {Object} The data displayed by the renderer | ||||
* @param event.index {Number} The position within the series that the item appears. | ||||
* @param event.seriesIndex {Number} The position within the series definition that the series appears. | ||||
* @param event.x {Number} The horizontal position of the mouse, relative to the SWF. | ||||
* @param event.y {Number} The vertical position of the mouse, relative to the SWF. | ||||
*/ | ||||
this.createEvent("itemDragStartEvent"); | ||||
/** | ||||
* Fires when the user moves the mouse during a drag action. | ||||
* | ||||
* @event itemDragEvent | ||||
* @param event.type {String} The event type | ||||
* @param event.item {Object} The data displayed by the renderer | ||||
* @param event.index {Number} The position within the series that the item appears. | ||||
* @param event.seriesIndex {Number} The position within the series definition that the series appears. | ||||
* @param event.x {Number} The horizontal position of the mouse, relative to the SWF. | ||||
* @param event.y {Number} The vertical position of the mouse, relative to the SWF. | ||||
*/ | ||||
this.createEvent("itemDragEvent"); | ||||
/** | ||||
* Fires when the user releases the mouse during a drag action. | ||||
* | ||||
* @event itemDragEndEvent | ||||
* @param event.type {String} The event type | ||||
* @param event.item {Object} The data displayed by the renderer | ||||
* @param event.index {Number} The position within the series that the item appears. | ||||
* @param event.seriesIndex {Number} The position within the series definition that the series appears. | ||||
* @param event.x {Number} The horizontal position of the mouse, relative to the SWF. | ||||
* @param event.y {Number} The vertical position of the mouse, relative to the SWF. | ||||
*/ | ||||
this.createEvent("itemDragEndEvent"); | ||||
}; | ||||
YAHOO.extend(YAHOO.widget.Chart, YAHOO.util.AttributeProvider, | ||||
{ | ||||
/** | ||||
* The type of this chart instance. | ||||
* @property _type | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_type: null, | ||||
/** | ||||
* The id returned from the DataSource's setInterval function. | ||||
* @property _pollingID | ||||
* @type Number | ||||
* @private | ||||
*/ | ||||
_pollingID: null, | ||||
/** | ||||
* The time, in ms, between requests for data. | ||||
* @property _pollingInterval | ||||
* @type Number | ||||
* @private | ||||
*/ | ||||
_pollingInterval: null, | ||||
/** | ||||
* Stores a reference to the dataTipFunction created by | ||||
* YAHOO.widget.Chart.createProxyFunction() | ||||
* @property _dataTipFunction | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_dataTipFunction: null, | ||||
/** | ||||
* Stores a reference to the legendLabelFunction created by | ||||
* YAHOO.widget.Chart.createProxyFunction() | ||||
* @property _legendLabelFunction | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_legendLabelFunction: null, | ||||
/** | ||||
* Stores references to series function values created by | ||||
* YAHOO.widget.Chart.createProxyFunction() | ||||
* @property _seriesFunctions | ||||
* @type Array | ||||
* @private | ||||
*/ | ||||
_seriesFunctions: null, | ||||
/** | ||||
* Public accessor to the unique name of the Chart instance. | ||||
* | ||||
* @method toString | ||||
* @return {String} Unique name of the Chart instance. | ||||
*/ | ||||
toString: function() | ||||
{ | ||||
return "Chart " + this._id; | ||||
}, | ||||
/** | ||||
* Sets a single style value on the Chart instance. | ||||
* | ||||
* @method setStyle | ||||
* @param name {String} Name of the Chart style value to change. | ||||
* @param value {Object} New value to pass to the Chart style. | ||||
*/ | ||||
setStyle: function(name, value) | ||||
{ | ||||
//we must jsonify this because Flash Player versions below 9.0.60 don't handle | ||||
//complex ExternalInterface parsing correctly | ||||
value = YAHOO.lang.JSON.stringify(value); | ||||
this._swf.setStyle(name, value); | ||||
}, | ||||
/** | ||||
* Resets all styles on the Chart instance. | ||||
* | ||||
* @method setStyles | ||||
* @param styles {Object} Initializer for all Chart styles. | ||||
*/ | ||||
setStyles: function(styles) | ||||
{ | ||||
//we must jsonify this because Flash Player versions below 9.0.60 don't handle | ||||
//complex ExternalInterface parsing correctly | ||||
styles = YAHOO.lang.JSON.stringify(styles); | ||||
this._swf.setStyles(styles); | ||||
}, | ||||
/** | ||||
* Sets the styles on all series in the Chart. | ||||
* | ||||
* @method setSeriesStyles | ||||
* @param styles {Array} Initializer for all Chart series styles. | ||||
*/ | ||||
setSeriesStyles: function(styles) | ||||
{ | ||||
//we must jsonify this because Flash Player versions below 9.0.60 don't handle | ||||
//complex ExternalInterface parsing correctly | ||||
for(var i = 0; i < styles.length; i++) | ||||
{ | ||||
styles[i] = YAHOO.lang.JSON.stringify(styles[i]); | ||||
} | ||||
this._swf.setSeriesStyles(styles); | ||||
}, | ||||
destroy: function() | ||||
{ | ||||
//stop polling if needed | ||||
if(this._dataSource !== null) | ||||
{ | ||||
if(this._pollingID !== null) | ||||
{ | ||||
this._dataSource.clearInterval(this._pollingID); | ||||
this._pollingID = null; | ||||
} | ||||
} | ||||
//remove proxy functions | ||||
if(this._dataTipFunction) | ||||
{ | ||||
YAHOO.widget.Chart.removeProxyFunction(this._dataTipFunction); | ||||
} | ||||
if(this._legendLabelFunction) | ||||
{ | ||||
YAHOO.widget.Chart.removeProxyFunction(this._legendLabelFunction); | ||||
} | ||||
//kill the Flash Player instance | ||||
if(this._swf) | ||||
{ | ||||
var container = YAHOO.util.Dom.get(this._containerID); | ||||
container.removeChild(this._swf); | ||||
} | ||||
var instanceName = this._id; | ||||
//null out properties | ||||
for(var prop in this) | ||||
{ | ||||
if(YAHOO.lang.hasOwnProperty(this, prop)) | ||||
{ | ||||
this[prop] = null; | ||||
} | ||||
} | ||||
}, | ||||
/** | ||||
* Initializes the attributes. | ||||
* | ||||
* @method _initAttributes | ||||
* @private | ||||
*/ | ||||
_initAttributes: function(attributes) | ||||
{ | ||||
//YAHOO.widget.Chart.superclass._initAttributes.call(this, attributes); | ||||
/** | ||||
* @attribute wmode | ||||
* @description Sets the window mode of the Flash Player control. May be | ||||
* "window", "opaque", or "transparent". Only available in the constructor | ||||
* because it may not be set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute expressInstall | ||||
* @description URL pointing to a SWF file that handles Flash Player's express | ||||
* install feature. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute version | ||||
* @description Minimum required version for the SWF file. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute backgroundColor | ||||
* @description The background color of the SWF. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
/** | ||||
* @attribute altText | ||||
* @description The alternative text to provide for screen readers and other assistive technology. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("altText", | ||||
{ | ||||
method: this._setAltText, | ||||
getter: this._getAltText | ||||
}); | ||||
/** | ||||
* @attribute swfURL | ||||
* @description Absolute or relative URL to the SWF displayed by the Chart. Only available in the constructor because it may not be | ||||
* set after Flash Player has been embedded in the page. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("swfURL", | ||||
{ | ||||
getter: this._getSWFURL | ||||
}); | ||||
/** | ||||
* @attribute request | ||||
* @description Request to be sent to the Chart's DataSource. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("request", | ||||
{ | ||||
method: this._setRequest, | ||||
getter: this._getRequest | ||||
}); | ||||
/** | ||||
* @attribute dataSource | ||||
* @description The DataSource instance to display in the Chart. | ||||
* @type DataSource | ||||
*/ | ||||
this.setAttributeConfig("dataSource", | ||||
{ | ||||
method: this._setDataSource, | ||||
getter: this._getDataSource | ||||
}); | ||||
/** | ||||
* @attribute series | ||||
* @description Defines the series to be displayed by the Chart. | ||||
* @type Array | ||||
*/ | ||||
this.setAttributeConfig("series", | ||||
{ | ||||
method: this._setSeriesDefs, | ||||
getter: this._getSeriesDefs | ||||
}); | ||||
/** | ||||
* @attribute categoryNames | ||||
* @description Defines the names of the categories to be displayed in the Chart.. | ||||
* @type Array | ||||
*/ | ||||
this.setAttributeConfig("categoryNames", | ||||
{ | ||||
validator: YAHOO.lang.isArray, | ||||
method: this._setCategoryNames, | ||||
getter: this._getCategoryNames | ||||
}); | ||||
/** | ||||
* @attribute dataTipFunction | ||||
* @description The string representation of a globally-accessible function | ||||
* that may be called by the SWF to generate the datatip text for a Chart's item. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("dataTipFunction", | ||||
{ | ||||
method: this._setDataTipFunction, | ||||
getter: this._getDataTipFunction | ||||
}); | ||||
/** | ||||
* @attribute legendLabelFunction | ||||
* @description The string representation of a globally-accessible function | ||||
* that may be called by the SWF to format the labels of a Chart's legend. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("legendLabelFunction", | ||||
{ | ||||
method: this._setLegendLabelFunction, | ||||
getter: this._legendLabelFunction | ||||
}); | ||||
/** | ||||
* @attribute polling | ||||
* @description A numeric value indicating the number of milliseconds between | ||||
* polling requests to the DataSource. | ||||
* @type Number | ||||
*/ | ||||
this.setAttributeConfig("polling", | ||||
{ | ||||
method: this._setPolling, | ||||
getter: this._getPolling | ||||
}); | ||||
}, | ||||
/** | ||||
* Handles swfReady event from SWF. | ||||
* | ||||
* @method _eventHandler | ||||
* @private | ||||
*/ | ||||
_eventHandler: function(event) | ||||
{ | ||||
if(event.type == "swfReady") | ||||
{ | ||||
this._swf = this._swfEmbed._swf; | ||||
this._loadHandler(); | ||||
this.fireEvent("contentReady"); | ||||
} | ||||
}, | ||||
/** | ||||
* Called when the SWF is ready for communication. Sets the type, initializes | ||||
* the styles, and sets the DataSource. | ||||
* | ||||
* @method _loadHandler | ||||
* @private | ||||
*/ | ||||
_loadHandler: function() | ||||
{ | ||||
//the type is set separately because it must be first! | ||||
if(!this._swf || !this._swf.setType) return; | ||||
this._swf.setType(this._type); | ||||
//set initial styles | ||||
if(this._attributes.style) | ||||
{ | ||||
var style = this._attributes.style; | ||||
this.setStyles(style); | ||||
} | ||||
this._initialized = false; | ||||
this._initAttributes(this._attributes); | ||||
this.setAttributes(this._attributes, true); | ||||
this._initialized = true; | ||||
if(this._dataSource) | ||||
{ | ||||
this.set("dataSource", this._dataSource); | ||||
} | ||||
}, | ||||
/** | ||||
* Sends (or resends) the request to the DataSource. | ||||
* | ||||
* @method refreshData | ||||
*/ | ||||
refreshData: function() | ||||
{ | ||||
if(!this._initialized) | ||||
{ | ||||
return; | ||||
} | ||||
if(this._dataSource !== null) | ||||
{ | ||||
if(this._pollingID !== null) | ||||
{ | ||||
this._dataSource.clearInterval(this._pollingID); | ||||
this._pollingID = null; | ||||
} | ||||
if(this._pollingInterval > 0) | ||||
{ | ||||
this._pollingID = this._dataSource.setInterval(this._pollingInterval, this._request, this._loadDataHandler, this); | ||||
} | ||||
this._dataSource.sendRequest(this._request, this._loadDataHandler, this); | ||||
} | ||||
}, | ||||
/** | ||||
* Called when the DataSource receives new data. The series definitions are used | ||||
* to build a data provider for the SWF chart. | ||||
* | ||||
* @method _loadDataHandler | ||||
* @private | ||||
*/ | ||||
_loadDataHandler: function(request, response, error) | ||||
{ | ||||
if(this._swf) | ||||
{ | ||||
if(error) | ||||
{ | ||||
} | ||||
else | ||||
{ | ||||
var i; | ||||
if(this._seriesFunctions) | ||||
{ | ||||
var count = this._seriesFunctions.length; | ||||
for(i = 0; i < count; i++) | ||||
{ | ||||
YAHOO.widget.Chart.removeProxyFunction(this._seriesFunctions[i]); | ||||
} | ||||
this._seriesFunctions = null; | ||||
} | ||||
this._seriesFunctions = []; | ||||
//make a copy of the series definitions so that we aren't | ||||
//editing them directly. | ||||
var dataProvider = []; | ||||
var seriesCount = 0; | ||||
var currentSeries = null; | ||||
if(this._seriesDefs !== null) | ||||
{ | ||||
seriesCount = this._seriesDefs.length; | ||||
for(i = 0; i < seriesCount; i++) | ||||
{ | ||||
currentSeries = this._seriesDefs[i]; | ||||
var clonedSeries = {}; | ||||
for(var prop in currentSeries) | ||||
{ | ||||
if(YAHOO.lang.hasOwnProperty(currentSeries, prop)) | ||||
{ | ||||
if(prop == "style") | ||||
{ | ||||
if(currentSeries.style !== null) | ||||
{ | ||||
clonedSeries.style = YAHOO.lang.JSON.stringify(currentSeries.style); | ||||
} | ||||
} | ||||
else if(prop == "labelFunction") | ||||
{ | ||||
if(currentSeries.labelFunction !== null) | ||||
{ | ||||
clonedSeries.labelFunction = YAHOO.widget.Chart.getFunctionReference(currentSeries.labelFunction); | ||||
this._seriesFunctions.push(clonedSeries.labelFunction); | ||||
} | ||||
} | ||||
else if(prop == "dataTipFunction") | ||||
{ | ||||
if(currentSeries.dataTipFunction !== null) | ||||
{ | ||||
clonedSeries.dataTipFunction = YAHOO.widget.Chart.getFunctionReference(currentSeries.dataTipFunction); | ||||
this._seriesFunctions.push(clonedSeries.dataTipFunction); | ||||
} | ||||
} | ||||
else if(prop == "legendLabelFunction") | ||||
{ | ||||
if(currentSeries.legendLabelFunction !== null) | ||||
{ | ||||
clonedSeries.legendLabelFunction = YAHOO.widget.Chart.getFunctionReference(currentSeries.legendLabelFunction); | ||||
this._seriesFunctions.push(clonedSeries.legendLabelFunction); | ||||
} | ||||
} | ||||
else | ||||
{ | ||||
clonedSeries[prop] = currentSeries[prop]; | ||||
} | ||||
} | ||||
} | ||||
dataProvider.push(clonedSeries); | ||||
} | ||||
} | ||||
if(seriesCount > 0) | ||||
{ | ||||
for(i = 0; i < seriesCount; i++) | ||||
{ | ||||
currentSeries = dataProvider[i]; | ||||
if(!currentSeries.type) | ||||
{ | ||||
currentSeries.type = this._type; | ||||
} | ||||
currentSeries.dataProvider = response.results; | ||||
} | ||||
} | ||||
else | ||||
{ | ||||
var series = {type: this._type, dataProvider: response.results}; | ||||
dataProvider.push(series); | ||||
} | ||||
try | ||||
{ | ||||
if(this._swf.setDataProvider) this._swf.setDataProvider(dataProvider); | ||||
} | ||||
catch(e) | ||||
{ | ||||
this._swf.setDataProvider(dataProvider); | ||||
} | ||||
} | ||||
} | ||||
}, | ||||
/** | ||||
* Storage for the request attribute. | ||||
* | ||||
* @property _request | ||||
* @private | ||||
*/ | ||||
_request: "", | ||||
/** | ||||
* Getter for the request attribute. | ||||
* | ||||
* @method _getRequest | ||||
* @private | ||||
*/ | ||||
_getRequest: function() | ||||
{ | ||||
return this._request; | ||||
}, | ||||
/** | ||||
* Setter for the request attribute. | ||||
* | ||||
* @method _setRequest | ||||
* @private | ||||
*/ | ||||
_setRequest: function(value) | ||||
{ | ||||
this._request = value; | ||||
this.refreshData(); | ||||
}, | ||||
/** | ||||
* Storage for the dataSource attribute. | ||||
* | ||||
* @property _dataSource | ||||
* @private | ||||
*/ | ||||
_dataSource: null, | ||||
/** | ||||
* Getter for the dataSource attribute. | ||||
* | ||||
* @method _getDataSource | ||||
* @private | ||||
*/ | ||||
_getDataSource: function() | ||||
{ | ||||
return this._dataSource; | ||||
}, | ||||
/** | ||||
* Setter for the dataSource attribute. | ||||
* | ||||
* @method _setDataSource | ||||
* @private | ||||
*/ | ||||
_setDataSource: function(value) | ||||
{ | ||||
this._dataSource = value; | ||||
this.refreshData(); | ||||
}, | ||||
/** | ||||
* Storage for the series attribute. | ||||
* | ||||
* @property _seriesDefs | ||||
* @private | ||||
*/ | ||||
_seriesDefs: null, | ||||
/** | ||||
* Getter for the series attribute. | ||||
* | ||||
* @method _getSeriesDefs | ||||
* @private | ||||
*/ | ||||
_getSeriesDefs: function() | ||||
{ | ||||
return this._seriesDefs; | ||||
}, | ||||
/** | ||||
* Setter for the series attribute. | ||||
* | ||||
* @method _setSeriesDefs | ||||
* @private | ||||
*/ | ||||
_setSeriesDefs: function(value) | ||||
{ | ||||
this._seriesDefs = value; | ||||
this.refreshData(); | ||||
}, | ||||
/** | ||||
* Getter for the categoryNames attribute. | ||||
* | ||||
* @method _getCategoryNames | ||||
* @private | ||||
*/ | ||||
_getCategoryNames: function() | ||||
{ | ||||
return this._swf.getCategoryNames(); | ||||
}, | ||||
/** | ||||
* Setter for the categoryNames attribute. | ||||
* | ||||
* @method _setCategoryNames | ||||
* @private | ||||
*/ | ||||
_setCategoryNames: function(value) | ||||
{ | ||||
this._swf.setCategoryNames(value); | ||||
}, | ||||
/** | ||||
* Setter for the dataTipFunction attribute. | ||||
* | ||||
* @method _setDataTipFunction | ||||
* @private | ||||
*/ | ||||
_setDataTipFunction: function(value) | ||||
{ | ||||
if(this._dataTipFunction) | ||||
{ | ||||
YAHOO.widget.Chart.removeProxyFunction(this._dataTipFunction); | ||||
} | ||||
if(value) | ||||
{ | ||||
this._dataTipFunction = value = YAHOO.widget.Chart.getFunctionReference(value); | ||||
} | ||||
this._swf.setDataTipFunction(value); | ||||
}, | ||||
/** | ||||
* Setter for the legendLabelFunction attribute. | ||||
* | ||||
* @method _setLegendLabelFunction | ||||
* @private | ||||
*/ | ||||
_setLegendLabelFunction: function(value) | ||||
{ | ||||
if(this._legendLabelFunction) | ||||
{ | ||||
YAHOO.widget.Chart.removeProxyFunction(this._legendLabelFunction); | ||||
} | ||||
if(value) | ||||
{ | ||||
this._legendLabelFunction = value = YAHOO.widget.Chart.getFunctionReference(value); | ||||
} | ||||
this._swf.setLegendLabelFunction(value); | ||||
}, | ||||
/** | ||||
* Getter for the polling attribute. | ||||
* | ||||
* @method _getPolling | ||||
* @private | ||||
*/ | ||||
_getPolling: function() | ||||
{ | ||||
return this._pollingInterval; | ||||
}, | ||||
/** | ||||
* Setter for the polling attribute. | ||||
* | ||||
* @method _setPolling | ||||
* @private | ||||
*/ | ||||
_setPolling: function(value) | ||||
{ | ||||
this._pollingInterval = value; | ||||
this.refreshData(); | ||||
}, | ||||
/** | ||||
* The javascript wrapper for the swf object | ||||
* | ||||
* @property _swfEmbed | ||||
* @type swf | ||||
* @private | ||||
*/ | ||||
_swfEmbed: null, | ||||
/** | ||||
* The URL of the SWF file. | ||||
* @property _swfURL | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_swfURL: null, | ||||
/** | ||||
* The ID of the containing DIV. | ||||
* @property _containerID | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_containerID: null, | ||||
/** | ||||
* A reference to the embedded SWF file. | ||||
* @property _swf | ||||
* @private | ||||
*/ | ||||
_swf: null, | ||||
/** | ||||
* The id of this instance. | ||||
* @property _id | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_id: null, | ||||
/** | ||||
* Indicates whether the SWF has been initialized and is ready | ||||
* to communicate with JavaScript | ||||
* @property _initialized | ||||
* @type Boolean | ||||
* @private | ||||
*/ | ||||
_initialized: false, | ||||
/** | ||||
* The initializing attributes are stored here until the SWF is ready. | ||||
* @property _attributes | ||||
* @type Object | ||||
* @private | ||||
*/ | ||||
_attributes: null, //the intializing attributes | ||||
set: function(name, value) | ||||
{ | ||||
//save all the attributes in case the swf reloads | ||||
//so that we can pass them in again | ||||
this._attributes[name] = value; | ||||
YAHOO.widget.Chart.superclass.set.call(this, name, value); | ||||
}, | ||||
/** | ||||
* Getter for swfURL attribute. | ||||
* | ||||
* @method _getSWFURL | ||||
* @private | ||||
*/ | ||||
_getSWFURL: function() | ||||
{ | ||||
return this._swfURL; | ||||
}, | ||||
/** | ||||
* Getter for altText attribute. | ||||
* | ||||
* @method _getAltText | ||||
* @private | ||||
*/ | ||||
_getAltText: function() | ||||
{ | ||||
return this._swf.getAltText(); | ||||
}, | ||||
/** | ||||
* Setter for altText attribute. | ||||
* | ||||
* @method _setAltText | ||||
* @private | ||||
*/ | ||||
_setAltText: function(value) | ||||
{ | ||||
this._swf.setAltText(value); | ||||
} | ||||
}); | ||||
/** | ||||
* The number of proxy functions that have been created. | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.Chart.proxyFunctionCount = 0; | ||||
/** | ||||
* Creates a globally accessible function that wraps a function reference. | ||||
* Returns the proxy function's name as a string for use by the SWF through | ||||
* ExternalInterface. | ||||
* | ||||
* @method YAHOO.widget.Chart.createProxyFunction | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.Chart.createProxyFunction = function(func, scope) | ||||
{ | ||||
var scope = scope || null; | ||||
var index = YAHOO.widget.Chart.proxyFunctionCount; | ||||
YAHOO.widget.Chart["proxyFunction" + index] = function() | ||||
{ | ||||
return func.apply(scope, arguments); | ||||
}; | ||||
YAHOO.widget.Chart.proxyFunctionCount++; | ||||
return "YAHOO.widget.Chart.proxyFunction" + index.toString(); | ||||
}; | ||||
/** | ||||
* Uses YAHOO.widget.Chart.createProxyFunction to return string | ||||
* reference to a function. | ||||
* | ||||
* @method YAHOO.widget.Chart.getFunctionReference | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.Chart.getFunctionReference = function(value) | ||||
{ | ||||
if(typeof value == "function") | ||||
{ | ||||
value = YAHOO.widget.Chart.createProxyFunction(value); | ||||
} | ||||
else if(value.func && typeof value.func == "function") | ||||
{ | ||||
var args = [value.func]; | ||||
if(value.scope && typeof value.scope == "object") | ||||
{ | ||||
args.push(value.scope); | ||||
} | ||||
value = YAHOO.widget.Chart.createProxyFunction.apply(this, args); | ||||
} | ||||
return value; | ||||
} | ||||
/** | ||||
* Removes a function created with createProxyFunction() | ||||
* | ||||
* @method YAHOO.widget.Chart.removeProxyFunction | ||||
* @static | ||||
* @private | ||||
*/ | ||||
YAHOO.widget.Chart.removeProxyFunction = function(funcName) | ||||
{ | ||||
//quick error check | ||||
if(!funcName || funcName.indexOf("YAHOO.widget.Chart.proxyFunction") < 0) | ||||
{ | ||||
return; | ||||
} | ||||
funcName = funcName.substr(26); | ||||
YAHOO.widget.Chart[funcName] = null; | ||||
}; | ||||
/** | ||||
* Storage for the dataTipFunction attribute. | ||||
* | ||||
* @property Chart.SWFURL | ||||
* @private | ||||
* @static | ||||
* @final | ||||
* @default "assets/charts.swf" | ||||
*/ | ||||
YAHOO.widget.Chart.SWFURL = "assets/charts.swf"; | ||||
/** | ||||
* PieChart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class PieChart | ||||
* @uses YAHOO.widget.Chart | ||||
* @constructor | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.PieChart = function(containerId, dataSource, attributes) | ||||
{ | ||||
YAHOO.widget.PieChart.superclass.constructor.call(this, "pie", containerId, dataSource, attributes); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.PieChart, YAHOO.widget.Chart, | ||||
{ | ||||
/** | ||||
* Initializes the attributes. | ||||
* | ||||
* @method _initAttributes | ||||
* @private | ||||
*/ | ||||
_initAttributes: function(attributes) | ||||
{ | ||||
YAHOO.widget.PieChart.superclass._initAttributes.call(this, attributes); | ||||
/** | ||||
* @attribute dataField | ||||
* @description The field in each item that corresponds to the data value. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("dataField", | ||||
{ | ||||
validator: YAHOO.lang.isString, | ||||
method: this._setDataField, | ||||
getter: this._getDataField | ||||
}); | ||||
/** | ||||
* @attribute categoryField | ||||
* @description The field in each item that corresponds to the category value. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("categoryField", | ||||
{ | ||||
validator: YAHOO.lang.isString, | ||||
method: this._setCategoryField, | ||||
getter: this._getCategoryField | ||||
}); | ||||
}, | ||||
/** | ||||
* Getter for the dataField attribute. | ||||
* | ||||
* @method _getDataField | ||||
* @private | ||||
*/ | ||||
_getDataField: function() | ||||
{ | ||||
return this._swf.getDataField(); | ||||
}, | ||||
/** | ||||
* Setter for the dataField attribute. | ||||
* | ||||
* @method _setDataField | ||||
* @private | ||||
*/ | ||||
_setDataField: function(value) | ||||
{ | ||||
this._swf.setDataField(value); | ||||
}, | ||||
/** | ||||
* Getter for the categoryField attribute. | ||||
* | ||||
* @method _getCategoryField | ||||
* @private | ||||
*/ | ||||
_getCategoryField: function() | ||||
{ | ||||
return this._swf.getCategoryField(); | ||||
}, | ||||
/** | ||||
* Setter for the categoryField attribute. | ||||
* | ||||
* @method _setCategoryField | ||||
* @private | ||||
*/ | ||||
_setCategoryField: function(value) | ||||
{ | ||||
this._swf.setCategoryField(value); | ||||
} | ||||
}); | ||||
/** | ||||
* CartesianChart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class CartesianChart | ||||
* @uses YAHOO.widget.Chart | ||||
* @constructor | ||||
* @param type {String} The char type. May be "line", "column", or "bar" | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.CartesianChart = function(type, containerId, dataSource, attributes) | ||||
{ | ||||
YAHOO.widget.CartesianChart.superclass.constructor.call(this, type, containerId, dataSource, attributes); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.CartesianChart, YAHOO.widget.Chart, | ||||
{ | ||||
/** | ||||
* Stores a reference to the xAxis labelFunction created by | ||||
* YAHOO.widget.Chart.createProxyFunction() | ||||
* @property _xAxisLabelFunctions | ||||
* @type String | ||||
* @private | ||||
*/ | ||||
_xAxisLabelFunctions: [], | ||||
/** | ||||
* Stores a reference to the yAxis labelFunctions created by | ||||
* YAHOO.widget.Chart.createProxyFunction() | ||||
* @property _yAxisLabelFunctions | ||||
* @type Array | ||||
* @private | ||||
*/ | ||||
_yAxisLabelFunctions: [], | ||||
destroy: function() | ||||
{ | ||||
//remove proxy functions | ||||
this._removeAxisFunctions(this._xAxisLabelFunctions); | ||||
this._removeAxisFunctions(this._yAxisLabelFunctions); | ||||
//call last | ||||
YAHOO.widget.CartesianChart.superclass.destroy.call(this); | ||||
}, | ||||
/** | ||||
* Initializes the attributes. | ||||
* | ||||
* @method _initAttributes | ||||
* @private | ||||
*/ | ||||
_initAttributes: function(attributes) | ||||
{ | ||||
YAHOO.widget.CartesianChart.superclass._initAttributes.call(this, attributes); | ||||
/** | ||||
* @attribute xField | ||||
* @description The field in each item that corresponds to a value on the x axis. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("xField", | ||||
{ | ||||
validator: YAHOO.lang.isString, | ||||
method: this._setXField, | ||||
getter: this._getXField | ||||
}); | ||||
/** | ||||
* @attribute yField | ||||
* @description The field in each item that corresponds to a value on the x axis. | ||||
* @type String | ||||
*/ | ||||
this.setAttributeConfig("yField", | ||||
{ | ||||
validator: YAHOO.lang.isString, | ||||
method: this._setYField, | ||||
getter: this._getYField | ||||
}); | ||||
/** | ||||
* @attribute xAxis | ||||
* @description A custom configuration for the horizontal x axis. | ||||
* @type Axis | ||||
*/ | ||||
this.setAttributeConfig("xAxis", | ||||
{ | ||||
method: this._setXAxis | ||||
}); | ||||
/** | ||||
* @attribute xAxes | ||||
* @description Custom configurations for the horizontal x axes. | ||||
* @type Array | ||||
*/ | ||||
this.setAttributeConfig("xAxes", | ||||
{ | ||||
method: this._setXAxes | ||||
}); | ||||
/** | ||||
* @attribute yAxis | ||||
* @description A custom configuration for the vertical y axis. | ||||
* @type Axis | ||||
*/ | ||||
this.setAttributeConfig("yAxis", | ||||
{ | ||||
method: this._setYAxis | ||||
}); | ||||
/** | ||||
* @attribute yAxes | ||||
* @description Custom configurations for the vertical y axes. | ||||
* @type Array | ||||
*/ | ||||
this.setAttributeConfig("yAxes", | ||||
{ | ||||
method: this._setYAxes | ||||
}); | ||||
/** | ||||
* @attribute constrainViewport | ||||
* @description Determines whether the viewport is constrained to prevent series data from overflow. | ||||
* @type Boolean | ||||
*/ | ||||
this.setAttributeConfig("constrainViewport", | ||||
{ | ||||
method: this._setConstrainViewport | ||||
}); | ||||
}, | ||||
/** | ||||
* Getter for the xField attribute. | ||||
* | ||||
* @method _getXField | ||||
* @private | ||||
*/ | ||||
_getXField: function() | ||||
{ | ||||
return this._swf.getHorizontalField(); | ||||
}, | ||||
/** | ||||
* Setter for the xField attribute. | ||||
* | ||||
* @method _setXField | ||||
* @private | ||||
*/ | ||||
_setXField: function(value) | ||||
{ | ||||
this._swf.setHorizontalField(value); | ||||
}, | ||||
/** | ||||
* Getter for the yField attribute. | ||||
* | ||||
* @method _getYField | ||||
* @private | ||||
*/ | ||||
_getYField: function() | ||||
{ | ||||
return this._swf.getVerticalField(); | ||||
}, | ||||
/** | ||||
* Setter for the yField attribute. | ||||
* | ||||
* @method _setYField | ||||
* @private | ||||
*/ | ||||
_setYField: function(value) | ||||
{ | ||||
this._swf.setVerticalField(value); | ||||
}, | ||||
/** | ||||
* Receives an axis object, creates a proxy function for | ||||
* the labelFunction and returns the updated object. | ||||
* | ||||
* @method _getClonedAxis | ||||
* @private | ||||
*/ | ||||
_getClonedAxis: function(value) | ||||
{ | ||||
var clonedAxis = {}; | ||||
for(var prop in value) | ||||
{ | ||||
if(prop == "labelFunction") | ||||
{ | ||||
if(value.labelFunction && value.labelFunction !== null) | ||||
{ | ||||
clonedAxis.labelFunction = YAHOO.widget.Chart.getFunctionReference(value.labelFunction); | ||||
} | ||||
} | ||||
else | ||||
{ | ||||
clonedAxis[prop] = value[prop]; | ||||
} | ||||
} | ||||
return clonedAxis; | ||||
}, | ||||
/** | ||||
* Removes axis functions contained in an array | ||||
* | ||||
* @method _removeAxisFunctions | ||||
* @private | ||||
*/ | ||||
_removeAxisFunctions: function(axisFunctions) | ||||
{ | ||||
if(axisFunctions && axisFunctions.length > 0) | ||||
{ | ||||
var len = axisFunctions.length; | ||||
for(var i = 0; i < len; i++) | ||||
{ | ||||
if(axisFunctions[i] !== null) | ||||
{ | ||||
YAHOO.widget.Chart.removeProxyFunction(axisFunctions[i]); | ||||
} | ||||
} | ||||
axisFunctions = []; | ||||
} | ||||
}, | ||||
/** | ||||
* Setter for the xAxis attribute. | ||||
* | ||||
* @method _setXAxis | ||||
* @private | ||||
*/ | ||||
_setXAxis: function(value) | ||||
{ | ||||
if(value.position != "bottom" && value.position != "top") value.position = "bottom"; | ||||
this._removeAxisFunctions(this._xAxisLabelFunctions); | ||||
value = this._getClonedAxis(value); | ||||
this._xAxisLabelFunctions.push(value.labelFunction); | ||||
this._swf.setHorizontalAxis(value); | ||||
}, | ||||
/** | ||||
* Setter for the xAxes attribute | ||||
* | ||||
* @method _setXAxes | ||||
* @private | ||||
*/ | ||||
_setXAxes: function(value) | ||||
{ | ||||
this._removeAxisFunctions(this._xAxisLabelFunctions); | ||||
var len = value.length; | ||||
for(var i = 0; i < len; i++) | ||||
{ | ||||
if(value[i].position == "left") value[i].position = "bottom"; | ||||
value[i] = this._getClonedAxis(value[i]); | ||||
if(value[i].labelFunction) this._xAxisLabelFunctions.push(value[i].labelFunction); | ||||
this._swf.setHorizontalAxis(value[i]); | ||||
} | ||||
}, | ||||
/** | ||||
* Setter for the yAxis attribute. | ||||
* | ||||
* @method _setYAxis | ||||
* @private | ||||
*/ | ||||
_setYAxis: function(value) | ||||
{ | ||||
this._removeAxisFunctions(this._yAxisLabelFunctions); | ||||
value = this._getClonedAxis(value); | ||||
this._yAxisLabelFunctions.push(value.labelFunction); | ||||
this._swf.setVerticalAxis(value); | ||||
}, | ||||
/** | ||||
* Setter for the yAxes attribute. | ||||
* | ||||
* @method _setYAxes | ||||
* @private | ||||
*/ | ||||
_setYAxes: function(value) | ||||
{ | ||||
this._removeAxisFunctions(this._yAxisLabelFunctions); | ||||
var len = value.length; | ||||
for(var i = 0; i < len; i++) | ||||
{ | ||||
value[i] = this._getClonedAxis(value[i]); | ||||
if(value[i].labelFunction) this._yAxisLabelFunctions.push(value[i].labelFunction); | ||||
this._swf.setVerticalAxis(value[i]); | ||||
} | ||||
}, | ||||
/** | ||||
* Setter for the constrainViewport attribute | ||||
* | ||||
* @method _setConstrainViewport | ||||
* @private | ||||
*/ | ||||
_setConstrainViewport: function(value) | ||||
{ | ||||
this._swf.setConstrainViewport(value); | ||||
}, | ||||
/** | ||||
* Sets the style object for a single series based on its index | ||||
* | ||||
* @method setSeriesStylesByIndex | ||||
* @param index {Number} The position within the series definition to apply the style | ||||
* @param style {object} Style object to be applied to the selected series | ||||
*/ | ||||
setSeriesStylesByIndex:function(index, style) | ||||
{ | ||||
style = YAHOO.lang.JSON.stringify(style); | ||||
if(this._swf && this._swf.setSeriesStylesByIndex) this._swf.setSeriesStylesByIndex(index, style); | ||||
} | ||||
}); | ||||
/** | ||||
* LineChart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class LineChart | ||||
* @uses YAHOO.widget.CartesianChart | ||||
* @constructor | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.LineChart = function(containerId, dataSource, attributes) | ||||
{ | ||||
YAHOO.widget.LineChart.superclass.constructor.call(this, "line", containerId, dataSource, attributes); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.LineChart, YAHOO.widget.CartesianChart); | ||||
/** | ||||
* ColumnChart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class ColumnChart | ||||
* @uses YAHOO.widget.CartesianChart | ||||
* @constructor | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.ColumnChart = function(containerId, dataSource, attributes) | ||||
{ | ||||
YAHOO.widget.ColumnChart.superclass.constructor.call(this, "column", containerId, dataSource, attributes); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.ColumnChart, YAHOO.widget.CartesianChart); | ||||
/** | ||||
* BarChart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class BarChart | ||||
* @uses YAHOO.widget.CartesianChart | ||||
* @constructor | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.BarChart = function(containerId, dataSource, attributes) | ||||
{ | ||||
YAHOO.widget.BarChart.superclass.constructor.call(this, "bar", containerId, dataSource, attributes); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.BarChart, YAHOO.widget.CartesianChart); | ||||
/** | ||||
* StackedColumnChart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class StackedColumnChart | ||||
* @uses YAHOO.widget.CartesianChart | ||||
* @constructor | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.StackedColumnChart = function(containerId, dataSource, attributes) | ||||
{ | ||||
YAHOO.widget.StackedColumnChart.superclass.constructor.call(this, "stackcolumn", containerId, dataSource, attributes); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.StackedColumnChart, YAHOO.widget.CartesianChart); | ||||
/** | ||||
* StackedBarChart class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class StackedBarChart | ||||
* @uses YAHOO.widget.CartesianChart | ||||
* @constructor | ||||
* @param containerId {HTMLElement} Container element for the Flash Player instance. | ||||
* @param dataSource {YAHOO.util.DataSource} DataSource instance. | ||||
* @param attributes {object} (optional) Object literal of configuration values. | ||||
*/ | ||||
YAHOO.widget.StackedBarChart = function(containerId, dataSource, attributes) | ||||
{ | ||||
YAHOO.widget.StackedBarChart.superclass.constructor.call(this, "stackbar", containerId, dataSource, attributes); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.StackedBarChart, YAHOO.widget.CartesianChart); | ||||
/** | ||||
* Defines a CartesianChart's vertical or horizontal axis. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class Axis | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.Axis = function() | ||||
{ | ||||
}; | ||||
YAHOO.widget.Axis.prototype = | ||||
{ | ||||
/** | ||||
* The type of axis. | ||||
* | ||||
* @property type | ||||
* @type String | ||||
*/ | ||||
type: null, | ||||
/** | ||||
* If true, the items on the axis will be drawn in opposite direction. | ||||
* | ||||
* @property reverse | ||||
* @type Boolean | ||||
*/ | ||||
reverse: false, | ||||
/** | ||||
* A string reference to the globally-accessible function that may be called to | ||||
* determine each of the label values for this axis. Also accepts function references. | ||||
* | ||||
* @property labelFunction | ||||
* @type String | ||||
*/ | ||||
labelFunction: null, | ||||
/** | ||||
* The space, in pixels, between labels on an axis. | ||||
* | ||||
* @property labelSpacing | ||||
* @type Number | ||||
*/ | ||||
labelSpacing: 2, | ||||
/** | ||||
* The text that will appear next to the axis to indicate information about the data that it displays. | ||||
* | ||||
* @property title | ||||
* @type String | ||||
*/ | ||||
title: null | ||||
}; | ||||
/** | ||||
* A type of axis whose units are measured in numeric values. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class NumericAxis | ||||
* @extends YAHOO.widget.Axis | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.NumericAxis = function() | ||||
{ | ||||
YAHOO.widget.NumericAxis.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.NumericAxis, YAHOO.widget.Axis, | ||||
{ | ||||
type: "numeric", | ||||
/** | ||||
* The minimum value drawn by the axis. If not set explicitly, the axis minimum | ||||
* will be calculated automatically. | ||||
* | ||||
* @property minimum | ||||
* @type Number | ||||
*/ | ||||
minimum: NaN, | ||||
/** | ||||
* The maximum value drawn by the axis. If not set explicitly, the axis maximum | ||||
* will be calculated automatically. | ||||
* | ||||
* @property maximum | ||||
* @type Number | ||||
*/ | ||||
maximum: NaN, | ||||
/** | ||||
* The spacing between major intervals on this axis. | ||||
* | ||||
* @property majorUnit | ||||
* @type Number | ||||
*/ | ||||
majorUnit: NaN, | ||||
/** | ||||
* The spacing between minor intervals on this axis. | ||||
* | ||||
* @property minorUnit | ||||
* @type Number | ||||
*/ | ||||
minorUnit: NaN, | ||||
/** | ||||
* If true, the labels, ticks, gridlines, and other objects will snap to | ||||
* the nearest major or minor unit. If false, their position will be based | ||||
* on the minimum value. | ||||
* | ||||
* @property snapToUnits | ||||
* @type Boolean | ||||
*/ | ||||
snapToUnits: true, | ||||
/** | ||||
* Series that are stackable will only stack when this value is set to true. | ||||
* | ||||
* @property stackingEnabled | ||||
* @type Boolean | ||||
*/ | ||||
stackingEnabled: false, | ||||
/** | ||||
* If true, and the bounds are calculated automatically, either the minimum or | ||||
* maximum will be set to zero. | ||||
* | ||||
* @property alwaysShowZero | ||||
* @type Boolean | ||||
*/ | ||||
alwaysShowZero: true, | ||||
/** | ||||
* The scaling algorithm to use on this axis. May be "linear" or "logarithmic". | ||||
* | ||||
* @property scale | ||||
* @type String | ||||
*/ | ||||
scale: "linear", | ||||
/** | ||||
* Indicates whether to round the major unit. | ||||
* | ||||
* @property roundMajorUnit | ||||
* @type Boolean | ||||
*/ | ||||
roundMajorUnit: true, | ||||
/** | ||||
* Indicates whether to factor in the size of the labels when calculating a major unit. | ||||
* | ||||
* @property calculateByLabelSize | ||||
* @type Boolean | ||||
*/ | ||||
calculateByLabelSize: true, | ||||
/** | ||||
* Indicates the position of the axis relative to the chart | ||||
* | ||||
* @property position | ||||
* @type String | ||||
*/ | ||||
position:"left", | ||||
/** | ||||
* Indicates whether to extend maximum beyond data's maximum to the nearest | ||||
* majorUnit. | ||||
* | ||||
* @property adjustMaximumByMajorUnit | ||||
* @type Boolean | ||||
*/ | ||||
adjustMaximumByMajorUnit:true, | ||||
/** | ||||
* Indicates whether to extend the minimum beyond data's minimum to the nearest | ||||
* majorUnit. | ||||
* | ||||
* @property adjustMinimumByMajorUnit | ||||
* @type Boolean | ||||
*/ | ||||
adjustMinimumByMajorUnit:true | ||||
}); | ||||
/** | ||||
* A type of axis whose units are measured in time-based values. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class TimeAxis | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.TimeAxis = function() | ||||
{ | ||||
YAHOO.widget.TimeAxis.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.TimeAxis, YAHOO.widget.Axis, | ||||
{ | ||||
type: "time", | ||||
/** | ||||
* The minimum value drawn by the axis. If not set explicitly, the axis minimum | ||||
* will be calculated automatically. | ||||
* | ||||
* @property minimum | ||||
* @type Date | ||||
*/ | ||||
minimum: null, | ||||
/** | ||||
* The maximum value drawn by the axis. If not set explicitly, the axis maximum | ||||
* will be calculated automatically. | ||||
* | ||||
* @property maximum | ||||
* @type Number | ||||
*/ | ||||
maximum: null, | ||||
/** | ||||
* The spacing between major intervals on this axis. | ||||
* | ||||
* @property majorUnit | ||||
* @type Number | ||||
*/ | ||||
majorUnit: NaN, | ||||
/** | ||||
* The time unit used by the majorUnit. | ||||
* | ||||
* @property majorTimeUnit | ||||
* @type String | ||||
*/ | ||||
majorTimeUnit: null, | ||||
/** | ||||
* The spacing between minor intervals on this axis. | ||||
* | ||||
* @property majorUnit | ||||
* @type Number | ||||
*/ | ||||
minorUnit: NaN, | ||||
/** | ||||
* The time unit used by the minorUnit. | ||||
* | ||||
* @property majorTimeUnit | ||||
* @type String | ||||
*/ | ||||
minorTimeUnit: null, | ||||
/** | ||||
* If true, the labels, ticks, gridlines, and other objects will snap to | ||||
* the nearest major or minor unit. If false, their position will be based | ||||
* on the minimum value. | ||||
* | ||||
* @property snapToUnits | ||||
* @type Boolean | ||||
*/ | ||||
snapToUnits: true, | ||||
/** | ||||
* Series that are stackable will only stack when this value is set to true. | ||||
* | ||||
* @property stackingEnabled | ||||
* @type Boolean | ||||
*/ | ||||
stackingEnabled: false, | ||||
/** | ||||
* Indicates whether to factor in the size of the labels when calculating a major unit. | ||||
* | ||||
* @property calculateByLabelSize | ||||
* @type Boolean | ||||
*/ | ||||
calculateByLabelSize: true | ||||
}); | ||||
/** | ||||
* A type of axis that displays items in categories. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class CategoryAxis | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.CategoryAxis = function() | ||||
{ | ||||
YAHOO.widget.CategoryAxis.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.CategoryAxis, YAHOO.widget.Axis, | ||||
{ | ||||
type: "category", | ||||
/** | ||||
* A list of category names to display along this axis. | ||||
* | ||||
* @property categoryNames | ||||
* @type Array | ||||
*/ | ||||
categoryNames: null, | ||||
/** | ||||
* Indicates whether or not to calculate the number of categories (ticks and labels) | ||||
* when there is not enough room to display all labels on the axis. If set to true, the axis | ||||
* will determine the number of categories to plot. If not, all categories will be plotted. | ||||
* | ||||
* @property calculateCategoryCount | ||||
* @type Boolean | ||||
*/ | ||||
calculateCategoryCount: false | ||||
}); | ||||
/** | ||||
* Functionality common to most series. Generally, a <code>Series</code> | ||||
* object shouldn't be instantiated directly. Instead, a subclass with a | ||||
* concrete implementation should be used. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class Series | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.Series = function() {}; | ||||
YAHOO.widget.Series.prototype = | ||||
{ | ||||
/** | ||||
* The type of series. | ||||
* | ||||
* @property type | ||||
* @type String | ||||
*/ | ||||
type: null, | ||||
/** | ||||
* The human-readable name of the series. | ||||
* | ||||
* @property displayName | ||||
* @type String | ||||
*/ | ||||
displayName: null | ||||
}; | ||||
/** | ||||
* Functionality common to most series appearing in cartesian charts. | ||||
* Generally, a <code>CartesianSeries</code> object shouldn't be | ||||
* instantiated directly. Instead, a subclass with a concrete implementation | ||||
* should be used. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class CartesianSeries | ||||
* @uses YAHOO.widget.Series | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.CartesianSeries = function() | ||||
{ | ||||
YAHOO.widget.CartesianSeries.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.CartesianSeries, YAHOO.widget.Series, | ||||
{ | ||||
/** | ||||
* The field used to access the x-axis value from the items from the data source. | ||||
* | ||||
* @property xField | ||||
* @type String | ||||
*/ | ||||
xField: null, | ||||
/** | ||||
* The field used to access the y-axis value from the items from the data source. | ||||
* | ||||
* @property yField | ||||
* @type String | ||||
*/ | ||||
yField: null, | ||||
/** | ||||
* Indicates which axis the series will bind to | ||||
* | ||||
* @property axis | ||||
* @type String | ||||
*/ | ||||
axis: "primary", | ||||
/** | ||||
* When a Legend is present, indicates whether the series will show in the legend. | ||||
* | ||||
* @property showInLegend | ||||
* @type Boolean | ||||
*/ | ||||
showInLegend: true | ||||
}); | ||||
/** | ||||
* ColumnSeries class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class ColumnSeries | ||||
* @uses YAHOO.widget.CartesianSeries | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.ColumnSeries = function() | ||||
{ | ||||
YAHOO.widget.ColumnSeries.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.ColumnSeries, YAHOO.widget.CartesianSeries, | ||||
{ | ||||
type: "column" | ||||
}); | ||||
/** | ||||
* LineSeries class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class LineSeries | ||||
* @uses YAHOO.widget.CartesianSeries | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.LineSeries = function() | ||||
{ | ||||
YAHOO.widget.LineSeries.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.LineSeries, YAHOO.widget.CartesianSeries, | ||||
{ | ||||
type: "line" | ||||
}); | ||||
/** | ||||
* BarSeries class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class BarSeries | ||||
* @uses YAHOO.widget.CartesianSeries | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.BarSeries = function() | ||||
{ | ||||
YAHOO.widget.BarSeries.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.BarSeries, YAHOO.widget.CartesianSeries, | ||||
{ | ||||
type: "bar" | ||||
}); | ||||
/** | ||||
* PieSeries class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class PieSeries | ||||
* @uses YAHOO.widget.Series | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.PieSeries = function() | ||||
{ | ||||
YAHOO.widget.PieSeries.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.PieSeries, YAHOO.widget.Series, | ||||
{ | ||||
type: "pie", | ||||
/** | ||||
* The field used to access the data value from the items from the data source. | ||||
* | ||||
* @property dataField | ||||
* @type String | ||||
*/ | ||||
dataField: null, | ||||
/** | ||||
* The field used to access the category value from the items from the data source. | ||||
* | ||||
* @property categoryField | ||||
* @type String | ||||
*/ | ||||
categoryField: null, | ||||
/** | ||||
* A string reference to the globally-accessible function that may be called to | ||||
* determine each of the label values for this series. Also accepts function references. | ||||
* | ||||
* @property labelFunction | ||||
* @type String | ||||
*/ | ||||
labelFunction: null | ||||
}); | ||||
/** | ||||
* StackedBarSeries class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class StackedBarSeries | ||||
* @uses YAHOO.widget.CartesianSeries | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.StackedBarSeries = function() | ||||
{ | ||||
YAHOO.widget.StackedBarSeries.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.StackedBarSeries, YAHOO.widget.CartesianSeries, | ||||
{ | ||||
type: "stackbar" | ||||
}); | ||||
/** | ||||
* StackedColumnSeries class for the YUI Charts widget. | ||||
* | ||||
* @namespace YAHOO.widget | ||||
* @class StackedColumnSeries | ||||
* @uses YAHOO.widget.CartesianSeries | ||||
* @constructor | ||||
*/ | ||||
YAHOO.widget.StackedColumnSeries = function() | ||||
{ | ||||
YAHOO.widget.StackedColumnSeries.superclass.constructor.call(this); | ||||
}; | ||||
YAHOO.lang.extend(YAHOO.widget.StackedColumnSeries, YAHOO.widget.CartesianSeries, | ||||
{ | ||||
type: "stackcolumn" | ||||
}); | ||||
r1073 | YAHOO.register("charts", YAHOO.widget.Chart, {version: "2.8.2r1", build: "7"}); | |||