1&&result.length>1?uniq(result):result},configure=function(options){typeof options[useNativeQSA]!="undefined"&&(select=options[useNativeQSA]?hasQSA?selectQSA:selectNonNative:selectNonNative)};configure({useNativeQSA:!0});qwery.configure=configure;qwery.uniq=uniq;qwery.is=is;qwery.pseudos={};return qwery});provide("qwery",module.exports);(function($){var q=function(){var r;try{r=require("qwery")}catch(ex){r=require("qwery-mobile")}finally{return r}}();$.pseudos=q.pseudos;$._select=function(s,r){return($._select=function(){var b;if(typeof $.create=="function")return function(s,r){return/^\s*').text(str).html();
+ }
function render(target, repos){
var i = 0, fragment = '', t = $(target)[0];
for(i = 0; i < repos.length; i++) {
- fragment += ''+repos[i].name+''+repos[i].description+'
';
+ fragment += ''+repos[i].name+''+escapeHtml(repos[i].description||'')+'
';
}
t.innerHTML = fragment;
}
return {
showRepos: function(options){
$.ajax({
- url: "http://github.com/api/v2/json/repos/show/"+options.user+"?callback=?"
+ url: "https://api.github.com/users/"+options.user+"/repos?sort=pushed&callback=?"
, type: 'jsonp'
, error: function (err) { $(options.target + ' li.loading').addClass('error').text("Error loading feed"); }
, success: function(data) {
var repos = [];
- if (!data || !data.repositories) { return; }
- for (var i = 0; i < data.repositories.length; i++) {
- if (options.skip_forks && data.repositories[i].fork) { continue; }
- repos.push(data.repositories[i]);
+ if (!data || !data.data) { return; }
+ for (var i = 0; i < data.data.length; i++) {
+ if (options.skip_forks && data.data[i].fork) { continue; }
+ repos.push(data.data[i]);
}
- repos.sort(function(a, b) {
- var aDate = new Date(a.pushed_at).valueOf(),
- bDate = new Date(b.pushed_at).valueOf();
-
- if (aDate === bDate) { return 0; }
- return aDate > bDate ? -1 : 1;
- });
-
if (options.count) { repos.splice(options.count); }
render(options.target, repos);
}
diff --git a/.themes/classic/source/javascripts/libs/ender.js b/.themes/classic/source/javascripts/libs/ender.js
index 5e56fd8..66c4e22 100644
--- a/.themes/classic/source/javascripts/libs/ender.js
+++ b/.themes/classic/source/javascripts/libs/ender.js
@@ -1,1497 +1,3256 @@
/*!
- * Ender: open module JavaScript framework
- * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
- * https://ender.no.de
+ * =============================================================
+ * Ender: open module JavaScript framework (https://ender.no.de)
+ * Build: ender build jeesh reqwest
+ * =============================================================
+ */
+
+/*!
+ * Ender: open module JavaScript framework (client-lib)
+ * copyright Dustin Diaz & Jacob Thornton 2011-2012 (@ded @fat)
+ * http://ender.jit.su
* License MIT
- * Build: ender -b jeesh
*/
-!function (context) {
+(function (context) {
+
+ // a global object for node.js module compatiblity
+ // ============================================
+
+ context['global'] = context
+
+ // Implements simple module system
+ // losely based on CommonJS Modules spec v1.1.1
+ // ============================================
+
+ var modules = {}
+ , old = context['$']
+ , oldEnder = context['ender']
+ , oldRequire = context['require']
+ , oldProvide = context['provide']
+
+ function require (identifier) {
+ // modules can be required from ender's build system, or found on the window
+ var module = modules['$' + identifier] || window[identifier]
+ if (!module) throw new Error("Ender Error: Requested module '" + identifier + "' has not been defined.")
+ return module
+ }
+
+ function provide (name, what) {
+ return (modules['$' + name] = what)
+ }
+
+ context['provide'] = provide
+ context['require'] = require
function aug(o, o2) {
- for (var k in o2) {
- k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k]);
- }
- return o;
+ 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;
+ /**
+ * main Ender return object
+ * @constructor
+ * @param {Array|Node|string} s a CSS selector or DOM node(s)
+ * @param {Array.|Node} r a root node(s)
+ */
+ function Ender(s, r) {
+ var elements
+ , i
+
+ this.selector = s
+ // string || node || nodelist || window
+ if (typeof s == 'undefined') {
+ elements = []
+ this.selector = ''
+ } else if (typeof s == 'string' || s.nodeName || (s.length && 'item' in s) || s == window) {
+ elements = ender._select(s, r)
} else {
- els = isFinite(s.length) ? s : [s];
+ elements = isFinite(s.length) ? s : [s]
}
- return aug(els, boosh);
+ this.length = elements.length
+ for (i = this.length; i--;) this[i] = elements[i]
}
- function ender(s, r) {
- return boosh(s, r);
+ /**
+ * @param {function(el, i, inst)} fn
+ * @param {Object} opt_scope
+ * @returns {Ender}
+ */
+ Ender.prototype['forEach'] = function (fn, opt_scope) {
+ var i, l
+ // opt out of native forEach so we can intentionally call our own scope
+ // defaulting to the current item and be able to return self
+ for (i = 0, l = this.length; i < l; ++i) i in this && fn.call(opt_scope || this[i], this[i], i, this)
+ // return self for chaining
+ return this
}
- aug(ender, {
- _VERSION: '0.2.0',
- ender: function (o, chain) {
- aug(chain ? boosh : ender, o);
- }
- });
+ Ender.prototype.$ = ender // handy reference to self
- 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;
- };
+ function ender(s, r) {
+ return new Ender(s, r)
+ }
- (typeof module !== 'undefined') && module.exports && (module.exports = ender);
- // use subscript notation as extern for Closure compilation
- context['ender'] = context['$'] = ender;
+ ender['_VERSION'] = '0.4.3-dev'
-}(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,
+ ender.fn = Ender.prototype // for easy compat to jQuery plugins
- 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++);
- },
+ ender.ender = function (o, chain) {
+ aug(chain ? Ender.prototype : ender, o)
+ }
- retrieveEvents = function (element) {
- var uid = retrieveUid(element);
- return (registry[uid] = registry[uid] || {});
- },
+ ender._select = function (s, r) {
+ if (typeof s == 'string') return (r || document).querySelectorAll(s)
+ if (s.nodeName) return [s]
+ return s
+ }
- 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));
- };
- },
+ // use callback to receive Ender's require & provide and remove them from global
+ ender.noConflict = function (callback) {
+ context['$'] = old
+ if (callback) {
+ context['provide'] = oldProvide
+ context['require'] = oldRequire
+ context['ender'] = oldEnder
+ if (typeof callback == 'function') callback(require, provide, this)
+ }
+ return this
+ }
- 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));
+ if (typeof module !== 'undefined' && module.exports) module.exports = ender
+ // use subscript notation as extern for Closure compilation
+ context['ender'] = context['$'] = ender
+
+}(this));
+
+(function () {
+
+ var module = { exports: {} }, exports = module.exports;
+
+ /*!
+ * Reqwest! A general purpose XHR connection manager
+ * (c) Dustin Diaz 2012
+ * https://github.com/ded/reqwest
+ * license MIT
+ */
+ !function (name, definition) {
+ if (typeof module != 'undefined') module.exports = definition()
+ else if (typeof define == 'function' && define.amd) define(definition)
+ else this[name] = definition()
+ }('reqwest', function () {
+
+ var win = window
+ , doc = document
+ , twoHundo = /^20\d$/
+ , byTag = 'getElementsByTagName'
+ , readyState = 'readyState'
+ , contentType = 'Content-Type'
+ , requestedWith = 'X-Requested-With'
+ , head = doc[byTag]('head')[0]
+ , uniqid = 0
+ , callbackPrefix = 'reqwest_' + (+new Date())
+ , lastValue // data stored by the most recent JSONP callback
+ , xmlHttpRequest = 'XMLHttpRequest'
+
+ var isArray = typeof Array.isArray == 'function' ? Array.isArray : function (a) {
+ return a instanceof Array
+ }
+ var defaultHeaders = {
+ contentType: 'application/x-www-form-urlencoded'
+ , requestedWith: xmlHttpRequest
+ , accept: {
+ '*': 'text/javascript, text/html, application/xml, text/xml, */*'
+ , xml: 'application/xml, text/xml'
+ , html: 'text/html'
+ , text: 'text/plain'
+ , json: 'application/json, text/javascript'
+ , js: 'application/javascript, text/javascript'
+ }
}
- };
- },
-
- 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);
+ var xhr = win[xmlHttpRequest] ?
+ function () {
+ return new XMLHttpRequest()
+ } :
+ function () {
+ return new ActiveXObject('Microsoft.XMLHTTP')
+ }
+
+ function handleReadyState(o, success, error) {
+ return function () {
+ if (o && o[readyState] == 4) {
+ if (twoHundo.test(o.status)) {
+ success(o)
+ } else {
+ error(o)
}
}
}
- };
- },
-
- 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));
+ }
+
+ function setHeaders(http, o) {
+ var headers = o.headers || {}, h
+ headers.Accept = headers.Accept || defaultHeaders.accept[o.type] || defaultHeaders.accept['*']
+ // breaks cross-origin requests with legacy browsers
+ if (!o.crossOrigin && !headers[requestedWith]) headers[requestedWith] = defaultHeaders.requestedWith
+ if (!headers[contentType]) headers[contentType] = o.contentType || defaultHeaders.contentType
+ for (h in headers) {
+ headers.hasOwnProperty(h) && http.setRequestHeader(h, headers[h])
}
}
- 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]);
+
+ function setCredentials(http, o) {
+ if (typeof o.withCredentials !== "undefined" && typeof http.withCredentials !== "undefined") {
+ http.withCredentials = !!o.withCredentials
}
}
- 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);
+
+ function generalCallback(data) {
+ lastValue = data
+ }
+
+ function urlappend(url, s) {
+ return url + (/\?/.test(url) ? '&' : '?') + s
+ }
+
+ function handleJsonp(o, fn, err, url) {
+ var reqId = uniqid++
+ , cbkey = o.jsonpCallback || 'callback' // the 'callback' key
+ , cbval = o.jsonpCallbackName || reqwest.getcallbackPrefix(reqId)
+ // , cbval = o.jsonpCallbackName || ('reqwest_' + reqId) // the 'callback' value
+ , cbreg = new RegExp('((^|\\?|&)' + cbkey + ')=([^&]+)')
+ , match = url.match(cbreg)
+ , script = doc.createElement('script')
+ , loaded = 0
+
+ if (match) {
+ if (match[3] === '?') {
+ url = url.replace(cbreg, '$1=' + cbval) // wildcard callback func name
+ } else {
+ cbval = match[3] // provided callback func name
+ }
} else {
- for (k in handlers) {
- handlers.hasOwnProperty(k) && handlers[k].apply(element, args);
+ url = urlappend(url, cbkey + '=' + cbval) // no callback details, add 'em
+ }
+
+ win[cbval] = generalCallback
+
+ script.type = 'text/javascript'
+ script.src = url
+ script.async = true
+ if (typeof script.onreadystatechange !== 'undefined') {
+ // need this for IE due to out-of-order onreadystatechange(), binding script
+ // execution to an event listener gives us control over when the script
+ // is executed. See http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html
+ script.event = 'onclick'
+ script.htmlFor = script.id = '_reqwest_' + reqId
+ }
+
+ script.onload = script.onreadystatechange = function () {
+ if ((script[readyState] && script[readyState] !== 'complete' && script[readyState] !== 'loaded') || loaded) {
+ return false
}
+ script.onload = script.onreadystatechange = null
+ script.onclick && script.onclick()
+ // Call the user callback with the last value stored and clean up values and scripts.
+ o.success && o.success(lastValue)
+ lastValue = undefined
+ head.removeChild(script)
+ loaded = 1
}
+
+ // Add the script to the DOM head
+ head.appendChild(script)
}
- 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();
+
+ function getRequest(o, fn, err) {
+ var method = (o.method || 'GET').toUpperCase()
+ , url = typeof o === 'string' ? o : o.url
+ // convert non-string objects to query-string form unless o.processData is false
+ , data = (o.processData !== false && o.data && typeof o.data !== 'string')
+ ? reqwest.toQueryString(o.data)
+ : (o.data || null)
+ , http
+
+ // if we're working on a GET request and we have data then we should append
+ // query string to end of URL and not post data
+ if ((o.type == 'jsonp' || method == 'GET') && data) {
+ url = urlappend(url, data)
+ data = null
}
- else {
- e.returnValue = false;
+
+ if (o.type == 'jsonp') return handleJsonp(o, fn, err, url)
+
+ http = xhr()
+ http.open(method, url, true)
+ setHeaders(http, o)
+ setCredentials(http, o)
+ http.onreadystatechange = handleReadyState(http, fn, err)
+ o.before && o.before(http)
+ http.send(data)
+ return http
+ }
+
+ function Reqwest(o, fn) {
+ this.o = o
+ this.fn = fn
+
+ init.apply(this, arguments)
+ }
+
+ function setType(url) {
+ var m = url.match(/\.(json|jsonp|html|xml)(\?|$)/)
+ return m ? m[1] : 'js'
+ }
+
+ function init(o, fn) {
+
+ this.url = typeof o == 'string' ? o : o.url
+ this.timeout = null
+
+ // whether request has been fulfilled for purpose
+ // of tracking the Promises
+ this._fulfilled = false
+ // success handlers
+ this._fulfillmentHandlers = []
+ // error handlers
+ this._errorHandlers = []
+ // complete (both success and fail) handlers
+ this._completeHandlers = []
+ this._erred = false
+ this._responseArgs = {}
+
+ var self = this
+ , type = o.type || setType(this.url)
+
+ fn = fn || function () {}
+
+ if (o.timeout) {
+ this.timeout = setTimeout(function () {
+ self.abort()
+ }, o.timeout)
}
- };
- };
-
- fixEvent.stopPropagation = function (e) {
- return function () {
- if (e.stopPropagation) {
- e.stopPropagation();
- } else {
- e.cancelBubble = true;
+
+ if (o.success) {
+ this._fulfillmentHandlers.push(function () {
+ o.success.apply(o, arguments)
+ })
}
- };
- };
-
- 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;
+
+ if (o.error) {
+ this._errorHandlers.push(function () {
+ o.error.apply(o, arguments)
+ })
+ }
+
+ if (o.complete) {
+ this._completeHandlers.push(function () {
+ o.complete.apply(o, arguments)
+ })
+ }
+
+ function complete(resp) {
+ o.timeout && clearTimeout(self.timeout)
+ self.timeout = null
+ while (self._completeHandlers.length > 0) {
+ self._completeHandlers.shift()(resp)
+ }
+ }
+
+ function success(resp) {
+ var r = resp.responseText
+ if (r) {
+ switch (type) {
+ case 'json':
+ try {
+ resp = win.JSON ? win.JSON.parse(r) : eval('(' + r + ')')
+ } catch (err) {
+ return error(resp, 'Could not parse JSON in response', err)
+ }
+ break;
+ case 'js':
+ resp = eval(r)
+ break;
+ case 'html':
+ resp = r
+ break;
+ case 'xml':
+ resp = resp.responseXML;
+ break;
+ }
+ }
+
+ self._responseArgs.resp = resp
+ self._fulfilled = true
+ fn(resp)
+ while (self._fulfillmentHandlers.length > 0) {
+ self._fulfillmentHandlers.shift()(resp)
+ }
+
+ complete(resp)
+ }
+
+ function error(resp, msg, t) {
+ self._responseArgs.resp = resp
+ self._responseArgs.msg = msg
+ self._responseArgs.t = t
+ self._erred = true
+ while (self._errorHandlers.length > 0) {
+ self._errorHandlers.shift()(resp, msg, t)
+ }
+ complete(resp)
+ }
+
+ this.request = getRequest(o, success, error)
}
- 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];
+
+ Reqwest.prototype = {
+ abort: function () {
+ this.request.abort()
+ }
+
+ , retry: function () {
+ init.call(this, this.o, this.fn)
+ }
+
+ /**
+ * Small deviation from the Promises A CommonJs specification
+ * http://wiki.commonjs.org/wiki/Promises/A
+ */
+
+ /**
+ * `then` will execute upon successful requests
+ */
+ , then: function (success, fail) {
+ if (this._fulfilled) {
+ success(this._responseArgs.resp)
+ } else if (this._erred) {
+ fail(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)
+ } else {
+ this._fulfillmentHandlers.push(success)
+ this._errorHandlers.push(fail)
+ }
+ return this
+ }
+
+ /**
+ * `always` will execute whether the request succeeds or fails
+ */
+ , always: function (fn) {
+ if (this._fulfilled || this._erred) {
+ fn(this._responseArgs.resp)
+ } else {
+ this._completeHandlers.push(fn)
+ }
+ return this
+ }
+
+ /**
+ * `fail` will execute when the request fails
+ */
+ , fail: function (fn) {
+ if (this._erred) {
+ fn(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)
+ } else {
+ this._errorHandlers.push(fn)
+ }
+ return this
+ }
}
- };
-
- if (context[attachEvent]) {
- add(context, 'unload', function () {
- for (var k in collected) {
- collected.hasOwnProperty(k) && clean(collected[k]);
+
+ function reqwest(o, fn) {
+ return new Reqwest(o, fn)
+ }
+
+ // normalize newline variants according to spec -> CRLF
+ function normalize(s) {
+ return s ? s.replace(/\r?\n/g, '\r\n') : ''
+ }
+
+ function serial(el, cb) {
+ var n = el.name
+ , t = el.tagName.toLowerCase()
+ , optCb = function (o) {
+ // IE gives value="" even where there is no value attribute
+ // 'specified' ref: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-862529273
+ if (o && !o.disabled)
+ cb(n, normalize(o.attributes.value && o.attributes.value.specified ? o.value : o.text))
+ }
+
+ // don't serialize elements that are disabled or without a name
+ if (el.disabled || !n) return;
+
+ switch (t) {
+ case 'input':
+ if (!/reset|button|image|file/i.test(el.type)) {
+ var ch = /checkbox/i.test(el.type)
+ , ra = /radio/i.test(el.type)
+ , val = el.value;
+ // WebKit gives us "" instead of "on" if a checkbox has no value, so correct it here
+ (!(ch || ra) || el.checked) && cb(n, normalize(ch && val === '' ? 'on' : val))
+ }
+ break;
+ case 'textarea':
+ cb(n, normalize(el.value))
+ break;
+ case 'select':
+ if (el.type.toLowerCase() === 'select-one') {
+ optCb(el.selectedIndex >= 0 ? el.options[el.selectedIndex] : null)
+ } else {
+ for (var i = 0; el.length && i < el.length; i++) {
+ el.options[i].selected && optCb(el.options[i])
+ }
+ }
+ break;
}
- 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);
+ }
+
+ // collect up all form elements found from the passed argument elements all
+ // the way down to child elements; pass a '