react 0.6.3 → 0.9.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/README.md +10 -222
  2. package/addons.js +1 -0
  3. package/lib/AutoFocusMixin.js +30 -0
  4. package/lib/CSSCore.js +115 -0
  5. package/lib/CSSProperty.js +121 -0
  6. package/lib/CSSPropertyOperations.js +97 -0
  7. package/lib/ChangeEventPlugin.js +387 -0
  8. package/lib/ClientReactRootIndex.js +30 -0
  9. package/lib/CompositionEventPlugin.js +260 -0
  10. package/lib/DOMChildrenOperations.js +165 -0
  11. package/lib/DOMProperty.js +268 -0
  12. package/lib/DOMPropertyOperations.js +181 -0
  13. package/lib/Danger.js +187 -0
  14. package/lib/DefaultDOMPropertyConfig.js +197 -0
  15. package/lib/DefaultEventPluginOrder.js +44 -0
  16. package/lib/EnterLeaveEventPlugin.js +145 -0
  17. package/lib/EventConstants.js +76 -0
  18. package/lib/EventListener.js +69 -0
  19. package/lib/EventPluginHub.js +291 -0
  20. package/lib/EventPluginRegistry.js +260 -0
  21. package/lib/EventPluginUtils.js +214 -0
  22. package/lib/EventPropagators.js +143 -0
  23. package/lib/ExecutionEnvironment.js +44 -0
  24. package/lib/LinkedStateMixin.js +46 -0
  25. package/lib/LinkedValueUtils.js +161 -0
  26. package/lib/MobileSafariClickEventPlugin.js +63 -0
  27. package/lib/PooledClass.js +119 -0
  28. package/lib/React.js +95 -0
  29. package/lib/ReactCSSTransitionGroup.js +65 -0
  30. package/lib/ReactCSSTransitionGroupChild.js +138 -0
  31. package/lib/ReactChildren.js +132 -0
  32. package/lib/ReactComponent.js +550 -0
  33. package/lib/ReactComponentBrowserEnvironment.js +158 -0
  34. package/lib/ReactComponentEnvironment.js +26 -0
  35. package/lib/ReactCompositeComponent.js +1455 -0
  36. package/lib/ReactContext.js +67 -0
  37. package/lib/ReactCurrentOwner.js +39 -0
  38. package/lib/ReactDOM.js +207 -0
  39. package/lib/ReactDOMButton.js +68 -0
  40. package/lib/ReactDOMComponent.js +399 -0
  41. package/lib/ReactDOMForm.js +59 -0
  42. package/lib/ReactDOMIDOperations.js +218 -0
  43. package/lib/ReactDOMImg.js +58 -0
  44. package/lib/ReactDOMInput.js +181 -0
  45. package/lib/ReactDOMOption.js +51 -0
  46. package/lib/ReactDOMSelect.js +179 -0
  47. package/lib/ReactDOMSelection.js +189 -0
  48. package/lib/ReactDOMTextarea.js +140 -0
  49. package/lib/ReactDefaultBatchingStrategy.js +75 -0
  50. package/lib/ReactDefaultInjection.js +115 -0
  51. package/lib/ReactDefaultPerf.js +244 -0
  52. package/lib/ReactDefaultPerfAnalysis.js +199 -0
  53. package/lib/ReactErrorUtils.js +37 -0
  54. package/lib/ReactEventEmitter.js +337 -0
  55. package/lib/ReactEventEmitterMixin.js +57 -0
  56. package/lib/ReactEventTopLevelCallback.js +109 -0
  57. package/lib/ReactInjection.js +39 -0
  58. package/lib/ReactInputSelection.js +140 -0
  59. package/lib/ReactInstanceHandles.js +338 -0
  60. package/lib/ReactLink.js +54 -0
  61. package/lib/ReactMarkupChecksum.js +53 -0
  62. package/lib/ReactMount.js +641 -0
  63. package/lib/ReactMountReady.js +95 -0
  64. package/lib/ReactMultiChild.js +425 -0
  65. package/lib/ReactMultiChildUpdateTypes.js +38 -0
  66. package/lib/ReactOwner.js +154 -0
  67. package/lib/ReactPerf.js +85 -0
  68. package/lib/ReactPropTransferer.js +147 -0
  69. package/lib/ReactPropTypeLocationNames.js +31 -0
  70. package/lib/ReactPropTypeLocations.js +29 -0
  71. package/lib/ReactPropTypes.js +359 -0
  72. package/lib/ReactPutListenerQueue.js +61 -0
  73. package/lib/ReactReconcileTransaction.js +181 -0
  74. package/lib/ReactRootIndex.js +36 -0
  75. package/lib/ReactServerRendering.js +59 -0
  76. package/lib/ReactStateSetters.js +111 -0
  77. package/lib/ReactTextComponent.js +99 -0
  78. package/lib/ReactTransitionChildMapping.js +106 -0
  79. package/lib/ReactTransitionEvents.js +97 -0
  80. package/lib/ReactTransitionGroup.js +187 -0
  81. package/lib/ReactUpdates.js +148 -0
  82. package/lib/ReactWithAddons.js +46 -0
  83. package/lib/SelectEventPlugin.js +200 -0
  84. package/lib/ServerReactRootIndex.js +36 -0
  85. package/lib/SimpleEventPlugin.js +413 -0
  86. package/lib/SyntheticClipboardEvent.js +51 -0
  87. package/lib/SyntheticCompositionEvent.js +51 -0
  88. package/lib/SyntheticDragEvent.js +44 -0
  89. package/lib/SyntheticEvent.js +164 -0
  90. package/lib/SyntheticFocusEvent.js +44 -0
  91. package/lib/SyntheticKeyboardEvent.js +58 -0
  92. package/lib/SyntheticMouseEvent.js +85 -0
  93. package/lib/SyntheticTouchEvent.js +50 -0
  94. package/lib/SyntheticUIEvent.js +45 -0
  95. package/lib/SyntheticWheelEvent.js +66 -0
  96. package/lib/Transaction.js +276 -0
  97. package/lib/ViewportMetrics.js +37 -0
  98. package/lib/accumulate.js +54 -0
  99. package/lib/adler32.js +39 -0
  100. package/lib/cloneWithProps.js +59 -0
  101. package/lib/containsNode.js +49 -0
  102. package/lib/copyProperties.js +54 -0
  103. package/lib/createArrayFrom.js +91 -0
  104. package/lib/createFullPageComponent.js +63 -0
  105. package/lib/createNodesFromMarkup.js +93 -0
  106. package/lib/createObjectFrom.js +61 -0
  107. package/lib/cx.js +44 -0
  108. package/lib/dangerousStyleValue.js +57 -0
  109. package/lib/emptyFunction.js +43 -0
  110. package/lib/escapeTextForBrowser.js +47 -0
  111. package/lib/flattenChildren.js +57 -0
  112. package/lib/forEachAccumulated.js +36 -0
  113. package/lib/getActiveElement.js +34 -0
  114. package/lib/getEventKey.js +85 -0
  115. package/lib/getEventTarget.js +36 -0
  116. package/lib/getMarkupWrap.js +118 -0
  117. package/lib/getNodeForCharacterOffset.js +80 -0
  118. package/lib/getReactRootElementInContainer.js +40 -0
  119. package/lib/getTextContentAccessor.js +42 -0
  120. package/lib/getUnboundedScrollPosition.js +45 -0
  121. package/lib/hyphenate.js +35 -0
  122. package/lib/invariant.js +62 -0
  123. package/lib/isEventSupported.js +70 -0
  124. package/lib/isNode.js +33 -0
  125. package/lib/isTextInputElement.js +49 -0
  126. package/lib/isTextNode.js +30 -0
  127. package/lib/joinClasses.js +44 -0
  128. package/lib/keyMirror.js +58 -0
  129. package/lib/keyOf.js +41 -0
  130. package/lib/memoizeStringOnly.js +39 -0
  131. package/lib/merge.js +37 -0
  132. package/lib/mergeHelpers.js +136 -0
  133. package/lib/mergeInto.js +45 -0
  134. package/lib/mixInto.js +34 -0
  135. package/lib/objMap.js +47 -0
  136. package/lib/objMapKeyVal.js +47 -0
  137. package/lib/onlyChild.js +43 -0
  138. package/lib/performanceNow.js +42 -0
  139. package/lib/shallowEqual.js +49 -0
  140. package/lib/shouldUpdateReactComponent.js +58 -0
  141. package/lib/toArray.js +75 -0
  142. package/lib/traverseAllChildren.js +189 -0
  143. package/lib/warning.js +40 -0
  144. package/package.json +32 -21
  145. package/react.js +1 -0
  146. package/.npmignore +0 -7
  147. package/.travis.yml +0 -5
  148. package/Jakefile.js +0 -39
  149. package/LICENSE +0 -19
  150. package/browser-test/dist.html +0 -90
  151. package/browser-test/index.html +0 -86
  152. package/browser-test/min.html +0 -90
  153. package/dist/react.js +0 -3107
  154. package/dist/react.min.js +0 -22
  155. package/doc/advanced.md +0 -174
  156. package/doc/color-def.graffle +0 -938
  157. package/doc/color-def.png +0 -0
  158. package/doc/simple.dot +0 -25
  159. package/doc/simple.png +0 -0
  160. package/examples/longer-example.js +0 -41
  161. package/examples/simple.js +0 -45
  162. package/examples/using-ast-directly.js +0 -30
  163. package/examples/using-events1.js +0 -79
  164. package/examples/using-log-events.js +0 -43
  165. package/lib/base-task.js +0 -123
  166. package/lib/cb-task.js +0 -84
  167. package/lib/core.js +0 -138
  168. package/lib/dsl.js +0 -138
  169. package/lib/error.js +0 -55
  170. package/lib/event-collector.js +0 -81
  171. package/lib/event-manager.js +0 -89
  172. package/lib/eventemitter.js +0 -20
  173. package/lib/finalcb-first-task.js +0 -68
  174. package/lib/finalcb-task.js +0 -65
  175. package/lib/id.js +0 -22
  176. package/lib/input-parser.js +0 -56
  177. package/lib/log-events.js +0 -101
  178. package/lib/parse.js +0 -41
  179. package/lib/promise-resolve.js +0 -50
  180. package/lib/promise-task.js +0 -93
  181. package/lib/react.js +0 -59
  182. package/lib/ret-task.js +0 -71
  183. package/lib/sprintf.js +0 -18
  184. package/lib/status.js +0 -14
  185. package/lib/task.js +0 -251
  186. package/lib/track-tasks.js +0 -74
  187. package/lib/validate.js +0 -159
  188. package/lib/vcon.js +0 -90
  189. package/lib/when-task.js +0 -85
  190. package/src/dist.build.requirejs +0 -20
  191. package/test/ast.mocha.js +0 -136
  192. package/test/cb-task.mocha.js +0 -220
  193. package/test/core-deferred.mocha.js +0 -143
  194. package/test/core-when.mocha.js +0 -96
  195. package/test/core.mocha.js +0 -589
  196. package/test/dsl.mocha.js +0 -350
  197. package/test/event-manager.mocha.js +0 -119
  198. package/test/exec-options.mocha.js +0 -48
  199. package/test/finalcb-task.mocha.js +0 -58
  200. package/test/input-parser.mocha.js +0 -86
  201. package/test/log-events.mocha.js +0 -88
  202. package/test/mocha.opts +0 -2
  203. package/test/module-use.mocha.js +0 -147
  204. package/test/promise-auto-resolve.mocha.js +0 -68
  205. package/test/ret-task.mocha.js +0 -220
  206. package/test/task.mocha.js +0 -42
  207. package/test/validate-cb-task.mocha.js +0 -100
  208. package/test/validate-ret-task.mocha.js +0 -110
  209. package/test/validate.mocha.js +0 -324
  210. package/test/vcon.mocha.js +0 -193
  211. package/vendor/chai/chai.js +0 -2038
  212. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  213. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  214. package/vendor/mocha/mocha.css +0 -135
  215. package/vendor/mocha/mocha.js +0 -3589
  216. package/vendor/node/util.js +0 -531
  217. package/vendor/requirejs/require.js +0 -2053
  218. package/vendor/requirejs/require.min.js +0 -33
