UNPKG

morpheus

Version:
1,401 lines (1,215 loc) 40.7 kB
/*! * ============================================================= * Ender: open module JavaScript framework (https://ender.no.de) * Build: ender build domready qwery bonzo bowser * ============================================================= */ /*! * Ender-JS: open module JavaScript framework (client-lib) * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat) * https://ender.no.de * License MIT */ !function (context) { // a global object for node.js module compatiblity // ============================================ context['global'] = 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 '" + identifier + "' 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['$'] = context['ender'] || 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 (name, definition) { if (typeof define == 'function') define(definition) else if (typeof module != 'undefined') module.exports = definition() else this[name] = definition() }('qwery', function () { var context = this , doc = document , c, i, j, k, l, m, o, p, r, v , el, node, 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\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\]|[\s\w\+\-]*\))/ , specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g , simple = /^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/ , attr = /\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/ , pseudo = /:([\w\-]+)(\(['"]?([\s\w\+\-]+)['"]?\))?/ , dividers = new RegExp('(' + splitters.source + ')' + splittersMore.source, 'g') , tokenizr = new RegExp(splitters.source + splittersMore.source) , 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 flatten(ar) { r = [] for (i = 0, l = ar.length; i < l; i++) { if (arrayLike(ar[i])) { r = r.concat(ar[i]) } else { r.push(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 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 arrayLike(o) { return (typeof o === 'object' && isFinite(o.length)) } function normalizeRoot(root) { if (!root) return doc if (typeof root == 'string') return qwery(root)[0] if (arrayLike(root)) return root[0] return root } function qwery(selector, _root) { var root = normalizeRoot(_root) if (!root || !selector) return [] if (selector === window || isNode(selector)) { return !_root || (selector !== window && isNode(root) && isAncestor(selector, root)) ? [selector] : [] } if (selector && arrayLike(selector)) return flatten(selector) if (m = selector.match(idOnly)) return (el = doc.getElementById(m[1])) ? [el] : [] if (m = selector.match(tagOnly)) return flatten(root.getElementsByTagName(m[1])) 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 }, supportsCSS3 = function () { if (!doc.querySelector || !doc.querySelectorAll) return false try { return (doc.querySelectorAll(':nth-of-type(1)').length > 0) } catch (e) { return false } }(), select = supportsCSS3 ? function (selector, root) { if (doc.getElementsByClassName && (m = selector.match(classOnly))) { return flatten((root).getElementsByClassName(m[1])); } return flatten((root).querySelectorAll(selector)) } : function (selector, root) { selector = selector.replace(normalizr, '$1') var result = [], element, 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 old = context.qwery qwery.noConflict = function () { context.qwery = old return this } return qwery }) provide("qwery", module.exports); !function (doc, $) { var q = require('qwery') , 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] , 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, ender); }(); !function () { var module = { exports: {} }, exports = module.exports; !function (context, doc) { var fns = [], ready, ol, fn, f = false, testEl = doc.documentElement, hack = testEl.doScroll, domContentLoaded = 'DOMContentLoaded', addEventListener = 'addEventListener', onreadystatechange = 'onreadystatechange', loaded = /^loade|c/.test(doc.readyState); function flush(i) { loaded = 1; while (i = fns.shift()) { i() } } doc[addEventListener] && doc[addEventListener](domContentLoaded, fn = function () { doc.removeEventListener(domContentLoaded, fn, f); flush(); }, f); hack && doc.attachEvent(onreadystatechange, (ol = function () { if (/^c/.test(doc.readyState)) { doc.detachEvent(onreadystatechange, ol); flush(); } })); ready = hack ? function (fn) { self != top ? loaded ? fn() : fns.push(fn) : function () { try { testEl.doScroll('left'); } catch (e) { return setTimeout(function() { ready(fn) }, 50); } fn(); }() } : function (fn) { loaded ? fn() : fns.push(fn); }; (typeof module !== 'undefined') ? (module.exports = ready) : (context['domReady'] = ready); }(this, document); provide("domready", module.exports); !function ($) { var ready = require('domready') $.ender({domReady: ready}) $.ender({ ready: function (f) { ready(f) return this } }, true) }(ender); }(); !function () { var module = { exports: {} }, exports = module.exports; /*! * Bonzo: DOM Utility (c) Dustin Diaz 2011 * https://github.com/ded/bonzo * License MIT */ !function (name, definition){ if (typeof define == 'function') define(definition) else if (typeof module != 'undefined') module.exports = definition() else this[name] = definition() }('bonzo', function() { var context = this , win = window , doc = win.document , html = doc.documentElement , parentNode = 'parentNode' , query = null , specialAttributes = /^checked|value|selected$/ , specialTags = /select|fieldset|table|tbody|tfoot|td|tr|colgroup/i , table = 'table' , tagMap = { thead: table, tbody: table, tfoot: table, tr: 'tbody', th: 'tr', td: 'tr', fieldset: 'form', option: 'select' } , stateAttributes = /^checked|selected$/ , ie = /msie/i.test(navigator.userAgent) , uidList = [] , uuids = 0 , digit = /^-?[\d\.]+$/ , px = 'px' // commonly used methods , setAttribute = 'setAttribute' , getAttribute = 'getAttribute' , trimReplace = /(^\s*|\s*$)/g , unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1 } , transform = function () { var props = ['webkitTransform', 'MozTransform', 'OTransform', 'msTransform', 'Transform'], i for (i = 0; i < props.length; i++) { if (props[i] in doc.createElement('a').style) { return props[i] } } }() , trim = String.prototype.trim ? function (s) { return s.trim() } : function (s) { return s.replace(trimReplace, '') } function classReg(c) { return new RegExp("(^|\\s+)" + c + "(\\s+|$)") } function each(ar, fn, scope) { for (var i = 0, l = ar.length; i < l; i++) fn.call(scope || ar[i], ar[i], i, ar) return ar } function camelize(s) { return s.replace(/-(.)/g, function (m, m1) { return m1.toUpperCase() }) } function is(node) { return node && node.nodeName && node.nodeType == 1 } function some(ar, fn, scope, i) { for (i = 0, j = ar.length; i < j; ++i) { if (fn.call(scope, ar[i], i, ar)) { return true } } return false } var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ? function (el, property) { property = property == 'transform' ? transform : property property = property == 'transform-origin' ? transform + "Origin" : property var value = null if (property == 'float') { property = 'cssFloat' } var computed = doc.defaultView.getComputedStyle(el, '') computed && (value = computed[camelize(property)]) return el.style[property] || value } : (ie && html.currentStyle) ? function (el, property) { property = camelize(property) property = property == 'float' ? 'styleFloat' : property if (property == 'opacity') { var val = 100 try { val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity } catch (e1) { try { val = el.filters('alpha').opacity } catch (e2) {} } return val / 100 } var value = el.currentStyle ? el.currentStyle[property] : null return el.style[property] || value } : function (el, property) { return el.style[camelize(property)] } function insert(target, host, fn) { var i = 0, self = host || this, r = [] , nodes = query && typeof target == 'string' && target.charAt(0) != '<' ? function (n) { return (n = query(target)) && (n.selected = 1) && n }() : target each(normalize(nodes), function (t) { each(self, function (el) { var n = !el[parentNode] || (el[parentNode] && !el[parentNode][parentNode]) ? function () { var c = el.cloneNode(true) self.$ && self.cloneEvents && self.$(c).cloneEvents(el) return c; }() : el fn(t, n) r[i] = n i++ }); }, this) each(r, function (e, i) { self[i] = e }) self.length = i return self } function xy(el, x, y) { var $el = bonzo(el) , style = $el.css('position') , offset = $el.offset() , rel = 'relative' , isRel = style == rel , delta = [parseInt($el.css('left'), 10), parseInt($el.css('top'), 10)] if (style == 'static') { $el.css('position', rel) style = rel } isNaN(delta[0]) && (delta[0] = isRel ? 0 : el.offsetLeft) isNaN(delta[1]) && (delta[1] = isRel ? 0 : el.offsetTop) x != null && (el.style.left = x - offset.left + delta[0] + px) y != null && (el.style.top = y - offset.top + delta[1] + px) } function hasClass(el, c) { return classReg(c).test(el.className) } function addClass(el, c) { el.className = trim(el.className + ' ' + c) } function removeClass(el, c) { el.className = trim(el.className.replace(classReg(c), ' ')) } function Bonzo(elements) { this.length = 0 if (elements) { elements = typeof elements !== 'string' && !elements.nodeType && typeof elements.length !== 'undefined' ? elements : [elements] this.length = elements.length for (var i = 0; i < elements.length; i++) { this[i] = elements[i] } } } Bonzo.prototype = { get: function (index) { return this[index] } , each: function (fn, scope) { return each(this, fn, scope) } , map: function (fn, reject) { var m = [], n, i for (i = 0; i < this.length; i++) { n = fn.call(this, this[i], i) reject ? (reject(n) && m.push(n)) : m.push(n) } return m } , first: function () { return bonzo(this[0]) } , last: function () { return bonzo(this[this.length - 1]) } , html: function (h, text) { var method = text ? html.textContent === null ? 'innerText' : 'textContent' : 'innerHTML', m; function append(el) { while (el.firstChild) el.removeChild(el.firstChild) each(normalize(h), function (node) { el.appendChild(node) }) } return typeof h !== 'undefined' ? this.each(function (el) { (m = el.tagName.match(specialTags)) ? append(el, m[0]) : (el[method] = h) }) : this[0] ? this[0][method] : '' } , text: function (text) { return this.html(text, 1) } , addClass: function (c) { return this.each(function (el) { hasClass(el, c) || addClass(el, c) }) } , removeClass: function (c) { return this.each(function (el) { hasClass(el, c) && removeClass(el, c) }) } , hasClass: function (c) { return some(this, function (el) { return hasClass(el, c) }) } , toggleClass: function (c, condition) { return this.each(function (el) { typeof condition !== 'undefined' ? condition ? addClass(el, c) : removeClass(el, c) : hasClass(el, c) ? removeClass(el, c) : addClass(el, c) }) } , show: function (type) { return this.each(function (el) { el.style.display = type || '' }) } , hide: function (elements) { return this.each(function (el) { el.style.display = 'none' }) } , append: function (node) { return this.each(function (el) { each(normalize(node), function (i) { el.appendChild(i) }) }) } , prepend: function (node) { return this.each(function (el) { var first = el.firstChild each(normalize(node), function (i) { el.insertBefore(i, first) }) }) } , appendTo: function (target, host) { return insert.call(this, target, host, function (t, el) { t.appendChild(el) }) } , prependTo: function (target, host) { return insert.call(this, target, host, function (t, el) { t.insertBefore(el, t.firstChild) }) } , next: function () { return this.related('nextSibling') } , previous: function () { return this.related('previousSibling') } , related: function (method) { return this.map( function (el) { el = el[method] while (el && el.nodeType !== 1) { el = el[method] } return el || 0 }, function (el) { return el } ) } , before: function (node) { return this.each(function (el) { each(bonzo.create(node), function (i) { el[parentNode].insertBefore(i, el) }) }) } , after: function (node) { return this.each(function (el) { each(bonzo.create(node), function (i) { el[parentNode].insertBefore(i, el.nextSibling) }) }) } , insertBefore: function (target, host) { return insert.call(this, target, host, function (t, el) { t[parentNode].insertBefore(el, t) }) } , insertAfter: function (target, host) { return insert.call(this, target, host, function (t, el) { var sibling = t.nextSibling if (sibling) { t[parentNode].insertBefore(el, sibling); } else { t[parentNode].appendChild(el) } }) } , css: function (o, v, p) { // is this a request for just getting a style? if (v === undefined && typeof o == 'string') { // repurpose 'v' v = this[0]; if (!v) { return null } if (v == doc || v == win) { p = (v == doc) ? bonzo.doc() : bonzo.viewport() return o == 'width' ? p.width : o == 'height' ? p.height : '' } return getStyle(v, o) } var iter = o if (typeof o == 'string') { iter = {} iter[o] = v } if (ie && iter.opacity) { // oh this 'ol gamut iter.filter = 'alpha(opacity=' + (iter.opacity * 100) + ')' // give it layout iter.zoom = o.zoom || 1; delete iter.opacity; } if (v = iter['float']) { // float is a reserved style word. w3 uses cssFloat, ie uses styleFloat ie ? (iter.styleFloat = v) : (iter.cssFloat = v); delete iter['float']; } function fn(el, p, v) { for (var k in iter) { if (iter.hasOwnProperty(k)) { v = iter[k]; // change "5" to "5px" - unless you're line-height, which is allowed (p = camelize(k)) && digit.test(v) && !(p in unitless) && (v += px) p = p == 'transform' ? transform : p p = p == 'transformOrigin' ? transform + 'Origin' : p el.style[p] = v } } } return this.each(fn) } , offset: function (x, y) { if (typeof x == 'number' || typeof y == 'number') { return this.each(function (el) { xy(el, x, y) }) } var el = this[0] , width = el.offsetWidth , height = el.offsetHeight , top = el.offsetTop , left = el.offsetLeft while (el = el.offsetParent) { top = top + el.offsetTop left = left + el.offsetLeft } return { top: top , left: left , height: height , width: width } } , attr: function (k, v) { var el = this[0] if (typeof k != 'string' && !(k instanceof String)) { for (var n in k) { k.hasOwnProperty(n) && this.attr(n, k[n]) } return this } return typeof v == 'undefined' ? specialAttributes.test(k) ? stateAttributes.test(k) && typeof el[k] == 'string' ? true : el[k] : el[getAttribute](k) : this.each(function (el) { k == 'value' ? (el.value = v) : el[setAttribute](k, v) }) } , val: function (s) { return (typeof s == 'string') ? this.attr('value', s) : this[0].value } , removeAttr: function (k) { return this.each(function (el) { el.removeAttribute(k) }) } , data: function (k, v) { var el = this[0] if (typeof v === 'undefined') { el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids) var uid = el[getAttribute]('data-node-uid') uidList[uid] || (uidList[uid] = {}) return uidList[uid][k] } else { return this.each(function (el) { el[getAttribute]('data-node-uid') || el[setAttribute]('data-node-uid', ++uuids) var uid = el[getAttribute]('data-node-uid') , o = uidList[uid] || (uidList[uid] = {}) o[k] = v }) } } , remove: function () { return this.each(function (el) { el[parentNode] && el[parentNode].removeChild(el) }) } , empty: function () { return this.each(function (el) { while (el.firstChild) { el.removeChild(el.firstChild) } }) } , detach: function () { return this.map(function (el) { return el[parentNode].removeChild(el) }) } , scrollTop: function (y) { return scroll.call(this, null, y, 'y') } , scrollLeft: function (x) { return scroll.call(this, x, null, 'x') } , toggle: function(callback) { this.each(function (el) { el.style.display = (el.offsetWidth || el.offsetHeight) ? 'none' : 'block' }) callback && callback() return this } } function normalize(node) { return typeof node == 'string' ? bonzo.create(node) : is(node) ? [node] : node // assume [nodes] } function scroll(x, y, type) { var el = this[0] if (x == null && y == null) { return (isBody(el) ? getWindowScroll() : { x: el.scrollLeft, y: el.scrollTop })[type] } if (isBody(el)) { win.scrollTo(x, y) } else { x != null && (el.scrollLeft = x) y != null && (el.scrollTop = y) } return this } function isBody(element) { return element === win || (/^(?:body|html)$/i).test(element.tagName) } function getWindowScroll() { return { x: win.pageXOffset || html.scrollLeft, y: win.pageYOffset || html.scrollTop } } function bonzo(els, host) { return new Bonzo(els, host) } bonzo.setQueryEngine = function (q) { query = q; delete bonzo.setQueryEngine } bonzo.aug = function (o, target) { for (var k in o) { o.hasOwnProperty(k) && ((target || Bonzo.prototype)[k] = o[k]) } } bonzo.create = function (node) { return typeof node == 'string' ? function () { var tag = /^<([^\s>]+)/.exec(node) , el = doc.createElement(tag && tagMap[tag[1].toLowerCase()] || '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 }() : is(node) ? [node.cloneNode(true)] : [] } bonzo.doc = function () { var vp = this.viewport() return { width: Math.max(doc.body.scrollWidth, html.scrollWidth, vp.width) , height: Math.max(doc.body.scrollHeight, html.scrollHeight, vp.height) } } bonzo.firstChild = function (el) { for (var c = el.childNodes, i = 0, j = (c && c.length) || 0, e; i < j; i++) { if (c[i].nodeType === 1) { e = c[j = i] } } return e } bonzo.viewport = function () { return { width: ie ? html.clientWidth : self.innerWidth , height: ie ? html.clientHeight : self.innerHeight } } bonzo.isAncestor = 'compareDocumentPosition' in html ? function (container, element) { return (container.compareDocumentPosition(element) & 16) == 16 } : 'contains' in html ? function (container, element) { return container !== element && container.contains(element); } : function (container, element) { while (element = element[parentNode]) { if (element === container) { return true } } return false } var old = context.bonzo bonzo.noConflict = function () { context.bonzo = old return this } return bonzo }) provide("bonzo", module.exports); !function ($) { var b = require('bonzo') b.setQueryEngine($) $.ender(b) $.ender(b(), true) $.ender({ create: function (node) { return $(b.create(node)) } }) $.id = function (id) { return $([document.getElementById(id)]) } function indexOf(ar, val) { for (var i = 0; i < ar.length; i++) { if (ar[i] === val) { return i } } return -1 } 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 } $.ender({ parents: function (selector, closest) { var collection = $(selector), j, k, p, r = [] for (j = 0, k = this.length; j < k; j++) { p = this[j] while (p = p.parentNode) { if (indexOf(collection, p) !== -1) { r.push(p) if (closest) break; } } } return $(uniq(r)) }, closest: function (selector) { return this.parents(selector, true) }, first: function () { return $(this[0]) }, last: function () { return $(this[this.length - 1]) }, next: function () { return $(b(this).next()) }, previous: function () { return $(b(this).previous()) }, appendTo: function (t) { return b(this.selector).appendTo(t, this) }, prependTo: function (t) { return b(this.selector).prependTo(t, this) }, insertAfter: function (t) { return b(this.selector).insertAfter(t, this) }, insertBefore: function (t) { return b(this.selector).insertBefore(t, this) }, siblings: function () { var i, l, p, r = [] for (i = 0, l = this.length; i < l; i++) { p = this[i] while (p = p.previousSibling) { p.nodeType == 1 && r.push(p) } p = this[i] while (p = p.nextSibling) { p.nodeType == 1 && r.push(p) } } return $(r) }, children: function () { var i, el, r = [] for (i = 0, l = this.length; i < l; i++) { if (!(el = b.firstChild(this[i]))) { continue; } r.push(el); while (el = el.nextSibling) el.nodeType == 1 && r.push(el) } return $(uniq(r)) }, height: function (v) { return dimension(v, this, 'height') }, width: function (v) { return dimension(v, this, 'width') } }, true) function dimension(v, self, which) { return v ? self.css(which, v) : function (r) { r = parseInt(self.css(which), 10); return isNaN(r) ? self[0]['offset' + which.replace(/^\w/, function (m) {return m.toUpperCase()})] : r }() } }(ender); }(); !function () { var module = { exports: {} }, exports = module.exports; /*! * Bowser - a browser detector * copyright Dustin Diaz 2011 * https://github.com/ded/bowser * MIT License */ /*! * Bowser - a browser detector * copyright Dustin Diaz 2011 * https://github.com/ded/bowser * MIT License */ !function (context) { /** * navigator.userAgent => * Chrome: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.57 Safari/534.24" * Opera: "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.7; U; en) Presto/2.7.62 Version/11.01" * Safari: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1" * IE: "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)" * Firefox: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0) Gecko/20100101 Firefox/4.0" */ var ua = navigator.userAgent, ie = /msie/i.test(ua), chrome = /chrome/i.test(ua), safari = /safari/i.test(ua) && !chrome, opera = /opera/i.test(ua), firefox = /firefox/i.test(ua), gecko = /gecko\//i.test(ua); function detect() { if (ie) { return { msie: 1, version: ua.match(/msie (\d+(\.\d+)?);/i)[1] }; } if (chrome) { return { webkit: 1, chrome: 1, version: ua.match(/chrome\/(\d+(\.\d+)?)/i)[1] }; } if (safari) { return { webkit: 1, safari: 1, version: ua.match(/version\/(\d+(\.\d+)?)/i)[1] }; } if (opera) { return { opera: 1, version: ua.match(/version\/(\d+(\.\d+)?)/i)[1] }; } if (gecko) { var o = { gecko: 1, version: ua.match(/firefox\/(\d+(\.\d+)?)/i)[1] }; if (firefox) { o.firefox = 1; } return o; } } var bowser = detect(); // Graded Browser Support // http://developer.yahoo.com/yui/articles/gbs if ((bowser.msie && bowser.version >= 6) || (bowser.chrome && bowser.version >= 8) || (bowser.firefox && bowser.version >= 3.6) || (bowser.safari && bowser.version >= 5) || (bowser.opera && bowser.version >= 9.5)) { bowser.a = true; } else if ((bowser.msie && bowser.version < 6) || (bowser.chrome && bowser.version < 8) || (bowser.firefox && bowser.version < 3.6) || (bowser.safari && bowser.version < 5) || (bowser.opera && bowser.version < 9.5)) { bowser.c = true; } else { bowser.x = true; } typeof module !== 'undefined' && module.exports ? (module.exports.browser = bowser) : (context.bowser = bowser); }(this); provide("bowser", module.exports); $.ender(module.exports); }();