talho/openphin

View on GitHub
app/assets/javascripts/ext_extensions/jsonp.js

Summary

Maintainability
D
2 days
Test Coverage
/*!
 * Ext JS Library 3.3.1
 * Copyright(c) 2006-2010 Sencha Inc.
 * licensing@sencha.com
 * http://www.sencha.com/license
 */
Ext.ns('Ext.ux');

Ext.ux.JsonP = (function() {
  var _queue = [], _current = null, _callback = 'callback', _nextRequest = function() {
    _current = null;
    if(_queue.length) {
      _current = _queue.shift();
      _current.script.src = Ext.urlAppend(_current.url,_current.params);
      document.getElementsByTagName('head')[0].appendChild(_current.script);
    }
  };
  return {
    request : function(o) {
      var url = o.url;
      if(!url) {
        return;
      }
      var me = this;

      o.params = o.params || {};
      o.params[o.callbackKey || _callback] = 'Ext.ux.JsonP.callback';
      var params = Ext.urlEncode(o.params);

      var script = document.createElement('script');
      script.type = 'text/javascript';

      if(o.isRawJSON) {
        if(Ext.isIE) {
          Ext.fly(script).on('readystatechange', function() {
            if(script.readyState == 'complete') {
              var data = script.innerHTML;
              if(data.length) {
                me.callback(Ext.decode(data));
              }
            }
          });
        } else {
          Ext.fly(script).on('load', function() {
            var data = script.innerHTML;
            if(data.length) {
              me.callback(Ext.decode(data));
            }
          });
        }
      }

      _queue.push({
        url : url,
        script : script,
        callback : o.callback ||
        function() {
        },

        scope : o.scope || window,
        params : params || null
      });

      if(!_current) {
        _nextRequest();
      }
    },
    callback : function(json) {
      _current.callback.apply(_current.scope, [json]);
      Ext.fly(_current.script).removeAllListeners();
      document.getElementsByTagName('head')[0].removeChild(_current.script);
      _nextRequest();
    }
  }
})();