src/cm/media/js/lib/yui/yui3-3.15.0/build/datasource-get/datasource-get-debug.js
changeset 602 e16a97fb364a
equal deleted inserted replaced
601:d334a616c023 602:e16a97fb364a
       
     1 YUI.add('datasource-get', function (Y, NAME) {
       
     2 
       
     3 /**
       
     4  * Provides a DataSource implementation which can be used to retrieve data via the Get Utility.
       
     5  *
       
     6  * @module datasource
       
     7  * @submodule datasource-get
       
     8  */
       
     9 
       
    10 /**
       
    11  * Get Utility subclass for the DataSource Utility.
       
    12  * @class DataSource.Get
       
    13  * @extends DataSource.Local
       
    14  * @constructor
       
    15  */
       
    16 var DSGet = function() {
       
    17     DSGet.superclass.constructor.apply(this, arguments);
       
    18 };
       
    19 
       
    20 
       
    21 Y.DataSource.Get = Y.extend(DSGet, Y.DataSource.Local, {
       
    22     /**
       
    23      * Passes query string to Get Utility. Fires <code>response</code> event when
       
    24      * response is received asynchronously.
       
    25      *
       
    26      * @method _defRequestFn
       
    27      * @param e {EventFacade} Event Facade with the following properties:
       
    28      * <dl>
       
    29      * <dt>tId (Number)</dt> <dd>Unique transaction ID.</dd>
       
    30      * <dt>request (Object)</dt> <dd>The request.</dd>
       
    31      * <dt>callback (Object)</dt> <dd>The callback object with the following properties:
       
    32      *     <dl>
       
    33      *         <dt>success (Function)</dt> <dd>Success handler.</dd>
       
    34      *         <dt>failure (Function)</dt> <dd>Failure handler.</dd>
       
    35      *     </dl>
       
    36      * </dd>
       
    37      * <dt>cfg (Object)</dt> <dd>Configuration object.</dd>
       
    38      * </dl>
       
    39      * @protected
       
    40      */
       
    41     _defRequestFn: function(e) {
       
    42         var uri  = this.get("source"),
       
    43             get  = this.get("get"),
       
    44             guid = Y.guid().replace(/\-/g, '_'),
       
    45             generateRequest = this.get( "generateRequestCallback" ),
       
    46             payload = e.details[0],
       
    47             self = this;
       
    48 
       
    49         /**
       
    50          * Stores the most recent request id for validation against stale
       
    51          * response handling.
       
    52          *
       
    53          * @property _last
       
    54          * @type {String}
       
    55          * @protected
       
    56          */
       
    57         this._last = guid;
       
    58 
       
    59         // Dynamically add handler function with a closure to the callback stack
       
    60         // for access to guid
       
    61         YUI.Env.DataSource.callbacks[guid] = function(response) {
       
    62             delete YUI.Env.DataSource.callbacks[guid];
       
    63             delete Y.DataSource.Local.transactions[e.tId];
       
    64 
       
    65             var process = self.get('asyncMode') !== "ignoreStaleResponses" ||
       
    66                           self._last === guid;
       
    67 
       
    68             if (process) {
       
    69                 payload.data = response;
       
    70 
       
    71                 self.fire("data", payload);
       
    72             } else {
       
    73                 Y.log("DataSource ignored stale response for id " + e.tId + "(" + e.request + ")", "info", "datasource-get");
       
    74             }
       
    75 
       
    76         };
       
    77 
       
    78         // Add the callback param to the request url
       
    79         uri += e.request + generateRequest.call( this, guid );
       
    80 
       
    81         Y.log("DataSource is querying URL " + uri, "info", "datasource-get");
       
    82 
       
    83         Y.DataSource.Local.transactions[e.tId] = get.script(uri, {
       
    84             autopurge: true,
       
    85             // Works in Firefox only....
       
    86             onFailure: function (o) {
       
    87                 delete YUI.Env.DataSource.callbacks[guid];
       
    88                 delete Y.DataSource.Local.transactions[e.tId];
       
    89 
       
    90                 payload.error = new Error(o.msg || "Script node data failure");
       
    91 
       
    92                 Y.log("Script node data failure", "error", "datasource-get");
       
    93 
       
    94                 self.fire("data", payload);
       
    95             },
       
    96             onTimeout: function(o) {
       
    97                 delete YUI.Env.DataSource.callbacks[guid];
       
    98                 delete Y.DataSource.Local.transactions[e.tId];
       
    99 
       
   100                 payload.error = new Error(o.msg || "Script node data timeout");
       
   101 
       
   102                 Y.log("Script node data timeout", "error", "datasource-get");
       
   103 
       
   104                 self.fire("data", payload);
       
   105             }
       
   106         });
       
   107 
       
   108         return e.tId;
       
   109     },
       
   110 
       
   111 
       
   112     /**
       
   113      * Default method for adding callback param to url.  See
       
   114      * generateRequestCallback attribute.
       
   115      *
       
   116      * @method _generateRequest
       
   117      * @param guid {String} unique identifier for callback function wrapper
       
   118      * @protected
       
   119      */
       
   120      _generateRequest: function (guid) {
       
   121         return "&" + this.get("scriptCallbackParam") +
       
   122                 "=YUI.Env.DataSource.callbacks." + guid;
       
   123     }
       
   124 
       
   125 }, {
       
   126 
       
   127     /**
       
   128      * Class name.
       
   129      *
       
   130      * @property NAME
       
   131      * @type String
       
   132      * @static
       
   133      * @final
       
   134      * @value "dataSourceGet"
       
   135      */
       
   136     NAME: "dataSourceGet",
       
   137 
       
   138 
       
   139     ////////////////////////////////////////////////////////////////////////////
       
   140     //
       
   141     // DataSource.Get Attributes
       
   142     //
       
   143     ////////////////////////////////////////////////////////////////////////////
       
   144     ATTRS: {
       
   145         /**
       
   146          * Pointer to Get Utility.
       
   147          *
       
   148          * @attribute get
       
   149          * @type Y.Get
       
   150          * @default Y.Get
       
   151          */
       
   152         get: {
       
   153             value: Y.Get,
       
   154             cloneDefaultValue: false
       
   155         },
       
   156 
       
   157         /**
       
   158          * Defines request/response management in the following manner:
       
   159          * <dl>
       
   160          *     <!--<dt>queueRequests</dt>
       
   161          *     <dd>If a request is already in progress, wait until response is
       
   162          *     returned before sending the next request.</dd>
       
   163          *     <dt>cancelStaleRequests</dt>
       
   164          *     <dd>If a request is already in progress, cancel it before
       
   165          *     sending the next request.</dd>-->
       
   166          *     <dt>ignoreStaleResponses</dt>
       
   167          *     <dd>Send all requests, but handle only the response for the most
       
   168          *     recently sent request.</dd>
       
   169          *     <dt>allowAll</dt>
       
   170          *     <dd>Send all requests and handle all responses.</dd>
       
   171          * </dl>
       
   172          *
       
   173          * @attribute asyncMode
       
   174          * @type String
       
   175          * @default "allowAll"
       
   176          */
       
   177         asyncMode: {
       
   178             value: "allowAll"
       
   179         },
       
   180 
       
   181         /**
       
   182          * Callback string parameter name sent to the remote script. By default,
       
   183          * requests are sent to
       
   184          * &#60;URI&#62;?&#60;scriptCallbackParam&#62;=callbackFunction
       
   185          *
       
   186          * @attribute scriptCallbackParam
       
   187          * @type String
       
   188          * @default "callback"
       
   189          */
       
   190         scriptCallbackParam : {
       
   191             value: "callback"
       
   192         },
       
   193 
       
   194         /**
       
   195          * Accepts the DataSource instance and a callback ID, and returns a callback
       
   196          * param/value string that gets appended to the script URI. Implementers
       
   197          * can customize this string to match their server's query syntax.
       
   198          *
       
   199          * @attribute generateRequestCallback
       
   200          * @type Function
       
   201          */
       
   202         generateRequestCallback : {
       
   203             value: function () {
       
   204                 return this._generateRequest.apply(this, arguments);
       
   205             }
       
   206         }
       
   207     }
       
   208 });
       
   209 
       
   210 YUI.namespace("Env.DataSource.callbacks");
       
   211 
       
   212 
       
   213 }, '@VERSION@', {"requires": ["datasource-local", "get"]});