gyorgy@0
|
1 /*!
|
gyorgy@0
|
2 * Ender: open module JavaScript framework
|
gyorgy@0
|
3 * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
|
gyorgy@0
|
4 * https://ender.no.de
|
gyorgy@0
|
5 * License MIT
|
gyorgy@0
|
6 * Build: ender build jeesh --output jeesh
|
gyorgy@0
|
7 */
|
gyorgy@0
|
8 !function (context) {
|
gyorgy@0
|
9
|
gyorgy@0
|
10 function aug(o, o2) {
|
gyorgy@0
|
11 for (var k in o2) {
|
gyorgy@0
|
12 k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
|
gyorgy@0
|
13 }
|
gyorgy@0
|
14 return o;
|
gyorgy@0
|
15 }
|
gyorgy@0
|
16
|
gyorgy@0
|
17 function boosh(s, r, els) {
|
gyorgy@0
|
18 // string || node || nodelist || window
|
gyorgy@0
|
19 if (ender._select && (typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window)) {
|
gyorgy@0
|
20 els = ender._select(s, r);
|
gyorgy@0
|
21 els.selector = s;
|
gyorgy@0
|
22 } else {
|
gyorgy@0
|
23 els = isFinite(s.length) ? s : [s];
|
gyorgy@0
|
24 }
|
gyorgy@0
|
25 return aug(els, boosh);
|
gyorgy@0
|
26 }
|
gyorgy@0
|
27
|
gyorgy@0
|
28 function ender(s, r) {
|
gyorgy@0
|
29 return boosh(s, r);
|
gyorgy@0
|
30 }
|
gyorgy@0
|
31
|
gyorgy@0
|
32 aug(ender, {
|
gyorgy@0
|
33 _VERSION: '0.2.4',
|
gyorgy@0
|
34 ender: function (o, chain) {
|
gyorgy@0
|
35 aug(chain ? boosh : ender, o);
|
gyorgy@0
|
36 },
|
gyorgy@0
|
37 fn: context.$ && context.$.fn || {} // for easy compat to jQuery plugins
|
gyorgy@0
|
38 });
|
gyorgy@0
|
39
|
gyorgy@0
|
40 aug(boosh, {
|
gyorgy@0
|
41 forEach: function (fn, scope, i) {
|
gyorgy@0
|
42 // opt out of native forEach so we can intentionally call our own scope
|
gyorgy@0
|
43 // defaulting to the current item and be able to return self
|
gyorgy@0
|
44 for (i = 0, l = this.length; i < l; ++i) {
|
gyorgy@0
|
45 i in this && fn.call(scope || this[i], this[i], i, this);
|
gyorgy@0
|
46 }
|
gyorgy@0
|
47 // return self for chaining
|
gyorgy@0
|
48 return this;
|
gyorgy@0
|
49 },
|
gyorgy@0
|
50 $: ender // handy reference to self
|
gyorgy@0
|
51 });
|
gyorgy@0
|
52
|
gyorgy@0
|
53 var old = context.$;
|
gyorgy@0
|
54 ender.noConflict = function () {
|
gyorgy@0
|
55 context.$ = old;
|
gyorgy@0
|
56 return this;
|
gyorgy@0
|
57 };
|
gyorgy@0
|
58
|
gyorgy@0
|
59 (typeof module !== 'undefined') && module.exports && (module.exports = ender);
|
gyorgy@0
|
60 // use subscript notation as extern for Closure compilation
|
gyorgy@0
|
61 context['ender'] = context['$'] = ender;
|
gyorgy@0
|
62
|
gyorgy@0
|
63 }(this);
|
gyorgy@0
|
64 /*!
|
gyorgy@0
|
65 * bean.js - copyright Jacob Thornton 2011
|
gyorgy@0
|
66 * https://github.com/fat/bean
|
gyorgy@0
|
67 * MIT License
|
gyorgy@0
|
68 * special thanks to:
|
gyorgy@0
|
69 * dean edwards: http://dean.edwards.name/
|
gyorgy@0
|
70 * dperini: https://github.com/dperini/nwevents
|
gyorgy@0
|
71 * the entire mootools team: github.com/mootools/mootools-core
|
gyorgy@0
|
72 */
|
gyorgy@0
|
73 !function (context) {
|
gyorgy@0
|
74 var __uid = 1, registry = {}, collected = {},
|
gyorgy@0
|
75 overOut = /over|out/,
|
gyorgy@0
|
76 namespace = /[^\.]*(?=\..*)\.|.*/,
|
gyorgy@0
|
77 stripName = /\..*/,
|
gyorgy@0
|
78 addEvent = 'addEventListener',
|
gyorgy@0
|
79 attachEvent = 'attachEvent',
|
gyorgy@0
|
80 removeEvent = 'removeEventListener',
|
gyorgy@0
|
81 detachEvent = 'detachEvent',
|
gyorgy@0
|
82 doc = context.document || {},
|
gyorgy@0
|
83 root = doc.documentElement || {},
|
gyorgy@0
|
84 W3C_MODEL = root[addEvent],
|
gyorgy@0
|
85 eventSupport = W3C_MODEL ? addEvent : attachEvent,
|
gyorgy@0
|
86
|
gyorgy@0
|
87 isDescendant = function (parent, child) {
|
gyorgy@0
|
88 var node = child.parentNode;
|
gyorgy@0
|
89 while (node != null) {
|
gyorgy@0
|
90 if (node == parent) {
|
gyorgy@0
|
91 return true;
|
gyorgy@0
|
92 }
|
gyorgy@0
|
93 node = node.parentNode;
|
gyorgy@0
|
94 }
|
gyorgy@0
|
95 },
|
gyorgy@0
|
96
|
gyorgy@0
|
97 retrieveUid = function (obj, uid) {
|
gyorgy@0
|
98 return (obj.__uid = uid || obj.__uid || __uid++);
|
gyorgy@0
|
99 },
|
gyorgy@0
|
100
|
gyorgy@0
|
101 retrieveEvents = function (element) {
|
gyorgy@0
|
102 var uid = retrieveUid(element);
|
gyorgy@0
|
103 return (registry[uid] = registry[uid] || {});
|
gyorgy@0
|
104 },
|
gyorgy@0
|
105
|
gyorgy@0
|
106 listener = W3C_MODEL ? function (element, type, fn, add) {
|
gyorgy@0
|
107 element[add ? addEvent : removeEvent](type, fn, false);
|
gyorgy@0
|
108 } : function (element, type, fn, add, custom) {
|
gyorgy@0
|
109 custom && add && (element['_on' + custom] = element['_on' + custom] || 0);
|
gyorgy@0
|
110 element[add ? attachEvent : detachEvent]('on' + type, fn);
|
gyorgy@0
|
111 },
|
gyorgy@0
|
112
|
gyorgy@0
|
113 nativeHandler = function (element, fn, args) {
|
gyorgy@0
|
114 return function (event) {
|
gyorgy@0
|
115 event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event);
|
gyorgy@0
|
116 return fn.apply(element, [event].concat(args));
|
gyorgy@0
|
117 };
|
gyorgy@0
|
118 },
|
gyorgy@0
|
119
|
gyorgy@0
|
120 customHandler = function (element, fn, type, condition, args) {
|
gyorgy@0
|
121 return function (event) {
|
gyorgy@0
|
122 if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) {
|
gyorgy@0
|
123 fn.apply(element, [event].concat(args));
|
gyorgy@0
|
124 }
|
gyorgy@0
|
125 };
|
gyorgy@0
|
126 },
|
gyorgy@0
|
127
|
gyorgy@0
|
128 addListener = function (element, orgType, fn, args) {
|
gyorgy@0
|
129 var type = orgType.replace(stripName, ''),
|
gyorgy@0
|
130 events = retrieveEvents(element),
|
gyorgy@0
|
131 handlers = events[type] || (events[type] = {}),
|
gyorgy@0
|
132 uid = retrieveUid(fn, orgType.replace(namespace, ''));
|
gyorgy@0
|
133 if (handlers[uid]) {
|
gyorgy@0
|
134 return element;
|
gyorgy@0
|
135 }
|
gyorgy@0
|
136 var custom = customEvents[type];
|
gyorgy@0
|
137 if (custom) {
|
gyorgy@0
|
138 fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn;
|
gyorgy@0
|
139 type = custom.base || type;
|
gyorgy@0
|
140 }
|
gyorgy@0
|
141 var isNative = nativeEvents[type];
|
gyorgy@0
|
142 fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args);
|
gyorgy@0
|
143 isNative = W3C_MODEL || isNative;
|
gyorgy@0
|
144 if (type == 'unload') {
|
gyorgy@0
|
145 var org = fn;
|
gyorgy@0
|
146 fn = function () {
|
gyorgy@0
|
147 removeListener(element, type, fn) && org();
|
gyorgy@0
|
148 };
|
gyorgy@0
|
149 }
|
gyorgy@0
|
150 element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type);
|
gyorgy@0
|
151 handlers[uid] = fn;
|
gyorgy@0
|
152 fn.__uid = uid;
|
gyorgy@0
|
153 return type == 'unload' ? element : (collected[retrieveUid(element)] = element);
|
gyorgy@0
|
154 },
|
gyorgy@0
|
155
|
gyorgy@0
|
156 removeListener = function (element, orgType, handler) {
|
gyorgy@0
|
157 var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, '');
|
gyorgy@0
|
158 if (!events || !events[type]) {
|
gyorgy@0
|
159 return element;
|
gyorgy@0
|
160 }
|
gyorgy@0
|
161 names = orgType.replace(namespace, '');
|
gyorgy@0
|
162 uids = names ? names.split('.') : [handler.__uid];
|
gyorgy@0
|
163 for (i = uids.length; i--;) {
|
gyorgy@0
|
164 uid = uids[i];
|
gyorgy@0
|
165 handler = events[type][uid];
|
gyorgy@0
|
166 delete events[type][uid];
|
gyorgy@0
|
167 if (element[eventSupport]) {
|
gyorgy@0
|
168 type = customEvents[type] ? customEvents[type].base : type;
|
gyorgy@0
|
169 var isNative = W3C_MODEL || nativeEvents[type];
|
gyorgy@0
|
170 listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type);
|
gyorgy@0
|
171 }
|
gyorgy@0
|
172 }
|
gyorgy@0
|
173 return element;
|
gyorgy@0
|
174 },
|
gyorgy@0
|
175
|
gyorgy@0
|
176 del = function (selector, fn, $) {
|
gyorgy@0
|
177 return function (e) {
|
gyorgy@0
|
178 var array = typeof selector == 'string' ? $(selector, this) : selector;
|
gyorgy@0
|
179 for (var target = e.target; target && target != this; target = target.parentNode) {
|
gyorgy@0
|
180 for (var i = array.length; i--;) {
|
gyorgy@0
|
181 if (array[i] == target) {
|
gyorgy@0
|
182 return fn.apply(target, arguments);
|
gyorgy@0
|
183 }
|
gyorgy@0
|
184 }
|
gyorgy@0
|
185 }
|
gyorgy@0
|
186 };
|
gyorgy@0
|
187 },
|
gyorgy@0
|
188
|
gyorgy@0
|
189 add = function (element, events, fn, delfn, $) {
|
gyorgy@0
|
190 if (typeof events == 'object' && !fn) {
|
gyorgy@0
|
191 for (var type in events) {
|
gyorgy@0
|
192 events.hasOwnProperty(type) && add(element, type, events[type]);
|
gyorgy@0
|
193 }
|
gyorgy@0
|
194 } else {
|
gyorgy@0
|
195 var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' ');
|
gyorgy@0
|
196 fn = isDel ? del(events, delfn, $) : fn;
|
gyorgy@0
|
197 for (var i = types.length; i--;) {
|
gyorgy@0
|
198 addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3));
|
gyorgy@0
|
199 }
|
gyorgy@0
|
200 }
|
gyorgy@0
|
201 return element;
|
gyorgy@0
|
202 },
|
gyorgy@0
|
203
|
gyorgy@0
|
204 remove = function (element, orgEvents, fn) {
|
gyorgy@0
|
205 var k, type, events, i,
|
gyorgy@0
|
206 isString = typeof(orgEvents) == 'string',
|
gyorgy@0
|
207 names = isString && orgEvents.replace(namespace, ''),
|
gyorgy@0
|
208 rm = removeListener,
|
gyorgy@0
|
209 attached = retrieveEvents(element);
|
gyorgy@0
|
210 if (isString && /\s/.test(orgEvents)) {
|
gyorgy@0
|
211 orgEvents = orgEvents.split(' ');
|
gyorgy@0
|
212 i = orgEvents.length - 1;
|
gyorgy@0
|
213 while (remove(element, orgEvents[i]) && i--) {}
|
gyorgy@0
|
214 return element;
|
gyorgy@0
|
215 }
|
gyorgy@0
|
216 events = isString ? orgEvents.replace(stripName, '') : orgEvents;
|
gyorgy@0
|
217 if (!attached || (isString && !attached[events])) {
|
gyorgy@0
|
218 return element;
|
gyorgy@0
|
219 }
|
gyorgy@0
|
220 if (typeof fn == 'function') {
|
gyorgy@0
|
221 rm(element, events, fn);
|
gyorgy@0
|
222 } else if (names) {
|
gyorgy@0
|
223 rm(element, orgEvents);
|
gyorgy@0
|
224 } else {
|
gyorgy@0
|
225 rm = events ? rm : remove;
|
gyorgy@0
|
226 type = isString && events;
|
gyorgy@0
|
227 events = events ? (fn || attached[events] || events) : attached;
|
gyorgy@0
|
228 for (k in events) {
|
gyorgy@0
|
229 events.hasOwnProperty(k) && rm(element, type || k, events[k]);
|
gyorgy@0
|
230 }
|
gyorgy@0
|
231 }
|
gyorgy@0
|
232 return element;
|
gyorgy@0
|
233 },
|
gyorgy@0
|
234
|
gyorgy@0
|
235 fire = function (element, type, args) {
|
gyorgy@0
|
236 var evt, k, i, types = type.split(' ');
|
gyorgy@0
|
237 for (i = types.length; i--;) {
|
gyorgy@0
|
238 type = types[i].replace(stripName, '');
|
gyorgy@0
|
239 var isNative = nativeEvents[type],
|
gyorgy@0
|
240 isNamespace = types[i].replace(namespace, ''),
|
gyorgy@0
|
241 handlers = retrieveEvents(element)[type];
|
gyorgy@0
|
242 if (isNamespace) {
|
gyorgy@0
|
243 isNamespace = isNamespace.split('.');
|
gyorgy@0
|
244 for (k = isNamespace.length; k--;) {
|
gyorgy@0
|
245 handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args);
|
gyorgy@0
|
246 }
|
gyorgy@0
|
247 } else if (!args && element[eventSupport]) {
|
gyorgy@0
|
248 fireListener(isNative, type, element);
|
gyorgy@0
|
249 } else {
|
gyorgy@0
|
250 for (k in handlers) {
|
gyorgy@0
|
251 handlers.hasOwnProperty(k) && handlers[k].apply(element, args);
|
gyorgy@0
|
252 }
|
gyorgy@0
|
253 }
|
gyorgy@0
|
254 }
|
gyorgy@0
|
255 return element;
|
gyorgy@0
|
256 },
|
gyorgy@0
|
257
|
gyorgy@0
|
258 fireListener = W3C_MODEL ? function (isNative, type, element) {
|
gyorgy@0
|
259 evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents");
|
gyorgy@0
|
260 evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1);
|
gyorgy@0
|
261 element.dispatchEvent(evt);
|
gyorgy@0
|
262 } : function (isNative, type, element) {
|
gyorgy@0
|
263 isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++;
|
gyorgy@0
|
264 },
|
gyorgy@0
|
265
|
gyorgy@0
|
266 clone = function (element, from, type) {
|
gyorgy@0
|
267 var events = retrieveEvents(from), obj, k;
|
gyorgy@0
|
268 obj = type ? events[type] : events;
|
gyorgy@0
|
269 for (k in obj) {
|
gyorgy@0
|
270 obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k);
|
gyorgy@0
|
271 }
|
gyorgy@0
|
272 return element;
|
gyorgy@0
|
273 },
|
gyorgy@0
|
274
|
gyorgy@0
|
275 fixEvent = function (e) {
|
gyorgy@0
|
276 var result = {};
|
gyorgy@0
|
277 if (!e) {
|
gyorgy@0
|
278 return result;
|
gyorgy@0
|
279 }
|
gyorgy@0
|
280 var type = e.type, target = e.target || e.srcElement;
|
gyorgy@0
|
281 result.preventDefault = fixEvent.preventDefault(e);
|
gyorgy@0
|
282 result.stopPropagation = fixEvent.stopPropagation(e);
|
gyorgy@0
|
283 result.target = target && target.nodeType == 3 ? target.parentNode : target;
|
gyorgy@0
|
284 if (~type.indexOf('key')) {
|
gyorgy@0
|
285 result.keyCode = e.which || e.keyCode;
|
gyorgy@0
|
286 } else if ((/click|mouse|menu/i).test(type)) {
|
gyorgy@0
|
287 result.rightClick = e.which == 3 || e.button == 2;
|
gyorgy@0
|
288 result.pos = { x: 0, y: 0 };
|
gyorgy@0
|
289 if (e.pageX || e.pageY) {
|
gyorgy@0
|
290 result.clientX = e.pageX;
|
gyorgy@0
|
291 result.clientY = e.pageY;
|
gyorgy@0
|
292 } else if (e.clientX || e.clientY) {
|
gyorgy@0
|
293 result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
|
gyorgy@0
|
294 result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
|
gyorgy@0
|
295 }
|
gyorgy@0
|
296 overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']);
|
gyorgy@0
|
297 }
|
gyorgy@0
|
298 for (var k in e) {
|
gyorgy@0
|
299 if (!(k in result)) {
|
gyorgy@0
|
300 result[k] = e[k];
|
gyorgy@0
|
301 }
|
gyorgy@0
|
302 }
|
gyorgy@0
|
303 return result;
|
gyorgy@0
|
304 };
|
gyorgy@0
|
305
|
gyorgy@0
|
306 fixEvent.preventDefault = function (e) {
|
gyorgy@0
|
307 return function () {
|
gyorgy@0
|
308 if (e.preventDefault) {
|
gyorgy@0
|
309 e.preventDefault();
|
gyorgy@0
|
310 }
|
gyorgy@0
|
311 else {
|
gyorgy@0
|
312 e.returnValue = false;
|
gyorgy@0
|
313 }
|
gyorgy@0
|
314 };
|
gyorgy@0
|
315 };
|
gyorgy@0
|
316
|
gyorgy@0
|
317 fixEvent.stopPropagation = function (e) {
|
gyorgy@0
|
318 return function () {
|
gyorgy@0
|
319 if (e.stopPropagation) {
|
gyorgy@0
|
320 e.stopPropagation();
|
gyorgy@0
|
321 } else {
|
gyorgy@0
|
322 e.cancelBubble = true;
|
gyorgy@0
|
323 }
|
gyorgy@0
|
324 };
|
gyorgy@0
|
325 };
|
gyorgy@0
|
326
|
gyorgy@0
|
327 var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons
|
gyorgy@0
|
328 mousewheel: 1, DOMMouseScroll: 1, //mouse wheel
|
gyorgy@0
|
329 mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement
|
gyorgy@0
|
330 keydown: 1, keypress: 1, keyup: 1, //keyboard
|
gyorgy@0
|
331 orientationchange: 1, // mobile
|
gyorgy@0
|
332 touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch
|
gyorgy@0
|
333 gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture
|
gyorgy@0
|
334 focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements
|
gyorgy@0
|
335 load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
|
gyorgy@0
|
336 error: 1, abort: 1, scroll: 1 }; //misc
|
gyorgy@0
|
337
|
gyorgy@0
|
338 function check(event) {
|
gyorgy@0
|
339 var related = event.relatedTarget;
|
gyorgy@0
|
340 if (!related) {
|
gyorgy@0
|
341 return related == null;
|
gyorgy@0
|
342 }
|
gyorgy@0
|
343 return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related));
|
gyorgy@0
|
344 }
|
gyorgy@0
|
345
|
gyorgy@0
|
346 var customEvents = {
|
gyorgy@0
|
347 mouseenter: { base: 'mouseover', condition: check },
|
gyorgy@0
|
348 mouseleave: { base: 'mouseout', condition: check },
|
gyorgy@0
|
349 mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }
|
gyorgy@0
|
350 };
|
gyorgy@0
|
351
|
gyorgy@0
|
352 var bean = { add: add, remove: remove, clone: clone, fire: fire };
|
gyorgy@0
|
353
|
gyorgy@0
|
354 var clean = function (el) {
|
gyorgy@0
|
355 var uid = remove(el).__uid;
|
gyorgy@0
|
356 if (uid) {
|
gyorgy@0
|
357 delete collected[uid];
|
gyorgy@0
|
358 delete registry[uid];
|
gyorgy@0
|
359 }
|
gyorgy@0
|
360 };
|
gyorgy@0
|
361
|
gyorgy@0
|
362 if (context[attachEvent]) {
|
gyorgy@0
|
363 add(context, 'unload', function () {
|
gyorgy@0
|
364 for (var k in collected) {
|
gyorgy@0
|
365 collected.hasOwnProperty(k) && clean(collected[k]);
|
gyorgy@0
|
366 }
|
gyorgy@0
|
367 context.CollectGarbage && CollectGarbage();
|
gyorgy@0
|
368 });
|
gyorgy@0
|
369 }
|
gyorgy@0
|
370
|
gyorgy@0
|
371 var oldBean = context.bean;
|
gyorgy@0
|
372 bean.noConflict = function () {
|
gyorgy@0
|
373 context.bean = oldBean;
|
gyorgy@0
|
374 return this;
|
gyorgy@0
|
375 };
|
gyorgy@0
|
376
|
gyorgy@0
|
377 (typeof module !== 'undefined' && module.exports) ?
|
gyorgy@0
|
378 (module.exports = bean) :
|
gyorgy@0
|
379 (context['bean'] = bean);
|
gyorgy@0
|
380
|
gyorgy@0
|
381 }(this);!function ($) {
|
gyorgy@0
|
382 var b = bean.noConflict(),
|
gyorgy@0
|
383 integrate = function (method, type, method2) {
|
gyorgy@0
|
384 var _args = type ? [type] : [];
|
gyorgy@0
|
385 return function () {
|
gyorgy@0
|
386 for (var args, i = 0, l = this.length; i < l; i++) {
|
gyorgy@0
|
387 args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0));
|
gyorgy@0
|
388 args.length == 4 && args.push($);
|
gyorgy@0
|
389 !arguments.length && method == 'add' && type && (method = 'fire');
|
gyorgy@0
|
390 b[method].apply(this, args);
|
gyorgy@0
|
391 }
|
gyorgy@0
|
392 return this;
|
gyorgy@0
|
393 };
|
gyorgy@0
|
394 };
|
gyorgy@0
|
395
|
gyorgy@0
|
396 var add = integrate('add'),
|
gyorgy@0
|
397 remove = integrate('remove'),
|
gyorgy@0
|
398 fire = integrate('fire');
|
gyorgy@0
|
399
|
gyorgy@0
|
400 var methods = {
|
gyorgy@0
|
401
|
gyorgy@0
|
402 on: add,
|
gyorgy@0
|
403 addListener: add,
|
gyorgy@0
|
404 bind: add,
|
gyorgy@0
|
405 listen: add,
|
gyorgy@0
|
406 delegate: add,
|
gyorgy@0
|
407
|
gyorgy@0
|
408 unbind: remove,
|
gyorgy@0
|
409 unlisten: remove,
|
gyorgy@0
|
410 removeListener: remove,
|
gyorgy@0
|
411 undelegate: remove,
|
gyorgy@0
|
412
|
gyorgy@0
|
413 emit: fire,
|
gyorgy@0
|
414 trigger: fire,
|
gyorgy@0
|
415
|
gyorgy@0
|
416 cloneEvents: integrate('clone'),
|
gyorgy@0
|
417
|
gyorgy@0
|
418 hover: function (enter, leave, i) { // i for internal
|
gyorgy@0
|
419 for (i = this.length; i--;) {
|
gyorgy@0
|
420 b.add.call(this, this[i], 'mouseenter', enter);
|
gyorgy@0
|
421 b.add.call(this, this[i], 'mouseleave', leave);
|
gyorgy@0
|
422 }
|
gyorgy@0
|
423 return this;
|
gyorgy@0
|
424 }
|
gyorgy@0
|
425 };
|
gyorgy@0
|
426
|
gyorgy@0
|
427 var i, shortcuts = [
|
gyorgy@0
|
428 'blur', 'change', 'click', 'dblclick', 'error', 'focus', 'focusin',
|
gyorgy@0
|
429 'focusout', 'keydown', 'keypress', 'keyup', 'load', 'mousedown',
|
gyorgy@0
|
430 'mouseenter', 'mouseleave', 'mouseout', 'mouseover', 'mouseup', 'mousemove',
|
gyorgy@0
|
431 'resize', 'scroll', 'select', 'submit', 'unload'
|
gyorgy@0
|
432 ];
|
gyorgy@0
|
433
|
gyorgy@0
|
434 for (i = shortcuts.length; i--;) {
|
gyorgy@0
|
435 methods[shortcuts[i]] = integrate('add', shortcuts[i]);
|
gyorgy@0
|
436 }
|
gyorgy@0
|
437
|
gyorgy@0
|
438 $.ender(methods, true);
|
gyorgy@0
|
439 }(ender);
|
gyorgy@0
|
440 /*!
|
gyorgy@0
|
441 * bonzo.js - copyright @dedfat 2011
|
gyorgy@0
|
442 * https://github.com/ded/bonzo
|
gyorgy@0
|
443 * Follow our software http://twitter.com/dedfat
|
gyorgy@0
|
444 * MIT License
|
gyorgy@0
|
445 */
|
gyorgy@0
|
446 !function (context, win) {
|
gyorgy@0
|
447
|
gyorgy@0
|
448 var doc = context.document,
|
gyorgy@0
|
449 html = doc.documentElement,
|
gyorgy@0
|
450 parentNode = 'parentNode',
|
gyorgy@0
|
451 query = null,
|
gyorgy@0
|
452 byTag = 'getElementsByTagName',
|
gyorgy@0
|
453 specialAttributes = /^checked|value|selected$/,
|
gyorgy@0
|
454 specialTags = /select|fieldset|table|tbody|tfoot|td|tr|colgroup/i,
|
gyorgy@0
|
455 table = 'table',
|
gyorgy@0
|
456 tagMap = { thead: table, tbody: table, tfoot: table, tr: 'tbody', th: 'tr', td: 'tr', fieldset: 'form', option: 'select' },
|
gyorgy@0
|
457 stateAttributes = /^checked|selected$/,
|
gyorgy@0
|
458 ie = /msie/i.test(navigator.userAgent),
|
gyorgy@0
|
459 uidList = [],
|
gyorgy@0
|
460 uuids = 0,
|
gyorgy@0
|
461 digit = /^-?[\d\.]+$/,
|
gyorgy@0
|
462 px = 'px',
|
gyorgy@0
|
463 // commonly used methods
|
gyorgy@0
|
464 setAttribute = 'setAttribute',
|
gyorgy@0
|
465 getAttribute = 'getAttribute',
|
gyorgy@0
|
466 trimReplace = /(^\s*|\s*$)/g,
|
gyorgy@0
|
467 unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 };
|
gyorgy@0
|
468
|
gyorgy@0
|
469 function classReg(c) {
|
gyorgy@0
|
470 return new RegExp("(^|\\s+)" + c + "(\\s+|$)");
|
gyorgy@0
|
471 }
|
gyorgy@0
|
472
|
gyorgy@0
|
473 function each(ar, fn, scope) {
|
gyorgy@0
|
474 for (var i = 0, l = ar.length; i < l; i++) {
|
gyorgy@0
|
475 fn.call(scope || ar[i], ar[i], i, ar);
|
gyorgy@0
|
476 }
|
gyorgy@0
|
477 return ar;
|
gyorgy@0
|
478 }
|
gyorgy@0
|
479
|
gyorgy@0
|
480 var trim = String.prototype.trim ?
|
gyorgy@0
|
481 function (s) {
|
gyorgy@0
|
482 return s.trim();
|
gyorgy@0
|
483 } :
|
gyorgy@0
|
484 function (s) {
|
gyorgy@0
|
485 return s.replace(trimReplace, '');
|
gyorgy@0
|
486 };
|
gyorgy@0
|
487
|
gyorgy@0
|
488 function camelize(s) {
|
gyorgy@0
|
489 return s.replace(/-(.)/g, function (m, m1) {
|
gyorgy@0
|
490 return m1.toUpperCase();
|
gyorgy@0
|
491 });
|
gyorgy@0
|
492 }
|
gyorgy@0
|
493
|
gyorgy@0
|
494 function is(node) {
|
gyorgy@0
|
495 return node && node.nodeName && node.nodeType == 1;
|
gyorgy@0
|
496 }
|
gyorgy@0
|
497
|
gyorgy@0
|
498 function some(ar, fn, scope) {
|
gyorgy@0
|
499 for (var i = 0, j = ar.length; i < j; ++i) {
|
gyorgy@0
|
500 if (fn.call(scope, ar[i], i, ar)) {
|
gyorgy@0
|
501 return true;
|
gyorgy@0
|
502 }
|
gyorgy@0
|
503 }
|
gyorgy@0
|
504 return false;
|
gyorgy@0
|
505 }
|
gyorgy@0
|
506
|
gyorgy@0
|
507 var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ?
|
gyorgy@0
|
508 function (el, property) {
|
gyorgy@0
|
509 var value = null;
|
gyorgy@0
|
510 if (property == 'float') {
|
gyorgy@0
|
511 property = 'cssFloat';
|
gyorgy@0
|
512 }
|
gyorgy@0
|
513 var computed = doc.defaultView.getComputedStyle(el, '');
|
gyorgy@0
|
514 computed && (value = computed[camelize(property)]);
|
gyorgy@0
|
515 return el.style[property] || value;
|
gyorgy@0
|
516
|
gyorgy@0
|
517 } : (ie && html.currentStyle) ?
|
gyorgy@0
|
518
|
gyorgy@0
|
519 function (el, property) {
|
gyorgy@0
|
520 property = camelize(property);
|
gyorgy@0
|
521 property = property == 'float' ? 'styleFloat' : property;
|
gyorgy@0
|
522
|
gyorgy@0
|
523 if (property == 'opacity') {
|
gyorgy@0
|
524 var val = 100;
|
gyorgy@0
|
525 try {
|
gyorgy@0
|
526 val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
|
gyorgy@0
|
527 } catch (e1) {
|
gyorgy@0
|
528 try {
|
gyorgy@0
|
529 val = el.filters('alpha').opacity;
|
gyorgy@0
|
530 } catch (e2) {}
|
gyorgy@0
|
531 }
|
gyorgy@0
|
532 return val / 100;
|
gyorgy@0
|
533 }
|
gyorgy@0
|
534 var value = el.currentStyle ? el.currentStyle[property] : null;
|
gyorgy@0
|
535 return el.style[property] || value;
|
gyorgy@0
|
536 } :
|
gyorgy@0
|
537
|
gyorgy@0
|
538 function (el, property) {
|
gyorgy@0
|
539 return el.style[camelize(property)];
|
gyorgy@0
|
540 };
|
gyorgy@0
|
541
|
gyorgy@0
|
542 function insert(target, host, fn) {
|
gyorgy@0
|
543 var i = 0, self = host || this, r = [],
|
gyorgy@0
|
544 nodes = query && typeof target == 'string' && target.charAt(0) != '<' ? function (n) {
|
gyorgy@0
|
545 return (n = query(target)) && (n.selected = 1) && n;
|
gyorgy@0
|
546 }() : target;
|
gyorgy@0
|
547 each(normalize(nodes), function (t) {
|
gyorgy@0
|
548 each(self, function (el) {
|
gyorgy@0
|
549 var n = !el[parentNode] || (el[parentNode] && !el[parentNode][parentNode]) ?
|
gyorgy@0
|
550 function () {
|
gyorgy@0
|
551 var c = el.cloneNode(true);
|
gyorgy@0
|
552 self.$ && self.cloneEvents && self.$(c).cloneEvents(el);
|
gyorgy@0
|
553 return c;
|
gyorgy@0
|
554 }() :
|
gyorgy@0
|
555 el;
|
gyorgy@0
|
556 fn(t, n);
|
gyorgy@0
|
557 r[i] = n;
|
gyorgy@0
|
558 i++;
|
gyorgy@0
|
559 });
|
gyorgy@0
|
560 }, this);
|
gyorgy@0
|
561 each(r, function (e, i) {
|
gyorgy@0
|
562 self[i] = e;
|
gyorgy@0
|
563 });
|
gyorgy@0
|
564 self.length = i;
|
gyorgy@0
|
565 return self;
|
gyorgy@0
|
566 }
|
gyorgy@0
|
567
|
gyorgy@0
|
568 function xy(el, x, y) {
|
gyorgy@0
|
569 var $el = bonzo(el),
|
gyorgy@0
|
570 style = $el.css('position'),
|
gyorgy@0
|
571 offset = $el.offset(),
|
gyorgy@0
|
572 rel = 'relative',
|
gyorgy@0
|
573 isRel = style == rel,
|
gyorgy@0
|
574 delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)];
|
gyorgy@0
|
575
|
gyorgy@0
|
576 if (style == 'static') {
|
gyorgy@0
|
577 $el.css('position', rel);
|
gyorgy@0
|
578 style = rel;
|
gyorgy@0
|
579 }
|
gyorgy@0
|
580
|
gyorgy@0
|
581 isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft);
|
gyorgy@0
|
582 isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop);
|
gyorgy@0
|
583
|
gyorgy@0
|
584 x !== null && (el.style.left = x - offset.left + delta[0] + 'px');
|
gyorgy@0
|
585 y !== null && (el.style.top = y - offset.top + delta[1] + 'px');
|
gyorgy@0
|
586
|
gyorgy@0
|
587 }
|
gyorgy@0
|
588
|
gyorgy@0
|
589 function Bonzo(elements) {
|
gyorgy@0
|
590 this.length = 0;
|
gyorgy@0
|
591 if (elements) {
|
gyorgy@0
|
592 elements = typeof elements !== 'string' &&
|
gyorgy@0
|
593 !elements.nodeType &&
|
gyorgy@0
|
594 typeof elements.length !== 'undefined' ?
|
gyorgy@0
|
595 elements :
|
gyorgy@0
|
596 [elements];
|
gyorgy@0
|
597 this.length = elements.length;
|
gyorgy@0
|
598 for (var i = 0; i < elements.length; i++) {
|
gyorgy@0
|
599 this[i] = elements[i];
|
gyorgy@0
|
600 }
|
gyorgy@0
|
601 }
|
gyorgy@0
|
602 }
|
gyorgy@0
|
603
|
gyorgy@0
|
604 Bonzo.prototype = {
|
gyorgy@0
|
605
|
gyorgy@0
|
606 each: function (fn, scope) {
|
gyorgy@0
|
607 return each(this, fn, scope);
|
gyorgy@0
|
608 },
|
gyorgy@0
|
609
|
gyorgy@0
|
610 map: function (fn, reject) {
|
gyorgy@0
|
611 var m = [], n, i;
|
gyorgy@0
|
612 for (i = 0; i < this.length; i++) {
|
gyorgy@0
|
613 n = fn.call(this, this[i]);
|
gyorgy@0
|
614 reject ? (reject(n) && m.push(n)) : m.push(n);
|
gyorgy@0
|
615 }
|
gyorgy@0
|
616 return m;
|
gyorgy@0
|
617 },
|
gyorgy@0
|
618
|
gyorgy@0
|
619 first: function () {
|
gyorgy@0
|
620 return bonzo(this[0]);
|
gyorgy@0
|
621 },
|
gyorgy@0
|
622
|
gyorgy@0
|
623 last: function () {
|
gyorgy@0
|
624 return bonzo(this[this.length - 1]);
|
gyorgy@0
|
625 },
|
gyorgy@0
|
626
|
gyorgy@0
|
627 html: function (h, text) {
|
gyorgy@0
|
628 var method = text ?
|
gyorgy@0
|
629 html.textContent == null ?
|
gyorgy@0
|
630 'innerText' :
|
gyorgy@0
|
631 'textContent' :
|
gyorgy@0
|
632 'innerHTML', m;
|
gyorgy@0
|
633 function append(el) {
|
gyorgy@0
|
634 while (el.firstChild) {
|
gyorgy@0
|
635 el.removeChild(el.firstChild);
|
gyorgy@0
|
636 }
|
gyorgy@0
|
637 each(normalize(h), function (node) {
|
gyorgy@0
|
638 el.appendChild(node);
|
gyorgy@0
|
639 });
|
gyorgy@0
|
640 }
|
gyorgy@0
|
641 return typeof h !== 'undefined' ?
|
gyorgy@0
|
642 this.each(function (el) {
|
gyorgy@0
|
643 (m = el.tagName.match(specialTags)) ?
|
gyorgy@0
|
644 append(el, m[0]) :
|
gyorgy@0
|
645 (el[method] = h);
|
gyorgy@0
|
646 }) :
|
gyorgy@0
|
647 this[0] ? this[0][method] : '';
|
gyorgy@0
|
648 },
|
gyorgy@0
|
649
|
gyorgy@0
|
650 text: function (text) {
|
gyorgy@0
|
651 return this.html(text, 1);
|
gyorgy@0
|
652 },
|
gyorgy@0
|
653
|
gyorgy@0
|
654 addClass: function (c) {
|
gyorgy@0
|
655 return this.each(function (el) {
|
gyorgy@0
|
656 this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c));
|
gyorgy@0
|
657 }, this);
|
gyorgy@0
|
658 },
|
gyorgy@0
|
659
|
gyorgy@0
|
660 removeClass: function (c) {
|
gyorgy@0
|
661 return this.each(function (el) {
|
gyorgy@0
|
662 this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' ')));
|
gyorgy@0
|
663 }, this);
|
gyorgy@0
|
664 },
|
gyorgy@0
|
665
|
gyorgy@0
|
666 hasClass: function (el, c) {
|
gyorgy@0
|
667 return typeof c == 'undefined' ?
|
gyorgy@0
|
668 some(this, function (i) {
|
gyorgy@0
|
669 return classReg(el).test(i.className);
|
gyorgy@0
|
670 }) :
|
gyorgy@0
|
671 classReg(c).test(el.className);
|
gyorgy@0
|
672 },
|
gyorgy@0
|
673
|
gyorgy@0
|
674 toggleClass: function (c, condition) {
|
gyorgy@0
|
675 if (typeof condition !== 'undefined' && !condition) {
|
gyorgy@0
|
676 return this;
|
gyorgy@0
|
677 }
|
gyorgy@0
|
678 return this.each(function (el) {
|
gyorgy@0
|
679 this.hasClass(el, c) ?
|
gyorgy@0
|
680 (el.className = trim(el.className.replace(classReg(c), ' '))) :
|
gyorgy@0
|
681 (el.className = trim(el.className + ' ' + c));
|
gyorgy@0
|
682 }, this);
|
gyorgy@0
|
683 },
|
gyorgy@0
|
684
|
gyorgy@0
|
685 show: function (type) {
|
gyorgy@0
|
686 return this.each(function (el) {
|
gyorgy@0
|
687 el.style.display = type || '';
|
gyorgy@0
|
688 });
|
gyorgy@0
|
689 },
|
gyorgy@0
|
690
|
gyorgy@0
|
691 hide: function (elements) {
|
gyorgy@0
|
692 return this.each(function (el) {
|
gyorgy@0
|
693 el.style.display = 'none';
|
gyorgy@0
|
694 });
|
gyorgy@0
|
695 },
|
gyorgy@0
|
696
|
gyorgy@0
|
697 append: function (node) {
|
gyorgy@0
|
698 return this.each(function (el) {
|
gyorgy@0
|
699 each(normalize(node), function (i) {
|
gyorgy@0
|
700 el.appendChild(i);
|
gyorgy@0
|
701 });
|
gyorgy@0
|
702 });
|
gyorgy@0
|
703 },
|
gyorgy@0
|
704
|
gyorgy@0
|
705 prepend: function (node) {
|
gyorgy@0
|
706 return this.each(function (el) {
|
gyorgy@0
|
707 var first = el.firstChild;
|
gyorgy@0
|
708 each(normalize(node), function (i) {
|
gyorgy@0
|
709 el.insertBefore(i, first);
|
gyorgy@0
|
710 });
|
gyorgy@0
|
711 });
|
gyorgy@0
|
712 },
|
gyorgy@0
|
713
|
gyorgy@0
|
714 appendTo: function (target, host) {
|
gyorgy@0
|
715 return insert.call(this, target, host, function (t, el) {
|
gyorgy@0
|
716 t.appendChild(el);
|
gyorgy@0
|
717 });
|
gyorgy@0
|
718 },
|
gyorgy@0
|
719
|
gyorgy@0
|
720 prependTo: function (target, host) {
|
gyorgy@0
|
721 return insert.call(this, target, host, function (t, el) {
|
gyorgy@0
|
722 t.insertBefore(el, t.firstChild);
|
gyorgy@0
|
723 });
|
gyorgy@0
|
724 },
|
gyorgy@0
|
725
|
gyorgy@0
|
726 next: function () {
|
gyorgy@0
|
727 return this.related('nextSibling');
|
gyorgy@0
|
728 },
|
gyorgy@0
|
729
|
gyorgy@0
|
730 previous: function () {
|
gyorgy@0
|
731 return this.related('previousSibling');
|
gyorgy@0
|
732 },
|
gyorgy@0
|
733
|
gyorgy@0
|
734 related: function (method) {
|
gyorgy@0
|
735 return this.map(
|
gyorgy@0
|
736 function (el) {
|
gyorgy@0
|
737 el = el[method];
|
gyorgy@0
|
738 while (el && el.nodeType !== 1) {
|
gyorgy@0
|
739 el = el[method];
|
gyorgy@0
|
740 }
|
gyorgy@0
|
741 return el || 0;
|
gyorgy@0
|
742 },
|
gyorgy@0
|
743 function (el) {
|
gyorgy@0
|
744 return el;
|
gyorgy@0
|
745 }
|
gyorgy@0
|
746 );
|
gyorgy@0
|
747 },
|
gyorgy@0
|
748
|
gyorgy@0
|
749 before: function (node) {
|
gyorgy@0
|
750 return this.each(function (el) {
|
gyorgy@0
|
751 each(bonzo.create(node), function (i) {
|
gyorgy@0
|
752 el[parentNode].insertBefore(i, el);
|
gyorgy@0
|
753 });
|
gyorgy@0
|
754 });
|
gyorgy@0
|
755 },
|
gyorgy@0
|
756
|
gyorgy@0
|
757 after: function (node) {
|
gyorgy@0
|
758 return this.each(function (el) {
|
gyorgy@0
|
759 each(bonzo.create(node), function (i) {
|
gyorgy@0
|
760 el[parentNode].insertBefore(i, el.nextSibling);
|
gyorgy@0
|
761 });
|
gyorgy@0
|
762 });
|
gyorgy@0
|
763 },
|
gyorgy@0
|
764
|
gyorgy@0
|
765 insertBefore: function (target, host) {
|
gyorgy@0
|
766 return insert.call(this, target, host, function (t, el) {
|
gyorgy@0
|
767 t[parentNode].insertBefore(el, t);
|
gyorgy@0
|
768 });
|
gyorgy@0
|
769 },
|
gyorgy@0
|
770
|
gyorgy@0
|
771 insertAfter: function (target, host) {
|
gyorgy@0
|
772 return insert.call(this, target, host, function (t, el) {
|
gyorgy@0
|
773 var sibling = t.nextSibling;
|
gyorgy@0
|
774 if (sibling) {
|
gyorgy@0
|
775 t[parentNode].insertBefore(el, sibling);
|
gyorgy@0
|
776 }
|
gyorgy@0
|
777 else {
|
gyorgy@0
|
778 t[parentNode].appendChild(el);
|
gyorgy@0
|
779 }
|
gyorgy@0
|
780 });
|
gyorgy@0
|
781 },
|
gyorgy@0
|
782
|
gyorgy@0
|
783 css: function (o, v, p) {
|
gyorgy@0
|
784 // is this a request for just getting a style?
|
gyorgy@0
|
785 if (v === undefined && typeof o == 'string') {
|
gyorgy@0
|
786 // repurpose 'v'
|
gyorgy@0
|
787 v = this[0];
|
gyorgy@0
|
788 if (!v) {
|
gyorgy@0
|
789 return null;
|
gyorgy@0
|
790 }
|
gyorgy@0
|
791 if (v == doc || v == win) {
|
gyorgy@0
|
792 p = (v == doc) ? bonzo.doc() : bonzo.viewport();
|
gyorgy@0
|
793 return o == 'width' ? p.width :
|
gyorgy@0
|
794 o == 'height' ? p.height : '';
|
gyorgy@0
|
795 }
|
gyorgy@0
|
796 return getStyle(v, o);
|
gyorgy@0
|
797 }
|
gyorgy@0
|
798 var iter = o;
|
gyorgy@0
|
799 if (typeof o == 'string') {
|
gyorgy@0
|
800 iter = {};
|
gyorgy@0
|
801 iter[o] = v;
|
gyorgy@0
|
802 }
|
gyorgy@0
|
803
|
gyorgy@0
|
804 if (ie && iter.opacity) {
|
gyorgy@0
|
805 // oh this 'ol gamut
|
gyorgy@0
|
806 iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')';
|
gyorgy@0
|
807 // give it layout
|
gyorgy@0
|
808 iter.zoom = o.zoom || 1;
|
gyorgy@0
|
809 delete iter.opacity;
|
gyorgy@0
|
810 }
|
gyorgy@0
|
811
|
gyorgy@0
|
812 if (v = iter['float']) {
|
gyorgy@0
|
813 // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat
|
gyorgy@0
|
814 ie ? (iter.styleFloat = v) : (iter.cssFloat = v);
|
gyorgy@0
|
815 delete iter['float'];
|
gyorgy@0
|
816 }
|
gyorgy@0
|
817
|
gyorgy@0
|
818 var fn = function (el, p, v) {
|
gyorgy@0
|
819 for (var k in iter) {
|
gyorgy@0
|
820 if (iter.hasOwnProperty(k)) {
|
gyorgy@0
|
821 v = iter[k];
|
gyorgy@0
|
822 // change "5" to "5px" - unless you're line-height, which is allowed
|
gyorgy@0
|
823 (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px);
|
gyorgy@0
|
824 el.style[p] = v;
|
gyorgy@0
|
825 }
|
gyorgy@0
|
826 }
|
gyorgy@0
|
827 };
|
gyorgy@0
|
828 return this.each(fn);
|
gyorgy@0
|
829 },
|
gyorgy@0
|
830
|
gyorgy@0
|
831 offset: function (x, y) {
|
gyorgy@0
|
832 if (x || y) {
|
gyorgy@0
|
833 return this.each(function (el) {
|
gyorgy@0
|
834 xy(el, x, y);
|
gyorgy@0
|
835 });
|
gyorgy@0
|
836 }
|
gyorgy@0
|
837 var el = this[0];
|
gyorgy@0
|
838 var width = el.offsetWidth;
|
gyorgy@0
|
839 var height = el.offsetHeight;
|
gyorgy@0
|
840 var top = el.offsetTop;
|
gyorgy@0
|
841 var left = el.offsetLeft;
|
gyorgy@0
|
842 while (el = el.offsetParent) {
|
gyorgy@0
|
843 top = top + el.offsetTop;
|
gyorgy@0
|
844 left = left + el.offsetLeft;
|
gyorgy@0
|
845 }
|
gyorgy@0
|
846
|
gyorgy@0
|
847 return {
|
gyorgy@0
|
848 top: top,
|
gyorgy@0
|
849 left: left,
|
gyorgy@0
|
850 height: height,
|
gyorgy@0
|
851 width: width
|
gyorgy@0
|
852 };
|
gyorgy@0
|
853 },
|
gyorgy@0
|
854
|
gyorgy@0
|
855 attr: function (k, v) {
|
gyorgy@0
|
856 var el = this[0];
|
gyorgy@0
|
857 return typeof v == 'undefined' ?
|
gyorgy@0
|
858 specialAttributes.test(k) ?
|
gyorgy@0
|
859 stateAttributes.test(k) && typeof el[k] == 'string' ?
|
gyorgy@0
|
860 true : el[k] : el[getAttribute](k) :
|
gyorgy@0
|
861 this.each(function (el) {
|
gyorgy@0
|
862 k == 'value' ? (el.value = v) : el[setAttribute](k, v);
|
gyorgy@0
|
863 });
|
gyorgy@0
|
864 },
|
gyorgy@0
|
865
|
gyorgy@0
|
866 val: function (s) {
|
gyorgy@0
|
867 return (typeof s == 'string') ? this.attr('value', s) : this[0].value;
|
gyorgy@0
|
868 },
|
gyorgy@0
|
869
|
gyorgy@0
|
870 removeAttr: function (k) {
|
gyorgy@0
|
871 return this.each(function (el) {
|
gyorgy@0
|
872 el.removeAttribute(k);
|
gyorgy@0
|
873 });
|
gyorgy@0
|
874 },
|
gyorgy@0
|
875
|
gyorgy@0
|
876 data: function (k, v) {
|
gyorgy@0
|
877 var el = this[0];
|
gyorgy@0
|
878 if (typeof v === 'undefined') {
|
gyorgy@0
|
879 el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
|
gyorgy@0
|
880 var uid = el[getAttribute]('data-node-uid');
|
gyorgy@0
|
881 uidList[uid] || (uidList[uid] = {});
|
gyorgy@0
|
882 return uidList[uid][k];
|
gyorgy@0
|
883 } else {
|
gyorgy@0
|
884 return this.each(function (el) {
|
gyorgy@0
|
885 el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids);
|
gyorgy@0
|
886 var uid = el[getAttribute]('data-node-uid');
|
gyorgy@0
|
887 var o = {};
|
gyorgy@0
|
888 o[k] = v;
|
gyorgy@0
|
889 uidList[uid] = o;
|
gyorgy@0
|
890 });
|
gyorgy@0
|
891 }
|
gyorgy@0
|
892 },
|
gyorgy@0
|
893
|
gyorgy@0
|
894 remove: function () {
|
gyorgy@0
|
895 return this.each(function (el) {
|
gyorgy@0
|
896 el[parentNode] && el[parentNode].removeChild(el);
|
gyorgy@0
|
897 });
|
gyorgy@0
|
898 },
|
gyorgy@0
|
899
|
gyorgy@0
|
900 empty: function () {
|
gyorgy@0
|
901 return this.each(function (el) {
|
gyorgy@0
|
902 while (el.firstChild) {
|
gyorgy@0
|
903 el.removeChild(el.firstChild);
|
gyorgy@0
|
904 }
|
gyorgy@0
|
905 });
|
gyorgy@0
|
906 },
|
gyorgy@0
|
907
|
gyorgy@0
|
908 detach: function () {
|
gyorgy@0
|
909 return this.map(function (el) {
|
gyorgy@0
|
910 return el[parentNode].removeChild(el);
|
gyorgy@0
|
911 });
|
gyorgy@0
|
912 },
|
gyorgy@0
|
913
|
gyorgy@0
|
914 scrollTop: function (y) {
|
gyorgy@0
|
915 return scroll.call(this, null, y, 'y');
|
gyorgy@0
|
916 },
|
gyorgy@0
|
917
|
gyorgy@0
|
918 scrollLeft: function (x) {
|
gyorgy@0
|
919 return scroll.call(this, x, null, 'x');
|
gyorgy@0
|
920 }
|
gyorgy@0
|
921 };
|
gyorgy@0
|
922
|
gyorgy@0
|
923 function normalize(node) {
|
gyorgy@0
|
924 return typeof node == 'string' ? bonzo.create(node) : is(node) ? [node] : node; // assume [nodes]
|
gyorgy@0
|
925 }
|
gyorgy@0
|
926
|
gyorgy@0
|
927 function scroll(x, y, type) {
|
gyorgy@0
|
928 var el = this[0];
|
gyorgy@0
|
929 if (x == null && y == null) {
|
gyorgy@0
|
930 return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type];
|
gyorgy@0
|
931 }
|
gyorgy@0
|
932 if (isBody(el)) {
|
gyorgy@0
|
933 win.scrollTo(x, y);
|
gyorgy@0
|
934 } else {
|
gyorgy@0
|
935 x != null && (el.scrollLeft = x);
|
gyorgy@0
|
936 y != null && (el.scrollTop = y);
|
gyorgy@0
|
937 }
|
gyorgy@0
|
938 return this;
|
gyorgy@0
|
939 }
|
gyorgy@0
|
940
|
gyorgy@0
|
941 function isBody(element) {
|
gyorgy@0
|
942 return element === win || (/^(?:body|html)$/i).test(element.tagName);
|
gyorgy@0
|
943 }
|
gyorgy@0
|
944
|
gyorgy@0
|
945 function getWindowScroll() {
|
gyorgy@0
|
946 return { x: win.pageXOffset || html.scrollLeft, y: win.pageYOffset || html.scrollTop };
|
gyorgy@0
|
947 }
|
gyorgy@0
|
948
|
gyorgy@0
|
949 function bonzo(els, host) {
|
gyorgy@0
|
950 return new Bonzo(els, host);
|
gyorgy@0
|
951 }
|
gyorgy@0
|
952
|
gyorgy@0
|
953 bonzo.setQueryEngine = function (q) {
|
gyorgy@0
|
954 query = q;
|
gyorgy@0
|
955 delete bonzo.setQueryEngine;
|
gyorgy@0
|
956 };
|
gyorgy@0
|
957
|
gyorgy@0
|
958 bonzo.aug = function (o, target) {
|
gyorgy@0
|
959 for (var k in o) {
|
gyorgy@0
|
960 o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]);
|
gyorgy@0
|
961 }
|
gyorgy@0
|
962 };
|
gyorgy@0
|
963
|
gyorgy@0
|
964 bonzo.create = function (node) {
|
gyorgy@0
|
965 return typeof node == 'string' ?
|
gyorgy@0
|
966 function () {
|
gyorgy@0
|
967 var tag = /^<([^\s>]+)/.exec(node);
|
gyorgy@0
|
968 var el = doc.createElement(tag && tagMap[tag[1].toLowerCase()] || 'div'), els = [];
|
gyorgy@0
|
969 el.innerHTML = node;
|
gyorgy@0
|
970 var nodes = el.childNodes;
|
gyorgy@0
|
971 el = el.firstChild;
|
gyorgy@0
|
972 els.push(el);
|
gyorgy@0
|
973 while (el = el.nextSibling) {
|
gyorgy@0
|
974 (el.nodeType == 1) && els.push(el);
|
gyorgy@0
|
975 }
|
gyorgy@0
|
976 return els;
|
gyorgy@0
|
977
|
gyorgy@0
|
978 }() : is(node) ? [node.cloneNode(true)] : [];
|
gyorgy@0
|
979 };
|
gyorgy@0
|
980
|
gyorgy@0
|
981 bonzo.doc = function () {
|
gyorgy@0
|
982 var w = html.scrollWidth,
|
gyorgy@0
|
983 h = html.scrollHeight,
|
gyorgy@0
|
984 vp = this.viewport();
|
gyorgy@0
|
985 return {
|
gyorgy@0
|
986 width: Math.max(w, vp.width),
|
gyorgy@0
|
987 height: Math.max(h, vp.height)
|
gyorgy@0
|
988 };
|
gyorgy@0
|
989 };
|
gyorgy@0
|
990
|
gyorgy@0
|
991 bonzo.firstChild = function (el) {
|
gyorgy@0
|
992 for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) {
|
gyorgy@0
|
993 if (c[i].nodeType === 1) {
|
gyorgy@0
|
994 e = c[j = i];
|
gyorgy@0
|
995 }
|
gyorgy@0
|
996 }
|
gyorgy@0
|
997 return e;
|
gyorgy@0
|
998 };
|
gyorgy@0
|
999
|
gyorgy@0
|
1000 bonzo.viewport = function () {
|
gyorgy@0
|
1001 var h = self.innerHeight,
|
gyorgy@0
|
1002 w = self.innerWidth;
|
gyorgy@0
|
1003 if (ie) {
|
gyorgy@0
|
1004 h = html.clientHeight;
|
gyorgy@0
|
1005 w = html.clientWidth;
|
gyorgy@0
|
1006 }
|
gyorgy@0
|
1007 return {
|
gyorgy@0
|
1008 width: w,
|
gyorgy@0
|
1009 height: h
|
gyorgy@0
|
1010 };
|
gyorgy@0
|
1011 };
|
gyorgy@0
|
1012
|
gyorgy@0
|
1013 bonzo.isAncestor = 'compareDocumentPosition' in html ?
|
gyorgy@0
|
1014 function (container, element) {
|
gyorgy@0
|
1015 return (container.compareDocumentPosition(element) & 16) == 16;
|
gyorgy@0
|
1016 } : 'contains' in html ?
|
gyorgy@0
|
1017 function (container, element) {
|
gyorgy@0
|
1018 return container !== element && container.contains(element);
|
gyorgy@0
|
1019 } :
|
gyorgy@0
|
1020 function (container, element) {
|
gyorgy@0
|
1021 while (element = element[parentNode]) {
|
gyorgy@0
|
1022 if (element === container) {
|
gyorgy@0
|
1023 return true;
|
gyorgy@0
|
1024 }
|
gyorgy@0
|
1025 }
|
gyorgy@0
|
1026 return false;
|
gyorgy@0
|
1027 };
|
gyorgy@0
|
1028
|
gyorgy@0
|
1029 var old = context.bonzo;
|
gyorgy@0
|
1030 bonzo.noConflict = function () {
|
gyorgy@0
|
1031 context.bonzo = old;
|
gyorgy@0
|
1032 return this;
|
gyorgy@0
|
1033 };
|
gyorgy@0
|
1034 context['bonzo'] = bonzo;
|
gyorgy@0
|
1035
|
gyorgy@0
|
1036 }(this, window);!function ($) {
|
gyorgy@0
|
1037
|
gyorgy@0
|
1038 var b = bonzo;
|
gyorgy@0
|
1039 b.setQueryEngine($);
|
gyorgy@0
|
1040 $.ender(b);
|
gyorgy@0
|
1041 $.ender(b(), true);
|
gyorgy@0
|
1042 $.ender({
|
gyorgy@0
|
1043 create: function (node) {
|
gyorgy@0
|
1044 return $(b.create(node));
|
gyorgy@0
|
1045 }
|
gyorgy@0
|
1046 });
|
gyorgy@0
|
1047
|
gyorgy@0
|
1048 $.id = function (id) {
|
gyorgy@0
|
1049 return $([document.getElementById(id)]);
|
gyorgy@0
|
1050 };
|
gyorgy@0
|
1051
|
gyorgy@0
|
1052 function indexOf(ar, val) {
|
gyorgy@0
|
1053 for (var i = 0; i < ar.length; i++) {
|
gyorgy@0
|
1054 if (ar[i] === val) {
|
gyorgy@0
|
1055 return i;
|
gyorgy@0
|
1056 }
|
gyorgy@0
|
1057 }
|
gyorgy@0
|
1058 return -1;
|
gyorgy@0
|
1059 }
|
gyorgy@0
|
1060
|
gyorgy@0
|
1061 function uniq(ar) {
|
gyorgy@0
|
1062 var a = [], i, j;
|
gyorgy@0
|
1063 label:
|
gyorgy@0
|
1064 for (i = 0; i < ar.length; i++) {
|
gyorgy@0
|
1065 for (j = 0; j < a.length; j++) {
|
gyorgy@0
|
1066 if (a[j] == ar[i]) {
|
gyorgy@0
|
1067 continue label;
|
gyorgy@0
|
1068 }
|
gyorgy@0
|
1069 }
|
gyorgy@0
|
1070 a[a.length] = ar[i];
|
gyorgy@0
|
1071 }
|
gyorgy@0
|
1072 return a;
|
gyorgy@0
|
1073 }
|
gyorgy@0
|
1074
|
gyorgy@0
|
1075 $.ender({
|
gyorgy@0
|
1076 parents: function (selector, closest) {
|
gyorgy@0
|
1077 var collection = $(selector), j, k, p, r = [];
|
gyorgy@0
|
1078 for (j = 0, k = this.length; j < k; j++) {
|
gyorgy@0
|
1079 p = this[j];
|
gyorgy@0
|
1080 while (p = p.parentNode) {
|
gyorgy@0
|
1081 if (indexOf(collection, p) !== -1) {
|
gyorgy@0
|
1082 r.push(p);
|
gyorgy@0
|
1083 if (closest) break;
|
gyorgy@0
|
1084 }
|
gyorgy@0
|
1085 }
|
gyorgy@0
|
1086 }
|
gyorgy@0
|
1087 return $(uniq(r));
|
gyorgy@0
|
1088 },
|
gyorgy@0
|
1089
|
gyorgy@0
|
1090 closest: function (selector) {
|
gyorgy@0
|
1091 return this.parents(selector, true);
|
gyorgy@0
|
1092 },
|
gyorgy@0
|
1093
|
gyorgy@0
|
1094 first: function () {
|
gyorgy@0
|
1095 return $(this[0]);
|
gyorgy@0
|
1096 },
|
gyorgy@0
|
1097
|
gyorgy@0
|
1098 last: function () {
|
gyorgy@0
|
1099 return $(this[this.length - 1]);
|
gyorgy@0
|
1100 },
|
gyorgy@0
|
1101
|
gyorgy@0
|
1102 next: function () {
|
gyorgy@0
|
1103 return $(b(this).next());
|
gyorgy@0
|
1104 },
|
gyorgy@0
|
1105
|
gyorgy@0
|
1106 previous: function () {
|
gyorgy@0
|
1107 return $(b(this).previous());
|
gyorgy@0
|
1108 },
|
gyorgy@0
|
1109
|
gyorgy@0
|
1110 appendTo: function (t) {
|
gyorgy@0
|
1111 return b(this.selector).appendTo(t, this);
|
gyorgy@0
|
1112 },
|
gyorgy@0
|
1113
|
gyorgy@0
|
1114 prependTo: function (t) {
|
gyorgy@0
|
1115 return b(this.selector).prependTo(t, this);
|
gyorgy@0
|
1116 },
|
gyorgy@0
|
1117
|
gyorgy@0
|
1118 insertAfter: function (t) {
|
gyorgy@0
|
1119 return b(this.selector).insertAfter(t, this);
|
gyorgy@0
|
1120 },
|
gyorgy@0
|
1121
|
gyorgy@0
|
1122 insertBefore: function (t) {
|
gyorgy@0
|
1123 return b(this.selector).insertBefore(t, this);
|
gyorgy@0
|
1124 },
|
gyorgy@0
|
1125
|
gyorgy@0
|
1126 siblings: function () {
|
gyorgy@0
|
1127 var i, l, p, r = [];
|
gyorgy@0
|
1128 for (i = 0, l = this.length; i < l; i++) {
|
gyorgy@0
|
1129 p = this[i];
|
gyorgy@0
|
1130 while (p = p.previousSibling) {
|
gyorgy@0
|
1131 p.nodeType == 1 && r.push(p);
|
gyorgy@0
|
1132 }
|
gyorgy@0
|
1133 p = this[i];
|
gyorgy@0
|
1134 while (p = p.nextSibling) {
|
gyorgy@0
|
1135 p.nodeType == 1 && r.push(p);
|
gyorgy@0
|
1136 }
|
gyorgy@0
|
1137 }
|
gyorgy@0
|
1138 return $(r);
|
gyorgy@0
|
1139 },
|
gyorgy@0
|
1140
|
gyorgy@0
|
1141 children: function () {
|
gyorgy@0
|
1142 var i, el, r = [];
|
gyorgy@0
|
1143 for (i = 0, l = this.length; i < l; i++) {
|
gyorgy@0
|
1144 if (!(el = b.firstChild(this[i]))) {
|
gyorgy@0
|
1145 continue;
|
gyorgy@0
|
1146 }
|
gyorgy@0
|
1147 r.push(el);
|
gyorgy@0
|
1148 while (el = el.nextSibling) {
|
gyorgy@0
|
1149 el.nodeType == 1 && r.push(el);
|
gyorgy@0
|
1150 }
|
gyorgy@0
|
1151 }
|
gyorgy@0
|
1152 return $(uniq(r));
|
gyorgy@0
|
1153 },
|
gyorgy@0
|
1154
|
gyorgy@0
|
1155 height: function (v) {
|
gyorgy@0
|
1156 return dimension(v, this, 'height')
|
gyorgy@0
|
1157 },
|
gyorgy@0
|
1158
|
gyorgy@0
|
1159 width: function (v) {
|
gyorgy@0
|
1160 return dimension(v, this, 'width')
|
gyorgy@0
|
1161 }
|
gyorgy@0
|
1162 }, true);
|
gyorgy@0
|
1163
|
gyorgy@0
|
1164 function dimension(v, self, which) {
|
gyorgy@0
|
1165 return v ?
|
gyorgy@0
|
1166 self.css(which, v) :
|
gyorgy@0
|
1167 function (r) {
|
gyorgy@0
|
1168 r = parseInt(self.css(which), 10);
|
gyorgy@0
|
1169 return isNaN(r) ? self[0]['offset' + which.replace(/^\w/, function (m) {return m.toUpperCase()})] : r
|
gyorgy@0
|
1170 }()
|
gyorgy@0
|
1171 }
|
gyorgy@0
|
1172
|
gyorgy@0
|
1173 }(ender || $);
|
gyorgy@0
|
1174
|
gyorgy@0
|
1175 !function (context, doc) {
|
gyorgy@0
|
1176 var fns = [], ol, fn, f = false,
|
gyorgy@0
|
1177 testEl = doc.documentElement,
|
gyorgy@0
|
1178 hack = testEl.doScroll,
|
gyorgy@0
|
1179 domContentLoaded = 'DOMContentLoaded',
|
gyorgy@0
|
1180 addEventListener = 'addEventListener',
|
gyorgy@0
|
1181 onreadystatechange = 'onreadystatechange',
|
gyorgy@0
|
1182 loaded = /^loade|c/.test(doc.readyState);
|
gyorgy@0
|
1183
|
gyorgy@0
|
1184 function flush(i) {
|
gyorgy@0
|
1185 loaded = 1;
|
gyorgy@0
|
1186 while (i = fns.shift()) { i() }
|
gyorgy@0
|
1187 }
|
gyorgy@0
|
1188 doc[addEventListener] && doc[addEventListener](domContentLoaded, fn = function () {
|
gyorgy@0
|
1189 doc.removeEventListener(domContentLoaded, fn, f);
|
gyorgy@0
|
1190 flush();
|
gyorgy@0
|
1191 }, f);
|
gyorgy@0
|
1192
|
gyorgy@0
|
1193
|
gyorgy@0
|
1194 hack && doc.attachEvent(onreadystatechange, (ol = function () {
|
gyorgy@0
|
1195 if (/^c/.test(doc.readyState)) {
|
gyorgy@0
|
1196 doc.detachEvent(onreadystatechange, ol);
|
gyorgy@0
|
1197 flush();
|
gyorgy@0
|
1198 }
|
gyorgy@0
|
1199 }));
|
gyorgy@0
|
1200
|
gyorgy@0
|
1201 context['domReady'] = hack ?
|
gyorgy@0
|
1202 function (fn) {
|
gyorgy@0
|
1203 self != top ?
|
gyorgy@0
|
1204 loaded ? fn() : fns.push(fn) :
|
gyorgy@0
|
1205 function () {
|
gyorgy@0
|
1206 try {
|
gyorgy@0
|
1207 testEl.doScroll('left');
|
gyorgy@0
|
1208 } catch (e) {
|
gyorgy@0
|
1209 return setTimeout(function() { domReady(fn) }, 50);
|
gyorgy@0
|
1210 }
|
gyorgy@0
|
1211 fn();
|
gyorgy@0
|
1212 }()
|
gyorgy@0
|
1213 } :
|
gyorgy@0
|
1214 function (fn) {
|
gyorgy@0
|
1215 loaded ? fn() : fns.push(fn);
|
gyorgy@0
|
1216 };
|
gyorgy@0
|
1217
|
gyorgy@0
|
1218 }(this, document);!function ($) {
|
gyorgy@0
|
1219 $.ender({domReady: domReady});
|
gyorgy@0
|
1220 $.ender({
|
gyorgy@0
|
1221 ready: function (f) {
|
gyorgy@0
|
1222 domReady(f);
|
gyorgy@0
|
1223 return this;
|
gyorgy@0
|
1224 }
|
gyorgy@0
|
1225 }, true);
|
gyorgy@0
|
1226 }(ender);
|
gyorgy@0
|
1227 /*!
|
gyorgy@0
|
1228 * Qwery - A Blazing Fast query selector engine
|
gyorgy@0
|
1229 * https://github.com/ded/qwery
|
gyorgy@0
|
1230 * copyright Dustin Diaz & Jacob Thornton 2011
|
gyorgy@0
|
1231 * MIT License
|
gyorgy@0
|
1232 */
|
gyorgy@0
|
1233
|
gyorgy@0
|
1234 !function (context, doc) {
|
gyorgy@0
|
1235
|
gyorgy@0
|
1236 var c, i, j, k, l, m, o, p, r, v,
|
gyorgy@0
|
1237 el, node, len, found, classes, item, items, token,
|
gyorgy@0
|
1238 html = doc.documentElement,
|
gyorgy@0
|
1239 id = /#([\w\-]+)/,
|
gyorgy@0
|
1240 clas = /\.[\w\-]+/g,
|
gyorgy@0
|
1241 idOnly = /^#([\w\-]+$)/,
|
gyorgy@0
|
1242 classOnly = /^\.([\w\-]+)$/,
|
gyorgy@0
|
1243 tagOnly = /^([\w\-]+)$/,
|
gyorgy@0
|
1244 tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/,
|
gyorgy@0
|
1245 normalizr = /\s*([\s\+\~>])\s*/g,
|
gyorgy@0
|
1246 splitters = /[\s\>\+\~]/,
|
gyorgy@0
|
1247 splittersMore = /(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,
|
gyorgy@0
|
1248 dividers = new RegExp('(' + splitters.source + ')' + splittersMore.source, 'g'),
|
gyorgy@0
|
1249 tokenizr = new RegExp(splitters.source + splittersMore.source),
|
gyorgy@0
|
1250 specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g,
|
gyorgy@0
|
1251 simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,
|
gyorgy@0
|
1252 attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,
|
gyorgy@0
|
1253 pseudo = /:([\w\-]+)(\(['"]?(\w+)['"]?\))?/,
|
gyorgy@0
|
1254 chunker = new RegExp(simple.source + '(' + attr.source + ')?' + '(' + pseudo.source + ')?'),
|
gyorgy@0
|
1255 walker = {
|
gyorgy@0
|
1256 ' ': function (node) {
|
gyorgy@0
|
1257 return node && node !== html && node.parentNode
|
gyorgy@0
|
1258 },
|
gyorgy@0
|
1259 '>': function (node, contestant) {
|
gyorgy@0
|
1260 return node && node.parentNode == contestant.parentNode && node.parentNode;
|
gyorgy@0
|
1261 },
|
gyorgy@0
|
1262 '~': function (node) {
|
gyorgy@0
|
1263 return node && node.previousSibling;
|
gyorgy@0
|
1264 },
|
gyorgy@0
|
1265 '+': function (node, contestant, p1, p2) {
|
gyorgy@0
|
1266 if (!node) {
|
gyorgy@0
|
1267 return false;
|
gyorgy@0
|
1268 }
|
gyorgy@0
|
1269 p1 = previous(node);
|
gyorgy@0
|
1270 p2 = previous(contestant);
|
gyorgy@0
|
1271 return p1 && p2 && p1 == p2 && p1;
|
gyorgy@0
|
1272 }
|
gyorgy@0
|
1273 };
|
gyorgy@0
|
1274 window.tokenizr = tokenizr;
|
gyorgy@0
|
1275 window.dividers = dividers;
|
gyorgy@0
|
1276 function cache() {
|
gyorgy@0
|
1277 this.c = {};
|
gyorgy@0
|
1278 }
|
gyorgy@0
|
1279 cache.prototype = {
|
gyorgy@0
|
1280 g: function (k) {
|
gyorgy@0
|
1281 return this.c[k] || undefined;
|
gyorgy@0
|
1282 },
|
gyorgy@0
|
1283 s: function (k, v) {
|
gyorgy@0
|
1284 this.c[k] = v;
|
gyorgy@0
|
1285 return v;
|
gyorgy@0
|
1286 }
|
gyorgy@0
|
1287 };
|
gyorgy@0
|
1288
|
gyorgy@0
|
1289 var classCache = new cache(),
|
gyorgy@0
|
1290 cleanCache = new cache(),
|
gyorgy@0
|
1291 attrCache = new cache(),
|
gyorgy@0
|
1292 tokenCache = new cache();
|
gyorgy@0
|
1293
|
gyorgy@0
|
1294 function array(ar) {
|
gyorgy@0
|
1295 r = [];
|
gyorgy@0
|
1296 for (i = 0, len = ar.length; i < len; i++) {
|
gyorgy@0
|
1297 r[i] = ar[i];
|
gyorgy@0
|
1298 }
|
gyorgy@0
|
1299 return r;
|
gyorgy@0
|
1300 }
|
gyorgy@0
|
1301
|
gyorgy@0
|
1302 function previous(n) {
|
gyorgy@0
|
1303 while (n = n.previousSibling) {
|
gyorgy@0
|
1304 if (n.nodeType == 1) {
|
gyorgy@0
|
1305 break;
|
gyorgy@0
|
1306 }
|
gyorgy@0
|
1307 }
|
gyorgy@0
|
1308 return n
|
gyorgy@0
|
1309 }
|
gyorgy@0
|
1310
|
gyorgy@0
|
1311 function q(query) {
|
gyorgy@0
|
1312 return query.match(chunker);
|
gyorgy@0
|
1313 }
|
gyorgy@0
|
1314
|
gyorgy@0
|
1315 // this next method expect at most these args
|
gyorgy@0
|
1316 // given => div.hello[title="world"]:foo('bar')
|
gyorgy@0
|
1317
|
gyorgy@0
|
1318 // div.hello[title="world"]:foo('bar'), div, .hello, [title="world"], title, =, world, :foo('bar'), foo, ('bar'), bar]
|
gyorgy@0
|
1319
|
gyorgy@0
|
1320 function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value, wholePseudo, pseudo, wholePseudoVal, pseudoVal) {
|
gyorgy@0
|
1321 var m, c, k;
|
gyorgy@0
|
1322 if (tag && this.tagName.toLowerCase() !== tag) {
|
gyorgy@0
|
1323 return false;
|
gyorgy@0
|
1324 }
|
gyorgy@0
|
1325 if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) {
|
gyorgy@0
|
1326 return false;
|
gyorgy@0
|
1327 }
|
gyorgy@0
|
1328 if (idsAndClasses && (classes = idsAndClasses.match(clas))) {
|
gyorgy@0
|
1329 for (i = classes.length; i--;) {
|
gyorgy@0
|
1330 c = classes[i].slice(1);
|
gyorgy@0
|
1331 if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) {
|
gyorgy@0
|
1332 return false;
|
gyorgy@0
|
1333 }
|
gyorgy@0
|
1334 }
|
gyorgy@0
|
1335 }
|
gyorgy@0
|
1336 if (pseudo && qwery.pseudos[pseudo] && !qwery.pseudos[pseudo](this, pseudoVal)) {
|
gyorgy@0
|
1337 return false;
|
gyorgy@0
|
1338 }
|
gyorgy@0
|
1339 if (wholeAttribute && !value) {
|
gyorgy@0
|
1340 o = this.attributes;
|
gyorgy@0
|
1341 for (k in o) {
|
gyorgy@0
|
1342 if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) {
|
gyorgy@0
|
1343 return this;
|
gyorgy@0
|
1344 }
|
gyorgy@0
|
1345 }
|
gyorgy@0
|
1346 }
|
gyorgy@0
|
1347 if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) {
|
gyorgy@0
|
1348 return false;
|
gyorgy@0
|
1349 }
|
gyorgy@0
|
1350 return this;
|
gyorgy@0
|
1351 }
|
gyorgy@0
|
1352
|
gyorgy@0
|
1353 function clean(s) {
|
gyorgy@0
|
1354 return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1'));
|
gyorgy@0
|
1355 }
|
gyorgy@0
|
1356
|
gyorgy@0
|
1357 function checkAttr(qualify, actual, val) {
|
gyorgy@0
|
1358 switch (qualify) {
|
gyorgy@0
|
1359 case '=':
|
gyorgy@0
|
1360 return actual == val;
|
gyorgy@0
|
1361 case '^=':
|
gyorgy@0
|
1362 return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val))));
|
gyorgy@0
|
1363 case '$=':
|
gyorgy@0
|
1364 return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$')));
|
gyorgy@0
|
1365 case '*=':
|
gyorgy@0
|
1366 return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val))));
|
gyorgy@0
|
1367 case '~=':
|
gyorgy@0
|
1368 return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)')));
|
gyorgy@0
|
1369 case '|=':
|
gyorgy@0
|
1370 return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)')));
|
gyorgy@0
|
1371 }
|
gyorgy@0
|
1372 return 0;
|
gyorgy@0
|
1373 }
|
gyorgy@0
|
1374
|
gyorgy@0
|
1375 function _qwery(selector) {
|
gyorgy@0
|
1376 var r = [], ret = [], i, j = 0, k, l, m, p, token, tag, els, root, intr, item, children,
|
gyorgy@0
|
1377 tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr)),
|
gyorgy@0
|
1378 dividedTokens = selector.match(dividers), dividedToken;
|
gyorgy@0
|
1379 tokens = tokens.slice(0); // this makes a copy of the array so the cached original is not effected
|
gyorgy@0
|
1380 if (!tokens.length) {
|
gyorgy@0
|
1381 return r;
|
gyorgy@0
|
1382 }
|
gyorgy@0
|
1383
|
gyorgy@0
|
1384 token = tokens.pop();
|
gyorgy@0
|
1385 root = tokens.length && (m = tokens[tokens.length - 1].match(idOnly)) ? doc.getElementById(m[1]) : doc;
|
gyorgy@0
|
1386 if (!root) {
|
gyorgy@0
|
1387 return r;
|
gyorgy@0
|
1388 }
|
gyorgy@0
|
1389 intr = q(token);
|
gyorgy@0
|
1390 els = dividedTokens && /^[+~]$/.test(dividedTokens[dividedTokens.length - 1]) ? function (r) {
|
gyorgy@0
|
1391 while (root = root.nextSibling) {
|
gyorgy@0
|
1392 root.nodeType == 1 && (intr[1] ? intr[1] == root.tagName.toLowerCase() : 1) && r.push(root)
|
gyorgy@0
|
1393 }
|
gyorgy@0
|
1394 return r
|
gyorgy@0
|
1395 }([]) :
|
gyorgy@0
|
1396 root.getElementsByTagName(intr[1] || '*');
|
gyorgy@0
|
1397 for (i = 0, l = els.length; i < l; i++) {
|
gyorgy@0
|
1398 if (item = interpret.apply(els[i], intr)) {
|
gyorgy@0
|
1399 r[j++] = item;
|
gyorgy@0
|
1400 }
|
gyorgy@0
|
1401 }
|
gyorgy@0
|
1402 if (!tokens.length) {
|
gyorgy@0
|
1403 return r;
|
gyorgy@0
|
1404 }
|
gyorgy@0
|
1405
|
gyorgy@0
|
1406 // loop through all descendent tokens
|
gyorgy@0
|
1407 for (j = 0, l = r.length, k = 0; j < l; j++) {
|
gyorgy@0
|
1408 p = r[j];
|
gyorgy@0
|
1409 // loop through each token backwards crawling up tree
|
gyorgy@0
|
1410 for (i = tokens.length; i--;) {
|
gyorgy@0
|
1411 // loop through parent nodes
|
gyorgy@0
|
1412 while (p = walker[dividedTokens[i]](p, r[j])) {
|
gyorgy@0
|
1413 if (found = interpret.apply(p, q(tokens[i]))) {
|
gyorgy@0
|
1414 break;
|
gyorgy@0
|
1415 }
|
gyorgy@0
|
1416 }
|
gyorgy@0
|
1417 }
|
gyorgy@0
|
1418 found && (ret[k++] = r[j]);
|
gyorgy@0
|
1419 }
|
gyorgy@0
|
1420 return ret;
|
gyorgy@0
|
1421 }
|
gyorgy@0
|
1422
|
gyorgy@0
|
1423 function boilerPlate(selector, _root, fn) {
|
gyorgy@0
|
1424 var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc);
|
gyorgy@0
|
1425 if (selector === window || isNode(selector)) {
|
gyorgy@0
|
1426 return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : [];
|
gyorgy@0
|
1427 }
|
gyorgy@0
|
1428 if (selector && typeof selector === 'object' && isFinite(selector.length)) {
|
gyorgy@0
|
1429 return array(selector);
|
gyorgy@0
|
1430 }
|
gyorgy@0
|
1431 if (m = selector.match(idOnly)) {
|
gyorgy@0
|
1432 return (el = doc.getElementById(m[1])) ? [el] : [];
|
gyorgy@0
|
1433 }
|
gyorgy@0
|
1434 if (m = selector.match(tagOnly)) {
|
gyorgy@0
|
1435 return array(root.getElementsByTagName(m[1]));
|
gyorgy@0
|
1436 }
|
gyorgy@0
|
1437 return false;
|
gyorgy@0
|
1438 }
|
gyorgy@0
|
1439
|
gyorgy@0
|
1440 function isNode(el) {
|
gyorgy@0
|
1441 return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9));
|
gyorgy@0
|
1442 }
|
gyorgy@0
|
1443
|
gyorgy@0
|
1444 function uniq(ar) {
|
gyorgy@0
|
1445 var a = [], i, j;
|
gyorgy@0
|
1446 label:
|
gyorgy@0
|
1447 for (i = 0; i < ar.length; i++) {
|
gyorgy@0
|
1448 for (j = 0; j < a.length; j++) {
|
gyorgy@0
|
1449 if (a[j] == ar[i]) {
|
gyorgy@0
|
1450 continue label;
|
gyorgy@0
|
1451 }
|
gyorgy@0
|
1452 }
|
gyorgy@0
|
1453 a[a.length] = ar[i];
|
gyorgy@0
|
1454 }
|
gyorgy@0
|
1455 return a;
|
gyorgy@0
|
1456 }
|
gyorgy@0
|
1457
|
gyorgy@0
|
1458 function qwery(selector, _root) {
|
gyorgy@0
|
1459 var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc);
|
gyorgy@0
|
1460 if (!root || !selector) {
|
gyorgy@0
|
1461 return [];
|
gyorgy@0
|
1462 }
|
gyorgy@0
|
1463 if (m = boilerPlate(selector, _root, qwery)) {
|
gyorgy@0
|
1464 return m;
|
gyorgy@0
|
1465 }
|
gyorgy@0
|
1466 return select(selector, root);
|
gyorgy@0
|
1467 }
|
gyorgy@0
|
1468
|
gyorgy@0
|
1469 var isAncestor = 'compareDocumentPosition' in html ?
|
gyorgy@0
|
1470 function (element, container) {
|
gyorgy@0
|
1471 return (container.compareDocumentPosition(element) & 16) == 16;
|
gyorgy@0
|
1472 } : 'contains' in html ?
|
gyorgy@0
|
1473 function (element, container) {
|
gyorgy@0
|
1474 container = container == doc || container == window ? html : container;
|
gyorgy@0
|
1475 return container !== element && container.contains(element);
|
gyorgy@0
|
1476 } :
|
gyorgy@0
|
1477 function (element, container) {
|
gyorgy@0
|
1478 while (element = element.parentNode) {
|
gyorgy@0
|
1479 if (element === container) {
|
gyorgy@0
|
1480 return 1;
|
gyorgy@0
|
1481 }
|
gyorgy@0
|
1482 }
|
gyorgy@0
|
1483 return 0;
|
gyorgy@0
|
1484 },
|
gyorgy@0
|
1485
|
gyorgy@0
|
1486 select = (doc.querySelector && doc.querySelectorAll) ?
|
gyorgy@0
|
1487 function (selector, root) {
|
gyorgy@0
|
1488 if (doc.getElementsByClassName && (m = selector.match(classOnly))) {
|
gyorgy@0
|
1489 return array((root).getElementsByClassName(m[1]));
|
gyorgy@0
|
1490 }
|
gyorgy@0
|
1491 return array((root).querySelectorAll(selector));
|
gyorgy@0
|
1492 } :
|
gyorgy@0
|
1493 function (selector, root) {
|
gyorgy@0
|
1494 selector = selector.replace(normalizr, '$1');
|
gyorgy@0
|
1495 var result = [], collection, collections = [], i;
|
gyorgy@0
|
1496 if (m = selector.match(tagAndOrClass)) {
|
gyorgy@0
|
1497 items = root.getElementsByTagName(m[1] || '*');
|
gyorgy@0
|
1498 r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)'));
|
gyorgy@0
|
1499 for (i = 0, l = items.length, j = 0; i < l; i++) {
|
gyorgy@0
|
1500 r.test(items[i].className) && (result[j++] = items[i]);
|
gyorgy@0
|
1501 }
|
gyorgy@0
|
1502 return result;
|
gyorgy@0
|
1503 }
|
gyorgy@0
|
1504 for (i = 0, items = selector.split(','), l = items.length; i < l; i++) {
|
gyorgy@0
|
1505 collections[i] = _qwery(items[i]);
|
gyorgy@0
|
1506 }
|
gyorgy@0
|
1507 for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) {
|
gyorgy@0
|
1508 var ret = collection;
|
gyorgy@0
|
1509 if (root !== doc) {
|
gyorgy@0
|
1510 ret = [];
|
gyorgy@0
|
1511 for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) {
|
gyorgy@0
|
1512 // make sure element is a descendent of root
|
gyorgy@0
|
1513 isAncestor(element, root) && ret.push(element);
|
gyorgy@0
|
1514 }
|
gyorgy@0
|
1515 }
|
gyorgy@0
|
1516 result = result.concat(ret);
|
gyorgy@0
|
1517 }
|
gyorgy@0
|
1518 return uniq(result);
|
gyorgy@0
|
1519 };
|
gyorgy@0
|
1520
|
gyorgy@0
|
1521 qwery.uniq = uniq;
|
gyorgy@0
|
1522 qwery.pseudos = {};
|
gyorgy@0
|
1523
|
gyorgy@0
|
1524 var oldQwery = context.qwery;
|
gyorgy@0
|
1525 qwery.noConflict = function () {
|
gyorgy@0
|
1526 context.qwery = oldQwery;
|
gyorgy@0
|
1527 return this;
|
gyorgy@0
|
1528 };
|
gyorgy@0
|
1529 context['qwery'] = qwery;
|
gyorgy@0
|
1530
|
gyorgy@0
|
1531 }(this, document);!function (doc) {
|
gyorgy@0
|
1532 var q = qwery.noConflict();
|
gyorgy@0
|
1533 var table = 'table',
|
gyorgy@0
|
1534 nodeMap = {
|
gyorgy@0
|
1535 thead: table,
|
gyorgy@0
|
1536 tbody: table,
|
gyorgy@0
|
1537 tfoot: table,
|
gyorgy@0
|
1538 tr: 'tbody',
|
gyorgy@0
|
1539 th: 'tr',
|
gyorgy@0
|
1540 td: 'tr',
|
gyorgy@0
|
1541 fieldset: 'form',
|
gyorgy@0
|
1542 option: 'select'
|
gyorgy@0
|
1543 }
|
gyorgy@0
|
1544 function create(node, root) {
|
gyorgy@0
|
1545 var tag = /^<([^\s>]+)/.exec(node)[1]
|
gyorgy@0
|
1546 var el = (root || doc).createElement(nodeMap[tag] || 'div'), els = [];
|
gyorgy@0
|
1547 el.innerHTML = node;
|
gyorgy@0
|
1548 var nodes = el.childNodes;
|
gyorgy@0
|
1549 el = el.firstChild;
|
gyorgy@0
|
1550 els.push(el);
|
gyorgy@0
|
1551 while (el = el.nextSibling) {
|
gyorgy@0
|
1552 (el.nodeType == 1) && els.push(el);
|
gyorgy@0
|
1553 }
|
gyorgy@0
|
1554 return els;
|
gyorgy@0
|
1555 }
|
gyorgy@0
|
1556 $._select = function (s, r) {
|
gyorgy@0
|
1557 return /^\s*</.test(s) ? create(s, r) : q(s, r);
|
gyorgy@0
|
1558 };
|
gyorgy@0
|
1559 $.ender({
|
gyorgy@0
|
1560 find: function (s) {
|
gyorgy@0
|
1561 var r = [], i, l, j, k, els;
|
gyorgy@0
|
1562 for (i = 0, l = this.length; i < l; i++) {
|
gyorgy@0
|
1563 els = q(s, this[i]);
|
gyorgy@0
|
1564 for (j = 0, k = els.length; j < k; j++) {
|
gyorgy@0
|
1565 r.push(els[j]);
|
gyorgy@0
|
1566 }
|
gyorgy@0
|
1567 }
|
gyorgy@0
|
1568 return $(q.uniq(r));
|
gyorgy@0
|
1569 }
|
gyorgy@0
|
1570 , and: function (s) {
|
gyorgy@0
|
1571 var plus = $(s);
|
gyorgy@0
|
1572 for (var i = this.length, j = 0, l = this.length + plus.length; i < l; i++, j++) {
|
gyorgy@0
|
1573 this[i] = plus[j];
|
gyorgy@0
|
1574 }
|
gyorgy@0
|
1575 return this;
|
gyorgy@0
|
1576 }
|
gyorgy@0
|
1577 }, true);
|
gyorgy@0
|
1578 }(document);
|