!function (context) {
function aug(o, o2) {
for (var k in o2) {
k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
}
return o;
}
function boosh(s, r) {
var els;
if (ender._select && typeof s == 'string' || s.nodeName || s.length && 'item' in s || s == window) {
els = ender._select(s, r);
els.selector = s;
} else {
els = isFinite(s.length) ? s : [s];
}
return aug(els, boosh);
}
function ender(s, r) {
return boosh(s, r);
}
aug(ender, {
_VERSION: '0.2.0',
ender: function (o, chain) {
aug(chain ? boosh : ender, o);
}
});
aug(boosh, {
forEach: function (fn, scope) {
for (var i = 0, l = this.length; i < l; ++i) {
i in this && fn.call(scope || this[i], this[i], i, this);
}
return this;
}
});
var old = context.$;
ender.noConflict = function () {
context.$ = old;
return this;
};
(typeof module !== 'undefined') && module.exports && (module.exports = ender);
context['ender'] = context['$'] = ender;
}(this);
!function (context) {
var __uid = 1, registry = {}, collected = {},
overOut = /over|out/,
namespace = /[^\.]*(?=\..*)\.|.*/,
stripName = /\..*/,
addEvent = 'addEventListener',
attachEvent = 'attachEvent',
removeEvent = 'removeEventListener',
detachEvent = 'detachEvent',
doc = context.document || {},
root = doc.documentElement || {},
W3C_MODEL = root[addEvent],
eventSupport = W3C_MODEL ? addEvent : attachEvent,
isDescendant = function (parent, child) {
var node = child.parentNode;
while (node != null) {
if (node == parent) {
return true;
}
node = node.parentNode;
}
},
retrieveUid = function (obj, uid) {
return (obj.__uid = uid || obj.__uid || __uid++);
},
retrieveEvents = function (element) {
var uid = retrieveUid(element);
return (registry[uid] = registry[uid] || {});
},
listener = W3C_MODEL ? function (element, type, fn, add) {
element[add ? addEvent : removeEvent](type, fn, false);
} : function (element, type, fn, add, custom) {
custom && add && (element['_on' + custom] = element['_on' + custom] || 0);
element[add ? attachEvent : detachEvent]('on' + type, fn);
},
nativeHandler = function (element, fn, args) {
return function (event) {
event = fixEvent(event || ((this.ownerDocument || this.document || this).parentWindow || context).event);
return fn.apply(element, [event].concat(args));
};
},
customHandler = function (element, fn, type, condition, args) {
return function (event) {
if (condition ? condition.call(this, event) : W3C_MODEL ? true : event && event.propertyName == '_on' + type || !event) {
fn.apply(element, [event].concat(args));
}
};
},
addListener = function (element, orgType, fn, args) {
var type = orgType.replace(stripName, ''),
events = retrieveEvents(element),
handlers = events[type] || (events[type] = {}),
uid = retrieveUid(fn, orgType.replace(namespace, ''));
if (handlers[uid]) {
return element;
}
var custom = customEvents[type];
if (custom) {
fn = custom.condition ? customHandler(element, fn, type, custom.condition) : fn;
type = custom.base || type;
}
var isNative = nativeEvents[type];
fn = isNative ? nativeHandler(element, fn, args) : customHandler(element, fn, type, false, args);
isNative = W3C_MODEL || isNative;
if (type == 'unload') {
var org = fn;
fn = function () {
removeListener(element, type, fn) && org();
};
}
element[eventSupport] && listener(element, isNative ? type : 'propertychange', fn, true, !isNative && type);
handlers[uid] = fn;
fn.__uid = uid;
return type == 'unload' ? element : (collected[retrieveUid(element)] = element);
},
removeListener = function (element, orgType, handler) {
var uid, names, uids, i, events = retrieveEvents(element), type = orgType.replace(stripName, '');
if (!events || !events[type]) {
return element;
}
names = orgType.replace(namespace, '');
uids = names ? names.split('.') : [handler.__uid];
for (i = uids.length; i--;) {
uid = uids[i];
handler = events[type][uid];
delete events[type][uid];
if (element[eventSupport]) {
type = customEvents[type] ? customEvents[type].base : type;
var isNative = W3C_MODEL || nativeEvents[type];
listener(element, isNative ? type : 'propertychange', handler, false, !isNative && type);
}
}
return element;
},
del = function (selector, fn, $) {
return function (e) {
var array = typeof selector == 'string' ? $(selector, this) : selector;
for (var target = e.target; target && target != this; target = target.parentNode) {
for (var i = array.length; i--;) {
if (array[i] == target) {
return fn.apply(target, arguments);
}
}
}
};
},
add = function (element, events, fn, delfn, $) {
if (typeof events == 'object' && !fn) {
for (var type in events) {
events.hasOwnProperty(type) && add(element, type, events[type]);
}
} else {
var isDel = typeof fn == 'string', types = (isDel ? fn : events).split(' ');
fn = isDel ? del(events, delfn, $) : fn;
for (var i = types.length; i--;) {
addListener(element, types[i], fn, Array.prototype.slice.call(arguments, isDel ? 4 : 3));
}
}
return element;
},
remove = function (element, orgEvents, fn) {
var k, type, events,
isString = typeof(orgEvents) == 'string',
names = isString && orgEvents.replace(namespace, ''),
rm = removeListener,
attached = retrieveEvents(element);
if (isString && /\s/.test(orgEvents)) {
orgEvents = orgEvents.split(' ');
var i = orgEvents.length - 1;
while (remove(element, orgEvents[i]) && i--) {}
return element;
}
events = isString ? orgEvents.replace(stripName, '') : orgEvents;
if (!attached || (isString && !attached[events])) {
return element;
}
if (typeof fn == 'function') {
rm(element, events, fn);
} else if (names) {
rm(element, orgEvents);
} else {
rm = events ? rm : remove;
type = isString && events;
events = events ? (fn || attached[events] || events) : attached;
for (k in events) {
events.hasOwnProperty(k) && rm(element, type || k, events[k]);
}
}
return element;
},
fire = function (element, type, args) {
var evt, k, i, types = type.split(' ');
for (i = types.length; i--;) {
type = types[i].replace(stripName, '');
var isNative = nativeEvents[type],
isNamespace = types[i].replace(namespace, ''),
handlers = retrieveEvents(element)[type];
if (isNamespace) {
isNamespace = isNamespace.split('.');
for (k = isNamespace.length; k--;) {
handlers[isNamespace[k]] && handlers[isNamespace[k]].apply(element, args);
}
} else if (!args && element[eventSupport]) {
fireListener(isNative, type, element);
} else {
for (k in handlers) {
handlers.hasOwnProperty(k) && handlers[k].apply(element, args);
}
}
}
return element;
},
fireListener = W3C_MODEL ? function (isNative, type, element) {
evt = document.createEvent(isNative ? "HTMLEvents" : "UIEvents");
evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, context, 1);
element.dispatchEvent(evt);
} : function (isNative, type, element) {
isNative ? element.fireEvent('on' + type, document.createEventObject()) : element['_on' + type]++;
},
clone = function (element, from, type) {
var events = retrieveEvents(from), obj, k;
obj = type ? events[type] : events;
for (k in obj) {
obj.hasOwnProperty(k) && (type ? add : clone)(element, type || from, type ? obj[k] : k);
}
return element;
},
fixEvent = function (e) {
var result = {};
if (!e) {
return result;
}
var type = e.type, target = e.target || e.srcElement;
result.preventDefault = fixEvent.preventDefault(e);
result.stopPropagation = fixEvent.stopPropagation(e);
result.target = target && target.nodeType == 3 ? target.parentNode : target;
if (~type.indexOf('key')) {
result.keyCode = e.which || e.keyCode;
} else if ((/click|mouse|menu/i).test(type)) {
result.rightClick = e.which == 3 || e.button == 2;
result.pos = { x: 0, y: 0 };
if (e.pageX || e.pageY) {
result.clientX = e.pageX;
result.clientY = e.pageY;
} else if (e.clientX || e.clientY) {
result.clientX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
result.clientY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
overOut.test(type) && (result.relatedTarget = e.relatedTarget || e[(type == 'mouseover' ? 'from' : 'to') + 'Element']);
}
for (var k in e) {