gyorgy@0: /*! gyorgy@0: * Ender: open module JavaScript framework gyorgy@0: * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat) gyorgy@0: * https://ender.no.de gyorgy@0: * License MIT gyorgy@0: * Build: ender build jeesh --output jeesh gyorgy@0: */ gyorgy@0: !function (context) { gyorgy@0: gyorgy@0: function aug(o, o2) { gyorgy@0: for (var k in o2) { gyorgy@0: k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]); gyorgy@0: } gyorgy@0: return o; gyorgy@0: } gyorgy@0: gyorgy@0: function boosh(s, r, els) { gyorgy@0: // string || node || nodelist || window gyorgy@0: if (ender._select && (typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window)) { gyorgy@0: els = ender._select(s, r); gyorgy@0: els.selector = s; gyorgy@0: } else { gyorgy@0: els = isFinite(s.length) ? s : [s]; gyorgy@0: } gyorgy@0: return aug(els, boosh); gyorgy@0: } gyorgy@0: gyorgy@0: function ender(s, r) { gyorgy@0: return boosh(s, r); gyorgy@0: } gyorgy@0: gyorgy@0: aug(ender, { gyorgy@0: _VERSION: '0.2.4', gyorgy@0: ender: function (o, chain) { gyorgy@0: aug(chain ? boosh : ender, o); gyorgy@0: }, gyorgy@0: fn: context.$ && context.$.fn || {} // for easy compat to jQuery plugins gyorgy@0: }); gyorgy@0: gyorgy@0: aug(boosh, { gyorgy@0: forEach: function (fn, scope, i) { gyorgy@0: // opt out of native forEach so we can intentionally call our own scope gyorgy@0: // defaulting to the current item and be able to return self gyorgy@0: for (i = 0, l = this.length; i < l; ++i) { gyorgy@0: i in this && fn.call(scope || this[i], this[i], i, this); gyorgy@0: } gyorgy@0: // return self for chaining gyorgy@0: return this; gyorgy@0: }, gyorgy@0: $: ender // handy reference to self gyorgy@0: }); gyorgy@0: gyorgy@0: var old = context.$; gyorgy@0: ender.noConflict = function () { gyorgy@0: context.$ = old; gyorgy@0: return this; gyorgy@0: }; gyorgy@0: gyorgy@0: (typeof module !== 'undefined') && module.exports && (module.exports = ender); gyorgy@0: // use subscript notation as extern for Closure compilation gyorgy@0: context['ender'] = context['$'] = ender; gyorgy@0: gyorgy@0: }(this); gyorgy@0: /*! gyorgy@0: * bean.js - copyright Jacob Thornton 2011 gyorgy@0: * https://github.com/fat/bean gyorgy@0: * MIT License gyorgy@0: * special thanks to: gyorgy@0: * dean edwards: http://dean.edwards.name/ gyorgy@0: * dperini: https://github.com/dperini/nwevents gyorgy@0: * the entire mootools team: github.com/mootools/mootools-core gyorgy@0: */ gyorgy@0: !function (context) { gyorgy@0: var __uid = 1, registry = {}, collected = {}, gyorgy@0: overOut = /over|out/, gyorgy@0: namespace = /[^\.]*(?=\..*)\.|.*/, gyorgy@0: stripName = /\..*/, gyorgy@0: addEvent = 'addEventListener', gyorgy@0: attachEvent = 'attachEvent', gyorgy@0: removeEvent = 'removeEventListener', gyorgy@0: detachEvent = 'detachEvent', gyorgy@0: doc = context.document || {}, gyorgy@0: root = doc.documentElement || {}, gyorgy@0: W3C_MODEL = root[addEvent], gyorgy@0: eventSupport = W3C_MODEL ? addEvent : attachEvent, gyorgy@0: gyorgy@0: isDescendant = function (parent, child) { gyorgy@0: var node = child.parentNode; gyorgy@0: while (node != null) { gyorgy@0: if (node == parent) { gyorgy@0: return true; gyorgy@0: } gyorgy@0: node = node.parentNode; gyorgy@0: } gyorgy@0: }, gyorgy@0: gyorgy@0: retrieveUid = function (obj, uid) { gyorgy@0: return (obj.__uid = uid || obj.__uid || __uid++); gyorgy@0: }, gyorgy@0: gyorgy@0: retrieveEvents = function (element) { gyorgy@0: var uid = retrieveUid(element); gyorgy@0: return (registry[uid] = registry[uid] || {}); gyorgy@0: }, gyorgy@0: gyorgy@0: listener = W3C_MODEL ? function (element, type, fn, add) { gyorgy@0: element[add ? addEvent : removeEvent](type, fn, false); gyorgy@0: } : function (element, type, fn, add, custom) { gyorgy@0: custom && add && (element['_on' + custom] = element['_on' + custom] || 0); gyorgy@0: element[add ? attachEvent : detachEvent]('on' + type, fn); gyorgy@0: }, gyorgy@0: gyorgy@0: nativeHandler = function (element, fn, args) { gyorgy@0: return function (event) { gyorgy@0: event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event); gyorgy@0: return fn.apply(element, [event].concat(args)); gyorgy@0: }; gyorgy@0: }, gyorgy@0: gyorgy@0: customHandler = function (element, fn, type, condition, args) { gyorgy@0: return function (event) { gyorgy@0: if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) { gyorgy@0: fn.apply(element, [event].concat(args)); gyorgy@0: } gyorgy@0: }; gyorgy@0: }, gyorgy@0: gyorgy@0: addListener = function (element, orgType, fn, args) { gyorgy@0: var type = orgType.replace(stripName, ''), gyorgy@0: events = retrieveEvents(element), gyorgy@0: handlers = events[type] || (events[type] = {}), gyorgy@0: uid = retrieveUid(fn, orgType.replace(namespace, '')); gyorgy@0: if (handlers[uid]) { gyorgy@0: return element; gyorgy@0: } gyorgy@0: var custom = customEvents[type]; gyorgy@0: if (custom) { gyorgy@0: fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn; gyorgy@0: type = custom.base || type; gyorgy@0: } gyorgy@0: var isNative = nativeEvents[type]; gyorgy@0: fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args); gyorgy@0: isNative = W3C_MODEL || isNative; gyorgy@0: if (type == 'unload') { gyorgy@0: var org = fn; gyorgy@0: fn = function () { gyorgy@0: removeListener(element, type, fn) && org(); gyorgy@0: }; gyorgy@0: } gyorgy@0: element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type); gyorgy@0: handlers[uid] = fn; gyorgy@0: fn.__uid = uid; gyorgy@0: return type == 'unload' ? element : (collected[retrieveUid(element)] = element); gyorgy@0: }, gyorgy@0: gyorgy@0: removeListener = function (element, orgType, handler) { gyorgy@0: var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, ''); gyorgy@0: if (!events || !events[type]) { gyorgy@0: return element; gyorgy@0: } gyorgy@0: names = orgType.replace(namespace, ''); gyorgy@0: uids = names ? names.split('.') : [handler.__uid]; gyorgy@0: for (i = uids.length; i--;) { gyorgy@0: uid = uids[i]; gyorgy@0: handler = events[type][uid]; gyorgy@0: delete events[type][uid]; gyorgy@0: if (element[eventSupport]) { gyorgy@0: type = customEvents[type] ? customEvents[type].base : type; gyorgy@0: var isNative = W3C_MODEL || nativeEvents[type]; gyorgy@0: listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type); gyorgy@0: } gyorgy@0: } gyorgy@0: return element; gyorgy@0: }, gyorgy@0: gyorgy@0: del = function (selector, fn, $) { gyorgy@0: return function (e) { gyorgy@0: var array = typeof selector == 'string' ? $(selector, this) : selector; gyorgy@0: for (var target = e.target; target && target != this; target = target.parentNode) { gyorgy@0: for (var i = array.length; i--;) { gyorgy@0: if (array[i] == target) { gyorgy@0: return fn.apply(target, arguments); gyorgy@0: } gyorgy@0: } gyorgy@0: } gyorgy@0: }; gyorgy@0: }, gyorgy@0: gyorgy@0: add = function (element, events, fn, delfn, $) { gyorgy@0: if (typeof events == 'object' && !fn) { gyorgy@0: for (var type in events) { gyorgy@0: events.hasOwnProperty(type) && add(element, type, events[type]); gyorgy@0: } gyorgy@0: } else { gyorgy@0: var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' '); gyorgy@0: fn = isDel ? del(events, delfn, $) : fn; gyorgy@0: for (var i = types.length; i--;) { gyorgy@0: addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3)); gyorgy@0: } gyorgy@0: } gyorgy@0: return element; gyorgy@0: }, gyorgy@0: gyorgy@0: remove = function (element, orgEvents, fn) { gyorgy@0: var k, type, events, i, gyorgy@0: isString = typeof(orgEvents) == 'string', gyorgy@0: names = isString && orgEvents.replace(namespace, ''), gyorgy@0: rm = removeListener, gyorgy@0: attached = retrieveEvents(element); gyorgy@0: if (isString && /\s/.test(orgEvents)) { gyorgy@0: orgEvents = orgEvents.split(' '); gyorgy@0: i = orgEvents.length - 1; gyorgy@0: while (remove(element, orgEvents[i]) && i--) {} gyorgy@0: return element; gyorgy@0: } gyorgy@0: events = isString ? orgEvents.replace(stripName, '') : orgEvents; gyorgy@0: if (!attached || (isString && !attached[events])) { gyorgy@0: return element; gyorgy@0: } gyorgy@0: if (typeof fn == 'function') { gyorgy@0: rm(element, events, fn); gyorgy@0: } else if (names) { gyorgy@0: rm(element, orgEvents); gyorgy@0: } else { gyorgy@0: rm = events ? rm : remove; gyorgy@0: type = isString && events; gyorgy@0: events = events ? (fn || attached[events] || events) : attached; gyorgy@0: for (k in events) { gyorgy@0: events.hasOwnProperty(k) && rm(element, type || k, events[k]); gyorgy@0: } gyorgy@0: } gyorgy@0: return element; gyorgy@0: }, gyorgy@0: gyorgy@0: fire = function (element, type, args) { gyorgy@0: var evt, k, i, types = type.split(' '); gyorgy@0: for (i = types.length; i--;) { gyorgy@0: type = types[i].replace(stripName, ''); gyorgy@0: var isNative = nativeEvents[type], gyorgy@0: isNamespace = types[i].replace(namespace, ''), gyorgy@0: handlers = retrieveEvents(element)[type]; gyorgy@0: if (isNamespace) { gyorgy@0: isNamespace = isNamespace.split('.'); gyorgy@0: for (k = isNamespace.length; k--;) { gyorgy@0: handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args); gyorgy@0: } gyorgy@0: } else if (!args && element[eventSupport]) { gyorgy@0: fireListener(isNative, type, element); gyorgy@0: } else { gyorgy@0: for (k in handlers) { gyorgy@0: handlers.hasOwnProperty(k) && handlers[k].apply(element, args); gyorgy@0: } gyorgy@0: } gyorgy@0: } gyorgy@0: return element; gyorgy@0: }, gyorgy@0: gyorgy@0: fireListener = W3C_MODEL ? function (isNative, type, element) { gyorgy@0: evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents"); gyorgy@0: evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1); gyorgy@0: element.dispatchEvent(evt); gyorgy@0: } : function (isNative, type, element) { gyorgy@0: isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++; gyorgy@0: }, gyorgy@0: gyorgy@0: clone = function (element, from, type) { gyorgy@0: var events = retrieveEvents(from), obj, k; gyorgy@0: obj = type ? events[type] : events; gyorgy@0: for (k in obj) { gyorgy@0: obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k); gyorgy@0: } gyorgy@0: return element; gyorgy@0: }, gyorgy@0: gyorgy@0: fixEvent = function (e) { gyorgy@0: var result = {}; gyorgy@0: if (!e) { gyorgy@0: return result; gyorgy@0: } gyorgy@0: var type = e.type, target = e.target || e.srcElement; gyorgy@0: result.preventDefault = fixEvent.preventDefault(e); gyorgy@0: result.stopPropagation = fixEvent.stopPropagation(e); gyorgy@0: result.target = target && target.nodeType == 3 ? target.parentNode : target; gyorgy@0: if (~type.indexOf('key')) { gyorgy@0: result.keyCode = e.which || e.keyCode; gyorgy@0: } else if ((/click|mouse|menu/i).test(type)) { gyorgy@0: result.rightClick = e.which == 3 || e.button == 2; gyorgy@0: result.pos = { x: 0, y: 0 }; gyorgy@0: if (e.pageX || e.pageY) { gyorgy@0: result.clientX = e.pageX; gyorgy@0: result.clientY = e.pageY; gyorgy@0: } else if (e.clientX || e.clientY) { gyorgy@0: result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; gyorgy@0: result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; gyorgy@0: } gyorgy@0: overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']); gyorgy@0: } gyorgy@0: for (var k in e) { gyorgy@0: if (!(k in result)) { gyorgy@0: result[k] = e[k]; gyorgy@0: } gyorgy@0: } gyorgy@0: return result; gyorgy@0: }; gyorgy@0: gyorgy@0: fixEvent.preventDefault = function (e) { gyorgy@0: return function () { gyorgy@0: if (e.preventDefault) { gyorgy@0: e.preventDefault(); gyorgy@0: } gyorgy@0: else { gyorgy@0: e.returnValue = false; gyorgy@0: } gyorgy@0: }; gyorgy@0: }; gyorgy@0: gyorgy@0: fixEvent.stopPropagation = function (e) { gyorgy@0: return function () { gyorgy@0: if (e.stopPropagation) { gyorgy@0: e.stopPropagation(); gyorgy@0: } else { gyorgy@0: e.cancelBubble = true; gyorgy@0: } gyorgy@0: }; gyorgy@0: }; gyorgy@0: gyorgy@0: var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons gyorgy@0: mousewheel: 1, DOMMouseScroll: 1, //mouse wheel gyorgy@0: mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement gyorgy@0: keydown: 1, keypress: 1, keyup: 1, //keyboard gyorgy@0: orientationchange: 1, // mobile gyorgy@0: touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch gyorgy@0: gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture gyorgy@0: focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements gyorgy@0: load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window gyorgy@0: error: 1, abort: 1, scroll: 1 }; //misc gyorgy@0: gyorgy@0: function check(event) { gyorgy@0: var related = event.relatedTarget; gyorgy@0: if (!related) { gyorgy@0: return related == null; gyorgy@0: } gyorgy@0: return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related)); gyorgy@0: } gyorgy@0: gyorgy@0: var customEvents = { gyorgy@0: mouseenter: { base: 'mouseover', condition: check }, gyorgy@0: mouseleave: { base: 'mouseout', condition: check }, gyorgy@0: mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' } gyorgy@0: }; gyorgy@0: gyorgy@0: var bean = { add: add, remove: remove, clone: clone, fire: fire }; gyorgy@0: gyorgy@0: var clean = function (el) { gyorgy@0: var uid = remove(el).__uid; gyorgy@0: if (uid) { gyorgy@0: delete collected[uid]; gyorgy@0: delete registry[uid]; gyorgy@0: } gyorgy@0: }; gyorgy@0: gyorgy@0: if (context[attachEvent]) { gyorgy@0: add(context, 'unload', function () { gyorgy@0: for (var k in collected) { gyorgy@0: collected.hasOwnProperty(k) && clean(collected[k]); gyorgy@0: } gyorgy@0: context.CollectGarbage && CollectGarbage(); gyorgy@0: }); gyorgy@0: } gyorgy@0: gyorgy@0: var oldBean = context.bean; gyorgy@0: bean.noConflict = function () { gyorgy@0: context.bean = oldBean; gyorgy@0: return this; gyorgy@0: }; gyorgy@0: gyorgy@0: (typeof module !== 'undefined' && module.exports) ? gyorgy@0: (module.exports = bean) : gyorgy@0: (context['bean'] = bean); gyorgy@0: gyorgy@0: }(this);!function ($) { gyorgy@0: var b = bean.noConflict(), gyorgy@0: integrate = function (method, type, method2) { gyorgy@0: var _args = type ? [type] : []; gyorgy@0: return function () { gyorgy@0: for (var args, i = 0, l = this.length; i < l; i++) { gyorgy@0: args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0)); gyorgy@0: args.length == 4 && args.push($); gyorgy@0: !arguments.length && method == 'add' && type && (method = 'fire'); gyorgy@0: b[method].apply(this, args); gyorgy@0: } gyorgy@0: return this; gyorgy@0: }; gyorgy@0: }; gyorgy@0: gyorgy@0: var add = integrate('add'), gyorgy@0: remove = integrate('remove'), gyorgy@0: fire = integrate('fire'); gyorgy@0: gyorgy@0: var methods = { gyorgy@0: gyorgy@0: on: add, gyorgy@0: addListener: add, gyorgy@0: bind: add, gyorgy@0: listen: add, gyorgy@0: delegate: add, gyorgy@0: gyorgy@0: unbind: remove, gyorgy@0: unlisten: remove, gyorgy@0: removeListener: remove, gyorgy@0: undelegate: remove, gyorgy@0: gyorgy@0: emit: fire, gyorgy@0: trigger: fire, gyorgy@0: gyorgy@0: cloneEvents: integrate('clone'), gyorgy@0: gyorgy@0: hover: function (enter, leave, i) { // i for internal gyorgy@0: for (i = this.length; i--;) { gyorgy@0: b.add.call(this, this[i], 'mouseenter', enter); gyorgy@0: b.add.call(this, this[i], 'mouseleave', leave); gyorgy@0: } gyorgy@0: return this; gyorgy@0: } gyorgy@0: }; gyorgy@0: gyorgy@0: var i, shortcuts = [ gyorgy@0: 'blur', 'change', 'click', 'dblclick', 'error', 'focus', 'focusin', gyorgy@0: 'focusout', 'keydown', 'keypress', 'keyup', 'load', 'mousedown', gyorgy@0: 'mouseenter', 'mouseleave', 'mouseout', 'mouseover', 'mouseup', 'mousemove', gyorgy@0: 'resize', 'scroll', 'select', 'submit', 'unload' gyorgy@0: ]; gyorgy@0: gyorgy@0: for (i = shortcuts.length; i--;) { gyorgy@0: methods[shortcuts[i]] = integrate('add', shortcuts[i]); gyorgy@0: } gyorgy@0: gyorgy@0: $.ender(methods, true); gyorgy@0: }(ender); gyorgy@0: /*! gyorgy@0: * bonzo.js - copyright @dedfat 2011 gyorgy@0: * https://github.com/ded/bonzo gyorgy@0: * Follow our software http://twitter.com/dedfat gyorgy@0: * MIT License gyorgy@0: */ gyorgy@0: !function (context, win) { gyorgy@0: gyorgy@0: var doc = context.document, gyorgy@0: html = doc.documentElement, gyorgy@0: parentNode = 'parentNode', gyorgy@0: query = null, gyorgy@0: byTag = 'getElementsByTagName', gyorgy@0: specialAttributes = /^checked|value|selected$/, gyorgy@0: specialTags = /select|fieldset|table|tbody|tfoot|td|tr|colgroup/i, gyorgy@0: table = 'table', gyorgy@0: tagMap = { thead: table, tbody: table, tfoot: table, tr: 'tbody', th: 'tr', td: 'tr', fieldset: 'form', option: 'select' }, gyorgy@0: stateAttributes = /^checked|selected$/, gyorgy@0: ie = /msie/i.test(navigator.userAgent), gyorgy@0: uidList = [], gyorgy@0: uuids = 0, gyorgy@0: digit = /^-?[\d\.]+$/, gyorgy@0: px = 'px', gyorgy@0: // commonly used methods gyorgy@0: setAttribute = 'setAttribute', gyorgy@0: getAttribute = 'getAttribute', gyorgy@0: trimReplace = /(^\s*|\s*$)/g, gyorgy@0: unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 }; gyorgy@0: gyorgy@0: function classReg(c) { gyorgy@0: return new RegExp("(^|\\s+)" + c + "(\\s+|$)"); gyorgy@0: } gyorgy@0: gyorgy@0: function each(ar, fn, scope) { gyorgy@0: for (var i = 0, l = ar.length; i < l; i++) { gyorgy@0: fn.call(scope || ar[i], ar[i], i, ar); gyorgy@0: } gyorgy@0: return ar; gyorgy@0: } gyorgy@0: gyorgy@0: var trim = String.prototype.trim ? gyorgy@0: function (s) { gyorgy@0: return s.trim(); gyorgy@0: } : gyorgy@0: function (s) { gyorgy@0: return s.replace(trimReplace, ''); gyorgy@0: }; gyorgy@0: gyorgy@0: function camelize(s) { gyorgy@0: return s.replace(/-(.)/g, function (m, m1) { gyorgy@0: return m1.toUpperCase(); gyorgy@0: }); gyorgy@0: } gyorgy@0: gyorgy@0: function is(node) { gyorgy@0: return node && node.nodeName && node.nodeType == 1; gyorgy@0: } gyorgy@0: gyorgy@0: function some(ar, fn, scope) { gyorgy@0: for (var i = 0, j = ar.length; i < j; ++i) { gyorgy@0: if (fn.call(scope, ar[i], i, ar)) { gyorgy@0: return true; gyorgy@0: } gyorgy@0: } gyorgy@0: return false; gyorgy@0: } gyorgy@0: gyorgy@0: var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ? gyorgy@0: function (el, property) { gyorgy@0: var value = null; gyorgy@0: if (property == 'float') { gyorgy@0: property = 'cssFloat'; gyorgy@0: } gyorgy@0: var computed = doc.defaultView.getComputedStyle(el, ''); gyorgy@0: computed && (value = computed[camelize(property)]); gyorgy@0: return el.style[property] || value; gyorgy@0: gyorgy@0: } : (ie && html.currentStyle) ? gyorgy@0: gyorgy@0: function (el, property) { gyorgy@0: property = camelize(property); gyorgy@0: property = property == 'float' ? 'styleFloat' : property; gyorgy@0: gyorgy@0: if (property == 'opacity') { gyorgy@0: var val = 100; gyorgy@0: try { gyorgy@0: val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity; gyorgy@0: } catch (e1) { gyorgy@0: try { gyorgy@0: val = el.filters('alpha').opacity; gyorgy@0: } catch (e2) {} gyorgy@0: } gyorgy@0: return val / 100; gyorgy@0: } gyorgy@0: var value = el.currentStyle ? el.currentStyle[property] : null; gyorgy@0: return el.style[property] || value; gyorgy@0: } : gyorgy@0: gyorgy@0: function (el, property) { gyorgy@0: return el.style[camelize(property)]; gyorgy@0: }; gyorgy@0: gyorgy@0: function insert(target, host, fn) { gyorgy@0: var i = 0, self = host || this, r = [], gyorgy@0: nodes = query && typeof target == 'string' && target.charAt(0) != '<' ? function (n) { gyorgy@0: return (n = query(target)) && (n.selected = 1) && n; gyorgy@0: }() : target; gyorgy@0: each(normalize(nodes), function (t) { gyorgy@0: each(self, function (el) { gyorgy@0: var n = !el[parentNode] || (el[parentNode] && !el[parentNode][parentNode]) ? gyorgy@0: function () { gyorgy@0: var c = el.cloneNode(true); gyorgy@0: self.$ && self.cloneEvents && self.$(c).cloneEvents(el); gyorgy@0: return c; gyorgy@0: }() : gyorgy@0: el; gyorgy@0: fn(t, n); gyorgy@0: r[i] = n; gyorgy@0: i++; gyorgy@0: }); gyorgy@0: }, this); gyorgy@0: each(r, function (e, i) { gyorgy@0: self[i] = e; gyorgy@0: }); gyorgy@0: self.length = i; gyorgy@0: return self; gyorgy@0: } gyorgy@0: gyorgy@0: function xy(el, x, y) { gyorgy@0: var $el = bonzo(el), gyorgy@0: style = $el.css('position'), gyorgy@0: offset = $el.offset(), gyorgy@0: rel = 'relative', gyorgy@0: isRel = style == rel, gyorgy@0: delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)]; gyorgy@0: gyorgy@0: if (style == 'static') { gyorgy@0: $el.css('position', rel); gyorgy@0: style = rel; gyorgy@0: } gyorgy@0: gyorgy@0: isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft); gyorgy@0: isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop); gyorgy@0: gyorgy@0: x !== null && (el.style.left = x - offset.left + delta[0] + 'px'); gyorgy@0: y !== null && (el.style.top = y - offset.top + delta[1] + 'px'); gyorgy@0: gyorgy@0: } gyorgy@0: gyorgy@0: function Bonzo(elements) { gyorgy@0: this.length = 0; gyorgy@0: if (elements) { gyorgy@0: elements = typeof elements !== 'string' && gyorgy@0: !elements.nodeType && gyorgy@0: typeof elements.length !== 'undefined' ? gyorgy@0: elements : gyorgy@0: [elements]; gyorgy@0: this.length = elements.length; gyorgy@0: for (var i = 0; i < elements.length; i++) { gyorgy@0: this[i] = elements[i]; gyorgy@0: } gyorgy@0: } gyorgy@0: } gyorgy@0: gyorgy@0: Bonzo.prototype = { gyorgy@0: gyorgy@0: each: function (fn, scope) { gyorgy@0: return each(this, fn, scope); gyorgy@0: }, gyorgy@0: gyorgy@0: map: function (fn, reject) { gyorgy@0: var m = [], n, i; gyorgy@0: for (i = 0; i < this.length; i++) { gyorgy@0: n = fn.call(this, this[i]); gyorgy@0: reject ? (reject(n) && m.push(n)) : m.push(n); gyorgy@0: } gyorgy@0: return m; gyorgy@0: }, gyorgy@0: gyorgy@0: first: function () { gyorgy@0: return bonzo(this[0]); gyorgy@0: }, gyorgy@0: gyorgy@0: last: function () { gyorgy@0: return bonzo(this[this.length - 1]); gyorgy@0: }, gyorgy@0: gyorgy@0: html: function (h, text) { gyorgy@0: var method = text ? gyorgy@0: html.textContent == null ? gyorgy@0: 'innerText' : gyorgy@0: 'textContent' : gyorgy@0: 'innerHTML', m; gyorgy@0: function append(el) { gyorgy@0: while (el.firstChild) { gyorgy@0: el.removeChild(el.firstChild); gyorgy@0: } gyorgy@0: each(normalize(h), function (node) { gyorgy@0: el.appendChild(node); gyorgy@0: }); gyorgy@0: } gyorgy@0: return typeof h !== 'undefined' ? gyorgy@0: this.each(function (el) { gyorgy@0: (m = el.tagName.match(specialTags)) ? gyorgy@0: append(el, m[0]) : gyorgy@0: (el[method] = h); gyorgy@0: }) : gyorgy@0: this[0] ? this[0][method] : ''; gyorgy@0: }, gyorgy@0: gyorgy@0: text: function (text) { gyorgy@0: return this.html(text, 1); gyorgy@0: }, gyorgy@0: gyorgy@0: addClass: function (c) { gyorgy@0: return this.each(function (el) { gyorgy@0: this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c)); gyorgy@0: }, this); gyorgy@0: }, gyorgy@0: gyorgy@0: removeClass: function (c) { gyorgy@0: return this.each(function (el) { gyorgy@0: this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' '))); gyorgy@0: }, this); gyorgy@0: }, gyorgy@0: gyorgy@0: hasClass: function (el, c) { gyorgy@0: return typeof c == 'undefined' ? gyorgy@0: some(this, function (i) { gyorgy@0: return classReg(el).test(i.className); gyorgy@0: }) : gyorgy@0: classReg(c).test(el.className); gyorgy@0: }, gyorgy@0: gyorgy@0: toggleClass: function (c, condition) { gyorgy@0: if (typeof condition !== 'undefined' && !condition) { gyorgy@0: return this; gyorgy@0: } gyorgy@0: return this.each(function (el) { gyorgy@0: this.hasClass(el, c) ? gyorgy@0: (el.className = trim(el.className.replace(classReg(c), ' '))) : gyorgy@0: (el.className = trim(el.className + ' ' + c)); gyorgy@0: }, this); gyorgy@0: }, gyorgy@0: gyorgy@0: show: function (type) { gyorgy@0: return this.each(function (el) { gyorgy@0: el.style.display = type || ''; gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: hide: function (elements) { gyorgy@0: return this.each(function (el) { gyorgy@0: el.style.display = 'none'; gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: append: function (node) { gyorgy@0: return this.each(function (el) { gyorgy@0: each(normalize(node), function (i) { gyorgy@0: el.appendChild(i); gyorgy@0: }); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: prepend: function (node) { gyorgy@0: return this.each(function (el) { gyorgy@0: var first = el.firstChild; gyorgy@0: each(normalize(node), function (i) { gyorgy@0: el.insertBefore(i, first); gyorgy@0: }); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: appendTo: function (target, host) { gyorgy@0: return insert.call(this, target, host, function (t, el) { gyorgy@0: t.appendChild(el); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: prependTo: function (target, host) { gyorgy@0: return insert.call(this, target, host, function (t, el) { gyorgy@0: t.insertBefore(el, t.firstChild); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: next: function () { gyorgy@0: return this.related('nextSibling'); gyorgy@0: }, gyorgy@0: gyorgy@0: previous: function () { gyorgy@0: return this.related('previousSibling'); gyorgy@0: }, gyorgy@0: gyorgy@0: related: function (method) { gyorgy@0: return this.map( gyorgy@0: function (el) { gyorgy@0: el = el[method]; gyorgy@0: while (el && el.nodeType !== 1) { gyorgy@0: el = el[method]; gyorgy@0: } gyorgy@0: return el || 0; gyorgy@0: }, gyorgy@0: function (el) { gyorgy@0: return el; gyorgy@0: } gyorgy@0: ); gyorgy@0: }, gyorgy@0: gyorgy@0: before: function (node) { gyorgy@0: return this.each(function (el) { gyorgy@0: each(bonzo.create(node), function (i) { gyorgy@0: el[parentNode].insertBefore(i, el); gyorgy@0: }); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: after: function (node) { gyorgy@0: return this.each(function (el) { gyorgy@0: each(bonzo.create(node), function (i) { gyorgy@0: el[parentNode].insertBefore(i, el.nextSibling); gyorgy@0: }); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: insertBefore: function (target, host) { gyorgy@0: return insert.call(this, target, host, function (t, el) { gyorgy@0: t[parentNode].insertBefore(el, t); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: insertAfter: function (target, host) { gyorgy@0: return insert.call(this, target, host, function (t, el) { gyorgy@0: var sibling = t.nextSibling; gyorgy@0: if (sibling) { gyorgy@0: t[parentNode].insertBefore(el, sibling); gyorgy@0: } gyorgy@0: else { gyorgy@0: t[parentNode].appendChild(el); gyorgy@0: } gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: css: function (o, v, p) { gyorgy@0: // is this a request for just getting a style? gyorgy@0: if (v === undefined && typeof o == 'string') { gyorgy@0: // repurpose 'v' gyorgy@0: v = this[0]; gyorgy@0: if (!v) { gyorgy@0: return null; gyorgy@0: } gyorgy@0: if (v == doc || v == win) { gyorgy@0: p = (v == doc) ? bonzo.doc() : bonzo.viewport(); gyorgy@0: return o == 'width' ? p.width : gyorgy@0: o == 'height' ? p.height : ''; gyorgy@0: } gyorgy@0: return getStyle(v, o); gyorgy@0: } gyorgy@0: var iter = o; gyorgy@0: if (typeof o == 'string') { gyorgy@0: iter = {}; gyorgy@0: iter[o] = v; gyorgy@0: } gyorgy@0: gyorgy@0: if (ie && iter.opacity) { gyorgy@0: // oh this 'ol gamut gyorgy@0: iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')'; gyorgy@0: // give it layout gyorgy@0: iter.zoom = o.zoom || 1; gyorgy@0: delete iter.opacity; gyorgy@0: } gyorgy@0: gyorgy@0: if (v = iter['float']) { gyorgy@0: // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat gyorgy@0: ie ? (iter.styleFloat = v) : (iter.cssFloat = v); gyorgy@0: delete iter['float']; gyorgy@0: } gyorgy@0: gyorgy@0: var fn = function (el, p, v) { gyorgy@0: for (var k in iter) { gyorgy@0: if (iter.hasOwnProperty(k)) { gyorgy@0: v = iter[k]; gyorgy@0: // change "5" to "5px" - unless you're line-height, which is allowed gyorgy@0: (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px); gyorgy@0: el.style[p] = v; gyorgy@0: } gyorgy@0: } gyorgy@0: }; gyorgy@0: return this.each(fn); gyorgy@0: }, gyorgy@0: gyorgy@0: offset: function (x, y) { gyorgy@0: if (x || y) { gyorgy@0: return this.each(function (el) { gyorgy@0: xy(el, x, y); gyorgy@0: }); gyorgy@0: } gyorgy@0: var el = this[0]; gyorgy@0: var width = el.offsetWidth; gyorgy@0: var height = el.offsetHeight; gyorgy@0: var top = el.offsetTop; gyorgy@0: var left = el.offsetLeft; gyorgy@0: while (el = el.offsetParent) { gyorgy@0: top = top + el.offsetTop; gyorgy@0: left = left + el.offsetLeft; gyorgy@0: } gyorgy@0: gyorgy@0: return { gyorgy@0: top: top, gyorgy@0: left: left, gyorgy@0: height: height, gyorgy@0: width: width gyorgy@0: }; gyorgy@0: }, gyorgy@0: gyorgy@0: attr: function (k, v) { gyorgy@0: var el = this[0]; gyorgy@0: return typeof v == 'undefined' ? gyorgy@0: specialAttributes.test(k) ? gyorgy@0: stateAttributes.test(k) && typeof el[k] == 'string' ? gyorgy@0: true : el[k] : el[getAttribute](k) : gyorgy@0: this.each(function (el) { gyorgy@0: k == 'value' ? (el.value = v) : el[setAttribute](k, v); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: val: function (s) { gyorgy@0: return (typeof s == 'string') ? this.attr('value', s) : this[0].value; gyorgy@0: }, gyorgy@0: gyorgy@0: removeAttr: function (k) { gyorgy@0: return this.each(function (el) { gyorgy@0: el.removeAttribute(k); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: data: function (k, v) { gyorgy@0: var el = this[0]; gyorgy@0: if (typeof v === 'undefined') { gyorgy@0: el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids); gyorgy@0: var uid = el[getAttribute]('data-node-uid'); gyorgy@0: uidList[uid] || (uidList[uid] = {}); gyorgy@0: return uidList[uid][k]; gyorgy@0: } else { gyorgy@0: return this.each(function (el) { gyorgy@0: el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids); gyorgy@0: var uid = el[getAttribute]('data-node-uid'); gyorgy@0: var o = {}; gyorgy@0: o[k] = v; gyorgy@0: uidList[uid] = o; gyorgy@0: }); gyorgy@0: } gyorgy@0: }, gyorgy@0: gyorgy@0: remove: function () { gyorgy@0: return this.each(function (el) { gyorgy@0: el[parentNode] && el[parentNode].removeChild(el); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: empty: function () { gyorgy@0: return this.each(function (el) { gyorgy@0: while (el.firstChild) { gyorgy@0: el.removeChild(el.firstChild); gyorgy@0: } gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: detach: function () { gyorgy@0: return this.map(function (el) { gyorgy@0: return el[parentNode].removeChild(el); gyorgy@0: }); gyorgy@0: }, gyorgy@0: gyorgy@0: scrollTop: function (y) { gyorgy@0: return scroll.call(this, null, y, 'y'); gyorgy@0: }, gyorgy@0: gyorgy@0: scrollLeft: function (x) { gyorgy@0: return scroll.call(this, x, null, 'x'); gyorgy@0: } gyorgy@0: }; gyorgy@0: gyorgy@0: function normalize(node) { gyorgy@0: return typeof node == 'string' ? bonzo.create(node) : is(node) ? [node] : node; // assume [nodes] gyorgy@0: } gyorgy@0: gyorgy@0: function scroll(x, y, type) { gyorgy@0: var el = this[0]; gyorgy@0: if (x == null && y == null) { gyorgy@0: return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type]; gyorgy@0: } gyorgy@0: if (isBody(el)) { gyorgy@0: win.scrollTo(x, y); gyorgy@0: } else { gyorgy@0: x != null && (el.scrollLeft = x); gyorgy@0: y != null && (el.scrollTop = y); gyorgy@0: } gyorgy@0: return this; gyorgy@0: } gyorgy@0: gyorgy@0: function isBody(element) { gyorgy@0: return element === win || (/^(?:body|html)$/i).test(element.tagName); gyorgy@0: } gyorgy@0: gyorgy@0: function getWindowScroll() { gyorgy@0: return { x: win.pageXOffset || html.scrollLeft, y: win.pageYOffset || html.scrollTop }; gyorgy@0: } gyorgy@0: gyorgy@0: function bonzo(els, host) { gyorgy@0: return new Bonzo(els, host); gyorgy@0: } gyorgy@0: gyorgy@0: bonzo.setQueryEngine = function (q) { gyorgy@0: query = q; gyorgy@0: delete bonzo.setQueryEngine; gyorgy@0: }; gyorgy@0: gyorgy@0: bonzo.aug = function (o, target) { gyorgy@0: for (var k in o) { gyorgy@0: o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]); gyorgy@0: } gyorgy@0: }; gyorgy@0: gyorgy@0: bonzo.create = function (node) { gyorgy@0: return typeof node == 'string' ? gyorgy@0: function () { gyorgy@0: var tag = /^<([^\s>]+)/.exec(node); gyorgy@0: var el = doc.createElement(tag && tagMap[tag[1].toLowerCase()] || 'div'), els = []; gyorgy@0: el.innerHTML = node; gyorgy@0: var nodes = el.childNodes; gyorgy@0: el = el.firstChild; gyorgy@0: els.push(el); gyorgy@0: while (el = el.nextSibling) { gyorgy@0: (el.nodeType == 1) && els.push(el); gyorgy@0: } gyorgy@0: return els; gyorgy@0: gyorgy@0: }() : is(node) ? [node.cloneNode(true)] : []; gyorgy@0: }; gyorgy@0: gyorgy@0: bonzo.doc = function () { gyorgy@0: var w = html.scrollWidth, gyorgy@0: h = html.scrollHeight, gyorgy@0: vp = this.viewport(); gyorgy@0: return { gyorgy@0: width: Math.max(w, vp.width), gyorgy@0: height: Math.max(h, vp.height) gyorgy@0: }; gyorgy@0: }; gyorgy@0: gyorgy@0: bonzo.firstChild = function (el) { gyorgy@0: for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) { gyorgy@0: if (c[i].nodeType === 1) { gyorgy@0: e = c[j = i]; gyorgy@0: } gyorgy@0: } gyorgy@0: return e; gyorgy@0: }; gyorgy@0: gyorgy@0: bonzo.viewport = function () { gyorgy@0: var h = self.innerHeight, gyorgy@0: w = self.innerWidth; gyorgy@0: if (ie) { gyorgy@0: h = html.clientHeight; gyorgy@0: w = html.clientWidth; gyorgy@0: } gyorgy@0: return { gyorgy@0: width: w, gyorgy@0: height: h gyorgy@0: }; gyorgy@0: }; gyorgy@0: gyorgy@0: bonzo.isAncestor = 'compareDocumentPosition' in html ? gyorgy@0: function (container, element) { gyorgy@0: return (container.compareDocumentPosition(element) & 16) == 16; gyorgy@0: } : 'contains' in html ? gyorgy@0: function (container, element) { gyorgy@0: return container !== element && container.contains(element); gyorgy@0: } : gyorgy@0: function (container, element) { gyorgy@0: while (element = element[parentNode]) { gyorgy@0: if (element === container) { gyorgy@0: return true; gyorgy@0: } gyorgy@0: } gyorgy@0: return false; gyorgy@0: }; gyorgy@0: gyorgy@0: var old = context.bonzo; gyorgy@0: bonzo.noConflict = function () { gyorgy@0: context.bonzo = old; gyorgy@0: return this; gyorgy@0: }; gyorgy@0: context['bonzo'] = bonzo; gyorgy@0: gyorgy@0: }(this, window);!function ($) { gyorgy@0: gyorgy@0: var b = bonzo; gyorgy@0: b.setQueryEngine($); gyorgy@0: $.ender(b); gyorgy@0: $.ender(b(), true); gyorgy@0: $.ender({ gyorgy@0: create: function (node) { gyorgy@0: return $(b.create(node)); gyorgy@0: } gyorgy@0: }); gyorgy@0: gyorgy@0: $.id = function (id) { gyorgy@0: return $([document.getElementById(id)]); gyorgy@0: }; gyorgy@0: gyorgy@0: function indexOf(ar, val) { gyorgy@0: for (var i = 0; i < ar.length; i++) { gyorgy@0: if (ar[i] === val) { gyorgy@0: return i; gyorgy@0: } gyorgy@0: } gyorgy@0: return -1; gyorgy@0: } gyorgy@0: gyorgy@0: function uniq(ar) { gyorgy@0: var a = [], i, j; gyorgy@0: label: gyorgy@0: for (i = 0; i < ar.length; i++) { gyorgy@0: for (j = 0; j < a.length; j++) { gyorgy@0: if (a[j] == ar[i]) { gyorgy@0: continue label; gyorgy@0: } gyorgy@0: } gyorgy@0: a[a.length] = ar[i]; gyorgy@0: } gyorgy@0: return a; gyorgy@0: } gyorgy@0: gyorgy@0: $.ender({ gyorgy@0: parents: function (selector, closest) { gyorgy@0: var collection = $(selector), j, k, p, r = []; gyorgy@0: for (j = 0, k = this.length; j < k; j++) { gyorgy@0: p = this[j]; gyorgy@0: while (p = p.parentNode) { gyorgy@0: if (indexOf(collection, p) !== -1) { gyorgy@0: r.push(p); gyorgy@0: if (closest) break; gyorgy@0: } gyorgy@0: } gyorgy@0: } gyorgy@0: return $(uniq(r)); gyorgy@0: }, gyorgy@0: gyorgy@0: closest: function (selector) { gyorgy@0: return this.parents(selector, true); gyorgy@0: }, gyorgy@0: gyorgy@0: first: function () { gyorgy@0: return $(this[0]); gyorgy@0: }, gyorgy@0: gyorgy@0: last: function () { gyorgy@0: return $(this[this.length - 1]); gyorgy@0: }, gyorgy@0: gyorgy@0: next: function () { gyorgy@0: return $(b(this).next()); gyorgy@0: }, gyorgy@0: gyorgy@0: previous: function () { gyorgy@0: return $(b(this).previous()); gyorgy@0: }, gyorgy@0: gyorgy@0: appendTo: function (t) { gyorgy@0: return b(this.selector).appendTo(t, this); gyorgy@0: }, gyorgy@0: gyorgy@0: prependTo: function (t) { gyorgy@0: return b(this.selector).prependTo(t, this); gyorgy@0: }, gyorgy@0: gyorgy@0: insertAfter: function (t) { gyorgy@0: return b(this.selector).insertAfter(t, this); gyorgy@0: }, gyorgy@0: gyorgy@0: insertBefore: function (t) { gyorgy@0: return b(this.selector).insertBefore(t, this); gyorgy@0: }, gyorgy@0: gyorgy@0: siblings: function () { gyorgy@0: var i, l, p, r = []; gyorgy@0: for (i = 0, l = this.length; i < l; i++) { gyorgy@0: p = this[i]; gyorgy@0: while (p = p.previousSibling) { gyorgy@0: p.nodeType == 1 && r.push(p); gyorgy@0: } gyorgy@0: p = this[i]; gyorgy@0: while (p = p.nextSibling) { gyorgy@0: p.nodeType == 1 && r.push(p); gyorgy@0: } gyorgy@0: } gyorgy@0: return $(r); gyorgy@0: }, gyorgy@0: gyorgy@0: children: function () { gyorgy@0: var i, el, r = []; gyorgy@0: for (i = 0, l = this.length; i < l; i++) { gyorgy@0: if (!(el = b.firstChild(this[i]))) { gyorgy@0: continue; gyorgy@0: } gyorgy@0: r.push(el); gyorgy@0: while (el = el.nextSibling) { gyorgy@0: el.nodeType == 1 && r.push(el); gyorgy@0: } gyorgy@0: } gyorgy@0: return $(uniq(r)); gyorgy@0: }, gyorgy@0: gyorgy@0: height: function (v) { gyorgy@0: return dimension(v, this, 'height') gyorgy@0: }, gyorgy@0: gyorgy@0: width: function (v) { gyorgy@0: return dimension(v, this, 'width') gyorgy@0: } gyorgy@0: }, true); gyorgy@0: gyorgy@0: function dimension(v, self, which) { gyorgy@0: return v ? gyorgy@0: self.css(which, v) : gyorgy@0: function (r) { gyorgy@0: r = parseInt(self.css(which), 10); gyorgy@0: return isNaN(r) ? self[0]['offset' + which.replace(/^\w/, function (m) {return m.toUpperCase()})] : r gyorgy@0: }() gyorgy@0: } gyorgy@0: gyorgy@0: }(ender || $); gyorgy@0: gyorgy@0: !function (context, doc) { gyorgy@0: var fns = [], ol, fn, f = false, gyorgy@0: testEl = doc.documentElement, gyorgy@0: hack = testEl.doScroll, gyorgy@0: domContentLoaded = 'DOMContentLoaded', gyorgy@0: addEventListener = 'addEventListener', gyorgy@0: onreadystatechange = 'onreadystatechange', gyorgy@0: loaded = /^loade|c/.test(doc.readyState); gyorgy@0: gyorgy@0: function flush(i) { gyorgy@0: loaded = 1; gyorgy@0: while (i = fns.shift()) { i() } gyorgy@0: } gyorgy@0: doc[addEventListener] && doc[addEventListener](domContentLoaded, fn = function () { gyorgy@0: doc.removeEventListener(domContentLoaded, fn, f); gyorgy@0: flush(); gyorgy@0: }, f); gyorgy@0: gyorgy@0: gyorgy@0: hack && doc.attachEvent(onreadystatechange, (ol = function () { gyorgy@0: if (/^c/.test(doc.readyState)) { gyorgy@0: doc.detachEvent(onreadystatechange, ol); gyorgy@0: flush(); gyorgy@0: } gyorgy@0: })); gyorgy@0: gyorgy@0: context['domReady'] = hack ? gyorgy@0: function (fn) { gyorgy@0: self != top ? gyorgy@0: loaded ? fn() : fns.push(fn) : gyorgy@0: function () { gyorgy@0: try { gyorgy@0: testEl.doScroll('left'); gyorgy@0: } catch (e) { gyorgy@0: return setTimeout(function() { domReady(fn) }, 50); gyorgy@0: } gyorgy@0: fn(); gyorgy@0: }() gyorgy@0: } : gyorgy@0: function (fn) { gyorgy@0: loaded ? fn() : fns.push(fn); gyorgy@0: }; gyorgy@0: gyorgy@0: }(this, document);!function ($) { gyorgy@0: $.ender({domReady: domReady}); gyorgy@0: $.ender({ gyorgy@0: ready: function (f) { gyorgy@0: domReady(f); gyorgy@0: return this; gyorgy@0: } gyorgy@0: }, true); gyorgy@0: }(ender); gyorgy@0: /*! gyorgy@0: * Qwery - A Blazing Fast query selector engine gyorgy@0: * https://github.com/ded/qwery gyorgy@0: * copyright Dustin Diaz & Jacob Thornton 2011 gyorgy@0: * MIT License gyorgy@0: */ gyorgy@0: gyorgy@0: !function (context, doc) { gyorgy@0: gyorgy@0: var c, i, j, k, l, m, o, p, r, v, gyorgy@0: el, node, len, found, classes, item, items, token, gyorgy@0: html = doc.documentElement, gyorgy@0: id = /#([\w\-]+)/, gyorgy@0: clas = /\.[\w\-]+/g, gyorgy@0: idOnly = /^#([\w\-]+$)/, gyorgy@0: classOnly = /^\.([\w\-]+)$/, gyorgy@0: tagOnly = /^([\w\-]+)$/, gyorgy@0: tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/, gyorgy@0: normalizr = /\s*([\s\+\~>])\s*/g, gyorgy@0: splitters = /[\s\>\+\~]/, gyorgy@0: splittersMore = /(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/, gyorgy@0: dividers = new RegExp('(' + splitters.source + ')' + splittersMore.source, 'g'), gyorgy@0: tokenizr = new RegExp(splitters.source + splittersMore.source), gyorgy@0: specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g, gyorgy@0: simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/, gyorgy@0: attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/, gyorgy@0: pseudo = /:([\w\-]+)(\(['"]?(\w+)['"]?\))?/, gyorgy@0: chunker = new RegExp(simple.source + '(' + attr.source + ')?' + '(' + pseudo.source + ')?'), gyorgy@0: walker = { gyorgy@0: ' ': function (node) { gyorgy@0: return node && node !== html && node.parentNode gyorgy@0: }, gyorgy@0: '>': function (node, contestant) { gyorgy@0: return node && node.parentNode == contestant.parentNode && node.parentNode; gyorgy@0: }, gyorgy@0: '~': function (node) { gyorgy@0: return node && node.previousSibling; gyorgy@0: }, gyorgy@0: '+': function (node, contestant, p1, p2) { gyorgy@0: if (!node) { gyorgy@0: return false; gyorgy@0: } gyorgy@0: p1 = previous(node); gyorgy@0: p2 = previous(contestant); gyorgy@0: return p1 && p2 && p1 == p2 && p1; gyorgy@0: } gyorgy@0: }; gyorgy@0: window.tokenizr = tokenizr; gyorgy@0: window.dividers = dividers; gyorgy@0: function cache() { gyorgy@0: this.c = {}; gyorgy@0: } gyorgy@0: cache.prototype = { gyorgy@0: g: function (k) { gyorgy@0: return this.c[k] || undefined; gyorgy@0: }, gyorgy@0: s: function (k, v) { gyorgy@0: this.c[k] = v; gyorgy@0: return v; gyorgy@0: } gyorgy@0: }; gyorgy@0: gyorgy@0: var classCache = new cache(), gyorgy@0: cleanCache = new cache(), gyorgy@0: attrCache = new cache(), gyorgy@0: tokenCache = new cache(); gyorgy@0: gyorgy@0: function array(ar) { gyorgy@0: r = []; gyorgy@0: for (i = 0, len = ar.length; i < len; i++) { gyorgy@0: r[i] = ar[i]; gyorgy@0: } gyorgy@0: return r; gyorgy@0: } gyorgy@0: gyorgy@0: function previous(n) { gyorgy@0: while (n = n.previousSibling) { gyorgy@0: if (n.nodeType == 1) { gyorgy@0: break; gyorgy@0: } gyorgy@0: } gyorgy@0: return n gyorgy@0: } gyorgy@0: gyorgy@0: function q(query) { gyorgy@0: return query.match(chunker); gyorgy@0: } gyorgy@0: gyorgy@0: // this next method expect at most these args gyorgy@0: // given => div.hello[title="world"]:foo('bar') gyorgy@0: gyorgy@0: // div.hello[title="world"]:foo('bar'), div, .hello, [title="world"], title, =, world, :foo('bar'), foo, ('bar'), bar] gyorgy@0: gyorgy@0: function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value, wholePseudo, pseudo, wholePseudoVal, pseudoVal) { gyorgy@0: var m, c, k; gyorgy@0: if (tag && this.tagName.toLowerCase() !== tag) { gyorgy@0: return false; gyorgy@0: } gyorgy@0: if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) { gyorgy@0: return false; gyorgy@0: } gyorgy@0: if (idsAndClasses && (classes = idsAndClasses.match(clas))) { gyorgy@0: for (i = classes.length; i--;) { gyorgy@0: c = classes[i].slice(1); gyorgy@0: if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) { gyorgy@0: return false; gyorgy@0: } gyorgy@0: } gyorgy@0: } gyorgy@0: if (pseudo && qwery.pseudos[pseudo] && !qwery.pseudos[pseudo](this, pseudoVal)) { gyorgy@0: return false; gyorgy@0: } gyorgy@0: if (wholeAttribute && !value) { gyorgy@0: o = this.attributes; gyorgy@0: for (k in o) { gyorgy@0: if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) { gyorgy@0: return this; gyorgy@0: } gyorgy@0: } gyorgy@0: } gyorgy@0: if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) { gyorgy@0: return false; gyorgy@0: } gyorgy@0: return this; gyorgy@0: } gyorgy@0: gyorgy@0: function clean(s) { gyorgy@0: return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$1')); gyorgy@0: } gyorgy@0: gyorgy@0: function checkAttr(qualify, actual, val) { gyorgy@0: switch (qualify) { gyorgy@0: case '=': gyorgy@0: return actual == val; gyorgy@0: case '^=': gyorgy@0: return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val)))); gyorgy@0: case '$=': gyorgy@0: return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$'))); gyorgy@0: case '*=': gyorgy@0: return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val)))); gyorgy@0: case '~=': gyorgy@0: return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)'))); gyorgy@0: case '|=': gyorgy@0: return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)'))); gyorgy@0: } gyorgy@0: return 0; gyorgy@0: } gyorgy@0: gyorgy@0: function _qwery(selector) { gyorgy@0: var r = [], ret = [], i, j = 0, k, l, m, p, token, tag, els, root, intr, item, children, gyorgy@0: tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr)), gyorgy@0: dividedTokens = selector.match(dividers), dividedToken; gyorgy@0: tokens = tokens.slice(0); // this makes a copy of the array so the cached original is not effected gyorgy@0: if (!tokens.length) { gyorgy@0: return r; gyorgy@0: } gyorgy@0: gyorgy@0: token = tokens.pop(); gyorgy@0: root = tokens.length && (m = tokens[tokens.length - 1].match(idOnly)) ? doc.getElementById(m[1]) : doc; gyorgy@0: if (!root) { gyorgy@0: return r; gyorgy@0: } gyorgy@0: intr = q(token); gyorgy@0: els = dividedTokens && /^[+~]$/.test(dividedTokens[dividedTokens.length - 1]) ? function (r) { gyorgy@0: while (root = root.nextSibling) { gyorgy@0: root.nodeType == 1 && (intr[1] ? intr[1] == root.tagName.toLowerCase() : 1) && r.push(root) gyorgy@0: } gyorgy@0: return r gyorgy@0: }([]) : gyorgy@0: root.getElementsByTagName(intr[1] || '*'); gyorgy@0: for (i = 0, l = els.length; i < l; i++) { gyorgy@0: if (item = interpret.apply(els[i], intr)) { gyorgy@0: r[j++] = item; gyorgy@0: } gyorgy@0: } gyorgy@0: if (!tokens.length) { gyorgy@0: return r; gyorgy@0: } gyorgy@0: gyorgy@0: // loop through all descendent tokens gyorgy@0: for (j = 0, l = r.length, k = 0; j < l; j++) { gyorgy@0: p = r[j]; gyorgy@0: // loop through each token backwards crawling up tree gyorgy@0: for (i = tokens.length; i--;) { gyorgy@0: // loop through parent nodes gyorgy@0: while (p = walker[dividedTokens[i]](p, r[j])) { gyorgy@0: if (found = interpret.apply(p, q(tokens[i]))) { gyorgy@0: break; gyorgy@0: } gyorgy@0: } gyorgy@0: } gyorgy@0: found && (ret[k++] = r[j]); gyorgy@0: } gyorgy@0: return ret; gyorgy@0: } gyorgy@0: gyorgy@0: function boilerPlate(selector, _root, fn) { gyorgy@0: var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc); gyorgy@0: if (selector === window || isNode(selector)) { gyorgy@0: return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : []; gyorgy@0: } gyorgy@0: if (selector && typeof selector === 'object' && isFinite(selector.length)) { gyorgy@0: return array(selector); gyorgy@0: } gyorgy@0: if (m = selector.match(idOnly)) { gyorgy@0: return (el = doc.getElementById(m[1])) ? [el] : []; gyorgy@0: } gyorgy@0: if (m = selector.match(tagOnly)) { gyorgy@0: return array(root.getElementsByTagName(m[1])); gyorgy@0: } gyorgy@0: return false; gyorgy@0: } gyorgy@0: gyorgy@0: function isNode(el) { gyorgy@0: return (el && el.nodeType && (el.nodeType == 1 || el.nodeType == 9)); gyorgy@0: } gyorgy@0: gyorgy@0: function uniq(ar) { gyorgy@0: var a = [], i, j; gyorgy@0: label: gyorgy@0: for (i = 0; i < ar.length; i++) { gyorgy@0: for (j = 0; j < a.length; j++) { gyorgy@0: if (a[j] == ar[i]) { gyorgy@0: continue label; gyorgy@0: } gyorgy@0: } gyorgy@0: a[a.length] = ar[i]; gyorgy@0: } gyorgy@0: return a; gyorgy@0: } gyorgy@0: gyorgy@0: function qwery(selector, _root) { gyorgy@0: var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc); gyorgy@0: if (!root || !selector) { gyorgy@0: return []; gyorgy@0: } gyorgy@0: if (m = boilerPlate(selector, _root, qwery)) { gyorgy@0: return m; gyorgy@0: } gyorgy@0: return select(selector, root); gyorgy@0: } gyorgy@0: gyorgy@0: var isAncestor = 'compareDocumentPosition' in html ? gyorgy@0: function (element, container) { gyorgy@0: return (container.compareDocumentPosition(element) & 16) == 16; gyorgy@0: } : 'contains' in html ? gyorgy@0: function (element, container) { gyorgy@0: container = container == doc || container == window ? html : container; gyorgy@0: return container !== element && container.contains(element); gyorgy@0: } : gyorgy@0: function (element, container) { gyorgy@0: while (element = element.parentNode) { gyorgy@0: if (element === container) { gyorgy@0: return 1; gyorgy@0: } gyorgy@0: } gyorgy@0: return 0; gyorgy@0: }, gyorgy@0: gyorgy@0: select = (doc.querySelector && doc.querySelectorAll) ? gyorgy@0: function (selector, root) { gyorgy@0: if (doc.getElementsByClassName && (m = selector.match(classOnly))) { gyorgy@0: return array((root).getElementsByClassName(m[1])); gyorgy@0: } gyorgy@0: return array((root).querySelectorAll(selector)); gyorgy@0: } : gyorgy@0: function (selector, root) { gyorgy@0: selector = selector.replace(normalizr, '$1'); gyorgy@0: var result = [], collection, collections = [], i; gyorgy@0: if (m = selector.match(tagAndOrClass)) { gyorgy@0: items = root.getElementsByTagName(m[1] || '*'); gyorgy@0: r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)')); gyorgy@0: for (i = 0, l = items.length, j = 0; i < l; i++) { gyorgy@0: r.test(items[i].className) && (result[j++] = items[i]); gyorgy@0: } gyorgy@0: return result; gyorgy@0: } gyorgy@0: for (i = 0, items = selector.split(','), l = items.length; i < l; i++) { gyorgy@0: collections[i] = _qwery(items[i]); gyorgy@0: } gyorgy@0: for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) { gyorgy@0: var ret = collection; gyorgy@0: if (root !== doc) { gyorgy@0: ret = []; gyorgy@0: for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) { gyorgy@0: // make sure element is a descendent of root gyorgy@0: isAncestor(element, root) && ret.push(element); gyorgy@0: } gyorgy@0: } gyorgy@0: result = result.concat(ret); gyorgy@0: } gyorgy@0: return uniq(result); gyorgy@0: }; gyorgy@0: gyorgy@0: qwery.uniq = uniq; gyorgy@0: qwery.pseudos = {}; gyorgy@0: gyorgy@0: var oldQwery = context.qwery; gyorgy@0: qwery.noConflict = function () { gyorgy@0: context.qwery = oldQwery; gyorgy@0: return this; gyorgy@0: }; gyorgy@0: context['qwery'] = qwery; gyorgy@0: gyorgy@0: }(this, document);!function (doc) { gyorgy@0: var q = qwery.noConflict(); gyorgy@0: var table = 'table', gyorgy@0: nodeMap = { gyorgy@0: thead: table, gyorgy@0: tbody: table, gyorgy@0: tfoot: table, gyorgy@0: tr: 'tbody', gyorgy@0: th: 'tr', gyorgy@0: td: 'tr', gyorgy@0: fieldset: 'form', gyorgy@0: option: 'select' gyorgy@0: } gyorgy@0: function create(node, root) { gyorgy@0: var tag = /^<([^\s>]+)/.exec(node)[1] gyorgy@0: var el = (root || doc).createElement(nodeMap[tag] || 'div'), els = []; gyorgy@0: el.innerHTML = node; gyorgy@0: var nodes = el.childNodes; gyorgy@0: el = el.firstChild; gyorgy@0: els.push(el); gyorgy@0: while (el = el.nextSibling) { gyorgy@0: (el.nodeType == 1) && els.push(el); gyorgy@0: } gyorgy@0: return els; gyorgy@0: } gyorgy@0: $._select = function (s, r) { gyorgy@0: return /^\s*