Skip to content

Commit d18965c

Browse files
committed
refactoring of jQLight
1 parent ceb021d commit d18965c

File tree

1 file changed

+40
-51
lines changed

1 file changed

+40
-51
lines changed

src/jqlight.lazyloadxt.js

Lines changed: 40 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@
2323
: (selector && (selector === window || selector.nodeType) ? [selector] : selector));
2424
}
2525

26-
$.fn = {
26+
Wrapper.prototype = $.fn = {
2727
constructor: Wrapper,
2828
length: 0
2929
};
30-
Wrapper.prototype = $.fn;
3130

32-
$.extend = function (target) {
31+
$.fn.extend = $.extend = function (target) {
3332
var options, name, copy, i = 0, length = arguments.length;
3433
if (length <= 1) {
3534
target = this;
@@ -47,7 +46,6 @@
4746
}
4847
return target;
4948
};
50-
$.fn.extend = $.extend;
5149

5250
var prev_$ = window.$;
5351
window.$ = $;
@@ -71,36 +69,34 @@
7169
return false;
7270
},
7371
each: function (array, callback) {
74-
var value, i = 0, length = array.length;
75-
for (; i < length; i++) {
76-
value = array[i];
77-
if (callback.call(value, i, value) === false) {
72+
for (var i = 0, length = array.length ; i < length; i++) {
73+
if (callback(i, array[i]) === false) {
7874
return false;
7975
}
8076
}
8177
return true;
8278
},
83-
grep: function (elems, callback, invert) {
79+
grep: function (array, callback, invert) {
8480
var callbackInverse,
8581
matches = [],
8682
i = 0,
87-
length = elems.length,
83+
length = array.length,
8884
callbackExpect = !invert;
8985
for (; i < length; i++) {
90-
callbackInverse = !callback(i, elems[i]);
86+
callbackInverse = !callback(i, array[i]);
9187
if (callbackInverse !== callbackExpect) {
92-
matches.push(elems[i]);
88+
matches.push(array[i]);
9389
}
9490
}
9591
return matches;
9692
},
97-
map: function (elems, callback) {
93+
map: function (array, callback) {
9894
var value,
9995
i = 0,
100-
length = elems.length,
96+
length = array.length,
10197
ret = [];
10298
for (; i < length; i++) {
103-
value = callback(i, elems[i]);
99+
value = callback(array[i], i);
104100
if (value != null) {
105101
ret.push(value);
106102
}
@@ -111,10 +107,22 @@
111107

112108
var DATAKEYPROP = '__jqlight_data__';
113109
$.fn.extend({
114-
each: function (callback, args) {
115-
$.each(this, callback, args);
110+
each: function (callback) {
111+
$.each(this, function (index, elem) {
112+
return callback.call(elem, index, elem);
113+
});
116114
return this;
117115
},
116+
map: function (callback) {
117+
return $($.map(this, function (elem, index) {
118+
return callback.call(elem, index, elem);
119+
}));
120+
},
121+
filter: function (callback) {
122+
return $($.grep(this, function (index, elem) {
123+
return callback.call(elem, index, elem);
124+
}));
125+
},
118126
ready: function (fn) {
119127
if (/complete|loaded|interactive/.test(document.readyState) && document.body) {
120128
fn();
@@ -140,7 +148,7 @@
140148
selector = undefined;
141149
}
142150
types = types.split(' ');
143-
return this.each(function (i, elem) {
151+
return this.each(function (index, elem) {
144152
var listener = selector ? delegateHandler.bind(elem, selector, fn) : fn;
145153
$.each(types, function (j, eventName) {
146154
if (eventName) {
@@ -150,13 +158,14 @@
150158
});
151159
},
152160
off: function (types, selector, fn) {
161+
// Note: off() for delegated events is not supported
153162
if (selector === false || $.isFunction(selector)) {
154163
// ( types [, fn] )
155164
fn = selector;
156-
selector = undefined;
165+
// selector = undefined;
157166
}
158167
types = types.split(' ');
159-
return this.each(function (i, elem) {
168+
return this.each(function (index, elem) {
160169
$.each(types, function (j, eventName) {
161170
if (eventName) {
162171
elem.removeEventListener(eventName, fn);
@@ -181,24 +190,18 @@
181190
var elem = this[0];
182191
return elem && elem[DATAKEYPROP] ? elem[DATAKEYPROP][key] : undefined;
183192
}
184-
this.each(function (i, elem) {
193+
this.each(function (index, elem) {
185194
elem[DATAKEYPROP] = elem[DATAKEYPROP] || {};
186195
elem[DATAKEYPROP][key] = value;
187196
});
188197
return this;
189198
},
190-
map: function (callback) {
191-
return $($.map(this, callback));
192-
},
193-
filter: function (callback) {
194-
return $($.grep(this, callback));
195-
},
196199
attr: function (name, value) {
197200
if (value === undefined) {
198201
return this.length ? this[0].getAttribute(name) : undefined;
199202
}
200-
$.each(this, function (i, elem) {
201-
elem.setAttribute(name, value + '');
203+
this.each(function () {
204+
this.setAttribute(name, value + '');
202205
});
203206
return this;
204207
}
@@ -214,8 +217,7 @@
214217
if (elem.nodeType === 1) {
215218
origValue = elem.className;
216219
cur = origValue ? ( ' ' + origValue + ' ' ).replace(/[\t\r\n\f]/g, ' ') : ' ';
217-
j = 0;
218-
while ((clazz = classes[j++])) {
220+
for (j = 0; (clazz = classes[j++]); ) {
219221
cur = callback(cur, clazz, cur.indexOf(' ' + clazz + ' ') >= 0);
220222
}
221223
finalValue = cur.slice(1, -1);
@@ -227,28 +229,15 @@
227229
return obj;
228230
}
229231

230-
function delegateHandler(selector, handler, event) {
231-
var currentTarget = closest.call([event.target], selector, this)[0];
232-
if (currentTarget && currentTarget !== this) {
233-
handler.call(currentTarget, event);
234-
}
235-
}
236-
237232
var matches = Element.matches || Element.matchesSelector || Element.mozMatchesSelector || Element.msMatchesSelector || Element.oMatchesSelector || Element.webkitMatchesSelector;
238233

239-
function closest(selector, context) {
240-
var nodes = [];
241-
$.each(this, function (i, node) {
242-
while (node && node !== context) {
243-
if (matches.call(node, selector)) {
244-
nodes.push(node);
245-
break;
246-
}
247-
node = node.parentElement;
234+
function delegateHandler(selector, handler, event) {
235+
var node = event.target;
236+
while (node && node !== this) {
237+
if (matches.call(node, selector)) {
238+
return handler.call(node, event);
248239
}
249-
});
250-
return $($.grep(nodes, function (index, item) {
251-
return nodes.indexOf(item) === index;
252-
}));
240+
node = node.parentElement;
241+
}
253242
}
254243
})(window, document, Element.prototype);

0 commit comments

Comments
 (0)