diff options
Diffstat (limited to 'source/javascripts')
-rw-r--r-- | source/javascripts/libs/ender.js | 1497 | ||||
-rw-r--r-- | source/javascripts/libs/ender.min.js | 8 | ||||
-rw-r--r-- | source/javascripts/libs/ie/DOMAssistantComplete-2.8.js | 1529 | ||||
-rw-r--r-- | source/javascripts/libs/ie/respond.js | 292 | ||||
-rw-r--r-- | source/javascripts/libs/ie/selectivizr-1.0.1.js | 5 | ||||
-rw-r--r-- | source/javascripts/libs/ios-viewport-scaling-bug-fix.js | 20 | ||||
-rw-r--r-- | source/javascripts/libs/jXHR.js | 85 | ||||
-rw-r--r-- | source/javascripts/libs/json2.js | 481 | ||||
-rw-r--r-- | source/javascripts/libs/modernizr-1.7.js | 964 | ||||
-rw-r--r-- | source/javascripts/octopress.js | 0 | ||||
-rw-r--r-- | source/javascripts/pinboard.js | 48 | ||||
-rw-r--r-- | source/javascripts/syntax-helper.js | 30 | ||||
-rw-r--r-- | source/javascripts/twitter.js | 64 |
13 files changed, 0 insertions, 5023 deletions
diff --git a/source/javascripts/libs/ender.js b/source/javascripts/libs/ender.js deleted file mode 100644 index 5e56fd89..00000000 --- a/source/javascripts/libs/ender.js +++ /dev/null @@ -1,1497 +0,0 @@ -/*! - * Ender: open module JavaScript framework - * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat) - * https://ender.no.de - * License MIT - * Build: ender -b jeesh - */ -!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) { //string || node || nodelist || 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) { - // opt out of native forEach so we can intentionally call our own scope - // defaulting to the current item - for (var 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; - } - }); - - 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); -/*! - * bean.js - copyright Jacob Thornton 2011 - * https://github.com/fat/bean - * MIT License - * special thanks to: - * dean edwards: http://dean.edwards.name/ - * dperini: https://github.com/dperini/nwevents - * the entire mootools team: github.com/mootools/mootools-core - */ -!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) { - if (!(k in result)) { - result[k] = e[k]; - } - } - return result; - }; - - fixEvent.preventDefault = function (e) { - return function () { - if (e.preventDefault) { - e.preventDefault(); - } - else { - e.returnValue = false; - } - }; - }; - - fixEvent.stopPropagation = function (e) { - return function () { - if (e.stopPropagation) { - e.stopPropagation(); - } else { - e.cancelBubble = true; - } - }; - }; - - var nativeEvents = { click: 1, dblclick: 1, mouseup: 1, mousedown: 1, contextmenu: 1, //mouse buttons - mousewheel: 1, DOMMouseScroll: 1, //mouse wheel - mouseover: 1, mouseout: 1, mousemove: 1, selectstart: 1, selectend: 1, //mouse movement - keydown: 1, keypress: 1, keyup: 1, //keyboard - orientationchange: 1, // mobile - touchstart: 1, touchmove: 1, touchend: 1, touchcancel: 1, // touch - gesturestart: 1, gesturechange: 1, gestureend: 1, // gesture - focus: 1, blur: 1, change: 1, reset: 1, select: 1, submit: 1, //form elements - load: 1, unload: 1, beforeunload: 1, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window - error: 1, abort: 1, scroll: 1 }; //misc - - function check(event) { - var related = event.relatedTarget; - if (!related) { - return related == null; - } - return (related != this && related.prefix != 'xul' && !/document/.test(this.toString()) && !isDescendant(this, related)); - } - - var customEvents = { - mouseenter: { base: 'mouseover', condition: check }, - mouseleave: { base: 'mouseout', condition: check }, - mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' } - }; - - var bean = { add: add, remove: remove, clone: clone, fire: fire }; - - var clean = function (el) { - var uid = remove(el).__uid; - if (uid) { - delete collected[uid]; - delete registry[uid]; - } - }; - - if (context[attachEvent]) { - add(context, 'unload', function () { - for (var k in collected) { - collected.hasOwnProperty(k) && clean(collected[k]); - } - context.CollectGarbage && CollectGarbage(); - }); - } - - var oldBean = context.bean; - bean.noConflict = function () { - context.bean = oldBean; - return this; - }; - - (typeof module !== 'undefined' && module.exports) ? - (module.exports = bean) : - (context['bean'] = bean); - -}(this);!function ($) { - var b = bean.noConflict(), - integrate = function (method, type, method2) { - var _args = type ? [type] : []; - return function () { - for (var args, i = 0, l = this.length; i < l; i++) { - args = [this[i]].concat(_args, Array.prototype.slice.call(arguments, 0)); - args.length == 4 && args.push($); - !arguments.length && method == 'add' && type && (method = 'fire'); - b[method].apply(this, args); - } - return this; - }; - }; - - var add = integrate('add'), - remove = integrate('remove'), - fire = integrate('fire'); - - var methods = { - - on: add, - addListener: add, - bind: add, - listen: add, - delegate: add, - - unbind: remove, - unlisten: remove, - removeListener: remove, - undelegate: remove, - - emit: fire, - trigger: fire, - - cloneEvents: integrate('clone'), - - hover: function (enter, leave) { - for (var i = 0, l = this.length; i < l; i++) { - b.add.call(this, this[i], 'mouseenter', enter); - b.add.call(this, this[i], 'mouseleave', leave); - } - return this; - } - }; - - var shortcuts = [ - 'blur', 'change', 'click', 'dblclick', 'error', 'focus', 'focusin', - 'focusout', 'keydown', 'keypress', 'keyup', 'load', 'mousedown', - 'mouseenter', 'mouseleave', 'mouseout', 'mouseover', 'mouseup', - 'resize', 'scroll', 'select', 'submit', 'unload' - ]; - - for (var i = shortcuts.length; i--;) { - var shortcut = shortcuts[i]; - methods[shortcut] = integrate('add', shortcut); - } - - $.ender(methods, true); -}(ender); -/*! - * bonzo.js - copyright @dedfat 2011 - * https://github.com/ded/bonzo - * Follow our software http://twitter.com/dedfat - * MIT License - */ -!function (context) { - - var doc = context.document, - html = doc.documentElement, - query = null, - byTag = 'getElementsByTagName', - specialAttributes = /^checked|value|selected$/, - specialTags = /select|map|fieldset|table|tbody|tr|colgroup/i, - tagMap = { select: 'option', table: 'tbody', tr: 'td' }, - 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 }; - - 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; - } - - var trim = String.prototype.trim ? - function (s) { - return s.trim(); - } : - function (s) { - return s.replace(trimReplace, ''); - }; - - 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) { - for (var 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) { - 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 = []; - each(normalize(query ? query(target) : target), function (t) { - each(self, function (el) { - var n = el.cloneNode(true); - 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 Bonzo(elements) { - this.length = 0; - this.original = elements; - 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 = { - - 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]); - 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, tag) { - while (el.firstChild) { - el.removeChild(el.firstChild); - } - each(normalize(h, tag), 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) { - this.hasClass(el, c) || (el.className = trim(el.className + ' ' + c)); - }, this); - }, - - removeClass: function (c) { - return this.each(function (el) { - this.hasClass(el, c) && (el.className = trim(el.className.replace(classReg(c), ' '))); - }, this); - }, - - hasClass: function (el, c) { - return typeof c == 'undefined' ? - some(this, function (i) { - return classReg(el).test(i.className); - }) : - classReg(c).test(el.className); - }, - - toggleClass: function (c, condition) { - if (typeof condition !== 'undefined' && !condition) { - return this; - } - return this.each(function (el) { - this.hasClass(el, c) ? - (el.className = trim(el.className.replace(classReg(c), ' '))) : - (el.className = trim(el.className + ' ' + c)); - }, this); - }, - - 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) { - // is this a request for just getting a style? - if (v === undefined && typeof o == 'string') { - return getStyle(this[0], 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']; - } - - var fn = function (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); - el.style[p] = v; - } - } - }; - return this.each(fn); - }, - - offset: function (x, y) { - if (x || y) { - return this.each(function (el) { - xy(el, x, y); - }); - } - var el = this[0]; - var width = el.offsetWidth; - var height = el.offsetHeight; - var top = el.offsetTop; - var 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]; - 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'); - var o = {}; - o[k] = v; - uidList[uid] = o; - }); - } - }, - - 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'); - } - }; - - function normalize(node, tag) { - return typeof node == 'string' ? bonzo.create(node, tag) : is(node) ? [node] : node; - } - - 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)) { - window.scrollTo(x, y); - } else { - x != null && (el.scrollLeft = x); - y != null && (el.scrollTop = y); - } - return this; - } - - function isBody(element) { - return element === window || (/^(?:body|html)$/i).test(element.tagName); - } - - function getWindowScroll() { - return { x: window.pageXOffset || html.scrollLeft, y: window.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, tag) { - return typeof node == 'string' ? - function () { - var t = tag ? tagMap[tag.toLowerCase()] : null; - var el = doc.createElement(t || 'div'), els = []; - if (tag) { - var bitches = node.match(new RegExp("<" + t + ">.+?<\\/" + t + ">", "g")); - each(bitches, function (m) { - m = m.replace(/<(.+)>(.+?)<\/\1>/, '$2'); - var bah = doc.createElement(t); - bah.appendChild(doc.createDocumentFragment(m)); - el.appendChild(bah); - }); - } else { - 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 w = html.scrollWidth, - h = html.scrollHeight, - vp = this.viewport(); - return { - width: Math.max(w, vp.width), - height: Math.max(h, 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 () { - var h = self.innerHeight, - w = self.innerWidth; - ie && (h = html.clientHeight) && (w = html.clientWidth); - return { - width: w, - height: h - }; - }; - - 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; - }; - context['bonzo'] = bonzo; - -}(this);!function ($) { - - var b = 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 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 v ? this.css('height', v) : parseInt(this.css('height'), 10); - }, - - width: function (v) { - return v ? this.css('width', v) : parseInt(this.css('width'), 10); - } - }, true); - -}(ender || $); - -!function () { var exports = {}, module = { exports: exports }; !function (doc) { - var loaded = 0, fns = [], ol, f = false, - testEl = doc.createElement('a'), - domContentLoaded = 'DOMContentLoaded', - addEventListener = 'addEventListener', - onreadystatechange = 'onreadystatechange'; - - /^loade|c/.test(doc.readyState) && (loaded = 1); - - 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); }.call($); -/*! - * 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, - id = /#([\w\-]+)/, - clas = /\.[\w\-]+/g, - idOnly = /^#([\w\-]+$)/, - classOnly = /^\.([\w\-]+)$/, - tagOnly = /^([\w\-]+)$/, - tagAndOrClass = /^([\w]+)?\.([\w\-]+)$/, - html = doc.documentElement, - tokenizr = /\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/, - specialChars = /([.*+?\^=!:${}()|\[\]\/\\])/g, - 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(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 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; - } - - 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) { - 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; - var oldQwery = context.qwery; - qwery.noConflict = function () { - context.qwery = oldQwery; - return this; - }; - context['qwery'] = qwery; - -}(this, document);!function (doc) { - var q = qwery.noConflict(); - function create(node, root) { - var el = (root || doc).createElement('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); - }; - $.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); diff --git a/source/javascripts/libs/ender.min.js b/source/javascripts/libs/ender.min.js deleted file mode 100644 index 7b5a6700..00000000 --- a/source/javascripts/libs/ender.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Ender: open module JavaScript framework - * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat) - * https://ender.no.de - * License MIT - * Build: ender -b jeesh - */ -!function(a){function d(a,b){return c(a,b)}function c(a,e){var f;d._select&&typeof a=="string"||a.nodeName||a.length&&"item"in a||a==window?(f=d._select(a,e),f.selector=a):f=isFinite(a.length)?a:[a];return b(f,c)}function b(a,b){for(var c in b)c!="noConflict"&&c!="_VERSION"&&(a[c]=b[c]);return a}b(d,{_VERSION:"0.2.0",ender:function(a,e){b(e?c:d,a)}}),b(c,{forEach:function(a,b){for(var c=0,d=this.length;c<d;++c)c in this&&a.call(b||this[c],this[c],c,this);return this}});var e=a.$;d.noConflict=function(){a.$=e;return this},typeof module!="undefined"&&module.exports&&(module.exports=d),a.ender=a.$=d}(this),!function(a){function F(a){var b=a.relatedTarget;if(!b)return b==null;return b!=this&&b.prefix!="xul"&&!/document/.test(this.toString())&&!p(this,b)}var b=1,c={},d={},e=/over|out/,f=/[^\.]*(?=\..*)\.|.*/,g=/\..*/,h="addEventListener",i="attachEvent",j="removeEventListener",k="detachEvent",l=a.document||{},m=l.documentElement||{},n=m[h],o=n?h:i,p=function(a,b){var c=b.parentNode;while(c!=null){if(c==a)return!0;c=c.parentNode}},q=function(a,c){return a.__uid=c||a.__uid||b++},r=function(a){var b=q(a);return c[b]=c[b]||{}},s=n?function(a,b,c,d){a[d?h:j](b,c,!1)}:function(a,b,c,d,e){e&&d&&(a["_on"+e]=a["_on"+e]||0),a[d?i:k]("on"+b,c)},t=function(b,c,d){return function(e){e=D(e||((this.ownerDocument||this.document||this).parentWindow||a).event);return c.apply(b,[e].concat(d))}},u=function(a,b,c,d,e){return function(f){(d?d.call(this,f):n?!0:f&&f.propertyName=="_on"+c||!f)&&b.apply(a,[f].concat(e))}},v=function(a,b,c,e){var h=b.replace(g,""),i=r(a),j=i[h]||(i[h]={}),k=q(c,b.replace(f,""));if(j[k])return a;var l=G[h];l&&(c=l.condition?u(a,c,h,l.condition):c,h=l.base||h);var m=E[h];c=m?t(a,c,e):u(a,c,h,!1,e),m=n||m;if(h=="unload"){var p=c;c=function(){w(a,h,c)&&p()}}a[o]&&s(a,m?h:"propertychange",c,!0,!m&&h),j[k]=c,c.__uid=k;return h=="unload"?a:d[q(a)]=a},w=function(a,b,c){var d,e,h,i,j=r(a),k=b.replace(g,"");if(!j||!j[k])return a;e=b.replace(f,""),h=e?e.split("."):[c.__uid];for(i=h.length;i--;){d=h[i],c=j[k][d],delete j[k][d];if(a[o]){k=G[k]?G[k].base:k;var l=n||E[k];s(a,l?k:"propertychange",c,!1,!l&&k)}}return a},x=function(a,b,c){return function(d){var e=typeof a=="string"?c(a,this):a;for(var f=d.target;f&&f!=this;f=f.parentNode)for(var g=e.length;g--;)if(e[g]==f)return b.apply(f,arguments)}},y=function(a,b,c,d,e){if(typeof b=="object"&&!c)for(var f in b)b.hasOwnProperty(f)&&y(a,f,b[f]);else{var g=typeof c=="string",h=(g?c:b).split(" ");c=g?x(b,d,e):c;for(var i=h.length;i--;)v(a,h[i],c,Array.prototype.slice.call(arguments,g?4:3))}return a},z=function(a,b,c){var d,e,h,i=typeof b=="string",j=i&&b.replace(f,""),k=w,l=r(a);if(i&&/\s/.test(b)){b=b.split(" ");var m=b.length-1;while(z(a,b[m])&&m--);return a}h=i?b.replace(g,""):b;if(!l||i&&!l[h])return a;if(typeof c=="function")k(a,h,c);else if(j)k(a,b);else{k=h?k:z,e=i&&h,h=h?c||l[h]||h:l;for(d in h)h.hasOwnProperty(d)&&k(a,e||d,h[d])}return a},A=function(a,b,c){var d,e,h,i=b.split(" ");for(h=i.length;h--;){b=i[h].replace(g,"");var j=E[b],k=i[h].replace(f,""),l=r(a)[b];if(k){k=k.split(".");for(e=k.length;e--;)l[k[e]]&&l[k[e]].apply(a,c)}else if(!c&&a[o])B(j,b,a);else for(e in l)l.hasOwnProperty(e)&&l[e].apply(a,c)}return a},B=n?function(b,c,d){evt=document.createEvent(b?"HTMLEvents":"UIEvents"),evt[b?"initEvent":"initUIEvent"](c,!0,!0,a,1),d.dispatchEvent(evt)}:function(a,b,c){a?c.fireEvent("on"+b,document.createEventObject()):c["_on"+b]++},C=function(a,b,c){var d=r(b),e,f;e=c?d[c]:d;for(f in e)e.hasOwnProperty(f)&&(c?y:C)(a,c||b,c?e[f]:f);return a},D=function(a){var b={};if(!a)return b;var c=a.type,d=a.target||a.srcElement;b.preventDefault=D.preventDefault(a),b.stopPropagation=D.stopPropagation(a),b.target=d&&d.nodeType==3?d.parentNode:d;if(~c.indexOf("key"))b.keyCode=a.which||a.keyCode;else if(/click|mouse|menu/i.test(c)){b.rightClick=a.which==3||a.button==2,b.pos={x:0,y:0};if(a.pageX||a.pageY)b.clientX=a.pageX,b.clientY=a.pageY;else if(a.clientX||a.clientY)b.clientX=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,b.clientY=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;e.test(c)&&(b.relatedTarget=a.relatedTarget||a[(c=="mouseover"?"from":"to")+"Element"])}for(var f in a)f in b||(b[f]=a[f]);return b};D.preventDefault=function(a){return function(){a.preventDefault?a.preventDefault():a.returnValue=!1}},D.stopPropagation=function(a){return function(){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}};var E={click:1,dblclick:1,mouseup:1,mousedown:1,contextmenu:1,mousewheel:1,DOMMouseScroll:1,mouseover:1,mouseout:1,mousemove:1,selectstart:1,selectend:1,keydown:1,keypress:1,keyup:1,orientationchange:1,touchstart:1,touchmove:1,touchend:1,touchcancel:1,gesturestart:1,gesturechange:1,gestureend:1,focus:1,blur:1,change:1,reset:1,select:1,submit:1,load:1,unload:1,beforeunload:1,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1},G={mouseenter:{base:"mouseover",condition:F},mouseleave:{base:"mouseout",condition:F},mousewheel:{base:/Firefox/.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel"}},H={add:y,remove:z,clone:C,fire:A},I=function(a){var b=z(a).__uid;b&&(delete d[b],delete c[b])};a[i]&&y(a,"unload",function(){for(var b in d)d.hasOwnProperty(b)&&I(d[b]);a.CollectGarbage&&CollectGarbage()});var J=a.bean;H.noConflict=function(){a.bean=J;return this},typeof module!="undefined"&&module.exports?module.exports=H:a.bean=H}(this),!function(a){var b=bean.noConflict(),c=function(c,d,e){var f=d?[d]:[];return function(){for(var e,g=0,h=this.length;g<h;g++)e=[this[g]].concat(f,Array.prototype.slice.call(arguments,0)),e.length==4&&e.push(a),!arguments.length&&c=="add"&&d&&(c="fire"),b[c].apply(this,e);return this}},d=c("add"),e=c("remove"),f=c("fire"),g={on:d,addListener:d,bind:d,listen:d,delegate:d,unbind:e,unlisten:e,removeListener:e,undelegate:e,emit:f,trigger:f,cloneEvents:c("clone"),hover:function(a,c){for(var d=0,e=this.length;d<e;d++)b.add.call(this,this[d],"mouseenter",a),b.add.call(this,this[d],"mouseleave",c);return this}},h=["blur","change","click","dblclick","error","focus","focusin","focusout","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mouseout","mouseover","mouseup","resize","scroll","select","submit","unload"];for(var i=h.length;i--;){var j=h[i];g[j]=c("add",j)}a.ender(g,!0)}(ender),!function(a){function G(a,b){return new B(a,b)}function F(){return{x:window.pageXOffset||c.scrollLeft,y:window.pageYOffset||c.scrollTop}}function E(a){return a===window||/^(?:body|html)$/i.test(a.tagName)}function D(a,b,c){var d=this[0];if(a==null&&b==null)return(E(d)?F():{x:d.scrollLeft,y:d.scrollTop})[c];E(d)?window.scrollTo(a,b):(a!=null&&(d.scrollLeft=a),b!=null&&(d.scrollTop=b));return this}function C(a,b){return typeof a=="string"?G.create(a,b):w(a)?[a]:a}function B(a){this.length=0,this.original=a;if(a){a=typeof a!="string"&&!a.nodeType&&typeof a.length!="undefined"?a:[a],this.length=a.length;for(var b=0;b<a.length;b++)this[b]=a[b]}}function A(a,b,c){var d=G(a),e=d.css("position"),f=d.offset(),g="relative",h=e==g,i=[parseInt(d.css("left"),10),parseInt(d.css("top"),10)];e=="static"&&(d.css("position",g),e=g),isNaN(i[0])&&(i[0]=h?0:a.offsetLeft),isNaN(i[1])&&(i[1]=h?0:a.offsetTop),b!==null&&(a.style.left=b-f.left+i[0]+"px"),c!==null&&(a.style.top=c-f.top+i[1]+"px")}function z(a,b,c){var e=0,f=b||this,g=[];t(C(d?d(a):a),function(a){t(f,function(b){var d=b.cloneNode(!0);c(a,d),g[e]=d,e++})},this),t(g,function(a,b){f[b]=a}),f.length=e;return f}function x(a,b,c){for(var d=0,e=a.length;d<e;++d)if(b.call(c,a[d],d,a))return!0;return!1}function w(a){return a&&a.nodeName&&a.nodeType==1}function v(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}function t(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c||a[d],a[d],d,a);return a}function s(a){return new RegExp("(^|\\s+)"+a+"(\\s+|$)")}var b=a.document,c=b.documentElement,d=null,e="getElementsByTagName",f=/^checked|value|selected$/,g=/select|map|fieldset|table|tbody|tr|colgroup/i,h={select:"option",table:"tbody",tr:"td"},i=/^checked|selected$/,j=/msie/i.test(navigator.userAgent),k=[],l=0,m=/^-?[\d\.]+$/,n="px",o="setAttribute",p="getAttribute",q=/(^\s*|\s*$)/g,r={lineHeight:1,zoom:1,zIndex:1,opacity:1},u=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(q,"")},y=b.defaultView&&b.defaultView.getComputedStyle?function(a,c){var d=null;c=="float"&&(c="cssFloat");var e=b.defaultView.getComputedStyle(a,"");e&&(d=e[v(c)]);return a.style[c]||d}:j&&c.currentStyle?function(a,b){b=v(b),b=b=="float"?"styleFloat":b;if(b=="opacity"){var c=100;try{c=a.filters["DXImageTransform.Microsoft.Alpha"].opacity}catch(d){try{c=a.filters("alpha").opacity}catch(e){}}return c/100}var f=a.currentStyle?a.currentStyle[b]:null;return a.style[b]||f}:function(a,b){return a.style[v(b)]};B.prototype={each:function(a,b){return t(this,a,b)},map:function(a,b){var c=[],d,e;for(e=0;e<this.length;e++)d=a.call(this,this[e]),b?b(d)&&c.push(d):c.push(d);return c},first:function(){return G(this[0])},last:function(){return G(this[this.length-1])},html:function(a,b){function f(b,c){while(b.firstChild)b.removeChild(b.firstChild);t(C(a,c),function(a){b.appendChild(a)})}var d=b?c.textContent==null?"innerText":"textContent":"innerHTML",e;return typeof a!="undefined"?this.each(function(b){(e=b.tagName.match(g))?f(b,e[0]):b[d]=a}):this[0]?this[0][d]:""},text:function(a){return this.html(a,1)},addClass:function(a){return this.each(function(b){this.hasClass(b,a)||(b.className=u(b.className+" "+a))},this)},removeClass:function(a){return this.each(function(b){this.hasClass(b,a)&&(b.className=u(b.className.replace(s(a)," ")))},this)},hasClass:function(a,b){return typeof b=="undefined"?x(this,function(b){return s(a).test(b.className)}):s(b).test(a.className)},toggleClass:function(a,b){if(typeof b!="undefined"&&!b)return this;return this.each(function(b){this.hasClass(b,a)?b.className=u(b.className.replace(s(a)," ")):b.className=u(b.className+" "+a)},this)},show:function(a){return this.each(function(b){b.style.display=a||""})},hide:function(a){return this.each(function(a){a.style.display="none"})},append:function(a){return this.each(function(b){t(C(a),function(a){b.appendChild(a)})})},prepend:function(a){return this.each(function(b){var c=b.firstChild;t(C(a),function(a){b.insertBefore(a,c)})})},appendTo:function(a,b){return z.call(this,a,b,function(a,b){a.appendChild(b)})},prependTo:function(a,b){return z.call(this,a,b,function(a,b){a.insertBefore(b,a.firstChild)})},next:function(){return this.related("nextSibling")},previous:function(){return this.related("previousSibling")},related:function(a){return this.map(function(b){b=b[a];while(b&&b.nodeType!==1)b=b[a];return b||0},function(a){return a})},before:function(a){return this.each(function(b){t(G.create(a),function(a){b.parentNode.insertBefore(a,b)})})},after:function(a){return this.each(function(b){t(G.create(a),function(a){b.parentNode.insertBefore(a,b.nextSibling)})})},insertBefore:function(a,b){return z.call(this,a,b,function(a,b){a.parentNode.insertBefore(b,a)})},insertAfter:function(a,b){return z.call(this,a,b,function(a,b){var c=a.nextSibling;c?a.parentNode.insertBefore(b,c):a.parentNode.appendChild(b)})},css:function(a,b){if(b===undefined&&typeof a=="string")return y(this[0],a);var c=a;typeof a=="string"&&(c={},c[a]=b),j&&c.opacity&&(c.filter="alpha(opacity="+c.opacity*100+")",c.zoom=a.zoom||1,delete c.opacity);if(b=c["float"])j?c.styleFloat=b:c.cssFloat=b,delete c["float"];var d=function(a,b,d){for(var e in c)c.hasOwnProperty(e)&&(d=c[e],(b=v(e))&&m.test(d)&&!(b in r)&&(d+=n),a.style[b]=d)};return this.each(d)},offset:function(a,b){if(a||b)return this.each(function(c){A(c,a,b)});var c=this[0],d=c.offsetWidth,e=c.offsetHeight,f=c.offsetTop,g=c.offsetLeft;while(c=c.offsetParent)f=f+c.offsetTop,g=g+c.offsetLeft;return{top:f,left:g,height:e,width:d}},attr:function(a,b){var c=this[0];return typeof b=="undefined"?f.test(a)?i.test(a)&&typeof c[a]=="string"?!0:c[a]:c[p](a):this.each(function(c){a=="value"?c.value=b:c[o](a,b)})},val:function(a){return typeof a=="string"?this.attr("value",a):this[0].value},removeAttr:function(a){return this.each(function(b){b.removeAttribute(a)})},data:function(a,b){var c=this[0];if(typeof b=="undefined"){c[p]("data-node-uid")||c[o]("data-node-uid",++l);var d=c[p]("data-node-uid");k[d]||(k[d]={});return k[d][a]}return this.each(function(c){c[p]("data-node-uid")||c[o]("data-node-uid",++l);var d=c[p]("data-node-uid"),e={};e[a]=b,k[d]=e})},remove:function(){return this.each(function(a){a.parentNode&&a.parentNode.removeChild(a)})},empty:function(){return this.each(function(a){while(a.firstChild)a.removeChild(a.firstChild)})},detach:function(){return this.map(function(a){return a.parentNode.removeChild(a)})},scrollTop:function(a){return D.call(this,null,a,"y")},scrollLeft:function(a){return D.call(this,a,null,"x")}},G.setQueryEngine=function(a){d=a,delete G.setQueryEngine},G.aug=function(a,b){for(var c in a)a.hasOwnProperty(c)&&((b||B.prototype)[c]=a[c])},G.create=function(a,c){return typeof a=="string"?function(){var d=c?h[c.toLowerCase()]:null,e=b.createElement(d||"div"),f=[];if(c){var g=a.match(new RegExp("<"+d+">.+?<\\/"+d+">","g"));t(g,function(a){a=a.replace(/<(.+)>(.+?)<\/\1>/,"$2");var c=b.createElement(d);c.appendChild(b.createDocumentFragment(a)),e.appendChild(c)})}else e.innerHTML=a;var i=e.childNodes;e=e.firstChild,f.push(e);while(e=e.nextSibling)e.nodeType==1&&f.push(e);return f}():w(a)?[a.cloneNode(!0)]:[]},G.doc=function(){var a=c.scrollWidth,b=c.scrollHeight,d=this.viewport();return{width:Math.max(a,d.width),height:Math.max(b,d.height)}},G.firstChild=function(a){for(var b=a.childNodes,c=0,d=b&&b.length||0,e;c<d;c++)b[c].nodeType===1&&(e=b[d=c]);return e},G.viewport=function(){var a=self.innerHeight,b=self.innerWidth;j&&(a=c.clientHeight)&&(b=c.clientWidth);return{width:b,height:a}},G.isAncestor="compareDocumentPosition"in c?function(a,b){return(a.compareDocumentPosition(b)&16)==16}:"contains"in c?function(a,b){return a!==b&&a.contains(b)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1};var H=a.bonzo;G.noConflict=function(){a.bonzo=H;return this},a.bonzo=G}(this),!function(a){function d(a){var b=[],c,d;label:for(c=0;c<a.length;c++){for(d=0;d<b.length;d++)if(b[d]==a[c])continue label;b[b.length]=a[c]}return b}function c(a,b){for(var c=0;c<a.length;c++)if(a[c]===b)return c;return-1}var b=bonzo;b.setQueryEngine(a),a.ender(b),a.ender(b(),!0),a.ender({create:function(c){return a(b.create(c))}}),a.id=function(b){return a([document.getElementById(b)])},a.ender({parents:function(b,e){var f=a(b),g,h,i,j=[];for(g=0,h=this.length;g<h;g++){i=this[g];while(i=i.parentNode)if(c(f,i)!==-1){j.push(i);if(e)break}}return a(d(j))},closest:function(a){return this.parents(a,!0)},first:function(){return a(this[0])},last:function(){return a(this[this.length-1])},next:function(){return a(b(this).next())},previous:function(){return a(b(this).previous())},appendTo:function(a){return b(this.selector).appendTo(a,this)},prependTo:function(a){return b(this.selector).prependTo(a,this)},insertAfter:function(a){return b(this.selector).insertAfter(a,this)},insertBefore:function(a){return b(this.selector).insertBefore(a,this)},siblings:function(){var b,c,d,e=[];for(b=0,c=this.length;b<c;b++){d=this[b];while(d=d.previousSibling)d.nodeType==1&&e.push(d);d=this[b];while(d=d.nextSibling)d.nodeType==1&&e.push(d)}return a(e)},children:function(){var c,e=[];for(i=0,l=this.length;i<l;i++){if(!(c=b.firstChild(this[i])))continue;e.push(c);while(c=c.nextSibling)c.nodeType==1&&e.push(c)}return a(d(e))},height:function(a){return a?this.css("height",a):parseInt(this.css("height"),10)},width:function(a){return a?this.css("width",a):parseInt(this.css("width"),10)}},!0)}(ender||$),!function(){var a={},b={exports:a};!function(a){function k(){c=1;for(var a=0,b=d.length;a<b;a++)d[a]()}var c=0,d=[],e,f=!1,g=a.createElement("a"),h="DOMContentLoaded",i="addEventListener",j="onreadystatechange";/^loade|c/.test(a.readyState)&&(c=1),a[i]&&a[i](h,function b(){a.removeEventListener(h,b,f),k()},f),g.doScroll&&a.attachEvent(j,e=function b(){/^c/.test(a.readyState)&&(a.detachEvent(j,b),k())});var l=g.doScroll?function(a){self!=top?c?a():d.push(a):!function(){try{g.doScroll("left")}catch(b){return setTimeout(function(){l(a)},50)}a()}()}:function(a){c?a():d.push(a)};typeof b!="undefined"&&b.exports?b.exports={domReady:l}:window.domReady=l}(document),$.ender(b.exports)}.call($),!function(a,b){function V(a,c){var d=typeof c=="string"?V(c)[0]:c||b;if(!d||!a)return[];if(h=S(a,c,V))return h;return X(a,d)}function U(a){var b=[],c,d;label:for(c=0;c<a.length;c++){for(d=0;d<b.length;d++)if(b[d]==a[c])continue label;b[b.length]=a[c]}return b}function T(a){return a&&a.nodeType&&(a.nodeType==1||a.nodeType==9)}function S(a,c,d){var e=typeof c=="string"?d(c)[0]:c||b;if(a===window||T(a))return!c||a!==window&&T(e)&&W(a,e)?[a]:[];if(a&&typeof a=="object"&&isFinite(a.length))return G(a);if(h=a.match(w))return(m=b.getElementById(h[1]))?[m]:[];if(h=a.match(y))return G(e.getElementsByTagName(h[1]));return!1}function R(a){var b=[],c=[],d,g,h=L.g(a)||L.s(a,a.split(B));h=h.slice(0);if(!h.length)return b;b=O(h);if(!h.length)return b;for(e=0,g=b.length,f=0;e<g;e++){n=b[e],j=n;for(d=h.length;d--;)z:while(j!==A&&(j=j.parentNode))if(p=N.apply(j,M(h[d])))break z;p&&(c[f++]=n)}return c}function Q(a,b,c){switch(a){case"=":return b==c;case"^=":return b.match(K.g("^="+c)||K.s("^="+c,new RegExp("^"+P(c))));case"$=":return b.match(K.g("$="+c)||K.s("$="+c,new RegExp(P(c)+"$")));case"*=":return b.match(K.g(c)||K.s(c,new RegExp(P(c))));case"~=":return b.match(K.g("~="+c)||K.s("~="+c,new RegExp("(?:^|\\s+)"+P(c)+"(?:\\s+|$)")));case"|=":return b.match(K.g("|="+c)||K.s("|="+c,new RegExp("^"+P(c)+"(-|$)")))}return!1}function P(a){return J.g(a)||J.s(a,a.replace(C,"\\$1"))}function O(a){var c=[],d=a.pop(),e=M(d),f=e[1]||"*",g,i,j,k=a.length&&(h=a[0].match(w))?b.getElementById(h[1]):b;if(!k)return c;j=k.getElementsByTagName(f);for(g=0,i=j.length;g<i;g++)m=j[g],(r=N.apply(m,e))&&c.push(r);return c}function N(a,b,c,e,f,g,h){var j,k,l;if(b&&this.tagName.toLowerCase()!==b)return!1;if(c&&(j=c.match(u))&&j[1]!==this.id)return!1;if(c&&(q=c.match(v)))for(d=q.length;d--;){k=q[d].slice(1);if(!(I.g(k)||I.s(k,new RegExp("(^|\\s+)"+k+"(\\s+|$)"))).test(this.className))return!1}if(e&&!h){i=this.attributes;for(l in i)if(Object.prototype.hasOwnProperty.call(i,l)&&(i[l].name||l)==f)return this}if(e&&!Q(g,this.getAttribute(f)||"",h))return!1;return this}function M(a){return a.match(F)}function G(a){k=[];for(d=0,o=a.length;d<o;d++)k[d]=a[d];return k}var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=/#([\w\-]+)/,v=/\.[\w\-]+/g,w=/^#([\w\-]+$)/,x=/^\.([\w\-]+)$/,y=/^([\w\-]+)$/,z=/^([\w]+)?\.([\w\-]+)$/,A=b.documentElement,B=/\s(?![\s\w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^'"]*\])/,C=/([.*+?\^=!:${}()|\[\]\/\\])/g,D=/^([a-z0-9]+)?(?:([\.\#]+[\w\-\.#]+)?)/,E=/\[([\w\-]+)(?:([\|\^\$\*\~]?\=)['"]?([ \w\-\/\?\&\=\:\.\(\)\!,@#%<>\{\}\$\*\^]+)["']?)?\]/,F=new RegExp(D.source+"("+E.source+")?"),H=function(){this.c={}};H.prototype={g:function(a){return this.c[a]||undefined},s:function(a,b){this.c[a]=b;return b}};var I=new H,J=new H,K=new H,L=new H,W="compareDocumentPosition"in A?function(a,b){return(b.compareDocumentPosition(a)&16)==16}:"contains"in A?function(a,c){c=c==b||c==window?A:c;return c!==a&&c.contains(a)}:function(a,b){while(a=a.parentNode)if(a===b)return 1;return 0},X=b.querySelector&&b.querySelectorAll?function(a,c){if(b.getElementsByClassName&&(h=a.match(x)))return G(c.getElementsByClassName(h[1]));return G(c.querySelectorAll(a))}:function(a,c){var d=[],f,i=[],j;if(h=a.match(z)){s=c.getElementsByTagName(h[1]||"*"),k=I.g(h[2])||I.s(h[2],new RegExp("(^|\\s+)"+h[2]+"(\\s+|$)"));for(j=0,g=s.length,e=0;j<g;j++)k.test(s[j].className)&&(d[e++]=s[j]);return d}for(j=0,s=a.split(","),g=s.length;j<g;j++)i[j]=R(s[j]);for(j=0,g=i.length;j<g&&(f=i[j]);j++){var l=f;if(c!==b){l=[];for(e=0,h=f.length;e<h&&(element=f[e]);e++)W(element,c)&&l.push(element)}d=d.concat(l)}return U(d)};V.uniq=U;var Y=a.qwery;V.noConflict=function(){a.qwery=Y;return this},a.qwery=V}(this,document),!function(a){function c(b,c){var d=(c||a).createElement("div"),e=[];d.innerHTML=b;var f=d.childNodes;d=d.firstChild,e.push(d);while(d=d.nextSibling)d.nodeType==1&&e.push(d);return e}var b=qwery.noConflict();$._select=function(a,d){return/^\s*</.test(a)?c(a,d):b(a,d)},$.ender({find:function(a){var c=[],d,e,f,g,h;for(d=0,e=this.length;d<e;d++){h=b(a,this[d]);for(f=0,g=h.length;f<g;f++)c.push(h[f])}return $(b.uniq(c))},and:function(a){var b=$(a);for(var c=this.length,d=0,e=this.length+b.length;c<e;c++,d++)this[c]=b[d];return this}},!0)}(document)
\ No newline at end of file diff --git a/source/javascripts/libs/ie/DOMAssistantComplete-2.8.js b/source/javascripts/libs/ie/DOMAssistantComplete-2.8.js deleted file mode 100644 index ddca30ed..00000000 --- a/source/javascripts/libs/ie/DOMAssistantComplete-2.8.js +++ /dev/null @@ -1,1529 +0,0 @@ -// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8 -var DOMAssistant = function () { - var HTMLArray = function () { - // Constructor - }, - w = window, _$ = w.$, _$$ = w.$$, - isIE = /*@cc_on!@*/false, - isIE5 = isIE && parseFloat(navigator.appVersion) < 6, - sort, tagCache = {}, lastCache = {}, useCache = true, - slice = Array.prototype.slice, - camel = { - "accesskey": "accessKey", - "class": "className", - "colspan": "colSpan", - "for": "htmlFor", - "maxlength": "maxLength", - "readonly": "readOnly", - "rowspan": "rowSpan", - "tabindex": "tabIndex", - "valign": "vAlign", - "cellspacing": "cellSpacing", - "cellpadding": "cellPadding" - }, - regex = { - rules: /\s*,\s*/g, - selector: /^(\w+|\*)?(#[\w\u00C0-\uFFFF\-=$]+)?((\.[\w\u00C0-\uFFFF\-]+)*)?((\[\w+\s*([~^$*|])?(=\s*([-\w\u00C0-\uFFFF\s.]+|"[^"]*"|'[^']*'))?\]+)*)?((:\w[-\w]*(\((odd|even|\-?\d*n?([-+]\d+)?|[:#]?[-\w\u00C0-\uFFFF.]+|"[^"]*"|'[^']*'|((\w*\.[-\w\u00C0-\uFFFF]+)*)?|(\[#?\w+([~^$*|])?=?[-\w\u00C0-\uFFFF\s.'"]+\]+)|(:\w[-\w]*\(.+\)))\))?)*)?([+>~])?/, - selectorSplit: /(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g, - id: /^#([-\w\u00C0-\uFFFF=$]+)$/, - tag: /^\w+/, - relation: /^[+>~]$/, - pseudo: /^:(\w[-\w]*)(\((.+)\))?$/, - pseudos: /:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g, - attribs: /\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g, - classes: /\.([-\w\u00C0-\uFFFF]+)/g, - quoted: /^["'](.*)["']$/, - nth: /^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/, - special: /(:check|:enabl|\bselect)ed\b/ - }, - navigate = function (node, direction, checkTagName) { - var oldName = node.tagName; - while ((node = node[direction + "Sibling"]) && (node.nodeType !== 1 || (checkTagName? node.tagName !== oldName : node.tagName === "!"))) {} - return node; - }, - def = function (obj) { - return typeof obj !== "undefined"; - }, - sortDocumentOrder = function (elmArray) { - return (sortDocumentOrder = elmArray[0].compareDocumentPosition? function (elmArray) { return elmArray.sort( function (a, b) { return 3 - (a.compareDocumentPosition(b) & 6); } ); } : - isIE? function (elmArray) { return elmArray.sort( function (a, b) { return a.sourceIndex - b.sourceIndex; } ); } : - function (elmArray) { return elmArray.sort( function (a, b) { - var range1 = document.createRange(), range2 = document.createRange(); - range1.setStart(a, 0); - range1.setEnd(a, 0); - range2.setStart(b, 0); - range2.setEnd(b, 0); - return range1.compareBoundaryPoints(Range.START_TO_END, range2); - } ); })(elmArray); - }; - var pushAll = function (set1, set2) { - set1.push.apply(set1, slice.apply(set2)); - return set1; - }; - if (isIE) { - pushAll = function (set1, set2) { - if (set2.slice) { - return set1.concat(set2); - } - var i=0, item; - while ((item = set2[i++])) { - set1[set1.length] = item; - } - return set1; - }; - } - return { - isIE : isIE, - camel : camel, - def : def, - allMethods : [], - publicMethods : [ - "prev", - "next", - "hasChild", - "cssSelect", - "elmsByClass", - "elmsByAttribute", - "elmsByTag" - ], - - harmonize : function () { - w.$ = _$; - w.$$ = _$$; - return this; - }, - - initCore : function () { - this.applyMethod.call(w, "$", this.$); - this.applyMethod.call(w, "$$", this.$$); - w.DOMAssistant = this; - if (isIE) { - HTMLArray = Array; - } - HTMLArray.prototype = []; - (function (H) { - H.each = function (fn, context) { - for (var i=0, il=this.length; i<il; i++) { - if (fn.call(context || this[i], this[i], i, this) === false) { - break; - } - } - return this; - }; - H.first = function () { - return def(this[0])? DOMAssistant.addMethodsToElm(this[0]) : null; - }; - H.end = function () { - return this.previousSet; - }; - H.indexOf = H.indexOf || function (elm) { - for (var i=0, il=this.length; i<il; i++) { - if (i in this && this[i] === elm) { - return i; - } - } - return -1; - }; - H.map = function (fn, context) { - var res = []; - for (var i=0, il=this.length; i<il; i++) { - if (i in this) { - res[i] = fn.call(context || this[i], this[i], i, this); - } - } - return res; - }; - H.filter = function (fn, context) { - var res = new HTMLArray(); - res.previousSet = this; - for (var i=0, il=this.length; i<il; i++) { - if (i in this && fn.call(context || this[i], this[i], i, this)) { - res.push(this[i]); - } - } - return res; - }; - H.every = function (fn, context) { - for (var i=0, il=this.length; i<il; i++) { - if (i in this && !fn.call(context || this[i], this[i], i, this)) { - return false; - } - } - return true; - }; - H.some = function (fn, context) { - for (var i=0, il=this.length; i<il; i++) { - if (i in this && fn.call(context || this[i], this[i], i, this)) { - return true; - } - } - return false; - }; - })(HTMLArray.prototype); - this.attach(this); - }, - - addMethods : function (name, method) { - if (!def(this.allMethods[name])) { - this.allMethods[name] = method; - this.addHTMLArrayPrototype(name, method); - } - }, - - addMethodsToElm : function (elm) { - for (var method in this.allMethods) { - if (def(this.allMethods[method])) { - this.applyMethod.call(elm, method, this.allMethods[method]); - } - } - return elm; - }, - - applyMethod : function (method, func) { - if (typeof this[method] !== "function") { - this[method] = func; - } - }, - - attach : function (plugin) { - var publicMethods = plugin.publicMethods; - if (!def(publicMethods)) { - for (var method in plugin) { - if (method !== "init" && def(plugin[method])) { - this.addMethods(method, plugin[method]); - } - } - } - else if (publicMethods.constructor === Array) { - for (var i=0, current; (current=publicMethods[i]); i++) { - this.addMethods(current, plugin[current]); - } - } - if (typeof plugin.init === "function") { - plugin.init(); - } - }, - - addHTMLArrayPrototype : function (name, method) { - HTMLArray.prototype[name] = function () { - var elmsToReturn = new HTMLArray(); - elmsToReturn.previousSet = this; - for (var i=0, il=this.length; i<il; i++) { - elmsToReturn.push(method.apply(DOMAssistant.$$(this[i]), arguments)); - } - return elmsToReturn; - }; - }, - - cleanUp : function (elm) { - var children = elm.all || elm.getElementsByTagName("*"); - for (var i=0, child; (child=children[i++]);) { - if (child.hasData && child.hasData()) { - if (child.removeEvent) { child.removeEvent(); } - child.unstore(); - } - } - elm.innerHTML = ""; - }, - - setCache : function (cache) { - useCache = cache; - }, - - $ : function () { - var obj = arguments[0]; - if (arguments.length === 1 && (typeof obj === "object" || (typeof obj === "function" && !!obj.nodeName))) { - return DOMAssistant.$$(obj); - } - var elm = !!obj? new HTMLArray() : null; - for (var i=0, arg, idMatch; (arg=arguments[i]); i++) { - if (typeof arg === "string") { - arg = arg.replace(/^[^#\(]*(#)/, "$1"); - if (regex.id.test(arg)) { - if ((idMatch = DOMAssistant.$$(arg.substr(1), false))) { - elm.push(idMatch); - } - } - else { - var doc = (document.all || document.getElementsByTagName("*")).length; - elm = (!document.querySelectorAll && useCache && lastCache.rule && lastCache.rule === arg && lastCache.doc === doc)? lastCache.elms : pushAll(elm, DOMAssistant.cssSelection.call(document, arg)); - lastCache = { rule: arg, elms: elm, doc: doc }; - } - } - } - return elm; - }, - - $$ : function (id, addMethods) { - var elm = (typeof id === "object" || typeof id === "function" && !!id.nodeName)? id : document.getElementById(id), - applyMethods = def(addMethods)? addMethods : true, - getId = function(el) { var eid = el.id; return typeof eid !== "object"? eid : el.attributes.id.nodeValue; }; - if (typeof id === "string" && elm && getId(elm) !== id) { - elm = null; - for (var i=0, item; (item=document.all[i]); i++) { - if (getId(item) === id) { - elm = item; - break; - } - } - } - if (elm && applyMethods && !elm.next) { - DOMAssistant.addMethodsToElm(elm); - } - return elm; - }, - - prev : function () { - return DOMAssistant.$$(navigate(this, "previous")); - }, - - next : function () { - return DOMAssistant.$$(navigate(this, "next")); - }, - - hasChild: function (elm) { - return this === document || this !== elm && (this.contains? this.contains(elm) : !!(this.compareDocumentPosition(elm) & 16)); - }, - - getSequence : function (expression) { - var start, add = 2, max = -1, modVal = -1, - pseudoVal = regex.nth.exec(expression.replace(/^0n\+/, "").replace(/^2n$/, "even").replace(/^2n+1$/, "odd")); - if (!pseudoVal) { - return null; - } - if (pseudoVal[2]) { // odd or even - start = (pseudoVal[2] === "odd")? 1 : 2; - modVal = (start === 1)? 1 : 0; - } - else if (pseudoVal[3]) { // single digit - start = max = parseInt(pseudoVal[3], 10); - add = 0; - } - else if (pseudoVal[4]) { // an+b - add = pseudoVal[6]? parseInt(pseudoVal[6], 10) : 1; - start = pseudoVal[7]? parseInt(pseudoVal[7], 10) : 0; - while (start < 1) { - start += add; - } - modVal = (start >= add)? (start - add) % add : start; - } - else if (pseudoVal[8]) { // -an+b - add = pseudoVal[10]? parseInt(pseudoVal[10], 10) : 1; - start = max = parseInt(pseudoVal[11], 10); - while (start > add) { - start -= add; - } - modVal = (max >= add)? (max - add) % add : max; - } - return { start: start, add: add, max: max, modVal: modVal }; - }, - - cssByDOM : function (cssRule) { - var prevParents, currentRule, cssSelectors, childOrSiblingRef, nextTag, nextRegExp, current, previous, prevParent, notElm, addElm, iteratorNext, childElm, sequence, anyTag, - elm = new HTMLArray(), index = elm.indexOf, prevElm = [], matchingElms = [], cssRules = cssRule.replace(regex.rules, ",").split(","), splitRule = {}; - function clearAdded (elm) { - elm = elm || prevElm; - for (var n=elm.length; n--;) { - elm[n].added = null; - elm[n].removeAttribute("added"); - } - } - function clearChildElms () { - for (var n=prevParents.length; n--;) { - prevParents[n].childElms = null; - } - } - function subtractArray (arr1, arr2) { - for (var i=0, src1; (src1=arr1[i]); i++) { - var found = false; - for (var j=0, src2; (src2=arr2[j]); j++) { - if (src2 === src1) { - found = true; - arr2.splice(j, 1); - break; - } - } - if (found) { - arr1.splice(i--, 1); - } - } - return arr1; - } - function getAttr (elm, attr) { - return (isIE || regex.special.test(attr))? elm[camel[attr.toLowerCase()] || attr] : elm.getAttribute(attr, 2); - } - function attrToRegExp (attrVal, substrOperator) { - attrVal = attrVal? attrVal.replace(regex.quoted, "$1").replace(/(\.|\[|\])/g, "\\$1") : null; - return { - "^": "^" + attrVal, - "$": attrVal + "$", - "*": attrVal, - "|": "^" + attrVal + "(\\-\\w+)*$", - "~": "\\b" + attrVal + "\\b" - }[substrOperator] || (attrVal !== null? "^" + attrVal + "$" : attrVal); - } - function notComment(el) { - return (el || this).tagName !== "!"; - } - function getTags (tag, context) { - return isIE5? (tag === "*"? context.all : context.all.tags(tag)) : context.getElementsByTagName(tag); - } - function getElementsByTagName (tag, parent) { - tag = tag || "*"; - parent = parent || document; - return (parent === document || parent.lastModified)? tagCache[tag] || (tagCache[tag] = getTags(tag, document)) : getTags(tag, parent); - } - function getElementsByPseudo (previousMatch, pseudoClass, pseudoValue) { - prevParents = []; - var pseudo = pseudoClass.split("-"), matchingElms = [], idx = 0, checkNodeName = /\-of\-type$/.test(pseudoClass), recur, - match = { - first: function(el) { return !navigate(el, "previous", checkNodeName); }, - last: function(el) { return !navigate(el, "next", checkNodeName); }, - empty: function(el) { return !el.firstChild; }, - enabled: function(el) { return !el.disabled && el.type !== "hidden"; }, - disabled: function(el) { return el.disabled; }, - checked: function(el) { return el.checked; }, - contains: function(el) { return (el.innerText || el.textContent || "").indexOf(pseudoValue.replace(regex.quoted, "$1")) > -1; }, - other: function(el) { return getAttr(el, pseudoClass) === pseudoValue; } - }; - function basicMatch(key) { - while ((previous=previousMatch[idx++])) { - if (notComment(previous) && match[key](previous)) { - matchingElms[matchingElms.length] = previous; - } - } - return matchingElms; - } - var word = pseudo[0] || null; - if (word && match[word]) { - return basicMatch(word); - } - switch (word) { - case "only": - var kParent, kTag; - while ((previous=previousMatch[idx++])) { - prevParent = previous.parentNode; - var q = previous.nodeName; - if (prevParent !== kParent || q !== kTag) { - if (match.first(previous) && match.last(previous)) { - matchingElms[matchingElms.length] = previous; - } - kParent = prevParent; - kTag = q; - } - } - break; - case "nth": - if (pseudoValue === "n") { - matchingElms = previousMatch; - } - else { - var direction = (pseudo[1] === "last")? ["lastChild", "previousSibling"] : ["firstChild", "nextSibling"]; - sequence = DOMAssistant.getSequence(pseudoValue); - if (sequence) { - while ((previous=previousMatch[idx++])) { - prevParent = previous.parentNode; - prevParent.childElms = prevParent.childElms || {}; - var p = previous.nodeName; - if (!prevParent.childElms[p]) { - var childCount = 0; - iteratorNext = sequence.start; - childElm = prevParent[direction[0]]; - while (childElm && (sequence.max < 0 || iteratorNext <= sequence.max)) { - var c = childElm.nodeName; - if ((checkNodeName && c === p) || (!checkNodeName && childElm.nodeType === 1 && c !== "!")) { - if (++childCount === iteratorNext) { - if (c === p) { matchingElms[matchingElms.length] = childElm; } - iteratorNext += sequence.add; - } - } - childElm = childElm[direction[1]]; - } - if (anyTag) { sort++; } - prevParent.childElms[p] = true; - prevParents[prevParents.length] = prevParent; - } - } - clearChildElms(); - } - } - break; - case "target": - var hash = document.location.hash.slice(1); - if (hash) { - while ((previous=previousMatch[idx++])) { - if (getAttr(previous, "name") === hash || getAttr(previous, "id") === hash) { - matchingElms[matchingElms.length] = previous; - break; - } - } - } - break; - case "not": - if ((recur = regex.pseudo.exec(pseudoValue))) { - matchingElms = subtractArray(previousMatch, getElementsByPseudo(previousMatch, recur[1]? recur[1].toLowerCase() : null, recur[3] || null)); - } - else { - for (var re in regex) { - if (regex[re].lastIndex) { - regex[re].lastIndex = 0; - } - } - pseudoValue = pseudoValue.replace(regex.id, "[id=$1]"); - var notTag = regex.tag.exec(pseudoValue); - var notClass = regex.classes.exec(pseudoValue); - var notAttr = regex.attribs.exec(pseudoValue); - var notRegExp = new RegExp(notAttr? attrToRegExp(notAttr[4], notAttr[2]) : "(^|\\s)" + (notTag? notTag[0] : notClass? notClass[1] : "") + "(\\s|$)", "i"); - while ((notElm=previousMatch[idx++])) { - addElm = null; - if (notTag && !notRegExp.test(notElm.nodeName) || notClass && !notRegExp.test(notElm.className)) { - addElm = notElm; - } - else if (notAttr) { - var att = getAttr(notElm, notAttr[1]); - if (!def(att) || att === false || typeof att === "string" && !notRegExp.test(att)) { - addElm = notElm; - } - } - if (addElm && !addElm.added) { - addElm.added = true; - matchingElms[matchingElms.length] = addElm; - } - } - } - break; - default: return basicMatch("other"); - } - return matchingElms; - } - function pushUnique(set1, set2) { - var i=0, s=set1, item; - while ((item = set2[i++])) { - if (!s.length || s.indexOf(item) < 0) { - set1.push(item); - } - } - return set1; - } - sort = -1; - for (var a=0, tagBin=[]; (currentRule=cssRules[a]); a++) { - if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || a && index.call(cssRules.slice(0, a), currentRule) > -1) { continue; } - prevElm = [this]; - for (var i=0, rule; (rule=cssSelectors[i]); i++) { - matchingElms = []; - if ((childOrSiblingRef = regex.relation.exec(rule))) { - var idElm = null, nextWord = cssSelectors[i+1]; - if ((nextTag = regex.tag.exec(nextWord))) { - nextTag = nextTag[0]; - nextRegExp = new RegExp("(^|\\s)" + nextTag + "(\\s|$)", "i"); - } - else if (regex.id.test(nextWord)) { - idElm = DOMAssistant.$(nextWord) || null; - } - for (var j=0, prevRef; (prevRef=prevElm[j]); j++) { - switch (childOrSiblingRef[0]) { - case ">": - var children = idElm || getElementsByTagName(nextTag, prevRef); - for (var k=0, child; (child=children[k]); k++) { - if (child.parentNode === prevRef) { - matchingElms[matchingElms.length] = child; - } - } - break; - case "+": - if ((prevRef = navigate(prevRef, "next"))) { - if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { - matchingElms[matchingElms.length] = prevRef; - } - } - break; - case "~": - while ((prevRef = prevRef.nextSibling) && !prevRef.added) { - if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { - prevRef.added = true; - matchingElms[matchingElms.length] = prevRef; - } - } - break; - } - } - prevElm = matchingElms; - clearAdded(); - rule = cssSelectors[++i]; - if (/^\w+$/.test(rule) || regex.id.test(rule)) { - continue; - } - prevElm.skipTag = true; - } - var cssSelector = regex.selector.exec(rule); - splitRule = { - tag : cssSelector[1]? cssSelector[1] : "*", - id : cssSelector[2], - allClasses : cssSelector[3], - allAttr : cssSelector[5], - allPseudos : cssSelector[10] - }; - anyTag = (splitRule.tag === "*"); - if (splitRule.id) { - var u = 0, DOMElm = document.getElementById(splitRule.id.slice(1)); - if (DOMElm) { - while (prevElm[u] && !DOMAssistant.hasChild.call(prevElm[u], DOMElm)) { u++; } - matchingElms = (u < prevElm.length && (anyTag || splitRule.tag === DOMElm.tagName.toLowerCase()))? [DOMElm] : []; - } - prevElm = matchingElms; - } - else if (splitRule.tag && !prevElm.skipTag) { - if (i===0 && !matchingElms.length && prevElm.length === 1) { - prevElm = matchingElms = pushAll([], getElementsByTagName(splitRule.tag, prevElm[0])); - } - else { - for (var l=0, ll=prevElm.length, tagCollectionMatches, tagMatch; l<ll; l++) { - tagCollectionMatches = getElementsByTagName(splitRule.tag, prevElm[l]); - for (var m=0; (tagMatch=tagCollectionMatches[m]); m++) { - if (!tagMatch.added) { - tagMatch.added = true; - matchingElms[matchingElms.length] = tagMatch; - } - } - } - prevElm = matchingElms; - clearAdded(); - } - } - if (!matchingElms.length) { - break; - } - prevElm.skipTag = false; - if (splitRule.allClasses) { - var n = 0, matchingClassElms = [], allClasses = splitRule.allClasses.split(".").slice(1); - while ((current = prevElm[n++])) { - var matchCls = true, elmClass = current.className; - if (elmClass && elmClass.length) { - elmClass = elmClass.split(" "); - for (var o=allClasses.length; o--;) { - if (elmClass.indexOf(allClasses[o]) < 0) { - matchCls = false; - break; - } - } - if (matchCls) { - matchingClassElms[matchingClassElms.length] = current; - } - } - } - prevElm = matchingElms = matchingClassElms; - } - if (splitRule.allAttr) { - var matchAttr, r = 0, regExpAttributes = [], matchingAttributeElms = [], allAttr = splitRule.allAttr.match(regex.attribs); - for (var specialStrip = /^\[(selected|readonly)(\s*=.+)?\]$/, q=0, ql=allAttr.length, attributeMatch, attrVal; q<ql; q++) { - regex.attribs.lastIndex = 0; - attributeMatch = regex.attribs.exec(allAttr[q].replace(specialStrip, "[$1]")); - attrVal = attrToRegExp(attributeMatch[4], attributeMatch[2] || null); - regExpAttributes[q] = [(attrVal? new RegExp(attrVal) : null), attributeMatch[1]]; - } - while ((current = matchingElms[r++])) { - for (var s=0, sl=regExpAttributes.length; s<sl; s++) { - var attributeRegExp = regExpAttributes[s][0], currentAttr = getAttr(current, regExpAttributes[s][1]); - matchAttr = true; - if (!attributeRegExp && currentAttr === true) { continue; } - if ((!attributeRegExp && (!currentAttr || typeof currentAttr !== "string" || !currentAttr.length)) || (!!attributeRegExp && !attributeRegExp.test(currentAttr))) { - matchAttr = false; - break; - } - } - if (matchAttr) { - matchingAttributeElms[matchingAttributeElms.length] = current; - } - } - prevElm = matchingElms = matchingAttributeElms; - } - if (splitRule.allPseudos) { - var allPseudos = splitRule.allPseudos.match(regex.pseudos); - for (var t=0, tl=allPseudos.length; t<tl; t++) { - regex.pseudos.lastIndex = 0; - var pseudo = regex.pseudos.exec(allPseudos[t]); - var pseudoClass = pseudo[1]? pseudo[1].toLowerCase() : null; - var pseudoValue = pseudo[3] || null; - matchingElms = getElementsByPseudo(matchingElms, pseudoClass, pseudoValue); - clearAdded(matchingElms); - } - prevElm = matchingElms; - } - } - elm = ((tagBin.length && (anyTag || index.call(tagBin, splitRule.tag) >= 0 || index.call(tagBin, "*") >= 0))? pushUnique : pushAll)(elm, prevElm); - tagBin.push(splitRule.tag); - if (isIE && anyTag) { elm = elm.filter(notComment); } - } - return ((elm.length > 1 && cssRules.length > 1) || sort > 0)? sortDocumentOrder(elm) : elm; - }, - - cssByXpath : function (cssRule) { - var ns = { xhtml: "http://www.w3.org/1999/xhtml" }, - prefix = (document.documentElement.namespaceURI === ns.xhtml)? "xhtml:" : "", - nsResolver = function lookupNamespaceURI (prefix) { - return ns[prefix] || null; - }; - DOMAssistant.cssByXpath = function (cssRule) { - var currentRule, cssSelectors, xPathExpression, cssSelector, splitRule, sequence, - elm = new HTMLArray(), cssRules = cssRule.replace(regex.rules, ",").split(","); - function attrToXPath (wrap) { - var pre = wrap? "[" : "", post = wrap? "]" : ""; - return function (match, p1, p2, p3, p4) { - p4 = (p4 || "").replace(regex.quoted, "$1"); - if (p1 === p4 && p1 === "readonly") { p3 = null; } - return pre + ({ - "^": "starts-with(@" + p1 + ", \"" + p4 + "\")", - "$": "substring(@" + p1 + ", (string-length(@" + p1 + ") - " + (p4.length - 1) + "), " + p4.length + ") = \"" + p4 + "\"", - "*": "contains(concat(\" \", @" + p1 + ", \" \"), \"" + p4 + "\")", - "|": "@" + p1 + "=\"" + p4 + "\" or starts-with(@" + p1 + ", \"" + p4 + "-\")", - "~": "contains(concat(\" \", @" + p1 + ", \" \"), \" " + p4 + " \")" - }[p2] || ("@" + p1 + (p3? "=\"" + p4 + "\"" : ""))) + post; - }; - } - function pseudoToXPath (tag, pseudoClass, pseudoValue) { - tag = /\-child$/.test(pseudoClass)? "*" : tag; - var pseudo = pseudoClass.split("-"), position = ((pseudo[1] === "last")? "(count(following-sibling::" : "(count(preceding-sibling::") + tag + ") + 1)", recur, hash; - switch (pseudo[0]) { - case "nth": return (pseudoValue !== "n" && (sequence = DOMAssistant.getSequence(pseudoValue)))? ((sequence.start === sequence.max)? position + " = " + sequence.start : position + " mod " + sequence.add + " = " + sequence.modVal + ((sequence.start > 1)? " and " + position + " >= " + sequence.start : "") + ((sequence.max > 0)? " and " + position + " <= " + sequence.max: "")) : ""; - case "not": return "not(" + ((recur = regex.pseudo.exec(pseudoValue))? pseudoToXPath(tag, recur[1]? recur[1].toLowerCase() : null, recur[3] || null) : pseudoValue.replace(regex.id, "[id=$1]").replace(regex.tag, "self::$0").replace(regex.classes, "contains(concat(\" \", @class, \" \"), \" $1 \")").replace(regex.attribs, attrToXPath())) + ")"; - case "first": return "not(preceding-sibling::" + tag + ")"; - case "last": return "not(following-sibling::" + tag + ")"; - case "only": return "not(preceding-sibling::" + tag + " or following-sibling::" + tag + ")"; - case "empty": return "not(child::*) and not(text())"; - case "contains": return "contains(., \"" + pseudoValue.replace(regex.quoted, "$1") + "\")"; - case "enabled": return "not(@disabled) and not(@type=\"hidden\")"; - case "disabled": return "@disabled"; - case "target": return "@name=\"" + (hash = document.location.hash.slice(1)) + "\" or @id=\"" + hash + "\""; - default: return "@" + pseudoClass + "=\"" + pseudoValue + "\""; - } - } - for (var i=0; (currentRule=cssRules[i]); i++) { - if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || i && elm.indexOf.call(cssRules.slice(0, i), currentRule) > -1) { continue; } - xPathExpression = xPathExpression? xPathExpression + " | ." : "."; - for (var j=0, jl=cssSelectors.length; j<jl; j++) { - cssSelector = regex.selector.exec(cssSelectors[j]); - splitRule = { - tag: prefix + (cssSelector[1]? cssSelector[1] : "*"), - id: cssSelector[2], - allClasses: cssSelector[3], - allAttr: cssSelector[5], - allPseudos: cssSelector[10], - tagRelation: cssSelector[20] - }; - xPathExpression += - (splitRule.tagRelation? ({ ">": "/", "+": "/following-sibling::*[1]/self::", "~": "/following-sibling::" }[splitRule.tagRelation] || "") : ((j > 0 && regex.relation.test(cssSelectors[j-1]))? splitRule.tag : ("//" + splitRule.tag))) + - (splitRule.id || "").replace(regex.id, "[@id = \"$1\"]") + - (splitRule.allClasses || "").replace(regex.classes, "[contains(concat(\" \", @class, \" \"), \" $1 \")]") + - (splitRule.allAttr || "").replace(regex.attribs, attrToXPath(true)); - if (splitRule.allPseudos) { - var allPseudos = splitRule.allPseudos.match(regex.pseudos); - for (var k=0, kl=allPseudos.length; k<kl; k++) { - regex.pseudos.lastIndex = 0; - var pseudo = regex.pseudos.exec(allPseudos[k]), - pseudoClass = pseudo[1]? pseudo[1].toLowerCase() : null, - pseudoValue = pseudo[3] || null, - xpath = pseudoToXPath(splitRule.tag, pseudoClass, pseudoValue); - if (xpath.length) { - xPathExpression += "[" + xpath + "]"; - } - } - } - } - } - try { - var xPathNodes = document.evaluate(xPathExpression, this, nsResolver, 7, null), node, p=0; - while ((node = xPathNodes.snapshotItem(p++))) { elm.push(node); } - } catch (e) {} - return elm; - }; - return DOMAssistant.cssByXpath.call(this, cssRule); - }, - - cssSelection : function (cssRule) { - if (!cssRule) { return null; } - var special = regex.special.test(cssRule); - try { - if (document.querySelectorAll && !special) { - return pushAll(new HTMLArray(), this.querySelectorAll(cssRule)); - } - } catch (e) {} - return ((document.evaluate && !special && !/-of-type/.test(cssRule))? DOMAssistant.cssByXpath : DOMAssistant.cssByDOM).call(this, cssRule); - }, - - cssSelect : function (cssRule) { - return DOMAssistant.cssSelection.call(this, cssRule); - }, - - elmsByClass : function (className, tag) { - var cssRule = (tag || "") + "." + className; - return DOMAssistant.cssSelection.call(this, cssRule); - }, - - elmsByAttribute : function (attr, attrVal, tag, substrMatchSelector) { - var cssRule = (tag || "") + "[" + attr + ((attrVal && attrVal !== "*")? ((substrMatchSelector || "") + "=" + attrVal + "]") : "]"); - return DOMAssistant.cssSelection.call(this, cssRule); - }, - - elmsByTag : function (tag) { - return DOMAssistant.cssSelection.call(this, tag); - } - }; -}(); -DOMAssistant.initCore(); -DOMAssistant.Storage = function () { - var uniqueId = 1, data = [], expando = "_da" + +new Date(); - return { - hasData : function () { - var uid = this[expando]; - return !!uid && !!data[uid]; - }, - retrieve : function (key) { - if (!DOMAssistant.def(key)) { - return this[expando] || (this[expando] = uniqueId++); - } - if (!this[expando] || !data[this[expando]]) { return; } - return data[this[expando]][key]; - }, - - store : function (key, val) { - var uid = this[expando] || (this[expando] = uniqueId++); - data[uid] = data[uid] || {}; - if (typeof key === "object") { - for (var i in key) { - if (typeof i === "string") { - data[uid][i] = key[i]; - } - } - } - else { - data[uid][key] = val; - } - return this; - }, - - unstore : function (key) { - var uid = this[expando] || (this[expando] = uniqueId++); - if (data[uid]) { - if (DOMAssistant.def(key)) { - delete data[uid][key]; - } - else { - data[uid] = null; - } - } - return this; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.Storage); -DOMAssistant.AJAX = function () { - var globalXMLHttp = null, - readyState = 0, - status = -1, - statusText = "", - requestPool = [], - createAjaxObj = function (url, method, callback, addToContent) { - var params = null; - if (/POST/i.test(method)) { - url = url.split("?"); - params = url[1]; - url = url[0]; - } - return { - url : url, - method : method, - callback : callback, - params : params, - headers : {}, - responseType : "text", - addToContent : addToContent || false - }; - }; - return { - publicMethods : [ - "ajax", - "get", - "post", - "load" - ], - - initRequest : function () { - var XMLHttp = null; - if (!!window.XMLHttpRequest && !DOMAssistant.isIE) { - XMLHttp = new XMLHttpRequest(); - DOMAssistant.AJAX.initRequest = function () { - return requestPool.length? requestPool.pop() : new XMLHttpRequest(); - }; - } - else if (!!window.ActiveXObject) { - var XMLHttpMS = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; - for (var i=0; i<XMLHttpMS.length; i++) { - try { - XMLHttp = new window.ActiveXObject(XMLHttpMS[i]); - DOMAssistant.AJAX.initRequest = function () { - return requestPool.length? requestPool.pop() : new window.ActiveXObject(XMLHttpMS[i]); - }; - break; - } - catch (e) { - XMLHttp = null; - } - } - } - return XMLHttp; - }, - - ajax : function (ajaxObj) { - if (!ajaxObj.noParse && ajaxObj.url && /\?/.test(ajaxObj.url) && ajaxObj.method && /POST/i.test(ajaxObj.method)) { - var url = ajaxObj.url.split("?"); - ajaxObj.url = url[0]; - ajaxObj.params = url[1] + ((url[1].length > 0 && ajaxObj.params)? ("&" + ajaxObj.params) : ""); - } - return DOMAssistant.AJAX.makeCall.call(this, ajaxObj); - }, - - get : function (url, callback, addToContent) { - return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "GET", callback, addToContent)); - }, - - post : function (url, callback) { - return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "POST", callback)); - }, - - load : function (url, addToContent) { - this.get(url, DOMAssistant.AJAX.replaceWithAJAXContent, addToContent); - }, - - makeCall : function (ajaxObj) { - var XMLHttp = DOMAssistant.AJAX.initRequest(); - if (XMLHttp) { - globalXMLHttp = XMLHttp; - (function (elm) { - var url = ajaxObj.url, - method = ajaxObj.method || "GET", - callback = ajaxObj.callback, - params = ajaxObj.params, - headers = ajaxObj.headers, - responseType = ajaxObj.responseType || "text", - addToContent = ajaxObj.addToContent, - timeout = ajaxObj.timeout || null, - ex = ajaxObj.exception, - timeoutId = null, - done = false; - XMLHttp.open(method, url, true); - XMLHttp.setRequestHeader("AJAX", "true"); - XMLHttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); - if (method === "POST") { - XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - XMLHttp.setRequestHeader("Content-length", params? params.length : 0); - if (XMLHttp.overrideMimeType) { - XMLHttp.setRequestHeader("Connection", "close"); - } - } - if (responseType === "json") { - XMLHttp.setRequestHeader("Accept", "application/json, text/javascript, */*"); - } - for (var i in headers) { - if (typeof i === "string") { - XMLHttp.setRequestHeader(i, headers[i]); - } - } - if (typeof callback === "function") { - XMLHttp.onreadystatechange = function () { - try { - if (XMLHttp.readyState === 4 && !done) { - window.clearTimeout(timeoutId); - done = true; - status = XMLHttp.status; - statusText = XMLHttp.statusText; - readyState = 4; - if ((status || location.protocol !== "file:") && (status < 200 || status >= 300)) { - throw new Error(statusText); - } - var response = /xml/i.test(responseType)? XMLHttp.responseXML : XMLHttp.responseText; - if (/json/i.test(responseType) && !!response) { - response = (typeof JSON === "object" && typeof JSON.parse === "function")? JSON.parse(response) : eval("(" + response + ")"); - } - globalXMLHttp = null; - XMLHttp.onreadystatechange = function () {}; - requestPool.push(XMLHttp); - callback.call(elm, response, addToContent); - } - } - catch (e) { - globalXMLHttp = XMLHttp = null; - if (typeof ex === "function") { - ex.call(elm, e); - ex = null; - } - } - }; - } - XMLHttp.send(params); - if (timeout) { - timeoutId = window.setTimeout( function () { - if (!done) { - XMLHttp.abort(); - done = true; - if (typeof ex === "function") { - readyState = 0; - status = 408; - statusText = "Request timeout"; - globalXMLHttp = XMLHttp = null; - ex.call(elm, new Error(statusText)); - ex = null; - } - } - }, timeout); - } - })(this); - } - return this; - }, - - replaceWithAJAXContent : function (content, add) { - if (add) { - this.innerHTML += content; - } - else { - DOMAssistant.cleanUp(this); - this.innerHTML = content; - } - }, - - getReadyState : function () { - return (globalXMLHttp && DOMAssistant.def(globalXMLHttp.readyState))? globalXMLHttp.readyState : readyState; - }, - - getStatus : function () { - return status; - }, - - getStatusText : function () { - return statusText; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.AJAX); -DOMAssistant.CSS = function () { - var def = DOMAssistant.def, - direct = { display: true }; - return { - addClass : function (className) { - if (!this.hasClass(className)) { - var currentClass = this.className; - this.className = currentClass + (currentClass.length? " " : "") + className; - } - return this; - }, - - removeClass : function (className) { - return this.replaceClass(className); - }, - - replaceClass : function (className, newClass) { - var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i"); - this.className = this.className.replace(classToRemove, function (match, p1, p2) { - return newClass? (p1 + newClass + p2) : " "; - }).replace(/^\s+|\s+$/g, ""); - return this; - }, - - hasClass : function (className) { - return (" " + this.className + " ").indexOf(" " + className + " ") > -1; - }, - - setStyle : function (style, value) { - var css = this.style; - if ("filters" in this && (typeof style === "string"? /opacity/i.test(style) : def(style.opacity))) { - css.zoom = 1; - css.filter = (css.filter || "").replace(/alpha\([^)]*\)/, "") + "alpha(opacity=" + (def(style.opacity)? style.opacity : value) * 100 + ")"; - } - if (def(css.cssText)) { - var styleToSet = css.cssText; - if (typeof style === "object") { - for (var i in style) { - if (typeof i === "string") { - if (direct[i]) { css[i] = style[i]; } - styleToSet += ";" + i + ":" + style[i]; - } - } - } - else { - if (direct[style]) { css[style] = value; } - styleToSet += ";" + style + ":" + value; - } - css.cssText = styleToSet; - } - return this; - }, - - getStyle : function (cssRule) { - var val = "", f; - cssRule = cssRule.toLowerCase(); - if (document.defaultView && document.defaultView.getComputedStyle) { - val = document.defaultView.getComputedStyle(this, "").getPropertyValue(cssRule); - } - else if (this.currentStyle) { - if ("filters" in this && cssRule === "opacity") { - val = (f = this.style.filter || this.currentStyle.filter) && f.indexOf("opacity=") >= 0? parseFloat(f.match(/opacity=([^)]*)/)[1]) / 100 : 1; - } - else { - cssRule = cssRule.replace(/^float$/, "styleFloat").replace(/\-(\w)/g, function (match, p1) { - return p1.toUpperCase(); - }); - val = this.currentStyle[cssRule]; - } - if (val === "auto" && /^(width|height)$/.test(cssRule) && this.currentStyle.display !== "none") { - val = this["offset" + cssRule.charAt(0).toUpperCase() + cssRule.substr(1)] + "px"; - } - } - return val; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.CSS); -DOMAssistant.Content = function () { - var D$ = DOMAssistant.$$; - return { - init : function () { - DOMAssistant.setCache(false); - }, - - create : function (name, attr, append, content) { - var elm = D$(document.createElement(name)); - if (attr) { - elm = elm.setAttributes(attr); - } - if (DOMAssistant.def(content)) { - elm.addContent(content); - } - if (append) { - this.appendChild(elm); - } - return elm; - }, - - setAttributes : function (attr) { - if (DOMAssistant.isIE) { - var setAttr = function (elm, att, val) { - var attLower = att.toLowerCase(); - switch (attLower) { - case "name": - case "type": - case "multiple": - return D$(document.createElement(elm.outerHTML.replace(new RegExp(attLower + "(=[a-zA-Z]+)?"), " ").replace(">", " " + attLower + "=" + val + ">"))); - case "style": - elm.style.cssText = val; - return elm; - default: - elm[DOMAssistant.camel[attLower] || att] = val; - return elm; - } - }; - DOMAssistant.Content.setAttributes = function (attr) { - var elem = this; - var parent = this.parentNode; - for (var i in attr) { - if (typeof attr[i] === "string" || typeof attr[i] === "number") { - var newElem = setAttr(elem, i, attr[i]); - if (parent && /(name|type)/i.test(i)) { - if (elem.innerHTML) { - newElem.innerHTML = elem.innerHTML; - } - parent.replaceChild(newElem, elem); - } - elem = newElem; - } - } - return elem; - }; - } - else { - DOMAssistant.Content.setAttributes = function (attr) { - for (var i in attr) { - if (/class/i.test(i)) { - this.className = attr[i]; - } - else { - this.setAttribute(i, attr[i]); - } - } - return this; - }; - } - return DOMAssistant.Content.setAttributes.call(this, attr); - }, - - addContent : function (content) { - var type = typeof content; - if (type === "string" || type === "number") { - if (!this.firstChild) { - this.innerHTML = content; - } - else { - var tmp = document.createElement("div"); - tmp.innerHTML = content; - for (var i=tmp.childNodes.length-1, last=null; i>=0; i--) { - last = this.insertBefore(tmp.childNodes[i], last); - } - } - } - else if (type === "object" || (type === "function" && !!content.nodeName)) { - this.appendChild(content); - } - return this; - }, - - replaceContent : function (content) { - DOMAssistant.cleanUp(this); - return this.addContent(content); - }, - - replace : function (content, returnNew) { - var type = typeof content; - if (type === "string" || type === "number") { - var parent = this.parentNode; - var tmp = DOMAssistant.Content.create.call(parent, "div", null, false, content); - for (var i=tmp.childNodes.length; i--;) { - parent.insertBefore(tmp.childNodes[i], this.nextSibling); - } - content = this.nextSibling; - parent.removeChild(this); - } - else if (type === "object" || (type === "function" && !!content.nodeName)) { - this.parentNode.replaceChild(content, this); - } - return returnNew? content : this; - }, - - remove : function () { - DOMAssistant.cleanUp(this); - if (this.hasData()) { - if (this.removeEvent) { this.removeEvent(); } - this.unstore(); - } - this.parentNode.removeChild(this); - return null; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.Content); -DOMAssistant.Events = function () { - var handler, - key = "_events", - w3cMode = !!document.addEventListener, - useCapture = { focus: true, blur: true }, - translate = DOMAssistant.isIE? { focus: "activate", blur: "deactivate", mouseenter: "mouseover", mouseleave: "mouseout" } : { mouseenter: "mouseover", mouseleave: "mouseout" }, - regex = { - special: /^submit|reset|change|select$/i, - mouseenterleave: /^mouse(enter|leave)$/i, - dom: /^DOM/, - on: /^on/i - }, - special = function (e) { - return DOMAssistant.isIE && regex.special.test(e); - }, - fix = function (e) { - return translate[e] || e; - }, - createEvent = function (e, type, target) { - e = e || window.event || {}; - if (e.event) { return e; } - var event = { - event: e, - type: type || e.type, - bubbles: e.bubbles || true, - cancelable: e.cancelable || false, - target: target || e.target || e.srcElement, - clientX: e.clientX || 0, - clientY: e.clientY || 0, - altKey: e.altKey || false, - ctrlKey: e.ctrlKey || false, - shiftKey: e.shiftKey || false, - button: e.button || null, - timeStamp: +new Date(), - preventDefault: function() { - if (e.preventDefault) { e.preventDefault(); } - this.returnValue = e.returnValue = false; - }, - stopPropagation: function() { - if (e.stopPropagation) { e.stopPropagation(); } - this.cancelBubble = e.cancelBubble = true; - } - }; - if (event.target && 3 === event.target.nodeType) { // Safari textnode bug - event.target = event.target.parentNode; - } - event.currentTarget = event.target; - event.relatedTarget = e.relatedTarget || (e.fromElement === event.target? e.toElement : e.fromElement) || null; - var de = document.documentElement, b = document.body; - event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0)); - event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0)); - if ("number" === typeof e.which) { - event.keyCode = e.keyCode; - event.charCode = event.which = e.which; - } - else if (e.keyCode) { - event.keyCode = event.charCode = e.keyCode; - } - return event; - }; - - return { - publicMethods : [ - "triggerEvent", - "addEvent", - "removeEvent", - "relayEvent", - "unrelayEvent", - "preventDefault", - "cancelBubble" - ], - - init : function () { - DOMAssistant.preventDefault = this.preventDefault; - DOMAssistant.cancelBubble = this.cancelBubble; - handler = this.handleEvent; - }, - - triggerEvent : function (evt, target, e) { - var fevt = fix(evt), - events = this.retrieve(key), - event = e || createEvent(e, fevt, target || this); - event.currentTarget = this; - if (events && events[fevt]) { - for (var i=0, iL=events[fevt].length; i<iL; i++) { - if (events[fevt][i].call(this, event) === false) { event.stopPropagation(); } - } - } - else if (typeof this["on" + fevt] === "function") { - this["on" + fevt].call(this, event); - } - var p = DOMAssistant.$$(this.parentNode); - if (!event.cancelBubble && p && p.nodeType === 1) { - p.triggerEvent(fevt, target, event); - } - return this; - }, - - addEvent : function (evt, func, relay, proxy, selector) { - var existingEvent, - fevt = fix(evt), - uid = fevt + this.retrieve(), - onevt = "on" + fevt; - if (!(func.attachedElements && func.attachedElements[uid])) { - var events = this.retrieve(key) || {}; - if (!events[fevt]) { - events[fevt] = []; - existingEvent = this[onevt]; - this[onevt] = null; - } - if (typeof this.window === "object") { this.window[onevt] = handler; } - else if (!events[fevt].length) { - if (w3cMode) { this.addEventListener(fevt, handler, useCapture[fevt]); } - else { this[onevt] = handler; } - } - if (existingEvent) { - events[fevt].push(existingEvent); - } - if (fevt !== evt) { func.evt = evt; } - func.relay = relay; - func.proxy = proxy; - func.selector = selector; - func.attachedElements = func.attachedElements || {}; - func.attachedElements[uid] = true; - events[fevt].push(func); - this.store(key, events); - } - return this; - }, - - handleEvent : function (evt) { - var currentEvt = (evt && regex.dom.test(evt.type) && w3cMode)? evt : createEvent(evt), - type = fix(currentEvt.type), - targ = currentEvt.target, - relatedTarg = currentEvt.relatedTarget, - eventColl = this.retrieve(key)[type].slice(0), eventCollLength, eventReturn, oevt; - if ((eventCollLength = eventColl.length)) { - for (var i=0; i<eventCollLength; i++) { - if (typeof eventColl[i] === "function") { - if ((oevt = eventColl[i].evt) && oevt !== type) { - currentEvt.type = oevt; - if (relatedTarg && regex.mouseenterleave.test(oevt)) { - if (eventColl[i].relay) { - var elms = eventColl[i].elms || (eventColl[i].elms = this.cssSelect(eventColl[i].selector)); - if (elms.indexOf(targ) < 0 || !DOMAssistant.hasChild.call(relatedTarg, targ)) { continue; } - } - else if (this === relatedTarg || this.hasChild(relatedTarg)) { continue; } - } - } - eventReturn = eventColl[i].call(this, currentEvt); - } - } - if (eventReturn === false) { currentEvt.stopPropagation(); } - return eventReturn; - } - }, - - removeEvent : function (evt, func, relay, proxy) { - var uid = (evt = fix(evt)) + this.retrieve(), - events = this.retrieve(key), - onevt = "on" + evt; - if (events && !evt) { - for (var ev in events) { - if (events[ev].length) { this.removeEvent(ev); } - } - var attr = this.attributes; - for (var att, j=attr.length; j--;) { - att = attr[j].nodeName.toLowerCase(); - if (regex.on.test(att) && typeof this[att] === "function") { - this[att] = null; - } - } - } - else if (events && events[evt]) { - var eventColl = events[evt]; - for (var fn, i=eventColl.length; i--;) { - fn = func || eventColl[i]; - if (eventColl[i] === fn && relay === fn.relay && proxy === fn.proxy) { - eventColl.splice(i, 1); - if (!!proxy && fn.selector) { - this.cssSelect(fn.selector).removeEvent(proxy); - } - if (fn.attachedElements) { - fn.attachedElements[uid] = null; - } - } - } - if (!events[evt].length) { - if (w3cMode) { this.removeEventListener(evt, handler, useCapture[evt]); } - else { this[onevt] = null; } - } - } - else if (this[onevt] && !func && !relay) { - this[onevt] = null; - } - return this; - }, - - relayEvent: function (evt, selector, fn, proxy) { - if (special(evt)) { - this.relayEvent("focus", selector, function() { - DOMAssistant.$$(this).removeEvent(evt).addEvent(evt, function(e) { - return fn.call(this, createEvent(e)); - }); - }, evt).relayEvent("blur", selector, function() { - DOMAssistant.$$(this).removeEvent(evt); - }, evt); - return this; - } - return this.addEvent(evt, function(e) { - e = createEvent(e); - var target = e.target, args = arguments, i = 0, elm, elms = this.cssSelect(selector); - while ((elm = elms[i++])) { - if ((elm === target || DOMAssistant.hasChild.call(elm, target)) && !elm.disabled) { - e.currentTarget = elm; - var retVal = fn.apply(elm, args); - if (!retVal) { e.preventDefault(); } - return retVal; - } - } - }, true, proxy, selector); - }, - - unrelayEvent: function (evt) { - if (special(evt)) { - return this.removeEvent("focus", null, true, evt).removeEvent("blur", null, true, evt); - } - return this.removeEvent(evt, null, true); - }, - - preventDefault : function (evt) { - if (evt.preventDefault) { evt.preventDefault(); } - evt.returnValue = false; - }, - - cancelBubble : function (evt) { - if (evt.stopPropagation) { evt.stopPropagation(); } - evt.cancelBubble = true; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.Events); -DOMAssistant.DOMLoad = function () { - var DOMLoaded = false, - DOMLoadTimer = null, - functionsToCall = [], - addedStrings = {}, - errorHandling = null, - execFunctions = function () { - for (var i=0, il=functionsToCall.length; i<il; i++) { - try { - functionsToCall[i](); - } - catch (e) { - if (errorHandling && typeof errorHandling === "function") { - errorHandling(e); - } - } - } - functionsToCall = []; - }, - DOMHasLoaded = function () { - if (DOMLoaded) { - return; - } - DOMLoaded = true; - execFunctions(); - }; - /* Internet Explorer */ - /*@cc_on - @if (@_win32 || @_win64) - document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>"); - document.getElementById("ieScriptLoad").onreadystatechange = function() { - if (this.readyState === "complete") { - DOMHasLoaded(); - } - }; - @end @*/ - /* Mozilla, Chrome, Opera */ - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", DOMHasLoaded, false); - } - /* Safari, iCab, Konqueror */ - if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) { - DOMLoadTimer = setInterval(function () { - if (/loaded|complete/i.test(document.readyState)) { - DOMHasLoaded(); - clearInterval(DOMLoadTimer); - } - }, 10); - } - /* Other web browsers */ - window.onload = DOMHasLoaded; - - return { - DOMReady : function () { - for (var i=0, il=arguments.length, funcRef; i<il; i++) { - funcRef = arguments[i]; - if (!funcRef.DOMReady && !addedStrings[funcRef]) { - if (typeof funcRef === "string") { - addedStrings[funcRef] = true; - funcRef = new Function(funcRef); - } - funcRef.DOMReady = true; - functionsToCall.push(funcRef); - } - } - if (DOMLoaded) { - execFunctions(); - } - }, - - setErrorHandling : function (funcRef) { - errorHandling = funcRef; - } - }; -}(); -DOMAssistant.DOMReady = DOMAssistant.DOMLoad.DOMReady;
\ No newline at end of file diff --git a/source/javascripts/libs/ie/respond.js b/source/javascripts/libs/ie/respond.js deleted file mode 100644 index e7a5bba3..00000000 --- a/source/javascripts/libs/ie/respond.js +++ /dev/null @@ -1,292 +0,0 @@ -/* - * respond.js - A small and fast polyfill for min/max-width CSS3 Media Queries - * Copyright 2011, Scott Jehl, scottjehl.com - * Dual licensed under the MIT or GPL Version 2 licenses. - * Usage: Check out the readme file or github.com/scottjehl/respond -*/ -(function( win, mqSupported ){ - //exposed namespace - win.respond = {}; - - //define update even in native-mq-supporting browsers, to avoid errors - respond.update = function(){}; - - //expose media query support flag for external use - respond.mediaQueriesSupported = mqSupported; - - //if media queries are supported, exit here - if( mqSupported ){ return; } - - //define vars - var doc = win.document, - docElem = doc.documentElement, - mediastyles = [], - rules = [], - appendedEls = [], - parsedSheets = {}, - resizeThrottle = 30, - head = doc.getElementsByTagName( "head" )[0] || docElem, - links = head.getElementsByTagName( "link" ), - requestQueue = [], - - //loop stylesheets, send text content to translate - ripCSS = function(){ - var sheets = links, - sl = sheets.length, - i = 0, - //vars for loop: - sheet, href, media, isCSS; - - for( ; i < sl; i++ ){ - sheet = sheets[ i ], - href = sheet.href, - media = sheet.media, - isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; - - //only links plz and prevent re-parsing - if( !!href && isCSS && !parsedSheets[ href ] ){ - if( !/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test( href ) - || href.replace( RegExp.$1, "" ).split( "/" )[0] === win.location.host ){ - requestQueue.push( { - href: href, - media: media - } ); - } - else{ - parsedSheets[ href ] = true; - } - } - } - makeRequests(); - - }, - - //recurse through request queue, get css text - makeRequests = function(){ - if( requestQueue.length ){ - var thisRequest = requestQueue.shift(); - - ajax( thisRequest.href, function( styles ){ - translate( styles, thisRequest.href, thisRequest.media ); - parsedSheets[ thisRequest.href ] = true; - makeRequests(); - } ); - } - }, - - //find media blocks in css text, convert to style blocks - translate = function( styles, href, media ){ - var qs = styles.match( /@media ([^\{]+)\{((?!@media)[\s\S])*(?=\}[\s]*\/\*\/mediaquery\*\/)/gmi ), - ql = qs && qs.length || 0, - //try to get CSS path - href = href.substring( 0, href.lastIndexOf( "/" )), - repUrls = function( css ){ - return css.replace( /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + href + "$2$3" ); - }, - useMedia = !ql && media, - //vars used in loop - i = 0, - j, fullq, thisq, eachq, eql; - - //if path exists, tack on trailing slash - if( href.length ){ href += "/"; } - - //if no internal queries exist, but media attr does, use that - //note: this currently lacks support for situations where a media attr is specified on a link AND - //its associated stylesheet has internal CSS media queries. - //In those cases, the media attribute will currently be ignored. - if( useMedia ){ - ql = 1; - } - - - for( ; i < ql; i++ ){ - j = 0; - - //media attr - if( useMedia ){ - fullq = media; - rules.push( repUrls( styles ) ); - } - //parse for styles - else{ - fullq = qs[ i ].match( /@media ([^\{]+)\{([\S\s]+?)$/ ) && RegExp.$1; - rules.push( RegExp.$2 && repUrls( RegExp.$2 ) ); - } - - eachq = fullq.split( "," ); - eql = eachq.length; - - - for( ; j < eql; j++ ){ - thisq = eachq[ j ]; - mediastyles.push( { - media : thisq.match( /(only\s+)?([a-zA-Z]+)(\sand)?/ ) && RegExp.$2, - rules : rules.length - 1, - minw : thisq.match( /\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/ ) && parseFloat( RegExp.$1 ), - maxw : thisq.match( /\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/ ) && parseFloat( RegExp.$1 ) - } ); - } - } - - applyMedia(); - }, - - lastCall, - - resizeDefer, - - //enable/disable styles - applyMedia = function( fromResize ){ - var name = "clientWidth", - docElemProp = docElem[ name ], - currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp, - styleBlocks = {}, - dFrag = doc.createDocumentFragment(), - lastLink = links[ links.length-1 ], - now = (new Date()).getTime(); - - //throttle resize calls - if( fromResize && lastCall && now - lastCall < resizeThrottle ){ - clearTimeout( resizeDefer ); - resizeDefer = setTimeout( applyMedia, resizeThrottle ); - return; - } - else { - lastCall = now; - } - - for( var i in mediastyles ){ - var thisstyle = mediastyles[ i ]; - if( !thisstyle.minw && !thisstyle.maxw || - ( !thisstyle.minw || thisstyle.minw && currWidth >= thisstyle.minw ) && - (!thisstyle.maxw || thisstyle.maxw && currWidth <= thisstyle.maxw ) ){ - if( !styleBlocks[ thisstyle.media ] ){ - styleBlocks[ thisstyle.media ] = []; - } - styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] ); - } - } - - //remove any existing respond style element(s) - for( var i in appendedEls ){ - if( appendedEls[ i ] && appendedEls[ i ].parentNode === head ){ - head.removeChild( appendedEls[ i ] ); - } - } - - //inject active styles, grouped by media type - for( var i in styleBlocks ){ - var ss = doc.createElement( "style" ), - css = styleBlocks[ i ].join( "\n" ); - - ss.type = "text/css"; - ss.media = i; - - if ( ss.styleSheet ){ - ss.styleSheet.cssText = css; - } - else { - ss.appendChild( doc.createTextNode( css ) ); - } - dFrag.appendChild( ss ); - appendedEls.push( ss ); - } - - //append to DOM at once - head.insertBefore( dFrag, lastLink.nextSibling ); - }, - //tweaked Ajax functions from Quirksmode - ajax = function( url, callback ) { - var req = xmlHttp(); - if (!req){ - return; - } - req.open( "GET", url, true ); - req.onreadystatechange = function () { - if ( req.readyState != 4 || req.status != 200 && req.status != 304 ){ - return; - } - callback( req.responseText ); - } - if ( req.readyState == 4 ){ - return; - } - req.send(); - }, - //define ajax obj - xmlHttp = (function() { - var xmlhttpmethod = false, - attempts = [ - function(){ return new ActiveXObject("Microsoft.XMLHTTP") }, - function(){ return new XMLHttpRequest() } - ], - al = attempts.length; - - while( al-- ){ - try { - xmlhttpmethod = attempts[ al ](); - } - catch(e) { - continue; - } - break; - } - return function(){ - return xmlhttpmethod; - }; - })(); - - //translate CSS - ripCSS(); - - //expose update for re-running respond later on - respond.update = ripCSS; - - //adjust on resize - function callMedia(){ - applyMedia( true ); - } - if( win.addEventListener ){ - win.addEventListener( "resize", callMedia, false ); - } - else if( win.attachEvent ){ - win.attachEvent( "onresize", callMedia ); - } -})( - this, - (function( win ){ - - //for speed, flag browsers with window.matchMedia support and IE 9 as supported - if( win.matchMedia ){ return true; } - - var bool, - doc = document, - docElem = doc.documentElement, - refNode = docElem.firstElementChild || docElem.firstChild, - // fakeBody required for <FF4 when executed in <head> - fakeUsed = !doc.body, - fakeBody = doc.body || doc.createElement( "body" ), - div = doc.createElement( "div" ), - q = "only all"; - - div.id = "mq-test-1"; - div.style.cssText = "position:absolute;top:-99em"; - fakeBody.appendChild( div ); - - div.innerHTML = '_<style media="'+q+'"> #mq-test-1 { width: 9px; }</style>'; - if( fakeUsed ){ - docElem.insertBefore( fakeBody, refNode ); - } - div.removeChild( div.firstChild ); - bool = div.offsetWidth == 9; - if( fakeUsed ){ - docElem.removeChild( fakeBody ); - } - else{ - fakeBody.removeChild( div ); - } - return bool; - })( this ) -); - diff --git a/source/javascripts/libs/ie/selectivizr-1.0.1.js b/source/javascripts/libs/ie/selectivizr-1.0.1.js deleted file mode 100644 index 0846b919..00000000 --- a/source/javascripts/libs/ie/selectivizr-1.0.1.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * selectivizr v1.0.1 - (c) Keith Clark, freely distributable under the terms of the MIT license. - * selectivizr.com - */ -var k=true,p=false;(function(A){function N(a){return a.replace(O,q).replace(P,function(b,e,c){b=c.split(",");c=0;for(var g=b.length;c<g;c++){var h=Q(b[c].replace(R,q).replace(S,q))+w,f=[];b[c]=h.replace(T,function(d,l,m,j,i){if(l){if(f.length>0){d=f;var x;i=h.substring(0,i).replace(U,o);if(i==o||i.charAt(i.length-1)==w)i+="*";try{x=y(i)}catch(ha){}if(x){i=0;for(m=x.length;i<m;i++){j=x[i];for(var B=j.className,C=0,V=d.length;C<V;C++){var r=d[C];if(!RegExp("(^|\\s)"+r.className+"(\\s|$)").test(j.className))if(r.b&&(r.b===k||r.b(j)===k))B=E(B,r.className,k)}j.className=B}}f=[]}return l}else{if(l=m?W(m):!F||F.test(j)?{className:G(j),b:k}:null){f.push(l);return"."+l.className}return d}})}return e+b.join(",")})}function W(a){var b=k,e=G(a.slice(1)),c=a.substring(0,5)==":not(",g,h;if(c)a=a.slice(5,-1);var f=a.indexOf("(");if(f>-1)a=a.substring(0,f);if(a.charAt(0)==":")switch(a.slice(1)){case "root":b=function(d){return c?d!=H:d==H};break;case "target":if(s==8){b=function(d){function l(){var m=location.hash,j=m.slice(1);return c?m==""||d.id!=j:m!=""&&d.id==j}t(A,"hashchange",function(){u(d,e,l())});return l()};break}return p;case "checked":b=function(d){X.test(d.type)&&t(d,"propertychange",function(){event.propertyName=="checked"&&u(d,e,d.checked!==c)});return d.checked!==c};break;case "disabled":c=!c;case "enabled":b=function(d){if(Y.test(d.tagName)){t(d,"propertychange",function(){event.propertyName=="$disabled"&&u(d,e,d.a===c)});z.push(d);d.a=d.disabled;return d.disabled===c}return a==":enabled"?c:!c};break;case "focus":g="focus";h="blur";case "hover":if(!g){g="mouseenter";h="mouseleave"}b=function(d){t(d,c?h:g,function(){u(d,e,k)});t(d,c?g:h,function(){u(d,e,p)});return c};break;default:if(!Z.test(a))return p}return{className:e,b:b}}function G(a){return I+"-"+(s==6&&$?aa++:a.replace(ba,function(b){return b.charCodeAt(0)}))}function Q(a){return a.replace(J,q).replace(ca,w)}function u(a,b,e){var c=a.className;b=E(c,b,e);if(b!=c){a.className=b;a.parentNode.className+=o}}function E(a,b,e){var c=RegExp("(^|\\s)"+b+"(\\s|$)"),g=c.test(a);return e?g?a:a+w+b:g?a.replace(c,q).replace(J,q):a}function t(a,b,e){a.attachEvent("on"+b,e)}function D(a,b){if(/^https?:\/\//i.test(a))return b.substring(0,b.indexOf("/",8))==a.substring(0,a.indexOf("/",8))?a:null;if(a.charAt(0)=="/")return b.substring(0,b.indexOf("/",8))+a;var e=b.split("?")[0];if(a.charAt(0)!="?"&&e.charAt(e.length-1)!="/")e=e.substring(0,e.lastIndexOf("/")+1);return e+a}function K(a){if(a){v.open("GET",a,p);v.send();return(v.status==200?v.responseText:o).replace(da,o).replace(ea,function(b,e,c,g,h){return K(D(c||h,a))}).replace(fa,function(b,e,c){e=e||"";return" url("+e+D(c,a)+e+") "})}return o}function ga(){var a,b;a=n.getElementsByTagName("BASE");for(var e=a.length>0?a[0].href:n.location.href,c=0;c<n.styleSheets.length;c++){b=n.styleSheets[c];if(b.href!=o)if(a=D(b.href,e))b.cssText=N(K(a))}z.length>0&&setInterval(function(){for(var g=0,h=z.length;g<h;g++){var f=z[g];if(f.disabled!==f.a)if(f.disabled){f.disabled=p;f.a=k;f.disabled=k}else f.a=f.disabled}},250)}if(!/*@cc_on!@*/true){var n=document,H=n.documentElement,v=function(){if(A.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return null}}(),s=/MSIE ([\d])/.exec(navigator.userAgent)[1];if(!(n.compatMode!="CSS1Compat"||s<6||s>8||!v)){var L={NW:"*.Dom.select",DOMAssistant:"*.$",Prototype:"$$",YAHOO:"*.util.Selector.query",MooTools:"$$",Sizzle:"*",jQuery:"*",dojo:"*.query"},y,z=[],aa=0,$=k,I="slvzr",M=I+"DOMReady",da=/(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g,ea=/@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g,fa=/\burl\(\s*(["']?)([^"')]+)\1\s*\)/g,Z=/^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/,O=/:(:first-(?:line|letter))/g,P=/(^|})\s*([^\{]*?[\[:][^{]+)/g,T=/([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g,U=/(:not\()?:(hover|enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g,ba=/[^\w-]/g,Y=/^(INPUT|SELECT|TEXTAREA|BUTTON)$/,X=/^(checkbox|radio)$/,F=s>6?/[\$\^*]=(['"])\1/:null,R=/([(\[+~])\s+/g,S=/\s+([)\]+~])/g,ca=/\s+/g,J=/^\s*((?:[\S\s]*\S)?)\s*$/,o="",w=" ",q="$1";n.write("<script id="+M+" defer src='//:'><\/script>");n.getElementById(M).onreadystatechange=function(){if(this.readyState=="complete"){a:{var a,b;for(b in L)if(A[b]&&(a=eval(L[b].replace("*",b)))){y=a;break a}y=p}if(y){ga();this.parentNode.removeChild(this)}}}}}})(this);
\ No newline at end of file diff --git a/source/javascripts/libs/ios-viewport-scaling-bug-fix.js b/source/javascripts/libs/ios-viewport-scaling-bug-fix.js deleted file mode 100644 index 0e8d701d..00000000 --- a/source/javascripts/libs/ios-viewport-scaling-bug-fix.js +++ /dev/null @@ -1,20 +0,0 @@ -// https://gist.github.com/901295 -// By @mathias, @cheeaun and @jdalton - -(function(doc) { - var addEvent = 'addEventListener', - type = 'gesturestart', - qsa = 'querySelectorAll', - scales = [1, 1], - meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; - function fix() { - meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1]; - doc.removeEventListener(type, fix, true); - } - if ((meta = meta[meta.length - 1]) && addEvent in doc) { - fix(); - scales = [.25, 1.6]; - doc[addEvent](type, fix, true); - } -}(document)); - diff --git a/source/javascripts/libs/jXHR.js b/source/javascripts/libs/jXHR.js deleted file mode 100644 index 6775655c..00000000 --- a/source/javascripts/libs/jXHR.js +++ /dev/null @@ -1,85 +0,0 @@ -// jXHR.js (JSON-P XHR) -// v0.1 (c) Kyle Simpson -// MIT License - -(function(global){ - var SETTIMEOUT = global.setTimeout, // for better compression - doc = global.document, - callback_counter = 0; - - global.jXHR = function() { - var script_url, - script_loaded, - jsonp_callback, - scriptElem, - publicAPI = null; - - function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } } - - function reset() { - script_loaded = false; - script_url = ""; - removeScript(); - scriptElem = null; - fireReadyStateChange(0); - } - - function ThrowError(msg) { - try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); } - } - - function handleScriptLoad() { - if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; } - this.onload = this.onreadystatechange = null; // prevent memory leak - script_loaded = true; - if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"]."); - removeScript(); - } - - function fireReadyStateChange(rs,args) { - args = args || []; - publicAPI.readyState = rs; - if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args); - } - - publicAPI = { - onerror:null, - onreadystatechange:null, - readyState:0, - open:function(method,url){ - reset(); - internal_callback = "cb"+(callback_counter++); - (function(icb){ - global.jXHR[icb] = function() { - try { fireReadyStateChange.call(publicAPI,4,arguments); } - catch(err) { - publicAPI.readyState = -1; - ThrowError("Script failed to run ["+script_url+"]."); - } - global.jXHR[icb] = null; - }; - })(internal_callback); - script_url = url.replace(/=\?/,"=jXHR."+internal_callback); - fireReadyStateChange(1); - }, - send:function(){ - SETTIMEOUT(function(){ - scriptElem = doc.createElement("script"); - scriptElem.setAttribute("type","text/javascript"); - scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);}; - scriptElem.setAttribute("src",script_url); - doc.getElementsByTagName("head")[0].appendChild(scriptElem); - },0); - fireReadyStateChange(2); - }, - setRequestHeader:function(){}, // noop - getResponseHeader:function(){return "";}, // basically noop - getAllResponseHeaders:function(){return [];} // ditto - }; - - reset(); - - return publicAPI; - }; -})(window); - diff --git a/source/javascripts/libs/json2.js b/source/javascripts/libs/json2.js deleted file mode 100644 index 5e61c56f..00000000 --- a/source/javascripts/libs/json2.js +++ /dev/null @@ -1,481 +0,0 @@ -/* - http://www.JSON.org/json2.js - 2011-02-23 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, strict: false, regexp: false */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -var JSON; -if (!JSON) { - JSON = {}; -} - -(function () { - "use strict"; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : gap ? - '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : gap ? - '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : - '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); - diff --git a/source/javascripts/libs/modernizr-1.7.js b/source/javascripts/libs/modernizr-1.7.js deleted file mode 100644 index a7f86db1..00000000 --- a/source/javascripts/libs/modernizr-1.7.js +++ /dev/null @@ -1,964 +0,0 @@ -/*! - * Modernizr v1.7 - * http://www.modernizr.com - * - * Developed by: - * - Faruk Ates http://farukat.es/ - * - Paul Irish http://paulirish.com/ - * - * Copyright (c) 2009-2011 - * Dual-licensed under the BSD or MIT licenses. - * http://www.modernizr.com/license/ - */ - - -/* - * Modernizr is a script that detects native CSS3 and HTML5 features - * available in the current UA and provides an object containing all - * features with a true/false value, depending on whether the UA has - * native support for it or not. - * - * Modernizr will also add classes to the <html> element of the page, - * one for each feature it detects. If the UA supports it, a class - * like "cssgradients" will be added. If not, the class name will be - * "no-cssgradients". This allows for simple if-conditionals in your - * CSS, giving you fine control over the look & feel of your website. - * - * @author Faruk Ates - * @author Paul Irish - * @copyright (c) 2009-2011 Faruk Ates. - * @contributor Ben Alman - */ - -window.Modernizr = (function(window,document,undefined){ - - var version = '1.7', - - ret = {}, - - /** - * !! DEPRECATED !! - * - * enableHTML5 is a private property for advanced use only. If enabled, - * it will make Modernizr.init() run through a brief while() loop in - * which it will create all HTML5 elements in the DOM to allow for - * styling them in Internet Explorer, which does not recognize any - * non-HTML4 elements unless created in the DOM this way. - * - * enableHTML5 is ON by default. - * - * The enableHTML5 toggle option is DEPRECATED as per 1.6, and will be - * replaced in 2.0 in lieu of the modular, configurable nature of 2.0. - */ - enableHTML5 = true, - - - docElement = document.documentElement, - docHead = document.head || document.getElementsByTagName('head')[0], - - /** - * Create our "modernizr" element that we do most feature tests on. - */ - mod = 'modernizr', - modElem = document.createElement( mod ), - m_style = modElem.style, - - /** - * Create the input element for various Web Forms feature tests. - */ - inputElem = document.createElement( 'input' ), - - smile = ':)', - - tostring = Object.prototype.toString, - - // List of property values to set for css tests. See ticket #21 - prefixes = ' -webkit- -moz- -o- -ms- -khtml- '.split(' '), - - // Following spec is to expose vendor-specific style properties as: - // elem.style.WebkitBorderRadius - // and the following would be incorrect: - // elem.style.webkitBorderRadius - - // Webkit ghosts their properties in lowercase but Opera & Moz do not. - // Microsoft foregoes prefixes entirely <= IE8, but appears to - // use a lowercase `ms` instead of the correct `Ms` in IE9 - - // More here: http://github.com/Modernizr/Modernizr/issues/issue/21 - domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), - - ns = {'svg': 'http://www.w3.org/2000/svg'}, - - tests = {}, - inputs = {}, - attrs = {}, - - classes = [], - - featurename, // used in testing loop - - - - // todo: consider using http://javascript.nwbox.com/CSSSupport/css-support.js instead - testMediaQuery = function(mq){ - - var st = document.createElement('style'), - div = document.createElement('div'), - ret; - - st.textContent = mq + '{#modernizr{height:3px}}'; - docHead.appendChild(st); - div.id = 'modernizr'; - docElement.appendChild(div); - - ret = div.offsetHeight === 3; - - st.parentNode.removeChild(st); - div.parentNode.removeChild(div); - - return !!ret; - - }, - - - /** - * isEventSupported determines if a given element supports the given event - * function from http://yura.thinkweb2.com/isEventSupported/ - */ - isEventSupported = (function(){ - - var TAGNAMES = { - 'select':'input','change':'input', - 'submit':'form','reset':'form', - 'error':'img','load':'img','abort':'img' - }; - - function isEventSupported(eventName, element) { - - element = element || document.createElement(TAGNAMES[eventName] || 'div'); - eventName = 'on' + eventName; - - // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those - var isSupported = (eventName in element); - - if (!isSupported) { - // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element - if (!element.setAttribute) { - element = document.createElement('div'); - } - if (element.setAttribute && element.removeAttribute) { - element.setAttribute(eventName, ''); - isSupported = is(element[eventName], 'function'); - - // If property was created, "remove it" (by setting value to `undefined`) - if (!is(element[eventName], undefined)) { - element[eventName] = undefined; - } - element.removeAttribute(eventName); - } - } - - element = null; - return isSupported; - } - return isEventSupported; - })(); - - - // hasOwnProperty shim by kangax needed for Safari 2.0 support - var _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty; - if (!is(_hasOwnProperty, undefined) && !is(_hasOwnProperty.call, undefined)) { - hasOwnProperty = function (object, property) { - return _hasOwnProperty.call(object, property); - }; - } - else { - hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */ - return ((property in object) && is(object.constructor.prototype[property], undefined)); - }; - } - - /** - * set_css applies given styles to the Modernizr DOM node. - */ - function set_css( str ) { - m_style.cssText = str; - } - - /** - * set_css_all extrapolates all vendor-specific css strings. - */ - function set_css_all( str1, str2 ) { - return set_css(prefixes.join(str1 + ';') + ( str2 || '' )); - } - - /** - * is returns a boolean for if typeof obj is exactly type. - */ - function is( obj, type ) { - return typeof obj === type; - } - - /** - * contains returns a boolean for if substr is found within str. - */ - function contains( str, substr ) { - return (''+str).indexOf( substr ) !== -1; - } - - /** - * test_props is a generic CSS / DOM property test; if a browser supports - * a certain property, it won't return undefined for it. - * A supported CSS property returns empty string when its not yet set. - */ - function test_props( props, callback ) { - for ( var i in props ) { - if ( m_style[ props[i] ] !== undefined && ( !callback || callback( props[i], modElem ) ) ) { - return true; - } - } - } - - /** - * test_props_all tests a list of DOM properties we want to check against. - * We specify literally ALL possible (known and/or likely) properties on - * the element including the non-vendor prefixed one, for forward- - * compatibility. - */ - function test_props_all( prop, callback ) { - - var uc_prop = prop.charAt(0).toUpperCase() + prop.substr(1), - props = (prop + ' ' + domPrefixes.join(uc_prop + ' ') + uc_prop).split(' '); - - return !!test_props( props, callback ); - } - - - /** - * Tests - * ----- - */ - - tests['flexbox'] = function() { - /** - * set_prefixed_value_css sets the property of a specified element - * adding vendor prefixes to the VALUE of the property. - * @param {Element} element - * @param {string} property The property name. This will not be prefixed. - * @param {string} value The value of the property. This WILL be prefixed. - * @param {string=} extra Additional CSS to append unmodified to the end of - * the CSS string. - */ - function set_prefixed_value_css(element, property, value, extra) { - property += ':'; - element.style.cssText = (property + prefixes.join(value + ';' + property)).slice(0, -property.length) + (extra || ''); - } - - /** - * set_prefixed_property_css sets the property of a specified element - * adding vendor prefixes to the NAME of the property. - * @param {Element} element - * @param {string} property The property name. This WILL be prefixed. - * @param {string} value The value of the property. This will not be prefixed. - * @param {string=} extra Additional CSS to append unmodified to the end of - * the CSS string. - */ - function set_prefixed_property_css(element, property, value, extra) { - element.style.cssText = prefixes.join(property + ':' + value + ';') + (extra || ''); - } - - var c = document.createElement('div'), - elem = document.createElement('div'); - - set_prefixed_value_css(c, 'display', 'box', 'width:42px;padding:0;'); - set_prefixed_property_css(elem, 'box-flex', '1', 'width:10px;'); - - c.appendChild(elem); - docElement.appendChild(c); - - var ret = elem.offsetWidth === 42; - - c.removeChild(elem); - docElement.removeChild(c); - - return ret; - }; - - // On the S60 and BB Storm, getContext exists, but always returns undefined - // http://github.com/Modernizr/Modernizr/issues/issue/97/ - - tests['canvas'] = function() { - var elem = document.createElement( 'canvas' ); - return !!(elem.getContext && elem.getContext('2d')); - }; - - tests['canvastext'] = function() { - return !!(ret['canvas'] && is(document.createElement( 'canvas' ).getContext('2d').fillText, 'function')); - }; - - // This WebGL test false positives in FF depending on graphics hardware. But really it's quite impossible to know - // wether webgl will succeed until after you create the context. You might have hardware that can support - // a 100x100 webgl canvas, but will not support a 1000x1000 webgl canvas. So this feature inference is weak, - // but intentionally so. - tests['webgl'] = function(){ - return !!window.WebGLRenderingContext; - }; - - /* - * The Modernizr.touch test only indicates if the browser supports - * touch events, which does not necessarily reflect a touchscreen - * device, as evidenced by tablets running Windows 7 or, alas, - * the Palm Pre / WebOS (touch) phones. - * - * Additionally, Chrome (desktop) used to lie about its support on this, - * but that has since been rectified: http://crbug.com/36415 - * - * We also test for Firefox 4 Multitouch Support. - * - * For more info, see: http://modernizr.github.com/Modernizr/touch.html - */ - - tests['touch'] = function() { - - return ('ontouchstart' in window) || testMediaQuery('@media ('+prefixes.join('touch-enabled),(')+'modernizr)'); - - }; - - - /** - * geolocation tests for the new Geolocation API specification. - * This test is a standards compliant-only test; for more complete - * testing, including a Google Gears fallback, please see: - * http://code.google.com/p/geo-location-javascript/ - * or view a fallback solution using google's geo API: - * http://gist.github.com/366184 - */ - tests['geolocation'] = function() { - return !!navigator.geolocation; - }; - - // Per 1.6: - // This used to be Modernizr.crosswindowmessaging but the longer - // name has been deprecated in favor of a shorter and property-matching one. - // The old API is still available in 1.6, but as of 2.0 will throw a warning, - // and in the first release thereafter disappear entirely. - tests['postmessage'] = function() { - return !!window.postMessage; - }; - - // Web SQL database detection is tricky: - - // In chrome incognito mode, openDatabase is truthy, but using it will - // throw an exception: http://crbug.com/42380 - // We can create a dummy database, but there is no way to delete it afterwards. - - // Meanwhile, Safari users can get prompted on any database creation. - // If they do, any page with Modernizr will give them a prompt: - // http://github.com/Modernizr/Modernizr/issues/closed#issue/113 - - // We have chosen to allow the Chrome incognito false positive, so that Modernizr - // doesn't litter the web with these test databases. As a developer, you'll have - // to account for this gotcha yourself. - tests['websqldatabase'] = function() { - var result = !!window.openDatabase; - /* if (result){ - try { - result = !!openDatabase( mod + "testdb", "1.0", mod + "testdb", 2e4); - } catch(e) { - } - } */ - return result; - }; - - // Vendors have inconsistent prefixing with the experimental Indexed DB: - // - Firefox is shipping indexedDB in FF4 as moz_indexedDB - // - Webkit's implementation is accessible through webkitIndexedDB - // We test both styles. - tests['indexedDB'] = function(){ - for (var i = -1, len = domPrefixes.length; ++i < len; ){ - var prefix = domPrefixes[i].toLowerCase(); - if (window[prefix + '_indexedDB'] || window[prefix + 'IndexedDB']){ - return true; - } - } - return false; - }; - - // documentMode logic from YUI to filter out IE8 Compat Mode - // which false positives. - tests['hashchange'] = function() { - return isEventSupported('hashchange', window) && ( document.documentMode === undefined || document.documentMode > 7 ); - }; - - // Per 1.6: - // This used to be Modernizr.historymanagement but the longer - // name has been deprecated in favor of a shorter and property-matching one. - // The old API is still available in 1.6, but as of 2.0 will throw a warning, - // and in the first release thereafter disappear entirely. - tests['history'] = function() { - return !!(window.history && history.pushState); - }; - - tests['draganddrop'] = function() { - return isEventSupported('dragstart') && isEventSupported('drop'); - }; - - tests['websockets'] = function(){ - return ('WebSocket' in window); - }; - - - // http://css-tricks.com/rgba-browser-support/ - tests['rgba'] = function() { - // Set an rgba() color and check the returned value - - set_css( 'background-color:rgba(150,255,150,.5)' ); - - return contains( m_style.backgroundColor, 'rgba' ); - }; - - tests['hsla'] = function() { - // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally, - // except IE9 who retains it as hsla - - set_css('background-color:hsla(120,40%,100%,.5)' ); - - return contains( m_style.backgroundColor, 'rgba' ) || contains( m_style.backgroundColor, 'hsla' ); - }; - - tests['multiplebgs'] = function() { - // Setting multiple images AND a color on the background shorthand property - // and then querying the style.background property value for the number of - // occurrences of "url(" is a reliable method for detecting ACTUAL support for this! - - set_css( 'background:url(//:),url(//:),red url(//:)' ); - - // If the UA supports multiple backgrounds, there should be three occurrences - // of the string "url(" in the return value for elem_style.background - - return new RegExp("(url\\s*\\(.*?){3}").test(m_style.background); - }; - - - // In testing support for a given CSS property, it's legit to test: - // `elem.style[styleName] !== undefined` - // If the property is supported it will return an empty string, - // if unsupported it will return undefined. - - // We'll take advantage of this quick test and skip setting a style - // on our modernizr element, but instead just testing undefined vs - // empty string. - - - tests['backgroundsize'] = function() { - return test_props_all( 'backgroundSize' ); - }; - - tests['borderimage'] = function() { - return test_props_all( 'borderImage' ); - }; - - - // Super comprehensive table about all the unique implementations of - // border-radius: http://muddledramblings.com/table-of-css3-border-radius-compliance - - tests['borderradius'] = function() { - return test_props_all( 'borderRadius', '', function( prop ) { - return contains( prop, 'orderRadius' ); - }); - }; - - // WebOS unfortunately false positives on this test. - tests['boxshadow'] = function() { - return test_props_all( 'boxShadow' ); - }; - - // FF3.0 will false positive on this test - tests['textshadow'] = function(){ - return document.createElement('div').style.textShadow === ''; - }; - - - tests['opacity'] = function() { - // Browsers that actually have CSS Opacity implemented have done so - // according to spec, which means their return values are within the - // range of [0.0,1.0] - including the leading zero. - - set_css_all( 'opacity:.55' ); - - // The non-literal . in this regex is intentional: - // German Chrome returns this value as 0,55 - // https://github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632 - return /^0.55$/.test(m_style.opacity); - }; - - - tests['cssanimations'] = function() { - return test_props_all( 'animationName' ); - }; - - - tests['csscolumns'] = function() { - return test_props_all( 'columnCount' ); - }; - - - tests['cssgradients'] = function() { - /** - * For CSS Gradients syntax, please see: - * http://webkit.org/blog/175/introducing-css-gradients/ - * https://developer.mozilla.org/en/CSS/-moz-linear-gradient - * https://developer.mozilla.org/en/CSS/-moz-radial-gradient - * http://dev.w3.org/csswg/css3-images/#gradients- - */ - - var str1 = 'background-image:', - str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', - str3 = 'linear-gradient(left top,#9f9, white);'; - - set_css( - (str1 + prefixes.join(str2 + str1) + prefixes.join(str3 + str1)).slice(0,-str1.length) - ); - - return contains( m_style.backgroundImage, 'gradient' ); - }; - - - tests['cssreflections'] = function() { - return test_props_all( 'boxReflect' ); - }; - - - tests['csstransforms'] = function() { - return !!test_props([ 'transformProperty', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform' ]); - }; - - - tests['csstransforms3d'] = function() { - - var ret = !!test_props([ 'perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective' ]); - - // Webkit’s 3D transforms are passed off to the browser's own graphics renderer. - // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in - // some conditions. As a result, Webkit typically recognizes the syntax but - // will sometimes throw a false positive, thus we must do a more thorough check: - if (ret && 'webkitPerspective' in docElement.style){ - - // Webkit allows this media query to succeed only if the feature is enabled. - // `@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-ms-transform-3d),(-webkit-transform-3d),(modernizr){ ... }` - ret = testMediaQuery('@media ('+prefixes.join('transform-3d),(')+'modernizr)'); - } - return ret; - }; - - - tests['csstransitions'] = function() { - return test_props_all( 'transitionProperty' ); - }; - - - // @font-face detection routine by Diego Perini - // http://javascript.nwbox.com/CSSSupport/ - tests['fontface'] = function(){ - - var - sheet, bool, - head = docHead || docElement, - style = document.createElement("style"), - impl = document.implementation || { hasFeature: function() { return false; } }; - - style.type = 'text/css'; - head.insertBefore(style, head.firstChild); - sheet = style.sheet || style.styleSheet; - - var supportAtRule = impl.hasFeature('CSS2', '') ? - function(rule) { - if (!(sheet && rule)) return false; - var result = false; - try { - sheet.insertRule(rule, 0); - result = (/src/i).test(sheet.cssRules[0].cssText); - sheet.deleteRule(sheet.cssRules.length - 1); - } catch(e) { } - return result; - } : - function(rule) { - if (!(sheet && rule)) return false; - sheet.cssText = rule; - - return sheet.cssText.length !== 0 && (/src/i).test(sheet.cssText) && - sheet.cssText - .replace(/\r+|\n+/g, '') - .indexOf(rule.split(' ')[0]) === 0; - }; - - bool = supportAtRule('@font-face { font-family: "font"; src: url(data:,); }'); - head.removeChild(style); - return bool; - }; - - - // These tests evaluate support of the video/audio elements, as well as - // testing what types of content they support. - // - // We're using the Boolean constructor here, so that we can extend the value - // e.g. Modernizr.video // true - // Modernizr.video.ogg // 'probably' - // - // Codec values from : http://github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845 - // thx to NielsLeenheer and zcorpan - - // Note: in FF 3.5.1 and 3.5.0, "no" was a return value instead of empty string. - // Modernizr does not normalize for that. - - tests['video'] = function() { - var elem = document.createElement('video'), - bool = !!elem.canPlayType; - - if (bool){ - bool = new Boolean(bool); - bool.ogg = elem.canPlayType('video/ogg; codecs="theora"'); - - // Workaround required for IE9, which doesn't report video support without audio codec specified. - // bug 599718 @ msft connect - var h264 = 'video/mp4; codecs="avc1.42E01E'; - bool.h264 = elem.canPlayType(h264 + '"') || elem.canPlayType(h264 + ', mp4a.40.2"'); - - bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"'); - } - return bool; - }; - - tests['audio'] = function() { - var elem = document.createElement('audio'), - bool = !!elem.canPlayType; - - if (bool){ - bool = new Boolean(bool); - bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"'); - bool.mp3 = elem.canPlayType('audio/mpeg;'); - - // Mimetypes accepted: - // https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements - // http://bit.ly/iphoneoscodecs - bool.wav = elem.canPlayType('audio/wav; codecs="1"'); - bool.m4a = elem.canPlayType('audio/x-m4a;') || elem.canPlayType('audio/aac;'); - } - return bool; - }; - - - // Firefox has made these tests rather unfun. - - // In FF4, if disabled, window.localStorage should === null. - - // Normally, we could not test that directly and need to do a - // `('localStorage' in window) && ` test first because otherwise Firefox will - // throw http://bugzil.la/365772 if cookies are disabled - - // However, in Firefox 4 betas, if dom.storage.enabled == false, just mentioning - // the property will throw an exception. http://bugzil.la/599479 - // This looks to be fixed for FF4 Final. - - // Because we are forced to try/catch this, we'll go aggressive. - - // FWIW: IE8 Compat mode supports these features completely: - // http://www.quirksmode.org/dom/html5.html - // But IE8 doesn't support either with local files - - tests['localstorage'] = function() { - try { - return !!localStorage.getItem; - } catch(e) { - return false; - } - }; - - tests['sessionstorage'] = function() { - try { - return !!sessionStorage.getItem; - } catch(e){ - return false; - } - }; - - - tests['webWorkers'] = function () { - return !!window.Worker; - }; - - - tests['applicationcache'] = function() { - return !!window.applicationCache; - }; - - - // Thanks to Erik Dahlstrom - tests['svg'] = function(){ - return !!document.createElementNS && !!document.createElementNS(ns.svg, "svg").createSVGRect; - }; - - tests['inlinesvg'] = function() { - var div = document.createElement('div'); - div.innerHTML = '<svg/>'; - return (div.firstChild && div.firstChild.namespaceURI) == ns.svg; - }; - - // Thanks to F1lt3r and lucideer - // http://github.com/Modernizr/Modernizr/issues#issue/35 - tests['smil'] = function(){ - return !!document.createElementNS && /SVG/.test(tostring.call(document.createElementNS(ns.svg,'animate'))); - }; - - tests['svgclippaths'] = function(){ - // Possibly returns a false positive in Safari 3.2? - return !!document.createElementNS && /SVG/.test(tostring.call(document.createElementNS(ns.svg,'clipPath'))); - }; - - - // input features and input types go directly onto the ret object, bypassing the tests loop. - // Hold this guy to execute in a moment. - function webforms(){ - - // Run through HTML5's new input attributes to see if the UA understands any. - // We're using f which is the <input> element created early on - // Mike Taylr has created a comprehensive resource for testing these attributes - // when applied to all input types: - // http://miketaylr.com/code/input-type-attr.html - // spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary - ret['input'] = (function(props) { - for (var i = 0, len = props.length; i<len; i++) { - attrs[ props[i] ] = !!(props[i] in inputElem); - } - return attrs; - })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); - - // Run through HTML5's new input types to see if the UA understands any. - // This is put behind the tests runloop because it doesn't return a - // true/false like all the other tests; instead, it returns an object - // containing each input type with its corresponding true/false value - - // Big thanks to @miketaylr for the html5 forms expertise. http://miketaylr.com/ - ret['inputtypes'] = (function(props) { - - for (var i = 0, bool, inputElemType, defaultView, len=props.length; i < len; i++) { - - inputElem.setAttribute('type', inputElemType = props[i]); - bool = inputElem.type !== 'text'; - - // We first check to see if the type we give it sticks.. - // If the type does, we feed it a textual value, which shouldn't be valid. - // If the value doesn't stick, we know there's input sanitization which infers a custom UI - if (bool){ - - inputElem.value = smile; - inputElem.style.cssText = 'position:absolute;visibility:hidden;'; - - if (/^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined){ - - docElement.appendChild(inputElem); - defaultView = document.defaultView; - - // Safari 2-4 allows the smiley as a value, despite making a slider - bool = defaultView.getComputedStyle && - defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && - // Mobile android web browser has false positive, so must - // check the height to see if the widget is actually there. - (inputElem.offsetHeight !== 0); - - docElement.removeChild(inputElem); - - } else if (/^(search|tel)$/.test(inputElemType)){ - // Spec doesnt define any special parsing or detectable UI - // behaviors so we pass these through as true - - // Interestingly, opera fails the earlier test, so it doesn't - // even make it here. - - } else if (/^(url|email)$/.test(inputElemType)) { - // Real url and email support comes with prebaked validation. - bool = inputElem.checkValidity && inputElem.checkValidity() === false; - - } else if (/^color$/.test(inputElemType)) { - // chuck into DOM and force reflow for Opera bug in 11.00 - // github.com/Modernizr/Modernizr/issues#issue/159 - docElement.appendChild(inputElem); - docElement.offsetWidth; - bool = inputElem.value != smile; - docElement.removeChild(inputElem); - - } else { - // If the upgraded input compontent rejects the :) text, we got a winner - bool = inputElem.value != smile; - } - } - - inputs[ props[i] ] = !!bool; - } - return inputs; - })('search tel url email datetime date month week time datetime-local number range color'.split(' ')); - - } - - - - // End of test definitions - // ----------------------- - - - - // Run through all tests and detect their support in the current UA. - // todo: hypothetically we could be doing an array of tests and use a basic loop here. - for ( var feature in tests ) { - if ( hasOwnProperty( tests, feature ) ) { - // run the test, throw the return value into the Modernizr, - // then based on that boolean, define an appropriate className - // and push it into an array of classes we'll join later. - featurename = feature.toLowerCase(); - ret[ featurename ] = tests[ feature ](); - - classes.push( ( ret[ featurename ] ? '' : 'no-' ) + featurename ); - } - } - - // input tests need to run. - if (!ret.input) webforms(); - - - - // Per 1.6: deprecated API is still accesible for now: - ret.crosswindowmessaging = ret.postmessage; - ret.historymanagement = ret.history; - - - - /** - * Addtest allows the user to define their own feature tests - * the result will be added onto the Modernizr object, - * as well as an appropriate className set on the html element - * - * @param feature - String naming the feature - * @param test - Function returning true if feature is supported, false if not - */ - ret.addTest = function (feature, test) { - feature = feature.toLowerCase(); - - if (ret[ feature ]) { - return; // quit if you're trying to overwrite an existing test - } - test = !!(test()); - docElement.className += ' ' + (test ? '' : 'no-') + feature; - ret[ feature ] = test; - return ret; // allow chaining. - }; - - /** - * Reset m.style.cssText to nothing to reduce memory footprint. - */ - set_css( '' ); - modElem = inputElem = null; - - //>>BEGIN IEPP - // Enable HTML 5 elements for styling in IE. - // fyi: jscript version does not reflect trident version - // therefore ie9 in ie7 mode will still have a jScript v.9 - if ( enableHTML5 && window.attachEvent && (function(){ var elem = document.createElement("div"); - elem.innerHTML = "<elem></elem>"; - return elem.childNodes.length !== 1; })()) { - // iepp v1.6.2 by @jon_neal : code.google.com/p/ie-print-protector - (function(win, doc) { - var elems = 'abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video', - elemsArr = elems.split('|'), - elemsArrLen = elemsArr.length, - elemRegExp = new RegExp('(^|\\s)('+elems+')', 'gi'), - tagRegExp = new RegExp('<(\/*)('+elems+')', 'gi'), - ruleRegExp = new RegExp('(^|[^\\n]*?\\s)('+elems+')([^\\n]*)({[\\n\\w\\W]*?})', 'gi'), - docFrag = doc.createDocumentFragment(), - html = doc.documentElement, - head = html.firstChild, - bodyElem = doc.createElement('body'), - styleElem = doc.createElement('style'), - body; - function shim(doc) { - var a = -1; - while (++a < elemsArrLen) - // Use createElement so IE allows HTML5-named elements in a document - doc.createElement(elemsArr[a]); - } - function getCSS(styleSheetList, mediaType) { - var a = -1, - len = styleSheetList.length, - styleSheet, - cssTextArr = []; - while (++a < len) { - styleSheet = styleSheetList[a]; - // Get css from all non-screen stylesheets and their imports - if ((mediaType = styleSheet.media || mediaType) != 'screen') cssTextArr.push(getCSS(styleSheet.imports, mediaType), styleSheet.cssText); - } - return cssTextArr.join(''); - } - // Shim the document and iepp fragment - shim(doc); - shim(docFrag); - // Add iepp custom print style element - head.insertBefore(styleElem, head.firstChild); - styleElem.media = 'print'; - win.attachEvent( - 'onbeforeprint', - function() { - var a = -1, - cssText = getCSS(doc.styleSheets, 'all'), - cssTextArr = [], - rule; - body = body || doc.body; - // Get only rules which reference HTML5 elements by name - while ((rule = ruleRegExp.exec(cssText)) != null) - // Replace all html5 element references with iepp substitute classnames - cssTextArr.push((rule[1]+rule[2]+rule[3]).replace(elemRegExp, '$1.iepp_$2')+rule[4]); - // Write iepp custom print CSS - styleElem.styleSheet.cssText = cssTextArr.join('\n'); - while (++a < elemsArrLen) { - var nodeList = doc.getElementsByTagName(elemsArr[a]), - nodeListLen = nodeList.length, - b = -1; - while (++b < nodeListLen) - if (nodeList[b].className.indexOf('iepp_') < 0) - // Append iepp substitute classnames to all html5 elements - nodeList[b].className += ' iepp_'+elemsArr[a]; - } - docFrag.appendChild(body); - html.appendChild(bodyElem); - // Write iepp substitute print-safe document - bodyElem.className = body.className; - // Replace HTML5 elements with <font> which is print-safe and shouldn't conflict since it isn't part of html5 - bodyElem.innerHTML = body.innerHTML.replace(tagRegExp, '<$1font'); - } - ); - win.attachEvent( - 'onafterprint', - function() { - // Undo everything done in onbeforeprint - bodyElem.innerHTML = ''; - html.removeChild(bodyElem); - html.appendChild(body); - styleElem.styleSheet.cssText = ''; - } - ); - })(window, document); - } - //>>END IEPP - - // Assign private properties to the return object with prefix - ret._enableHTML5 = enableHTML5; - ret._version = version; - - // Remove "no-js" class from <html> element, if it exists: - docElement.className = docElement.className.replace(/\bno-js\b/,'') - + ' js ' - - // Add the new classes to the <html> element. - + classes.join( ' ' ); - - return ret; - -})(this,this.document);
\ No newline at end of file diff --git a/source/javascripts/octopress.js b/source/javascripts/octopress.js deleted file mode 100644 index e69de29b..00000000 --- a/source/javascripts/octopress.js +++ /dev/null diff --git a/source/javascripts/pinboard.js b/source/javascripts/pinboard.js deleted file mode 100644 index cff7ccc4..00000000 --- a/source/javascripts/pinboard.js +++ /dev/null @@ -1,48 +0,0 @@ -function pinboardNS_fetch_script(url) { - console.log(url); - document.writeln('<s'+'cript type="text/javascript" src="' + url + '"></s'+'cript>'); -} - -function pinboardNS_show_bmarks(r) { - var lr = new Pinboard_Linkroll(); - lr.set_items(r); - lr.show_bmarks(); -} - -function Pinboard_Linkroll() { - var items; - - this.set_items = function(i) { - this.items = i; - } - this.show_bmarks = function() { - var lines = []; - for (var i = 0; i < this.items.length; i++) { - var item = this.items[i]; - var str = this.format_item(item); - lines.push(str); - } - document.getElementById(linkroll).innerHTML = lines.join("\n"); - } - this.cook = function(v) { - return v.replace('<', '<').replace('>', '>>'); - } - - this.format_item = function(it) { - var str = "<li class=\"pin-item\">"; - if (!it.d) { return; } - str += "<p><a class=\"pin-title\" href=\"" + this.cook(it.u) + "\">" + this.cook(it.d) + "</a>"; - if (it.n) { - str += "<span class=\"pin-description\">" + this.cook(it.n) + "</span>\n"; - } - if (it.t.length > 0) { - for (var i = 0; i < it.t.length; i++) { - var tag = it.t[i]; - str += " <a class=\"pin-tag\" href=\"http://pinboard.in/u:"+ this.cook(it.a) + "/t:" + this.cook(tag) + "\">" + this.cook(tag).replace(/^\s+|\s+$/g, '') + "</a> "; - } - } - str += "</p></li>\n"; - return str; - } -} -Pinboard_Linkroll.prototype = new Pinboard_Linkroll(); diff --git a/source/javascripts/syntax-helper.js b/source/javascripts/syntax-helper.js deleted file mode 100644 index e1a6889b..00000000 --- a/source/javascripts/syntax-helper.js +++ /dev/null @@ -1,30 +0,0 @@ -function addDivLines(){ - $('div.highlight pre code').each(function(el){ - var content = bonzo(el).html(); - var lines = content.split('\n'); - var count = lines.length; - bonzo(lines).each(function(line, index){ - if(line == '') line = ' '; - lines[index] = '<div class="line">' + line + '</div>'; - }); - $(el).html(lines.join('')); - }); -} -function preToTable(){ - $('div.highlight').each(function(code){ - var tableStart = '<table cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">'; - var lineNumbers = '<pre class="line-numbers">'; - var tableMiddle = '</pre></td><td class="code" width="100%">'; - var tableEnd = '</td></tr></tbody></table>'; - var count = $('div.line', code).length; - for (i=1;i<=count; i++){ - lineNumbers += '<span class="line">'+i+'</span>\n'; - } - table = tableStart + lineNumbers + tableMiddle + '<pre>'+$('pre', code).html()+'</pre>' + tableEnd; - $(code).html(table); - }); -} -$.domReady(function () { - addDivLines(); - preToTable(); -}); diff --git a/source/javascripts/twitter.js b/source/javascripts/twitter.js deleted file mode 100644 index 2dad2882..00000000 --- a/source/javascripts/twitter.js +++ /dev/null @@ -1,64 +0,0 @@ -function getTwitterFeed(success, user, count, replies) { - feed = new jXHR(); - feed.onerror = function (msg,url) { alert(msg); } - feed.onreadystatechange = function(data){ - if (feed.readyState === 4) { - var tweets = new Array(); - for (i in data){ - if(tweets.length < count){ - if(replies || data[i].in_reply_to_user_id == null){ - tweets.push(data[i]); - } - } - } - success(tweets); - } - }; - feed.open("GET","http://twitter.com/statuses/user_timeline/"+user+".json?trim_user=true&count="+parseInt(count)+25+"&callback=?"); - feed.send(); -} - -getTwitterFeed(showTwitterFeed, twitter_user, tweet_count, show_replies); - -function showTwitterFeed(tweets){ - var timeline = document.getElementById('tweets'); - timeline.innerHTML=''; - for (t in tweets){ - timeline.innerHTML+='<li>'+'<p>'+'<a href="http://twitter.com/'+twitter_user+'/status/'+tweets[t].id_str+'"><span>∞</span><span>'+prettyDate(tweets[t].created_at)+'</span></a>'+linkifyTweet(tweets[t].text)+'</p>'+'</li>'; - } -} -function linkifyTweet(text){ - return text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>') - .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>') - .replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>'); -} - -function prettyDate(date_str){ - var time_formats = [ - [60, 'now', 1], // 60 - [120, '1 min', '1 minute from now'], // 60*2 - [3600, 'mins', 60], // 60*60, 60 - [7200, '1 hour', '1 hour from now'], // 60*60*2 - [86400, 'hours', 3600], // 60*60*24, 60*60 - [172800, '1 day', 'tomorrow'], // 60*60*24*2 - [2903040000, 'days', 86400], // 60*60*24*7, 60*60*24 - ]; - var time = ('' + date_str).replace(/-/g,"/").replace(/[TZ]/g," ").replace(/^\s\s*/, '').replace(/\s\s*$/, ''); - if(time.substr(time.length-4,1)==".") time =time.substr(0,time.length-4); - var seconds = (new Date - new Date(time)) / 1000; - var token = 'ago', list_choice = 1; - if (seconds < 0) { - seconds = Math.abs(seconds); - token = 'from now'; - list_choice = 2; - } - var i = 0, format; - while (format = time_formats[i++]) - if (seconds < format[0]) { - if (typeof format[2] == 'string') - return format[list_choice]; - else - return Math.floor(seconds / format[2]) + ' ' + format[1]; - } - return time; -}; |