diff options
| author | Misko Hevery | 2010-09-14 22:51:01 +0200 | 
|---|---|---|
| committer | Misko Hevery | 2010-09-14 22:51:01 +0200 | 
| commit | e3f760fbadedc977d9f5f461feafbaecab5a9046 (patch) | |
| tree | 2d39d26b3b371649cfc6f0ababf055e50518f283 /src/Browser.js | |
| parent | 07699b1a70f2a979ecd600c826ba89e79279925c (diff) | |
| download | angular.js-e3f760fbadedc977d9f5f461feafbaecab5a9046.tar.bz2 | |
Adding cookie service
  - Browser.cookies()
  - MockBrowser
  - $cookie service
  - $sessionStore
Diffstat (limited to 'src/Browser.js')
| -rw-r--r-- | src/Browser.js | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/src/Browser.js b/src/Browser.js index 46ac2bb0..0dacf3c4 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -22,8 +22,50 @@ function Browser(location, document, head) {    this.location = location;    this.document = document; +  var rawDocument = document[0];    this.head = head;    this.idCounter = 0; + +  this.cookies = cookies; +  this.watchCookies = function(fn){ cookieListeners.push(fn); }; + +  // functions +  var lastCookies = {}; +  var lastCookieString = ''; +  var cookieListeners = []; +  /** +   * cookies() -> hash of all cookies +   * cookies(name, value) -> set name to value +   *   if value is undefined delete it +   * cookies(name) -> should get value, but deletes (no one calls it right now that way) +   */ +  function cookies(name, value){ +    if (name) { +      if (value === _undefined) { +        delete lastCookies[name]; +        rawDocument.cookie = escape(name) + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; +      } else { +        rawDocument.cookie = escape(name) + '=' + escape(lastCookies[name] = ''+value); +      } +    } else { +      if (rawDocument.cookie !== lastCookieString) { +        lastCookieString = rawDocument.cookie; +        var cookieArray = lastCookieString.split("; "); +        lastCookies = {}; + +        for (var i = 0; i < cookieArray.length; i++) { +          var keyValue = cookieArray[i].split("="); +          if (keyValue.length === 2) { //ignore nameless cookies +            lastCookies[unescape(keyValue[0])] = unescape(keyValue[1]); +          } +        } +        foreach(cookieListeners, function(fn){ +          fn(lastCookies); +        }); +      } +      return lastCookies; +    } +  }  }  Browser.prototype = { @@ -132,6 +174,14 @@ Browser.prototype = {     })();    }, +  startCookieWatcher: function() { +    var self = this; +    (function poll() { +      self.cookies(); +      self.setTimeout(poll, self.delay); +    })(); +  }, +    setUrl: function(url) {     var existingURL = this.location.href;     if (!existingURL.match(/#/)) existingURL += '#'; | 
