CommunityID/javascript/yui/charts/charts-debug.js

2327 lines
55 KiB
JavaScript

/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.7.0
*/
/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
/*!
* SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
*
* SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
* @namespace YAHOO
*/
YAHOO.namespace("deconcept");
YAHOO.deconcept = YAHOO.deconcept || {};
if(typeof YAHOO.deconcept.util == "undefined" || !YAHOO.deconcept.util)
{
YAHOO.deconcept.util = {};
}
if(typeof YAHOO.deconcept.SWFObjectUtil == "undefined" || !YAHOO.deconcept.SWFObjectUtil)
{
YAHOO.deconcept.SWFObjectUtil = {};
}
YAHOO.deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
{
if(!document.getElementById) { return; }
this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
this.skipDetect = YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);
this.params = {};
this.variables = {};
this.attributes = [];
if(swf) { this.setAttribute('swf', swf); }
if(id) { this.setAttribute('id', id); }
if(w) { this.setAttribute('width', w); }
if(h) { this.setAttribute('height', h); }
if(ver) { this.setAttribute('version', new YAHOO.deconcept.PlayerVersion(ver.toString().split("."))); }
this.installedVer = YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();
if (!window.opera && document.all && this.installedVer.major > 7)
{
// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
YAHOO.deconcept.SWFObject.doPrepUnload = true;
}
if(c)
{
this.addParam('bgcolor', c);
}
var q = quality ? quality : 'high';
this.addParam('quality', q);
this.setAttribute('useExpressInstall', false);
this.setAttribute('doExpressInstall', false);
var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
this.setAttribute('xiRedirectUrl', xir);
this.setAttribute('redirectUrl', '');
if(redirectUrl)
{
this.setAttribute('redirectUrl', redirectUrl);
}
};
YAHOO.deconcept.SWFObject.prototype =
{
useExpressInstall: function(path)
{
this.xiSWFPath = !path ? "expressinstall.swf" : path;
this.setAttribute('useExpressInstall', true);
},
setAttribute: function(name, value){
this.attributes[name] = value;
},
getAttribute: function(name){
return this.attributes[name];
},
addParam: function(name, value){
this.params[name] = value;
},
getParams: function(){
return this.params;
},
addVariable: function(name, value){
this.variables[name] = value;
},
getVariable: function(name){
return this.variables[name];
},
getVariables: function(){
return this.variables;
},
getVariablePairs: function(){
var variablePairs = [];
var key;
var variables = this.getVariables();
for(key in variables)
{
if(variables.hasOwnProperty(key))
{
variablePairs[variablePairs.length] = key +"="+ variables[key];
}
}
return variablePairs;
},
getSWFHTML: function() {
var swfNode = "";
var params = {};
var key = "";
var pairs = "";
if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
if (this.getAttribute("doExpressInstall")) {
this.addVariable("MMplayerType", "PlugIn");
this.setAttribute('swf', this.xiSWFPath);
}
swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
params = this.getParams();
for(key in params)
{
if(params.hasOwnProperty(key))
{
swfNode += [key] +'="'+ params[key] +'" ';
}
}
pairs = this.getVariablePairs().join("&");
if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
swfNode += '/>';
} else { // PC IE
if (this.getAttribute("doExpressInstall")) {
this.addVariable("MMplayerType", "ActiveX");
this.setAttribute('swf', this.xiSWFPath);
}
swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
params = this.getParams();
for(key in params)
{
if(params.hasOwnProperty(key))
{
swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
}
}
pairs = this.getVariablePairs().join("&");
if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
swfNode += "</object>";
}
return swfNode;
},
write: function(elementId)
{
if(this.getAttribute('useExpressInstall')) {
// check to see if we need to do an express install
var expressInstallReqVer = new YAHOO.deconcept.PlayerVersion([6,0,65]);
if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
this.setAttribute('doExpressInstall', true);
this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
document.title = document.title.slice(0, 47) + " - Flash Player Installation";
this.addVariable("MMdoctitle", document.title);
}
}
if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
{
var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
n.innerHTML = this.getSWFHTML();
return true;
}
else
{
if(this.getAttribute('redirectUrl') !== "")
{
document.location.replace(this.getAttribute('redirectUrl'));
}
}
return false;
}
};
/* ---- detection functions ---- */
YAHOO.deconcept.SWFObjectUtil.getPlayerVersion = function()
{
var axo = null;
var PlayerVersion = new YAHOO.deconcept.PlayerVersion([0,0,0]);
if(navigator.plugins && navigator.mimeTypes.length)
{
var x = navigator.plugins["Shockwave Flash"];
if(x && x.description)
{
PlayerVersion = new YAHOO.deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
}
}
else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
{ // if Windows CE
var counter = 3;
while(axo)
{
try
{
counter++;
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
// document.write("player v: "+ counter);
PlayerVersion = new YAHOO.deconcept.PlayerVersion([counter,0,0]);
}
catch(e)
{
axo = null;
}
}
}
else
{ // Win IE (non mobile)
// do minor version lookup in IE, but avoid fp6 crashing issues
// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
try
{
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
}
catch(e)
{
try
{
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
PlayerVersion = new YAHOO.deconcept.PlayerVersion([6,0,21]);
axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
}
catch(e)
{
if(PlayerVersion.major == 6)
{
return PlayerVersion;
}
}
try
{
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
}
catch(e) {}
}
if(axo !== null)
{
PlayerVersion = new YAHOO.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
}
}
return PlayerVersion;
};
YAHOO.deconcept.PlayerVersion = function(arrVersion)
{
this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
};
YAHOO.deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
{
if(this.major < fv.major)
{
return false;
}
if(this.major > fv.major)
{
return true;
}
if(this.minor < fv.minor)
{
return false;
}
if(this.minor > fv.minor)
{
return true;
}
if(this.rev < fv.rev)
{
return false;
}
return true;
};
/* ---- get value of query string param ---- */
YAHOO.deconcept.util =
{
getRequestParameter: function(param)
{
var q = document.location.search || document.location.hash;
if(param === null) { return q; }
if(q)
{
var pairs = q.substring(1).split("&");
for(var i=0; i < pairs.length; i++)
{
if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
{
return pairs[i].substring((pairs[i].indexOf("=") + 1));
}
}
}
return "";
}
};
/* fix for video streaming bug */
YAHOO.deconcept.SWFObjectUtil.cleanupSWFs = function()
{
var objects = document.getElementsByTagName("OBJECT");
for(var i = objects.length - 1; i >= 0; i--)
{
objects[i].style.display = 'none';
for(var x in objects[i])
{
if(typeof objects[i][x] == 'function')
{
objects[i][x] = function(){};
}
}
}
};
// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
if(YAHOO.deconcept.SWFObject.doPrepUnload)
{
if(!YAHOO.deconcept.unloadSet)
{
YAHOO.deconcept.SWFObjectUtil.prepUnload = function()
{
__flash_unloadHandler = function(){};
__flash_savedUnloadHandler = function(){};
window.attachEvent("onunload", YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);
};
window.attachEvent("onbeforeunload", YAHOO.deconcept.SWFObjectUtil.prepUnload);
YAHOO.deconcept.unloadSet = true;
}
}
/* add document.getElementById if needed (mobile IE < 5) */
if(!document.getElementById && document.all)
{
document.getElementById = function(id) { return document.all[id]; };
}
/**
* Wraps Flash embedding functionality and allows communication with SWF through
* attributes.
*
* @namespace YAHOO.widget
* @class FlashAdapter
* @uses YAHOO.util.AttributeProvider
*/
YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes)
{
// set up the initial events and attributes stuff
this._queue = this._queue || [];
this._events = this._events || {};
this._configs = this._configs || {};
attributes = attributes || {};
//the Flash Player external interface code from Adobe doesn't play nicely
//with the default value, yui-gen, in IE
this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
attributes.version = attributes.version || "9.0.45";
attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
//we can't use the initial attributes right away
//so save them for once the SWF finishes loading
this._attributes = attributes;
this._swfURL = swfURL;
this._containerID = containerID;
//embed the SWF file in the page
this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
attributes.backgroundColor, attributes.expressInstall, attributes.wmode);
/**
* 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){}
};
YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
{
/**
* 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
/**
* Public accessor to the unique name of the FlashAdapter instance.
*
* @method toString
* @return {String} Unique name of the FlashAdapter instance.
*/
toString: function()
{
return "FlashAdapter " + this._id;
},
/**
* Nulls out the entire FlashAdapter instance and related objects and removes attached
* event listeners and clears out DOM elements inside the container. After calling
* this method, the instance reference should be expliclitly nulled by implementer,
* as in myChart = null. Use with caution!
*
* @method destroy
*/
destroy: function()
{
//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;
}
}
YAHOO.log("FlashAdapter instance destroyed: " + instanceName);
},
/**
* Embeds the SWF in the page and associates it with this instance.
*
* @method _embedSWF
* @private
*/
_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode)
{
//standard SWFObject embed
var swfObj = new YAHOO.deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
if(expressInstall)
{
swfObj.useExpressInstall(expressInstall);
}
//make sure we can communicate with ExternalInterface
swfObj.addParam("allowScriptAccess", "always");
if(wmode)
{
swfObj.addParam("wmode", wmode);
}
//again, a useful ExternalInterface trick
swfObj.addVariable("allowedDomain", document.location.hostname);
//tell the SWF which HTML element it is in
swfObj.addVariable("elementID", swfID);
// set the name of the function to call when the swf has an event
swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
var container = YAHOO.util.Dom.get(containerID);
var result = swfObj.write(container);
if(result)
{
this._swf = YAHOO.util.Dom.get(swfID);
//if successful, let's add an owner property to the SWF reference
//this will allow the event handler to communicate with a YAHOO.widget.FlashAdapter
this._swf.owner = this;
}
else
{
YAHOO.log("Unable to load SWF " + swfURL);
}
},
/**
* Handles or re-dispatches events received from the SWF.
*
* @method _eventHandler
* @private
*/
_eventHandler: function(event)
{
var type = event.type;
switch(type)
{
case "swfReady":
this._loadHandler();
this.fireEvent("contentReady");
return;
case "log":
YAHOO.log(event.message, event.category, this.toString());
return;
}
//be sure to return after your case or the event will automatically fire!
this.fireEvent(type, event);
},
/**
* Called when the SWF has been initialized.
*
* @method _loadHandler
* @private
*/
_loadHandler: function()
{
this._initialized = false;
this._initAttributes(this._attributes);
this.setAttributes(this._attributes, true);
this._initialized = true;
},
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.FlashAdapter.superclass.set.call(this, name, value);
},
/**
* Initializes the attributes.
*
* @method _initAttributes
* @private
*/
_initAttributes: function(attributes)
{
//should be overridden if other attributes need to be set up
/**
* @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.getAttributeConfig("altText",
{
method: this._getAltText
});
this.setAttributeConfig("altText",
{
method: this._setAltText
});
/**
* @attribute swfURL
* @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
* set after Flash Player has been embedded in the page.
* @type String
*/
this.getAttributeConfig("swfURL",
{
method: this._getSWFURL
});
},
/**
* 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)
{
return this._swf.setAltText(value);
}
});
/**
* Receives event messages from SWF and passes them to the correct instance
* of FlashAdapter.
*
* @method YAHOO.widget.FlashAdapter.eventHandler
* @static
* @private
*/
YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
{
var loadedSWF = YAHOO.util.Dom.get(elementID);
if(!loadedSWF.owner)
{
//fix for ie: if owner doesn't exist yet, try again in a moment
setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
}
else
{
loadedSWF.owner._eventHandler(event);
}
};
/**
* The number of proxy functions that have been created.
* @static
* @private
*/
YAHOO.widget.FlashAdapter.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.FlashAdapter.createProxyFunction
* @static
* @private
*/
YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
{
var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
{
return func.apply(null, arguments);
};
YAHOO.widget.FlashAdapter.proxyFunctionCount++;
return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
};
/**
* Removes a function created with createProxyFunction()
*
* @method YAHOO.widget.FlashAdapter.removeProxyFunction
* @static
* @private
*/
YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
{
//quick error check
if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
{
return;
}
funcName = funcName.substr(26);
YAHOO.widget.FlashAdapter[funcName] = null;
};
/**
* 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.widget.FlashAdapter
* @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, attributes)
{
YAHOO.widget.Chart.superclass.constructor.call(this, YAHOO.widget.Chart.SWFURL, containerId, attributes);
this._type = type;
this._dataSource = dataSource;
/**
* 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.widget.FlashAdapter,
{
/**
* 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.FlashAdapter.createProxyFunction()
* @property _dataTipFunction
* @type String
* @private
*/
_dataTipFunction: null,
/**
* Stores references to series labelFunction values created by
* YAHOO.widget.FlashAdapter.createProxyFunction()
* @property _seriesLabelFunctions
* @type Array
* @private
*/
_seriesLabelFunctions: 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.FlashAdapter.removeProxyFunction(this._dataTipFunction);
}
//call last
YAHOO.widget.Chart.superclass.destroy.call(this);
},
/**
* Initializes the attributes.
*
* @method _initAttributes
* @private
*/
_initAttributes: function(attributes)
{
YAHOO.widget.Chart.superclass._initAttributes.call(this, attributes);
/**
* @attribute request
* @description Request to be sent to the Chart's DataSource.
* @type String
*/
this.getAttributeConfig("request",
{
method: this._getRequest
});
this.setAttributeConfig("request",
{
method: this._setRequest
});
/**
* @attribute dataSource
* @description The DataSource instance to display in the Chart.
* @type DataSource
*/
this.getAttributeConfig("dataSource",
{
method: this._getDataSource
});
this.setAttributeConfig("dataSource",
{
method: this._setDataSource
});
/**
* @attribute series
* @description Defines the series to be displayed by the Chart.
* @type Array
*/
this.getAttributeConfig("series",
{
method: this._getSeriesDefs
});
this.setAttributeConfig("series",
{
method: this._setSeriesDefs
});
/**
* @attribute categoryNames
* @description Defines the names of the categories to be displayed in the Chart..
* @type Array
*/
this.getAttributeConfig("categoryNames",
{
method: this._getCategoryNames
});
this.setAttributeConfig("categoryNames",
{
validator: YAHOO.lang.isArray,
method: this._setCategoryNames
});
/**
* @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.getAttributeConfig("dataTipFunction",
{
method: this._getDataTipFunction
});
this.setAttributeConfig("dataTipFunction",
{
method: this._setDataTipFunction
});
/**
* @attribute polling
* @description A numeric value indicating the number of milliseconds between
* polling requests to the DataSource.
* @type Number
*/
this.getAttributeConfig("polling",
{
method: this._getPolling
});
this.setAttributeConfig("polling",
{
method: this._setPolling
});
},
/**
* 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!
this._swf.setType(this._type);
//set initial styles
if(this._attributes.style)
{
var style = this._attributes.style;
this.setStyles(style);
}
YAHOO.widget.Chart.superclass._loadHandler.call(this);
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)
{
YAHOO.log("Unable to load data.", "error");
}
else
{
var i;
if(this._seriesLabelFunctions)
{
var count = this._seriesLabelFunctions.length;
for(i = 0; i < count; i++)
{
YAHOO.widget.FlashAdapter.removeProxyFunction(this._seriesLabelFunctions[i]);
}
this._seriesLabelFunction = null;
}
this._seriesLabelFunctions = [];
//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 &&
typeof currentSeries.labelFunction == "function")
{
clonedSeries.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(currentSeries.labelFunction);
this._seriesLabelFunctions.push(clonedSeries.labelFunction);
}
}
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);
}
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()
{
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.FlashAdapter.removeProxyFunction(this._dataTipFunction);
}
if(value && typeof value == "function")
{
value = YAHOO.widget.FlashAdapter.createProxyFunction(value);
this._dataTipFunction = value;
}
this._swf.setDataTipFunction(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();
}
});
/**
* 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.getAttributeConfig("dataField",
{
method: this._getDataField
});
this.setAttributeConfig("dataField",
{
validator: YAHOO.lang.isString,
method: this._setDataField
});
/**
* @attribute categoryField
* @description The field in each item that corresponds to the category value.
* @type String
*/
this.getAttributeConfig("categoryField",
{
method: this._getCategoryField
});
this.setAttributeConfig("categoryField",
{
validator: YAHOO.lang.isString,
method: this._setCategoryField
});
},
/**
* 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.FlashAdapter.createProxyFunction()
* @property _xAxisLabelFunction
* @type String
* @private
*/
_xAxisLabelFunction: null,
/**
* Stores a reference to the yAxis labelFunction created by
* YAHOO.widget.FlashAdapter.createProxyFunction()
* @property _yAxisLabelFunction
* @type String
* @private
*/
_yAxisLabelFunction: null,
destroy: function()
{
//remove proxy functions
if(this._xAxisLabelFunction)
{
YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
this._xAxisLabelFunction = null;
}
if(this._yAxisLabelFunction)
{
YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
this._yAxisLabelFunction = null;
}
//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.getAttributeConfig("xField",
{
method: this._getXField
});
this.setAttributeConfig("xField",
{
validator: YAHOO.lang.isString,
method: this._setXField
});
/**
* @attribute yField
* @description The field in each item that corresponds to a value on the x axis.
* @type String
*/
this.getAttributeConfig("yField",
{
method: this._getYField
});
this.setAttributeConfig("yField",
{
validator: YAHOO.lang.isString,
method: this._setYField
});
/**
* @attribute xAxis
* @description A custom configuration for the horizontal x axis.
* @type Axis
*/
this.setAttributeConfig("xAxis",
{
method: this._setXAxis
});
/**
* @attribute yAxis
* @description A custom configuration for the vertical y axis.
* @type Axis
*/
this.setAttributeConfig("yAxis",
{
method: this._setYAxis
});
},
/**
* 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);
},
/**
* Setter for the xAxis attribute.
*
* @method _setXAxis
* @private
*/
_setXAxis: function(value)
{
if(this._xAxisLabelFunction !== null)
{
YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
this._xAxisLabelFunction = null;
}
var clonedXAxis = {};
for(var prop in value)
{
if(prop == "labelFunction")
{
if(value.labelFunction !== null)
{
if(typeof value.labelFunction == "function")
{
clonedXAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
}
else
{
clonedXAxis.labelFunction = value.labelFunction;
}
this._xAxisLabelFunction = clonedXAxis.labelFunction;
}
}
else
{
clonedXAxis[prop] = value[prop];
}
}
this._swf.setHorizontalAxis(clonedXAxis);
},
/**
* Getter for the yAxis attribute.
*
* @method _setYAxis
* @private
*/
_setYAxis: function(value)
{
if(this._yAxisLabelFunction !== null)
{
YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
this._yAxisLabelFunction = null;
}
var clonedYAxis = {};
for(var prop in value)
{
if(prop == "labelFunction")
{
if(value.labelFunction !== null)
{
if(typeof value.labelFunction == "function")
{
clonedYAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
}
else
{
clonedYAxis.labelFunction = value.labelFunction;
}
this._yAxisLabelFunction = clonedYAxis.labelFunction;
}
}
else
{
clonedYAxis[prop] = value[prop];
}
}
this._swf.setVerticalAxis(clonedYAxis);
}
});
/**
* 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
});
/**
* 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
});
/**
* 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 calcualateCategoryCount
* @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
});
/**
* 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"
});
YAHOO.register("charts", YAHOO.widget.Chart, {version: "2.7.0", build: "1799"});