annotate johndyer-mediaelement-13fa20a/src/js/jeesh.js @ 25:4a4bd554b4c1 tip

Closing this sub branch.
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Mon, 25 Mar 2013 14:02:54 +0000
parents 032bc65ebafc
children
rev   line source
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);