diff options
| author | Misko Hevery | 2010-04-02 11:16:49 -0700 |
|---|---|---|
| committer | Misko Hevery | 2010-04-02 11:16:49 -0700 |
| commit | 5bd23fde7ab94646190d18d2891532feafad6e2e (patch) | |
| tree | 06388d97d2eba76191fd46a8769348b35ef4345c /src/UrlWatcher.js | |
| parent | d717020911a350a5ea3c0a985c57d56c8fcad607 (diff) | |
| parent | 861bac1d2808b15abb867e761ded8144bf5f7e94 (diff) | |
| download | angular.js-5bd23fde7ab94646190d18d2891532feafad6e2e.tar.bz2 | |
merge
Diffstat (limited to 'src/UrlWatcher.js')
| -rw-r--r-- | src/UrlWatcher.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/UrlWatcher.js b/src/UrlWatcher.js new file mode 100644 index 00000000..1b2a9cf0 --- /dev/null +++ b/src/UrlWatcher.js @@ -0,0 +1,46 @@ + +// //////////////////////////// +// UrlWatcher +// //////////////////////////// + +function UrlWatcher(location) { + this.location = location; + this.delay = 25; + this.setTimeout = function(fn, delay) { + window.setTimeout(fn, delay); + }; + this.expectedUrl = location.href; + this.listeners = []; +} + +UrlWatcher.prototype = { + watch: function(fn){ + this.listeners.push(fn); + }, + + start: function() { + var self = this; + (function pull () { + if (self.expectedUrl !== self.location.href) { + foreach(self.listeners, function(listener){ + listener(self.location.href); + }); + self.expectedUrl = self.location.href; + } + self.setTimeout(pull, self.delay); + })(); + }, + + set: function(url) { + var existingURL = this.location.href; + if (!existingURL.match(/#/)) + existingURL += '#'; + if (existingURL != url) + this.location.href = url; + this.existingURL = url; + }, + + get: function() { + return this.location.href; + } +}; |
