datasource-function.js revision 34c2cd9ace7db6f07c9ed3b4a813810d4fa20ee3
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich/**
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * The DataSource utility provides a common configurable interface for widgets to
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * access a variety of data, from JavaScript arrays to online database servers.
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich *
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @module datasource
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich */
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovichvar LANG = Y.Lang,
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich/**
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * Function subclass for the YUI DataSource utility.
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @class DataSource.Function
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @extends DataSource.Local
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @constructor
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich */
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich DSFn = function() {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich DSFn.superclass.constructor.apply(this, arguments);
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich };
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /////////////////////////////////////////////////////////////////////////////
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich //
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich // DataSource.Function static properties
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich //
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /////////////////////////////////////////////////////////////////////////////
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen RabinovichY.mix(DSFn, {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /**
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * Class name.
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich *
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @property NAME
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @type String
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @static
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @final
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @value "dataSourceFunction"
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich */
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich NAME: "dataSourceFunction",
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /////////////////////////////////////////////////////////////////////////////
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich //
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich // DataSource.Function Attributes
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich //
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /////////////////////////////////////////////////////////////////////////////
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich ATTRS: {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /**
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @attribute source
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @description Pointer to live data.
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith * @type MIXED
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @default null
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich */
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich source: {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich validator: LANG.isFunction
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich },
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /**
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * Context in which to execute the function. By default, is the DataSource
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * instance itself. If set, the function will receive the DataSource instance
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * as an additional argument.
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich *
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith * @property scope
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @type Object
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @default null
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich */
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich context: {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich value: null
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich }
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich }
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich});
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen RabinovichY.extend(DSFn, Y.DataSource.Local, {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /**
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * Internal init() handler.
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich *
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @method initializer
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @param config {Object} Config object.
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @private
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich */
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith initializer: function(config) {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich },
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich /**
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * Passes query string to IO. Fires <code>response</code> event when
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * response is received asynchronously.
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich *
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @method _defRequestFn
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @param e {Event.Facade} Event Facade with the following properties:
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * <dl>
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * <dt>tId (Number)</dt> <dd>Unique transaction ID.</dd>
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * <dt>request (Object)</dt> <dd>The request.</dd>
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith * <dt>callback (Object)</dt> <dd>The callback object with the following properties:
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * <dl>
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * <dt>success (Function)</dt> <dd>Success handler.</dd>
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * <dt>failure (Function)</dt> <dd>Failure handler.</dd>
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * <dt>scope (Object)</dt> <dd>Execution context.</dd>
829f44d633f4910c12181f3295e5c6b996d7e559Allen Rabinovich * </dl>
829f44d633f4910c12181f3295e5c6b996d7e559Allen Rabinovich * </dd>
829f44d633f4910c12181f3295e5c6b996d7e559Allen Rabinovich * <dt>cfg (Object)</dt> <dd>Configuration object.</dd>
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * </dl>
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich * @protected
10d8bafc5c24f3a4285cf6060a1935ba5cfc4b85Luke Smith */
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich _defRequestFn: function(e) {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich var fn = this.get("source"),
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich scope = this.get("scope") || this,
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich response;
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
829f44d633f4910c12181f3295e5c6b996d7e559Allen Rabinovich if(fn) {
829f44d633f4910c12181f3295e5c6b996d7e559Allen Rabinovich response = fn.call(scope, e.request, this, e);
829f44d633f4910c12181f3295e5c6b996d7e559Allen Rabinovich this.fire("data", Y.mix({data:response}, e));
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich }
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich else {
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich e.error = new Error("Function data failure");
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich this.fire("error", e);
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich }
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich return e.tId;
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich }
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich});
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen RabinovichY.DataSource.Function = DSFn;
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich
2f17bc2f9d34cb9377a0c15ea9519471bb83e4ecAllen Rabinovich