diff -r 000000000000 -r 40c8f766c9b8 src/cm/media/js/lib/yui/yui_3.0.0b1/build/datasource/datasource-debug.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui_3.0.0b1/build/datasource/datasource-debug.js Mon Nov 23 15:14:29 2009 +0100 @@ -0,0 +1,1454 @@ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 3.0.0b1 +build: 1163 +*/ +YUI.add('datasource-local', function(Y) { + +/** + * The DataSource utility provides a common configurable interface for widgets to + * access a variety of data, from JavaScript arrays to online database servers. + * + * @module datasource + */ + +/** + * Provides the base DataSource implementation, which can be extended to + * create DataSources for specific data protocols, such as the IO Utility, the + * Get Utility, or custom functions. + * + * @module datasource + * @submodule datasource-local + */ + +/** + * Base class for the DataSource Utility. + * @class DataSource.Local + * @extends Base + * @constructor + */ +var LANG = Y.Lang, + +DSLocal = function() { + DSLocal.superclass.constructor.apply(this, arguments); +}; + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource static properties + // + ///////////////////////////////////////////////////////////////////////////// +Y.mix(DSLocal, { + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceLocal" + */ + NAME: "dataSourceLocal", + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + /** + * @attribute source + * @description Pointer to live data. + * @type MIXED + * @default null + */ + source: { + value: null + } + }, + + /** + * Global transaction counter. + * + * @property DataSource._tId + * @type Number + * @static + * @private + * @default 0 + */ + _tId: 0, + + /** + * Executes a given callback. The third param determines whether to execute + * + * @method DataSource.issueCallback + * @param callback {Object} The callback object. + * @param params {Array} params to be passed to the callback method + * @param error {Boolean} whether an error occurred + * @static + */ + issueCallback: function (e) { + if(e.callback) { + var callbackFunc = (e.error && e.callback.failure) || e.callback.success; + if (callbackFunc) { + callbackFunc(e); + } + } + } +}); + +Y.extend(DSLocal, Y.Base, { + /** + * Internal init() handler. + * + * @method initializer + * @param config {Object} Config object. + * @private + */ + initializer: function(config) { + this._initEvents(); + }, + + /** + * This method creates all the events for this module. + * @method _initEvents + * @private + */ + _initEvents: function() { + /** + * Fired when a data request is received. + * + * @event request + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object.
+ *
cfg (Object)
Configuration object.
+ *
+ * @preventable _defRequestFn + */ + this.publish("request", {defaultFn: Y.bind("_defRequestFn", this), queuable:true}); + + /** + * Fired when raw data is received. + * + * @event data + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
data (Object)
Raw data.
+ *
+ * @preventable _defDataFn + */ + this.publish("data", {defaultFn: Y.bind("_defDataFn", this), queuable:true}); + + /** + * Fired when response is returned. + * + * @event response + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
data (Object)
Raw data.
+ *
response (Object)
Normalized response object with the following properties: + *
+ *
results (Object)
Parsed results.
+ *
meta (Object)
Parsed meta data.
+ *
error (Boolean)
Error flag.
+ *
+ *
+ *
+ * @preventable _defResponseFn + */ + this.publish("response", {defaultFn: Y.bind("_defResponseFn", this), queuable:true}); + + /** + * Fired when an error is encountered. + * + * @event error + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
data (Object)
Raw data.
+ *
response (Object)
Normalized response object with the following properties: + *
+ *
results (Object)
Parsed results.
+ *
meta (Object)
Parsed meta data.
+ *
error (Object)
Error object.
+ *
+ *
+ *
+ */ + + }, + + /** + * Manages request/response transaction. Must fire response + * event when response is received. This method should be implemented by + * subclasses to achieve more complex behavior such as accessing remote data. + * + * @method _defRequestFn + * @param e {Event.Facade} Event Facadewith the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
+ * @protected + */ + _defRequestFn: function(e) { + var data = this.get("source"); + + // Problematic data + if(LANG.isUndefined(data)) { + e.error = new Error("Local source undefined"); + } + if(e.error) { + this.fire("error", e); + Y.log("Error in response", "error", "datasource-local"); + } + + this.fire("data", Y.mix({data:data}, e)); + Y.log("Transaction " + e.tId + " complete. Request: " + + Y.dump(e.request) + " . Response: " + Y.dump(e.response), "info", "datasource-local"); + }, + + /** + * Normalizes raw data into a response that includes results and meta properties. + * + * @method _defDataFn + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
data (Object)
Raw data.
+ *
+ * @protected + */ + _defDataFn: function(e) { + var data = e.data, + meta = e.meta, + response = { + results: (LANG.isArray(data)) ? data : [data], + meta: (meta) ? meta : {} + }; + + this.fire("response", Y.mix({response: response}, e)); + }, + + /** + * Sends data as a normalized response to callback. + * + * @method _defResponseFn + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
data (Object)
Raw data.
+ *
response (Object)
Normalized response object with the following properties: + *
+ *
results (Object)
Parsed results.
+ *
meta (Object)
Parsed meta data.
+ *
error (Boolean)
Error flag.
+ *
+ *
+ *
+ * @protected + */ + _defResponseFn: function(e) { + // Send the response back to the callback + DSLocal.issueCallback(e); + }, + + /** + * Generates a unique transaction ID and fires request event. + * + * @method sendRequest + * @param request {Object} Request. + * @param callback {Object} An object literal with the following properties: + *
+ *
success
+ *
The function to call when the data is ready.
+ *
failure
+ *
The function to call upon a response failure condition.
+ *
argument
+ *
Arbitrary data payload that will be passed back to the success and failure handlers.
+ *
+ * @param cfg {Object} Configuration object + * @return {Number} Transaction ID. + */ + sendRequest: function(request, callback, cfg) { + var tId = DSLocal._tId++; + this.fire("request", {tId:tId, request:request, callback:callback, cfg:cfg || {}}); + Y.log("Transaction " + tId + " sent request: " + Y.dump(request), "info", "datasource-local"); + return tId; + } +}); + +Y.namespace("DataSource").Local = DSLocal; + + + +}, '3.0.0b1' ,{requires:['base']}); + +YUI.add('datasource-io', function(Y) { + +/** + * Provides a DataSource implementation which can be used to retrieve data via the IO Utility. + * + * @module datasource + * @submodule datasource-io + */ + +/** + * IO subclass for the DataSource Utility. + * @class DataSource.IO + * @extends DataSource.Local + * @constructor + */ +var DSIO = function() { + DSIO.superclass.constructor.apply(this, arguments); +}; + + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource.IO static properties + // + ///////////////////////////////////////////////////////////////////////////// +Y.mix(DSIO, { + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceIO" + */ + NAME: "dataSourceIO", + + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource.IO Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + /** + * Pointer to IO Utility. + * + * @attribute io + * @type Y.io + * @default Y.io + */ + io: { + value: Y.io, + cloneDefaultValue: false + } + } +}); + +Y.extend(DSIO, Y.DataSource.Local, { + /** + * Internal init() handler. + * + * @method initializer + * @param config {Object} Config object. + * @private + */ + initializer: function(config) { + this._queue = {interval:null, conn:null, requests:[]}; + }, + + /** + * @property _queue + * @description Object literal to manage asynchronous request/response + * cycles enabled if queue needs to be managed (asyncMode/ioConnMode): + *
+ *
interval {Number}
+ *
Interval ID of in-progress queue.
+ *
conn
+ *
In-progress connection identifier (if applicable).
+ *
requests {Object[]}
+ *
Array of queued request objects: {request:request, callback:callback}.
+ *
+ * @type Object + * @default {interval:null, conn:null, requests:[]} + * @private + */ + _queue: null, + + /** + * Passes query string to IO. Fires response event when + * response is received asynchronously. + * + * @method _defRequestFn + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
+ * @protected + */ + _defRequestFn: function(e) { + var uri = this.get("source"), + cfg = Y.mix(e.cfg, { + on: { + success: function (id, response, e) { + this.fire("data", Y.mix({data:response}, e)); + Y.log("Received IO data response for \"" + e.request + "\"", "info", "datasource-io"); + }, + failure: function (id, response, e) { + e.error = new Error("IO data failure"); + this.fire("error", Y.mix({data:response}, e)); + this.fire("data", Y.mix({data:response}, e)); + Y.log("Received IO data failure for \"" + e.request + "\"", "info", "datasource-io"); + } + }, + context: this, + arguments: e + }); + + this.get("io")(uri, cfg); + return e.tId; + } +}); + +Y.DataSource.IO = DSIO; + + + + +}, '3.0.0b1' ,{requires:['datasource-local', 'io']}); + +YUI.add('datasource-get', function(Y) { + +/** + * Provides a DataSource implementation which can be used to retrieve data via the Get Utility. + * + * @module datasource + * @submodule datasource-get + */ + +/** + * Get Utility subclass for the DataSource Utility. + * @class DataSource.Get + * @extends DataSource.Local + * @constructor + */ +var DSGet = function() { + DSGet.superclass.constructor.apply(this, arguments); +}; + + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource.Get static properties + // + ///////////////////////////////////////////////////////////////////////////// +Y.mix(DSGet, { + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceGet" + */ + NAME: "dataSourceGet", + + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource.Get Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + /** + * Pointer to Get Utility. + * + * @attribute get + * @type Y.Get + * @default Y.Get + */ + get: { + value: Y.Get, + cloneDefaultValue: false + }, + +/** + * Defines request/response management in the following manner: + *
+ * + *
ignoreStaleResponses
+ *
Send all requests, but handle only the response for the most recently sent request.
+ *
allowAll
+ *
Send all requests and handle all responses.
+ *
+ * + * @attribute asyncMode + * @type String + * @default "allowAll" + */ +asyncMode: { + value: "allowAll" +}, + +/** + * Callback string parameter name sent to the remote script. By default, + * requests are sent to + * <URI>?<scriptCallbackParam>=callbackFunction + * + * @attribute scriptCallbackParam + * @type String + * @default "callback" + */ +scriptCallbackParam : { + value: "callback" +}, + +/** + * Accepts the DataSource instance and a callback ID, and returns a callback + * param/value string that gets appended to the script URI. Implementers + * can customize this string to match their server's query syntax. + * + * @attribute generateRequestCallback + * @type Function + */ +generateRequestCallback : { + value: function(self, id) { + return "&" + self.get("scriptCallbackParam") + "=YUI.Env.DataSource.callbacks["+id+"]" ; + } +} + + + + + + }, + + /** + * Global array of callback functions, one for each request sent. + * + * @property callbacks + * @type Function[] + * @static + */ + callbacks : [], + + /** + * Unique ID to track requests. + * + * @property _tId + * @type Number + * @private + * @static + */ + _tId : 0 +}); + +Y.extend(DSGet, Y.DataSource.Local, { + /** + * Passes query string to Get Utility. Fires response event when + * response is received asynchronously. + * + * @method _defRequestFn + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
+ * @protected + */ + _defRequestFn: function(e) { + var uri = this.get("source"), + get = this.get("get"), + id = DSGet._tId++, + self = this; + + + + + + + + + + + + + + // Dynamically add handler function with a closure to the callback stack + YUI.Env.DataSource.callbacks[id] = Y.rbind(function(response) { + if((self.get("asyncMode") !== "ignoreStaleResponses")|| + (id === DSGet.callbacks.length-1)) { // Must ignore stale responses + + self.fire("data", Y.mix({data:response}, e)); + } + else { + Y.log("DataSource ignored stale response for id " + e.tId + "(" + e.request + ")", "info", "datasource-get"); + } + + delete DSGet.callbacks[id]; + }, this, id); + + // We are now creating a request + uri += e.request + this.get("generateRequestCallback")(this, id); + //uri = this.doBefore(sUri); + Y.log("DataSource is querying URL " + uri, "info", "datasource-get"); + get.script(uri, { + autopurge: true, + // Works in Firefox only.... + onFailure: Y.bind(function(e) { + e.error = new Error("Script node data failure"); + this.fire("error", e); + }, this, e) + }); + + + + + + + + + + + + + + + + return e.tId; + } +}); + +Y.DataSource.Get = DSGet; +YUI.namespace("Env.DataSource.callbacks"); + + + + +}, '3.0.0b1' ,{requires:['datasource-local', 'get']}); + +YUI.add('datasource-function', function(Y) { + +/** + * Provides a DataSource implementation which can be used to retrieve data from a custom function. + * + * @module datasource + * @submodule datasource-function + */ + +/** + * Function subclass for the DataSource Utility. + * @class DataSource.Function + * @extends DataSource.Local + * @constructor + */ +var LANG = Y.Lang, + + DSFn = function() { + DSFn.superclass.constructor.apply(this, arguments); + }; + + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource.Function static properties + // + ///////////////////////////////////////////////////////////////////////////// +Y.mix(DSFn, { + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceFunction" + */ + NAME: "dataSourceFunction", + + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSource.Function Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + /** + * @attribute source + * @description Pointer to live data. + * @type MIXED + * @default null + */ + source: { + validator: LANG.isFunction + } + } +}); + +Y.extend(DSFn, Y.DataSource.Local, { + /** + * Passes query string to IO. Fires response event when + * response is received asynchronously. + * + * @method _defRequestFn + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
+ * @protected + */ + _defRequestFn: function(e) { + var fn = this.get("source"), + response; + + if(fn) { + response = fn(e.request, this, e); + this.fire("data", Y.mix({data:response}, e)); + } + else { + e.error = new Error("Function data failure"); + this.fire("error", e); + } + + return e.tId; + } +}); + +Y.DataSource.Function = DSFn; + + + + +}, '3.0.0b1' ,{requires:['datasource-local']}); + +YUI.add('datasource-cache', function(Y) { + +/** + * Extends DataSource with caching functionality. + * + * @module datasource + * @submodule datasource-cache + */ + +/** + * Adds cacheability to the DataSource Utility. + * @class DataSourceCache + * @extends Cache + */ +var DataSourceCache = function() { + DataSourceCache.superclass.constructor.apply(this, arguments); +}; + +Y.mix(DataSourceCache, { + /** + * The namespace for the plugin. This will be the property on the host which + * references the plugin instance. + * + * @property NS + * @type String + * @static + * @final + * @value "cache" + */ + NS: "cache", + + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceCache" + */ + NAME: "dataSourceCache", + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSourceCache Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + + } +}); + +Y.extend(DataSourceCache, Y.Cache, { + /** + * Internal init() handler. + * + * @method initializer + * @param config {Object} Config object. + * @private + */ + initializer: function(config) { + this.doBefore("_defRequestFn", this._beforeDefRequestFn); + this.doBefore("_defResponseFn", this._beforeDefResponseFn); + }, + + /** + * First look for cached response, then send request to live data. + * + * @method _beforeDefRequestFn + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object.
+ *
cfg (Object)
Configuration object.
+ *
+ * @protected + */ + _beforeDefRequestFn: function(e) { + // Is response already in the Cache? + var entry = (this.retrieve(e.request)) || null; + if(entry && entry.response) { + this.get("host").fire("response", Y.mix({response: entry.response}, e)); + return new Y.Do.Halt("DataSourceCache plugin halted _defRequestFn"); + } + }, + + /** + * Adds data to cache before returning data. + * + * @method _beforeDefResponseFn + * @param e {Event.Facade} Event Facade with the following properties: + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
data (Object)
Raw data.
+ *
response (Object)
Normalized response object with the following properties: + *
+ *
cached (Object)
True when response is cached.
+ *
results (Object)
Parsed results.
+ *
meta (Object)
Parsed meta data.
+ *
error (Object)
Error object.
+ *
+ *
+ *
cfg (Object)
Configuration object.
+ *
+ * @protected + */ + _beforeDefResponseFn: function(e) { + // Add to Cache before returning + if(e.response && !e.response.cached) { + e.response.cached = true; + this.add(e.request, e.response, (e.callback && e.callback.argument)); + } + } +}); + +Y.namespace('Plugin').DataSourceCache = DataSourceCache; + + + +}, '3.0.0b1' ,{requires:['datasource-local', 'cache']}); + +YUI.add('datasource-jsonschema', function(Y) { + +/** + * Extends DataSource with schema-parsing on JSON data. + * + * @module datasource + * @submodule datasource-jsonschema + */ + +/** + * Adds schema-parsing to the DataSource Utility. + * @class DataSourceJSONSchema + * @extends Plugin.Base + */ +var DataSourceJSONSchema = function() { + DataSourceJSONSchema.superclass.constructor.apply(this, arguments); +}; + +Y.mix(DataSourceJSONSchema, { + /** + * The namespace for the plugin. This will be the property on the host which + * references the plugin instance. + * + * @property NS + * @type String + * @static + * @final + * @value "schema" + */ + NS: "schema", + + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceJSONSchema" + */ + NAME: "dataSourceJSONSchema", + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSourceJSONSchema Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + schema: { + //value: {} + } + } +}); + +Y.extend(DataSourceJSONSchema, Y.Plugin.Base, { + /** + * Internal init() handler. + * + * @method initializer + * @param config {Object} Config object. + * @private + */ + initializer: function(config) { + this.doBefore("_defDataFn", this._beforeDefDataFn); + }, + + /** + * Parses raw data into a normalized response. + * + * @method _beforeDefDataFn + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
data (Object)
Raw data.
+ *
+ * @protected + */ + _beforeDefDataFn: function(e) { + var data = (Y.DataSource.IO && (this.get("host") instanceof Y.DataSource.IO) && Y.Lang.isString(e.data.responseText)) ? e.data.responseText : e.data, + response = Y.DataSchema.JSON.apply(this.get("schema"), data); + + // Default + if(!response) { + response = { + meta: {}, + results: data + }; + } + + this.get("host").fire("response", Y.mix({response:response}, e)); + return new Y.Do.Halt("DataSourceJSONSchema plugin halted _defDataFn"); + } +}); + +Y.namespace('Plugin').DataSourceJSONSchema = DataSourceJSONSchema; + + + +}, '3.0.0b1' ,{requires:['plugin', 'datasource-local', 'dataschema-json']}); + +YUI.add('datasource-xmlschema', function(Y) { + +/** + * Extends DataSource with schema-parsing on XML data. + * + * @module datasource + * @submodule datasource-xmlschema + */ + +/** + * Adds schema-parsing to the DataSource Utility. + * @class DataSourceXMLSchema + * @extends Plugin.Base + */ +var DataSourceXMLSchema = function() { + DataSourceXMLSchema.superclass.constructor.apply(this, arguments); +}; + +Y.mix(DataSourceXMLSchema, { + /** + * The namespace for the plugin. This will be the property on the host which + * references the plugin instance. + * + * @property NS + * @type String + * @static + * @final + * @value "schema" + */ + NS: "schema", + + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceXMLSchema" + */ + NAME: "dataSourceXMLSchema", + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSourceXMLSchema Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + schema: { + //value: {} + } + } +}); + +Y.extend(DataSourceXMLSchema, Y.Plugin.Base, { + /** + * Internal init() handler. + * + * @method initializer + * @param config {Object} Config object. + * @private + */ + initializer: function(config) { + this.doBefore("_defDataFn", this._beforeDefDataFn); + }, + + /** + * Parses raw data into a normalized response. + * + * @method _beforeDefDataFn + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
data (Object)
Raw data.
+ *
+ * @protected + */ + _beforeDefDataFn: function(e) { + var data = (Y.DataSource.IO && (this.get("host") instanceof Y.DataSource.IO) && e.data.responseXML && (e.data.responseXML.nodeType === 9)) ? e.data.responseXML : e.data, + response = Y.DataSchema.XML.apply(this.get("schema"), data); + + // Default + if(!response) { + response = { + meta: {}, + results: data + }; + } + + this.get("host").fire("response", Y.mix({response:response}, e)); + return new Y.Do.Halt("DataSourceXMLSchema plugin halted _defDataFn"); + } +}); + +Y.namespace('Plugin').DataSourceXMLSchema = DataSourceXMLSchema; + + + +}, '3.0.0b1' ,{requires:['plugin', 'datasource-local', 'dataschema-xml']}); + +YUI.add('datasource-arrayschema', function(Y) { + +/** + * Extends DataSource with schema-parsing on array data. + * + * @module datasource + * @submodule datasource-arrayschema + */ + +/** + * Adds schema-parsing to the DataSource Utility. + * @class DataSourceArraySchema + * @extends Plugin.Base + */ +var DataSourceArraySchema = function() { + DataSourceArraySchema.superclass.constructor.apply(this, arguments); +}; + +Y.mix(DataSourceArraySchema, { + /** + * The namespace for the plugin. This will be the property on the host which + * references the plugin instance. + * + * @property NS + * @type String + * @static + * @final + * @value "schema" + */ + NS: "schema", + + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceArraySchema" + */ + NAME: "dataSourceArraySchema", + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSourceArraySchema Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + schema: { + //value: {} + } + } +}); + +Y.extend(DataSourceArraySchema, Y.Plugin.Base, { + /** + * Internal init() handler. + * + * @method initializer + * @param config {Object} Config object. + * @private + */ + initializer: function(config) { + this.doBefore("_defDataFn", this._beforeDefDataFn); + }, + + /** + * Parses raw data into a normalized response. + * + * @method _beforeDefDataFn + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
data (Object)
Raw data.
+ *
+ * @protected + */ + _beforeDefDataFn: function(e) { + var data = (Y.DataSource.IO && (this.get("host") instanceof Y.DataSource.IO) && Y.Lang.isString(e.data.responseText)) ? e.data.responseText : e.data, + response = Y.DataSchema.Array.apply(this.get("schema"), data); + + // Default + if(!response) { + response = { + meta: {}, + results: data + }; + } + + this.get("host").fire("response", Y.mix({response:response}, e)); + return new Y.Do.Halt("DataSourceArraySchema plugin halted _defDataFn"); + } +}); + +Y.namespace('Plugin').DataSourceArraySchema = DataSourceArraySchema; + + + +}, '3.0.0b1' ,{requires:['plugin', 'datasource-local', 'dataschema-array']}); + +YUI.add('datasource-textschema', function(Y) { + +/** + * Extends DataSource with schema-parsing on text data. + * + * @module datasource + * @submodule datasource-textschema + */ + +/** + * Adds schema-parsing to the DataSource Utility. + * @class DataSourceTextSchema + * @extends Plugin.Base + */ +var DataSourceTextSchema = function() { + DataSourceTextSchema.superclass.constructor.apply(this, arguments); +}; + +Y.mix(DataSourceTextSchema, { + /** + * The namespace for the plugin. This will be the property on the host which + * references the plugin instance. + * + * @property NS + * @type String + * @static + * @final + * @value "schema" + */ + NS: "schema", + + /** + * Class name. + * + * @property NAME + * @type String + * @static + * @final + * @value "dataSourceTextSchema" + */ + NAME: "dataSourceTextSchema", + + ///////////////////////////////////////////////////////////////////////////// + // + // DataSourceTextSchema Attributes + // + ///////////////////////////////////////////////////////////////////////////// + + ATTRS: { + schema: { + //value: {} + } + } +}); + +Y.extend(DataSourceTextSchema, Y.Plugin.Base, { + /** + * Internal init() handler. + * + * @method initializer + * @param config {Object} Config object. + * @private + */ + initializer: function(config) { + this.doBefore("_defDataFn", this._beforeDefDataFn); + }, + + /** + * Parses raw data into a normalized response. + * + * @method _beforeDefDataFn + *
+ *
tId (Number)
Unique transaction ID.
+ *
request (Object)
The request.
+ *
callback (Object)
The callback object with the following properties: + *
+ *
success (Function)
Success handler.
+ *
failure (Function)
Failure handler.
+ *
+ *
+ *
data (Object)
Raw data.
+ *
+ * @protected + */ + _beforeDefDataFn: function(e) { + var data = (Y.DataSource.IO && (this.get("host") instanceof Y.DataSource.IO) && Y.Lang.isString(e.data.responseText)) ? e.data.responseText : e.data, + response = Y.DataSchema.Text.apply(this.get("schema"), data); + + // Default + if(!response) { + response = { + meta: {}, + results: data + }; + } + + this.get("host").fire("response", Y.mix({response:response}, e)); + return new Y.Do.Halt("DataSourceTextSchema plugin halted _defDataFn"); + } +}); + +Y.namespace('Plugin').DataSourceTextSchema = DataSourceTextSchema; + + + +}, '3.0.0b1' ,{requires:['plugin', 'datasource-local', 'dataschema-text']}); + +YUI.add('datasource-polling', function(Y) { + +/** + * Extends DataSource with polling functionality. + * + * @module datasource + * @submodule datasource-polling + */ + +/** + * Adds polling to the DataSource Utility. + * @class Pollable + * @extends DataSource.Local + */ +var LANG = Y.Lang, + + Pollable = function() { + this._intervals = {}; + }; + +Pollable.prototype = { + + /** + * @property _intervals + * @description Hash of polling interval IDs that have been enabled, + * stored here to be able to clear all intervals. + * @private + */ + _intervals: null, + + /** + * Sets up a polling mechanism to send requests at set intervals and forward + * responses to given callback. + * + * @method setInterval + * @param msec {Number} Length of interval in milliseconds. + * @param request {Object} Request object. + * @param callback {Object} An object literal with the following properties: + *
+ *
success
+ *
The function to call when the data is ready.
+ *
failure
+ *
The function to call upon a response failure condition.
+ *
argument
+ *
Arbitrary data that will be passed back to the success and failure handlers.
+ *
+ * @return {Number} Interval ID. + */ + setInterval: function(msec, request, callback) { + var x = Y.later(msec, this, this.sendRequest, [request, callback], true); + this._intervals[x.id] = x; + return x.id; + }, + + /** + * Disables polling mechanism associated with the given interval ID. + * + * @method clearInterval + * @param id {Number} Interval ID. + */ + clearInterval: function(id, key) { + // In case of being called by clearAllIntervals() + id = key || id; + if(this._intervals[id]) { + // Clear the interval + this._intervals[id].cancel(); + // Clear from tracker + delete this._intervals[id]; + } + }, + + /** + * Clears all intervals. + * + * @method clearAllIntervals + */ + clearAllIntervals: function() { + Y.each(this._intervals, this.clearInterval, this); + } +}; + +Y.augment(Y.DataSource.Local, Pollable); + + + +}, '3.0.0b1' ,{requires:['datasource-local']}); + + + +YUI.add('datasource', function(Y){}, '3.0.0b1' ,{use:['datasource-local','datasource-io','datasource-get','datasource-function','datasource-cache','datasource-jsonschema','datasource-xmlschema','datasource-arrayschema','datasource-textschema','datasource-polling']}); +