add jquery wrapper
This commit is contained in:
		
							parent
							
								
									67d589f6cf
								
							
						
					
					
						commit
						403dabc43f
					
				
							
								
								
									
										105
									
								
								oauth3.jquery.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								oauth3.jquery.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					(function () {
 | 
				
			||||||
 | 
					  'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // I did try to shim jQuery's deferred, but it's just too clunky.
 | 
				
			||||||
 | 
					  // Here I use es6-promise which lacks asynchrity, but it's the smallest Promise implementation.
 | 
				
			||||||
 | 
					  // Only Opera Mini and MSIE (even on 11) will use this shim, so no biggie;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var oauth3 = window.OAUTH3;
 | 
				
			||||||
 | 
					  var count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function inject() {
 | 
				
			||||||
 | 
					    count += 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (count >= 100) {
 | 
				
			||||||
 | 
					      throw new Error("you forgot to include rsvp.js, methinks");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					        [window.Promise, window.ES6Promise, window.RSVP.Promise].forEach(function (PromiseA) {
 | 
				
			||||||
 | 
					          var x = 1; new PromiseA(function (resolve, reject) { console.log('x', 1 === x); resolve(); }); x = 2; void null;
 | 
				
			||||||
 | 
					          var y = 1; PromiseA.resolve().then(function () { console.log('y', 2 === x); }); y = 2; void null;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    var PromiseA = /*(window.RSVP && window.RSVP.Promise) || window.ES6Promise || */window.Promise;
 | 
				
			||||||
 | 
					    if ('undefined' !== typeof PromiseA) {
 | 
				
			||||||
 | 
					      oauth3.providePromise(PromiseA).then(function () {
 | 
				
			||||||
 | 
					        // ignore
 | 
				
			||||||
 | 
					        window.jqOauth3 = oauth3;
 | 
				
			||||||
 | 
					      }, function (err) {
 | 
				
			||||||
 | 
					        console.error(err);
 | 
				
			||||||
 | 
					        console.error("Bad Promise Implementation!");
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // because MSIE can't tell when a script is loaded
 | 
				
			||||||
 | 
					    setTimeout(inject, 100);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ('undefined' === typeof Promise) {
 | 
				
			||||||
 | 
					    // support Opera Mini and MSIE 11+ (which doesn't support <!-- [if IE]> detection)
 | 
				
			||||||
 | 
					    /* jshint ignore: start */
 | 
				
			||||||
 | 
					    document.write('<script src="bower_components/es6-promise/promise.min.js"></script>');
 | 
				
			||||||
 | 
					    /* jshint ignore: end */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    // I would have used this, but it turns out that
 | 
				
			||||||
 | 
					    // MSIE can't tell when a script has loaded
 | 
				
			||||||
 | 
					    var js = document.createElement("script");
 | 
				
			||||||
 | 
					    js.setAttribute("src", "bower_components/es6-promise/promise.js");
 | 
				
			||||||
 | 
					    js.setAttribute("type", "text/javascript");
 | 
				
			||||||
 | 
					    document.getElementsByTagName("head")[0].appendChild(js);
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  inject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function Request(opts) {
 | 
				
			||||||
 | 
					    if (!opts.method) {
 | 
				
			||||||
 | 
					      throw new Error("Developer Error: you must set method as one of 'GET', 'POST', 'DELETE', etc");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var req = {
 | 
				
			||||||
 | 
					      url: opts.url
 | 
				
			||||||
 | 
					      // Noted: jQuery 1.9 finally added 'method' as an alias of 'type'
 | 
				
			||||||
 | 
					    , method: opts.method
 | 
				
			||||||
 | 
					      // leaving type for backwards compat
 | 
				
			||||||
 | 
					    , type: opts.method
 | 
				
			||||||
 | 
					    , headers: opts.headers
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // don't allow accidetal querystring via 'data'
 | 
				
			||||||
 | 
					    if (opts.data && !/get|delete/i.test(opts.method)) {
 | 
				
			||||||
 | 
					      req.data = opts.data;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // I don't trust jQuery promises...
 | 
				
			||||||
 | 
					    return new oauth3.PromiseA(function (resolve, reject) {
 | 
				
			||||||
 | 
					      $.ajax(req).then(function (data, textStatus, jqXhr) {
 | 
				
			||||||
 | 
					        var resp = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Object.keys(jqXhr).forEach(function (key) {
 | 
				
			||||||
 | 
					          // particularly we have to get rid of .then
 | 
				
			||||||
 | 
					          if ('function' !== typeof jqXhr[key]) {
 | 
				
			||||||
 | 
					            resp[key] = jqXhr[key];
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        resp.data = data;
 | 
				
			||||||
 | 
					        resp.status = textStatus;
 | 
				
			||||||
 | 
					        resp.request = jqXhr;
 | 
				
			||||||
 | 
					        resolve(resp);
 | 
				
			||||||
 | 
					      }, function (jqXhr, textStatus, errorThrown) {
 | 
				
			||||||
 | 
					        errorThrown.request = jqXhr;
 | 
				
			||||||
 | 
					        errorThrown.response = jqXhr;
 | 
				
			||||||
 | 
					        errorThrown.status = textStatus;
 | 
				
			||||||
 | 
					        reject(errorThrown);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  oauth3.provideRequest(Request);
 | 
				
			||||||
 | 
					}());
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user