From 42bcb9b3b3db23e79d98b71d65a27b6ef28f51fb Mon Sep 17 00:00:00 2001 From: mourner Date: Tue, 7 Sep 2010 14:27:44 +0300 Subject: [PATCH] DomUtil, DomEvent, namespace config improvements, some specs --- spec/runner.html | 14 ++++- spec/suites/{envSpec.js => LeafletSpec.js} | 0 spec/suites/SpecHelper.js | 5 ++ spec/suites/core/UtilSpec.js | 8 +-- spec/suites/dom/DomEventSpec.js | 8 +++ spec/suites/dom/DomUtilSpec.js | 1 + src/Leaflet.js | 14 +++++ src/dom/DomEvent.js | 66 ++++++++++++++++++++++ src/dom/DomUtil.js | 31 ++++++++++ src/env.js | 16 ------ 10 files changed, 139 insertions(+), 24 deletions(-) rename spec/suites/{envSpec.js => LeafletSpec.js} (100%) create mode 100644 spec/suites/SpecHelper.js create mode 100644 spec/suites/dom/DomEventSpec.js create mode 100644 spec/suites/dom/DomUtilSpec.js create mode 100644 src/Leaflet.js create mode 100644 src/dom/DomEvent.js create mode 100644 src/dom/DomUtil.js delete mode 100644 src/env.js diff --git a/spec/runner.html b/spec/runner.html index cdd68b686..f24771740 100644 --- a/spec/runner.html +++ b/spec/runner.html @@ -12,7 +12,7 @@ L = 'test'; //to test L#noConflict later - + @@ -27,10 +27,15 @@ + + + + - + + @@ -45,6 +50,11 @@ + + + + + diff --git a/spec/suites/envSpec.js b/spec/suites/LeafletSpec.js similarity index 100% rename from spec/suites/envSpec.js rename to spec/suites/LeafletSpec.js diff --git a/spec/suites/SpecHelper.js b/spec/suites/SpecHelper.js new file mode 100644 index 000000000..8b8270413 --- /dev/null +++ b/spec/suites/SpecHelper.js @@ -0,0 +1,5 @@ +function noSpecs() { + it('should have specs', function() { + expect('specs').toBe(); + }); +} \ No newline at end of file diff --git a/spec/suites/core/UtilSpec.js b/spec/suites/core/UtilSpec.js index c9c845a1d..46cb8fbac 100644 --- a/spec/suites/core/UtilSpec.js +++ b/spec/suites/core/UtilSpec.js @@ -51,12 +51,8 @@ describe('Util', function() { var a = {}, id = L.Util.stamp(a); - expect(typeof a.id).toEqual('number'); - expect(a.id).toEqual(id); - - L.Util.stamp(a); - - expect(a.id).toEqual(id); + expect(typeof id).toEqual('number'); + expect(L.Util.stamp(a)).toEqual(id); var b = {}, id2 = L.Util.stamp(b); diff --git a/spec/suites/dom/DomEventSpec.js b/spec/suites/dom/DomEventSpec.js new file mode 100644 index 000000000..dc5f698f0 --- /dev/null +++ b/spec/suites/dom/DomEventSpec.js @@ -0,0 +1,8 @@ +describe('DomEvent', function() { + + describe('#addListener', noSpecs); + describe('#removeListener', noSpecs); + + describe('#stopPropagation', noSpecs); + describe('#preventDefault', noSpecs); +}); \ No newline at end of file diff --git a/spec/suites/dom/DomUtilSpec.js b/spec/suites/dom/DomUtilSpec.js new file mode 100644 index 000000000..33a6e10a1 --- /dev/null +++ b/spec/suites/dom/DomUtilSpec.js @@ -0,0 +1 @@ +describe('DomUtil', noSpecs); \ No newline at end of file diff --git a/src/Leaflet.js b/src/Leaflet.js new file mode 100644 index 000000000..c1676b876 --- /dev/null +++ b/src/Leaflet.js @@ -0,0 +1,14 @@ +/* + * Leaflet namespace config, allows using any global variable instead of L & restoring the original value + */ + +L = { + version: '0.0.1', + + _originalL: window.L, + + noConflict: function() { + window.L = this._originalL; + return this; + } +}; \ No newline at end of file diff --git a/src/dom/DomEvent.js b/src/dom/DomEvent.js new file mode 100644 index 000000000..7b363b781 --- /dev/null +++ b/src/dom/DomEvent.js @@ -0,0 +1,66 @@ +/* + * L.DomEvent contains functions for working with DOM events. + */ + +L.DomEvent = { + /* inpired by John Resig, Dean Edwards and YUI addEvent implementations */ + addListener: function(/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) { + var id = L.Util.stamp(fn); + obj['_leaflet_' + type + id] = function handler(e) { + return fn.call(context || obj, e || L.DomEvent._getEvent()); + }; + if ('addEventListener' in obj) { + if (type == 'mousewheel') { + obj.addEventListener('DOMMouseScroll', handler, false); + } + obj.addEventListener(type, handler, false); + } else if ('attachEvent' in obj) { + obj.attachEvent("on" + type, handler); + } + }, + + removeListener: function(/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) { + var id = L.Util.stamp(fn), + key = '_leaflet_' + type + id; + handler = obj[key]; + if ('removeEventListener' in obj) { + if (type == 'mousewheel') { + obj.removeEventListener('DOMMouseScroll', handler, false); + } + obj.removeEventListener(type, handler, false); + } else if ('detachEvent' in obj) { + obj.detachEvent("on" + type, handler); + delete obj[key]; + } + }, + + _getEvent: function()/*->Event*/ { + var e = window.event; + if (!e) { + var caller = arguments.callee.caller; + while (caller) { + e = caller['arguments'][0]; + if (e && Event == e.constructor) { break; } + caller = caller.caller; + } + } + return e; + }, + + stopPropagation: function(/*Event*/ e) { + if (e.stopPropagation) { + e.stopPropagation(); + } else { + e.cancelBubble = true; + } + }, + + preventDefault: function(/*Event*/ e) { + if (e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + } +}; + diff --git a/src/dom/DomUtil.js b/src/dom/DomUtil.js new file mode 100644 index 000000000..77015faf0 --- /dev/null +++ b/src/dom/DomUtil.js @@ -0,0 +1,31 @@ +/* + * L.DomUtil contains various utility functions for working with DOM + */ + +L.DomUtil = { + getCumulativeOffset: function(el) { + var top = 0, + left = 0; + do { + top += (el.offsetTop - el.scrollTop) || 0; + left += el.offsetLeft || 0; + el = el.offsetParent; + } while (el); + return new L.Point(left, top); + }, + + // used for disabling text selection while dragging + disableTextSelection: function() { + if (document.selection && document.selection.empty) { + document.selection.empty(); + } + if (!L.DomUtil._onselectstart) { + L.DomUtil._onselectstart = document.onselectstart; + document.onselectstart = function() { return false; }; + } + }, + enableTextSelection: function() { + document.onselectstart = L.DomUtil._onselectstart; + CM.DomEvent._onselectstart = null; + } +}; \ No newline at end of file diff --git a/src/env.js b/src/env.js deleted file mode 100644 index 676a2b2f5..000000000 --- a/src/env.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Leaflet namespace config, allows using any global variable instead of L & restoring the original value - */ - -(function() { - var originalL = window.L; - - L = { - version: '0.0.1' - }; - - L.noConflict = function() { - window.L = originalL; - return this; - }; -})(); \ No newline at end of file