| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- /*!
- * =======================================================
- * Ender: open module JavaScript framework
- * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
- * https://ender.no.de
- * License MIT
- * Module's individual licenses still apply
- * Build: ender build qwery
- * =======================================================
- */
- /*!
- * Ender-JS: open module JavaScript framework (client-lib)
- * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
- * https://ender.no.de
- * License MIT
- */
- !function (context) {
- // Implements simple module system
- // losely based on CommonJS Modules spec v1.1.1
- // ============================================
- var modules = {};
- function require (identifier) {
- var module = modules[identifier] || window[identifier];
- if (!module) throw new Error("Requested module has not been defined.");
- return module;
- }
- function provide (name, what) {
- return modules[name] = what;
- }
- context['provide'] = provide;
- context['require'] = require;
- // Implements Ender's $ global access object
- // =========================================
- function aug(o, o2) {
- for (var k in o2) {
- k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
- }
- return o;
- }
- function boosh(s, r, els) {
- // string || node || nodelist || window
- 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.5',
- ender: function (o, chain) {
- aug(chain ? boosh : ender, o);
- },
- fn: context.$ && context.$.fn || {} // for easy compat to jQuery plugins
- });
- aug(boosh, {
- forEach: function (fn, scope, i) {
- // opt out of native forEach so we can intentionally call our own scope
- // defaulting to the current item and be able to return self
- for (i = 0, l = this.length; i < l; ++i) {
- i in this && fn.call(scope || this[i], this[i], i, this);
- }
- // return self for chaining
- return this;
- },
- $: ender // handy reference to self
- });
- var old = context.$;
- ender.noConflict = function () {
- context.$ = old;
- return this;
- };
- (typeof module !== 'undefined') && module.exports && (module.exports = ender);
- // use subscript notation as extern for Closure compilation
- context['ender'] = context['$'] = ender;
- }(this);
- !function () {
- var module = { exports: {} }, exports = module.exports;
- /*!
- * Qwery - A Blazing Fast query selector engine
- * https://github.com/ded/qwery
- * copyright Dustin Diaz & Jacob Thornton 2011
- * MIT License
- */
-
- !function (context, doc) {
-
- var c, i, j, k, l, m, o, p, r, v,
- el, node, len, found, classes, item, items, token,
- html = doc.documentElement,
- id = /#([\w\-]+)/,
- clas = /\.[\w\-]+/g,
- idOnly = /^#([\w\-]+$)/,
- classOnly = /^\.([\w\-]+)$/,
- tagOnly = /^([\w\-]+)$/,
- tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/,
- normalizr = /\s*([\s\+\~>])\s*/g,
- splitters = /[\s\>\+\~]/,
- splittersMore = /(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,
- dividers = new RegExp('(' + splitters.source + ')' + splittersMore.source, 'g'),
- tokenizr = new RegExp(splitters.source + splittersMore.source),
- specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g,
- simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,
- attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,
- pseudo = /:([\w\-]+)(\(['"]?(\w+)['"]?\))?/,
- chunker = new RegExp(simple.source + '(' + attr.source + ')?' + '(' + pseudo.source + ')?'),
- walker = {
- ' ': function (node) {
- return node && node !== html && node.parentNode
- },
- '>': function (node, contestant) {
- return node && node.parentNode == contestant.parentNode && node.parentNode;
- },
- '~': function (node) {
- return node && node.previousSibling;
- },
- '+': function (node, contestant, p1, p2) {
- if (!node) {
- return false;
- }
- p1 = previous(node);
- p2 = previous(contestant);
- return p1 && p2 && p1 == p2 && p1;
- }
- };
- function cache() {
- 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 array(ar) {
- r = [];
- for (i = 0, len = ar.length; i < len; i++) {
- r[i] = ar[i];
- }
- return r;
- }
-
- function previous(n) {
- while (n = n.previousSibling) {
- if (n.nodeType == 1) {
- break;
- }
- }
- return n
- }
-
- function q(query) {
- return query.match(chunker);
- }
-
- // this next method expect at most these args
- // given => div.hello[title="world"]:foo('bar')
-
- // div.hello[title="world"]:foo('bar'), div, .hello, [title="world"], title, =, world, :foo('bar'), foo, ('bar'), bar]
-
- function interpret(whole, tag, idsAndClasses, wholeAttribute, attribute, qualifier, value, wholePseudo, pseudo, wholePseudoVal, pseudoVal) {
- 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 (pseudo && qwery.pseudos[pseudo] && !qwery.pseudos[pseudo](this, pseudoVal)) {
- 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 clean(s) {
- return cleanCache.g(s) || cleanCache.s(s, s.replace(specialChars, '\\$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 0;
- }
-
- function _qwery(selector) {
- var r = [], ret = [], i, j = 0, k, l, m, p, token, tag, els, root, intr, item, children,
- tokens = tokenCache.g(selector) || tokenCache.s(selector, selector.split(tokenizr)),
- dividedTokens = selector.match(dividers), dividedToken;
- tokens = tokens.slice(0); // this makes a copy of the array so the cached original is not effected
- if (!tokens.length) {
- return r;
- }
-
- token = tokens.pop();
- root = tokens.length && (m = tokens[tokens.length - 1].match(idOnly)) ? doc.getElementById(m[1]) : doc;
- if (!root) {
- return r;
- }
- intr = q(token);
- els = dividedTokens && /^[+~]$/.test(dividedTokens[dividedTokens.length - 1]) ? function (r) {
- while (root = root.nextSibling) {
- root.nodeType == 1 && (intr[1] ? intr[1] == root.tagName.toLowerCase() : 1) && r.push(root)
- }
- return r
- }([]) :
- root.getElementsByTagName(intr[1] || '*');
- for (i = 0, l = els.length; i < l; i++) {
- if (item = interpret.apply(els[i], intr)) {
- r[j++] = item;
- }
- }
- if (!tokens.length) {
- return r;
- }
-
- // loop through all descendent tokens
- for (j = 0, l = r.length, k = 0; j < l; j++) {
- p = r[j];
- // loop through each token backwards crawling up tree
- for (i = tokens.length; i--;) {
- // loop through parent nodes
- while (p = walker[dividedTokens[i]](p, r[j])) {
- if (found = interpret.apply(p, q(tokens[i]))) {
- break;
- }
- }
- }
- found && (ret[k++] = r[j]);
- }
- return ret;
- }
-
- function boilerPlate(selector, _root, fn) {
- var root = (typeof _root == 'string') ? fn(_root)[0] : (_root || doc);
- if (selector === window || isNode(selector)) {
- return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : [];
- }
- if (selector && typeof selector === 'object' && 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 && el.nodeType && (el.nodeType == 1 || el.nodeType == 9));
- }
-
- 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;
- }
-
- function qwery(selector, _root) {
- var root = (typeof _root == 'string') ? qwery(_root)[0] : (_root || doc);
- if (!root || !selector) {
- return [];
- }
- if (m = boilerPlate(selector, _root, qwery)) {
- return m;
- }
- return select(selector, root);
- }
-
- var isAncestor = 'compareDocumentPosition' in html ?
- function (element, container) {
- return (container.compareDocumentPosition(element) & 16) == 16;
- } : 'contains' in html ?
- function (element, container) {
- container = container == doc || container == window ? html : container;
- return container !== element && container.contains(element);
- } :
- function (element, container) {
- while (element = element.parentNode) {
- if (element === container) {
- return 1;
- }
- }
- return 0;
- },
-
- select = (doc.querySelector && doc.querySelectorAll) ?
- function (selector, root) {
- if (doc.getElementsByClassName && (m = selector.match(classOnly))) {
- return array((root).getElementsByClassName(m[1]));
- }
- return array((root).querySelectorAll(selector));
- } :
- function (selector, root) {
- selector = selector.replace(normalizr, '$1');
- var result = [], collection, collections = [], i;
- 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);
- };
-
- qwery.uniq = uniq;
- qwery.pseudos = {};
-
- var oldQwery = context.qwery;
- qwery.noConflict = function () {
- context.qwery = oldQwery;
- return this;
- };
- context['qwery'] = qwery;
-
- }(this, document);
- provide("qwery", module.exports);
- !function (doc) {
- var q = qwery.noConflict();
- var table = 'table',
- nodeMap = {
- thead: table,
- tbody: table,
- tfoot: table,
- tr: 'tbody',
- th: 'tr',
- td: 'tr',
- fieldset: 'form',
- option: 'select'
- }
- function create(node, root) {
- var tag = /^<([^\s>]+)/.exec(node)[1]
- var el = (root || doc).createElement(nodeMap[tag] || 'div'), els = [];
- el.innerHTML = node;
- var nodes = el.childNodes;
- el = el.firstChild;
- els.push(el);
- while (el = el.nextSibling) {
- (el.nodeType == 1) && els.push(el);
- }
- return els;
- }
- $._select = function (s, r) {
- return /^\s*</.test(s) ? create(s, r) : q(s, r);
- };
- $.pseudos = q.pseudos;
- $.ender({
- find: function (s) {
- var r = [], i, l, j, k, els;
- for (i = 0, l = this.length; i < l; i++) {
- els = q(s, this[i]);
- for (j = 0, k = els.length; j < k; j++) {
- r.push(els[j]);
- }
- }
- return $(q.uniq(r));
- }
- , and: function (s) {
- var plus = $(s);
- for (var i = this.length, j = 0, l = this.length + plus.length; i < l; i++, j++) {
- this[i] = plus[j];
- }
- return this;
- }
- }, true);
- }(document);
- }();
|