Skip to content

Commit 788b1b2

Browse files
committed
Merge pull request marcj#107 from jsdw/master
Allow standalone `.detach` function to accept same arbitrary elements as ResizeSensor class
2 parents 7f80a35 + 83dfaad commit 788b1b2

File tree

1 file changed

+39
-33
lines changed

1 file changed

+39
-33
lines changed

src/ResizeSensor.js

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,30 @@
1616
return window.setTimeout(fn, 20);
1717
};
1818

19+
/**
20+
* Iterate over each of the provided element(s).
21+
*
22+
* @param {HTMLElement|HTMLElement[]} elements
23+
* @param {Function} callback
24+
*/
25+
function forEachElement(elements, callback){
26+
var elementsType = Object.prototype.toString.call(elements);
27+
var isCollectionTyped = ('[object Array]' === elementsType
28+
|| ('[object NodeList]' === elementsType)
29+
|| ('[object HTMLCollection]' === elementsType)
30+
|| ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery
31+
|| ('undefined' !== typeof Elements && elements instanceof Elements) //mootools
32+
);
33+
var i = 0, j = elements.length;
34+
if (isCollectionTyped) {
35+
for (; i < j; i++) {
36+
callback(elements[i]);
37+
}
38+
} else {
39+
callback(elements);
40+
}
41+
}
42+
1943
/**
2044
* Class for dimension change detection.
2145
*
@@ -158,45 +182,27 @@
158182
addEvent(shrink, 'scroll', onScroll);
159183
}
160184

161-
var elementType = Object.prototype.toString.call(element);
162-
var isCollectionTyped = ('[object Array]' === elementType
163-
|| ('[object NodeList]' === elementType)
164-
|| ('[object HTMLCollection]' === elementType)
165-
|| ('undefined' !== typeof jQuery && element instanceof jQuery) //jquery
166-
|| ('undefined' !== typeof Elements && element instanceof Elements) //mootools
167-
);
168-
169-
if (isCollectionTyped) {
170-
var i = 0, j = element.length;
171-
for (; i < j; i++) {
172-
attachResizeEvent(element[i], callback);
173-
}
174-
} else {
175-
attachResizeEvent(element, callback);
176-
}
185+
forEachElement(element, function(elem){
186+
attachResizeEvent(elem, callback);
187+
});
177188

178189
this.detach = function(ev) {
179-
if (isCollectionTyped) {
180-
var i = 0, j = element.length;
181-
for (; i < j; i++) {
182-
ResizeSensor.detach(element[i], ev);
183-
}
184-
} else {
185-
ResizeSensor.detach(element, ev);
186-
}
190+
ResizeSensor.detach(element, ev);
187191
};
188192
};
189193

190194
ResizeSensor.detach = function(element, ev) {
191-
if(typeof ev == "function"){
192-
element.resizedAttached.remove(ev);
193-
if(element.resizedAttached.length()) return;
194-
}
195-
if (element.resizeSensor) {
196-
element.removeChild(element.resizeSensor);
197-
delete element.resizeSensor;
198-
delete element.resizedAttached;
199-
}
195+
forEachElement(element, function(elem){
196+
if(elem.resizedAttached && typeof ev == "function"){
197+
elem.resizedAttached.remove(ev);
198+
if(elem.resizedAttached.length()) return;
199+
}
200+
if (elem.resizeSensor) {
201+
elem.removeChild(elem.resizeSensor);
202+
delete elem.resizeSensor;
203+
delete elem.resizedAttached;
204+
}
205+
});
200206
};
201207

202208
// make available to common module loader

0 commit comments

Comments
 (0)