diff options
| author | Igor Minar | 2012-04-09 14:27:14 -0700 | 
|---|---|---|
| committer | Igor Minar | 2012-04-09 17:59:47 -0700 | 
| commit | fbaa1968b7c596ccb63ea8b4be1d3bd92eda50d8 (patch) | |
| tree | f67c6b8cf724431efead5197cced66dc2340f9f5 /src | |
| parent | 13d5528a5f5a2f0feee5c742788a914d2371841e (diff) | |
| download | angular.js-fbaa1968b7c596ccb63ea8b4be1d3bd92eda50d8.tar.bz2 | |
chore($browser): remove the addJs method
this was never meant to be a public api used by apps. I refactored
the code to hide the functionality.
BREAKING CHANGE: $browser.addJs method was removed
apps that depended on this functionality should either use many of the
existing script loaders or create a simple helper method specific to the
app.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/browser.js | 33 | ||||
| -rw-r--r-- | src/ng/httpBackend.js | 31 | ||||
| -rw-r--r-- | src/ngMock/angular-mocks.js | 7 | 
3 files changed, 27 insertions, 44 deletions
| diff --git a/src/ng/browser.js b/src/ng/browser.js index 376c3fd4..465114c5 100644 --- a/src/ng/browser.js +++ b/src/ng/browser.js @@ -343,39 +343,6 @@ function Browser(window, document, body, $log, $sniffer) {    // Misc API    ////////////////////////////////////////////////////////////// - -  /** -   * @ngdoc method -   * @name angular.module.ng.$browser#addJs -   * @methodOf angular.module.ng.$browser -   * -   * @param {string} url Url to js file -   * -   * @description -   * Adds a script tag to the head. -   */ -  self.addJs = function(url, done) { -    // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: -    // - fetches local scripts via XHR and evals them -    // - adds and immediately removes script elements from the document -    var script = rawDocument.createElement('script'); - -    script.type = 'text/javascript'; -    script.src = url; - -    if (msie) { -      script.onreadystatechange = function() { -        /loaded|complete/.test(script.readyState) && done && done(); -      }; -    } else { -      if (done) script.onload = script.onerror = done; -    } - -    body[0].appendChild(script); - -    return script; -  }; -    /**     * Returns current <base href>     * (always relative - without domain) diff --git a/src/ng/httpBackend.js b/src/ng/httpBackend.js index b2c14b3f..d2784efa 100644 --- a/src/ng/httpBackend.js +++ b/src/ng/httpBackend.js @@ -26,11 +26,11 @@ var XHR = window.XMLHttpRequest || function() {  function $HttpBackendProvider() {    this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {      return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, -        $document[0].body, $window.location.protocol.replace(':', '')); +        $document[0], $window.location.protocol.replace(':', ''));    }];  } -function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locationProtocol) { +function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) {    // TODO(vojta): fix the signature    return function(method, url, post, callback, headers, timeout, withCredentials) {      $browser.$$incOutstandingRequestCount(); @@ -42,7 +42,7 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati          callbacks[callbackId].data = data;        }; -      var script = $browser.addJs(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), +      jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),            function() {          if (callbacks[callbackId].data) {            completeRequest(callback, 200, callbacks[callbackId].data); @@ -50,7 +50,6 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati            completeRequest(callback, -2);          }          delete callbacks[callbackId]; -        body.removeChild(script);        });      } else {        var xhr = new XHR(); @@ -100,4 +99,28 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati        $browser.$$completeOutstandingRequest(noop);      }    }; + +  function jsonpReq(url, done) { +    // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: +    // - fetches local scripts via XHR and evals them +    // - adds and immediately removes script elements from the document +    var script = rawDocument.createElement('script'), +        doneWrapper = function() { +          rawDocument.body.removeChild(script); +          if (done) done(); +        } + +    script.type = 'text/javascript'; +    script.src = url; + +    if (msie) { +      script.onreadystatechange = function() { +        if (/loaded|complete/.test(script.readyState)) doneWrapper(); +      }; +    } else { +      script.onload = script.onerror = doneWrapper; +    } + +    rawDocument.body.appendChild(script); +  };  } diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 8c50c90e..42d921e3 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -137,13 +137,6 @@ angular.mock.$Browser = function() {    self.baseHref = function() {      return this.$$baseHref;    }; - -  self.$$scripts = []; -  self.addJs = function(url, done) { -    var script = {url: url, done: done}; -    self.$$scripts.push(script); -    return script; -  };  };  angular.mock.$Browser.prototype = { | 