@@ -1,4 +0,0 @@
1
- /*! jQuery v1.7.1 jquery.com | jquery.org/license */
2
- (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
3
- f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
4
- {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
@@ -1,135 +0,0 @@
1
-
2
- body {
3
- font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
4
- padding: 60px 50px;
5
- }
6
-
7
- #mocha h1, h2 {
8
- margin: 0;
9
- }
10
-
11
- #mocha h1 {
12
- font-size: 1em;
13
- font-weight: 200;
14
- }
15
-
16
- #mocha .suite .suite h1 {
17
- font-size: .8em;
18
- }
19
-
20
- #mocha h2 {
21
- font-size: 12px;
22
- font-weight: normal;
23
- cursor: pointer;
24
- }
25
-
26
- #mocha .suite {
27
- margin-left: 15px;
28
- }
29
-
30
- #mocha .test {
31
- margin-left: 15px;
32
- }
33
-
34
- #mocha .test:hover h2::after {
35
- position: relative;
36
- top: 0;
37
- right: -10px;
38
- content: '(view source)';
39
- font-size: 12px;
40
- font-family: arial;
41
- color: #888;
42
- }
43
-
44
- #mocha .test.pending:hover h2::after {
45
- content: '(pending)';
46
- font-family: arial;
47
- }
48
-
49
- #mocha .test.pass::before {
50
- content: '✓';
51
- font-size: 12px;
52
- display: block;
53
- float: left;
54
- margin-right: 5px;
55
- color: #00c41c;
56
- }
57
-
58
- #mocha .test.pending {
59
- color: #0b97c4;
60
- }
61
-
62
- #mocha .test.pending::before {
63
- content: '◦';
64
- color: #0b97c4;
65
- }
66
-
67
- #mocha .test.fail {
68
- color: #c00;
69
- }
70
-
71
- #mocha .test.fail pre {
72
- color: black;
73
- }
74
-
75
- #mocha .test.fail::before {
76
- content: '✖';
77
- font-size: 12px;
78
- display: block;
79
- float: left;
80
- margin-right: 5px;
81
- color: #c00;
82
- }
83
-
84
- #mocha .test pre.error {
85
- color: #c00;
86
- }
87
-
88
- #mocha .test pre {
89
- display: inline-block;
90
- font: 12px/1.5 monaco, monospace;
91
- margin: 5px;
92
- padding: 15px;
93
- border: 1px solid #eee;
94
- border-bottom-color: #ddd;
95
- -webkit-border-radius: 3px;
96
- -webkit-box-shadow: 0 1px 3px #eee;
97
- }
98
-
99
- #error {
100
- color: #c00;
101
- font-size: 1.5 em;
102
- font-weight: 100;
103
- letter-spacing: 1px;
104
- }
105
-
106
- #stats {
107
- position: fixed;
108
- top: 15px;
109
- right: 10px;
110
- font-size: 12px;
111
- margin: 0;
112
- color: #888;
113
- }
114
-
115
- #stats .progress {
116
- float: right;
117
- padding-top: 0;
118
- }
119
-
120
- #stats em {
121
- color: black;
122
- }
123
-
124
- #stats li {
125
- display: inline-block;
126
- margin: 0 5px;
127
- list-style: none;
128
- padding-top: 11px;
129
- }
130
-
131
- code .comment { color: #ddd }
132
- code .init { color: #2F6FAD }
133
- code .string { color: #5890AD }
134
- code .keyword { color: #8A6343 }
135
- code .number { color: #2F6FAD }
@@ -1,3589 +0,0 @@
1
- ;(function(){
2
-
3
-
4
- // CommonJS require()
5
-
6
- function require(p){
7
- var path = require.resolve(p)
8
- , mod = require.modules[path];
9
- if (!mod) throw new Error('failed to require "' + p + '"');
10
- if (!mod.exports) {
11
- mod.exports = {};
12
- mod.call(mod.exports, mod, mod.exports, require.relative(path));
13
- }
14
- return mod.exports;
15
- }
16
-
17
- require.modules = {};
18
-
19
- require.resolve = function (path){
20
- var orig = path
21
- , reg = path + '.js'
22
- , index = path + '/index.js';
23
- return require.modules[reg] && reg
24
- || require.modules[index] && index
25
- || orig;
26
- };
27
-
28
- require.register = function (path, fn){
29
- require.modules[path] = fn;
30
- };
31
-
32
- require.relative = function (parent) {
33
- return function(p){
34
- if ('.' != p.charAt(0)) return require(p);
35
-
36
- var path = parent.split('/')
37
- , segs = p.split('/');
38
- path.pop();
39
-
40
- for (var i = 0; i < segs.length; i++) {
41
- var seg = segs[i];
42
- if ('..' == seg) path.pop();
43
- else if ('.' != seg) path.push(seg);
44
- }
45
-
46
- return require(path.join('/'));
47
- };
48
- };
49
-
50
-
51
- require.register("browser/debug.js", function(module, exports, require){
52
-
53
- module.exports = function(type){
54
- return function(){
55
-
56
- }
57
- };
58
- }); // module: browser/debug.js
59
-
60
- require.register("browser/events.js", function(module, exports, require){
61
-
62
- /**
63
- * Module exports.
64
- */
65
-
66
- exports.EventEmitter = EventEmitter;
67
-
68
- /**
69
- * Check if `obj` is an array.
70
- */
71
-
72
- function isArray(obj) {
73
- return '[object Array]' == {}.toString.call(obj);
74
- }
75
-
76
- /**
77
- * Event emitter constructor.
78
- *
79
- * @api public.
80
- */
81
-
82
- function EventEmitter(){};
83
-
84
- /**
85
- * Adds a listener.
86
- *
87
- * @api public
88
- */
89
-
90
- EventEmitter.prototype.on = function (name, fn) {
91
- if (!this.$events) {
92
- this.$events = {};
93
- }
94
-
95
- if (!this.$events[name]) {
96
- this.$events[name] = fn;
97
- } else if (isArray(this.$events[name])) {
98
- this.$events[name].push(fn);
99
- } else {
100
- this.$events[name] = [this.$events[name], fn];
101
- }
102
-
103
- return this;
104
- };
105
-
106
- EventEmitter.prototype.addListener = EventEmitter.prototype.on;
107
-
108
- /**
109
- * Adds a volatile listener.
110
- *
111
- * @api public
112
- */
113
-
114
- EventEmitter.prototype.once = function (name, fn) {
115
- var self = this;
116
-
117
- function on () {
118
- self.removeListener(name, on);
119
- fn.apply(this, arguments);
120
- };
121
-
122
- on.listener = fn;
123
- this.on(name, on);
124
-
125
- return this;
126
- };
127
-
128
- /**
129
- * Removes a listener.
130
- *
131
- * @api public
132
- */
133
-
134
- EventEmitter.prototype.removeListener = function (name, fn) {
135
- if (this.$events && this.$events[name]) {
136
- var list = this.$events[name];
137
-
138
- if (isArray(list)) {
139
- var pos = -1;
140
-
141
- for (var i = 0, l = list.length; i < l; i++) {
142
- if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {
143
- pos = i;
144
- break;
145
- }
146
- }
147
-
148
- if (pos < 0) {
149
- return this;
150
- }
151
-
152
- list.splice(pos, 1);
153
-
154
- if (!list.length) {
155
- delete this.$events[name];
156
- }
157
- } else if (list === fn || (list.listener && list.listener === fn)) {
158
- delete this.$events[name];
159
- }
160
- }
161
-
162
- return this;
163
- };
164
-
165
- /**
166
- * Removes all listeners for an event.
167
- *
168
- * @api public
169
- */
170
-
171
- EventEmitter.prototype.removeAllListeners = function (name) {
172
- if (name === undefined) {
173
- this.$events = {};
174
- return this;
175
- }
176
-
177
- if (this.$events && this.$events[name]) {
178
- this.$events[name] = null;
179
- }
180
-
181
- return this;
182
- };
183
-
184
- /**
185
- * Gets all listeners for a certain event.
186
- *
187
- * @api publci
188
- */
189
-
190
- EventEmitter.prototype.listeners = function (name) {
191
- if (!this.$events) {
192
- this.$events = {};
193
- }
194
-
195
- if (!this.$events[name]) {
196
- this.$events[name] = [];
197
- }
198
-
199
- if (!isArray(this.$events[name])) {
200
- this.$events[name] = [this.$events[name]];
201
- }
202
-
203
- return this.$events[name];
204
- };
205
-
206
- /**
207
- * Emits an event.
208
- *
209
- * @api public
210
- */
211
-
212
- EventEmitter.prototype.emit = function (name) {
213
- if (!this.$events) {
214
- return false;
215
- }
216
-
217
- var handler = this.$events[name];
218
-
219
- if (!handler) {
220
- return false;
221
- }
222
-
223
- var args = [].slice.call(arguments, 1);
224
-
225
- if ('function' == typeof handler) {
226
- handler.apply(this, args);
227
- } else if (isArray(handler)) {
228
- var listeners = handler.slice();
229
-
230
- for (var i = 0, l = listeners.length; i < l; i++) {
231
- listeners[i].apply(this, args);
232
- }
233
- } else {
234
- return false;
235
- }
236
-
237
- return true;
238
- };
239
- }); // module: browser/events.js
240
-
241
- require.register("browser/fs.js", function(module, exports, require){
242
-
243
- }); // module: browser/fs.js
244
-
245
- require.register("browser/path.js", function(module, exports, require){
246
-
247
- }); // module: browser/path.js
248
-
249
- require.register("browser/progress.js", function(module, exports, require){
250
-
251
- /**
252
- * Expose `Progress`.
253
- */
254
-
255
- module.exports = Progress;
256
-
257
- /**
258
- * Initialize a new `Progress` indicator.
259
- */
260
-
261
- function Progress() {
262
- this.percent = 0;
263
- this.size(0);
264
- this.fontSize(11);
265
- this.font('helvetica, arial, sans-serif');
266
- }
267
-
268
- /**
269
- * Set progress size to `n`.
270
- *
271
- * @param {Number} n
272
- * @return {Progress} for chaining
273
- * @api public
274
- */
275
-
276
- Progress.prototype.size = function(n){
277
- this._size = n;
278
- return this;
279
- };
280
-
281
- /**
282
- * Set text to `str`.
283
- *
284
- * @param {String} str
285
- * @return {Progress} for chaining
286
- * @api public
287
- */
288
-
289
- Progress.prototype.text = function(str){
290
- this._text = str;
291
- return this;
292
- };
293
-
294
- /**
295
- * Set font size to `n`.
296
- *
297
- * @param {Number} n
298
- * @return {Progress} for chaining
299
- * @api public
300
- */
301
-
302
- Progress.prototype.fontSize = function(n){
303
- this._fontSize = n;
304
- return this;
305
- };
306
-
307
- /**
308
- * Set font `family`.
309
- *
310
- * @param {String} family
311
- * @return {Progress} for chaining
312
- */
313
-
314
- Progress.prototype.font = function(family){
315
- this._font = family;
316
- return this;
317
- };
318
-
319
- /**
320
- * Update percentage to `n`.
321
- *
322
- * @param {Number} n
323
- * @return {Progress} for chaining
324
- */
325
-
326
- Progress.prototype.update = function(n){
327
- this.percent = n;
328
- return this;
329
- };
330
-
331
- /**
332
- * Draw on `ctx`.
333
- *
334
- * @param {CanvasRenderingContext2d} ctx
335
- * @return {Progress} for chaining
336
- */
337
-
338
- Progress.prototype.draw = function(ctx){
339
- var percent = Math.min(this.percent, 100)
340
- , size = this._size
341
- , half = size / 2
342
- , x = half
343
- , y = half
344
- , rad = half - 1
345
- , fontSize = this._fontSize;
346
-
347
- ctx.font = fontSize + 'px ' + this._font;
348
-
349
- var angle = Math.PI * 2 * (percent / 100);
350
- ctx.clearRect(0, 0, size, size);
351
-
352
- // outer circle
353
- ctx.strokeStyle = '#9f9f9f';
354
- ctx.beginPath();
355
- ctx.arc(x, y, rad, 0, angle, false);
356
- ctx.stroke();
357
-
358
- // inner circle
359
- ctx.strokeStyle = '#eee';
360
- ctx.beginPath();
361
- ctx.arc(x, y, rad - 1, 0, angle, true);
362
- ctx.stroke();
363
-
364
- // text
365
- var text = this._text || (percent | 0) + '%'
366
- , w = ctx.measureText(text).width;
367
-
368
- ctx.fillText(
369
- text
370
- , x - w / 2 + 1
371
- , y + fontSize / 2 - 1);
372
-
373
- return this;
374
- };
375
-
376
- }); // module: browser/progress.js
377
-
378
- require.register("browser/tty.js", function(module, exports, require){
379
-
380
- exports.isatty = function(){
381
- return true;
382
- };
383
-
384
- exports.getWindowSize = function(){
385
- return [window.innerHeight, window.innerWidth];
386
- };
387
- }); // module: browser/tty.js
388
-
389
- require.register("context.js", function(module, exports, require){
390
-
391
- /**
392
- * Expose `Context`.
393
- */
394
-
395
- module.exports = Context;
396
-
397
- /**
398
- * Initialize a new `Context`.
399
- *
400
- * @api private
401
- */
402
-
403
- function Context(){}
404
-
405
- /**
406
- * Set the context `Test` to `test`.
407
- *
408
- * @param {Test} test
409
- * @return {Context}
410
- * @api private
411
- */
412
-
413
- Context.prototype.test = function(test){
414
- this._test = test;
415
- return this;
416
- };
417
-
418
- /**
419
- * Set test timeout `ms`.
420
- *
421
- * @param {Number} ms
422
- * @return {Context} self
423
- * @api private
424
- */
425
-
426
- Context.prototype.timeout = function(ms){
427
- this._test.timeout(ms);
428
- return this;
429
- };
430
-
431
- /**
432
- * Inspect the context void of `._test`.
433
- *
434
- * @return {String}
435
- * @api private
436
- */
437
-
438
- Context.prototype.inspect = function(){
439
- return JSON.stringify(this, function(key, val){
440
- return '_test' == key
441
- ? undefined
442
- : val;
443
- }, 2);
444
- };
445
-
446
- }); // module: context.js
447
-
448
- require.register("hook.js", function(module, exports, require){
449
-
450
- /**
451
- * Module dependencies.
452
- */
453
-
454
- var Runnable = require('./runnable');
455
-
456
- /**
457
- * Expose `Hook`.
458
- */
459
-
460
- module.exports = Hook;
461
-
462
- /**
463
- * Initialize a new `Hook` with the given `title` and callback `fn`.
464
- *
465
- * @param {String} title
466
- * @param {Function} fn
467
- * @api private
468
- */
469
-
470
- function Hook(title, fn) {
471
- Runnable.call(this, title, fn);
472
- this.type = 'hook';
473
- }
474
-
475
- /**
476
- * Inherit from `Runnable.prototype`.
477
- */
478
-
479
- Hook.prototype = new Runnable;
480
- Hook.prototype.constructor = Hook;
481
-
482
-
483
- }); // module: hook.js
484
-
485
- require.register("interfaces/bdd.js", function(module, exports, require){
486
-
487
- /**
488
- * Module dependencies.
489
- */
490
-
491
- var Suite = require('../suite')
492
- , Test = require('../test');
493
-
494
- /**
495
- * BDD-style interface:
496
- *
497
- * describe('Array', function(){
498
- * describe('#indexOf()', function(){
499
- * it('should return -1 when not present', function(){
500
- *
501
- * });
502
- *
503
- * it('should return the index when present', function(){
504
- *
505
- * });
506
- * });
507
- * });
508
- *
509
- */
510
-
511
- module.exports = function(suite){
512
- var suites = [suite];
513
-
514
- suite.on('pre-require', function(context){
515
-
516
- // noop variants
517
-
518
- context.xdescribe = function(){};
519
- context.xit = function(){};
520
-
521
- /**
522
- * Execute before running tests.
523
- */
524
-
525
- context.before = function(fn){
526
- suites[0].beforeAll(fn);
527
- };
528
-
529
- /**
530
- * Execute after running tests.
531
- */
532
-
533
- context.after = function(fn){
534
- suites[0].afterAll(fn);
535
- };
536
-
537
- /**
538
- * Execute before each test case.
539
- */
540
-
541
- context.beforeEach = function(fn){
542
- suites[0].beforeEach(fn);
543
- };
544
-
545
- /**
546
- * Execute after each test case.
547
- */
548
-
549
- context.afterEach = function(fn){
550
- suites[0].afterEach(fn);
551
- };
552
-
553
- /**
554
- * Describe a "suite" with the given `title`
555
- * and callback `fn` containing nested suites
556
- * and/or tests.
557
- */
558
-
559
- context.describe = function(title, fn){
560
- var suite = Suite.create(suites[0], title);
561
- suites.unshift(suite);
562
- fn();
563
- suites.shift();
564
- };
565
-
566
- /**
567
- * Describe a specification or test-case
568
- * with the given `title` and callback `fn`
569
- * acting as a thunk.
570
- */
571
-
572
- context.it = function(title, fn){
573
- suites[0].addTest(new Test(title, fn));
574
- };
575
- });
576
- };
577
-
578
- }); // module: interfaces/bdd.js
579
-
580
- require.register("interfaces/exports.js", function(module, exports, require){
581
-
582
- /**
583
- * Module dependencies.
584
- */
585
-
586
- var Suite = require('../suite')
587
- , Test = require('../test');
588
-
589
- /**
590
- * TDD-style interface:
591
- *
592
- * exports.Array = {
593
- * '#indexOf()': {
594
- * 'should return -1 when the value is not present': function(){
595
- *
596
- * },
597
- *
598
- * 'should return the correct index when the value is present': function(){
599
- *
600
- * }
601
- * }
602
- * };
603
- *
604
- */
605
-
606
- module.exports = function(suite){
607
- var suites = [suite];
608
-
609
- suite.on('require', visit);
610
-
611
- function visit(obj) {
612
- var suite;
613
- for (var key in obj) {
614
- if ('function' == typeof obj[key]) {
615
- var fn = obj[key];
616
- switch (key) {
617
- case 'before':
618
- suites[0].beforeAll(fn);
619
- break;
620
- case 'after':
621
- suites[0].afterAll(fn);
622
- break;
623
- case 'beforeEach':
624
- suites[0].beforeEach(fn);
625
- break;
626
- case 'afterEach':
627
- suites[0].afterEach(fn);
628
- break;
629
- default:
630
- suites[0].addTest(new Test(key, fn));
631
- }
632
- } else {
633
- var suite = Suite.create(suites[0], key);
634
- suites.unshift(suite);
635
- visit(obj[key]);
636
- suites.shift();
637
- }
638
- }
639
- }
640
- };
641
- }); // module: interfaces/exports.js
642
-
643
- require.register("interfaces/index.js", function(module, exports, require){
644
-
645
- exports.bdd = require('./bdd');
646
- exports.tdd = require('./tdd');
647
- exports.qunit = require('./qunit');
648
- exports.exports = require('./exports');
649
-
650
- }); // module: interfaces/index.js
651
-
652
- require.register("interfaces/qunit.js", function(module, exports, require){
653
-
654
- /**
655
- * Module dependencies.
656
- */
657
-
658
- var Suite = require('../suite')
659
- , Test = require('../test');
660
-
661
- /**
662
- * QUnit-style interface:
663
- *
664
- * suite('Array');
665
- *
666
- * test('#length', function(){
667
- * var arr = [1,2,3];
668
- * ok(arr.length == 3);
669
- * });
670
- *
671
- * test('#indexOf()', function(){
672
- * var arr = [1,2,3];
673
- * ok(arr.indexOf(1) == 0);
674
- * ok(arr.indexOf(2) == 1);
675
- * ok(arr.indexOf(3) == 2);
676
- * });
677
- *
678
- * suite('String');
679
- *
680
- * test('#length', function(){
681
- * ok('foo'.length == 3);
682
- * });
683
- *
684
- */
685
-
686
- module.exports = function(suite){
687
- var suites = [suite];
688
-
689
- suite.on('pre-require', function(context){
690
-
691
- /**
692
- * Execute before running tests.
693
- */
694
-
695
- context.before = function(fn){
696
- suites[0].beforeAll(fn);
697
- };
698
-
699
- /**
700
- * Execute after running tests.
701
- */
702
-
703
- context.after = function(fn){
704
- suites[0].afterAll(fn);
705
- };
706
-
707
- /**
708
- * Execute before each test case.
709
- */
710
-
711
- context.beforeEach = function(fn){
712
- suites[0].beforeEach(fn);
713
- };
714
-
715
- /**
716
- * Execute after each test case.
717
- */
718
-
719
- context.afterEach = function(fn){
720
- suites[0].afterEach(fn);
721
- };
722
-
723
- /**
724
- * Describe a "suite" with the given `title`.
725
- */
726
-
727
- context.suite = function(title){
728
- if (suites.length > 1) suites.shift();
729
- var suite = Suite.create(suites[0], title);
730
- suites.unshift(suite);
731
- };
732
-
733
- /**
734
- * Describe a specification or test-case
735
- * with the given `title` and callback `fn`
736
- * acting as a thunk.
737
- */
738
-
739
- context.test = function(title, fn){
740
- suites[0].addTest(new Test(title, fn));
741
- };
742
- });
743
- };
744
-
745
- }); // module: interfaces/qunit.js
746
-
747
- require.register("interfaces/tdd.js", function(module, exports, require){
748
-
749
- /**
750
- * Module dependencies.
751
- */
752
-
753
- var Suite = require('../suite')
754
- , Test = require('../test');
755
-
756
- /**
757
- * TDD-style interface:
758
- *
759
- * suite('Array', function(){
760
- * suite('#indexOf()', function(){
761
- * suiteSetup(function(){
762
- *
763
- * });
764
- *
765
- * test('should return -1 when not present', function(){
766
- *
767
- * });
768
- *
769
- * test('should return the index when present', function(){
770
- *
771
- * });
772
- *
773
- * suiteTeardown(function(){
774
- *
775
- * });
776
- * });
777
- * });
778
- *
779
- */
780
-
781
- module.exports = function(suite){
782
- var suites = [suite];
783
-
784
- suite.on('pre-require', function(context){
785
-
786
- /**
787
- * Execute before each test case.
788
- */
789
-
790
- context.setup = function(fn){
791
- suites[0].beforeEach(fn);
792
- };
793
-
794
- /**
795
- * Execute after each test case.
796
- */
797
-
798
- context.teardown = function(fn){
799
- suites[0].afterEach(fn);
800
- };
801
-
802
- /**
803
- * Execute before the suite.
804
- */
805
-
806
- context.suiteSetup = function(fn){
807
- suites[0].beforeAll(fn);
808
- };
809
-
810
- /**
811
- * Execute after the suite.
812
- */
813
-
814
- context.suiteTeardown = function(fn){
815
- suites[0].afterAll(fn);
816
- };
817
-
818
- /**
819
- * Describe a "suite" with the given `title`
820
- * and callback `fn` containing nested suites
821
- * and/or tests.
822
- */
823
-
824
- context.suite = function(title, fn){
825
- var suite = Suite.create(suites[0], title);
826
- suites.unshift(suite);
827
- fn();
828
- suites.shift();
829
- };
830
-
831
- /**
832
- * Describe a specification or test-case
833
- * with the given `title` and callback `fn`
834
- * acting as a thunk.
835
- */
836
-
837
- context.test = function(title, fn){
838
- suites[0].addTest(new Test(title, fn));
839
- };
840
- });
841
- };
842
-
843
- }); // module: interfaces/tdd.js
844
-
845
- require.register("mocha.js", function(module, exports, require){
846
-
847
- /*!
848
- * mocha
849
- * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>
850
- * MIT Licensed
851
- */
852
-
853
- /**
854
- * Library version.
855
- */
856
-
857
- exports.version = '0.13.0';
858
-
859
- exports.utils = require('./utils');
860
- exports.interfaces = require('./interfaces');
861
- exports.reporters = require('./reporters');
862
- exports.Runnable = require('./runnable');
863
- exports.Context = require('./context');
864
- exports.Runner = require('./runner');
865
- exports.Suite = require('./suite');
866
- exports.Hook = require('./hook');
867
- exports.Test = require('./test');
868
-
869
- }); // module: mocha.js
870
-
871
- require.register("reporters/base.js", function(module, exports, require){
872
-
873
- /**
874
- * Module dependencies.
875
- */
876
-
877
- var tty = require('browser/tty');
878
-
879
- /**
880
- * Check if both stdio streams are associated with a tty.
881
- */
882
-
883
- var isatty = tty.isatty(1) && tty.isatty(2);
884
-
885
- /**
886
- * Expose `Base`.
887
- */
888
-
889
- exports = module.exports = Base;
890
-
891
- /**
892
- * Enable coloring by default.
893
- */
894
-
895
- exports.useColors = isatty;
896
-
897
- /**
898
- * Default color map.
899
- */
900
-
901
- exports.colors = {
902
- 'pass': 90
903
- , 'fail': 31
904
- , 'bright pass': 92
905
- , 'bright fail': 91
906
- , 'bright yellow': 93
907
- , 'pending': 36
908
- , 'suite': 0
909
- , 'error title': 0
910
- , 'error message': 31
911
- , 'error stack': 90
912
- , 'checkmark': 32
913
- , 'fast': 90
914
- , 'medium': 33
915
- , 'slow': 31
916
- , 'green': 32
917
- , 'light': 90
918
- };
919
-
920
- /**
921
- * Color `str` with the given `type`,
922
- * allowing colors to be disabled,
923
- * as well as user-defined color
924
- * schemes.
925
- *
926
- * @param {String} type
927
- * @param {String} str
928
- * @return {String}
929
- * @api private
930
- */
931
-
932
- var color = exports.color = function(type, str) {
933
- if (!exports.useColors) return str;
934
- return '\033[' + exports.colors[type] + 'm' + str + '\033[0m';
935
- };
936
-
937
- /**
938
- * Expose term window size, with some
939
- * defaults for when stderr is not a tty.
940
- */
941
-
942
- exports.window = {
943
- width: isatty
944
- ? process.stdout.getWindowSize
945
- ? process.stdout.getWindowSize(1)[0]
946
- : tty.getWindowSize()[1]
947
- : 75
948
- };
949
-
950
- /**
951
- * Expose some basic cursor interactions
952
- * that are common among reporters.
953
- */
954
-
955
- exports.cursor = {
956
- hide: function(){
957
- process.stdout.write('\033[?25l');
958
- },
959
-
960
- show: function(){
961
- process.stdout.write('\033[?25h');
962
- },
963
-
964
- deleteLine: function(){
965
- process.stdout.write('\033[2K');
966
- },
967
-
968
- beginningOfLine: function(){
969
- process.stdout.write('\033[0G');
970
- },
971
-
972
- CR: function(){
973
- exports.cursor.deleteLine();
974
- exports.cursor.beginningOfLine();
975
- }
976
- };
977
-
978
- /**
979
- * A test is considered slow if it
980
- * exceeds the following value in milliseconds.
981
- */
982
-
983
- exports.slow = 75;
984
-
985
- /**
986
- * Outut the given `failures` as a list.
987
- *
988
- * @param {Array} failures
989
- * @api public
990
- */
991
-
992
- exports.list = function(failures){
993
- console.error();
994
- failures.forEach(function(test, i){
995
- // format
996
- var fmt = color('error title', ' %s) %s:\n')
997
- + color('error message', ' %s')
998
- + color('error stack', '\n%s\n');
999
-
1000
- // msg
1001
- var err = test.err
1002
- , message = err.message || ''
1003
- , stack = err.stack || message
1004
- , index = stack.indexOf(message) + message.length
1005
- , msg = stack.slice(0, index);
1006
-
1007
- // indent stack trace without msg
1008
- stack = stack.slice(index + 1)
1009
- .replace(/^/gm, ' ');
1010
-
1011
- console.error(fmt, (i + 1), test.fullTitle(), msg, stack);
1012
- });
1013
- };
1014
-
1015
- /**
1016
- * Initialize a new `Base` reporter.
1017
- *
1018
- * All other reporters generally
1019
- * inherit from this reporter, providing
1020
- * stats such as test duration, number
1021
- * of tests passed / failed etc.
1022
- *
1023
- * @param {Runner} runner
1024
- * @api public
1025
- */
1026
-
1027
- function Base(runner) {
1028
- var self = this
1029
- , stats = this.stats = { suites: 0, tests: 0, passes: 0, failures: 0 }
1030
- , failures = this.failures = [];
1031
-
1032
- if (!runner) return;
1033
- this.runner = runner;
1034
-
1035
- runner.on('start', function(){
1036
- stats.start = new Date;
1037
- });
1038
-
1039
- runner.on('suite', function(suite){
1040
- stats.suites = stats.suites || 0;
1041
- suite.root || stats.suites++;
1042
- });
1043
-
1044
- runner.on('test end', function(test){
1045
- stats.tests = stats.tests || 0;
1046
- stats.tests++;
1047
- });
1048
-
1049
- runner.on('pass', function(test){
1050
- stats.passes = stats.passes || 0;
1051
-
1052
- var medium = exports.slow / 2;
1053
- test.speed = test.duration > exports.slow
1054
- ? 'slow'
1055
- : test.duration > medium
1056
- ? 'medium'
1057
- : 'fast';
1058
-
1059
- stats.passes++;
1060
- });
1061
-
1062
- runner.on('fail', function(test, err){
1063
- stats.failures = stats.failures || 0;
1064
- stats.failures++;
1065
- test.err = err;
1066
- failures.push(test);
1067
- });
1068
-
1069
- runner.on('end', function(){
1070
- stats.end = new Date;
1071
- stats.duration = new Date - stats.start;
1072
- });
1073
- }
1074
-
1075
- /**
1076
- * Output common epilogue used by many of
1077
- * the bundled reporters.
1078
- *
1079
- * @api public
1080
- */
1081
-
1082
- Base.prototype.epilogue = function(){
1083
- var stats = this.stats
1084
- , fmt;
1085
-
1086
- console.log();
1087
-
1088
- // failure
1089
- if (stats.failures) {
1090
- fmt = color('bright fail', ' ✖')
1091
- + color('fail', ' %d of %d tests failed')
1092
- + color('light', ':')
1093
-
1094
- console.error(fmt, stats.failures, this.runner.total);
1095
- Base.list(this.failures);
1096
- console.error();
1097
- return;
1098
- }
1099
-
1100
- // pass
1101
- fmt = color('bright pass', ' ✔')
1102
- + color('green', ' %d tests complete')
1103
- + color('light', ' (%dms)');
1104
-
1105
- console.log(fmt, stats.tests || 0, stats.duration);
1106
- console.log();
1107
- };
1108
-
1109
- }); // module: reporters/base.js
1110
-
1111
- require.register("reporters/doc.js", function(module, exports, require){
1112
-
1113
- /**
1114
- * Module dependencies.
1115
- */
1116
-
1117
- var Base = require('./base')
1118
- , utils = require('../utils');
1119
-
1120
- /**
1121
- * Expose `Doc`.
1122
- */
1123
-
1124
- exports = module.exports = Doc;
1125
-
1126
- /**
1127
- * Initialize a new `Doc` reporter.
1128
- *
1129
- * @param {Runner} runner
1130
- * @api public
1131
- */
1132
-
1133
- function Doc(runner) {
1134
- Base.call(this, runner);
1135
-
1136
- var self = this
1137
- , stats = this.stats
1138
- , total = runner.total
1139
- , indents = 2;
1140
-
1141
- function indent() {
1142
- return Array(indents).join(' ');
1143
- }
1144
-
1145
- runner.on('suite', function(suite){
1146
- if (suite.root) return;
1147
- ++indents;
1148
- console.log('%s<section class="suite">', indent());
1149
- ++indents;
1150
- console.log('%s<h1>%s</h1>', indent(), suite.title);
1151
- console.log('%s<dl>', indent());
1152
- });
1153
-
1154
- runner.on('suite end', function(suite){
1155
- if (suite.root) return;
1156
- console.log('%s</dl>', indent());
1157
- --indents;
1158
- console.log('%s</section>', indent());
1159
- --indents;
1160
- });
1161
-
1162
- runner.on('pass', function(test){
1163
- console.log('%s <dt>%s</dt>', indent(), test.title);
1164
- var code = utils.escape(clean(test.fn.toString()));
1165
- console.log('%s <dd><pre><code>%s</code></pre></dd>', indent(), code);
1166
- });
1167
- }
1168
-
1169
- /**
1170
- * Strip the function definition from `str`,
1171
- * and re-indent for pre whitespace.
1172
- */
1173
-
1174
- function clean(str) {
1175
- str = str
1176
- .replace(/^function *\(.*\) *{/, '')
1177
- .replace(/\s+\}$/, '');
1178
-
1179
- var spaces = str.match(/^\n?( *)/)[1].length
1180
- , re = new RegExp('^ {' + spaces + '}', 'gm');
1181
-
1182
- str = str.replace(re, '');
1183
-
1184
- return str;
1185
- }
1186
- }); // module: reporters/doc.js
1187
-
1188
- require.register("reporters/dot.js", function(module, exports, require){
1189
-
1190
- /**
1191
- * Module dependencies.
1192
- */
1193
-
1194
- var Base = require('./base')
1195
- , color = Base.color;
1196
-
1197
- /**
1198
- * Expose `Dot`.
1199
- */
1200
-
1201
- exports = module.exports = Dot;
1202
-
1203
- /**
1204
- * Initialize a new `Dot` matrix test reporter.
1205
- *
1206
- * @param {Runner} runner
1207
- * @api public
1208
- */
1209
-
1210
- function Dot(runner) {
1211
- Base.call(this, runner);
1212
-
1213
- var self = this
1214
- , stats = this.stats
1215
- , width = Base.window.width * .75 | 0
1216
- , n = 0;
1217
-
1218
- runner.on('start', function(){
1219
- process.stdout.write('\n ');
1220
- });
1221
-
1222
- runner.on('pending', function(test){
1223
- process.stdout.write(color('pending', '.'));
1224
- });
1225
-
1226
- runner.on('pass', function(test){
1227
- if (++n % width == 0) process.stdout.write('\n ');
1228
- if ('slow' == test.speed) {
1229
- process.stdout.write(color('bright yellow', '.'));
1230
- } else {
1231
- process.stdout.write(color(test.speed, '.'));
1232
- }
1233
- });
1234
-
1235
- runner.on('fail', function(test, err){
1236
- if (++n % width == 0) process.stdout.write('\n ');
1237
- process.stdout.write(color('fail', '.'));
1238
- });
1239
-
1240
- runner.on('end', function(){
1241
- console.log();
1242
- self.epilogue();
1243
- });
1244
- }
1245
-
1246
- /**
1247
- * Inherit from `Base.prototype`.
1248
- */
1249
-
1250
- Dot.prototype = new Base;
1251
- Dot.prototype.constructor = Dot;
1252
-
1253
- }); // module: reporters/dot.js
1254
-
1255
- require.register("reporters/html-cov.js", function(module, exports, require){
1256
-
1257
- /**
1258
- * Module dependencies.
1259
- */
1260
-
1261
- var JSONCov = require('./json-cov')
1262
- , fs = require('browser/fs');
1263
-
1264
- /**
1265
- * Expose `HTMLCov`.
1266
- */
1267
-
1268
- exports = module.exports = HTMLCov;
1269
-
1270
- /**
1271
- * Initialize a new `JsCoverage` reporter.
1272
- *
1273
- * @param {Runner} runner
1274
- * @api public
1275
- */
1276
-
1277
- function HTMLCov(runner) {
1278
- var jade = require('jade')
1279
- , file = __dirname + '/templates/coverage.jade'
1280
- , str = fs.readFileSync(file, 'utf8')
1281
- , fn = jade.compile(str, { filename: file })
1282
- , self = this;
1283
-
1284
- JSONCov.call(this, runner, false);
1285
-
1286
- runner.on('end', function(){
1287
- process.stdout.write(fn({
1288
- cov: self.cov
1289
- , coverageClass: coverageClass
1290
- }));
1291
- });
1292
- }
1293
-
1294
- function coverageClass(n) {
1295
- if (n >= 75) return 'high';
1296
- if (n >= 50) return 'medium';
1297
- if (n >= 25) return 'low';
1298
- return 'terrible';
1299
- }
1300
- }); // module: reporters/html-cov.js
1301
-
1302
- require.register("reporters/html.js", function(module, exports, require){
1303
-
1304
- /**
1305
- * Module dependencies.
1306
- */
1307
-
1308
- var Base = require('./base')
1309
- , utils = require('../utils')
1310
- , Progress = require('../browser/progress')
1311
- , escape = utils.escape;
1312
-
1313
- /**
1314
- * Expose `Doc`.
1315
- */
1316
-
1317
- exports = module.exports = HTML;
1318
-
1319
- /**
1320
- * Stats template.
1321
- */
1322
-
1323
- var statsTemplate = '<ul id="stats">'
1324
- + '<li class="progress"><canvas width="40" height="40"></canvas></li>'
1325
- + '<li class="passes">passes: <em>0</em></li>'
1326
- + '<li class="failures">failures: <em>0</em></li>'
1327
- + '<li class="duration">duration: <em>0</em>s</li>'
1328
- + '</ul>';
1329
-
1330
- /**
1331
- * Initialize a new `Doc` reporter.
1332
- *
1333
- * @param {Runner} runner
1334
- * @api public
1335
- */
1336
-
1337
- function HTML(runner) {
1338
- Base.call(this, runner);
1339
-
1340
- // TODO: clean up
1341
-
1342
- var self = this
1343
- , stats = this.stats
1344
- , total = runner.total
1345
- , root = $('#mocha')
1346
- , stack = [root]
1347
- , stat = $(statsTemplate).appendTo(root)
1348
- , canvas = stat.find('canvas').get(0)
1349
- , progress
1350
- , ctx
1351
-
1352
- if (canvas.getContext) {
1353
- ctx = canvas.getContext('2d');
1354
- progress = new Progress;
1355
- }
1356
-
1357
- if (!root.length) return error('#mocha div missing, add it to your document');
1358
-
1359
- if (progress) progress.size(40);
1360
-
1361
- runner.on('suite', function(suite){
1362
- if (suite.root) return;
1363
-
1364
- // suite
1365
- var el = $('<div class="suite"><h1>' + suite.title + '</h1></div>');
1366
-
1367
- // container
1368
- stack[0].append(el);
1369
- stack.unshift($('<div>'));
1370
- el.append(stack[0]);
1371
- });
1372
-
1373
- runner.on('suite end', function(suite){
1374
- if (suite.root) return;
1375
- stack.shift();
1376
- });
1377
-
1378
- runner.on('fail', function(test, err){
1379
- if (err.uncaught) runner.emit('test end', test);
1380
- });
1381
-
1382
- runner.on('test end', function(test){
1383
- // TODO: add to stats
1384
- var percent = stats.tests / total * 100 | 0;
1385
-
1386
- if (progress) {
1387
- progress.update(percent).draw(ctx);
1388
- }
1389
-
1390
- // update stats
1391
- var ms = new Date - stats.start;
1392
- stat.find('.passes em').text(stats.passes);
1393
- stat.find('.failures em').text(stats.failures);
1394
- stat.find('.duration em').text((ms / 1000).toFixed(2));
1395
-
1396
- // test
1397
- if ('passed' == test.state) {
1398
- var el = $('<div class="test pass"><h2>' + escape(test.title) + '</h2></div>')
1399
- } else if (test.pending) {
1400
- var el = $('<div class="test pass pending"><h2>' + escape(test.title) + '</h2></div>')
1401
- } else {
1402
- var el = $('<div class="test fail"><h2>' + escape(test.title) + '</h2></div>');
1403
- var str = test.err.stack || test.err;
1404
-
1405
- // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we
1406
- // check for the result of the stringifying.
1407
- if ('[object Error]' == str) str = test.err.message;
1408
-
1409
- $('<pre class="error">' + escape(str) + '</pre>').appendTo(el);
1410
- }
1411
-
1412
- // toggle code
1413
- el.find('h2').toggle(function(){
1414
- pre && pre.slideDown('fast');
1415
- }, function(){
1416
- pre && pre.slideUp('fast');
1417
- });
1418
-
1419
- // code
1420
- // TODO: defer
1421
- if (!test.pending) {
1422
- var code = escape(clean(test.fn.toString()));
1423
- var pre = $('<pre><code>' + code + '</code></pre>');
1424
- pre.appendTo(el).hide();
1425
- }
1426
- stack[0].append(el);
1427
- });
1428
- }
1429
-
1430
- /**
1431
- * Display error `msg`.
1432
- */
1433
-
1434
- function error(msg) {
1435
- $('<div id="error">' + msg + '</div>').appendTo('body');
1436
- }
1437
-
1438
- /**
1439
- * Strip the function definition from `str`,
1440
- * and re-indent for pre whitespace.
1441
- */
1442
-
1443
- function clean(str) {
1444
- str = str
1445
- .replace(/^function *\(.*\) *{/, '')
1446
- .replace(/\s+\}$/, '');
1447
-
1448
- var spaces = str.match(/^\n?( *)/)[1].length
1449
- , re = new RegExp('^ {' + spaces + '}', 'gm');
1450
-
1451
- str = str
1452
- .replace(re, '')
1453
- .replace(/^\s+/, '');
1454
-
1455
- return str;
1456
- }
1457
-
1458
- }); // module: reporters/html.js
1459
-
1460
- require.register("reporters/index.js", function(module, exports, require){
1461
-
1462
- exports.Base = require('./base');
1463
- exports.Dot = require('./dot');
1464
- exports.Doc = require('./doc');
1465
- exports.TAP = require('./tap');
1466
- exports.JSON = require('./json');
1467
- exports.HTML = require('./html');
1468
- exports.List = require('./list');
1469
- exports.Spec = require('./spec');
1470
- exports.Progress = require('./progress');
1471
- exports.Landing = require('./landing');
1472
- exports.JSONCov = require('./json-cov');
1473
- exports.HTMLCov = require('./html-cov');
1474
- exports.JSONStream = require('./json-stream');
1475
- exports.XUnit = require('./xunit')
1476
-
1477
- }); // module: reporters/index.js
1478
-
1479
- require.register("reporters/json-cov.js", function(module, exports, require){
1480
-
1481
- /**
1482
- * Module dependencies.
1483
- */
1484
-
1485
- var Base = require('./base');
1486
-
1487
- /**
1488
- * Expose `JSONCov`.
1489
- */
1490
-
1491
- exports = module.exports = JSONCov;
1492
-
1493
- /**
1494
- * Initialize a new `JsCoverage` reporter.
1495
- *
1496
- * @param {Runner} runner
1497
- * @param {Boolean} output
1498
- * @api public
1499
- */
1500
-
1501
- function JSONCov(runner, output) {
1502
- var self = this
1503
- , output = 1 == arguments.length ? true : output;
1504
-
1505
- Base.call(this, runner);
1506
-
1507
- var tests = []
1508
- , failures = []
1509
- , passes = [];
1510
-
1511
- runner.on('test end', function(test){
1512
- tests.push(test);
1513
- });
1514
-
1515
- runner.on('pass', function(test){
1516
- passes.push(test);
1517
- });
1518
-
1519
- runner.on('fail', function(test){
1520
- failures.push(test);
1521
- });
1522
-
1523
- runner.on('end', function(){
1524
- var cov = global._$jscoverage || {};
1525
- var result = self.cov = map(cov);
1526
- result.stats = self.stats;
1527
- result.tests = tests.map(clean);
1528
- result.failures = failures.map(clean);
1529
- result.passes = passes.map(clean);
1530
- if (!output) return;
1531
- process.stdout.write(JSON.stringify(result, null, 2 ));
1532
- });
1533
- }
1534
-
1535
- /**
1536
- * Map jscoverage data to a JSON structure
1537
- * suitable for reporting.
1538
- *
1539
- * @param {Object} cov
1540
- * @return {Object}
1541
- * @api private
1542
- */
1543
-
1544
- function map(cov) {
1545
- var ret = {
1546
- instrumentation: 'node-jscoverage'
1547
- , sloc: 0
1548
- , hits: 0
1549
- , misses: 0
1550
- , coverage: 0
1551
- , files: []
1552
- };
1553
-
1554
- for (var filename in cov) {
1555
- var data = coverage(filename, cov[filename]);
1556
- ret.files.push(data);
1557
- ret.hits += data.hits;
1558
- ret.misses += data.misses;
1559
- ret.sloc += data.sloc;
1560
- }
1561
-
1562
- if (ret.sloc > 0) {
1563
- ret.coverage = (ret.hits / ret.sloc) * 100;
1564
- }
1565
-
1566
- return ret;
1567
- };
1568
-
1569
- /**
1570
- * Map jscoverage data for a single source file
1571
- * to a JSON structure suitable for reporting.
1572
- *
1573
- * @param {String} filename name of the source file
1574
- * @param {Object} data jscoverage coverage data
1575
- * @return {Object}
1576
- * @api private
1577
- */
1578
-
1579
- function coverage(filename, data) {
1580
- var ret = {
1581
- filename: filename,
1582
- coverage: 0,
1583
- hits: 0,
1584
- misses: 0,
1585
- sloc: 0,
1586
- source: {}
1587
- };
1588
-
1589
- data.source.forEach(function(line, num){
1590
- num++;
1591
-
1592
- if (data[num] === 0) {
1593
- ret.misses++;
1594
- ret.sloc++;
1595
- } else if (data[num] !== undefined) {
1596
- ret.hits++;
1597
- ret.sloc++;
1598
- }
1599
-
1600
- ret.source[num] = {
1601
- source: line
1602
- , coverage: data[num] === undefined
1603
- ? ''
1604
- : data[num]
1605
- };
1606
- });
1607
-
1608
- ret.coverage = ret.hits / ret.sloc * 100;
1609
-
1610
- return ret;
1611
- }
1612
-
1613
- /**
1614
- * Return a plain-object representation of `test`
1615
- * free of cyclic properties etc.
1616
- *
1617
- * @param {Object} test
1618
- * @return {Object}
1619
- * @api private
1620
- */
1621
-
1622
- function clean(test) {
1623
- return {
1624
- title: test.title
1625
- , fullTitle: test.fullTitle()
1626
- , duration: test.duration
1627
- }
1628
- }
1629
-
1630
- }); // module: reporters/json-cov.js
1631
-
1632
- require.register("reporters/json-stream.js", function(module, exports, require){
1633
-
1634
- /**
1635
- * Module dependencies.
1636
- */
1637
-
1638
- var Base = require('./base')
1639
- , color = Base.color;
1640
-
1641
- /**
1642
- * Expose `List`.
1643
- */
1644
-
1645
- exports = module.exports = List;
1646
-
1647
- /**
1648
- * Initialize a new `List` test reporter.
1649
- *
1650
- * @param {Runner} runner
1651
- * @api public
1652
- */
1653
-
1654
- function List(runner) {
1655
- Base.call(this, runner);
1656
-
1657
- var self = this
1658
- , stats = this.stats
1659
- , total = runner.total;
1660
-
1661
- runner.on('start', function(){
1662
- console.log(JSON.stringify(['start', { total: total }]));
1663
- });
1664
-
1665
- runner.on('pass', function(test){
1666
- console.log(JSON.stringify(['pass', clean(test)]));
1667
- });
1668
-
1669
- runner.on('fail', function(test, err){
1670
- console.log(JSON.stringify(['fail', clean(test)]));
1671
- });
1672
-
1673
- runner.on('end', function(){
1674
- process.stdout.write(JSON.stringify(['end', self.stats]));
1675
- });
1676
- }
1677
-
1678
- /**
1679
- * Return a plain-object representation of `test`
1680
- * free of cyclic properties etc.
1681
- *
1682
- * @param {Object} test
1683
- * @return {Object}
1684
- * @api private
1685
- */
1686
-
1687
- function clean(test) {
1688
- return {
1689
- title: test.title
1690
- , fullTitle: test.fullTitle()
1691
- , duration: test.duration
1692
- }
1693
- }
1694
- }); // module: reporters/json-stream.js
1695
-
1696
- require.register("reporters/json.js", function(module, exports, require){
1697
-
1698
- /**
1699
- * Module dependencies.
1700
- */
1701
-
1702
- var Base = require('./base')
1703
- , cursor = Base.cursor
1704
- , color = Base.color;
1705
-
1706
- /**
1707
- * Expose `JSON`.
1708
- */
1709
-
1710
- exports = module.exports = JSONReporter;
1711
-
1712
- /**
1713
- * Initialize a new `JSON` reporter.
1714
- *
1715
- * @param {Runner} runner
1716
- * @api public
1717
- */
1718
-
1719
- function JSONReporter(runner) {
1720
- var self = this;
1721
- Base.call(this, runner);
1722
-
1723
- var tests = []
1724
- , failures = []
1725
- , passes = [];
1726
-
1727
- runner.on('test end', function(test){
1728
- tests.push(test);
1729
- });
1730
-
1731
- runner.on('pass', function(test){
1732
- passes.push(test);
1733
- });
1734
-
1735
- runner.on('fail', function(test){
1736
- failures.push(test);
1737
- });
1738
-
1739
- runner.on('end', function(){
1740
- var obj = {
1741
- stats: self.stats
1742
- , tests: tests.map(clean)
1743
- , failures: failures.map(clean)
1744
- , passes: passes.map(clean)
1745
- };
1746
-
1747
- process.stdout.write(JSON.stringify(obj, null, 2));
1748
- });
1749
- }
1750
-
1751
- /**
1752
- * Return a plain-object representation of `test`
1753
- * free of cyclic properties etc.
1754
- *
1755
- * @param {Object} test
1756
- * @return {Object}
1757
- * @api private
1758
- */
1759
-
1760
- function clean(test) {
1761
- return {
1762
- title: test.title
1763
- , fullTitle: test.fullTitle()
1764
- , duration: test.duration
1765
- }
1766
- }
1767
- }); // module: reporters/json.js
1768
-
1769
- require.register("reporters/landing.js", function(module, exports, require){
1770
-
1771
- /**
1772
- * Module dependencies.
1773
- */
1774
-
1775
- var Base = require('./base')
1776
- , cursor = Base.cursor
1777
- , color = Base.color;
1778
-
1779
- /**
1780
- * Expose `Landing`.
1781
- */
1782
-
1783
- exports = module.exports = Landing;
1784
-
1785
- /**
1786
- * Airplane color.
1787
- */
1788
-
1789
- Base.colors.plane = 0;
1790
-
1791
- /**
1792
- * Airplane crash color.
1793
- */
1794
-
1795
- Base.colors['plane crash'] = 31;
1796
-
1797
- /**
1798
- * Runway color.
1799
- */
1800
-
1801
- Base.colors.runway = 90;
1802
-
1803
- /**
1804
- * Initialize a new `Landing` reporter.
1805
- *
1806
- * @param {Runner} runner
1807
- * @api public
1808
- */
1809
-
1810
- function Landing(runner) {
1811
- Base.call(this, runner);
1812
-
1813
- var self = this
1814
- , stats = this.stats
1815
- , width = Base.window.width * .75 | 0
1816
- , total = runner.total
1817
- , stream = process.stdout
1818
- , plane = color('plane', '✈')
1819
- , crashed = -1
1820
- , n = 0;
1821
-
1822
- function runway() {
1823
- var buf = Array(width).join('-');
1824
- return ' ' + color('runway', buf);
1825
- }
1826
-
1827
- runner.on('start', function(){
1828
- stream.write('\n ');
1829
- cursor.hide();
1830
- });
1831
-
1832
- runner.on('test end', function(test){
1833
- // check if the plane crashed
1834
- var col = -1 == crashed
1835
- ? width * ++n / total | 0
1836
- : crashed;
1837
-
1838
- // show the crash
1839
- if ('failed' == test.state) {
1840
- plane = color('plane crash', '✈');
1841
- crashed = col;
1842
- }
1843
-
1844
- // render landing strip
1845
- stream.write('\033[4F\n\n');
1846
- stream.write(runway());
1847
- stream.write('\n ');
1848
- stream.write(color('runway', Array(col).join('⋅')));
1849
- stream.write(plane)
1850
- stream.write(color('runway', Array(width - col).join('⋅') + '\n'));
1851
- stream.write(runway());
1852
- stream.write('\033[0m');
1853
- });
1854
-
1855
- runner.on('end', function(){
1856
- cursor.show();
1857
- console.log();
1858
- self.epilogue();
1859
- });
1860
- }
1861
-
1862
- /**
1863
- * Inherit from `Base.prototype`.
1864
- */
1865
-
1866
- Landing.prototype = new Base;
1867
- Landing.prototype.constructor = Landing;
1868
-
1869
- }); // module: reporters/landing.js
1870
-
1871
- require.register("reporters/list.js", function(module, exports, require){
1872
-
1873
- /**
1874
- * Module dependencies.
1875
- */
1876
-
1877
- var Base = require('./base')
1878
- , cursor = Base.cursor
1879
- , color = Base.color;
1880
-
1881
- /**
1882
- * Expose `List`.
1883
- */
1884
-
1885
- exports = module.exports = List;
1886
-
1887
- /**
1888
- * Initialize a new `List` test reporter.
1889
- *
1890
- * @param {Runner} runner
1891
- * @api public
1892
- */
1893
-
1894
- function List(runner) {
1895
- Base.call(this, runner);
1896
-
1897
- var self = this
1898
- , stats = this.stats
1899
- , n = 0;
1900
-
1901
- runner.on('start', function(){
1902
- console.log();
1903
- });
1904
-
1905
- runner.on('test', function(test){
1906
- process.stdout.write(color('pass', ' ' + test.fullTitle() + ': '));
1907
- });
1908
-
1909
- runner.on('pending', function(test){
1910
- var fmt = color('checkmark', ' -')
1911
- + color('pending', ' %s');
1912
- console.log(fmt, test.fullTitle());
1913
- });
1914
-
1915
- runner.on('pass', function(test){
1916
- var fmt = color('checkmark', ' ✓')
1917
- + color('pass', ' %s: ')
1918
- + color(test.speed, '%dms');
1919
- cursor.CR();
1920
- console.log(fmt, test.fullTitle(), test.duration);
1921
- });
1922
-
1923
- runner.on('fail', function(test, err){
1924
- cursor.CR();
1925
- console.log(color('fail', ' %d) %s'), ++n, test.fullTitle());
1926
- });
1927
-
1928
- runner.on('end', self.epilogue.bind(self));
1929
- }
1930
-
1931
- /**
1932
- * Inherit from `Base.prototype`.
1933
- */
1934
-
1935
- List.prototype = new Base;
1936
- List.prototype.constructor = List;
1937
-
1938
-
1939
- }); // module: reporters/list.js
1940
-
1941
- require.register("reporters/progress.js", function(module, exports, require){
1942
-
1943
- /**
1944
- * Module dependencies.
1945
- */
1946
-
1947
- var Base = require('./base')
1948
- , cursor = Base.cursor
1949
- , color = Base.color;
1950
-
1951
- /**
1952
- * Expose `Progress`.
1953
- */
1954
-
1955
- exports = module.exports = Progress;
1956
-
1957
- /**
1958
- * General progress bar color.
1959
- */
1960
-
1961
- Base.colors.progress = 90;
1962
-
1963
- /**
1964
- * Initialize a new `Progress` bar test reporter.
1965
- *
1966
- * @param {Runner} runner
1967
- * @param {Object} options
1968
- * @api public
1969
- */
1970
-
1971
- function Progress(runner, options) {
1972
- Base.call(this, runner);
1973
-
1974
- var self = this
1975
- , options = options || {}
1976
- , stats = this.stats
1977
- , width = Base.window.width * .50 | 0
1978
- , total = runner.total
1979
- , complete = 0
1980
- , max = Math.max;
1981
-
1982
- // default chars
1983
- options.open = options.open || '[';
1984
- options.complete = options.complete || '▬';
1985
- options.incomplete = options.incomplete || '⋅';
1986
- options.close = options.close || ']';
1987
- options.verbose = false;
1988
-
1989
- // tests started
1990
- runner.on('start', function(){
1991
- console.log();
1992
- cursor.hide();
1993
- });
1994
-
1995
- // tests complete
1996
- runner.on('test end', function(){
1997
- var incomplete = total - complete
1998
- , percent = complete++ / total
1999
- , n = width * percent | 0
2000
- , i = width - n;
2001
-
2002
- cursor.CR();
2003
- process.stdout.write('\033[J');
2004
- process.stdout.write(color('progress', ' ' + options.open));
2005
- process.stdout.write(Array(n).join(options.complete));
2006
- process.stdout.write(Array(i).join(options.incomplete));
2007
- process.stdout.write(color('progress', options.close));
2008
- if (options.verbose) {
2009
- process.stdout.write(color('progress', ' ' + complete + ' of ' + total));
2010
- }
2011
- });
2012
-
2013
- // tests are complete, output some stats
2014
- // and the failures if any
2015
- runner.on('end', function(){
2016
- cursor.show();
2017
- console.log();
2018
- self.epilogue();
2019
- });
2020
- }
2021
-
2022
- /**
2023
- * Inherit from `Base.prototype`.
2024
- */
2025
-
2026
- Progress.prototype = new Base;
2027
- Progress.prototype.constructor = Progress;
2028
-
2029
-
2030
- }); // module: reporters/progress.js
2031
-
2032
- require.register("reporters/spec.js", function(module, exports, require){
2033
-
2034
- /**
2035
- * Module dependencies.
2036
- */
2037
-
2038
- var Base = require('./base')
2039
- , cursor = Base.cursor
2040
- , color = Base.color;
2041
-
2042
- /**
2043
- * Expose `Spec`.
2044
- */
2045
-
2046
- exports = module.exports = Spec;
2047
-
2048
- /**
2049
- * Initialize a new `Spec` test reporter.
2050
- *
2051
- * @param {Runner} runner
2052
- * @api public
2053
- */
2054
-
2055
- function Spec(runner) {
2056
- Base.call(this, runner);
2057
-
2058
- var self = this
2059
- , stats = this.stats
2060
- , indents = 0
2061
- , n = 0;
2062
-
2063
- function indent() {
2064
- return Array(indents).join(' ')
2065
- }
2066
-
2067
- runner.on('start', function(){
2068
- console.log();
2069
- });
2070
-
2071
- runner.on('suite', function(suite){
2072
- ++indents;
2073
- console.log(color('suite', '%s%s'), indent(), suite.title);
2074
- });
2075
-
2076
- runner.on('suite end', function(suite){
2077
- --indents;
2078
- if (1 == indents) console.log();
2079
- });
2080
-
2081
- runner.on('test', function(test){
2082
- process.stdout.write(indent() + color('pass', ' ◦ ' + test.title + ': '));
2083
- });
2084
-
2085
- runner.on('pending', function(test){
2086
- var fmt = indent() + color('pending', ' - %s');
2087
- console.log(fmt, test.title);
2088
- });
2089
-
2090
- runner.on('pass', function(test){
2091
- if ('fast' == test.speed) {
2092
- var fmt = indent()
2093
- + color('checkmark', ' ✓')
2094
- + color('pass', ' %s ');
2095
- cursor.CR();
2096
- console.log(fmt, test.title);
2097
- } else {
2098
- var fmt = indent()
2099
- + color('checkmark', ' ✓')
2100
- + color('pass', ' %s ')
2101
- + color(test.speed, '(%dms)');
2102
- cursor.CR();
2103
- console.log(fmt, test.title, test.duration);
2104
- }
2105
- });
2106
-
2107
- runner.on('fail', function(test, err){
2108
- cursor.CR();
2109
- console.log(indent() + color('fail', ' %d) %s'), ++n, test.title);
2110
- });
2111
-
2112
- runner.on('end', self.epilogue.bind(self));
2113
- }
2114
-
2115
- /**
2116
- * Inherit from `Base.prototype`.
2117
- */
2118
-
2119
- Spec.prototype = new Base;
2120
- Spec.prototype.constructor = Spec;
2121
-
2122
-
2123
- }); // module: reporters/spec.js
2124
-
2125
- require.register("reporters/tap.js", function(module, exports, require){
2126
-
2127
- /**
2128
- * Module dependencies.
2129
- */
2130
-
2131
- var Base = require('./base')
2132
- , cursor = Base.cursor
2133
- , color = Base.color;
2134
-
2135
- /**
2136
- * Expose `TAP`.
2137
- */
2138
-
2139
- exports = module.exports = TAP;
2140
-
2141
- /**
2142
- * Initialize a new `TAP` reporter.
2143
- *
2144
- * @param {Runner} runner
2145
- * @api public
2146
- */
2147
-
2148
- function TAP(runner) {
2149
- Base.call(this, runner);
2150
-
2151
- var self = this
2152
- , stats = this.stats
2153
- , total = runner.total
2154
- , n = 1;
2155
-
2156
- runner.on('start', function(){
2157
- console.log('%d..%d', 1, total);
2158
- });
2159
-
2160
- runner.on('test end', function(){
2161
- ++n;
2162
- });
2163
-
2164
- runner.on('pending', function(test){
2165
- console.log('ok %d %s # SKIP -', n, title(test));
2166
- });
2167
-
2168
- runner.on('pass', function(test){
2169
- console.log('ok %d %s', n, title(test));
2170
- });
2171
-
2172
- runner.on('fail', function(test, err){
2173
- console.log('not ok %d %s', n, title(test));
2174
- console.log(err.stack.replace(/^/gm, ' '));
2175
- });
2176
- }
2177
-
2178
- /**
2179
- * Return a TAP-safe title of `test`
2180
- *
2181
- * @param {Object} test
2182
- * @return {String}
2183
- * @api private
2184
- */
2185
-
2186
- function title(test) {
2187
- return test.fullTitle().replace(/#/g, '');
2188
- }
2189
-
2190
- }); // module: reporters/tap.js
2191
-
2192
- require.register("reporters/teamcity.js", function(module, exports, require){
2193
-
2194
- /**
2195
- * Module dependencies.
2196
- */
2197
-
2198
- var Base = require('./base');
2199
-
2200
- /**
2201
- * Expose `Teamcity`.
2202
- */
2203
-
2204
- exports = module.exports = Teamcity;
2205
-
2206
- /**
2207
- * Initialize a new `Teamcity` reporter.
2208
- *
2209
- * @param {Runner} runner
2210
- * @api public
2211
- */
2212
-
2213
- function Teamcity(runner) {
2214
- Base.call(this, runner);
2215
- var stats = this.stats;
2216
-
2217
- runner.on('start', function() {
2218
- console.log("##teamcity[testSuiteStarted name='mocha.suite']");
2219
- });
2220
-
2221
- runner.on('test', function(test) {
2222
- console.log("##teamcity[testStarted name='%s']", escape(test.fullTitle()));
2223
- });
2224
-
2225
- runner.on('fail', function(test, err) {
2226
- console.log("##teamcity[testFailed name='%s' message='%s']", escape(test.fullTitle()), escape(err.message));
2227
- });
2228
-
2229
- runner.on('pending', function(test) {
2230
- console.log("##teamcity[testIgnored name='%s' message='pending']", escape(test.fullTitle()));
2231
- });
2232
-
2233
- runner.on('test end', function(test) {
2234
- console.log("##teamcity[testFinished name='%s' duration='%s']", escape(test.fullTitle()), test.duration);
2235
- });
2236
-
2237
- runner.on('end', function() {
2238
- console.log("##teamcity[testSuiteFinished name='mocha.suite' duration='%s']", stats.duration);
2239
- });
2240
- }
2241
-
2242
- /**
2243
- * Escape the given `str`.
2244
- */
2245
-
2246
- function escape(str) {
2247
- return str.replace(/'/g, "|'");
2248
- }
2249
- }); // module: reporters/teamcity.js
2250
-
2251
- require.register("reporters/xunit.js", function(module, exports, require){
2252
-
2253
- /**
2254
- * Module dependencies.
2255
- */
2256
-
2257
- var Base = require('./base')
2258
- , utils = require('../utils')
2259
- , escape = utils.escape;
2260
-
2261
- /**
2262
- * Expose `XUnit`.
2263
- */
2264
-
2265
- exports = module.exports = XUnit;
2266
-
2267
- /**
2268
- * Initialize a new `XUnit` reporter.
2269
- *
2270
- * @param {Runner} runner
2271
- * @api public
2272
- */
2273
-
2274
- function XUnit(runner) {
2275
- Base.call(this, runner);
2276
- var stats = this.stats
2277
- , tests = []
2278
- , self = this;
2279
-
2280
- runner.on('test end', function(test){
2281
- tests.push(test);
2282
- });
2283
-
2284
- runner.on('end', function(){
2285
- console.log(tag('testsuite', {
2286
- name: 'Mocha Tests'
2287
- , tests: stats.tests
2288
- , failures: stats.failures
2289
- , errors: stats.failures
2290
- , skip: stats.tests - stats.failures - stats.passes
2291
- , timestamp: (new Date).toUTCString()
2292
- , time: stats.duration / 1000
2293
- }, false));
2294
-
2295
- tests.forEach(test);
2296
- console.log('</testsuite>');
2297
- });
2298
- }
2299
-
2300
- /**
2301
- * Inherit from `Base.prototype`.
2302
- */
2303
-
2304
- XUnit.prototype = new Base;
2305
- XUnit.prototype.constructor = XUnit;
2306
-
2307
-
2308
- /**
2309
- * Output tag for the given `test.`
2310
- */
2311
-
2312
- function test(test) {
2313
- var attrs = {
2314
- classname: test.parent.fullTitle()
2315
- , name: test.title
2316
- , time: test.duration / 1000
2317
- };
2318
-
2319
- if ('failed' == test.state) {
2320
- var err = test.err;
2321
- attrs.message = escape(err.message);
2322
- console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack))));
2323
- } else if (test.pending) {
2324
- console.log(tag('testcase', attrs, false, tag('skipped', {}, true)));
2325
- } else {
2326
- console.log(tag('testcase', attrs, true) );
2327
- }
2328
- }
2329
-
2330
- /**
2331
- * HTML tag helper.
2332
- */
2333
-
2334
- function tag(name, attrs, close, content) {
2335
- var end = close ? '/>' : '>'
2336
- , pairs = []
2337
- , tag;
2338
-
2339
- for (var key in attrs) {
2340
- pairs.push(key + '="' + escape(attrs[key]) + '"');
2341
- }
2342
-
2343
- tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end;
2344
- if (content) tag += content + '</' + name + end;
2345
- return tag;
2346
- }
2347
-
2348
- /**
2349
- * Return cdata escaped CDATA `str`.
2350
- */
2351
-
2352
- function cdata(str) {
2353
- return '<![CDATA[' + escape(str) + ']]>';
2354
- }
2355
-
2356
- }); // module: reporters/xunit.js
2357
-
2358
- require.register("runnable.js", function(module, exports, require){
2359
-
2360
- /**
2361
- * Module dependencies.
2362
- */
2363
-
2364
- var EventEmitter = require('browser/events').EventEmitter
2365
- , debug = require('browser/debug')('runnable');
2366
-
2367
- /**
2368
- * Expose `Runnable`.
2369
- */
2370
-
2371
- module.exports = Runnable;
2372
-
2373
- /**
2374
- * Initialize a new `Runnable` with the given `title` and callback `fn`.
2375
- *
2376
- * @param {String} title
2377
- * @param {Function} fn
2378
- * @api private
2379
- */
2380
-
2381
- function Runnable(title, fn) {
2382
- this.title = title;
2383
- this.fn = fn;
2384
- this.async = fn && fn.length;
2385
- this.sync = ! this.async;
2386
- this._timeout = 2000;
2387
- this.timedOut = false;
2388
- }
2389
-
2390
- /**
2391
- * Inherit from `EventEmitter.prototype`.
2392
- */
2393
-
2394
- Runnable.prototype = new EventEmitter;
2395
- Runnable.prototype.constructor = Runnable;
2396
-
2397
-
2398
- /**
2399
- * Set & get timeout `ms`.
2400
- *
2401
- * @param {Number} ms
2402
- * @return {Runnable|Number} ms or self
2403
- * @api private
2404
- */
2405
-
2406
- Runnable.prototype.timeout = function(ms){
2407
- if (0 == arguments.length) return this._timeout;
2408
- debug('timeout %d', ms);
2409
- this._timeout = ms;
2410
- if (this.timer) this.resetTimeout();
2411
- return this;
2412
- };
2413
-
2414
- /**
2415
- * Return the full title generated by recursively
2416
- * concatenating the parent's full title.
2417
- *
2418
- * @return {String}
2419
- * @api public
2420
- */
2421
-
2422
- Runnable.prototype.fullTitle = function(){
2423
- return this.parent.fullTitle() + ' ' + this.title;
2424
- };
2425
-
2426
- /**
2427
- * Clear the timeout.
2428
- *
2429
- * @api private
2430
- */
2431
-
2432
- Runnable.prototype.clearTimeout = function(){
2433
- clearTimeout(this.timer);
2434
- };
2435
-
2436
- /**
2437
- * Reset the timeout.
2438
- *
2439
- * @api private
2440
- */
2441
-
2442
- Runnable.prototype.resetTimeout = function(){
2443
- var self = this
2444
- , ms = this.timeout();
2445
-
2446
- this.clearTimeout();
2447
- if (ms) {
2448
- this.timer = setTimeout(function(){
2449
- self.callback(new Error('timeout of ' + ms + 'ms exceeded'));
2450
- self.timedOut = true;
2451
- }, ms);
2452
- }
2453
- };
2454
-
2455
- /**
2456
- * Run the test and invoke `fn(err)`.
2457
- *
2458
- * @param {Function} fn
2459
- * @api private
2460
- */
2461
-
2462
- Runnable.prototype.run = function(fn){
2463
- var self = this
2464
- , ms = this.timeout()
2465
- , start = new Date
2466
- , ctx = this.ctx
2467
- , finished
2468
- , emitted;
2469
-
2470
- // timeout
2471
- if (this.async) {
2472
- if (ms) {
2473
- this.timer = setTimeout(function(){
2474
- done(new Error('timeout of ' + ms + 'ms exceeded'));
2475
- self.timedOut = true;
2476
- }, ms);
2477
- }
2478
- }
2479
-
2480
- // called multiple times
2481
- function multiple() {
2482
- if (emitted) return;
2483
- emitted = true;
2484
- self.emit('error', new Error('done() called multiple times'));
2485
- }
2486
-
2487
- // finished
2488
- function done(err) {
2489
- if (self.timedOut) return;
2490
- if (finished) return multiple();
2491
- self.clearTimeout();
2492
- self.duration = new Date - start;
2493
- finished = true;
2494
- fn(err);
2495
- }
2496
-
2497
- // for .resetTimeout()
2498
- this.callback = done;
2499
-
2500
- // async
2501
- if (this.async) {
2502
- try {
2503
- this.fn.call(ctx, function(err){
2504
- if (err instanceof Error) return done(err);
2505
- if (null != err) return done(new Error('done() invoked with non-Error: ' + err));
2506
- done();
2507
- });
2508
- } catch (err) {
2509
- done(err);
2510
- }
2511
- return;
2512
- }
2513
-
2514
- // sync
2515
- try {
2516
- if (!this.pending) this.fn.call(ctx);
2517
- this.duration = new Date - start;
2518
- fn();
2519
- } catch (err) {
2520
- fn(err);
2521
- }
2522
- };
2523
-
2524
- }); // module: runnable.js
2525
-
2526
- require.register("runner.js", function(module, exports, require){
2527
-
2528
- /**
2529
- * Module dependencies.
2530
- */
2531
-
2532
- var EventEmitter = require('browser/events').EventEmitter
2533
- , debug = require('browser/debug')('runner')
2534
- , Test = require('./test')
2535
- , utils = require('./utils')
2536
- , noop = function(){};
2537
-
2538
- /**
2539
- * Expose `Runner`.
2540
- */
2541
-
2542
- module.exports = Runner;
2543
-
2544
- /**
2545
- * Initialize a `Runner` for the given `suite`.
2546
- *
2547
- * Events:
2548
- *
2549
- * - `start` execution started
2550
- * - `end` execution complete
2551
- * - `suite` (suite) test suite execution started
2552
- * - `suite end` (suite) all tests (and sub-suites) have finished
2553
- * - `test` (test) test execution started
2554
- * - `test end` (test) test completed
2555
- * - `hook` (hook) hook execution started
2556
- * - `hook end` (hook) hook complete
2557
- * - `pass` (test) test passed
2558
- * - `fail` (test, err) test failed
2559
- *
2560
- * @api public
2561
- */
2562
-
2563
- function Runner(suite) {
2564
- var self = this;
2565
- this._globals = [];
2566
- this.suite = suite;
2567
- this.total = suite.total();
2568
- this.failures = 0;
2569
- this.on('test end', function(test){ self.checkGlobals(test); });
2570
- this.on('hook end', function(hook){ self.checkGlobals(hook); });
2571
- this.grep(/.*/);
2572
- this.globals(utils.keys(global).concat(['errno']));
2573
- }
2574
-
2575
- /**
2576
- * Inherit from `EventEmitter.prototype`.
2577
- */
2578
-
2579
- Runner.prototype = new EventEmitter;
2580
- Runner.prototype.constructor = Runner;
2581
-
2582
-
2583
- /**
2584
- * Run tests with full titles matching `re`.
2585
- *
2586
- * @param {RegExp} re
2587
- * @return {Runner} for chaining
2588
- * @api public
2589
- */
2590
-
2591
- Runner.prototype.grep = function(re){
2592
- debug('grep %s', re);
2593
- this._grep = re;
2594
- return this;
2595
- };
2596
-
2597
- /**
2598
- * Allow the given `arr` of globals.
2599
- *
2600
- * @param {Array} arr
2601
- * @return {Runner} for chaining
2602
- * @api public
2603
- */
2604
-
2605
- Runner.prototype.globals = function(arr){
2606
- if (0 == arguments.length) return this._globals;
2607
- debug('globals %j', arr);
2608
- utils.forEach(arr, function(arr){
2609
- this._globals.push(arr);
2610
- }, this);
2611
- return this;
2612
- };
2613
-
2614
- /**
2615
- * Check for global variable leaks.
2616
- *
2617
- * @api private
2618
- */
2619
-
2620
- Runner.prototype.checkGlobals = function(test){
2621
- if (this.ignoreLeaks) return;
2622
-
2623
- var leaks = utils.filter(utils.keys(global), function(key){
2624
- return !~utils.indexOf(this._globals, key) && (!global.navigator || 'onerror' !== key);
2625
- }, this);
2626
-
2627
- this._globals = this._globals.concat(leaks);
2628
-
2629
- if (leaks.length > 1) {
2630
- this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + ''));
2631
- } else if (leaks.length) {
2632
- this.fail(test, new Error('global leak detected: ' + leaks[0]));
2633
- }
2634
- };
2635
-
2636
- /**
2637
- * Fail the given `test`.
2638
- *
2639
- * @param {Test} test
2640
- * @param {Error} err
2641
- * @api private
2642
- */
2643
-
2644
- Runner.prototype.fail = function(test, err){
2645
- ++this.failures;
2646
- test.state = 'failed';
2647
- this.emit('fail', test, err);
2648
- };
2649
-
2650
- /**
2651
- * Fail the given `hook` with `err`.
2652
- *
2653
- * Hook failures (currently) hard-end due
2654
- * to that fact that a failing hook will
2655
- * surely cause subsequent tests to fail,
2656
- * causing jumbled reporting.
2657
- *
2658
- * @param {Hook} hook
2659
- * @param {Error} err
2660
- * @api private
2661
- */
2662
-
2663
- Runner.prototype.failHook = function(hook, err){
2664
- this.fail(hook, err);
2665
- this.emit('end');
2666
- };
2667
-
2668
- /**
2669
- * Run hook `name` callbacks and then invoke `fn()`.
2670
- *
2671
- * @param {String} name
2672
- * @param {Function} function
2673
- * @api private
2674
- */
2675
-
2676
- Runner.prototype.hook = function(name, fn){
2677
- var suite = this.suite
2678
- , hooks = suite['_' + name]
2679
- , ms = suite._timeout
2680
- , self = this
2681
- , timer;
2682
-
2683
- function next(i) {
2684
- var hook = hooks[i];
2685
- if (!hook) return fn();
2686
- self.currentRunnable = hook;
2687
- hook.ctx.test(self.test);
2688
-
2689
- self.emit('hook', hook);
2690
-
2691
- hook.on('error', function(err){
2692
- self.failHook(hook, err);
2693
- });
2694
-
2695
- hook.run(function(err){
2696
- hook.removeAllListeners('error');
2697
- if (err) return self.failHook(hook, err);
2698
- self.emit('hook end', hook);
2699
- next(++i);
2700
- });
2701
- }
2702
-
2703
- process.nextTick(function(){
2704
- next(0);
2705
- });
2706
- };
2707
-
2708
- /**
2709
- * Run hook `name` for the given array of `suites`
2710
- * in order, and callback `fn(err)`.
2711
- *
2712
- * @param {String} name
2713
- * @param {Array} suites
2714
- * @param {Function} fn
2715
- * @api private
2716
- */
2717
-
2718
- Runner.prototype.hooks = function(name, suites, fn){
2719
- var self = this
2720
- , orig = this.suite;
2721
-
2722
- function next(suite) {
2723
- self.suite = suite;
2724
-
2725
- if (!suite) {
2726
- self.suite = orig;
2727
- return fn();
2728
- }
2729
-
2730
- self.hook(name, function(err){
2731
- if (err) {
2732
- self.suite = orig;
2733
- return fn(err);
2734
- }
2735
-
2736
- next(suites.pop());
2737
- });
2738
- }
2739
-
2740
- next(suites.pop());
2741
- };
2742
-
2743
- /**
2744
- * Run hooks from the top level down.
2745
- *
2746
- * @param {String} name
2747
- * @param {Function} fn
2748
- * @api private
2749
- */
2750
-
2751
- Runner.prototype.hookUp = function(name, fn){
2752
- var suites = [this.suite].concat(this.parents()).reverse();
2753
- this.hooks(name, suites, fn);
2754
- };
2755
-
2756
- /**
2757
- * Run hooks from the bottom up.
2758
- *
2759
- * @param {String} name
2760
- * @param {Function} fn
2761
- * @api private
2762
- */
2763
-
2764
- Runner.prototype.hookDown = function(name, fn){
2765
- var suites = [this.suite].concat(this.parents());
2766
- this.hooks(name, suites, fn);
2767
- };
2768
-
2769
- /**
2770
- * Return an array of parent Suites from
2771
- * closest to furthest.
2772
- *
2773
- * @return {Array}
2774
- * @api private
2775
- */
2776
-
2777
- Runner.prototype.parents = function(){
2778
- var suite = this.suite
2779
- , suites = [];
2780
- while (suite = suite.parent) suites.push(suite);
2781
- return suites;
2782
- };
2783
-
2784
- /**
2785
- * Run the current test and callback `fn(err)`.
2786
- *
2787
- * @param {Function} fn
2788
- * @api private
2789
- */
2790
-
2791
- Runner.prototype.runTest = function(fn){
2792
- var test = this.test
2793
- , self = this;
2794
-
2795
- try {
2796
- test.ctx.test(test);
2797
- test.on('error', function(err){
2798
- self.fail(test, err);
2799
- });
2800
- test.run(fn);
2801
- } catch (err) {
2802
- fn(err);
2803
- }
2804
- };
2805
-
2806
- /**
2807
- * Run tests in the given `suite` and invoke
2808
- * the callback `fn()` when complete.
2809
- *
2810
- * @param {Suite} suite
2811
- * @param {Function} fn
2812
- * @api private
2813
- */
2814
-
2815
- Runner.prototype.runTests = function(suite, fn){
2816
- var self = this
2817
- , tests = suite.tests
2818
- , test;
2819
-
2820
- function next(err) {
2821
- // if we bail after first err
2822
- if (self.failures && suite._bail) return fn();
2823
-
2824
- // next test
2825
- test = tests.shift();
2826
-
2827
- // all done
2828
- if (!test) return fn();
2829
-
2830
- // grep
2831
- if (!self._grep.test(test.fullTitle())) return next();
2832
-
2833
- // pending
2834
- if (test.pending) {
2835
- self.emit('pending', test);
2836
- self.emit('test end', test);
2837
- return next();
2838
- }
2839
-
2840
- // execute test and hook(s)
2841
- self.emit('test', self.test = test);
2842
- self.hookDown('beforeEach', function(){
2843
- self.currentRunnable = self.test;
2844
- self.runTest(function(err){
2845
- test = self.test;
2846
-
2847
- if (err) {
2848
- self.fail(test, err);
2849
- self.emit('test end', test);
2850
- return self.hookUp('afterEach', next);
2851
- }
2852
-
2853
- test.state = 'passed';
2854
- self.emit('pass', test);
2855
- self.emit('test end', test);
2856
- self.hookUp('afterEach', next);
2857
- });
2858
- });
2859
- }
2860
-
2861
- this.next = next;
2862
- next();
2863
- };
2864
-
2865
- /**
2866
- * Run the given `suite` and invoke the
2867
- * callback `fn()` when complete.
2868
- *
2869
- * @param {Suite} suite
2870
- * @param {Function} fn
2871
- * @api private
2872
- */
2873
-
2874
- Runner.prototype.runSuite = function(suite, fn){
2875
- var self = this
2876
- , i = 0;
2877
-
2878
- debug('run suite %s', suite.fullTitle());
2879
- this.emit('suite', this.suite = suite);
2880
-
2881
- function next() {
2882
- var curr = suite.suites[i++];
2883
- if (!curr) return done();
2884
- self.runSuite(curr, next);
2885
- }
2886
-
2887
- function done() {
2888
- self.suite = suite;
2889
- self.hook('afterAll', function(){
2890
- self.emit('suite end', suite);
2891
- fn();
2892
- });
2893
- }
2894
-
2895
- this.hook('beforeAll', function(){
2896
- self.runTests(suite, next);
2897
- });
2898
- };
2899
-
2900
- /**
2901
- * Handle uncaught exceptions.
2902
- *
2903
- * @param {Error} err
2904
- * @api private
2905
- */
2906
-
2907
- Runner.prototype.uncaught = function(err){
2908
- debug('uncaught exception');
2909
- var runnable = this.currentRunnable;
2910
- if ('failed' == runnable.state) return;
2911
- runnable.clearTimeout();
2912
- err.uncaught = true;
2913
- this.fail(runnable, err);
2914
-
2915
- // recover from test
2916
- if ('test' == runnable.type) {
2917
- this.emit('test end', runnable);
2918
- this.hookUp('afterEach', this.next);
2919
- return;
2920
- }
2921
-
2922
- // bail on hooks
2923
- this.emit('end');
2924
- };
2925
-
2926
- /**
2927
- * Run the root suite and invoke `fn(failures)`
2928
- * on completion.
2929
- *
2930
- * @param {Function} fn
2931
- * @return {Runner} for chaining
2932
- * @api public
2933
- */
2934
-
2935
- Runner.prototype.run = function(fn){
2936
- var self = this
2937
- , fn = fn || function(){};
2938
-
2939
- debug('start');
2940
-
2941
- // callback
2942
- this.on('end', function(){
2943
- debug('end');
2944
- process.removeListener('uncaughtException', this.uncaught);
2945
- fn(self.failures);
2946
- });
2947
-
2948
- // run suites
2949
- this.emit('start');
2950
- this.runSuite(this.suite, function(){
2951
- debug('finished running');
2952
- self.emit('end');
2953
- });
2954
-
2955
- // uncaught exception
2956
- process.on('uncaughtException', function(err){
2957
- self.uncaught(err);
2958
- });
2959
-
2960
- return this;
2961
- };
2962
-
2963
- }); // module: runner.js
2964
-
2965
- require.register("suite.js", function(module, exports, require){
2966
-
2967
- /**
2968
- * Module dependencies.
2969
- */
2970
-
2971
- var EventEmitter = require('browser/events').EventEmitter
2972
- , debug = require('browser/debug')('suite')
2973
- , utils = require('./utils')
2974
- , Hook = require('./hook');
2975
-
2976
- /**
2977
- * Expose `Suite`.
2978
- */
2979
-
2980
- exports = module.exports = Suite;
2981
-
2982
- /**
2983
- * Create a new `Suite` with the given `title`
2984
- * and parent `Suite`. When a suite with the
2985
- * same title is already present, that suite
2986
- * is returned to provide nicer reporter
2987
- * and more flexible meta-testing.
2988
- *
2989
- * @param {Suite} parent
2990
- * @param {String} title
2991
- * @return {Suite}
2992
- * @api public
2993
- */
2994
-
2995
- exports.create = function(parent, title){
2996
- var suite = new Suite(title, parent.ctx);
2997
- suite.parent = parent;
2998
- title = suite.fullTitle();
2999
- parent.addSuite(suite);
3000
- return suite;
3001
- };
3002
-
3003
- /**
3004
- * Initialize a new `Suite` with the given
3005
- * `title` and `ctx`.
3006
- *
3007
- * @param {String} title
3008
- * @param {Context} ctx
3009
- * @api private
3010
- */
3011
-
3012
- function Suite(title, ctx) {
3013
- this.title = title;
3014
- this.ctx = ctx;
3015
- this.suites = [];
3016
- this.tests = [];
3017
- this._beforeEach = [];
3018
- this._beforeAll = [];
3019
- this._afterEach = [];
3020
- this._afterAll = [];
3021
- this.root = !title;
3022
- this._timeout = 2000;
3023
- this._bail = false;
3024
- }
3025
-
3026
- /**
3027
- * Inherit from `EventEmitter.prototype`.
3028
- */
3029
-
3030
- Suite.prototype = new EventEmitter;
3031
- Suite.prototype.constructor = Suite;
3032
-
3033
-
3034
- /**
3035
- * Return a clone of this `Suite`.
3036
- *
3037
- * @return {Suite}
3038
- * @api private
3039
- */
3040
-
3041
- Suite.prototype.clone = function(){
3042
- var suite = new Suite(this.title);
3043
- debug('clone');
3044
- suite.ctx = this.ctx;
3045
- suite.timeout(this.timeout());
3046
- suite.bail(this.bail());
3047
- return suite;
3048
- };
3049
-
3050
- /**
3051
- * Set timeout `ms` or short-hand such as "2s".
3052
- *
3053
- * @param {Number|String} ms
3054
- * @return {Suite|Number} for chaining
3055
- * @api private
3056
- */
3057
-
3058
- Suite.prototype.timeout = function(ms){
3059
- if (0 == arguments.length) return this._timeout;
3060
- if (String(ms).match(/s$/)) ms = parseFloat(ms) * 1000;
3061
- debug('timeout %d', ms);
3062
- this._timeout = parseInt(ms, 10);
3063
- return this;
3064
- };
3065
-
3066
- /**
3067
- * Sets whether to bail after first error.
3068
- *
3069
- * @parma {Boolean} bail
3070
- * @return {Suite|Number} for chaining
3071
- * @api private
3072
- */
3073
-
3074
- Suite.prototype.bail = function(bail){
3075
- if (0 == arguments.length) return this._bail;
3076
- debug('bail %s', bail);
3077
- this._bail = bail;
3078
- return this;
3079
- };
3080
-
3081
- /**
3082
- * Run `fn(test[, done])` before running tests.
3083
- *
3084
- * @param {Function} fn
3085
- * @return {Suite} for chaining
3086
- * @api private
3087
- */
3088
-
3089
- Suite.prototype.beforeAll = function(fn){
3090
- var hook = new Hook('"before all" hook', fn);
3091
- hook.parent = this;
3092
- hook.timeout(this.timeout());
3093
- hook.ctx = this.ctx;
3094
- this._beforeAll.push(hook);
3095
- this.emit('beforeAll', hook);
3096
- return this;
3097
- };
3098
-
3099
- /**
3100
- * Run `fn(test[, done])` after running tests.
3101
- *
3102
- * @param {Function} fn
3103
- * @return {Suite} for chaining
3104
- * @api private
3105
- */
3106
-
3107
- Suite.prototype.afterAll = function(fn){
3108
- var hook = new Hook('"after all" hook', fn);
3109
- hook.parent = this;
3110
- hook.timeout(this.timeout());
3111
- hook.ctx = this.ctx;
3112
- this._afterAll.push(hook);
3113
- this.emit('afterAll', hook);
3114
- return this;
3115
- };
3116
-
3117
- /**
3118
- * Run `fn(test[, done])` before each test case.
3119
- *
3120
- * @param {Function} fn
3121
- * @return {Suite} for chaining
3122
- * @api private
3123
- */
3124
-
3125
- Suite.prototype.beforeEach = function(fn){
3126
- var hook = new Hook('"before each" hook', fn);
3127
- hook.parent = this;
3128
- hook.timeout(this.timeout());
3129
- hook.ctx = this.ctx;
3130
- this._beforeEach.push(hook);
3131
- this.emit('beforeEach', hook);
3132
- return this;
3133
- };
3134
-
3135
- /**
3136
- * Run `fn(test[, done])` after each test case.
3137
- *
3138
- * @param {Function} fn
3139
- * @return {Suite} for chaining
3140
- * @api private
3141
- */
3142
-
3143
- Suite.prototype.afterEach = function(fn){
3144
- var hook = new Hook('"after each" hook', fn);
3145
- hook.parent = this;
3146
- hook.timeout(this.timeout());
3147
- hook.ctx = this.ctx;
3148
- this._afterEach.push(hook);
3149
- this.emit('afterEach', hook);
3150
- return this;
3151
- };
3152
-
3153
- /**
3154
- * Add a test `suite`.
3155
- *
3156
- * @param {Suite} suite
3157
- * @return {Suite} for chaining
3158
- * @api private
3159
- */
3160
-
3161
- Suite.prototype.addSuite = function(suite){
3162
- suite.parent = this;
3163
- suite.timeout(this.timeout());
3164
- suite.bail(this.bail());
3165
- this.suites.push(suite);
3166
- this.emit('suite', suite);
3167
- return this;
3168
- };
3169
-
3170
- /**
3171
- * Add a `test` to this suite.
3172
- *
3173
- * @param {Test} test
3174
- * @return {Suite} for chaining
3175
- * @api private
3176
- */
3177
-
3178
- Suite.prototype.addTest = function(test){
3179
- test.parent = this;
3180
- test.timeout(this.timeout());
3181
- test.ctx = this.ctx;
3182
- this.tests.push(test);
3183
- this.emit('test', test);
3184
- return this;
3185
- };
3186
-
3187
- /**
3188
- * Return the full title generated by recursively
3189
- * concatenating the parent's full title.
3190
- *
3191
- * @return {String}
3192
- * @api public
3193
- */
3194
-
3195
- Suite.prototype.fullTitle = function(){
3196
- if (this.parent) {
3197
- var full = this.parent.fullTitle();
3198
- if (full) return full + ' ' + this.title;
3199
- }
3200
- return this.title;
3201
- };
3202
-
3203
- /**
3204
- * Return the total number of tests.
3205
- *
3206
- * @return {Number}
3207
- * @api public
3208
- */
3209
-
3210
- Suite.prototype.total = function(){
3211
- return utils.reduce(this.suites, function(sum, suite){
3212
- return sum + suite.total();
3213
- }, 0) + this.tests.length;
3214
- };
3215
-
3216
- }); // module: suite.js
3217
-
3218
- require.register("test.js", function(module, exports, require){
3219
-
3220
- /**
3221
- * Module dependencies.
3222
- */
3223
-
3224
- var Runnable = require('./runnable');
3225
-
3226
- /**
3227
- * Expose `Test`.
3228
- */
3229
-
3230
- module.exports = Test;
3231
-
3232
- /**
3233
- * Initialize a new `Test` with the given `title` and callback `fn`.
3234
- *
3235
- * @param {String} title
3236
- * @param {Function} fn
3237
- * @api private
3238
- */
3239
-
3240
- function Test(title, fn) {
3241
- Runnable.call(this, title, fn);
3242
- this.pending = !fn;
3243
- this.type = 'test';
3244
- }
3245
-
3246
- /**
3247
- * Inherit from `Runnable.prototype`.
3248
- */
3249
-
3250
- Test.prototype = new Runnable;
3251
- Test.prototype.constructor = Test;
3252
-
3253
-
3254
- /**
3255
- * Inspect the context void of private properties.
3256
- *
3257
- * @return {String}
3258
- * @api private
3259
- */
3260
-
3261
- Test.prototype.inspect = function(){
3262
- return JSON.stringify(this, function(key, val){
3263
- return '_' == key[0]
3264
- ? undefined
3265
- : 'parent' == key
3266
- ? '#<Suite>'
3267
- : val;
3268
- }, 2);
3269
- };
3270
- }); // module: test.js
3271
-
3272
- require.register("utils.js", function(module, exports, require){
3273
-
3274
- /**
3275
- * Module dependencies.
3276
- */
3277
-
3278
- var fs = require('browser/fs')
3279
- , path = require('browser/path')
3280
- , join = path.join
3281
- , debug = require('browser/debug')('watch');
3282
-
3283
- /**
3284
- * Ignored directories.
3285
- */
3286
-
3287
- var ignore = ['node_modules', '.git'];
3288
-
3289
- /**
3290
- * Escape special characters in the given string of html.
3291
- *
3292
- * @param {String} html
3293
- * @return {String}
3294
- * @api private
3295
- */
3296
-
3297
- exports.escape = function(html) {
3298
- return String(html)
3299
- .replace(/&/g, '&amp;')
3300
- .replace(/"/g, '&quot;')
3301
- .replace(/</g, '&lt;')
3302
- .replace(/>/g, '&gt;');
3303
- };
3304
-
3305
- /**
3306
- * Array#forEach (<=IE8)
3307
- *
3308
- * @param {Array} array
3309
- * @param {Function} fn
3310
- * @param {Object} scope
3311
- * @api private
3312
- */
3313
-
3314
- exports.forEach = function(arr, fn, scope) {
3315
- for (var i = 0, l = arr.length; i < l; i++)
3316
- fn.call(scope, arr[i], i);
3317
- };
3318
-
3319
- /**
3320
- * Array#indexOf (<=IE8)
3321
- *
3322
- * @parma {Array} arr
3323
- * @param {Object} obj to find index of
3324
- * @param {Number} start
3325
- * @api private
3326
- */
3327
-
3328
- exports.indexOf = function (arr, obj, start) {
3329
- for (var i = start || 0, l = arr.length; i < l; i++) {
3330
- if (arr[i] === obj)
3331
- return i;
3332
- }
3333
- return -1;
3334
- };
3335
-
3336
- /**
3337
- * Array#reduce (<=IE8)
3338
- *
3339
- * @param {Array} array
3340
- * @param {Function} fn
3341
- * @param {Object} initial value
3342
- * @param {Object} scope
3343
- * @api private
3344
- */
3345
-
3346
- exports.reduce = function(arr, fn, val, scope) {
3347
- var rval = val;
3348
-
3349
- for (var i = 0, l = arr.length; i < l; i++) {
3350
- rval = fn.call(scope, rval, arr[i], i, arr);
3351
- }
3352
-
3353
- return rval;
3354
- };
3355
-
3356
- /**
3357
- * Array#filter (<=IE8)
3358
- *
3359
- * @param {Array} array
3360
- * @param {Function} fn
3361
- * @param {Object} scope
3362
- * @api private
3363
- */
3364
-
3365
- exports.filter = function(arr, fn, scope) {
3366
- var ret = [];
3367
-
3368
- for (var i = 0, l = arr.length; i < l; i++) {
3369
- var val = arr[i];
3370
- if (fn.call(scope, val, i, arr))
3371
- ret.push(val);
3372
- }
3373
-
3374
- return ret;
3375
- };
3376
-
3377
- /**
3378
- * Object.keys (<=IE8)
3379
- *
3380
- * @param {Object} obj
3381
- * @return {Array} keys
3382
- * @api private
3383
- */
3384
-
3385
- exports.keys = Object.keys || function(obj) {
3386
- var keys = []
3387
- , has = Object.prototype.hasOwnProperty // for `window` on <=IE8
3388
-
3389
- for (var key in obj) {
3390
- if (has.call(obj, key)) {
3391
- keys.push(key);
3392
- }
3393
- }
3394
-
3395
- return keys;
3396
- };
3397
-
3398
- /**
3399
- * Watch the given `files` for changes
3400
- * and invoke `fn(file)` on modification.
3401
- *
3402
- * @param {Array} files
3403
- * @param {Function} fn
3404
- * @api private
3405
- */
3406
-
3407
- exports.watch = function(files, fn){
3408
- var options = { interval: 100 };
3409
- files.forEach(function(file){
3410
- debug('file %s', file);
3411
- fs.watchFile(file, options, function(curr, prev){
3412
- if (prev.mtime < curr.mtime) fn(file);
3413
- });
3414
- });
3415
- };
3416
-
3417
- /**
3418
- * Ignored files.
3419
- */
3420
-
3421
- function ignored(path){
3422
- return !~ignore.indexOf(path);
3423
- }
3424
-
3425
- /**
3426
- * Lookup files in the given `dir`.
3427
- *
3428
- * @return {Array}
3429
- * @api private
3430
- */
3431
-
3432
- exports.files = function(dir, ret){
3433
- ret = ret || [];
3434
-
3435
- fs.readdirSync(dir)
3436
- .filter(ignored)
3437
- .forEach(function(path){
3438
- path = join(dir, path);
3439
- if (fs.statSync(path).isDirectory()) {
3440
- exports.files(path, ret);
3441
- } else if (path.match(/\.(js|coffee)$/)) {
3442
- ret.push(path);
3443
- }
3444
- });
3445
-
3446
- return ret;
3447
- };
3448
- }); // module: utils.js
3449
-
3450
- /**
3451
- * Node shims.
3452
- *
3453
- * These are meant only to allow
3454
- * mocha.js to run untouched, not
3455
- * to allow running node code in
3456
- * the browser.
3457
- */
3458
-
3459
- process = {};
3460
- process.exit = function(status){};
3461
- process.stdout = {};
3462
- global = window;
3463
-
3464
- /**
3465
- * next tick implementation.
3466
- */
3467
-
3468
- process.nextTick = (function(){
3469
- // postMessage behaves badly on IE8
3470
- if (window.ActiveXObject || !window.postMessage) {
3471
- return function(fn){ fn() };
3472
- }
3473
-
3474
- // based on setZeroTimeout by David Baron
3475
- // - http://dbaron.org/log/20100309-faster-timeouts
3476
- var timeouts = []
3477
- , name = 'mocha-zero-timeout'
3478
-
3479
- return function(fn){
3480
- timeouts.push(fn);
3481
- window.postMessage(name, '*');
3482
- window.addEventListener('message', function(e){
3483
- if (e.source == window && e.data == name) {
3484
- if (e.stopPropagation) e.stopPropagation();
3485
- if (timeouts.length) timeouts.shift()();
3486
- }
3487
- }, true);
3488
- }
3489
- })();
3490
-
3491
- /**
3492
- * Remove uncaughtException listener.
3493
- */
3494
-
3495
- process.removeListener = function(e){
3496
- if ('uncaughtException' == e) {
3497
- window.onerror = null;
3498
- }
3499
- };
3500
-
3501
- /**
3502
- * Implements uncaughtException listener.
3503
- */
3504
-
3505
- process.on = function(e, fn){
3506
- if ('uncaughtException' == e) {
3507
- window.onerror = fn;
3508
- }
3509
- };
3510
-
3511
- /**
3512
- * Expose mocha.
3513
- */
3514
-
3515
- window.mocha = require('mocha');
3516
-
3517
- // boot
3518
- ;(function(){
3519
- var suite = new mocha.Suite('', new mocha.Context)
3520
- , utils = mocha.utils
3521
- , Reporter = mocha.reporters.HTML
3522
-
3523
- $(function(){
3524
- $('code').each(function(){
3525
- $(this).html(highlight($(this).text()));
3526
- });
3527
- });
3528
-
3529
- /**
3530
- * Highlight the given string of `js`.
3531
- */
3532
-
3533
- function highlight(js) {
3534
- return js
3535
- .replace(/</g, '&lt;')
3536
- .replace(/>/g, '&gt;')
3537
- .replace(/\/\/(.*)/gm, '<span class="comment">//$1</span>')
3538
- .replace(/('.*')/gm, '<span class="string">$1</span>')
3539
- .replace(/(\d+\.\d+)/gm, '<span class="number">$1</span>')
3540
- .replace(/(\d+)/gm, '<span class="number">$1</span>')
3541
- .replace(/\bnew *(\w+)/gm, '<span class="keyword">new</span> <span class="init">$1</span>')
3542
- .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '<span class="keyword">$1</span>')
3543
- }
3544
-
3545
- /**
3546
- * Parse the given `qs`.
3547
- */
3548
-
3549
- function parse(qs) {
3550
- return utils.reduce(qs.replace('?', '').split('&'), function(obj, pair){
3551
- var i = pair.indexOf('=')
3552
- , key = pair.slice(0, i)
3553
- , val = pair.slice(++i);
3554
-
3555
- obj[key] = decodeURIComponent(val);
3556
- return obj;
3557
- }, {});
3558
- }
3559
-
3560
- /**
3561
- * Setup mocha with the give `ui` name.
3562
- */
3563
-
3564
- mocha.setup = function(ui){
3565
- ui = mocha.interfaces[ui];
3566
- if (!ui) throw new Error('invalid mocha interface "' + ui + '"');
3567
- ui(suite);
3568
- suite.emit('pre-require', window);
3569
- };
3570
-
3571
- /**
3572
- * Run mocha, returning the Runner.
3573
- */
3574
-
3575
- mocha.run = function(){
3576
- suite.emit('run');
3577
- var runner = new mocha.Runner(suite);
3578
- var reporter = new Reporter(runner);
3579
- var query = parse(window.location.search || "");
3580
- if (query.grep) runner.grep(new RegExp(query.grep));
3581
- runner.on('end', function(){
3582
- $('code').each(function(){
3583
- $(this).html(highlight($(this).text()));
3584
- });
3585
- });
3586
- return runner.run();
3587
- };
3588
- })();
3589
- })();