From a80a61839a66d244c8bb14bbe2975746e02516c8 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Sat, 3 Apr 2010 17:04:36 -0700 Subject: injection is now working --- src/Browser.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/Browser.js (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js new file mode 100644 index 00000000..bdf57386 --- /dev/null +++ b/src/Browser.js @@ -0,0 +1,46 @@ + +////////////////////////////// +// Browser +////////////////////////////// + +function Browser(location) { + this.location = location; + this.delay = 25; + this.setTimeout = function(fn, delay) { + window.setTimeout(fn, delay); + }; + this.expectedUrl = location.href; + this.listeners = []; +} + +Browser.prototype = { + watchUrl: function(fn){ + this.listeners.push(fn); + }, + + startUrlWatcher: 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); + })(); + }, + + setUrl: function(url) { + var existingURL = this.location.href; + if (!existingURL.match(/#/)) + existingURL += '#'; + if (existingURL != url) + this.location.href = url; + this.existingURL = url; + }, + + getUrl: function() { + return this.location.href; + } +}; -- cgit v1.2.3 From 5dcf9bb4feb144b3a54a43524210dd7d0bb4213e Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Sat, 3 Apr 2010 20:19:55 -0700 Subject: browser is now injectable into the system --- src/Browser.js | 1 - 1 file changed, 1 deletion(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index bdf57386..893459ae 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -37,7 +37,6 @@ Browser.prototype = { existingURL += '#'; if (existingURL != url) this.location.href = url; - this.existingURL = url; }, getUrl: function() { -- cgit v1.2.3 From 7a4b48020688060debe9cb0f9c17615d7585cbe7 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Mon, 5 Apr 2010 11:46:53 -0700 Subject: added ng:switch widget --- src/Browser.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 893459ae..6036884f 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -3,9 +3,10 @@ // Browser ////////////////////////////// -function Browser(location) { +function Browser(location, XHR) { this.location = location; this.delay = 25; + this.XHR = XHR; this.setTimeout = function(fn, delay) { window.setTimeout(fn, delay); }; @@ -14,6 +15,17 @@ function Browser(location) { } Browser.prototype = { + xhr: function(method, url, callback){ + var xhr = new this.XHR(); + xhr.open(method, url, true); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + callback(xhr.status, xhr.responseText); + } + }; + xhr.send(''); + }, + watchUrl: function(fn){ this.listeners.push(fn); }, @@ -23,7 +35,11 @@ Browser.prototype = { (function pull () { if (self.expectedUrl !== self.location.href) { foreach(self.listeners, function(listener){ - listener(self.location.href); + try { + listener(self.location.href); + } catch (e) { + error(e); + } }); self.expectedUrl = self.location.href; } -- cgit v1.2.3 From 2107eafcde390eebbf59e829194626c488de9e29 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Mon, 5 Apr 2010 20:53:33 -0700 Subject: added hover service --- src/Browser.js | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 6036884f..69f3eb9a 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -3,18 +3,52 @@ // Browser ////////////////////////////// -function Browser(location, XHR) { - this.location = location; +function Browser(location, document) { this.delay = 25; - this.XHR = XHR; + this.expectedUrl = location.href; + this.urlListeners = []; + this.hoverListener = noop; + + this.XHR = XMLHttpRequest || function () { + try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} + try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {} + try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {} + throw new Error("This browser does not support XMLHttpRequest."); + }; this.setTimeout = function(fn, delay) { window.setTimeout(fn, delay); }; - this.expectedUrl = location.href; - this.listeners = []; + + this.location = location; + this.document = jqLite(document); + this.body = jqLite(document.body); } Browser.prototype = { + + bind: function() { + var self = this; + self.document.bind("mouseover", function(event){ + self.hoverListener(jqLite(event.target), true); + return true; + }); + self.document.bind("mouseleave mouseout click dblclick keypress keyup", function(event){ + self.hoverListener(jqLite(event.target), false); + return true; + }); + }, + + hover: function(hoverListener) { + this.hoverListener = hoverListener; + }, + + addCss: function(url) { + var head = jqLite(this.document[0].getElementsByTagName('head')[0]), + link = jqLite(''); + link.attr('href', url); + head.append(link); + }, + xhr: function(method, url, callback){ var xhr = new this.XHR(); xhr.open(method, url, true); @@ -27,14 +61,14 @@ Browser.prototype = { }, watchUrl: function(fn){ - this.listeners.push(fn); + this.urlListeners.push(fn); }, startUrlWatcher: function() { var self = this; (function pull () { if (self.expectedUrl !== self.location.href) { - foreach(self.listeners, function(listener){ + foreach(self.urlListeners, function(listener){ try { listener(self.location.href); } catch (e) { -- cgit v1.2.3 From deb86fe357a901889bc4289087f0b9e69cb8a302 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Fri, 16 Apr 2010 14:01:29 -0700 Subject: lots of small fixes --- src/Browser.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 69f3eb9a..ff8d9775 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -83,10 +83,11 @@ Browser.prototype = { setUrl: function(url) { var existingURL = this.location.href; - if (!existingURL.match(/#/)) - existingURL += '#'; - if (existingURL != url) - this.location.href = url; + if (!existingURL.match(/#/)) existingURL += '#'; + if (!url.match(/#/)) url += '#'; + if (existingURL != url) { + this.location.href = this.expectedUrl = url; + } }, getUrl: function() { -- cgit v1.2.3 From 22d93e0a3bc2a6dc0f64c63c68bc8f8489ea9068 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Tue, 20 Apr 2010 18:14:13 -0700 Subject: fixes to enable ie --- src/Browser.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index ff8d9775..e00f73a5 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -29,7 +29,7 @@ Browser.prototype = { bind: function() { var self = this; self.document.bind("mouseover", function(event){ - self.hoverListener(jqLite(event.target), true); + self.hoverListener(jqLite(msie ? event.srcElement : event.target), true); return true; }); self.document.bind("mouseleave mouseout click dblclick keypress keyup", function(event){ @@ -43,8 +43,11 @@ Browser.prototype = { }, addCss: function(url) { - var head = jqLite(this.document[0].getElementsByTagName('head')[0]), - link = jqLite(''); + var doc = this.document[0], + head = jqLite(doc.getElementsByTagName('head')[0]), + link = jqLite(doc.createElement('link')); + link.attr('rel', 'stylesheet'); + link.attr('type', 'text/css'); link.attr('href', url); head.append(link); }, -- cgit v1.2.3 From 8b29156a2ddcc738f9b0cf8dfc48a8648474884d Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Wed, 21 Apr 2010 14:29:05 -0700 Subject: ie6 now passes --- src/Browser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index e00f73a5..11b079f0 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -9,7 +9,7 @@ function Browser(location, document) { this.urlListeners = []; this.hoverListener = noop; - this.XHR = XMLHttpRequest || function () { + this.XHR = window.XMLHttpRequest || function () { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {} try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {} -- cgit v1.2.3 From c7913a4b7a3f5ffb0ea6bb1e636ac9d4a0e75c32 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Thu, 29 Apr 2010 17:28:33 -0700 Subject: added $xhr service with bulk and cache, hooked up $resource --- src/Browser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 11b079f0..d2e8608d 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -52,12 +52,12 @@ Browser.prototype = { head.append(link); }, - xhr: function(method, url, callback){ + xhr: function(method, url, post, callback){ var xhr = new this.XHR(); xhr.open(method, url, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { - callback(xhr.status, xhr.responseText); + callback(xhr.status || 200, xhr.responseText); } }; xhr.send(''); -- cgit v1.2.3 From ac1d02d0658cb74ae3822e364f84809d78cda335 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Fri, 30 Apr 2010 12:22:07 -0700 Subject: make xhr post optional --- src/Browser.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index d2e8608d..6ec083fa 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -53,6 +53,10 @@ Browser.prototype = { }, xhr: function(method, url, post, callback){ + if (isFunction(post)) { + callback = post; + post = null; + } var xhr = new this.XHR(); xhr.open(method, url, true); xhr.onreadystatechange = function() { -- cgit v1.2.3 From 038a743e6f49c347a38edc0e54dcbb175905a475 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Fri, 7 May 2010 12:09:14 -0700 Subject: xhr bulk fixes --- src/Browser.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 6ec083fa..2a90b63f 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -8,6 +8,7 @@ function Browser(location, document) { this.expectedUrl = location.href; this.urlListeners = []; this.hoverListener = noop; + this.isMock = false; this.XHR = window.XMLHttpRequest || function () { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} @@ -64,7 +65,7 @@ Browser.prototype = { callback(xhr.status || 200, xhr.responseText); } }; - xhr.send(''); + xhr.send(post || ''); }, watchUrl: function(fn){ -- cgit v1.2.3 From 0d41c86522ef912fe5bb7a02fd434080f9827c00 Mon Sep 17 00:00:00 2001 From: Andres Ornelas Date: Wed, 26 May 2010 15:17:28 -0700 Subject: fixed broken jstd conf file --- src/Browser.js | 1 - 1 file changed, 1 deletion(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 2a90b63f..8abdbc61 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -1,4 +1,3 @@ - ////////////////////////////// // Browser ////////////////////////////// -- cgit v1.2.3 From aedf12f25e42877a302a99d906e6397bde01dcce Mon Sep 17 00:00:00 2001 From: Andres Ornelas Date: Wed, 26 May 2010 15:21:58 -0700 Subject: added outstanding request queue --- src/Browser.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 8abdbc61..0e265c0c 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -8,6 +8,7 @@ function Browser(location, document) { this.urlListeners = []; this.hoverListener = noop; this.isMock = false; + this.outstandingRequests = { count: 0, callbacks:[]}; this.XHR = window.XMLHttpRequest || function () { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} @@ -57,16 +58,42 @@ Browser.prototype = { callback = post; post = null; } - var xhr = new this.XHR(); + var xhr = new this.XHR(), + self = this; xhr.open(method, url, true); + this.outstandingRequests.count ++; xhr.onreadystatechange = function() { if (xhr.readyState == 4) { - callback(xhr.status || 200, xhr.responseText); + try { + callback(xhr.status || 200, xhr.responseText); + } finally { + self.outstandingRequests.count--; + self.processRequestCallbacks(); + } } }; xhr.send(post || ''); }, + processRequestCallbacks: function(){ + if (this.outstandingRequests.count === 0) { + while(this.outstandingRequests.callbacks.length) { + try { + this.outstandingRequests.callbacks.pop()(); + } catch (e) { + } + } + } + }, + + notifyWhenNoOutstandingRequests: function(callback){ + if (this.outstandingRequests.count === 0) { + callback(); + } else { + this.outstandingRequests.callbacks.push(callback); + } + }, + watchUrl: function(fn){ this.urlListeners.push(fn); }, -- cgit v1.2.3 From c7d64f6d124f10c66309042c2d77896215ed43b8 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Sun, 30 May 2010 16:34:59 -0700 Subject: improve error handling with elements --- src/Browser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Browser.js') diff --git a/src/Browser.js b/src/Browser.js index 0e265c0c..0552b3ae 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -3,7 +3,7 @@ ////////////////////////////// function Browser(location, document) { - this.delay = 25; + this.delay = 50; this.expectedUrl = location.href; this.urlListeners = []; this.hoverListener = noop; -- cgit v1.2.3