UNPKG

emile

Version:

no-thrills stand-alone CSS animation JavaScript framework

362 lines (331 loc) 10.2 kB
/*! * Ender.js: a small, powerful JavaScript library composed of application agnostic submodules * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat) * https://github.com/ded/Ender.js * License MIT */ !function (context) { function aug(o, o2) { for (var k in o2) { o[k] = o2[k]; } } function _$(s, r) { this.elements = $._select(s, r); this.length = this.elements.length; for (var i = 0; i < this.length; i++) { this[i] = this.elements[i]; } } function $(s, r) { return new _$(s, r); } aug($, { ender: function (o, proto) { aug(proto ? _$.prototype : $, o); }, _select: function () { return []; } }); var old = context.$; $.noConflict = function () { context.$ = old; return this; }; (typeof module !== 'undefined') && module.exports ? (module.exports = $) : (context.$ = $); }(this); !function () { var module = { exports: {} }; !function (doc) { var loaded = 0, fns = [], ol, f = false, testEl = doc.createElement('a'), domContentLoaded = 'DOMContentLoaded', addEventListener = 'addEventListener', onreadystatechange = 'onreadystatechange'; function flush() { loaded = 1; for (var i = 0, l = fns.length; i < l; i++) { fns[i](); } } doc[addEventListener] && doc[addEventListener](domContentLoaded, function fn() { doc.removeEventListener(domContentLoaded, fn, f); flush(); }, f); testEl.doScroll && doc.attachEvent(onreadystatechange, (ol = function ol() { if (/^c/.test(doc.readyState)) { doc.detachEvent(onreadystatechange, ol); flush(); } })); var domReady = testEl.doScroll ? function (fn) { self != top ? !loaded ? fns.push(fn) : fn() : !function () { try { testEl.doScroll('left'); } catch (e) { return setTimeout(function() { domReady(fn); }, 50); } fn(); }(); } : function (fn) { loaded ? fn() : fns.push(fn); }; (typeof module !== 'undefined') && module.exports ? (module.exports = {domReady: domReady}) : (window.domReady = domReady); }(document); $.ender(module.exports); }(); /*! * qwery.js - copyright @dedfat * https://github.com/ded/qwery * Follow our software http://twitter.com/dedfat * MIT License */ !function (context, doc) { var c, i, j, k, l, m, o, p, r, v, el, node, len, found, classes, item, items, token, collection, id = /#([\w\-]+)/, clas = /\.[\w\-]+/g, idOnly = /^#([\w\-]+$)/, classOnly = /^\.([\w\-]+)$/, tagOnly = /^([\w\-]+)$/, tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/, html = doc.documentElement, tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/, simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/, attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/, chunker = new RegExp(simple.source + '(' + attr.source + ')?'); function array(ar) { r = []; for (i = 0, len = ar.length; i < len; i++) { r[i] = ar[i]; } return r; } var cache = function () { this.c = {}; }; cache.prototype = { g: function (k) { return this.c[k] || undefined; }, s: function (k, v) { this.c[k] = v; return v; } }; var classCache = new cache(), cleanCache = new cache(), attrCache = new cache(), tokenCache = new cache(); function q(query) { return query.match(chunker); } function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value) { var m, c, k; if (tag && this.tagName.toLowerCase() !== tag) { return false; } if (idsAndClasses && (m = idsAndClasses.match(id)) && m[1] !== this.id) { return false; } if (idsAndClasses && (classes = idsAndClasses.match(clas))) { for (i = classes.length; i--;) { c = classes[i].slice(1); if (!(classCache.g(c) || classCache.s(c, new RegExp('(^|\\s+)' + c + '(\\s+|$)'))).test(this.className)) { return false; } } } if (wholeAttribute && !value) { o = this.attributes; for (k in o) { if (Object.prototype.hasOwnProperty.call(o, k) && (o[k].name || k) == attribute) { return this; } } } if (wholeAttribute && !checkAttr(qualifier, this.getAttribute(attribute) || '', value)) { return false; } return this; } function loopAll(tokens) { var r = [], token = tokens.pop(), intr = q(token), tag = intr[1] || '*', i, l, els, root = tokens.length && (m = tokens[0].match(idOnly)) ? doc.getElementById(m[1]) : doc; if (!root) { return r; } els = root.getElementsByTagName(tag); for (i = 0, l = els.length; i < l; i++) { el = els[i]; if (item = interpret.apply(el, intr)) { r.push(item); } } return r; } function clean(s) { return cleanCache.g(s) || cleanCache.s(s, s.replace(/([.*+?\^=!:${}()|\[\]\/\\])/g, '\\$1')); } function checkAttr(qualify, actual, val) { switch (qualify) { case '=': return actual == val; case '^=': return actual.match(attrCache.g('^=' + val) || attrCache.s('^=' + val, new RegExp('^' + clean(val)))); case '$=': return actual.match(attrCache.g('$=' + val) || attrCache.s('$=' + val, new RegExp(clean(val) + '$'))); case '*=': return actual.match(attrCache.g(val) || attrCache.s(val, new RegExp(clean(val)))); case '~=': return actual.match(attrCache.g('~=' + val) || attrCache.s('~=' + val, new RegExp('(?:^|\\s+)' + clean(val) + '(?:\\s+|$)'))); case '|=': return actual.match(attrCache.g('|=' + val) || attrCache.s('|=' + val, new RegExp('^' + clean(val) + '(-|$)'))); } return false; } function _qwery(selector) { var r = [], ret = [], i, l, tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr)); tokens = tokens.slice(0); if (!tokens.length) { return r; } r = loopAll(tokens); if (!tokens.length) { return r; } // loop through all descendent tokens for (j = 0, l = r.length, k = 0; j < l; j++) { node = r[j]; p = node; // loop through each token for (i = tokens.length; i--;) { z: // loop through parent nodes while (p !== html && (p = p.parentNode)) { if (found = interpret.apply(p, q(tokens[i]))) { break z; } } } found && (ret[k++] = node); } return ret; } var isAncestor = 'compareDocumentPosition' in html ? function (element, container) { return (container.compareDocumentPosition(element) & 16) == 16; } : 'contains' in html ? function (element, container) { return container !== element && container.contains(element); } : function (element, container) { while (element = element.parentNode) { if (element === container) { return 1; } } return 0; }; function boilerPlate(selector, _root, fn) { var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc); if (isNode(selector)) { return !_root || (isNode(root) && isAncestor(selector, root)) ? [selector] : []; } if (selector && typeof selector === 'object' && selector.length && isFinite(selector.length)) { return array(selector); } if (m = selector.match(idOnly)) { return (el = doc.getElementById(m[1])) ? [el] : []; } if (m = selector.match(tagOnly)) { return array(root.getElementsByTagName(m[1])); } return false; } function isNode(el) { return (el === window || el && el.nodeType && el.nodeType.toString().match(/[19]/)); } function qsa(selector, _root) { var root = (typeof _root == 'string') ? qsa(_root)[0] : (_root || doc); if (!root) { return []; } if (m = boilerPlate(selector, _root, qsa)) { return m; } if (doc.getElementsByClassName && (m = selector.match(classOnly))) { return array((root).getElementsByClassName(m[1])); } return array((root).querySelectorAll(selector)); } function uniq(ar) { var a = [], i, j; label: for (i = 0; i < ar.length; i++) { for (j = 0; j < a.length; j++) { if (a[j] == ar[i]) { continue label; } } a[a.length] = ar[i]; } return a; } var qwery = function () { // return fast. boosh. if (doc.querySelector && doc.querySelectorAll) { return qsa; } return function (selector, _root) { var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc); if (!root) { return []; } var i, l, result = [], collections = [], element; if (m = boilerPlate(selector, _root, qwery)) { return m; } if (m = selector.match(tagAndOrClass)) { items = root.getElementsByTagName(m[1] || '*'); r = classCache.g(m[2]) || classCache.s(m[2], new RegExp('(^|\\s+)' + m[2] + '(\\s+|$)')); for (i = 0, l = items.length, j = 0; i < l; i++) { r.test(items[i].className) && (result[j++] = items[i]); } return result; } for (i = 0, items = selector.split(','), l = items.length; i < l; i++) { collections[i] = _qwery(items[i]); } for (i = 0, l = collections.length; i < l && (collection = collections[i]); i++) { var ret = collection; if (root !== doc) { ret = []; for (j = 0, m = collection.length; j < m && (element = collection[j]); j++) { // make sure element is a descendent of root isAncestor(element, root) && ret.push(element); } } result = result.concat(ret); } return uniq(result); }; }(); // being nice var oldQwery = context.qwery; qwery.noConflict = function () { context.qwery = oldQwery; return this; }; context.qwery = qwery; }(this, document); $._select = qwery.noConflict();