| 82 | | unloadCache: function() { |
|---|
| 83 | | if (!OpenLayers.Event.observers) return; |
|---|
| 84 | | for (var elementId in OpenLayers.Event.observers) { |
|---|
| | 87 | /** Given the id of an element to stop observing, cycle through the |
|---|
| | 88 | * element's cached observers, calling stopObserving on each one, |
|---|
| | 89 | * skipping those entries which can no longer be removed. |
|---|
| | 90 | * |
|---|
| | 91 | * @param {String} elementId |
|---|
| | 92 | */ |
|---|
| | 93 | stopObservingElement: function(elementId) { |
|---|
| 87 | | for (var i = 0; i < elementObservers.length; i++) { |
|---|
| 88 | | var args = new Array(elementId).concat(elementObservers[i]); |
|---|
| 89 | | OpenLayers.Event.stopObserving.apply(this, args); |
|---|
| | 96 | var i=0; |
|---|
| | 97 | while(i < elementObservers.length) { |
|---|
| | 98 | var entry = elementObservers[0]; |
|---|
| | 99 | var args = new Array(entry.element, |
|---|
| | 100 | entry.name, |
|---|
| | 101 | entry.observer, |
|---|
| | 102 | entry.useCapture); |
|---|
| | 103 | var removed = OpenLayers.Event.stopObserving.apply(this, args); |
|---|
| | 104 | if (!removed) { |
|---|
| | 105 | i++; |
|---|
| | 106 | } |
|---|
| 108 | | stopObserving: function(elementParam, name, observer, useCapture) { |
|---|
| 109 | | var element = OpenLayers.Util.getElement(elementParam); |
|---|
| 110 | | if (!element) return; |
|---|
| 111 | | |
|---|
| 112 | | useCapture = useCapture || false; |
|---|
| 113 | | |
|---|
| 114 | | if (name == 'keypress' && |
|---|
| 115 | | (navigator.appVersion.match(/Konqueror|Safari|KHTML/) |
|---|
| 116 | | || element.detachEvent)) |
|---|
| 117 | | name = 'keydown'; |
|---|
| 118 | | |
|---|
| 119 | | // find element's entry in this.observers cache and remove it |
|---|
| 120 | | var elementObservers = OpenLayers.Event.observers[element.id]; |
|---|
| 121 | | if (elementObservers) { |
|---|
| 122 | | var entry = [name, observer, useCapture]; |
|---|
| 123 | | |
|---|
| 124 | | // find the specific event type in the element's list |
|---|
| 125 | | for (var i = 0; i < elementObservers.length; i++) { |
|---|
| 126 | | var cacheEntry = elementObservers[i]; |
|---|
| 127 | | |
|---|
| 128 | | //compare all 3 elements of entry with observer |
|---|
| 129 | | var sameEntry = true; |
|---|
| 130 | | for (var j = 0; j < entry.length; j++) { |
|---|
| 131 | | if (entry[j] != cacheEntry[j]) { |
|---|
| 132 | | sameEntry = false; |
|---|
| 133 | | break; |
|---|
| | 134 | /** |
|---|
| | 135 | * @param {DOMElement || String} elementParam |
|---|
| | 136 | * @param {String} name |
|---|
| | 137 | * @param {function} observer |
|---|
| | 138 | * @param {Boolean} useCapture |
|---|
| | 139 | * |
|---|
| | 140 | * @returns Whether or not the event observer was removed |
|---|
| | 141 | * @type Boolean |
|---|
| | 142 | */ |
|---|
| | 143 | stopObserving: function(elementParam, name, observer, useCapture) { |
|---|
| | 144 | var foundEntry = false; |
|---|
| | 145 | var element = OpenLayers.Util.getElement(elementParam); |
|---|
| | 146 | if (element) { |
|---|
| | 147 | |
|---|
| | 148 | useCapture = useCapture || false; |
|---|
| | 149 | |
|---|
| | 150 | if (name == 'keypress') { |
|---|
| | 151 | if ( navigator.appVersion.match(/Konqueror|Safari|KHTML/) || |
|---|
| | 152 | element.detachEvent) { |
|---|
| | 153 | name = 'keydown'; |
|---|
| 136 | | |
|---|
| 137 | | //if we've found it, remove it from the observers array |
|---|
| 138 | | if (sameEntry) { |
|---|
| 139 | | elementObservers.splice(i--, 1); |
|---|
| 140 | | if (elementObservers.length == 0) { |
|---|
| 141 | | OpenLayers.Event.observers[element.id] = null; |
|---|
| | 156 | |
|---|
| | 157 | // find element's entry in this.observers cache and remove it |
|---|
| | 158 | var elementObservers = OpenLayers.Event.observers[element.id]; |
|---|
| | 159 | if (elementObservers) { |
|---|
| | 160 | |
|---|
| | 161 | // find the specific event type in the element's list |
|---|
| | 162 | var i=0; |
|---|
| | 163 | while(!foundEntry && i < elementObservers.length) { |
|---|
| | 164 | var cacheEntry = elementObservers[i]; |
|---|
| | 165 | |
|---|
| | 166 | if ((cacheEntry.name == name) && |
|---|
| | 167 | (cacheEntry.observer == observer) && |
|---|
| | 168 | (cacheEntry.useCapture == useCapture)) { |
|---|
| | 169 | |
|---|
| | 170 | elementObservers.splice(i, 1); |
|---|
| | 171 | if (elementObservers.length == 0) { |
|---|
| | 172 | OpenLayers.Event.observers[element.id] = null; |
|---|
| | 173 | } |
|---|
| | 174 | break; |
|---|
| | 175 | foundEntry = true; |
|---|
| | 176 | } |
|---|
| | 177 | i++; |
|---|