UNPKG

chocolate

Version:

A full stack Node.js web framework built using Coffeescript

1,598 lines (1,560 loc) 58.3 kB
// Generated by CoffeeScript 1.12.6 (function() { var $, Dom, Events, Query, Style, base, base1, base2, core, core_array, core_hasOwn, core_isArraylike, core_object, core_toArray, core_version, i, k, len1, m, o, previous$, ref, v; if (!((typeof window !== "undefined" && window !== null) && !((window.$ != null) && (window.$.fn != null) && (window.$.fn.jquery != null)))) { return; } core_version = "0.1.1"; core_object = {}; core_array = []; core_toArray = function(a) { var i, item, result; if ($.type(a) === 'array') { return a; } i = -1; result = []; while (item = a[++i]) { result[i] = item; } return result; }; core_hasOwn = core_object.hasOwnProperty; core_isArraylike = function(obj) { var length, type; length = obj.length; type = $.type(obj); if ($.isWindow(obj)) { return false; } if (obj.nodeType === 1 && length) { return true; } return type === "array" || type !== "function" && (length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj); }; previous$ = window.$; $ = window.litejQ = function(s) { return new $.prototype.init(s); }; if (previous$ == null) { window.$ = $; } $.expando = "litejQ" + (core_version + Math.random()).replace(/\D/g, ""); $.noConflict = function() { window.$ = previous$; return $; }; $.type = function(obj) { var class2type; if (obj == null) { return String(obj); } class2type = { "[object Boolean]": "boolean", "[object Number]": "number", "[object String]": "string", "[object Function]": "function", "[object Array]": "array", "[object Date]": "date", "[object RegExp]": "regexp", "[object Object]": "object", "[object Error]": "error" }; if (typeof obj === "object" || typeof obj === "function") { return class2type[Object.prototype.toString.call(obj)] || "object"; } else { return typeof obj; } }; $.isArray = Array.isArray || function(obj) { return $.type(obj) === "array"; }; $.isWindow = function(obj) { return (obj != null) && obj === obj.window; }; $.isPlainObject = function(obj) { var key; if (!obj || $.type(obj) !== "object" || obj.nodeType || $.isWindow(obj)) { return false; } try { if (obj.constructor && !core_hasOwn.call(obj, "constructor") && !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { return false; } } catch (error1) { return false; } if ($.support.ownLast) { for (key in obj) { return core_hasOwn.call(obj, key); } } for (key in obj) { ({}); } return key === void 0 || core_hasOwn.call(obj, key); }; $.each = function(elements, callback) { var i, key; if (core_isArraylike(elements)) { i = 0; while (i < elements.length) { if (callback.call(elements[i], i, elements[i]) === false) { return elements; } i++; } } else { for (key in elements) { if (callback.call(elements[key], key, elements[key]) === false) { return elements; } } } return elements; }; $.map = function(elems, callback, arg) { var _mapone, i, length, ret, value; ret = []; i = 0; value = null; length = elems.length; _mapone = function() { value = callback(elems[i], i, arg); if (value != null) { return ret[ret.length] = value; } }; if (core_isArraylike(elems)) { while (i < length) { _mapone(); i++; } } else { for (i in elems) { _mapone(); } } return [].concat.apply([], ret); }; $.extend = function() { var clone, copy, copyIsArray, deep, i, length, name, options, src, target; target = arguments[0] || {}; i = 1; length = arguments.length; deep = false; if (typeof target === "boolean") { deep = target; target = arguments[1] || {}; i = 2; } if (typeof target !== "object" && !$.type(target) === "function") { target = {}; } if (length === i) { target = this; --i; } while (i < length) { if ((options = arguments[i]) != null) { for (name in options) { src = target[name]; copy = options[name]; if (target === copy) { continue; } if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && $.isArray(src) ? src : []; } else { clone = src && $.isPlainObject(src) ? src : {}; } target[name] = $.extend(deep, clone, copy); } else if (copy !== void 0) { target[name] = copy; } } } i += 1; } return target; }; $.globalEval = function(text) { var script; if (!text) { return text; } if (window.execScript) { window.execScript(text); } else { script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.text = text; document.head.appendChild(script); document.head.removeChild(script); } return text; }; $.Environment = (function() { var Mobile_is_webkit, Mobile_supported_os, _current, _detectBrowser, _detectEnvironment, _detectOS, _detectScreen; _current = null; Mobile_is_webkit = /WebKit\/([\d.]+)/; Mobile_supported_os = { Android: /(Android)\s+([\d.]+)/, ipad: /(iPad).*OS\s([\d_]+)/, iphone: /(iPhone\sOS)\s([\d_]+)/, Blackberry: /(BlackBerry|BB10|Playbook).*Version\/([\d.]+)/, FirefoxOS: /(Mozilla).*Mobile[^\/]*\/([\d\.]*)/, webOS: /(webOS|hpwOS)[\s\/]([\d.]+)/ }; _detectEnvironment = function() { var environment, user_agent; user_agent = navigator.userAgent; environment = {}; environment.browser = _detectBrowser(user_agent); environment.os = _detectOS(user_agent); environment.isMobile = !!environment.os; environment.screen = _detectScreen(); return environment; }; _detectBrowser = function(user_agent) { var is_webkit; is_webkit = user_agent.match(Mobile_is_webkit); if (is_webkit) { return is_webkit[0]; } else { return user_agent; } }; _detectOS = function(user_agent) { var detected_os, os, supported; detected_os = null; for (os in Mobile_supported_os) { supported = user_agent.match(Mobile_supported_os[os]); if (supported) { detected_os = { name: ((os === "iphone" || os === "ipad") ? "ios" : os), version: supported[2].replace("_", ".") }; break; } } return detected_os; }; _detectScreen = function() { return { width: window.innerWidth, height: window.innerHeight }; }; return { isMobile: function() { _current = _current || _detectEnvironment(); return _current.isMobile; }, environment: function() { _current = _current || _detectEnvironment(); return _current; }, isOnline: function() { return navigator.onLine; } }; })(); $.websocket = function(url, options) { var FallbackSocket; if (options == null) { options = {}; } FallbackSocket = function(url, options) { var CLOSED, CLOSING, CONNECTING, OPEN, furl, fws, getFallbackParams, openTimout, poll, pollInterval; if (options == null) { options = {}; } CONNECTING = 0; OPEN = 1; CLOSING = 2; CLOSED = 3; pollInterval = null; openTimout = null; if (options.fallbackPollInterval == null) { options.fallbackPollInterval = 3000; } if (options.fallbackPollParams == null) { options.fallbackPollParams = {}; } if (options.fallbackOnly == null) { options.fallbackOnly = false; } furl = url.replace('ws:', 'http:').replace('wss:', 'https:'); fws = { readyState: CONNECTING, bufferedAmount: 0, send: function(data) { var success; if (fws.socket_id == null) { return false; } success = true; $.ajax({ type: 'POST', url: furl + '?' + $.param(getFallbackParams()), data: data, dataType: 'text', headers: { 'x-litejq-websocket': 'fallback', 'x-litejq-websocket-id': fws.socket_id }, contentType: "application/x-www-form-urlencoded; charset=utf-8", success: function(data) { return fws.onmessage({ "data": data }); }, error: function(xhr) { success = false; return fws.onerror(xhr); } }); return success; }, close: function() { clearTimeout(openTimout); clearInterval(pollInterval); this.readyState = CLOSED; return fws.onclose(); }, onopen: function() {}, onmessage: function() {}, onerror: function() {}, onclose: function() {}, previousRequest: null, currentRequest: null, socket_id: null }; getFallbackParams = function() { fws.previousRequest = fws.currentRequest; fws.currentRequest = new Date().getTime(); return $.extend({ "previousRequest": fws.previousRequest, "currentRequest": fws.currentRequest }, options.fallbackPollParams); }; poll = function() { if (fws.socket_id == null) { return; } return $.ajax({ type: 'GET', url: furl + '?' + $.param(getFallbackParams()), dataType: 'text', headers: { 'x-litejq-websocket': 'fallback', 'x-litejq-websocket-id': fws.socket_id }, success: function(data) { fws.onmessage({ "data": data }); if ((data != null) && data !== '') { return setTimeout(poll, 0); } }, error: function(xhr) { return fws.onerror(xhr); } }); }; $.ajax({ type: 'OPTIONS', url: furl, dataType: 'text', headers: { 'x-litejq-websocket': 'fallback' }, success: function(data, xhr) { fws.socket_id = xhr.getResponseHeader('x-litejq-websocket-id'); fws.readyState = OPEN; fws.onopen(); poll(); return pollInterval = setInterval(poll, options.fallbackPollInterval); }, error: function(xhr) { return fws.onerror(xhr); } }); return fws; }; if (options.fallbackOnly || !window.WebSocket) { return new FallbackSocket(url, options); } else { return new WebSocket(url); } }; $.Ajax = (function() { var Ajax_default, Ajax_jsonp_id, Ajax_mime_types, Ajax_settings, _jsonp, _parseResponse, _xhrError, _xhrForm, _xhrHeaders, _xhrId, _xhrStatus, _xhrSuccess, _xhrTimeout; Ajax_default = { type: "GET", mime: "guess" }; Ajax_mime_types = { script: "text/javascript, application/javascript", json: "application/json", 'json-late': "application/json-late", xml: "application/xml, text/xml", html: "text/html", text: "text/plain", guess: "application/xml, text/xml, application/json, application/json-late, text/javascript, application/javascript, text/plain, text/html" }; Ajax_jsonp_id = 0; Ajax_settings = { type: Ajax_default.type, async: true, success: function() {}, error: function() {}, context: null, dataType: Ajax_default.mime, headers: { 'x-requested-with': 'XMLHttpRequest' }, xhr: function() { return new window.XMLHttpRequest(); }, crossDomain: false, timeout: 0, cache: true }; $.ajax = function(url, options) { var abortTimeout, dataType, error, settings, xhr; options = typeof url === "object" ? url : $.extend(options, { url: url }); settings = $.extend({}, Ajax_settings, options); if (settings.type === Ajax_default.type) { if (settings.data != null) { settings.url += "?" + $.param(settings.data); delete settings.data; } } else { settings.data = $.param(settings.data); } dataType = settings.dataType.toLowerCase(); if (settings.cache === false || (options != null ? options.cache : void 0) !== true && (dataType === 'jsonp' || dataType === 'script')) { settings.url += (settings.url.indexOf('?') >= 0 ? '&' : '?') + "_=" + (_xhrId++).toString(36); } if (dataType === 'jsonp') { return _jsonp(settings); } xhr = settings.xhr(); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { clearTimeout(abortTimeout); return _xhrStatus(xhr, settings); } }; xhr.open(settings.type, settings.url, settings.async); _xhrHeaders(xhr, settings); if (settings.timeout > 0) { abortTimeout = setTimeout((function() { return _xhrTimeout(xhr, settings); }), settings.timeout); } try { xhr.send(settings.data); } catch (error1) { error = error1; xhr = error; _xhrError("Resource not found", xhr, settings); } if (settings.async) { return xhr; } else { return _parseResponse(xhr, settings); } }; $.get = function(url, data, success, dataType) { return $.ajax({ url: url, data: data, success: success, dataType: dataType }); }; $.post = function(url, data, success, dataType) { return _xhrForm("POST", url, data, success, dataType); }; $.getJSON = $.getJson = function(url, data, success) { return $.get(url, data, success, 'json'); }; $.getScript = function(url, success) { return $.get(url, void 0, success, "script"); }; $.param = function(parameters) { var parameter, serialize; if ($.type(parameters) === 'string') { return encodeURIComponent(parameters); } serialize = []; for (parameter in parameters) { if (parameters.hasOwnProperty(parameter)) { serialize.push((encodeURIComponent(parameter)) + "=" + (encodeURIComponent(parameters[parameter]))); } } return serialize.join('&'); }; _xhrId = Date.now(); _xhrStatus = function(xhr, settings) { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) { if (settings.async) { _xhrSuccess(_parseResponse(xhr, settings), xhr, settings); } } else { _xhrError("$.ajax: Unsuccesful request", xhr, settings); } }; _xhrSuccess = function(response, xhr, settings) { settings.success.call(settings.context, response, xhr); }; _xhrError = function(type, xhr, settings) { settings.error.call(settings.context, type, xhr, settings); }; _xhrHeaders = function(xhr, settings) { var header; if (settings.contentType) { settings.headers["Content-Type"] = settings.contentType; } if (settings.dataType) { settings.headers["Accept"] = Ajax_mime_types[settings.dataType]; } for (header in settings.headers) { xhr.setRequestHeader(header, settings.headers[header]); } }; _xhrTimeout = function(xhr, settings) { xhr.onreadystatechange = {}; xhr.abort(); _xhrError("$.ajax: Timeout exceeded", xhr, settings); }; _xhrForm = function(method, url, data, success, dataType) { return $.ajax({ type: method, url: url, data: data, success: success, dataType: dataType, contentType: "application/x-www-form-urlencoded" }); }; _parseResponse = function(xhr, settings) { var error, response; response = xhr.responseText; if (response) { switch (settings.dataType) { case 'json': try { response = JSON.parse(response); } catch (error1) { error = error1; response = error; _xhrError("$.ajax: Parse Error", xhr, settings); } break; case "xml": response = xhr.responseXML; break; case "script": $.globalEval(response); } } return response; }; return _jsonp = function(settings) { var abortTimeout, callbackName, script, xhr; if (settings.async) { callbackName = "jsonp" + (++Ajax_jsonp_id); script = document.createElement("script"); xhr = { abort: function() { $(script).remove(); if (callbackName in window) { return window[callbackName] = {}; } } }; abortTimeout = void 0; window[callbackName] = function(response) { clearTimeout(abortTimeout); $(script).remove(); delete window[callbackName]; return _xhrSuccess(response, xhr, settings); }; script.src = settings.url + (settings.url.indexOf('?') >= 0 ? '&' : '?') + "callback=" + callbackName; $("head").append(script); if (settings.timeout > 0) { abortTimeout = setTimeout((function() { return _xhrTimeout(xhr, settings); }), settings.timeout); } return xhr; } else { return console.error("$.ajax: Unable to make jsonp synchronous call."); } }; })(); Query = (function($) { var _filtered, _findAncestors, _findParents, _getSibling, _query; _getSibling = function(command) { return this.map(function(index, element) { element = element[command]; while (element && element.nodeType !== 1) { element = element[command]; } return [element]; }); }; _query = function(domain, selector) { var elements; selector = selector.trim(); if (/^\.([\w-]+)$/.test(selector)) { elements = domain.getElementsByClassName(selector.replace(".", "")); } else if (/^[\w-]+$/.test(selector)) { elements = domain.getElementsByTagName(selector); } else if (/^#[\w\d-]+$/.test(selector) && domain === document) { elements = domain.getElementById(selector.replace("#", "")); if (!elements) { elements = []; } } else { elements = domain.querySelectorAll(selector); } if (elements.nodeType) { return [elements]; } else { return [].slice.call(core_toArray(elements)); } }; _findAncestors = function(nodes, depth) { var ancestors; ancestors = []; while (nodes.length > 0) { nodes = $.map(nodes, function(node) { if (depth !== 0 && (node = node.parentNode) && node !== document && ancestors.indexOf(node) < 0) { ancestors.push(node); if (depth > 0) { depth += -1; } return node; } }); } return ancestors; }; _filtered = function(nodes, selector) { if (selector === void 0) { return $(nodes); } else { return $(nodes).filter(selector); } }; _findParents = function(selector, depth) { var instance; instance = (function(_this) { return function(property) { return _this.map(function() { return this[property]; }); }; })(this); return _filtered((selector != null ? _findAncestors(this, depth) : instance("parentNode")), selector); }; return { filter: function(selector) { return $([].filter.call(this, function(element) { return element.parentNode && _query(element.parentNode, selector).indexOf(element) >= 0; })); }, find: function(selector) { return $(this.length === 1 ? _query(this[0], selector) : this.map(function() { return _query(this, selector); })); }, parent: function(selector) { return _findParents.call(this, selector, 1); }, parents: function(selector) { return _findParents.call(this, selector); }, siblings: function(selector) { var siblings; siblings = this.map(function(index, element) { return [].slice.call(core_toArray(element.parentNode.children)).filter(function(child) { return child !== element; }); }); return _filtered(siblings, selector); }, children: function(selector) { return _filtered(this.map(function() { return [].slice.call(core_toArray(this.children)); }), selector); }, first: function() { return $(this[0]); }, last: function() { return $(this[this.length - 1]); }, next: function() { return $(_getSibling.call(this, "nextSibling")); }, prev: function() { return $(_getSibling.call(this, "previousSibling")); }, closest: function(selector, context) { var candidates, node; node = this[0]; candidates = $(selector); if (!candidates.length) { node = null; } while (node && candidates.indexOf(node) < 0) { node = node !== context && node !== document && node.parentNode; } return $(node); } }; })($); Events = (function($) { var Events_desktop, Events_fixHooks, Events_handlers, Events_id, Events_keyHooks, Events_methods, Events_mouseHooks, Events_props, _createProxy, _createProxyCallback, _environmentEvent, _findHandlers, _getElementId, _returnFalse, _returnTrue, _subscribe, _unsubscribe; $.Event = function(src, props) { if (!(this instanceof $.Event)) { return new $.Event(src, props); } if (src && src.type) { this.originalEvent = src; this.type = src.type; this.isDefaultPrevented = ((src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault()) ? _returnTrue : _returnFalse); } else { this.type = src; } if (props) { $.extend(this, props); } this.timeStamp = src && src.timeStamp || $.now(); return this[$.expando] = true; }; $.now = function() { return (new Date()).getTime(); }; $.event = { fix: function(event) { var copy, fixHook, i, originalEvent, prop, type; if (event[$.expando]) { return event; } type = event.type; originalEvent = event; fixHook = Events_fixHooks[type]; if (!fixHook) { Events_fixHooks[type] = fixHook = (/^(?:mouse|contextmenu)|click/.test(type) ? Events_mouseHooks : (/^key/.test(type) ? Events_keyHooks : {})); } copy = fixHook.props ? Events_props.concat(fixHook.props) : Events_props; event = new $.Event(originalEvent); i = copy.length; while (i--) { prop = copy[i]; event[prop] = originalEvent[prop]; } if (!event.target) { event.target = originalEvent.srcElement || document; } if (event.target.nodeType === 3) { event.target = event.target.parentNode; } event.metaKey = !!event.metaKey; if (fixHook.filter) { return fixHook.filter(event, originalEvent); } else { return event; } }, add: function(element, event_name, callback) { if (element.addEventListener != null) { return element.addEventListener(event_name, callback, false); } else if (element.attachEvent != null) { return element.attachEvent("on" + event_name, callback); } else { return element["on" + event_name] = callback; } }, remove: function(element, event_name, callback) { if (element.removeEventListener) { return element.removeEventListener(event_name, callback, false); } else if (element.detachEvent) { return element.detachEvent("on" + event_name, callback); } else { return element["on" + event_name] = null; } } }; Events_handlers = {}; Events_id = 1; Events_methods = { preventDefault: "isDefaultPrevented", stopImmediatePropagation: "isImmediatePropagationStopped", stopPropagation: "isPropagationStopped" }; Events_desktop = { touchstart: "mousedown", touchmove: "mousemove", touchend: "mouseup", touch: "click", doubletap: "dblclick", orientationchange: "resize" }; Events_props = "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "); Events_fixHooks = {}; Events_keyHooks = { props: "char charCode key keyCode".split(' '), filter: function(event, original) { if (event.which == null) { event.which = (original.charCode != null ? original.charCode : original.keyCode); } return event; } }; Events_mouseHooks = { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function(event, original) { var body, button, doc, eventDoc, fromElement; button = original.button; fromElement = original.fromElement; if ((event.pageX == null) && (original.clientX != null)) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event.pageY = original.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); } if (!event.relatedTarget && fromElement) { event.relatedTarget = (fromElement === event.target ? original.toElement : fromElement); } if (!event.which && button !== undefined) { event.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0))); } return event; } }; _subscribe = function(element, event, callback, selector, delegate_callback) { var delegate, element_handlers, element_id, handler; event = _environmentEvent(event); element_id = _getElementId(element); element_handlers = Events_handlers[element_id] || (Events_handlers[element_id] = []); delegate = delegate_callback && delegate_callback(callback, event); handler = { event: event, callback: callback, selector: selector, proxy: _createProxyCallback(delegate, callback, element), delegate: delegate, index: element_handlers.length }; element_handlers.push(handler); return $.event.add(element, handler.event, handler.proxy); }; _unsubscribe = function(element, event, callback, selector) { var element_id, handler, len1, m, ref, results; event = _environmentEvent(event); element_id = _getElementId(element); ref = _findHandlers(element_id, event, callback, selector); results = []; for (m = 0, len1 = ref.length; m < len1; m++) { handler = ref[m]; delete Events_handlers[element_id][handler.index]; results.push($.event.remove(element, handler.event, handler.proxy)); } return results; }; _getElementId = function(element) { return element._id || (element._id = Events_id++); }; _environmentEvent = function(event) { var environment_event; environment_event = (($.Environment.isMobile()) ? event : Events_desktop[event]); return environment_event || event; }; _createProxyCallback = function(delegate, callback, element) { var proxy; callback = delegate || callback; proxy = function(event) { var result; event = $.event.fix(event); result = callback.apply(element, [event].concat(event.data)); if (result === false) { event.preventDefault(); } return result; }; return proxy; }; _findHandlers = function(element_id, event, fn, selector) { return (Events_handlers[element_id] || []).filter(function(handler) { return handler && (!event || handler.event === event) && (!fn || handler.callback === fn) && (!selector || handler.selector === selector); }); }; _createProxy = function(event) { var proxy; proxy = $.extend({ originalEvent: event }, event); $.each(Events_methods, function(name, method) { proxy[name] = function() { this[method] = function() { return true; }; return event[name].apply(event, arguments); }; return proxy[method] = function() { return false; }; }); return proxy; }; _returnTrue = function() { return true; }; _returnFalse = function() { return false; }; return { ready: function(callback) { var flush, fn, fns, hack, loaded, wait; fns = []; hack = document.documentElement.doScroll; loaded = (hack ? /^loaded|^c/ : /^loaded|c/).test(document['readyState']); flush = function(f) { var results; loaded = 1; results = []; while (f = fns.shift()) { results.push(f()); } return results; }; if (typeof document.addEventListener === "function") { document.addEventListener('DOMContentLoaded', fn = function() { document.removeEventListener('DOMContentLoaded', fn, false); return flush(); }, false); } if (hack) { document.attachEvent('onreadystatechange', fn = function() { if (/^c/.test(document['readyState'])) { document.detachEvent('onreadystatechange', fn); return flush(); } }); } if (hack) { if (window.top !== window.self) { if (loaded) { callback(); } else { fns.push(callback); } } else { (wait = function() { try { document.documentElement.doScroll('left'); } catch (error1) { return setTimeout((function() { return wait(); }), 50); } return callback(); })(); } } else { if (loaded) { callback(); } else { fns.push(callback); } } return this; }, on: function(event, selector, callback) { if ((selector == null) || typeof selector === "function") { return this.bind(event, selector); } else { return this.delegate(selector, event, callback); } }, off: function(event, selector, callback) { if ((selector == null) || typeof selector === "function") { return this.unbind(event, selector); } else { return this.undelegate(selector, event, callback); } }, bind: function(event, callback) { return this.each(function() { _subscribe(this, event, callback); }); }, unbind: function(event, callback) { return this.each(function() { _unsubscribe(this, event, callback); }); }, delegate: function(selector, event, callback) { return this.each(function(i, element) { _subscribe(element, event, callback, selector, function(fn) { return function(e) { var evt, match; if (match = $(e.target || e.srcElement || document).closest(selector, element).get(0)) { evt = $.extend(_createProxy(e), { currentTarget: match, liveFired: element }); return fn.apply(match, [evt].concat([].slice.call(arguments, 1))); } }; }); }); }, undelegate: function(selector, event, callback) { return this.each(function() { _unsubscribe(this, event, callback, selector); }); }, triggerHandler: function(event, args) { var result; result = null; this.each(function(i, element) { var e, element_id, ref; e = _createProxy($.type(event) === 'string' ? $.Event(event) : event); e._args = args; e.target = element; element_id = _getElementId(element); return $.each(_findHandlers(element_id, (ref = event.type) != null ? ref : event), function(i, handler) { result = handler.proxy(e); if (typeof e.isImmediatePropagationStopped === "function" ? e.isImmediatePropagationStopped() : void 0) { return false; } }); }); return result; } }; })($); Style = (function($) { var _computedStyle, _existsClass; _existsClass = function(name, className) { var classes; classes = className.split(/\s+/g); return classes.indexOf(name) >= 0; }; _computedStyle = function(element, property) { return window.getComputedStyle(element, "").getPropertyValue(property); }; return { addClass: function(name) { return this.each(function() { if (!_existsClass(name, this.className)) { this.className += " " + name; return this.className = this.className.trim(); } }); }, removeClass: function(name) { return this.each(function() { if (!name) { return this.className = ""; } else { if (_existsClass(name, this.className)) { return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim(); } } }); }, toggleClass: function(name) { return this.each(function() { if (_existsClass(name, this.className)) { return this.className = this.className.replace(name, " "); } else { this.className += " " + name; return this.className = this.className.trim(); } }); }, hasClass: function(name) { return this.length > 0 && _existsClass(name, this[0].className); }, css: function(property, value) { if (typeof value !== "undefined") { return this.each(function() { return this.style[property] = value; }); } else if (this.length > 0) { return this[0].style[property] || _computedStyle(this[0], property); } } }; })($); Dom = (function($) { var _stripScripts; _stripScripts = function(text, callback) { var code, html, item, len1, m, script, scripts, src; scripts = []; html = text.replace(/<script([\s\S]*?)>([\s\S]*?)<\/script>/gi, function(all, attr, code) { scripts.push({ attr: attr, code: code }); return ''; }); callback.call(this, html); if (scripts.length > 0) { for (m = 0, len1 = scripts.length; m < len1; m++) { item = scripts[m]; src = item.attr.match(/src.*?=.*?[\"'](.+?)[\"']/i); if (src != null) { src = src[1]; } code = item.code; if ((src !== null && src !== '') || code !== '') { script = document.createElement('script'); if (src !== null) { script.setAttribute('src', src); } script.setAttribute('type', 'text/javascript'); if (code !== "") { script.text = code; } this.appendChild(script); } } } }; return { text: function(value) { var i, m, ref, ret; if (value == null) { ret = []; for (i = m = 0, ref = this.length; 0 <= ref ? m < ref : m > ref; i = 0 <= ref ? ++m : --m) { ret.push(this[i][(this[i].textContent != null ? 'textContent' : 'innerText')]); } return ret.join(''); } else { return this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value)); } }, html: function(value) { var type; type = $.type(value); if (type === "undefined") { if (this.length > 0) { return this[0].innerHTML; } else { } } else { return this.each(function() { var len1, m, results, v; if (type === "string") { return _stripScripts.call(this, value, function(html) { return this.innerHTML = html; }); } else if (type === "array") { results = []; for (m = 0, len1 = value.length; m < len1; m++) { v = value[m]; results.push($(this).html(v)); } return results; } else { return this.innerHTML = this.innerHTML + $(value).html(); } }); } }, append: function(value) { var type; type = $.type(value); return this.each(function() { var len1, m, results, v; if (type === "string") { return _stripScripts.call(this, value, function(html) { return this.insertAdjacentHTML("beforeend", html); }); } else if (type === "array" || ((value != null ? value.length : void 0) != null) && core_isArraylike(value)) { results = []; for (m = 0, len1 = value.length; m < len1; m++) { v = value[m]; results.push($(this).append(v)); } return results; } else { return this.appendChild(value); } }); }, prepend: function(value) { var type; type = $.type(value); return this.each(function() { var len1, m, results, v; if (type === "string") { return _stripScripts.call(this, value, function(html) { return this.insertAdjacentHTML("afterbegin", html); }); } else if (type === "array") { results = []; for (m = 0, len1 = value.length; m < len1; m++) { v = value[m]; results.push($(this).prepend(v)); } return results; } else { return this.insertBefore(value, this.firstChild); } }); }, replaceWith: function(value) { var type; type = $.type(value); this.each(function() { var len1, m, results, v; if (this.parentNode) { if (type === "string") { return _stripScripts.call(this, value, function(html) { return this.insertAdjacentHTML("beforeBegin", html); }); } else if (type === "array") { results = []; for (m = 0, len1 = value.length; m < len1; m++) { v = value[m]; results.push($(this).replaceWith(v)); } return results; } else { return this.parentNode.insertBefore(value, this); } } }); return this.remove(); }, after: function(value) { var type; type = $.type(value); return this.each(function() { var len1, m, results, v; if (this.parentNode) { if (type === "string") { return _stripScripts.call(this, value, function(html) { return this.insertAdjacentHTML("afterend", html); }); } else if (type === "array") { results = []; for (m = 0, len1 = value.length; m < len1; m++) { v = value[m]; results.push($(this).after(v)); } return results; } else { return this.parentNode.insertBefore(value, $(this).next()); } } }); }, empty: function() { return this.each(function() { return this.innerHTML = ""; }); }, attr: function(name, value) { if (this.length === 0) { null; } if ($.type(name) === "string" && value === void 0) { return this[0].getAttribute(name); } else { return this.each(function() { return this.setAttribute(name, value); }); } }, removeAttr: function(name) { return this.each(function() { return this.removeAttribute(name); }); }, data: function(name, value) { return this.attr("data-" + name, value); }, removeData: function(name) { return this.removeAttr("data-" + name); }, val: function(value) { if ($.type(value) === "string") { return this.each(function() { return this.value = value; }); } else { if (this.length > 0) { return this[0].value; } else { return null; } } }, show: function() { return this.css("display", ""); }, hide: function() { return this.css("display", "none"); }, height: function() { var offset; offset = this.offset(); return offset.height; }, width: function() { var offset; offset = this.offset(); return offset.width; }, offset: function() { var bounding, ref, ref1; if (this.length === 0) { return {}; } bounding = this[0].getBoundingClientRect(); return { left: bounding.left + ((ref = window.pageXOffset) != null ? ref : document.documentElement.scrollLeft), top: bounding.top + ((ref1 = window.pageYOffset) != null ? ref1 : document.documentElement.scrollTop), width: bounding.right - bounding.left, height: bounding.bottom - bounding.top }; }, remove: function() { return this.each(function() { if (this.parentNode != null) { return this.parentNode.removeChild(this); } }); } }; })($); core = { length: 0, init: function(a) { var len; return core_array.push.apply(this, a && a.nodeType ? [a] : ("" + a === a ? a[0] === "<" && a[a.length - 1] === ">" && a.length >= 3 ? (len = a.length - 1 - ((a[a.length - 2] === '/') ? 1 : 0), [document.createElement(a.slice(1, len))]) : core_toArray(document.querySelectorAll(a)) : ((function() { if (/^f/.test(typeof a)) { return [$(document).ready(a)]; } else { switch ($.type(a)) { case 'array': return a; case 'object': return [a]; default: return []; } } })()))); }, toArray: function() { return [].slice.call(this); }, get: function(num) { if (num === null) { return this.toArray(); } else if (num < 0) { return this[this.length + num]; } else { return this[num]; } }, each: function(callback, args) { return $.each(this, callback, args); }, splice: core_array.splice, map: function(fn) { return $.map(this, function(el, i) { return fn.call(el, i, el); }); }, 'indexOf': core_array.indexOf }; ref = [Query, Events, Style, Dom]; for (m = 0, len1 = ref.length; m < len1; m++) { o = ref[m]; for (k in o) { v = o[k]; core[k] = v; } } $.prototype = $.fn = core.init.prototype = core; $.support = {}; if (document.querySelectorAll == null) { document.querySelectorAll = (function() { var style; style = document.createStyleSheet(); return function(selectors) { var all, elements, i, j, p, q, ref1, ref2; all = document.all; elements = []; selectors = selectors.replace(/\[for\b/gi, '[htmlFor').split(','); for (i = p = 0, ref1 = selectors.length; p < ref1; i = p += 1) { style.addRule(selectors[i], 'k:v', 0); for (j = q = 0, ref2 = all.length; q < ref2; j = q += 1) { all[j].currentStyle.k && elements.push(all[j]); } style.removeRule(0); } return elements; }; })(); } if (document.querySelector == null) { document.querySelector = function(selectors) { var elements; elements = document.querySelectorAll(selectors); if (elements.length) { return elements[0]; } else { return null; } }; } if (document.getElementsByClassName == null) { document.getElementsByClassName = function(classNames) { classNames = String(classNames).replace(/^|\s+/g, '.'); return document.querySelectorAll(classNames); }; } if ((base = Array.prototype).filter == null) { base.filter = function(fn) { var i, len, res, t, thisp, val; if (this == null) { throw new TypeError(); } if (typeof fn !== "function") { throw new TypeError(); } t = Object(this); len = t.length >>> 0; res = []; thisp = arguments[1]; i = 0; while (i < len) { if (i in t) { val = t[i]; if (fn.call(thisp, val, i, t)) { res.push(val); } } i++; } return res; }; } if ((base1 = String.prototype).trim == null) { base1.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }; } if (window.JSON == null) { window.JSON = (function() { var cx, escapable, f, gap, indent, meta, quote, rep, str; 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 = void 0; indent = void 0; meta = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", "\"": "\\\"", "\\": "\\\\" }; rep = void 0; f = function(n) { if (n < 10) { return "0" + n; } else { return n; } }; quote = function(string) { escapable.lastIndex = 0; if (escapable.test(string)) { return "\"" + string.replace(escapable, function(a) { var c; c = meta[a]; if (typeof c === "string") { return c; } else { return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); } }) + "\""; } else { return "\"" + string + "\""; } }; str = function(key, holder) { var i, length, mind, partial, value; mind = gap; value = holder[key]; if (value && typeof value === "object" && typeof value.toJSON === "function") { value = value.toJSON(key); } if (typeof rep === "function") { value = rep.call(holder, key, value); } switch (typeof value) { case "string": return quote(value); case "number": if (isFinite(value)) { return String(value); } else { return "null"; } case "boolean": case "null": return String(value); case "object": if (!value) { return "null"; } gap += indent; partial = []; if (Object.prototype.toString.apply(value) === "[object Array]") { length = value.length; i = 0; while (i < length) { partial[i] = str(i, value) || "null"; i += 1; } v = (partial.length === 0 ? "[]" : (gap ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" : "[" + partial.join(",") + "]")); gap = mind; return v; } if (rep && typeof rep === "object") { length = rep.length; i = 0; while (i < length) { if (typeof rep[i] === "string") { k = rep[i]; v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ": " : ":") + v); } } i += 1