From cfde5a361c9af52a2c7d3ef1430a194160078d05 Mon Sep 17 00:00:00 2001 From: star Date: Thu, 21 Aug 2014 00:00:19 +0800 Subject: [PATCH 001/143] Update avalon.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复DOMNodeRemoved事件发生时,对于元素的判断 之前的问题是在chrome下,无法判断其它节点的删除 --- avalon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avalon.js b/avalon.js index 699e5d8a3..10d328763 100644 --- a/avalon.js +++ b/avalon.js @@ -3075,7 +3075,7 @@ elem.addEventListener("DOMNodeRemoved", function(e) { if (e.target === this && !this.msRetain && //#441 chrome浏览器对文本域进行Ctrl+V操作,会触发DOMNodeRemoved事件 - (window.chrome ? this.tagName === "INPUT" && e.relatedNode.nodeType === 1 : 1)) { + (window.chrome ? (this.tagName === "INPUT" ? e.relatedNode.nodeType === 1 : 1) : 1)) { offTree() } }) From 3612b11a25cf4d7bdbf281270cacd4277b2e1575 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Mon, 20 Oct 2014 21:52:31 +0800 Subject: [PATCH 002/143] =?UTF-8?q?fix=20$fire=20=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=AD=BB=E5=BE=AA=E7=8E=AF=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- avalon.js | 5 +++-- avalon.modern.js | 8 ++++---- avalon.observe.js | 4 ++-- examples/avalon.$events.js | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/avalon.js b/avalon.js index c07ffaae8..6472a961b 100644 --- a/avalon.js +++ b/avalon.js @@ -1779,11 +1779,11 @@ var all = events.$all || [] var args = aslice.call(arguments, 1) for (var i = 0, callback; callback = callbacks[i++]; ) { - if (isFunction(callback)) + if (isFunction(callback) && !special) callback.apply(this, args) } for (var i = 0, callback; callback = all[i++]; ) { - if (isFunction(callback)) + if (isFunction(callback) && !special) callback.apply(this, arguments) } var element = events.expr && findNode(events.expr) @@ -1819,6 +1819,7 @@ if (special === "up") { alls.reverse() } + console.log(alls) alls.forEach(function(v) { v.$fire.apply(v, detail) }) diff --git a/avalon.modern.js b/avalon.modern.js index abcf6532d..aae4930ba 100644 --- a/avalon.modern.js +++ b/avalon.modern.js @@ -522,7 +522,7 @@ return childVmodel } } - var childVmodel = accessor.child = modelFactory(val, 0, $model[name] ) + var childVmodel = accessor.child = modelFactory(val, 0, $model[name]) childVmodel.$events[subscribers] = $events[name] } else { //第3种对应简单的数据类型,自变量,监控属性 @@ -1290,11 +1290,11 @@ var all = events.$all || [] var args = aslice.call(arguments, 1) for (var i = 0, callback; callback = callbacks[i++]; ) { - if (isFunction(callback)) + if (isFunction(callback) && !special) callback.apply(this, args) } for (var i = 0, callback; callback = all[i++]; ) { - if (isFunction(callback)) + if (isFunction(callback) && !special) callback.apply(this, arguments) } var element = events.expr && findNode(events.expr) @@ -2954,7 +2954,7 @@ pos = typeof pos === "number" ? pos : oldLength var added = [] for (var i = 0, n = arr.length; i < n; i++) { - added[i] = convert(arr[i],this.$model[i]) + added[i] = convert(arr[i], this.$model[i]) } _splice.apply(this, [pos, 0].concat(added)) this._fire("add", pos, added) diff --git a/avalon.observe.js b/avalon.observe.js index ef4396952..d0f506a45 100644 --- a/avalon.observe.js +++ b/avalon.observe.js @@ -1072,11 +1072,11 @@ var all = events.$all || [] var args = aslice.call(arguments, 1) for (var i = 0, callback; callback = callbacks[i++]; ) { - if (isFunction(callback)) + if (isFunction(callback) && !special) callback.apply(this, args) } for (var i = 0, callback; callback = all[i++]; ) { - if (isFunction(callback)) + if (isFunction(callback) && !special) callback.apply(this, arguments) } var element = events.expr && findNode(events.expr) diff --git a/examples/avalon.$events.js b/examples/avalon.$events.js index f36aeceb1..d75c3831d 100644 --- a/examples/avalon.$events.js +++ b/examples/avalon.$events.js @@ -1921,11 +1921,11 @@ var all = events.$all || [] var args = aslice.call(arguments, 1) for (var i = 0, callback; callback = callbacks[i++]; ) { - if (typeof callback === "function") + if (isFunction(callback) && !special) callback.apply(this, args) } for (var i = 0, callback; callback = all[i++]; ) { - if (typeof callback === "function") + if (isFunction(callback) && !special) callback.apply(this, arguments) } var element = events.expr && findNode(events.expr) From c25b66f7972ea8af3d219d60cbaa5a85274f7b18 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Tue, 21 Oct 2014 11:54:44 +0800 Subject: [PATCH 003/143] =?UTF-8?q?fix=20=E7=9B=91=E6=8E=A7=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E8=BD=AC=E6=8D=A2=E5=AD=90=E5=85=83=E7=B4=A0=E7=9A=84?= =?UTF-8?q?BUG=20https://github.com/RubyLouvre/avalon/issues/539?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- avalon.js | 2 +- avalon.min.js | 96 +++++++++++++++++++------------------- avalon.modern.js | 2 +- avalon.modern.min.js | 4 +- avalon.observe.js | 4 +- examples/avalon.$events.js | 2 +- examples/avalon.shim.js | 2 +- 7 files changed, 56 insertions(+), 56 deletions(-) diff --git a/avalon.js b/avalon.js index 6472a961b..51326f60b 100644 --- a/avalon.js +++ b/avalon.js @@ -3663,7 +3663,7 @@ pos = typeof pos === "number" ? pos : oldLength var added = [] for (var i = 0, n = arr.length; i < n; i++) { - added[i] = convert(arr[i], this.$model[i]) + added[i] = convert(arr[i], this.$model[pos+i]) } _splice.apply(this, [pos, 0].concat(added)) this._fire("add", pos, added) diff --git a/avalon.min.js b/avalon.min.js index cbfbfdd8d..b197e8483 100644 --- a/avalon.min.js +++ b/avalon.min.js @@ -1,77 +1,77 @@ (function(p){function A(){}function x(){r.console&&avalon.config.debug&&Function.apply.call(console.log,console,arguments)}function T(b,c){"string"===typeof b&&(b=b.match(D)||[]);for(var d={},e=void 0!==c?c:1,f=0,g=b.length;fb?Math.max(c+b,0):Math.min(b,c)}function Sb(b,c, d){if(U(c)||c&&c.nodeType||-1!==d.indexOf(b)||-1!==ta.indexOf(b))return!1;c=d.$special;return b&&"$"===b.charAt(0)&&!c[b]?!1:!0}function J(b,c,d){if(Array.isArray(b)){var e=b.concat();b.length=0;c=Tb(b);c.pushArray(e);return c}if("number"===typeof b.nodeType||b.$id&&b.$model&&b.$events)return b;Array.isArray(b.$skipArray)||(b.$skipArray=[]);b.$skipArray.$special=c||{};var f={};d=d||{};var g={},h={},k=[];for(e in b)(function(c,e){d[c]=e;if(Sb(c,e,b.$skipArray)){var q,l=avalon.type(e);g[c]=[];if("object"=== -l&&U(e.get)&&2>=Object.keys(e).length){var H=e.set,K=e.get;q=function(b){var e=f.$events,g=d[c];if(arguments.length){if(ka)return;if(U(H)){var h=e[c];e[c]=[];H.call(f,b);e[c]=h}}else avalon.openComputedCollect&&la(e[c]);b=d[c]=K.call(f);if(!ma(g,b)){if(na&&(h=V[f.$id])&&h[c])h[c].$val=b;ua(e[c]);f.$events&&O.$fire.call(f,c,b,g)}return b};k.push(function(){Z[z]={evaluator:q,element:F,type:"computed::"+c,handler:A,args:[]};q();la(g[c]);delete Z[z]})}else va.test(l)?(q=function(b){var e=q.child,h=d[c]; -if(arguments.length)!ka&&!ma(h,b)&&(e=q.child=Ub(f,c,b,l),b=d[c]=e.$model,(e=wa[e.$id])&&e(),f.$events&&O.$fire.call(f,c,b,h));else return la(g[c]),e},(q.child=J(e,0,d[c])).$events[G]=g[c]):q=function(b){var e=d[c];if(arguments.length){if(!ma(e,b)){d[c]=b;if(na){var h=V[f.$id];h&&h[c]&&(h[c].$val=b)}ua(g[c]);f.$events&&O.$fire.call(f,c,b,e)}}else return la(g[c]),e};h[c]=q}})(e,b[e]);ta.forEach(function(c){delete b[c];delete d[c]});var f=oa(f,Vb(h),b),l;for(l in b)h[l]||(f[l]=b[l]);f.$id=Va();f.$model= -d;f.$events=g;for(e in O)c=O[e],v||(c=c.bind(f)),f[e]=c;f.hasOwnProperty=function(b){return b in f.$model};k.forEach(function(b){b()});return f}function Ub(b,c,d,e){var f=b[c];if("array"===e){if(!Array.isArray(d)||f===d)return f;f.clear();f.pushArray(d.concat());return f}var g=b.$events[c];V[f.$id]&&(na--,delete V[f.$id]);var h=J(d);wa[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete wa[h.$id]};return h} -function $(b,c,d){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+c.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+d;return Function("fn,scope",b)}function Xa(b,c){try{for(;c=c.parentNode;)if(c===b)return!0;return!1}catch(d){return!1}}function Ya(){return(new XMLSerializer).serializeToString(this)}function t(b){for(var c in b)if(P.call(b,c)){var d=b[c];if("function"===typeof t.plugins[c])t.plugins[c](d);else"object"===typeof t[c]?avalon.mix(t[c],d):t[c]=d}return this}function Za(b){return b.replace(/([a-z\d])([A-Z]+)/g, +l&&U(e.get)&&2>=Object.keys(e).length){var H=e.set,K=e.get;q=function(b){var e=f.$events,g=d[c];if(arguments.length){if(ka)return;if(U(H)){var h=e[c];e[c]=[];H.call(f,b);e[c]=h}}else avalon.openComputedCollect&&la(e[c]);b=d[c]=K.call(f);if(!ma(g,b)){if(na&&(h=V[f.$id])&&h[c])h[c].$val=b;ua(e[c]);f.$events&&P.$fire.call(f,c,b,g)}return b};k.push(function(){Z[z]={evaluator:q,element:F,type:"computed::"+c,handler:A,args:[]};q();la(g[c]);delete Z[z]})}else va.test(l)?(q=function(b){var e=q.child,h=d[c]; +if(arguments.length)!ka&&!ma(h,b)&&(e=q.child=Ub(f,c,b,l),b=d[c]=e.$model,(e=wa[e.$id])&&e(),f.$events&&P.$fire.call(f,c,b,h));else return la(g[c]),e},(q.child=J(e,0,d[c])).$events[G]=g[c]):q=function(b){var e=d[c];if(arguments.length){if(!ma(e,b)){d[c]=b;if(na){var h=V[f.$id];h&&h[c]&&(h[c].$val=b)}ua(g[c]);f.$events&&P.$fire.call(f,c,b,e)}}else return la(g[c]),e};h[c]=q}})(e,b[e]);ta.forEach(function(c){delete b[c];delete d[c]});var f=oa(f,Vb(h),b),l;for(l in b)h[l]||(f[l]=b[l]);f.$id=Va();f.$model= +d;f.$events=g;for(e in P)c=P[e],v||(c=c.bind(f)),f[e]=c;f.hasOwnProperty=function(b){return b in f.$model};k.forEach(function(b){b()});return f}function Ub(b,c,d,e){var f=b[c];if("array"===e){if(!Array.isArray(d)||f===d)return f;f.clear();f.pushArray(d.concat());return f}var g=b.$events[c];V[f.$id]&&(na--,delete V[f.$id]);var h=J(d);wa[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete wa[h.$id]};return h} +function $(b,c,d){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+c.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+d;return Function("fn,scope",b)}function Xa(b,c){try{for(;c=c.parentNode;)if(c===b)return!0;return!1}catch(d){return!1}}function Ya(){return(new XMLSerializer).serializeToString(this)}function t(b){for(var c in b)if(L.call(b,c)){var d=b[c];if("function"===typeof t.plugins[c])t.plugins[c](d);else"object"===typeof t[c]?avalon.mix(t[c],d):t[c]=d}return this}function Za(b){return b.replace(/([a-z\d])([A-Z]+)/g, "$1-$2").toLowerCase()}function pa(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function $a(b){if(!("classList"in b)){b.classList={node:b};for(var c in ab)b.classList[c.slice(1)]=ab[c]}return b.classList}function bb(b){try{b="true"===b?!0:"false"===b?!1:"null"===b?null:+b+""===b?+b:Wb.test(b)?avalon.parseJSON(b):b}catch(c){}return b}function cb(b,c){if(0>=b.offsetWidth){if(Xb.test(w["@:get"](b,"display"))){var d={node:b},e;for(e in db)d[e]= b.style[e],b.style[e]=db[e];c.push(d)}(d=b.parentNode)&&1===d.nodeType&&cb(d,c)}}function eb(b){var c=b.nodeName;return c.toLowerCase()===c&&b.scopeName&&""===b.outerText}function Yb(b){"url(#default#VML)"!==b.currentStyle.behavior&&(b.style.behavior="url(#default#VML)",b.style.display="inline-block",b.style.zoom=1)}function xa(b){Z[z]=b;avalon.openComputedCollect=!0;var c=b.evaluator;if(c)try{var d=Zb.test(b.type)?b:c.apply(0,b.args);b.handler(d,b.element,b)}catch(e){x("warning:exception throwed in [registerSubscriber] "+ -e),delete b.evaluator,c=b.element,3===c.nodeType&&(d=c.parentNode,t.commentInterpolate?d.replaceChild(p.createComment(b.value),c):c.data=L+b.value+M)}avalon.openComputedCollect=!1;delete Z[z]}function la(b){var c=Z[z];b&&(c&&avalon.Array.ensure(b,c)&&c.element)&&aa.push({data:c,list:b})}function fb(){for(var b=ya,c=ya+$b;b"))&&za(b,c)}}function Ba(b,c){for(var d=0,e;e=b[d++];)e.vmodels=c,C[e.type](e,c),e.evaluator&&(e.element&&1===e.element.nodeType)&&e.element.removeAttribute(e.name);b.length=0}function ob(b,c){0b&&delete c[d.shift()];return c[e]=f}var d=[];return c}function ra(b,c,d){var e=d.type,f=d.filters?d.filters.join(""):"",g=c.map(function(b){return b.$id.replace(kc,"$1")})+b+e+f,h=lc(b).concat(),k=[],l=[],n=[],m="";c=tb(c);for(var q=0,m=c.length;q>0)-(d.clientLeft>>0),c.pageY=b.clientY+(d.scrollTop>>0)-(d.clientTop>>0),c.wheelDeltaY=c.wheelDelta,c.wheelDeltaX=0);c.timeStamp=new Date-0;c.originalEvent=b;c.preventDefault=function(){b.returnValue=!1};c.stopPropagation=function(){b.cancelBubble=!0};return c}function Tb(b){var c= -[];c.$id=Va();c.$model=b;c.$events={};c.$events[G]=[];c._=J({length:b.length});c._.$watch("length",function(b,d){c.$fire("length",b,d)});for(var d in O)c[d]=O[d];avalon.mix(c,wb);return c}function xb(b,c,d,e){var f=avalon.parseHTML(b.template),g=avalon.slice(f.childNodes);c.appendChild(f);d.$outer=b.$outer;b={nodes:g,vmodels:[d].concat(b.vmodels)};e.push(b)}function Fa(b,c){var d=b.element;if("repeat"==b.type)for(var d=d.nextSibling,e=0;et.maxRepeatSize&&fa.pop()}b.length=0}function R(){p.body&&(E?(s["ready!"].state=2,E.checkDeps()):Bb.forEach(function(b){b(avalon)}),R=A)}function Cb(){try{B.doScroll("left"),R()}catch(b){setTimeout(Cb)}}var z=new Date-0,G="$"+z,r=this||(0,eval)("this"),wc=r.require,xc=r.define,ka=!1,D=/[^, ]+/g,Db=/\[native code\]/,va=/^(?:object|array)$/,Eb=/^\[object SVG\w*Element\]$/,Rb=/^\[object (?:Window|DOMWindow|global)\]$/,Ga=Object.prototype,P=Ga.hasOwnProperty,ja=Ga.toString, +(d.$events[e].length=0);fa.unshift(d)>t.maxRepeatSize&&fa.pop()}b.length=0}function R(){p.body&&(E?(s["ready!"].state=2,E.checkDeps()):Bb.forEach(function(b){b(avalon)}),R=A)}function Cb(){try{B.doScroll("left"),R()}catch(b){setTimeout(Cb)}}var z=new Date-0,G="$"+z,r=this||(0,eval)("this"),wc=r.require,xc=r.define,ka=!1,D=/[^, ]+/g,Db=/\[native code\]/,va=/^(?:object|array)$/,Eb=/^\[object SVG\w*Element\]$/,Rb=/^\[object (?:Window|DOMWindow|global)\]$/,Ga=Object.prototype,L=Ga.hasOwnProperty,ja=Ga.toString, I=Array.prototype,ba=I.slice,Z={},v=r.dispatchEvent,B=p.documentElement,F=p.getElementsByTagName("head")[0],W=p.createDocumentFragment(),ga=p.createElement("div"),Fb={};"Boolean Number String Function Array Date RegExp Object Error".replace(D,function(b){Fb["[object "+b+"]"]=b.toLowerCase()});avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.type=function(b){return null==b?String(b):"object"===typeof b|| -"function"===typeof b?Fb[ja.call(b)]||"object":typeof b};var U="object"===typeof alert?function(b){try{return/^\s*\bfunction\b/.test(b+"")}catch(c){return!1}}:function(b){return"[object Function]"==ja.call(b)};avalon.isFunction=U;avalon.isWindow=function(b){return!b?!1:b==b.document&&b.document!=b};Wa(r)&&(avalon.isWindow=Wa);avalon.isPlainObject=function(b,c){if(!b||"object"!==avalon.type(b)||b.nodeType||avalon.isWindow(b))return!1;try{if(b.constructor&&!P.call(b,"constructor")&&!P.call(b.constructor.prototype, -"isPrototypeOf"))return!1}catch(d){return!1}for(c in b);return void 0===c||P.call(b,c)};Db.test(Object.getPrototypeOf)&&(avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Ga});avalon.mix=avalon.fn.mix=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,k=arguments.length,l=!1;"boolean"===typeof g&&(l=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&&(g={});h===k&&(g=this,h--);for(;h 0 Then","\t\t["+b+'] = [__proxy__]([__data__],"'+b+'")',"\tEnd If","\tOn Error Goto 0","\tEnd Property");f.push("End Class");b=f.join("\r\n"); -b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](c,yc)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var zc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(zc,"")}}var Ac=!{toString:null}.propertyIsEnumerable("toString"),Bc=function(){}.propertyIsEnumerable("prototype"),Gb="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), -Cc=Gb.length;Object.keys||(Object.keys=function(b){var c=[],d=Bc&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(d=0;d +b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](c,Ac)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var Bc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(Bc,"")}}var Cc=!{toString:null}.propertyIsEnumerable("toString"),Dc=function(){}.propertyIsEnumerable("prototype"),Gb="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), +Ec=Gb.length;Object.keys||(Object.keys=function(b){var c=[],d=Dc&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(d=0;d arguments.length&&void 0===b)return this;var c=this,d=arguments;return function(){var e=[],f;for(f=1;fe&&(e+=d);ee&&(e=Math.max(0,d+e));0<=e;e--)if(this[e]===b)return e;return-1},forEach:$("","_",""),filter:$("r=[],j=0,", "if(_)r[j++]=this[i]","return r"),map:$("r=[],","r[i]=_","return r"),some:$("","if(_)return true","return false"),every:$("","if(!_)return false","return true")});B.contains||(Node.prototype.contains=function(b){return!!(this.compareDocumentPosition(b)&16)});p.contains||(p.contains=function(b){return Xa(p,b)});if(r.SVGElement){var Hb=p.createElementNS("http://www.w3.org/2000/svg","svg");Hb.innerHTML='';if(!Eb.test(Hb.firstChild)){var Ia=function(b,c){if(b&& b.childNodes)for(var d=b.childNodes,e=0,f;f=d[e++];)if(f.tagName){var g=p.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());I.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});Ia(f,g);c.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:Ya,set:function(b){var c=this.tagName.toLowerCase(),d=this.parentNode;b=avalon.parseHTML(b);"svg"===c?d.insertBefore(b,this):(c=p.createDocumentFragment(),Ia(b,c),d.insertBefore(c, -this));d.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),Ia(b,this))}}})}}!B.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",Ya);var L,M,ca,Ib,sb,Jb=/[-.*+?^${}()|[\]\/\\]/g,S={loader:function(b){r.define=b?E.define: -xc;r.require=b?E:wc},interpolate:function(b){L=b[0];M=b[1];if(L===M)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")t.commentInterpolate=!0;else{b=L+"test"+M;ga.innerHTML=b;if(ga.innerHTML!==b&&0<=ga.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");ga.innerHTML=""}b=(L+"").replace(Jb,"\\$&");var c=(M+"").replace(Jb,"\\$&");ca=RegExp(b+"(.*?)"+c);Ib=RegExp(b+"(.*?)"+c,"g");sb=RegExp(b+".*?"+c+"|\\sms-")}};t.debug=!0;t.plugins=S;t.plugins.interpolate(["{{", +this));d.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),Ia(b,this))}}})}}!B.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",Ya);var M,N,ca,Ib,sb,Jb=/[-.*+?^${}()|[\]\/\\]/g,S={loader:function(b){r.define=b?E.define: +xc;r.require=b?E:wc},interpolate:function(b){M=b[0];N=b[1];if(M===N)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")t.commentInterpolate=!0;else{b=M+"test"+N;ga.innerHTML=b;if(ga.innerHTML!==b&&0<=ga.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");ga.innerHTML=""}b=(M+"").replace(Jb,"\\$&");var c=(N+"").replace(Jb,"\\$&");ca=RegExp(b+"(.*?)"+c);Ib=RegExp(b+"(.*?)"+c,"g");sb=RegExp(b+".*?"+c+"|\\sms-")}};t.debug=!0;t.plugins=S;t.plugins.interpolate(["{{", "}}"]);t.paths={};t.shim={};t.maxRepeatSize=100;avalon.config=t;var ab={_toString:function(){var b=this.node.className;return("string"===typeof b?b:b.baseVal).split(/\s+/).join(" ")},_contains:function(b){return-1<(" "+this+" ").indexOf(" "+b+" ")},_add:function(b){this.contains(b)||this._set(this+" "+b)},_remove:function(b){this._set((" "+this+" ").replace(" "+b+" "," ").trim())},__set:function(b){var c=this.node;"string"===typeof c.className?c.className=b:c.setAttribute("class",b)}};"add,remove".replace(D, function(b){avalon.fn[b+"Class"]=function(c){var d=this[0];c&&("string"===typeof c&&d&&1===d.nodeType)&&c.replace(/\S+/g,function(c){$a(d)[b](c)});return this}});avalon.fn.mix({hasClass:function(b){var c=this[0]||{};return 1===c.nodeType&&$a(c).contains(b)},toggleClass:function(b,c){for(var d,e=0,f=b.split(/\s+/),g="boolean"===typeof c;d=f[e++];)this[(g?c:!this.hasClass(d))?"addClass":"removeClass"](d);return this},attr:function(b,c){return 2===arguments.length?(this[0].setAttribute(b,c),this):this[0].getAttribute(b)}, data:function(b,c){b="data-"+Za(b||"");switch(arguments.length){case 2:return this.attr(b,c),this;case 1:var d=this.attr(b);return bb(d);case 0:var e={};I.forEach.call(this[0].attributes,function(c){c&&(b=c.name,b.indexOf("data-")||(b=pa(b.slice(5)),e[b]=bb(c.value)))});return e}},removeData:function(b){b="data-"+Za(b);this[0].removeAttribute(b);return this},css:function(b,c){if(avalon.isPlainObject(b))for(var d in b)avalon.css(this,d,b[d]);else var e=avalon.css(this,b,c);return void 0!==e?e:this}, position:function(){var b,c,d=this[0],e={top:0,left:0};if(d)return"fixed"===this.css("position")?c=d.getBoundingClientRect():(b=this.offsetParent(),c=this.offset(),"HTML"!==b[0].tagName&&(e=b.offset()),e.top+=avalon.css(b[0],"borderTopWidth",!0),e.left+=avalon.css(b[0],"borderLeftWidth",!0)),{top:c.top-e.top-avalon.css(d,"marginTop",!0),left:c.left-e.left-avalon.css(d,"marginLeft",!0)}},offsetParent:function(){for(var b=this[0].offsetParent||B;b&&"HTML"!==b.tagName&&"static"===avalon.css(b,"position");)b= b.offsetParent;return avalon(b||B)},bind:function(b,c,d){if(this[0])return avalon.bind(this[0],b,c,d)},unbind:function(b,c,d){this[0]&&avalon.unbind(this[0],b,c,d);return this},val:function(b){var c=this[0];if(c&&1===c.nodeType){var d=0===arguments.length,e=d?":get":":set",f=Ja,g;g=c.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(c.type)?"checked":g;if(e=f[g+e])var h=e(c,b);else{if(d)return(c.value||"").replace(/\r/g,"");c.value=b}}return d?h:this}});var Wb=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/, -Dc=/^[\],:{}\s]*$/,Ec=/(?:^|:|,)(?:\s*\[)+/g,Fc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,Gc=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;avalon.parseJSON=r.JSON?JSON.parse:function(b){if("string"===typeof b){if((b=b.trim())&&Dc.test(b.replace(Fc,"@").replace(Gc,"]").replace(Ec,"")))return(new Function("return "+b))();avalon.error("Invalid JSON: "+b)}};avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){avalon.fn[b]=function(d){var e=this[0]||{},f=e.window&& +Fc=/^[\],:{}\s]*$/,Gc=/(?:^|:|,)(?:\s*\[)+/g,Hc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,Ic=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;avalon.parseJSON=r.JSON?JSON.parse:function(b){if("string"===typeof b){if((b=b.trim())&&Fc.test(b.replace(Hc,"@").replace(Ic,"]").replace(Gc,"")))return(new Function("return "+b))();avalon.error("Invalid JSON: "+b)}};avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){avalon.fn[b]=function(d){var e=this[0]||{},f=e.window&& e.document?e:9===e.nodeType?e.defaultView||e.parentWindow:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?d:avalon(f).scrollLeft(),g?d:avalon(f).scrollTop()):e[b]=d;else return f?c in f?f[c]:B[b]:e[b]}});var w=avalon.cssHooks={},Kb=["","-webkit-","-o-","-moz-","-ms-"],Ka={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=T("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,c,d){if(Ka[b])return Ka[b];c=c||B.style; -for(var e=0,f=Kb.length;e=d?"alpha(opacity="+100*d+")":"";c=b.filter||"";b.zoom=1;b.filter=(Lb.test(c)?c.replace(Lb,d):c+" "+d).trim();b.filter||b.removeAttribute("filter")};w["opacity:get"]=function(b){b=b.filters.alpha||b.filters["DXImageTransform.Microsoft.Alpha"];return(b&&b.enabled?b.opacity:100)/100+""}}"top,left".replace(D,function(b){w[b+":get"]=function(c){var d=w["@:get"](c,b);return/px$/.test(d)?d:avalon(c).position()[b]+"px"}});var db={position:"absolute",visibility:"hidden",display:"block"}, Xb=/^(none|table(?!-c[ea]).+)/;"Width,Height".replace(D,function(b){var c=b.toLowerCase(),d="client"+b,e="scroll"+b,f="offset"+b;w[c+":get"]=function(c,d,e){var l=-4;"number"===typeof e&&(l=e);d="Width"===b?["Left","Right"]:["Top","Bottom"];e=c[f];if(2===l)return e+avalon.css(c,"margin"+d[0],!0)+avalon.css(c,"margin"+d[1],!0);0>l&&(e=e-avalon.css(c,"border"+d[0]+"Width",!0)-avalon.css(c,"border"+d[1]+"Width",!0));-4===l&&(e=e-avalon.css(c,"padding"+d[0],!0)-avalon.css(c,"padding"+d[1],!0));return e}; w[c+"&get"]=function(b){var d=[];cb(b,d);for(var e=w[c+":get"](b),f=0,n;n=d[f++];){b=n.node;for(var m in n)"string"===typeof n[m]&&(b.style[m]=n[m])}return e};avalon.fn[c]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[d];if(9===h.nodeType){var k=h.documentElement;return Math.max(h.body[e],k[e],h.body[f],k[f],k[d])}return w[c+"&get"](h)}return this.css(c,g)};avalon.fn["inner"+b]=function(){return w[c+":get"](this[0],void 0,-2)};avalon.fn["outer"+ b]=function(b){return w[c+":get"](this[0],void 0,!0===b?2:0)}});avalon.fn.offset=function(){var b=this[0],c={left:0,top:0};if(!b||!b.tagName||!b.ownerDocument)return c;var d=b.ownerDocument,e=d.body,f=d.documentElement,d=d.defaultView||d.parentWindow;if(!avalon.contains(f,b))return c;b.getBoundingClientRect&&(c=b.getBoundingClientRect());var b=f.clientTop||e.clientTop,g=f.clientLeft||e.clientLeft,h=Math.max(d.pageYOffset||0,f.scrollTop,e.scrollTop),e=Math.max(d.pageXOffset||0,f.scrollLeft,e.scrollLeft); -return{top:c.top+h-b,left:c.left+e-g}};var Kc=/^]+))?)*\s+value[\s=]/i,Ja={"option:get":function(b){return b.hasAttribute?b.hasAttribute("value")?b.value:b.text.trim():Kc.test(b.outerHTML)?b.value:b.text},"select:get":function(b,c){for(var d,e=b.options,f=b.selectedIndex,g=Ja["option:get"],h="select-one"===b.type||0>f,k=h?null:[],l=h?f+1:e.length,n=0>f?l:h?f:0;n]*)\/>/ig,Mb=v?/[^\d\D]/:/(<(?:script|link|style|meta|noscript))/ig,Nc=T("text/javascript","text/ecmascript","application/ecmascript","application/javascript","text/vbscript"),Oc=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,y={area:[1,""],param:[1,""], -col:[2,"","
"],legend:[1,"
"],option:[1,""],thead:[1,"","
"],tr:[2,""],td:[3,"
"],text:[1,'',""],_default:v?[0,""]:[1,"X
"]};y.optgroup=y.option;y.tbody=y.tfoot=y.colgroup=y.caption=y.thead;y.th=y.td;y.circle=y.ellipse=y.line=y.path=y.polygon=y.polyline=y.rect=y.text;var Rc=p.createElement("script");avalon.parseHTML= +function(b){"string"!==typeof b&&(b+="");b=b.replace(Oc,"<$1>").trim();var c=(Nc.exec(b)||["",""])[1].toLowerCase(),d=y[c]||y._default,c=W.cloneNode(!1),e=ga,f;v||(b=b.replace(Mb,"
$1"));e.innerHTML=d[1]+b+(d[2]||"");b=e.getElementsByTagName("script");if(b.length)for(var g=0,h;h=b[g++];)if(!h.type||Pc[h.type])f=Rc.cloneNode(!1),I.forEach.call(h.attributes,function(b){b&&b.specified&&(f[b.name]=b.value)}),f.text=h.text,h.parentNode.replaceChild(f,h);for(g=d[0];g--;e=e.lastChild); +if(!v){b=e.getElementsByTagName("br");for(g=0;h=b[g++];)h.className&&"msNoScope"===h.className&&h.parentNode.removeChild(h);b=e.all;for(g=0;h=b[g++];)eb(h)&&Yb(h)}for(;d=e.firstChild;)c.appendChild(d);return c};avalon.innerHTML=function(b,c){if(!v&&!Mb.test(c)&&!Qc.test(c))try{b.innerHTML=c;return}catch(d){}var e=this.parseHTML(c);this.clearHTML(b).appendChild(e)};avalon.clearHTML=function(b){for(b.textContent="";b.firstChild;)b.removeChild(b.firstChild);return b};var P={$watch:function(b,c){if("function"=== typeof c){var d=this.$events[b];d?d.push(c):this.$events[b]=[c]}else this.$events=this.$watch.backup;return this},$unwatch:function(b,c){var d=arguments.length;if(0===d)this.$watch.backup=this.$events,this.$events={};else if(1===d)this.$events[b]=[];else for(var d=this.$events[b]||[],e=d.length;0>~--e;)if(d[e]===c)return d.splice(e,1);return this},$fire:function(b){var c;/^(\w+)!(\S+)$/.test(b)&&(c=RegExp.$1,b=RegExp.$2);for(var d=this.$events,e=d[b]||[],f=d.$all||[],g=ba.call(arguments,1),h=0,k;k= -e[h++];)U(k)&&k.apply(this,g);for(h=0;k=f[h++];)U(k)&&k.apply(this,arguments);if(d=d.expr&&Nb(d.expr)){var l=[b].concat(g);if("up"===c||"down"===c||"all"===c){for(h in avalon.vmodels)if((g=avalon.vmodels[h])&&(g.$events&&g.$events.expr)&&g!==this)if((e=Nb(g.$events.expr))&&("all"===c||("down"===c?d.contains(e):e.contains(d))))e._avalon=g;var h=p.getElementsByTagName("*"),n=[];Array.prototype.forEach.call(h,function(b){b._avalon&&(n.push(b._avalon),b._avalon="",b.removeAttribute("_avalon"))});"up"=== -c&&n.reverse();n.forEach(function(b){b.$fire.apply(b,l)})}}}},Qc=/(\w+)\[(avalonctrl)="(\S+)"\]/,Nb=p.querySelector?function(b){return p.querySelector(b)}:function(b){b=b.match(Qc);for(var c=p.getElementsByTagName(b[1]),d=0,e;e=c[d++];)if(e.getAttribute(b[2])===b[3])return e},Zb=/^(duplex|on)$/,aa=[],ya=0,$b=200,hb=new Date,gb;avalon.scan=function(b,c){b=b||B;var d=c?[].concat(c):[];jb(b,d)};var dc=T("AREA,BASE,BASEFONT,BR,COL,COMMAND,EMBED,HR,IMG,INPUT,LINK,META,PARAM,SOURCE,TRACK,WBR,NOSCRIPT,SCRIPT,STYLE,TEXTAREA"), -ac=v?15:50,qb=/ms-(\w+)-?(.*)/,rb={"if":10,repeat:90,data:100,widget:110,each:1400,"with":1500,duplex:2E3,on:3E3},cc=T("animationend,blur,change,input,click,dblclick,focus,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,mouseover,mouseup,scan,scroll,submit");if(!"1"[0])var Ma=Ca(512),Rc=/\s+(ms-[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,Sc=/^['"]/,Tc=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/i,Uc=/&/g,pb=function(b){b=b.outerHTML;if("]+))?/g,Uc=/^['"]/,Vc=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/i,Wc=/&/g,pb=function(b){b=b.outerHTML;if(".avalonHide{ display: none!important }"), -F.firstChild);var ad=/(?:[\s\S]+?)<\/noscript>/img,bd=/([\s\S]+?)<\/noscript>/im,Pa=function(){return new (r.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP")},ha=function(b,c,d){if(b=b.getAttribute(c)){c=0;for(var e;e=d[c++];)if(e.hasOwnProperty(b)&&"function"===typeof e[b])return e[b]}},Qa=avalon.templateCache={};avalon.contains=Xa;var Ra={};"autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelectedcontentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected".replace(D, +F.firstChild);var cd=/(?:[\s\S]+?)<\/noscript>/img,dd=/([\s\S]+?)<\/noscript>/im,Pa=function(){return new (r.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP")},ha=function(b,c,d){if(b=b.getAttribute(c)){c=0;for(var e;e=d[c++];)if(e.hasOwnProperty(b)&&"function"===typeof e[b])return e[b]}},Qa=avalon.templateCache={};avalon.contains=Xa;var Ra={};"autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelectedcontentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected".replace(D, function(b){Ra[b.toLowerCase()]=b});var Ea=avalon.bindingExecutors={attr:function(b,c,d){var e=d.type,f=d.param;if("css"===e)avalon(c).css(f,b);else if("attr"===e){if(Ra[f]&&(d=Ra[f],"boolean"===typeof c[d]))return c[d]=!!b;if(!v&&Oa[f])var f=Oa[f],g=!0;if(!1===b||null===b||void 0===b)return c.removeAttribute(f);r.VBArray&&!g&&(eb(c)?g=!0:Eb.test(c)||(g=(g=(c.attributes||{})[f])?!1===g.expando:null===g));g?c[f]=b:c.setAttribute(f,b)}else if("include"===e&&b){var h=d.vmodels,k=ha(c,"data-include-rendered", h),l=ha(c,"data-include-loaded",h),n=function(b){l&&(b=l.apply(c,[b].concat(h)));avalon.innerHTML(c,b);za(c,h);k&&ib(c,function(){k.call(c)})};if("src"===d.param)if(Qa[b])avalon.nextTick(function(){n(Qa[b])});else{var m=Pa();m.onreadystatechange=function(){if(4===m.readyState){var c=m.status;if(200<=c&&300>c||304===c||1223===c)n(Qa[b]=m.responseText)}};m.open("GET",b,!0);"withCredentials"in m&&(m.withCredentials=!0);m.setRequestHeader("X-Requested-With","XMLHttpRequest");m.send(null)}else{var q=b&& -1===b.nodeType?b:p.getElementById(b);if(q){if("NOSCRIPT"===q.tagName&&!q.innerHTML&&!q.fixIE78){m=Pa();m.open("GET",location,!1);m.send(null);f=p.getElementsByTagName("noscript");g=(m.responseText||"").match(ad)||[];d=g.length;for(e=0;ec||37<=c&&40>=c)||("cut"===b.type?avalon.nextTick(h):h())};H.forEach(function(c){b.attachEvent("on"+c,K)});d.rollback=function(){H.forEach(function(c){b.detachEvent("on"+c,K)})}}b.oldValue=b.value;Pb(function(){if(avalon.contains(B,b))oc.call(b);else if(!b.msRetain)return!1});xa(d);var N=setTimeout(function(){m||e.call(b,b.value);clearTimeout(N)},31)};var vb,ea=[],Pb=A;avalon.tick=function(b){1===ea.push(b)&&(vb=setInterval(pc, -60))};try{var Sa=HTMLInputElement.prototype;Object.getOwnPropertyNames(Sa);var rc=Object.getOwnPropertyDescriptor(Sa,"value").set;Object.defineProperty(Sa,"value",{set:qc})}catch(kd){Pb=avalon.tick}Y.SELECT=function(b,c,d){var e=avalon(b);d.handler=function(){var d=c(),d=d&&d.$model||d;Array.isArray(d)?b.multiple||x("ms-duplex\u5728\u4e0d\u80fd\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"); +"paste","cut","change"],K=function(b){var c=b.keyCode;91===c||(15c||37<=c&&40>=c)||("cut"===b.type?avalon.nextTick(h):h())};H.forEach(function(c){b.attachEvent("on"+c,K)});d.rollback=function(){H.forEach(function(c){b.detachEvent("on"+c,K)})}}b.oldValue=b.value;Pb(function(){if(avalon.contains(B,b))oc.call(b);else if(!b.msRetain)return!1});xa(d);var O=setTimeout(function(){m||e.call(b,b.value);clearTimeout(O)},31)};var vb,ea=[],Pb=A;avalon.tick=function(b){1===ea.push(b)&&(vb=setInterval(pc, +60))};try{var Sa=HTMLInputElement.prototype;Object.getOwnPropertyNames(Sa);var rc=Object.getOwnPropertyDescriptor(Sa,"value").set;Object.defineProperty(Sa,"value",{set:qc})}catch(md){Pb=avalon.tick}Y.SELECT=function(b,c,d){var e=avalon(b);d.handler=function(){var d=c(),d=d&&d.$model||d;Array.isArray(d)?b.multiple||x("ms-duplex\u5728\u4e0d\u80fd\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"); d=Array.isArray(d)?d.map(String):d+"";d+""!==b.oldValue&&(e.val(d),b.oldValue=d+"")};d.bound("change",function(){if(!1!==e.data("duplex-observe")){var f=e.val(),f=Array.isArray(f)?f.map(function(b){return X(d,b)}):X(d,f);f+""!==b.oldValue&&c(f);d.changed.call(b,f)}});var f=NaN,g=setInterval(function(){var e=b.innerHTML;e===f?(clearInterval(g),xa(d),d.changed.call(b,c())):f=e},20)};Y.TEXTAREA=Y.INPUT;var ia=avalon.eventHooks;"onmouseenter"in B||avalon.each({mouseenter:"mouseover",mouseleave:"mouseout"}, function(b,c){ia[b]={type:c,deel:function(c,e){return function(f){var g=f.relatedTarget;if(!g||g!==c&&!(c.compareDocumentPosition(g)&16))return delete f.type,f.type=b,e.call(c,f)}}}});avalon.each({AnimationEvent:"animationend",WebKitAnimationEvent:"webkitAnimationEnd"},function(b,c){r[b]&&!ia.animationend&&(ia.animationend={type:c})});"oninput"in p.createElement("input")||(ia.input={type:"propertychange",deel:function(b,c){return function(d){if("value"===d.propertyName)return d.type="input",c.call(b, -d)}}});if(void 0===p.onmousewheel){var Qb=void 0!==p.onwheel?"wheel":"DOMMouseScroll",cd="wheel"===Qb?"deltaY":"detail";ia.mousewheel={type:Qb,deel:function(b,c){return function(d){d.wheelDeltaY=d.wheelDelta=0]*>([\S\s]*?)<\/script\s*>/gim,ed=/\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,fd=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/ig,gd={a:/\b(href)\=("javascript[^"]*"|'javascript[^']*')/ig,img:/\b(src)\=("javascript[^"]*"|'javascript[^']*')/ig, -form:/\b(action)\=("javascript[^"]*"|'javascript[^']*')/ig},hd=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,id=/([^\#-~| |!])/g,Ua=avalon.filters={uppercase:function(b){return b.toUpperCase()},lowercase:function(b){return b.toLowerCase()},truncate:function(b,c,d){c=c||30;d=void 0===d?"...":d;return b.length>c?b.slice(0,c-d.length)+d:String(b)},camelize:pa,sanitize:function(b){return b.replace(dd,"").replace(fd,function(b,d){var e=b.toLowerCase().match(/<(\w+)\s/);e&&(e=gd[e[1]])&&(b=b.replace(e,function(b,c, -d){b=d.charAt(0);return c+"="+b+"javascript:void(0)"+b}));return b.replace(ed," ").replace(/\s+/g," ")})},escape:function(b){return String(b).replace(/&/g,"&").replace(hd,function(b){var d=b.charCodeAt(0);b=b.charCodeAt(1);return"&#"+(1024*(d-55296)+(b-56320)+65536)+";"}).replace(id,function(b){return"&#"+b.charCodeAt(0)+";"}).replace(//g,">")},currency:function(b,c){return(c||"\uffe5")+avalon.filters.number(b)},number:function(b,c,d,e){b=(b+"").replace(/[^0-9+\-Ee.]/g, +e=!1;I[b].apply(c,arguments);for(var f=0,g=d.length;f]*>([\S\s]*?)<\/script\s*>/gim,gd=/\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,hd=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/ig,id={a:/\b(href)\=("javascript[^"]*"|'javascript[^']*')/ig,img:/\b(src)\=("javascript[^"]*"|'javascript[^']*')/ig, +form:/\b(action)\=("javascript[^"]*"|'javascript[^']*')/ig},jd=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,kd=/([^\#-~| |!])/g,Ua=avalon.filters={uppercase:function(b){return b.toUpperCase()},lowercase:function(b){return b.toLowerCase()},truncate:function(b,c,d){c=c||30;d=void 0===d?"...":d;return b.length>c?b.slice(0,c-d.length)+d:String(b)},camelize:pa,sanitize:function(b){return b.replace(fd,"").replace(hd,function(b,d){var e=b.toLowerCase().match(/<(\w+)\s/);e&&(e=id[e[1]])&&(b=b.replace(e,function(b,c, +d){b=d.charAt(0);return c+"="+b+"javascript:void(0)"+b}));return b.replace(gd," ").replace(/\s+/g," ")})},escape:function(b){return String(b).replace(/&/g,"&").replace(jd,function(b){var d=b.charCodeAt(0);b=b.charCodeAt(1);return"&#"+(1024*(d-55296)+(b-56320)+65536)+";"}).replace(kd,function(b){return"&#"+b.charCodeAt(0)+";"}).replace(//g,">")},currency:function(b,c){return(c||"\uffe5")+avalon.filters.number(b)},number:function(b,c,d,e){b=(b+"").replace(/[^0-9+\-Ee.]/g, "");b=!isFinite(+b)?0:+b;c=!isFinite(+c)?0:Math.abs(c);e=e||",";d=d||".";var f="",f=function(b,c){var d=Math.pow(10,c);return""+Math.round(b*d)/d},f=(c?f(b,c):""+Math.round(b)).split(".");3b&&(e="-",b=-b);for(b=""+b;b.length-e)g+=e;0===g&&-12===e&&(g=12);return b(g,d,f)}}function d(b,c){return function(d,e){var f=d["get"+b](),g=(c?"SHORT"+b:b).toUpperCase();return e[g][f]}}function e(b){var c;if(c=b.match(k)){b=new Date(0);var d=0,e=0,f=c[8]?b.setUTCFullYear:b.setFullYear,g=c[8]?b.setUTCHours:b.setHours;c[9]&&(d=parseInt(c[9]+c[10],10),e=parseInt(c[9]+c[11],10));f.call(b,parseInt(c[1],10),parseInt(c[2],10)-1,parseInt(c[3],10));d=parseInt(c[4]||0,10)-d;e=parseInt(c[5]||0,10)-e;f=parseInt(c[6]|| 0,10);c=Math.round(1E3*parseFloat("0."+(c[7]||0)));g.call(b,d,e,f,c)}return b}var f={yyyy:c("FullYear",4),yy:c("FullYear",2,0,!0),y:c("FullYear",1),MMMM:d("Month"),MMM:d("Month",!0),MM:c("Month",2,1),M:c("Month",1,1),dd:c("Date",2),d:c("Date",1),HH:c("Hours",2),H:c("Hours",1),hh:c("Hours",2,-12),h:c("Hours",1,-12),mm:c("Minutes",2),m:c("Minutes",1),ss:c("Seconds",2),s:c("Seconds",1),sss:c("Milliseconds",3),EEEE:d("Day"),EEE:d("Day",!0),a:function(b,c){return 12>b.getHours()?c.AMPMS[0]:c.AMPMS[1]}, -Z:function(c){c=-1*c.getTimezoneOffset();return c=(0<=c?"+":"")+(b(Math[0","
"],tr:[2,""],td:[3,"
"],text:[1,'',""],_default:[0,""]};t.optgroup=t.option;t.tbody=t.tfoot=t.colgroup=t.caption=t.thead;t.th=t.td;t.circle=t.ellipse=t.line=t.path=t.polygon=t.polyline=t.rect=t.text;var $b=q.createElement("script");avalon.parseHTML=function(b){"string"!==typeof b&&(b+="");b=b.replace(sb,"<$1>").trim();var c=(rb.exec(b)||["",""])[1].toLowerCase(),d=t[c]||t._default,c= U.cloneNode(!1),e=fa,f;e.innerHTML=d[1]+b+(d[2]||"");b=e.getElementsByTagName("script");if(b.length)for(var g=0,h;h=b[g++];)if(!h.type||Zb[h.type])f=$b.cloneNode(!1),L.forEach.call(h.attributes,function(b){b&&b.specified&&(f[b.name]=b.value)}),f.text=h.text,h.parentNode.replaceChild(f,h);for(g=d[0];g--;e=e.lastChild);for(;d=e.firstChild;)c.appendChild(d);return c};avalon.innerHTML=function(b,c){if(!/ + + + + + +

修正ms-with下面存在ms-repeat时出错的BUG

+

https://github.com/RubyLouvre/avalon/issues/545

+
+ + +
{{$key}}
+
{{el.text}} : {{el.value}}
+
+
+ + + \ No newline at end of file diff --git a/examples/repeat18.html b/examples/repeat18.html new file mode 100644 index 000000000..ff1966b20 --- /dev/null +++ b/examples/repeat18.html @@ -0,0 +1,31 @@ + + + + 取得光标的位置 + + + + + + + + +

确保新添加的元素都在ms-repeat-end注释节点之前

+
    +
  • {{el}}
  • +
+ + + + diff --git a/examples/repeat2.html b/examples/repeat2.html index 7d0dd7b66..05433d911 100644 --- a/examples/repeat2.html +++ b/examples/repeat2.html @@ -4,7 +4,7 @@ ms-repeat - + + + + + +
测试avalonHide
能动态添加移除
{{data.toggle}}

From 6d735b3af6e308eae96580c68f31c4b1c1753d1e Mon Sep 17 00:00:00 2001 From: qincheng Date: Fri, 24 Oct 2014 00:57:05 +0800 Subject: [PATCH 022/143] fix removeSubscribers BUG --- avalon.js | 4 +- avalon.min.js | 186 ++++++++++++++++++------------------- avalon.modern.js | 4 +- avalon.modern.min.js | 160 +++++++++++++++---------------- avalon.observe.js | 4 +- examples/avalon.$events.js | 4 +- 6 files changed, 181 insertions(+), 181 deletions(-) diff --git a/avalon.js b/avalon.js index cee14ac27..cf0aa43f6 100644 --- a/avalon.js +++ b/avalon.js @@ -1913,8 +1913,8 @@ delete $$subscribers[obj] avalon.Array.remove(obj.list, data) //log("debug: remove " + data.type) - if (data.type === "if" && data.template && data.template.parentNode === head) { - head.removeChild(data.template) + if (data.type === "if" && data.template && data.template.parentNode === ifGroup) { + ifGroup.removeChild(data.template) } for (var key in data) { data[key] = null diff --git a/avalon.min.js b/avalon.min.js index 89b9bee7c..02a3d0d4c 100644 --- a/avalon.min.js +++ b/avalon.min.js @@ -1,122 +1,122 @@ -(function(p){function z(){}function w(){r.console&&avalon.config.debug&&Function.apply.call(console.log,console,arguments)}function U(b,c){"string"===typeof b&&(b=b.match(B)||[]);for(var d={},e=void 0!==c?c:1,f=0,g=b.length;fb?Math.max(c+b,0):Math.min(b,c)}function Ub(b,c, -d){if(V(c)||c&&c.nodeType||-1!==d.indexOf(b)||-1!==ua.indexOf(b))return!1;c=d.$special;return b&&"$"===b.charAt(0)&&!c[b]?!1:!0}function L(b,c,d){if(Array.isArray(b)){var e=b.concat();b.length=0;c=Vb(b);c.pushArray(e);return c}if("number"===typeof b.nodeType||b.$id&&b.$model&&b.$events)return b;Array.isArray(b.$skipArray)||(b.$skipArray=[]);b.$skipArray.$special=c||{};var f={};d=d||{};var g={},h={},k=[];for(e in b)(function(c,e){d[c]=e;if(Ub(c,e,b.$skipArray)){var l,u=avalon.type(e);g[c]=[];if("object"=== -u&&V(e.get)&&2>=Object.keys(e).length){var J=e.set,E=e.get;l=function(b){var e=f.$events,g=d[c];if(arguments.length){if(la)return;if(V(J)){var h=e[c];e[c]=[];J.call(f,b);e[c]=h}}else avalon.openComputedCollect&&ma(e[c]);b=d[c]=E.call(f);if(!na(g,b)){if(oa&&(h=W[f.$id])&&h[c])h[c].$val=b;va(e[c]);f.$events&&P.$fire.call(f,c,b,g)}return b};k.push(function(){$[y]={evaluator:l,element:G,type:"computed::"+c,handler:z,args:[]};l();ma(g[c]);delete $[y]})}else wa.test(u)?(l=function(b){var e=l.child,h=d[c]; -if(arguments.length)!la&&!na(h,b)&&(e=l.child=Wb(f,c,b,u),b=d[c]=e.$model,(e=xa[e.$id])&&e(),f.$events&&P.$fire.call(f,c,b,h));else return ma(g[c]),e},(l.child=L(e,0,d[c])).$events[H]=g[c]):l=function(b){var e=d[c];if(arguments.length){if(!na(e,b)){d[c]=b;if(oa){var h=W[f.$id];h&&h[c]&&(h[c].$val=b)}va(g[c]);f.$events&&P.$fire.call(f,c,b,e)}}else return ma(g[c]),e};h[c]=l}})(e,b[e]);ua.forEach(function(c){delete b[c];delete d[c]});var f=pa(f,Xb(h),b),l;for(l in b)h[l]||(f[l]=b[l]);f.$id=ja();f.$model= -d;f.$events=g;for(e in P)c=P[e],v||(c=c.bind(f)),f[e]=c;f.hasOwnProperty=function(b){return b in f.$model};k.forEach(function(b){b()});return f}function Wb(b,c,d,e){var f=b[c];if("array"===e){if(!Array.isArray(d)||f===d)return f;f.clear();f.pushArray(d.concat());return f}var g=b.$events[c];W[f.$id]&&(oa--,delete W[f.$id]);var h=L(d);h.$events[H]=g;xa[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete xa[h.$id]}; -return h}function aa(b,c,d){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+c.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+d;return Function("fn,scope",b)}function Xa(b,c){try{for(;c=c.parentNode;)if(c===b)return!0;return!1}catch(d){return!1}}function Ya(){return(new XMLSerializer).serializeToString(this)}function t(b){for(var c in b)if(M.call(b,c)){var d=b[c];if("function"===typeof t.plugins[c])t.plugins[c](d);else"object"===typeof t[c]?avalon.mix(t[c],d):t[c]=d}return this} -function Za(b){return b.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function qa(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function $a(b){if(!("classList"in b)){b.classList={node:b};for(var c in ab)b.classList[c.slice(1)]=ab[c]}return b.classList}function bb(b){try{b="true"===b?!0:"false"===b?!1:"null"===b?null:+b+""===b?+b:Yb.test(b)?avalon.parseJSON(b):b}catch(c){}return b}function cb(b,c){if(0>=b.offsetWidth){if(Zb.test(x["@:get"](b, -"display"))){var d={node:b},e;for(e in db)d[e]=b.style[e],b.style[e]=db[e];c.push(d)}(d=b.parentNode)&&1===d.nodeType&&cb(d,c)}}function eb(b){var c=b.nodeName;return c.toLowerCase()===c&&b.scopeName&&""===b.outerText}function $b(b){"url(#default#VML)"!==b.currentStyle.behavior&&(b.style.behavior="url(#default#VML)",b.style.display="inline-block",b.style.zoom=1)}function ya(b){$[y]=b;avalon.openComputedCollect=!0;var c=b.evaluator;if(c)try{var d=ac.test(b.type)?b:c.apply(0,b.args);b.handler(d,b.element, -b)}catch(e){w("warning:exception throwed in [registerSubscriber] "+e),delete b.evaluator,c=b.element,3===c.nodeType&&(d=c.parentNode,t.commentInterpolate?d.replaceChild(p.createComment(b.value),c):c.data=N+b.value+O)}avalon.openComputedCollect=!1;delete $[y]}function ma(b){var c=$[y];b&&(c&&avalon.Array.ensure(b,c)&&c.element)&&fb(c,b)}function fb(b,c){b.$uuid=b.$uuid||ja();c.$uuid=c.$uuid||ja();var d={data:b,list:c,toString:function(){return b.$uuid+" "+c.$uuid}};Q[d]||(Q[d]=1,Q.push(d))}function gb(){for(var b= -za,c=za+bc;b"))&&Aa(b,c)}}function Ca(b,c){for(var d=0,e;e=b[d++];)e.vmodels=c,C[e.type](e,c),e.evaluator&&(e.element&&1===e.element.nodeType)&&e.element.removeAttribute(e.name);b.length=0}function pb(b,c){0b&&delete c[d.shift()];return c[e]=f}var d=[];return c}function sa(b,c,d){var e=d.type,f=d.filters?d.filters.join(""):"",g=c.map(function(b){return b.$id.replace(mc,"$1")})+b+e+f,h=nc(b).concat(),k=[],l=[],m=[],n="";c=ub(c);for(var q=0,n=c.length;qb?Math.max(c+b,0):Math.min(b,c)}function Ub(b,c, +d){if(V(c)||c&&c.nodeType||-1!==d.indexOf(b)||-1!==va.indexOf(b))return!1;c=d.$special;return b&&"$"===b.charAt(0)&&!c[b]?!1:!0}function L(b,c,d){if(Array.isArray(b)){var e=b.concat();b.length=0;c=Vb(b);c.pushArray(e);return c}if("number"===typeof b.nodeType||b.$id&&b.$model&&b.$events)return b;Array.isArray(b.$skipArray)||(b.$skipArray=[]);b.$skipArray.$special=c||{};var f={};d=d||{};var g={},h={},k=[];for(e in b)(function(c,e){d[c]=e;if(Ub(c,e,b.$skipArray)){var l,u=avalon.type(e);g[c]=[];if("object"=== +u&&V(e.get)&&2>=Object.keys(e).length){var I=e.set,E=e.get;l=function(b){var e=f.$events,g=d[c];if(arguments.length){if(la)return;if(V(I)){var h=e[c];e[c]=[];I.call(f,b);e[c]=h}}else avalon.openComputedCollect&&ma(e[c]);b=d[c]=E.call(f);if(!na(g,b)){if(oa&&(h=W[f.$id])&&h[c])h[c].$val=b;wa(e[c]);f.$events&&P.$fire.call(f,c,b,g)}return b};k.push(function(){$[y]={evaluator:l,element:J,type:"computed::"+c,handler:z,args:[]};l();ma(g[c]);delete $[y]})}else xa.test(u)?(l=function(b){var e=l.child,h=d[c]; +if(arguments.length)!la&&!na(h,b)&&(e=l.child=Wb(f,c,b,u),b=d[c]=e.$model,(e=ya[e.$id])&&e(),f.$events&&P.$fire.call(f,c,b,h));else return ma(g[c]),e},(l.child=L(e,0,d[c])).$events[G]=g[c]):l=function(b){var e=d[c];if(arguments.length){if(!na(e,b)){d[c]=b;if(oa){var h=W[f.$id];h&&h[c]&&(h[c].$val=b)}wa(g[c]);f.$events&&P.$fire.call(f,c,b,e)}}else return ma(g[c]),e};h[c]=l}})(e,b[e]);va.forEach(function(c){delete b[c];delete d[c]});var f=pa(f,Xb(h),b),l;for(l in b)h[l]||(f[l]=b[l]);f.$id=ja();f.$model= +d;f.$events=g;for(e in P)c=P[e],v||(c=c.bind(f)),f[e]=c;f.hasOwnProperty=function(b){return b in f.$model};k.forEach(function(b){b()});return f}function Wb(b,c,d,e){var f=b[c];if("array"===e){if(!Array.isArray(d)||f===d)return f;f.clear();f.pushArray(d.concat());return f}var g=b.$events[c];W[f.$id]&&(oa--,delete W[f.$id]);var h=L(d);h.$events[G]=g;ya[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete ya[h.$id]}; +return h}function aa(b,c,d){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+c.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+d;return Function("fn,scope",b)}function Ya(b,c){try{for(;c=c.parentNode;)if(c===b)return!0;return!1}catch(d){return!1}}function Za(){return(new XMLSerializer).serializeToString(this)}function t(b){for(var c in b)if(M.call(b,c)){var d=b[c];if("function"===typeof t.plugins[c])t.plugins[c](d);else"object"===typeof t[c]?avalon.mix(t[c],d):t[c]=d}return this} +function $a(b){return b.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function qa(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function ab(b){if(!("classList"in b)){b.classList={node:b};for(var c in bb)b.classList[c.slice(1)]=bb[c]}return b.classList}function cb(b){try{b="true"===b?!0:"false"===b?!1:"null"===b?null:+b+""===b?+b:Yb.test(b)?avalon.parseJSON(b):b}catch(c){}return b}function db(b,c){if(0>=b.offsetWidth){if(Zb.test(x["@:get"](b, +"display"))){var d={node:b},e;for(e in eb)d[e]=b.style[e],b.style[e]=eb[e];c.push(d)}(d=b.parentNode)&&1===d.nodeType&&db(d,c)}}function fb(b){var c=b.nodeName;return c.toLowerCase()===c&&b.scopeName&&""===b.outerText}function $b(b){"url(#default#VML)"!==b.currentStyle.behavior&&(b.style.behavior="url(#default#VML)",b.style.display="inline-block",b.style.zoom=1)}function za(b){$[y]=b;avalon.openComputedCollect=!0;var c=b.evaluator;if(c)try{var d=ac.test(b.type)?b:c.apply(0,b.args);b.handler(d,b.element, +b)}catch(e){w("warning:exception throwed in [registerSubscriber] "+e),delete b.evaluator,c=b.element,3===c.nodeType&&(d=c.parentNode,t.commentInterpolate?d.replaceChild(p.createComment(b.value),c):c.data=N+b.value+O)}avalon.openComputedCollect=!1;delete $[y]}function ma(b){var c=$[y];b&&(c&&avalon.Array.ensure(b,c)&&c.element)&&gb(c,b)}function gb(b,c){b.$uuid=b.$uuid||ja();c.$uuid=c.$uuid||ja();var d={data:b,list:c,toString:function(){return b.$uuid+" "+c.$uuid}};Q[d]||(Q[d]=1,Q.push(d))}function hb(){for(var b= +Aa,c=Aa+bc;b"))&&Ba(b,c)}}function Da(b,c){for(var d=0,e;e=b[d++];)e.vmodels=c,C[e.type](e,c),e.evaluator&&(e.element&&1===e.element.nodeType)&&e.element.removeAttribute(e.name);b.length=0}function qb(b,c){0b&&delete c[d.shift()];return c[e]=f}var d=[];return c}function ta(b,c,d){var e=d.type,f=d.filters?d.filters.join(""):"",g=c.map(function(b){return b.$id.replace(mc,"$1")})+b+e+f,h=nc(b).concat(),k=[],l=[],m=[],n="";c=vb(c);for(var q=0,n=c.length;q>0)-(d.clientLeft>>0),c.pageY=b.clientY+(d.scrollTop>>0)-(d.clientTop>>0),c.wheelDeltaY=c.wheelDelta,c.wheelDeltaX=0);c.timeStamp=new Date-0;c.originalEvent=b;c.preventDefault=function(){b.returnValue=!1};c.stopPropagation=function(){b.cancelBubble=!0};return c}function Vb(b){var c=[];c.$id=ja();c.$model=b;c.$events={};c.$events[H]=[];c._=L({length:b.length}); -c._.$watch("length",function(b,d){c.$fire("length",b,d)});for(var d in P)c[d]=P[d];avalon.mix(c,xb);return c}function yb(b,c,d,e){var f=avalon.parseHTML(b.template),g=avalon.slice(f.childNodes);c.appendChild(f);d.$outer=b.$outer;b={nodes:g,vmodels:[d].concat(b.vmodels)};e.push(b)}function Ga(b,c){var d=b.endRepeat,e=[],f=b.element.nextSibling;if(f!==d){do if(f!==d)e.push(f);else break;while(f=f.nextSibling)}return e[b.group*c]||d}function zb(b,c,d){c*=d||1;d=[b];for(var e=1,f=I;et.maxRepeatSize&&fa.pop()}b.length=0}function S(){p.body&&(D?(s["ready!"].state=2,D.checkDeps()): -Cb.forEach(function(b){b(avalon)}),S=z)}function Db(){try{A.doScroll("left"),S()}catch(b){setTimeout(Db)}}var y=new Date-0,H="$"+y,r=this||(0,eval)("this"),yc=r.require,zc=r.define,la=!1,B=/[^, ]+/g,Eb=/\[native code\]/,wa=/^(?:object|array)$/,Fb=/^\[object SVG\w*Element\]$/,Tb=/^\[object (?:Window|DOMWindow|global)\]$/,Ha=Object.prototype,M=Ha.hasOwnProperty,ka=Ha.toString,K=Array.prototype,ba=K.slice,$={},v=r.dispatchEvent,A=p.documentElement,G=p.getElementsByTagName("head")[0],I=p.createDocumentFragment(), -ga=p.createElement("div"),Gb={};"Boolean Number String Function Array Date RegExp Object Error".replace(B,function(b){Gb["[object "+b+"]"]=b.toLowerCase()});avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.type=function(b){return null==b?String(b):"object"===typeof b||"function"===typeof b?Gb[ka.call(b)]||"object":typeof b};var V="object"===typeof alert?function(b){try{return/^\s*\bfunction\b/.test(b+ -"")}catch(c){return!1}}:function(b){return"[object Function]"==ka.call(b)};avalon.isFunction=V;avalon.isWindow=function(b){return!b?!1:b==b.document&&b.document!=b};Wa(r)&&(avalon.isWindow=Wa);for(var Ac in avalon({}))break;var Bc="0"!==Ac;avalon.isPlainObject=function(b,c){if(!b||"object"!==avalon.type(b)||b.nodeType||avalon.isWindow(b))return!1;try{if(b.constructor&&!M.call(b,"constructor")&&!M.call(b.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}if(Bc)for(c in b)return M.call(b, -c);for(c in b);return void 0===c||M.call(b,c)};Eb.test(Object.getPrototypeOf)&&(avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Ha});avalon.mix=avalon.fn.mix=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,k=arguments.length,l=!1;"boolean"===typeof g&&(l=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&&(g={});h===k&&(g=this,h--);for(;h>0)-(d.clientLeft>>0),c.pageY=b.clientY+(d.scrollTop>>0)-(d.clientTop>>0),c.wheelDeltaY=c.wheelDelta,c.wheelDeltaX=0);c.timeStamp=new Date-0;c.originalEvent=b;c.preventDefault=function(){b.returnValue=!1};c.stopPropagation=function(){b.cancelBubble=!0};return c}function Vb(b){var c=[];c.$id=ja();c.$model=b;c.$events={};c.$events[G]=[];c._=L({length:b.length}); +c._.$watch("length",function(b,d){c.$fire("length",b,d)});for(var d in P)c[d]=P[d];avalon.mix(c,yb);return c}function zb(b,c,d,e){var f=avalon.parseHTML(b.template),g=avalon.slice(f.childNodes);c.appendChild(f);d.$outer=b.$outer;b={nodes:g,vmodels:[d].concat(b.vmodels)};e.push(b)}function Ha(b,c){var d=b.endRepeat,e=[],f=b.element.nextSibling;if(f!==d){do if(f!==d)e.push(f);else break;while(f=f.nextSibling)}return e[b.group*c]||d}function Ab(b,c,d){c*=d||1;d=[b];for(var e=1,f=H;et.maxRepeatSize&&fa.pop()}b.length=0}function S(){p.body&&(D?(s["ready!"].state=2,D.checkDeps()): +Db.forEach(function(b){b(avalon)}),S=z)}function Eb(){try{A.doScroll("left"),S()}catch(b){setTimeout(Eb)}}var y=new Date-0,G="$"+y,r=this||(0,eval)("this"),yc=r.require,zc=r.define,la=!1,B=/[^, ]+/g,Fb=/\[native code\]/,xa=/^(?:object|array)$/,Gb=/^\[object SVG\w*Element\]$/,Tb=/^\[object (?:Window|DOMWindow|global)\]$/,Ia=Object.prototype,M=Ia.hasOwnProperty,ka=Ia.toString,K=Array.prototype,ba=K.slice,$={},v=r.dispatchEvent,A=p.documentElement,J=p.getElementsByTagName("head")[0],H=p.createDocumentFragment(), +ga=p.createElement("div"),Hb={};"Boolean Number String Function Array Date RegExp Object Error".replace(B,function(b){Hb["[object "+b+"]"]=b.toLowerCase()});avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.type=function(b){return null==b?String(b):"object"===typeof b||"function"===typeof b?Hb[ka.call(b)]||"object":typeof b};var V="object"===typeof alert?function(b){try{return/^\s*\bfunction\b/.test(b+ +"")}catch(c){return!1}}:function(b){return"[object Function]"==ka.call(b)};avalon.isFunction=V;avalon.isWindow=function(b){return!b?!1:b==b.document&&b.document!=b};Xa(r)&&(avalon.isWindow=Xa);for(var Ac in avalon({}))break;var Bc="0"!==Ac;avalon.isPlainObject=function(b,c){if(!b||"object"!==avalon.type(b)||b.nodeType||avalon.isWindow(b))return!1;try{if(b.constructor&&!M.call(b,"constructor")&&!M.call(b.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}if(Bc)for(c in b)return M.call(b, +c);for(c in b);return void 0===c||M.call(b,c)};Fb.test(Object.getPrototypeOf)&&(avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Ia});avalon.mix=avalon.fn.mix=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,k=arguments.length,l=!1;"boolean"===typeof g&&(l=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&&(g={});h===k&&(g=this,h--);for(;h 0 Then","\t\t["+b+'] = [__proxy__]([__data__],"'+b+'")',"\tEnd If","\tOn Error Goto 0","\tEnd Property");f.push("End Class");b=f.join("\r\n"); -b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](c,Cc)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var Dc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(Dc,"")}}var Ec=!{toString:null}.propertyIsEnumerable("toString"),Fc=function(){}.propertyIsEnumerable("prototype"),Hb="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), -Gc=Hb.length;Object.keys||(Object.keys=function(b){var c=[],d=Fc&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(d=0;d -arguments.length&&void 0===b)return this;var c=this,d=arguments;return function(){var e=[],f;for(f=1;fe&&(e+=d);ee&&(e=Math.max(0,d+e));0<=e;e--)if(this[e]===b)return e;return-1},forEach:aa("","_",""),filter:aa("r=[],j=0,", -"if(_)r[j++]=this[i]","return r"),map:aa("r=[],","r[i]=_","return r"),some:aa("","if(_)return true","return false"),every:aa("","if(!_)return false","return true")});A.contains||(Node.prototype.contains=function(b){return!!(this.compareDocumentPosition(b)&16)});p.contains||(p.contains=function(b){return Xa(p,b)});if(r.SVGElement){var Ib=p.createElementNS("http://www.w3.org/2000/svg","svg");Ib.innerHTML='';if(!Fb.test(Ib.firstChild)){var Ja=function(b,c){if(b&& -b.childNodes)for(var d=b.childNodes,e=0,f;f=d[e++];)if(f.tagName){var g=p.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());K.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});Ja(f,g);c.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:Ya,set:function(b){var c=this.tagName.toLowerCase(),d=this.parentNode;b=avalon.parseHTML(b);"svg"===c?d.insertBefore(b,this):(c=p.createDocumentFragment(),Ja(b,c),d.insertBefore(c, -this));d.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),Ja(b,this))}}})}}!A.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",Ya);var N,O,ca,Jb,tb,Kb=/[-.*+?^${}()|[\]\/\\]/g,T={loader:function(b){r.define=b?D.define: -zc;r.require=b?D:yc},interpolate:function(b){N=b[0];O=b[1];if(N===O)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")t.commentInterpolate=!0;else{b=N+"test"+O;ga.innerHTML=b;if(ga.innerHTML!==b&&0<=ga.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");ga.innerHTML=""}b=(N+"").replace(Kb,"\\$&");var c=(O+"").replace(Kb,"\\$&");ca=RegExp(b+"(.*?)"+c);Jb=RegExp(b+"(.*?)"+c,"g");tb=RegExp(b+".*?"+c+"|\\sms-")}};t.debug=!0;t.plugins=T;t.plugins.interpolate(["{{", -"}}"]);t.paths={};t.shim={};t.maxRepeatSize=100;avalon.config=t;var ab={_toString:function(){var b=this.node.className;return("string"===typeof b?b:b.baseVal).split(/\s+/).join(" ")},_contains:function(b){return-1<(" "+this+" ").indexOf(" "+b+" ")},_add:function(b){this.contains(b)||this._set(this+" "+b)},_remove:function(b){this._set((" "+this+" ").replace(" "+b+" "," ").trim())},__set:function(b){var c=this.node;"string"===typeof c.className?c.className=b:c.setAttribute("class",b)}};"add,remove".replace(B, -function(b){avalon.fn[b+"Class"]=function(c){var d=this[0];c&&("string"===typeof c&&d&&1===d.nodeType)&&c.replace(/\S+/g,function(c){$a(d)[b](c)});return this}});avalon.fn.mix({hasClass:function(b){var c=this[0]||{};return 1===c.nodeType&&$a(c).contains(b)},toggleClass:function(b,c){for(var d,e=0,f=b.split(/\s+/),g="boolean"===typeof c;d=f[e++];)this[(g?c:!this.hasClass(d))?"addClass":"removeClass"](d);return this},attr:function(b,c){return 2===arguments.length?(this[0].setAttribute(b,c),this):this[0].getAttribute(b)}, -data:function(b,c){b="data-"+Za(b||"");switch(arguments.length){case 2:return this.attr(b,c),this;case 1:var d=this.attr(b);return bb(d);case 0:var e={};K.forEach.call(this[0].attributes,function(c){c&&(b=c.name,b.indexOf("data-")||(b=qa(b.slice(5)),e[b]=bb(c.value)))});return e}},removeData:function(b){b="data-"+Za(b);this[0].removeAttribute(b);return this},css:function(b,c){if(avalon.isPlainObject(b))for(var d in b)avalon.css(this,d,b[d]);else var e=avalon.css(this,b,c);return void 0!==e?e:this}, +b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](c,Cc)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var Dc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(Dc,"")}}var Ec=!{toString:null}.propertyIsEnumerable("toString"),Fc=function(){}.propertyIsEnumerable("prototype"),Ib="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), +Gc=Ib.length;Object.keys||(Object.keys=function(b){var c=[],d=Fc&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(d=0;d +arguments.length&&void 0===b)return this;var c=this,d=arguments;return function(){var e=[],f;for(f=1;fe&&(e+=d);ee&&(e=Math.max(0,d+e));0<=e;e--)if(this[e]===b)return e;return-1},forEach:aa("","_",""),filter:aa("r=[],j=0,", +"if(_)r[j++]=this[i]","return r"),map:aa("r=[],","r[i]=_","return r"),some:aa("","if(_)return true","return false"),every:aa("","if(!_)return false","return true")});A.contains||(Node.prototype.contains=function(b){return!!(this.compareDocumentPosition(b)&16)});p.contains||(p.contains=function(b){return Ya(p,b)});if(r.SVGElement){var Jb=p.createElementNS("http://www.w3.org/2000/svg","svg");Jb.innerHTML='';if(!Gb.test(Jb.firstChild)){var Ka=function(b,c){if(b&& +b.childNodes)for(var d=b.childNodes,e=0,f;f=d[e++];)if(f.tagName){var g=p.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());K.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});Ka(f,g);c.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:Za,set:function(b){var c=this.tagName.toLowerCase(),d=this.parentNode;b=avalon.parseHTML(b);"svg"===c?d.insertBefore(b,this):(c=p.createDocumentFragment(),Ka(b,c),d.insertBefore(c, +this));d.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),Ka(b,this))}}})}}!A.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",Za);var N,O,ca,Kb,ub,Lb=/[-.*+?^${}()|[\]\/\\]/g,T={loader:function(b){r.define=b?D.define: +zc;r.require=b?D:yc},interpolate:function(b){N=b[0];O=b[1];if(N===O)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")t.commentInterpolate=!0;else{b=N+"test"+O;ga.innerHTML=b;if(ga.innerHTML!==b&&0<=ga.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");ga.innerHTML=""}b=(N+"").replace(Lb,"\\$&");var c=(O+"").replace(Lb,"\\$&");ca=RegExp(b+"(.*?)"+c);Kb=RegExp(b+"(.*?)"+c,"g");ub=RegExp(b+".*?"+c+"|\\sms-")}};t.debug=!0;t.plugins=T;t.plugins.interpolate(["{{", +"}}"]);t.paths={};t.shim={};t.maxRepeatSize=100;avalon.config=t;var bb={_toString:function(){var b=this.node.className;return("string"===typeof b?b:b.baseVal).split(/\s+/).join(" ")},_contains:function(b){return-1<(" "+this+" ").indexOf(" "+b+" ")},_add:function(b){this.contains(b)||this._set(this+" "+b)},_remove:function(b){this._set((" "+this+" ").replace(" "+b+" "," ").trim())},__set:function(b){var c=this.node;"string"===typeof c.className?c.className=b:c.setAttribute("class",b)}};"add,remove".replace(B, +function(b){avalon.fn[b+"Class"]=function(c){var d=this[0];c&&("string"===typeof c&&d&&1===d.nodeType)&&c.replace(/\S+/g,function(c){ab(d)[b](c)});return this}});avalon.fn.mix({hasClass:function(b){var c=this[0]||{};return 1===c.nodeType&&ab(c).contains(b)},toggleClass:function(b,c){for(var d,e=0,f=b.split(/\s+/),g="boolean"===typeof c;d=f[e++];)this[(g?c:!this.hasClass(d))?"addClass":"removeClass"](d);return this},attr:function(b,c){return 2===arguments.length?(this[0].setAttribute(b,c),this):this[0].getAttribute(b)}, +data:function(b,c){b="data-"+$a(b||"");switch(arguments.length){case 2:return this.attr(b,c),this;case 1:var d=this.attr(b);return cb(d);case 0:var e={};K.forEach.call(this[0].attributes,function(c){c&&(b=c.name,b.indexOf("data-")||(b=qa(b.slice(5)),e[b]=cb(c.value)))});return e}},removeData:function(b){b="data-"+$a(b);this[0].removeAttribute(b);return this},css:function(b,c){if(avalon.isPlainObject(b))for(var d in b)avalon.css(this,d,b[d]);else var e=avalon.css(this,b,c);return void 0!==e?e:this}, position:function(){var b,c,d=this[0],e={top:0,left:0};if(d)return"fixed"===this.css("position")?c=d.getBoundingClientRect():(b=this.offsetParent(),c=this.offset(),"HTML"!==b[0].tagName&&(e=b.offset()),e.top+=avalon.css(b[0],"borderTopWidth",!0),e.left+=avalon.css(b[0],"borderLeftWidth",!0)),{top:c.top-e.top-avalon.css(d,"marginTop",!0),left:c.left-e.left-avalon.css(d,"marginLeft",!0)}},offsetParent:function(){for(var b=this[0].offsetParent||A;b&&"HTML"!==b.tagName&&"static"===avalon.css(b,"position");)b= -b.offsetParent;return avalon(b||A)},bind:function(b,c,d){if(this[0])return avalon.bind(this[0],b,c,d)},unbind:function(b,c,d){this[0]&&avalon.unbind(this[0],b,c,d);return this},val:function(b){var c=this[0];if(c&&1===c.nodeType){var d=0===arguments.length,e=d?":get":":set",f=Ka,g;g=c.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(c.type)?"checked":g;if(e=f[g+e])var h=e(c,b);else{if(d)return(c.value||"").replace(/\r/g,"");c.value=b}}return d?h:this}});var Yb=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/, +b.offsetParent;return avalon(b||A)},bind:function(b,c,d){if(this[0])return avalon.bind(this[0],b,c,d)},unbind:function(b,c,d){this[0]&&avalon.unbind(this[0],b,c,d);return this},val:function(b){var c=this[0];if(c&&1===c.nodeType){var d=0===arguments.length,e=d?":get":":set",f=La,g;g=c.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(c.type)?"checked":g;if(e=f[g+e])var h=e(c,b);else{if(d)return(c.value||"").replace(/\r/g,"");c.value=b}}return d?h:this}});var Yb=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/, Hc=/^[\],:{}\s]*$/,Ic=/(?:^|:|,)(?:\s*\[)+/g,Jc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,Kc=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;avalon.parseJSON=r.JSON?JSON.parse:function(b){if("string"===typeof b){if((b=b.trim())&&Hc.test(b.replace(Jc,"@").replace(Kc,"]").replace(Ic,"")))return(new Function("return "+b))();avalon.error("Invalid JSON: "+b)}};avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){avalon.fn[b]=function(d){var e=this[0]||{},f=e.window&& -e.document?e:9===e.nodeType?e.defaultView||e.parentWindow:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?d:avalon(f).scrollLeft(),g?d:avalon(f).scrollTop()):e[b]=d;else return f?c in f?f[c]:A[b]:e[b]}});var x=avalon.cssHooks={},Lb=["","-webkit-","-o-","-moz-","-ms-"],La={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=U("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,c,d){if(La[b])return La[b];c=c||A.style; -for(var e=0,f=Lb.length;e=d?"alpha(opacity="+100*d+")":"";c=b.filter||"";b.zoom=1;b.filter=(Mb.test(c)?c.replace(Mb,d):c+" "+d).trim();b.filter||b.removeAttribute("filter")};x["opacity:get"]=function(b){b=b.filters.alpha||b.filters["DXImageTransform.Microsoft.Alpha"];return(b&&b.enabled?b.opacity:100)/100+""}}"top,left".replace(B,function(b){x[b+":get"]=function(c){var d=x["@:get"](c,b);return/px$/.test(d)?d:avalon(c).position()[b]+"px"}});var db={position:"absolute",visibility:"hidden",display:"block"}, +e.document?e:9===e.nodeType?e.defaultView||e.parentWindow:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?d:avalon(f).scrollLeft(),g?d:avalon(f).scrollTop()):e[b]=d;else return f?c in f?f[c]:A[b]:e[b]}});var x=avalon.cssHooks={},Mb=["","-webkit-","-o-","-moz-","-ms-"],Ma={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=U("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,c,d){if(Ma[b])return Ma[b];c=c||A.style; +for(var e=0,f=Mb.length;e=d?"alpha(opacity="+100*d+")":"";c=b.filter||"";b.zoom=1;b.filter=(Nb.test(c)?c.replace(Nb,d):c+" "+d).trim();b.filter||b.removeAttribute("filter")};x["opacity:get"]=function(b){b=b.filters.alpha||b.filters["DXImageTransform.Microsoft.Alpha"];return(b&&b.enabled?b.opacity:100)/100+""}}"top,left".replace(B,function(b){x[b+":get"]=function(c){var d=x["@:get"](c,b);return/px$/.test(d)?d:avalon(c).position()[b]+"px"}});var eb={position:"absolute",visibility:"hidden",display:"block"}, Zb=/^(none|table(?!-c[ea]).+)/;"Width,Height".replace(B,function(b){var c=b.toLowerCase(),d="client"+b,e="scroll"+b,f="offset"+b;x[c+":get"]=function(c,d,e){var l=-4;"number"===typeof e&&(l=e);d="Width"===b?["Left","Right"]:["Top","Bottom"];e=c[f];if(2===l)return e+avalon.css(c,"margin"+d[0],!0)+avalon.css(c,"margin"+d[1],!0);0>l&&(e=e-avalon.css(c,"border"+d[0]+"Width",!0)-avalon.css(c,"border"+d[1]+"Width",!0));-4===l&&(e=e-avalon.css(c,"padding"+d[0],!0)-avalon.css(c,"padding"+d[1],!0));return e}; -x[c+"&get"]=function(b){var d=[];cb(b,d);for(var e=x[c+":get"](b),f=0,m;m=d[f++];){b=m.node;for(var n in m)"string"===typeof m[n]&&(b.style[n]=m[n])}return e};avalon.fn[c]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[d];if(9===h.nodeType){var k=h.documentElement;return Math.max(h.body[e],k[e],h.body[f],k[f],k[d])}return x[c+"&get"](h)}return this.css(c,g)};avalon.fn["inner"+b]=function(){return x[c+":get"](this[0],void 0,-2)};avalon.fn["outer"+ +x[c+"&get"]=function(b){var d=[];db(b,d);for(var e=x[c+":get"](b),f=0,m;m=d[f++];){b=m.node;for(var n in m)"string"===typeof m[n]&&(b.style[n]=m[n])}return e};avalon.fn[c]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[d];if(9===h.nodeType){var k=h.documentElement;return Math.max(h.body[e],k[e],h.body[f],k[f],k[d])}return x[c+"&get"](h)}return this.css(c,g)};avalon.fn["inner"+b]=function(){return x[c+":get"](this[0],void 0,-2)};avalon.fn["outer"+ b]=function(b){return x[c+":get"](this[0],void 0,!0===b?2:0)}});avalon.fn.offset=function(){var b=this[0],c={left:0,top:0};if(!b||!b.tagName||!b.ownerDocument)return c;var d=b.ownerDocument,e=d.body,f=d.documentElement,d=d.defaultView||d.parentWindow;if(!avalon.contains(f,b))return c;b.getBoundingClientRect&&(c=b.getBoundingClientRect());var b=f.clientTop||e.clientTop,g=f.clientLeft||e.clientLeft,h=Math.max(d.pageYOffset||0,f.scrollTop,e.scrollTop),e=Math.max(d.pageXOffset||0,f.scrollLeft,e.scrollLeft); -return{top:c.top+h-b,left:c.left+e-g}};var Oc=/^]+))?)*\s+value[\s=]/i,Ka={"option:get":function(b){return b.hasAttribute?b.hasAttribute("value")?b.value:b.text.trim():Oc.test(b.outerHTML)?b.value:b.text},"select:get":function(b,c){for(var d,e=b.options,f=b.selectedIndex,g=Ka["option:get"],h="select-one"===b.type||0>f,k=h?null:[],l=h?f+1:e.length,m=0>f?l:h?f:0;m]*)\/>/ig,Nb=v?/[^\d\D]/:/(<(?:script|link|style|meta|noscript))/ig,Rc=U(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),Sc=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,F={area:[1,""],param:[1,""],col:[2,"
", +return{top:c.top+h-b,left:c.left+e-g}};var Oc=/^]+))?)*\s+value[\s=]/i,La={"option:get":function(b){return b.hasAttribute?b.hasAttribute("value")?b.value:b.text.trim():Oc.test(b.outerHTML)?b.value:b.text},"select:get":function(b,c){for(var d,e=b.options,f=b.selectedIndex,g=La["option:get"],h="select-one"===b.type||0>f,k=h?null:[],l=h?f+1:e.length,m=0>f?l:h?f:0;m]*)\/>/ig,Ob=v?/[^\d\D]/:/(<(?:script|link|style|meta|noscript))/ig,Rc=U(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),Sc=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,F={area:[1,""],param:[1,""],col:[2,"
", "
"],legend:[1,"
"],option:[1,"\u4e0a\u8981\u6c42\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"):b.multiple&&w("ms-duplex\u5728\u4e0a\u8981\u6c42\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"):b.multiple&&w("ms-duplex\u5728"],thead:[1,"","
"],tr:[2,""],td:[3,"
"],text:[1,'',""],_default:[0,""]};s.optgroup=s.option;s.tbody=s.tfoot=s.colgroup=s.caption=s.thead;s.th=s.td;s.circle=s.ellipse=s.line=s.path=s.polygon=s.polyline=s.rect=s.text;var $b=p.createElement("script");avalon.parseHTML=function(b){"string"!==typeof b&&(b+="");b=b.replace(rb,"<$1>").trim();var c=(qb.exec(b)|| -["",""])[1].toLowerCase(),d=s[c]||s._default,c=I.cloneNode(!1),e=da,f;e.innerHTML=d[1]+b+(d[2]||"");b=e.getElementsByTagName("script");if(b.length)for(var g=0,h;h=b[g++];)Zb[h.type]&&(f=$b.cloneNode(!1),N.forEach.call(h.attributes,function(b){f.setAttribute(b.name,b.value)}),f.text=h.text,h.parentNode.replaceChild(f,h));for(g=d[0];g--;e=e.lastChild);for(;d=e.firstChild;)c.appendChild(d);return c};avalon.innerHTML=function(b,c){if(!/ + + + + + + + + From d2d09fb901d4010e86393faef96b678c214c2206 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Sun, 26 Oct 2014 12:50:50 +0800 Subject: [PATCH 032/143] =?UTF-8?q?update=20=E5=85=89=E6=A0=87=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- avalon.js | 44 ++++++++++++++++++++++++++++++++------------ test.html | 4 ++-- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/avalon.js b/avalon.js index ee48acd66..84c5bf8e8 100644 --- a/avalon.js +++ b/avalon.js @@ -3292,35 +3292,39 @@ avalon.mix(this, options) this.element = element this.mask = mask + this.value = "" } Mask.prototype = { getMaskedVal: function(skipMask) { var mask = this.mask var value = this.value || "" + this.impurity = {} var valueArray = value.split("") var maskArray = mask.split("") var translations = this.translations - var buf = [] if (value.length === 0 || value === mask) { + //如果不存在或一致,那么先将元字符转换为占位符,比如 + //将00/00/0000转换为__/__/____ for (var i = 0, n = maskArray.length; i < n; i++) { var m = maskArray[i] - if (translations[m]) {//如果不存在或一致,那么先将元字符转换为占位符 + if (translations[m]) { valueArray[i] = translations[m].placehoder || "_" } else { valueArray[i] = m } } } + var pos = 0 var complete = true - console.log("xxxxxx " + value) + var maskIndex = 0 while (maskArray.length) { - var m = maskArray.shift() //00/00/0000 + var m = maskArray.shift() + if (complete) - pos++ - console.log(m) + pos++//得控位获得焦点时,光标应该定位的位置 if (translations[m]) { var el = valueArray.shift()//123456 var translation = translations[m] @@ -3329,20 +3333,23 @@ buf.push(el) } else { if (!translation.optional && !skipMask) { - buf.push(translation.placehoder || "_") + buf.push(translation.placehoder || this.placehoder) complete = false } - } } else { + this.impurity[maskIndex] = true//收集杂质的位置 + if (valueArray[0] === m) {// 当__/__/____遇到12/34/____时,/要去掉 + valueArray.shift() + } if (!skipMask) { buf.push(m) } } + maskIndex++ } this.complete = complete var ret = buf.join("") - console.log("ret " + ret) if (!skipMask && !this.inited) { this.inited = true var element = this.element @@ -3393,18 +3400,31 @@ if (e.ctrlKey || e.altKey || e.metaKey || k < 32) //Ignore return var caret = getCaret(el) + var impurity = data.msMask.impurity || {} + console.log(impurity) var pos + // console.log(caret.start) if (k === 37 || k == 38) {//向左向上移动光标 - pos = caret.start - 1 + pos = caret.start-1 + avalon.log(pos+"向左") + if (impurity[pos]) { + pos -= 1 + } + // pos -= 1 } else if (k === 39 || k == 40) {//向右向下移动光标 pos = caret.end//只操作end + avalon.log(pos+"向右") + if (impurity[pos]) { + pos++ + } } else if (k && k !== 13) {//如果是在光标高亮处直接键入字母 pos = caret.start } if (typeof pos === "number") { if (pos >= el.value.length) {//start与end一致 pos = pos - 1 - } else if (pos < 1) { + } else if (pos < 1 ) { + // console.log("-----------"+ pos+impurity[pos]) pos = 0 } if (e.preventDefault) { @@ -3413,7 +3433,7 @@ e.returnValue = false } setTimeout(function() { - avalon.log(pos, pos + 1) + // avalon.log(pos, pos + 1) setCaret(el, pos, pos + 1) }) } diff --git a/test.html b/test.html index 14e60f71e..7067953ac 100644 --- a/test.html +++ b/test.html @@ -2,7 +2,7 @@ - JS Bin + duplexHooks ";var ed=/(?:[\s\S]+?)<\/noscript>/img,fd=/([\s\S]+?)<\/noscript>/im,Ra=function(){return new (r.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP")},ha=function(b,c,d){if(b=b.getAttribute(c)){c=0;for(var e;e=d[c++];)if(e.hasOwnProperty(b)&&"function"===typeof e[b])return e[b]}},Sa=avalon.templateCache={};avalon.contains=Ya;var Ta={};"autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelectedcontentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected".replace(B, -function(b){Ta[b.toLowerCase()]=b});var Ga=avalon.bindingExecutors={attr:function(b,c,d){var e=d.type,f=d.param;if("css"===e)avalon(c).css(f,b);else if("attr"===e){if(Ta[f]&&(d=Ta[f],"boolean"===typeof c[d]))return c[d]=!!b;if(!v&&Qa[f])var f=Qa[f],g=!0;if(!1===b||null===b||void 0===b)return c.removeAttribute(f);r.VBArray&&!g&&(fb(c)?g=!0:Gb.test(c)||(g=(g=(c.attributes||{})[f])?!1===g.expando:null===g));g?c[f]=b:c.setAttribute(f,b)}else if("include"===e&&b){var h=d.vmodels,l=ha(c,"data-include-rendered", -h),k=ha(c,"data-include-loaded",h),m=function(b){k&&(b=k.apply(c,[b].concat(h)));avalon.innerHTML(c,b);Ba(c,h);l&&kb(c,function(){l.call(c)})};if("src"===d.param)if(Sa[b])avalon.nextTick(function(){m(Sa[b])});else{var n=Ra();n.onreadystatechange=function(){if(4===n.readyState){var c=n.status;if(200<=c&&300>c||304===c||1223===c)m(Sa[b]=n.responseText)}};n.open("GET",b,!0);"withCredentials"in n&&(n.withCredentials=!0);n.setRequestHeader("X-Requested-With","XMLHttpRequest");n.send(null)}else{var q=b&& -1===b.nodeType?b:p.getElementById(b);if(q){if("NOSCRIPT"===q.tagName&&!q.innerHTML&&!q.fixIE78){n=Ra();n.open("GET",location,!1);n.send(null);f=p.getElementsByTagName("noscript");g=(n.responseText||"").match(ed)||[];d=g.length;for(e=0;ec||37<=c&&40>=c)||("cut"===b.type?avalon.nextTick(h):h())};I.forEach(function(c){b.attachEvent("on"+c,E)});d.rollback=function(){I.forEach(function(c){b.detachEvent("on"+ -c,E)})}}b.oldValue=b.value;Rb(function(){if(avalon.contains(A,b))qc.call(b);else if(!b.msRetain)return!1});za(d);var Z=setTimeout(function(){n||e.call(b,b.value);clearTimeout(Z)},31)};var xb,ea=[],Rb=z;avalon.tick=function(b){1===ea.push(b)&&(xb=setInterval(rc,60))};try{var Ua=HTMLInputElement.prototype;Object.getOwnPropertyNames(Ua);var tc=Object.getOwnPropertyDescriptor(Ua,"value").set;Object.defineProperty(Ua,"value",{set:sc})}catch(od){Rb=avalon.tick}Y.SELECT=function(b,c,d){var e=avalon(b);d.handler= -function(){var d=c(),d=d&&d.$model||d;Array.isArray(d)?b.multiple||w("ms-duplex\u5728\u4e0d\u80fd\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4");d=Array.isArray(d)?d.map(String):d+"";d+""!==b.oldValue&&(e.val(d),b.oldValue=d+"")};d.bound("change",function(){if(!1!==e.data("duplex-observe")){var f=e.val(),f=Array.isArray(f)?f.map(function(b){return X(d,b)}):X(d,f);f+""!==b.oldValue&& -c(f);d.changed.call(b,f)}});var f=NaN,g=setInterval(function(){var e=b.innerHTML;e===f?(clearInterval(g),za(d),d.changed.call(b,c())):f=e},20)};Y.TEXTAREA=Y.INPUT;var ia=avalon.eventHooks;"onmouseenter"in A||avalon.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(b,c){ia[b]={type:c,deel:function(c,e){return function(f){var g=f.relatedTarget;if(!g||g!==c&&!(c.compareDocumentPosition(g)&16))return delete f.type,f.type=b,e.call(c,f)}}}});avalon.each({AnimationEvent:"animationend",WebKitAnimationEvent:"webkitAnimationEnd"}, -function(b,c){r[b]&&!ia.animationend&&(ia.animationend={type:c})});"oninput"in p.createElement("input")||(ia.input={type:"propertychange",deel:function(b,c){return function(d){if("value"===d.propertyName)return d.type="input",c.call(b,d)}}});if(void 0===p.onmousewheel){var Sb=void 0!==p.onwheel?"wheel":"DOMMouseScroll",gd="wheel"===Sb?"deltaY":"detail";ia.mousewheel={type:Sb,deel:function(b,c){return function(d){d.wheelDeltaY=d.wheelDelta=0]*>([\S\s]*?)<\/script\s*>/gim,id=/\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,jd=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/ig,kd={a:/\b(href)\=("javascript[^"]*"|'javascript[^']*')/ig,img:/\b(src)\=("javascript[^"]*"|'javascript[^']*')/ig,form:/\b(action)\=("javascript[^"]*"|'javascript[^']*')/ig},ld=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,md=/([^\#-~| |!])/g,Wa=avalon.filters={uppercase:function(b){return b.toUpperCase()},lowercase:function(b){return b.toLowerCase()},truncate:function(b, -c,d){c=c||30;d=void 0===d?"...":d;return b.length>c?b.slice(0,c-d.length)+d:String(b)},camelize:qa,sanitize:function(b){return b.replace(hd,"").replace(jd,function(b,d){var e=b.toLowerCase().match(/<(\w+)\s/);e&&(e=kd[e[1]])&&(b=b.replace(e,function(b,c,d){b=d.charAt(0);return c+"="+b+"javascript:void(0)"+b}));return b.replace(id," ").replace(/\s+/g," ")})},escape:function(b){return String(b).replace(/&/g,"&").replace(ld,function(b){var d=b.charCodeAt(0);b=b.charCodeAt(1);return"&#"+(1024*(d- -55296)+(b-56320)+65536)+";"}).replace(md,function(b){return"&#"+b.charCodeAt(0)+";"}).replace(//g,">")},currency:function(b,c){return(c||"\uffe5")+avalon.filters.number(b)},number:function(b,c,d,e){b=(b+"").replace(/[^0-9+\-Ee.]/g,"");b=!isFinite(+b)?0:+b;c=!isFinite(+c)?0:Math.abs(c);e=e||",";d=d||".";var f="",f=function(b,c){var d=Math.pow(10,c);return""+Math.round(b*d)/d},f=(c?f(b,c):""+Math.round(b)).split(".");3b&&(e="-",b=-b);for(b=""+b;b.length-e)g+=e;0===g&&-12===e&&(g=12);return b(g,d,f)}}function d(b,c){return function(d,e){var f=d["get"+b](),g=(c?"SHORT"+b:b).toUpperCase();return e[g][f]}}function e(b){var c;if(c=b.match(l)){b=new Date(0);var d= -0,e=0,f=c[8]?b.setUTCFullYear:b.setFullYear,g=c[8]?b.setUTCHours:b.setHours;c[9]&&(d=parseInt(c[9]+c[10],10),e=parseInt(c[9]+c[11],10));f.call(b,parseInt(c[1],10),parseInt(c[2],10)-1,parseInt(c[3],10));d=parseInt(c[4]||0,10)-d;e=parseInt(c[5]||0,10)-e;f=parseInt(c[6]||0,10);c=Math.round(1E3*parseFloat("0."+(c[7]||0)));g.call(b,d,e,f,c)}return b}var f={yyyy:c("FullYear",4),yy:c("FullYear",2,0,!0),y:c("FullYear",1),MMMM:d("Month"),MMM:d("Month",!0),MM:c("Month",2,1),M:c("Month",1,1),dd:c("Date",2), -d:c("Date",1),HH:c("Hours",2),H:c("Hours",1),hh:c("Hours",2,-12),h:c("Hours",1,-12),mm:c("Minutes",2),m:c("Minutes",1),ss:c("Seconds",2),s:c("Seconds",1),sss:c("Milliseconds",3),EEEE:d("Day"),EEE:d("Day",!0),a:function(b,c){return 12>b.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(c){c=-1*c.getTimezoneOffset();return c=(0<=c?"+":"")+(b(Math[0e?avalon.error(b+" \u5bf9\u5e94\u8d44\u6e90\u4e0d\u5b58\u5728\u6216\u6ca1\u6709\u5f00\u542f CORS"):(s[d].state=2,s[d].exports=c.responseText,D.checkDeps())}};c.open("GET",b,!0);"withCredentials"in c&&(c.withCredentials=!0);c.setRequestHeader("X-Requested-With","XMLHttpRequest");c.send();return d};var q=c(!0);q||(q=avalon.slice(p.scripts).pop().src);q=b(q);n=t.base=q.slice(0,q.lastIndexOf("/")+1);var u=/\/\w+\/\.\./;D=avalon.require=function(b,c,d){var f={},h=[],m=0,p=0,q=d||"callback"+setTimeout("1"); -d=d||n;String(b).replace(B,function(b){if(b=g(b,d))m++,s[b]&&2===s[b].state&&p++,f[b]||(h.push(b),f[b]="\u53f8\u5f92\u6b63\u7f8e")});s[q]={id:q,factory:c,deps:f,args:h,state:1};m===p?l(q,h,c):k.unshift(q);e()};D.define=function(e,f,g){var h=ba.call(arguments);if("string"===typeof e)var k=h.shift();"function"===typeof h[0]&&h.unshift([]);var l=s[k]&&1<=s[k].state?k:b(c());!s[l]&&k&&(s[l]={id:l,factory:g,state:1});g=h[1];g.id=k;g.delay=function(b){h.push(b);var c=!0;try{c=d(s[b].deps,b)}catch(e){}c&& -avalon.error(b+"\u6a21\u5757\u4e0e\u4e4b\u524d\u7684\u6a21\u5757\u5b58\u5728\u5faa\u73af\u4f9d\u8d56\uff0c\u8bf7\u4e0d\u8981\u76f4\u63a5\u7528script\u6807\u7b7e\u5f15\u5165"+b+"\u6a21\u5757");delete g.delay;D.apply(null,h)};l?g.delay(l,h):m.push(g)};D.define.amd=s;D.config=t;D.checkDeps=e};var Db=[];"complete"===p.readyState?setTimeout(S):v?p.addEventListener("DOMContentLoaded",S):(p.attachEvent("onreadystatechange",function(){"complete"===p.readyState&&S()}),A.doScroll&&Eb());avalon.bind(r,"load", -S);avalon.ready=function(b){D?D("ready!",b):S===z?b(avalon):Db.push(b)};avalon.config({loader:!0});avalon.ready(function(){avalon.scan(p.body)})})(document); +(function(q){function y(){}function w(){r.console&&avalon.config.debug&&Function.apply.call(console.log,console,arguments)}function U(b,d){"string"===typeof b&&(b=b.match(B)||[]);for(var c={},e=void 0!==d?d:1,f=0,g=b.length;fb?Math.max(d+b,0):Math.min(b,d)}function Wb(b,d, +c){if(V(d)||d&&d.nodeType||-1!==c.indexOf(b)||-1!==ta.indexOf(b))return!1;d=c.$special;return b&&"$"===b.charAt(0)&&!d[b]?!1:!0}function L(b,d,c){if(Array.isArray(b)){var e=b.concat();b.length=0;d=Xb(b);d.pushArray(e);return d}if("number"===typeof b.nodeType||b.$id&&b.$model&&b.$events)return b;Array.isArray(b.$skipArray)||(b.$skipArray=[]);b.$skipArray.$special=d||{};var f={};c=c||{};var g={},h={},l=[];for(e in b)(function(d,e){c[d]=e;if(Wb(d,e,b.$skipArray)){var k,s=avalon.type(e);g[d]=[];if("object"=== +s&&V(e.get)&&2>=Object.keys(e).length){var I=e.set,E=e.get;k=function(b){var e=f.$events,g=c[d];if(arguments.length){if(ja)return;if(V(I)){var h=e[d];e[d]=[];I.call(f,b);e[d]=h}}else avalon.openComputedCollect&&ka(e[d]);b=c[d]=E.call(f);if(!la(g,b)){if(ma&&(h=W[f.$id])&&h[d])h[d].$val=b;va(e[d]);f.$events&&P.$fire.call(f,d,b,g)}return b};l.push(function(){Y[z]={evaluator:k,element:J,type:"computed::"+d,handler:y,args:[]};k();ka(g[d]);delete Y[z]})}else wa.test(s)?(k=function(b){var e=k.child,h=c[d]; +if(arguments.length)!ja&&!la(h,b)&&(e=k.child=Yb(f,d,b,s),b=c[d]=e.$model,(e=xa[e.$id])&&e(),f.$events&&P.$fire.call(f,d,b,h));else return ka(g[d]),e},(k.child=L(e,0,c[d])).$events[G]=g[d]):k=function(b){var e=c[d];if(arguments.length){if(!la(e,b)){c[d]=b;if(ma){var h=W[f.$id];h&&h[d]&&(h[d].$val=b)}va(g[d]);f.$events&&P.$fire.call(f,d,b,e)}}else return ka(g[d]),e};h[d]=k}})(e,b[e]);ta.forEach(function(d){delete b[d];delete c[d]});var f=na(f,Zb(h),b),k;for(k in b)h[k]||(f[k]=b[k]);f.$id=ha();f.$model= +c;f.$events=g;for(e in P)d=P[e],v||(d=d.bind(f)),f[e]=d;f.hasOwnProperty=function(b){return b in f.$model};l.forEach(function(b){b()});return f}function Yb(b,d,c,e){var f=b[d];if("array"===e){if(!Array.isArray(c)||f===c)return f;f.clear();f.pushArray(c.concat());return f}var g=b.$events[d];W[f.$id]&&(ma--,delete W[f.$id]);var h=L(c);h.$events[G]=g;xa[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete xa[h.$id]}; +return h}function Z(b,d,c){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+d.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+c;return Function("fn,scope",b)}function Ya(b,d){try{for(;d=d.parentNode;)if(d===b)return!0;return!1}catch(c){return!1}}function Za(){return(new XMLSerializer).serializeToString(this)}function u(b){for(var d in b)if(M.call(b,d)){var c=b[d];if("function"===typeof u.plugins[d])u.plugins[d](c);else"object"===typeof u[d]?avalon.mix(u[d],c):u[d]=c}return this} +function $a(b){return b.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function oa(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function ab(b){if(!("classList"in b)){b.classList={node:b};for(var d in bb)b.classList[d.slice(1)]=bb[d]}return b.classList}function cb(b){try{b="true"===b?!0:"false"===b?!1:"null"===b?null:+b+""===b?+b:$b.test(b)?avalon.parseJSON(b):b}catch(d){}return b}function db(b,d){if(0>=b.offsetWidth){if(ac.test(x["@:get"](b, +"display"))){var c={node:b},e;for(e in eb)c[e]=b.style[e],b.style[e]=eb[e];d.push(c)}(c=b.parentNode)&&1===c.nodeType&&db(c,d)}}function fb(b){var d=b.nodeName;return d.toLowerCase()===d&&b.scopeName&&""===b.outerText}function bc(b){"url(#default#VML)"!==b.currentStyle.behavior&&(b.style.behavior="url(#default#VML)",b.style.display="inline-block",b.style.zoom=1)}function ya(b){Y[z]=b;avalon.openComputedCollect=!0;var d=b.evaluator;if(d)try{var c=cc.test(b.type)?b:d.apply(0,b.args);b.handler(c,b.element, +b)}catch(e){w("warning:exception throwed in [registerSubscriber] "+e),delete b.evaluator,d=b.element,3===d.nodeType&&(c=d.parentNode,u.commentInterpolate?c.replaceChild(q.createComment(b.value),d):d.data=N+b.value+O)}avalon.openComputedCollect=!1;delete Y[z]}function ka(b){var d=Y[z];b&&(d&&avalon.Array.ensure(b,d)&&d.element)&&gb(d,b)}function gb(b,d){b.$uuid=b.$uuid||ha();d.$uuid=d.$uuid||ha();var c={data:b,list:d,toString:function(){return b.$uuid+" "+d.$uuid}};Q[c]||(Q[c]=1,Q.push(c))}function hb(){for(var b= +za,d=za+dc;b"))&&Aa(b,d)}}function Ca(b,d){for(var c=0,e;e=b[c++];)e.vmodels=d,C[e.type](e,d),e.evaluator&&(e.element&&1===e.element.nodeType)&&e.element.removeAttribute(e.name);b.length=0}function qb(b,d){0b&&delete d[c.shift()];return d[e]=f}var c=[];return d}function ra(b,d,c){var e=c.type,f=c.filters?c.filters.join(""):"",g=d.map(function(b){return b.$id.replace(oc,"$1")})+b+e+f,h=pc(b).concat(),l=[],k=[],m=[],n="";d=vb(d);for(var p=0,n=d.length;p>0)-(c.clientLeft>>0),d.pageY=b.clientY+(c.scrollTop>>0)-(c.clientTop>>0),d.wheelDeltaY=d.wheelDelta,d.wheelDeltaX=0);d.timeStamp=new Date-0;d.originalEvent=b;d.preventDefault=function(){b.returnValue=!1}; +d.stopPropagation=function(){b.cancelBubble=!0};return d}function Xb(b){var d=[];d.$id=ha();d.$model=b;d.$events={};d.$events[G]=[];d._=L({length:b.length});d._.$watch("length",function(b,c){d.$fire("length",b,c)});for(var c in P)d[c]=P[c];avalon.mix(d,Ab);return d}function Bb(b,d,c,e){var f=avalon.parseHTML(b.template),g=avalon.slice(f.childNodes);d.appendChild(f);c.$outer=b.$outer;b={nodes:g,vmodels:[c].concat(b.vmodels)};e.push(b)}function Ha(b,d){var c=b.endRepeat,e=[],f=b.element.nextSibling; +if(f!==c){do if(f!==c)e.push(f);else break;while(f=f.nextSibling)}return e[b.group*d]||c}function Cb(b,d,c){d*=c||1;c=[b];for(var e=1,f=H;eu.maxRepeatSize&&da.pop()}b.length=0}function S(){q.body&&(D?(t["ready!"].state=2,D.checkDeps()):Fb.forEach(function(b){b(avalon)}),S=y)}function Gb(){try{A.doScroll("left"),S()}catch(b){setTimeout(Gb)}}var z=new Date-0,G="$"+z,r=this||(0,eval)("this"),Bc=r.require,Cc=r.define,ja=!1,B=/[^, ]+/g,Hb=/\[native code\]/,wa=/^(?:object|array)$/,Ib=/^\[object SVG\w*Element\]$/,Vb=/^\[object (?:Window|DOMWindow|global)\]$/,Ia=Object.prototype,M=Ia.hasOwnProperty,ia=Ia.toString, +K=Array.prototype,$=K.slice,Y={},v=r.dispatchEvent,A=q.documentElement,J=q.getElementsByTagName("head")[0],H=q.createDocumentFragment(),ea=q.createElement("div"),Jb={};"Boolean Number String Function Array Date RegExp Object Error".replace(B,function(b){Jb["[object "+b+"]"]=b.toLowerCase()});avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.type=function(b){return null==b?String(b):"object"===typeof b|| +"function"===typeof b?Jb[ia.call(b)]||"object":typeof b};var V="object"===typeof alert?function(b){try{return/^\s*\bfunction\b/.test(b+"")}catch(d){return!1}}:function(b){return"[object Function]"==ia.call(b)};avalon.isFunction=V;avalon.isWindow=function(b){return!b?!1:b==b.document&&b.document!=b};Xa(r)&&(avalon.isWindow=Xa);for(var Dc in avalon({}))break;var Ec="0"!==Dc;avalon.isPlainObject=function(b,d){if(!b||"object"!==avalon.type(b)||b.nodeType||avalon.isWindow(b))return!1;try{if(b.constructor&& +!M.call(b,"constructor")&&!M.call(b.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(Ec)for(d in b)return M.call(b,d);for(d in b);return void 0===d||M.call(b,d)};Hb.test(Object.getPrototypeOf)&&(avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Ia});avalon.mix=avalon.fn.mix=function(){var b,d,c,e,f,g=arguments[0]||{},h=1,l=arguments.length,k=!1;"boolean"===typeof g&&(k=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&& +(g={});h===l&&(g=this,h--);for(;h 0 Then","\t\t["+b+'] = [__proxy__]([__data__],"'+b+'")',"\tEnd If","\tOn Error Goto 0","\tEnd Property");f.push("End Class");b=f.join("\r\n"); +b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](d,Fc)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var Gc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(Gc,"")}}var Hc=!{toString:null}.propertyIsEnumerable("toString"),Ic=function(){}.propertyIsEnumerable("prototype"),Kb="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), +Jc=Kb.length;Object.keys||(Object.keys=function(b){var d=[],c=Ic&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(c=0;c +arguments.length&&void 0===b)return this;var d=this,c=arguments;return function(){var e=[],f;for(f=1;fe&&(e+=c);ee&&(e=Math.max(0,c+e));0<=e;e--)if(this[e]===b)return e;return-1},forEach:Z("","_",""),filter:Z("r=[],j=0,", +"if(_)r[j++]=this[i]","return r"),map:Z("r=[],","r[i]=_","return r"),some:Z("","if(_)return true","return false"),every:Z("","if(!_)return false","return true")});A.contains||(Node.prototype.contains=function(b){return!!(this.compareDocumentPosition(b)&16)});q.contains||(q.contains=function(b){return Ya(q,b)});if(r.SVGElement){var Lb=q.createElementNS("http://www.w3.org/2000/svg","svg");Lb.innerHTML='';if(!Ib.test(Lb.firstChild)){var Ka=function(b,d){if(b&& +b.childNodes)for(var c=b.childNodes,e=0,f;f=c[e++];)if(f.tagName){var g=q.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());K.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});Ka(f,g);d.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:Za,set:function(b){var d=this.tagName.toLowerCase(),c=this.parentNode;b=avalon.parseHTML(b);"svg"===d?c.insertBefore(b,this):(d=q.createDocumentFragment(),Ka(b,d),c.insertBefore(d, +this));c.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),Ka(b,this))}}})}}!A.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",Za);var N,O,aa,Mb,ub,Nb=/[-.*+?^${}()|[\]\/\\]/g,D=y,T={loader:function(b){r.define= +b?D.define:Cc;r.require=b?D:Bc},interpolate:function(b){N=b[0];O=b[1];if(N===O)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")u.commentInterpolate=!0;else{b=N+"test"+O;ea.innerHTML=b;if(ea.innerHTML!==b&&0<=ea.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");ea.innerHTML=""}b=(N+"").replace(Nb,"\\$&");var d=(O+"").replace(Nb,"\\$&");aa=RegExp(b+"(.*?)"+d);Mb=RegExp(b+"(.*?)"+d,"g");ub=RegExp(b+".*?"+d+"|\\sms-")}};u.debug=!0;u.plugins= +T;u.plugins.interpolate(["{{","}}"]);u.paths={};u.shim={};u.maxRepeatSize=100;avalon.config=u;var bb={_toString:function(){var b=this.node.className;return("string"===typeof b?b:b.baseVal).split(/\s+/).join(" ")},_contains:function(b){return-1<(" "+this+" ").indexOf(" "+b+" ")},_add:function(b){this.contains(b)||this._set(this+" "+b)},_remove:function(b){this._set((" "+this+" ").replace(" "+b+" "," ").trim())},__set:function(b){var d=this.node;"string"===typeof d.className?d.className=b:d.setAttribute("class", +b)}};"add,remove".replace(B,function(b){avalon.fn[b+"Class"]=function(d){var c=this[0];d&&("string"===typeof d&&c&&1===c.nodeType)&&d.replace(/\S+/g,function(d){ab(c)[b](d)});return this}});avalon.fn.mix({hasClass:function(b){var d=this[0]||{};return 1===d.nodeType&&ab(d).contains(b)},toggleClass:function(b,d){for(var c,e=0,f=b.split(/\s+/),g="boolean"===typeof d;c=f[e++];)this[(g?d:!this.hasClass(c))?"addClass":"removeClass"](c);return this},attr:function(b,d){return 2===arguments.length?(this[0].setAttribute(b, +d),this):this[0].getAttribute(b)},data:function(b,d){b="data-"+$a(b||"");switch(arguments.length){case 2:return this.attr(b,d),this;case 1:var c=this.attr(b);return cb(c);case 0:var e={};K.forEach.call(this[0].attributes,function(d){d&&(b=d.name,b.indexOf("data-")||(b=oa(b.slice(5)),e[b]=cb(d.value)))});return e}},removeData:function(b){b="data-"+$a(b);this[0].removeAttribute(b);return this},css:function(b,d){if(avalon.isPlainObject(b))for(var c in b)avalon.css(this,c,b[c]);else var e=avalon.css(this, +b,d);return void 0!==e?e:this},position:function(){var b,d,c=this[0],e={top:0,left:0};if(c)return"fixed"===this.css("position")?d=c.getBoundingClientRect():(b=this.offsetParent(),d=this.offset(),"HTML"!==b[0].tagName&&(e=b.offset()),e.top+=avalon.css(b[0],"borderTopWidth",!0),e.left+=avalon.css(b[0],"borderLeftWidth",!0)),{top:d.top-e.top-avalon.css(c,"marginTop",!0),left:d.left-e.left-avalon.css(c,"marginLeft",!0)}},offsetParent:function(){for(var b=this[0].offsetParent||A;b&&"HTML"!==b.tagName&& +"static"===avalon.css(b,"position");)b=b.offsetParent;return avalon(b||A)},bind:function(b,d,c){if(this[0])return avalon.bind(this[0],b,d,c)},unbind:function(b,d,c){this[0]&&avalon.unbind(this[0],b,d,c);return this},val:function(b){var d=this[0];if(d&&1===d.nodeType){var c=0===arguments.length,e=c?":get":":set",f=La,g;g=d.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(d.type)?"checked":g;if(e=f[g+e])var h=e(d,b);else{if(c)return(d.value||"").replace(/\r/g,"");d.value=b}}return c?h:this}}); +var $b=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Kc=/^[\],:{}\s]*$/,Lc=/(?:^|:|,)(?:\s*\[)+/g,Mc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,Nc=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;avalon.parseJSON=r.JSON?JSON.parse:function(b){if("string"===typeof b){if((b=b.trim())&&Kc.test(b.replace(Mc,"@").replace(Nc,"]").replace(Lc,"")))return(new Function("return "+b))();avalon.error("Invalid JSON: "+b)}};avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,d){avalon.fn[b]=function(c){var e= +this[0]||{},f=e.window&&e.document?e:9===e.nodeType?e.defaultView||e.parentWindow:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?c:avalon(f).scrollLeft(),g?c:avalon(f).scrollTop()):e[b]=c;else return f?d in f?f[d]:A[b]:e[b]}});var x=avalon.cssHooks={},Ob=["","-webkit-","-o-","-moz-","-ms-"],Ma={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=U("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,d,c){if(Ma[b])return Ma[b]; +d=d||A.style;for(var e=0,f=Ob.length;e=c?"alpha(opacity="+100*c+")":"";d=b.filter||"";b.zoom=1;b.filter=(Pb.test(d)?d.replace(Pb,c):d+" "+c).trim();b.filter||b.removeAttribute("filter")};x["opacity:get"]=function(b){b=b.filters.alpha||b.filters["DXImageTransform.Microsoft.Alpha"];return(b&&b.enabled?b.opacity:100)/100+""}}"top,left".replace(B,function(b){x[b+":get"]=function(d){var c=x["@:get"](d,b);return/px$/.test(c)?c:avalon(d).position()[b]+"px"}});var eb={position:"absolute",visibility:"hidden",display:"block"}, +ac=/^(none|table(?!-c[ea]).+)/;"Width,Height".replace(B,function(b){var d=b.toLowerCase(),c="client"+b,e="scroll"+b,f="offset"+b;x[d+":get"]=function(d,c,e){var k=-4;"number"===typeof e&&(k=e);c="Width"===b?["Left","Right"]:["Top","Bottom"];e=d[f];if(2===k)return e+avalon.css(d,"margin"+c[0],!0)+avalon.css(d,"margin"+c[1],!0);0>k&&(e=e-avalon.css(d,"border"+c[0]+"Width",!0)-avalon.css(d,"border"+c[1]+"Width",!0));-4===k&&(e=e-avalon.css(d,"padding"+c[0],!0)-avalon.css(d,"padding"+c[1],!0));return e}; +x[d+"&get"]=function(b){var c=[];db(b,c);for(var e=x[d+":get"](b),f=0,m;m=c[f++];){b=m.node;for(var n in m)"string"===typeof m[n]&&(b.style[n]=m[n])}return e};avalon.fn[d]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[c];if(9===h.nodeType){var l=h.documentElement;return Math.max(h.body[e],l[e],h.body[f],l[f],l[c])}return x[d+"&get"](h)}return this.css(d,g)};avalon.fn["inner"+b]=function(){return x[d+":get"](this[0],void 0,-2)};avalon.fn["outer"+ +b]=function(b){return x[d+":get"](this[0],void 0,!0===b?2:0)}});avalon.fn.offset=function(){var b=this[0],d={left:0,top:0};if(!b||!b.tagName||!b.ownerDocument)return d;var c=b.ownerDocument,e=c.body,f=c.documentElement,c=c.defaultView||c.parentWindow;if(!avalon.contains(f,b))return d;b.getBoundingClientRect&&(d=b.getBoundingClientRect());var b=f.clientTop||e.clientTop,g=f.clientLeft||e.clientLeft,h=Math.max(c.pageYOffset||0,f.scrollTop,e.scrollTop),e=Math.max(c.pageXOffset||0,f.scrollLeft,e.scrollLeft); +return{top:d.top+h-b,left:d.left+e-g}};var Rc=/^]+))?)*\s+value[\s=]/i,La={"option:get":r.VBArray?function(b){return Rc.test(b.outerHTML)?b.value:b.text.trim()}:function(b){return b.value},"select:get":function(b,d){for(var c,e=b.options,f=b.selectedIndex,g=La["option:get"],h="select-one"===b.type||0>f,l=h?null:[],k=h?f+1:e.length,m=0>f?k:h?f:0;m]*)\/>/ig,Qb=v?/[^\d\D]/:/(<(?:script|link|style|meta|noscript))/ig,Uc=U(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),Vc=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,F={area:[1,""],param:[1,""],col:[2,"
", +"
"],legend:[1,"
"],option:[1,"\u4e0a\u8981\u6c42\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"):b.multiple&&w("ms-duplex\u5728 - - From 4f49d6eb2ddc46847b8d64ad85331758fc711a87 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Thu, 30 Oct 2014 20:25:01 +0800 Subject: [PATCH 044/143] update data-include-replace --- avalon.js | 2 +- avalon.min.js | 252 ++++++++++++++++++++--------------------- avalon.modern.js | 53 ++++++--- avalon.modern.min.js | 177 +++++++++++++++-------------- examples/include2.html | 2 +- 5 files changed, 253 insertions(+), 233 deletions(-) diff --git a/avalon.js b/avalon.js index 4b53ed4c5..12af1d3f0 100644 --- a/avalon.js +++ b/avalon.js @@ -2610,7 +2610,7 @@ if (loaded) { text = loaded.apply(target, [text].concat(vmodels)) } - + while (true) { var node = data.startInclude.nextSibling if (node && node !== data.endInclude) { diff --git a/avalon.min.js b/avalon.min.js index 7f14827b6..42f701cc3 100644 --- a/avalon.min.js +++ b/avalon.min.js @@ -1,129 +1,123 @@ -(function(q){function y(){}function w(){r.console&&avalon.config.debug&&Function.apply.call(console.log,console,arguments)}function U(b,d){"string"===typeof b&&(b=b.match(B)||[]);for(var c={},e=void 0!==d?d:1,f=0,g=b.length;fb?Math.max(d+b,0):Math.min(b,d)}function Wb(b,d, -c){if(V(d)||d&&d.nodeType||-1!==c.indexOf(b)||-1!==ta.indexOf(b))return!1;d=c.$special;return b&&"$"===b.charAt(0)&&!d[b]?!1:!0}function L(b,d,c){if(Array.isArray(b)){var e=b.concat();b.length=0;d=Xb(b);d.pushArray(e);return d}if("number"===typeof b.nodeType||b.$id&&b.$model&&b.$events)return b;Array.isArray(b.$skipArray)||(b.$skipArray=[]);b.$skipArray.$special=d||{};var f={};c=c||{};var g={},h={},l=[];for(e in b)(function(d,e){c[d]=e;if(Wb(d,e,b.$skipArray)){var k,s=avalon.type(e);g[d]=[];if("object"=== -s&&V(e.get)&&2>=Object.keys(e).length){var I=e.set,E=e.get;k=function(b){var e=f.$events,g=c[d];if(arguments.length){if(ja)return;if(V(I)){var h=e[d];e[d]=[];I.call(f,b);e[d]=h}}else avalon.openComputedCollect&&ka(e[d]);b=c[d]=E.call(f);if(!la(g,b)){if(ma&&(h=W[f.$id])&&h[d])h[d].$val=b;va(e[d]);f.$events&&P.$fire.call(f,d,b,g)}return b};l.push(function(){Y[z]={evaluator:k,element:J,type:"computed::"+d,handler:y,args:[]};k();ka(g[d]);delete Y[z]})}else wa.test(s)?(k=function(b){var e=k.child,h=c[d]; -if(arguments.length)!ja&&!la(h,b)&&(e=k.child=Yb(f,d,b,s),b=c[d]=e.$model,(e=xa[e.$id])&&e(),f.$events&&P.$fire.call(f,d,b,h));else return ka(g[d]),e},(k.child=L(e,0,c[d])).$events[G]=g[d]):k=function(b){var e=c[d];if(arguments.length){if(!la(e,b)){c[d]=b;if(ma){var h=W[f.$id];h&&h[d]&&(h[d].$val=b)}va(g[d]);f.$events&&P.$fire.call(f,d,b,e)}}else return ka(g[d]),e};h[d]=k}})(e,b[e]);ta.forEach(function(d){delete b[d];delete c[d]});var f=na(f,Zb(h),b),k;for(k in b)h[k]||(f[k]=b[k]);f.$id=ha();f.$model= -c;f.$events=g;for(e in P)d=P[e],v||(d=d.bind(f)),f[e]=d;f.hasOwnProperty=function(b){return b in f.$model};l.forEach(function(b){b()});return f}function Yb(b,d,c,e){var f=b[d];if("array"===e){if(!Array.isArray(c)||f===c)return f;f.clear();f.pushArray(c.concat());return f}var g=b.$events[d];W[f.$id]&&(ma--,delete W[f.$id]);var h=L(c);h.$events[G]=g;xa[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete xa[h.$id]}; -return h}function Z(b,d,c){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+d.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+c;return Function("fn,scope",b)}function Ya(b,d){try{for(;d=d.parentNode;)if(d===b)return!0;return!1}catch(c){return!1}}function Za(){return(new XMLSerializer).serializeToString(this)}function u(b){for(var d in b)if(M.call(b,d)){var c=b[d];if("function"===typeof u.plugins[d])u.plugins[d](c);else"object"===typeof u[d]?avalon.mix(u[d],c):u[d]=c}return this} -function $a(b){return b.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function oa(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function ab(b){if(!("classList"in b)){b.classList={node:b};for(var d in bb)b.classList[d.slice(1)]=bb[d]}return b.classList}function cb(b){try{b="true"===b?!0:"false"===b?!1:"null"===b?null:+b+""===b?+b:$b.test(b)?avalon.parseJSON(b):b}catch(d){}return b}function db(b,d){if(0>=b.offsetWidth){if(ac.test(x["@:get"](b, -"display"))){var c={node:b},e;for(e in eb)c[e]=b.style[e],b.style[e]=eb[e];d.push(c)}(c=b.parentNode)&&1===c.nodeType&&db(c,d)}}function fb(b){var d=b.nodeName;return d.toLowerCase()===d&&b.scopeName&&""===b.outerText}function bc(b){"url(#default#VML)"!==b.currentStyle.behavior&&(b.style.behavior="url(#default#VML)",b.style.display="inline-block",b.style.zoom=1)}function ya(b){Y[z]=b;avalon.openComputedCollect=!0;var d=b.evaluator;if(d)try{var c=cc.test(b.type)?b:d.apply(0,b.args);b.handler(c,b.element, -b)}catch(e){w("warning:exception throwed in [registerSubscriber] "+e),delete b.evaluator,d=b.element,3===d.nodeType&&(c=d.parentNode,u.commentInterpolate?c.replaceChild(q.createComment(b.value),d):d.data=N+b.value+O)}avalon.openComputedCollect=!1;delete Y[z]}function ka(b){var d=Y[z];b&&(d&&avalon.Array.ensure(b,d)&&d.element)&&gb(d,b)}function gb(b,d){b.$uuid=b.$uuid||ha();d.$uuid=d.$uuid||ha();var c={data:b,list:d,toString:function(){return b.$uuid+" "+d.$uuid}};Q[c]||(Q[c]=1,Q.push(c))}function hb(){for(var b= -za,d=za+dc;b"))&&Aa(b,d)}}function Ca(b,d){for(var c=0,e;e=b[c++];)e.vmodels=d,C[e.type](e,d),e.evaluator&&(e.element&&1===e.element.nodeType)&&e.element.removeAttribute(e.name);b.length=0}function qb(b,d){0b&&delete d[c.shift()];return d[e]=f}var c=[];return d}function ra(b,d,c){var e=c.type,f=c.filters?c.filters.join(""):"",g=d.map(function(b){return b.$id.replace(oc,"$1")})+b+e+f,h=pc(b).concat(),l=[],k=[],m=[],n="";d=vb(d);for(var p=0,n=d.length;p>0)-(c.clientLeft>>0),d.pageY=b.clientY+(c.scrollTop>>0)-(c.clientTop>>0),d.wheelDeltaY=d.wheelDelta,d.wheelDeltaX=0);d.timeStamp=new Date-0;d.originalEvent=b;d.preventDefault=function(){b.returnValue=!1}; -d.stopPropagation=function(){b.cancelBubble=!0};return d}function Xb(b){var d=[];d.$id=ha();d.$model=b;d.$events={};d.$events[G]=[];d._=L({length:b.length});d._.$watch("length",function(b,c){d.$fire("length",b,c)});for(var c in P)d[c]=P[c];avalon.mix(d,Ab);return d}function Bb(b,d,c,e){var f=avalon.parseHTML(b.template),g=avalon.slice(f.childNodes);d.appendChild(f);c.$outer=b.$outer;b={nodes:g,vmodels:[c].concat(b.vmodels)};e.push(b)}function Ha(b,d){var c=b.endRepeat,e=[],f=b.element.nextSibling; -if(f!==c){do if(f!==c)e.push(f);else break;while(f=f.nextSibling)}return e[b.group*d]||c}function Cb(b,d,c){d*=c||1;c=[b];for(var e=1,f=H;eu.maxRepeatSize&&da.pop()}b.length=0}function S(){q.body&&(D?(t["ready!"].state=2,D.checkDeps()):Fb.forEach(function(b){b(avalon)}),S=y)}function Gb(){try{A.doScroll("left"),S()}catch(b){setTimeout(Gb)}}var z=new Date-0,G="$"+z,r=this||(0,eval)("this"),Bc=r.require,Cc=r.define,ja=!1,B=/[^, ]+/g,Hb=/\[native code\]/,wa=/^(?:object|array)$/,Ib=/^\[object SVG\w*Element\]$/,Vb=/^\[object (?:Window|DOMWindow|global)\]$/,Ia=Object.prototype,M=Ia.hasOwnProperty,ia=Ia.toString, -K=Array.prototype,$=K.slice,Y={},v=r.dispatchEvent,A=q.documentElement,J=q.getElementsByTagName("head")[0],H=q.createDocumentFragment(),ea=q.createElement("div"),Jb={};"Boolean Number String Function Array Date RegExp Object Error".replace(B,function(b){Jb["[object "+b+"]"]=b.toLowerCase()});avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.type=function(b){return null==b?String(b):"object"===typeof b|| -"function"===typeof b?Jb[ia.call(b)]||"object":typeof b};var V="object"===typeof alert?function(b){try{return/^\s*\bfunction\b/.test(b+"")}catch(d){return!1}}:function(b){return"[object Function]"==ia.call(b)};avalon.isFunction=V;avalon.isWindow=function(b){return!b?!1:b==b.document&&b.document!=b};Xa(r)&&(avalon.isWindow=Xa);for(var Dc in avalon({}))break;var Ec="0"!==Dc;avalon.isPlainObject=function(b,d){if(!b||"object"!==avalon.type(b)||b.nodeType||avalon.isWindow(b))return!1;try{if(b.constructor&& -!M.call(b,"constructor")&&!M.call(b.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(Ec)for(d in b)return M.call(b,d);for(d in b);return void 0===d||M.call(b,d)};Hb.test(Object.getPrototypeOf)&&(avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Ia});avalon.mix=avalon.fn.mix=function(){var b,d,c,e,f,g=arguments[0]||{},h=1,l=arguments.length,k=!1;"boolean"===typeof g&&(k=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&& -(g={});h===l&&(g=this,h--);for(;h 0 Then","\t\t["+b+'] = [__proxy__]([__data__],"'+b+'")',"\tEnd If","\tOn Error Goto 0","\tEnd Property");f.push("End Class");b=f.join("\r\n"); -b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](d,Fc)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var Gc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(Gc,"")}}var Hc=!{toString:null}.propertyIsEnumerable("toString"),Ic=function(){}.propertyIsEnumerable("prototype"),Kb="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), -Jc=Kb.length;Object.keys||(Object.keys=function(b){var d=[],c=Ic&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(c=0;c -arguments.length&&void 0===b)return this;var d=this,c=arguments;return function(){var e=[],f;for(f=1;fe&&(e+=c);ee&&(e=Math.max(0,c+e));0<=e;e--)if(this[e]===b)return e;return-1},forEach:Z("","_",""),filter:Z("r=[],j=0,", -"if(_)r[j++]=this[i]","return r"),map:Z("r=[],","r[i]=_","return r"),some:Z("","if(_)return true","return false"),every:Z("","if(!_)return false","return true")});A.contains||(Node.prototype.contains=function(b){return!!(this.compareDocumentPosition(b)&16)});q.contains||(q.contains=function(b){return Ya(q,b)});if(r.SVGElement){var Lb=q.createElementNS("http://www.w3.org/2000/svg","svg");Lb.innerHTML='';if(!Ib.test(Lb.firstChild)){var Ka=function(b,d){if(b&& -b.childNodes)for(var c=b.childNodes,e=0,f;f=c[e++];)if(f.tagName){var g=q.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());K.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});Ka(f,g);d.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:Za,set:function(b){var d=this.tagName.toLowerCase(),c=this.parentNode;b=avalon.parseHTML(b);"svg"===d?c.insertBefore(b,this):(d=q.createDocumentFragment(),Ka(b,d),c.insertBefore(d, -this));c.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),Ka(b,this))}}})}}!A.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",Za);var N,O,aa,Mb,ub,Nb=/[-.*+?^${}()|[\]\/\\]/g,D=y,T={loader:function(b){r.define= -b?D.define:Cc;r.require=b?D:Bc},interpolate:function(b){N=b[0];O=b[1];if(N===O)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")u.commentInterpolate=!0;else{b=N+"test"+O;ea.innerHTML=b;if(ea.innerHTML!==b&&0<=ea.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");ea.innerHTML=""}b=(N+"").replace(Nb,"\\$&");var d=(O+"").replace(Nb,"\\$&");aa=RegExp(b+"(.*?)"+d);Mb=RegExp(b+"(.*?)"+d,"g");ub=RegExp(b+".*?"+d+"|\\sms-")}};u.debug=!0;u.plugins= -T;u.plugins.interpolate(["{{","}}"]);u.paths={};u.shim={};u.maxRepeatSize=100;avalon.config=u;var bb={_toString:function(){var b=this.node.className;return("string"===typeof b?b:b.baseVal).split(/\s+/).join(" ")},_contains:function(b){return-1<(" "+this+" ").indexOf(" "+b+" ")},_add:function(b){this.contains(b)||this._set(this+" "+b)},_remove:function(b){this._set((" "+this+" ").replace(" "+b+" "," ").trim())},__set:function(b){var d=this.node;"string"===typeof d.className?d.className=b:d.setAttribute("class", -b)}};"add,remove".replace(B,function(b){avalon.fn[b+"Class"]=function(d){var c=this[0];d&&("string"===typeof d&&c&&1===c.nodeType)&&d.replace(/\S+/g,function(d){ab(c)[b](d)});return this}});avalon.fn.mix({hasClass:function(b){var d=this[0]||{};return 1===d.nodeType&&ab(d).contains(b)},toggleClass:function(b,d){for(var c,e=0,f=b.split(/\s+/),g="boolean"===typeof d;c=f[e++];)this[(g?d:!this.hasClass(c))?"addClass":"removeClass"](c);return this},attr:function(b,d){return 2===arguments.length?(this[0].setAttribute(b, -d),this):this[0].getAttribute(b)},data:function(b,d){b="data-"+$a(b||"");switch(arguments.length){case 2:return this.attr(b,d),this;case 1:var c=this.attr(b);return cb(c);case 0:var e={};K.forEach.call(this[0].attributes,function(d){d&&(b=d.name,b.indexOf("data-")||(b=oa(b.slice(5)),e[b]=cb(d.value)))});return e}},removeData:function(b){b="data-"+$a(b);this[0].removeAttribute(b);return this},css:function(b,d){if(avalon.isPlainObject(b))for(var c in b)avalon.css(this,c,b[c]);else var e=avalon.css(this, -b,d);return void 0!==e?e:this},position:function(){var b,d,c=this[0],e={top:0,left:0};if(c)return"fixed"===this.css("position")?d=c.getBoundingClientRect():(b=this.offsetParent(),d=this.offset(),"HTML"!==b[0].tagName&&(e=b.offset()),e.top+=avalon.css(b[0],"borderTopWidth",!0),e.left+=avalon.css(b[0],"borderLeftWidth",!0)),{top:d.top-e.top-avalon.css(c,"marginTop",!0),left:d.left-e.left-avalon.css(c,"marginLeft",!0)}},offsetParent:function(){for(var b=this[0].offsetParent||A;b&&"HTML"!==b.tagName&& -"static"===avalon.css(b,"position");)b=b.offsetParent;return avalon(b||A)},bind:function(b,d,c){if(this[0])return avalon.bind(this[0],b,d,c)},unbind:function(b,d,c){this[0]&&avalon.unbind(this[0],b,d,c);return this},val:function(b){var d=this[0];if(d&&1===d.nodeType){var c=0===arguments.length,e=c?":get":":set",f=La,g;g=d.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(d.type)?"checked":g;if(e=f[g+e])var h=e(d,b);else{if(c)return(d.value||"").replace(/\r/g,"");d.value=b}}return c?h:this}}); -var $b=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Kc=/^[\],:{}\s]*$/,Lc=/(?:^|:|,)(?:\s*\[)+/g,Mc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,Nc=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;avalon.parseJSON=r.JSON?JSON.parse:function(b){if("string"===typeof b){if((b=b.trim())&&Kc.test(b.replace(Mc,"@").replace(Nc,"]").replace(Lc,"")))return(new Function("return "+b))();avalon.error("Invalid JSON: "+b)}};avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,d){avalon.fn[b]=function(c){var e= -this[0]||{},f=e.window&&e.document?e:9===e.nodeType?e.defaultView||e.parentWindow:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?c:avalon(f).scrollLeft(),g?c:avalon(f).scrollTop()):e[b]=c;else return f?d in f?f[d]:A[b]:e[b]}});var x=avalon.cssHooks={},Ob=["","-webkit-","-o-","-moz-","-ms-"],Ma={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=U("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,d,c){if(Ma[b])return Ma[b]; -d=d||A.style;for(var e=0,f=Ob.length;e=c?"alpha(opacity="+100*c+")":"";d=b.filter||"";b.zoom=1;b.filter=(Pb.test(d)?d.replace(Pb,c):d+" "+c).trim();b.filter||b.removeAttribute("filter")};x["opacity:get"]=function(b){b=b.filters.alpha||b.filters["DXImageTransform.Microsoft.Alpha"];return(b&&b.enabled?b.opacity:100)/100+""}}"top,left".replace(B,function(b){x[b+":get"]=function(d){var c=x["@:get"](d,b);return/px$/.test(c)?c:avalon(d).position()[b]+"px"}});var eb={position:"absolute",visibility:"hidden",display:"block"}, -ac=/^(none|table(?!-c[ea]).+)/;"Width,Height".replace(B,function(b){var d=b.toLowerCase(),c="client"+b,e="scroll"+b,f="offset"+b;x[d+":get"]=function(d,c,e){var k=-4;"number"===typeof e&&(k=e);c="Width"===b?["Left","Right"]:["Top","Bottom"];e=d[f];if(2===k)return e+avalon.css(d,"margin"+c[0],!0)+avalon.css(d,"margin"+c[1],!0);0>k&&(e=e-avalon.css(d,"border"+c[0]+"Width",!0)-avalon.css(d,"border"+c[1]+"Width",!0));-4===k&&(e=e-avalon.css(d,"padding"+c[0],!0)-avalon.css(d,"padding"+c[1],!0));return e}; -x[d+"&get"]=function(b){var c=[];db(b,c);for(var e=x[d+":get"](b),f=0,m;m=c[f++];){b=m.node;for(var n in m)"string"===typeof m[n]&&(b.style[n]=m[n])}return e};avalon.fn[d]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[c];if(9===h.nodeType){var l=h.documentElement;return Math.max(h.body[e],l[e],h.body[f],l[f],l[c])}return x[d+"&get"](h)}return this.css(d,g)};avalon.fn["inner"+b]=function(){return x[d+":get"](this[0],void 0,-2)};avalon.fn["outer"+ -b]=function(b){return x[d+":get"](this[0],void 0,!0===b?2:0)}});avalon.fn.offset=function(){var b=this[0],d={left:0,top:0};if(!b||!b.tagName||!b.ownerDocument)return d;var c=b.ownerDocument,e=c.body,f=c.documentElement,c=c.defaultView||c.parentWindow;if(!avalon.contains(f,b))return d;b.getBoundingClientRect&&(d=b.getBoundingClientRect());var b=f.clientTop||e.clientTop,g=f.clientLeft||e.clientLeft,h=Math.max(c.pageYOffset||0,f.scrollTop,e.scrollTop),e=Math.max(c.pageXOffset||0,f.scrollLeft,e.scrollLeft); -return{top:d.top+h-b,left:d.left+e-g}};var Rc=/^]+))?)*\s+value[\s=]/i,La={"option:get":r.VBArray?function(b){return Rc.test(b.outerHTML)?b.value:b.text.trim()}:function(b){return b.value},"select:get":function(b,d){for(var c,e=b.options,f=b.selectedIndex,g=La["option:get"],h="select-one"===b.type||0>f,l=h?null:[],k=h?f+1:e.length,m=0>f?k:h?f:0;m]*)\/>/ig,Qb=v?/[^\d\D]/:/(<(?:script|link|style|meta|noscript))/ig,Uc=U(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),Vc=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,F={area:[1,""],param:[1,""],col:[2,"", -"
"],legend:[1,"
"],option:[1,"\u4e0a\u8981\u6c42\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"):b.multiple&&w("ms-duplex\u5728"],thead:[1,"","
"],tr:[2,""],td:[3,"
"],text:[1,'',""],_default:v?[0,""]:[1,"X
"]};G.optgroup=G.option;G.tbody=G.tfoot=G.colgroup=G.caption=G.thead;G.th=G.td;"g,circle,ellipse,line,path,polygon,polyline,text".replace(B,function(b){G[b]=G.text});var Tc=p.createElement("script");avalon.parseHTML=function(b){"string"!== +typeof b&&(b+="");b=b.replace(Qc,"<$1>").trim();var c=(Pc.exec(b)||["",""])[1].toLowerCase(),d=G[c]||G._default,c=I.cloneNode(!1),e=ea,f;v||(b=b.replace(Ob,"
$1"));e.innerHTML=d[1]+b+(d[2]||"");b=e.getElementsByTagName("script");if(b.length)for(var g=0,h;h=b[g++];){var l=h.parentNode,k=h.nextSibling,m=h.text;l.removeChild(h);!s.VBArray&&Rc[h.type]&&(f=Tc.cloneNode(!1),K.forEach.call(h.attributes,function(b){f.setAttribute(b.name,b.value)}),h=f);h.text=m;l.insertBefore(h,k)}for(g= +d[0];g--;e=e.lastChild);if(!v){b=e.getElementsByTagName("br");for(g=0;h=b[g++];)h.className&&"msNoScope"===h.className&&h.parentNode.removeChild(h);b=e.all;for(g=0;h=b[g++];)fb(h)&&$b(h)}for(;d=e.firstChild;)c.appendChild(d);return c};avalon.innerHTML=function(b,c){if(!v&&!Ob.test(c)&&!Sc.test(c))try{b.innerHTML=c;return}catch(d){}var e=this.parseHTML(c);this.clearHTML(b).appendChild(e)};avalon.clearHTML=function(b){for(b.textContent="";b.firstChild;)b.removeChild(b.firstChild);return b};var P={$watch:function(b, +c){if("function"===typeof c){var d=this.$events[b];d?d.push(c):this.$events[b]=[c]}else this.$events=this.$watch.backup;return this},$unwatch:function(b,c){var d=arguments.length;if(0===d)this.$watch.backup=this.$events,this.$events={};else if(1===d)this.$events[b]=[];else for(var d=this.$events[b]||[],e=d.length;0>~--e;)if(d[e]===c)return d.splice(e,1);return this},$fire:function(b){var c;/^(\w+)!(\S+)$/.test(b)&&(c=RegExp.$1,b=RegExp.$2);var d=this.$events,e=$.call(arguments,1);if("up"===c||"down"=== +c||"all"===c){if(d=d.expr&&Pb(d.expr)){var f=[b].concat(e);for(h in avalon.vmodels)if((e=avalon.vmodels[h])&&(e.$events&&e.$events.expr)&&e!==this){var g=Pb(e.$events.expr);if(g&&("all"===c||("down"===c?d.contains(g):g.contains(d))))g._avalon=e}var h=p.getElementsByTagName("*"),l=[];Array.prototype.forEach.call(h,function(b){b._avalon&&(l.push(b._avalon),b._avalon="",b.removeAttribute("_avalon"))});"up"===c&&l.reverse();l.forEach(function(b){b.$fire.apply(b,f)})}}else{c=d[b]||[];for(var d=d.$all|| +[],h=0;g=c[h++];)V(g)&&g.apply(this,e);for(h=0;g=d[h++];)V(g)&&g.apply(this,arguments)}}},Uc=/(\w+)\[(avalonctrl)="(\S+)"\]/,Pb=p.querySelector?function(b){return p.querySelector(b)}:function(b){b=b.match(Uc);for(var c=p.getElementsByTagName(b[1]),d=0,e;e=c[d++];)if(e.getAttribute(b[2])===b[3])return e},ac=/^(duplex|on)$/,Q=[],za=0,bc=200,jb=new Date,ib;avalon.scan=function(b,c){b=b||A;var d=c?[].concat(c):[];lb(b,d)};var fc=U("AREA,BASE,BASEFONT,BR,COL,COMMAND,EMBED,HR,IMG,INPUT,LINK,META,PARAM,SOURCE,TRACK,WBR,NOSCRIPT,SCRIPT,STYLE,TEXTAREA"), +cc=v?30:50,sb=/ms-(\w+)-?(.*)/,tb={"if":10,repeat:90,data:100,widget:110,each:1400,"with":1500,duplex:2E3,on:3E3},ec=U("animationend,blur,change,input,click,dblclick,focus,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,mouseover,mouseup,scan,scroll,submit");if(!"1"[0])var Oa=Da(512),Vc=/\s+(ms-[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,Wc=/^['"]/,Xc=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/i,Yc=/&/g,rb=function(b){b=b.outerHTML;if(".avalonHide{ display: none!important }";var ed=/(?:[\s\S]+?)<\/noscript>/img,fd=/([\s\S]+?)<\/noscript>/im,Ra=function(){return new (s.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP")},fa=function(b,c,d){if(b=b.getAttribute(c)){c=0;for(var e;e=d[c++];)if(e.hasOwnProperty(b)&&"function"===typeof e[b])return e[b]}},Sa=avalon.templateCache={};avalon.contains=Ya;var Ta={};"autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelectedcontentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected".replace(B, +function(b){Ta[b.toLowerCase()]=b});var Fa=avalon.bindingExecutors={attr:function(b,c,d){var e=d.type,f=d.param;if("css"===e)avalon(c).css(f,b);else if("attr"===e){if(Ta[f]&&(e=Ta[f],"boolean"===typeof c[e]))return c[e]=!!b;if(!v&&Qa[f])var f=Qa[f],g=!0;if(!1===b||null===b||void 0===b)return c.removeAttribute(f);s.VBArray&&!g&&(fb(c)?g=!0:Gb.test(c)||(g=(g=(c.attributes||{})[f])?!1===g.expando:null===g));g?c[f]=b:c.setAttribute(f,b)}else if("include"===e&&b){var h=d.vmodels,l=d.includeRendered,k= +d.includeLoaded,m=d.includeReplaced?c.parentNode:c,n=function(b){for(k&&(b=k.apply(m,[b].concat(h)));;){var c=d.startInclude.nextSibling;if(c&&c!==d.endInclude)m.removeChild(c);else break}b=avalon.parseHTML(b);m.insertBefore(b,d.endInclude);Aa(b,h);l&&kb(m,function(){l.call(m)})};if("src"===d.param)if(Sa[b])avalon.nextTick(function(){n(Sa[b])});else{var q=Ra();q.onreadystatechange=function(){if(4===q.readyState){var c=q.status;if(200<=c&&300>c||304===c||1223===c)n(Sa[b]=q.responseText)}};q.open("GET", +b,!0);"withCredentials"in q&&(q.withCredentials=!0);q.setRequestHeader("X-Requested-With","XMLHttpRequest");q.send(null)}else{var r=b&&1===b.nodeType?b:p.getElementById(b);if(r){if("NOSCRIPT"===r.tagName&&!r.innerHTML&&!r.fixIE78){q=Ra();q.open("GET",location,!1);q.send(null);c=p.getElementsByTagName("noscript");f=(q.responseText||"").match(ed)||[];g=f.length;for(e=0;e\u4e0a\u8981\u6c42\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"):b.multiple&&w("ms-duplex\u5728
","
"],legend:[1,"
"], -option:[1,""],thead:[1,"","
"],tr:[2,""],td:[3,"
"],text:[1,'',""],_default:[0,""]};s.optgroup=s.option;s.tbody=s.tfoot=s.colgroup=s.caption=s.thead;s.th=s.td;s.circle=s.ellipse=s.line=s.path=s.polygon=s.polyline=s.rect=s.text;var ac=n.createElement("script");avalon.parseHTML=function(b){"string"!==typeof b&&(b+="");b=b.replace(sb,"<$1>").trim();var c=(rb.exec(b)|| ["",""])[1].toLowerCase(),d=s[c]||s._default,c=I.cloneNode(!1),e=da,f;e.innerHTML=d[1]+b+(d[2]||"");b=e.getElementsByTagName("script");if(b.length)for(var g=0,h;h=b[g++];)$b[h.type]&&(f=ac.cloneNode(!1),N.forEach.call(h.attributes,function(b){f.setAttribute(b.name,b.value)}),f.text=h.text,h.parentNode.replaceChild(f,h));for(g=d[0];g--;e=e.lastChild);for(;d=e.firstChild;)c.appendChild(d);return c};avalon.innerHTML=function(b,c){if(!/ + ";var ed=/(?:[\s\S]+?)<\/noscript>/img,fd=/([\s\S]+?)<\/noscript>/im,Ra=function(){return new (s.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP")},fa=function(b,c,d){if(b=b.getAttribute(c)){c=0;for(var e;e=d[c++];)if(e.hasOwnProperty(b)&&"function"===typeof e[b])return e[b]}},Sa=avalon.templateCache={};avalon.contains=Ya;var Ta={};"autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelectedcontentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected".replace(B, -function(b){Ta[b.toLowerCase()]=b});var Fa=avalon.bindingExecutors={attr:function(b,c,d){var e=d.type,f=d.param;if("css"===e)avalon(c).css(f,b);else if("attr"===e){if(Ta[f]&&(e=Ta[f],"boolean"===typeof c[e]))return c[e]=!!b;if(!v&&Qa[f])var f=Qa[f],g=!0;if(!1===b||null===b||void 0===b)return c.removeAttribute(f);s.VBArray&&!g&&(fb(c)?g=!0:Gb.test(c)||(g=(g=(c.attributes||{})[f])?!1===g.expando:null===g));g?c[f]=b:c.setAttribute(f,b)}else if("include"===e&&b){var h=d.vmodels,l=d.includeRendered,k= -d.includeLoaded,m=d.includeReplaced?c.parentNode:c,n=function(b){for(k&&(b=k.apply(m,[b].concat(h)));;){var c=d.startInclude.nextSibling;if(c&&c!==d.endInclude)m.removeChild(c);else break}b=avalon.parseHTML(b);m.insertBefore(b,d.endInclude);Aa(b,h);l&&kb(m,function(){l.call(m)})};if("src"===d.param)if(Sa[b])avalon.nextTick(function(){n(Sa[b])});else{var q=Ra();q.onreadystatechange=function(){if(4===q.readyState){var c=q.status;if(200<=c&&300>c||304===c||1223===c)n(Sa[b]=q.responseText)}};q.open("GET", -b,!0);"withCredentials"in q&&(q.withCredentials=!0);q.setRequestHeader("X-Requested-With","XMLHttpRequest");q.send(null)}else{var r=b&&1===b.nodeType?b:p.getElementById(b);if(r){if("NOSCRIPT"===r.tagName&&!r.innerHTML&&!r.fixIE78){q=Ra();q.open("GET",location,!1);q.send(null);c=p.getElementsByTagName("noscript");f=(q.responseText||"").match(ed)||[];g=f.length;for(e=0;e]+))?)*\s+value[\s=]/i,Ma={"option:get":r.VBArray?function(b){return Pc.test(b.outerHTML)?b.value:b.text.trim()}:function(b){return b.value},"select:get":function(b,c){for(var d,e=b.options,f=b.selectedIndex,g=Ma["option:get"],h="select-one"===b.type||0>f,l=h?null:[],k=h?f+1:e.length,m=0>f?k:h?f:0;m]*)\/>/ig,Pb=v?/[^\d\D]/:/(<(?:script|link|style|meta|noscript))/ig,Sc=Q(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),Tc=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,E={area:[1,""],param:[1,""],col:[2,"
", +"
"],legend:[1,"
"],option:[1,"\u4e0d\u80fd\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4");d=Array.isArray(d)?d.map(String):d+"";d+""!==b.oldValue&&(e.val(d),b.oldValue=d+"")};d.bound("change",function(){if(!1!==e.data("duplex-observe")){var g=e.val(),g=Array.isArray(g)?g.map(function(b){return f.get(b, -d)}):f.get(g,d);g+""!==b.oldValue&&c(g);d.changed.call(b,g)}});var g=NaN,h=setInterval(function(){var e=b.innerHTML;e===g?(clearInterval(h),ya(d),d.changed.call(b,c())):g=e},20)};X.TEXTAREA=X.INPUT;var ga=avalon.eventHooks;"onmouseenter"in A||avalon.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(b,c){ga[b]={type:c,deel:function(c,e){return function(f){var g=f.relatedTarget;if(!g||g!==c&&!(c.compareDocumentPosition(g)&16))return delete f.type,f.type=b,e.call(c,f)}}}});avalon.each({AnimationEvent:"animationend", -WebKitAnimationEvent:"webkitAnimationEnd"},function(b,c){s[b]&&!ga.animationend&&(ga.animationend={type:c})});"oninput"in p.createElement("input")||(ga.input={type:"propertychange",deel:function(b,c){return function(d){if("value"===d.propertyName)return d.type="input",c.call(b,d)}}});if(void 0===p.onmousewheel){var Sb=void 0!==p.onwheel?"wheel":"DOMMouseScroll",gd="wheel"===Sb?"deltaY":"detail";ga.mousewheel={type:Sb,deel:function(b,c){return function(d){d.wheelDeltaY=d.wheelDelta=0\u4e0a\u8981\u6c42\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"):b.multiple&&w("ms-duplex\u5728"],thead:[1,"","
"],tr:[2,""],td:[3,"
"],text:[1,'',""],_default:[0,""]};s.optgroup=s.option;s.tbody=s.tfoot=s.colgroup=s.caption=s.thead;s.th=s.td;s.circle=s.ellipse=s.line=s.path=s.polygon=s.polyline=s.rect=s.text;var ac=n.createElement("script");avalon.parseHTML=function(b){"string"!==typeof b&&(b+="");b=b.replace(sb,"<$1>").trim();var c=(rb.exec(b)|| -["",""])[1].toLowerCase(),d=s[c]||s._default,c=I.cloneNode(!1),e=da,f;e.innerHTML=d[1]+b+(d[2]||"");b=e.getElementsByTagName("script");if(b.length)for(var g=0,h;h=b[g++];)$b[h.type]&&(f=ac.cloneNode(!1),N.forEach.call(h.attributes,function(b){f.setAttribute(b.name,b.value)}),f.text=h.text,h.parentNode.replaceChild(f,h));for(g=d[0];g--;e=e.lastChild);for(;d=e.firstChild;)c.appendChild(d);return c};avalon.innerHTML=function(b,c){if(!/ + + + +
+ +
+ + From aa31eb0a1227d731325c59172ee18b88d7949641 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Mon, 3 Nov 2014 19:01:28 +0800 Subject: [PATCH 060/143] update data-duplex-required --- avalon.validation.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/avalon.validation.js b/avalon.validation.js index cccc239e4..b61959987 100644 --- a/avalon.validation.js +++ b/avalon.validation.js @@ -391,11 +391,25 @@ define(["avalon"], function(avalon) { get: function(val, data) { var elem = data.element var trim = elem.getAttribute("data-duplex-trim") - if (elem.type !== 'password' && (!trim || trim !== 'false')) { + if (elem.type !== "password" && (!trim || trim === "true")) { val = String(val || "").trim() } return val } + }, + required: { + get: function(val, data) { + var elem = data.element + var h5Required = !!elem.getAttribute("required") + var msRequired = elem.getAttribute("data-duplex-required") === "true" + if (h5Required || msRequired) { + delete data.error.required + if (!val || !String(val).length) { + data.error.required = true + } + } + return val + } } }) From 3f6801ba549e3895c391a3d1057fc32025da3633 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Mon, 3 Nov 2014 20:35:07 +0800 Subject: [PATCH 061/143] update avalon.validation.js --- avalon.validation.js | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/avalon.validation.js b/avalon.validation.js index b61959987..ca20a97df 100644 --- a/avalon.validation.js +++ b/avalon.validation.js @@ -389,9 +389,7 @@ define(["avalon"], function(avalon) { avalon.mix(avalon.duplexHooks, { trim: { get: function(val, data) { - var elem = data.element - var trim = elem.getAttribute("data-duplex-trim") - if (elem.type !== "password" && (!trim || trim === "true")) { + if (data.element.type !== "password") { val = String(val || "").trim() } return val @@ -399,14 +397,9 @@ define(["avalon"], function(avalon) { }, required: { get: function(val, data) { - var elem = data.element - var h5Required = !!elem.getAttribute("required") - var msRequired = elem.getAttribute("data-duplex-required") === "true" - if (h5Required || msRequired) { - delete data.error.required - if (!val || !String(val).length) { - data.error.required = true - } + delete data.error.required + if (!val || !String(val).length) { + data.error.required = true } return val } From 43fa49292680bc29ce33feffb455cbc9dd604905 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Mon, 3 Nov 2014 21:07:23 +0800 Subject: [PATCH 062/143] update avalon --- avalon.validation.js | 1 + 1 file changed, 1 insertion(+) diff --git a/avalon.validation.js b/avalon.validation.js index ca20a97df..1597ba9c7 100644 --- a/avalon.validation.js +++ b/avalon.validation.js @@ -455,4 +455,5 @@ define(["avalon"], function(avalon) { validationHooks: {} } //http://bootstrapvalidator.com/ +//https://github.com/rinh/jvalidator/blob/master/src/index.js }) \ No newline at end of file From 6f6fc3d7f04ff85cb224e9ea78fd8234b5b72d42 Mon Sep 17 00:00:00 2001 From: qincheng Date: Tue, 4 Nov 2014 00:39:32 +0800 Subject: [PATCH 063/143] update validate --- avalon.validation.js | 48 ++++++++++++++++++++++++++++++++++++-------- test.html | 6 +----- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/avalon.validation.js b/avalon.validation.js index 1597ba9c7..6a71e7023 100644 --- a/avalon.validation.js +++ b/avalon.validation.js @@ -396,16 +396,35 @@ define(["avalon"], function(avalon) { } }, required: { - get: function(val, data) { - delete data.error.required - if (!val || !String(val).length) { - data.error.required = true - } + get: function(val, data, next) { + next(!val || !String(val).length) + return val + } + }, + minlength: { + get: function(val, data, next) { + var elem = data.element + var a = parseInt(elem.getAttribute("minlength"), 10) + var b = parseInt(elem.getAttribute("data-duplex-minlength"), 10) + var num = a || b + next(val.length >= num) + return val + } + }, + pattern: { + get: function(val, data, next) { + var elem = data.element + var h5pattern = elem.getAttribute("pattern") + var mspattern = elem.getAttribute("data-duplex-pattern") + var pattern = h5pattern || mspattern + var re = new RegExp('^(?:' + pattern + ')$') + next(re.test(val)) return val } } }) - +// +// var widget = avalon.ui.validation = function(element, data, vmodels) { var options = data.validationOptions @@ -426,19 +445,32 @@ define(["avalon"], function(avalon) { vm.pipe = function(val, data, action) { var inwardHooks = vmodel.validationHooks var globalHooks = avalon.duplexHooks + var stack = [] + var elem = data.element data.param.replace(/\w+/g, function(name) { var hook = inwardHooks[name] || globalHooks[name] if (hook && typeof hook[action] === "function") { - val = hook[action](val, data) + function next(a) { + if (!elem.disabled) { + stack.push([a, hook]) + } + } + val = hook[action](val, data, next) } }) + if (stack.length) {//如果stack不为空,说明经过验证拦截器 + //stack为一个二维数组,子数组有两个元素, + //第一个表示结果(true, false 或 thenable对象),第二个为hook对象 + console.log(stack) + } + // console.log(stack) return val } vm.$watch("init-ms-duplex", function(data) { if (typeof data.pipe !== "function" && avalon.contains(element, data.element)) { data.pipe = vm.pipe vm.elements.push(data) - avalon.log(data) + // avalon.log(data) return false } diff --git a/test.html b/test.html index a3a1a6612..fd1e33f6e 100644 --- a/test.html +++ b/test.html @@ -14,10 +14,6 @@ validation: function(){ } - - }) - vmodel.$watch("aaa", function(a) { - console.log(a+"!") }) avalon.scan() }) @@ -26,7 +22,7 @@
- +
From 9f6c48bafafbecf90d8ae8b95569d1ff05118226 Mon Sep 17 00:00:00 2001 From: qincheng Date: Tue, 4 Nov 2014 01:14:04 +0800 Subject: [PATCH 064/143] update avalon --- avalon.validation.js | 60 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/avalon.validation.js b/avalon.validation.js index 6a71e7023..e37fecb92 100644 --- a/avalon.validation.js +++ b/avalon.validation.js @@ -386,6 +386,7 @@ define(["avalon"], function(avalon) { })(document, window.dispatchEvent) } //==========================avalon.validation的专有逻辑======================== + avalon.mix(avalon.duplexHooks, { trim: { get: function(val, data) { @@ -396,12 +397,14 @@ define(["avalon"], function(avalon) { } }, required: { + message: '必须填写', get: function(val, data, next) { - next(!val || !String(val).length) + next(val !== "") return val } }, minlength: { + message: '最少输入%argu个字', get: function(val, data, next) { var elem = data.element var a = parseInt(elem.getAttribute("minlength"), 10) @@ -411,6 +414,52 @@ define(["avalon"], function(avalon) { return val } }, + maxlength: { + message: '最多输入%argu个字', + get: function(val, data, next) { + var elem = data.element + var a = parseInt(elem.getAttribute("maxlength"), 10) + var b = parseInt(elem.getAttribute("data-duplex-maxlength"), 10) + var num = a || b + next(val.length <= num) + return val + } + }, + "int": { + message: "必须是整数", + get: function(val, data, next) { + next(/^\-?\d+$/.test(val)) + return val + } + }, + email: { + message: "邮件地址错误", + get: function(val, data, next) { + next(/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i.test(val)) + return val + } + }, + url: { + message: "URL格式错误", + get: function(val, data, next) { + next(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/.test(val)) + return val + } + }, + date: { + message: '必须符合日期格式 YYYY-MM-DD', + get: function(val, data, next) { + next(/^\d\d\d\d\-\d\d\-\d\d$/.test(val)) + return val + } + }, + passport: { + message: '护照格式错误或过长', + get: function(val, data, next) { + next(/^[a-zA-Z0-9]{0,20}$/i.test(val)) + return val + } + }, pattern: { get: function(val, data, next) { var elem = data.element @@ -434,6 +483,7 @@ define(["avalon"], function(avalon) { vm.widgetElement = element vm.elements = [] vm.$init = function() { + element.setAttribute( "novalidate", "novalidate" ); avalon.scan(element, [vmodel].concat(vmodels)) avalon.log("avalon validation init") if (typeof options.onInit === "function") { @@ -452,7 +502,7 @@ define(["avalon"], function(avalon) { if (hook && typeof hook[action] === "function") { function next(a) { if (!elem.disabled) { - stack.push([a, hook]) + stack.push([a, name]) } } val = hook[action](val, data, next) @@ -460,17 +510,17 @@ define(["avalon"], function(avalon) { }) if (stack.length) {//如果stack不为空,说明经过验证拦截器 //stack为一个二维数组,子数组有两个元素, - //第一个表示结果(true, false 或 thenable对象),第二个为hook对象 + //第一个表示结果(true, false 或 thenable对象),第二个为验证规则 console.log(stack) } - // console.log(stack) + // console.log(stack) return val } vm.$watch("init-ms-duplex", function(data) { if (typeof data.pipe !== "function" && avalon.contains(element, data.element)) { data.pipe = vm.pipe vm.elements.push(data) - // avalon.log(data) + // avalon.log(data) return false } From cb54dfccc0700eb22382a71bb035eb7dcd72205d Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Tue, 4 Nov 2014 11:06:22 +0800 Subject: [PATCH 065/143] update avalon --- avalon.js | 15 +-- avalon.min.js | 222 +++++++++++++++++++++---------------------- avalon.modern.js | 12 +-- avalon.modern.min.js | 209 ++++++++++++++++++++-------------------- 4 files changed, 222 insertions(+), 236 deletions(-) diff --git a/avalon.js b/avalon.js index 7fd79dd17..fdcb3d875 100644 --- a/avalon.js +++ b/avalon.js @@ -5,7 +5,7 @@ http://weibo.com/jslouvre/ Released under the MIT license - avalon 1.3.6 2014.10.30 support IE6+ and other browsers + avalon 1.3.6 2014.11.4 support IE6+ and other browsers ==================================================*/ (function(DOC) { /********************************************************************* @@ -1828,7 +1828,7 @@ if (special === "up") { alls.reverse() } - for (var i = 0, el; el = all[i++]; ) { + for (var i = 0, el; el = alls[i++]; ) { if (el.$fire.apply(el, detail) === false) { break } @@ -3053,7 +3053,6 @@ var params = [] var casting = oneObject("string,number,boolean,checked") var hasCast - data.error = {} data.param.replace(/\w+/g, function(name) { if ((elem.type === "radio" && data.param === "") || (elem.type === "checkbox" && name === "radio")) { log(elem.type + "控件如果想通过checked属性同步VM,请改用ms-duplex-checked,以后ms-duplex默认是使用value属性同步VM") @@ -3334,14 +3333,8 @@ set: fixNull }, number: { - get: function(val, data) { - delete data.error.number - if (isFinite(val)) { - return parseFloat(val) || 0 - } else { - data.error.number = true - return val - } + get: function(val) { + return isFinite(val) ? parseFloat(val) || 0: val }, set: fixNull } diff --git a/avalon.min.js b/avalon.min.js index 806daa429..bfc904d85 100644 --- a/avalon.min.js +++ b/avalon.min.js @@ -1,124 +1,124 @@ -(function(q){function y(){}function w(){r.console&&avalon.config.debug&&Function.apply.call(console.log,console,arguments)}function Q(b,c){"string"===typeof b&&(b=b.match(z)||[]);for(var d={},e=void 0!==c?c:1,f=0,g=b.length;fb?Math.max(c+b,0):Math.min(b,c)}function Vb(b,c, -d){if(W(c)||c&&c.nodeType||-1!==d.indexOf(b)||-1!==ua.indexOf(b))return!1;c=d.$special;return b&&"$"===b.charAt(0)&&!c[b]?!1:!0}function L(b,c,d){if(Array.isArray(b)){var e=b.concat();b.length=0;c=Wb(b);c.pushArray(e);return c}if("number"===typeof b.nodeType||b.$id&&b.$model&&b.$events)return b;Array.isArray(b.$skipArray)||(b.$skipArray=[]);b.$skipArray.$special=c||{};var f={};d=d||{};var g={},h={},l=[];for(e in b)(function(c,e){d[c]=e;if(Vb(c,e,b.$skipArray)){var k,t=avalon.type(e);g[c]=[];if("object"=== -t&&W(e.get)&&2>=Object.keys(e).length){var H=e.set,F=e.get;k=function(b){var e=f.$events,g=d[c];if(arguments.length){if(ka)return;if(W(H)){var h=e[c];e[c]=[];H.call(f,b);e[c]=h}}else avalon.openComputedCollect&&la(e[c]);b=d[c]=F.call(f);if(!ma(g,b)){if(na&&(h=X[f.$id])&&h[c])h[c].$val=b;wa(e[c]);f.$events&&R.$fire.call(f,c,b,g)}return b};l.push(function(){Z[A]={evaluator:k,element:J,type:"computed::"+c,handler:y,args:[]};k();la(g[c]);delete Z[A]})}else xa.test(t)?(k=function(b){var e=k.child,h=d[c]; -if(arguments.length)!ka&&!ma(h,b)&&(e=k.child=Xb(f,c,b,t),b=d[c]=e.$model,(e=ya[e.$id])&&e(),f.$events&&R.$fire.call(f,c,b,h));else return la(g[c]),e},(k.child=L(e,0,d[c])).$events[G]=g[c]):k=function(b){var e=d[c];if(arguments.length){if(!ma(e,b)){d[c]=b;if(na){var h=X[f.$id];h&&h[c]&&(h[c].$val=b)}wa(g[c]);f.$events&&R.$fire.call(f,c,b,e)}}else return la(g[c]),e};h[c]=k}})(e,b[e]);ua.forEach(function(c){delete b[c];delete d[c]});var f=oa(f,Yb(h),b),k;for(k in b)h[k]||(f[k]=b[k]);f.$id=ia();f.$model= -d;f.$events=g;for(e in R)c=R[e],v||(c=c.bind(f)),f[e]=c;f.hasOwnProperty=function(b){return b in f.$model};l.forEach(function(b){b()});return f}function Xb(b,c,d,e){var f=b[c];if("array"===e){if(!Array.isArray(d)||f===d)return f;f.clear();f.pushArray(d.concat());return f}var g=b.$events[c];X[f.$id]&&(na--,delete X[f.$id]);var h=L(d);h.$events[G]=g;ya[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete ya[h.$id]}; -return h}function $(b,c,d){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+c.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+d;return Function("fn,scope",b)}function Za(b,c){try{for(;c=c.parentNode;)if(c===b)return!0;return!1}catch(d){return!1}}function $a(){return(new XMLSerializer).serializeToString(this)}function u(b){for(var c in b)if(M.call(b,c)){var d=b[c];if("function"===typeof u.plugins[c])u.plugins[c](d);else"object"===typeof u[c]?avalon.mix(u[c],d):u[c]=d}return this} -function ab(b){return b.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function pa(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function bb(b){if(!("classList"in b)){b.classList={node:b};for(var c in cb)b.classList[c.slice(1)]=cb[c]}return b.classList}function db(b){try{b="true"===b?!0:"false"===b?!1:"null"===b?null:+b+""===b?+b:Zb.test(b)?avalon.parseJSON(b):b}catch(c){}return b}function eb(b,c){if(0>=b.offsetWidth){if($b.test(x["@:get"](b, -"display"))){var d={node:b},e;for(e in fb)d[e]=b.style[e],b.style[e]=fb[e];c.push(d)}(d=b.parentNode)&&1===d.nodeType&&eb(d,c)}}function gb(b){var c=b.nodeName;return c.toLowerCase()===c&&b.scopeName&&""===b.outerText}function ac(b){"url(#default#VML)"!==b.currentStyle.behavior&&(b.style.behavior="url(#default#VML)",b.style.display="inline-block",b.style.zoom=1)}function za(b){Z[A]=b;avalon.openComputedCollect=!0;var c=b.evaluator;if(c)try{var d=bc.test(b.type)?b:c.apply(0,b.args);b.handler(d,b.element, -b)}catch(e){w("warning:exception throwed in [registerSubscriber] "+e),delete b.evaluator,c=b.element,3===c.nodeType&&(d=c.parentNode,u.commentInterpolate?d.replaceChild(q.createComment(b.value),c):c.data=N+b.value+O)}avalon.openComputedCollect=!1;delete Z[A]}function la(b){var c=Z[A];b&&(c&&avalon.Array.ensure(b,c)&&c.element)&&hb(c,b)}function hb(b,c){b.$uuid=b.$uuid||ia();c.$uuid=c.$uuid||ia();var d={data:b,list:c,toString:function(){return b.$uuid+" "+c.$uuid}};S[d]||(S[d]=1,S.push(d))}function ib(){for(var b= -Aa,c=Aa+cc;b"))&&ob(b,c)}}function Da(b,c){for(var d=0,e;e=b[d++];)e.vmodels=c,C[e.type](e,c),e.evaluator&&(e.element&&1===e.element.nodeType)&&e.element.removeAttribute(e.name);b.length=0}function rb(b,c){0b&&delete c[d.shift()];return c[e]=f}var d=[];return c}function sa(b,c,d){var e=d.type,f=d.filters?d.filters.join(""):"",g=c.map(function(b){return b.$id.replace(nc,"$1")})+b+e+f,h=oc(b).concat(),l=[],k=[],m=[],n="";c=wb(c);for(var p=0,n=c.length;p>0)-(d.clientLeft>>0),c.pageY=b.clientY+(d.scrollTop>>0)-(d.clientTop>>0),c.wheelDeltaY=c.wheelDelta,c.wheelDeltaX=0);c.timeStamp=new Date-0;c.originalEvent=b;c.preventDefault=function(){b.returnValue=!1};c.stopPropagation=function(){b.cancelBubble=!0};return c}function Wb(b){var c=[];c.$id=ia();c.$model=b;c.$events={};c.$events[G]= -[];c._=L({length:b.length});c._.$watch("length",function(b,d){c.$fire("length",b,d)});for(var d in R)c[d]=R[d];avalon.mix(c,zb);return c}function Ab(b,c,d,e){var f=avalon.parseHTML(b.template),g=avalon.slice(f.childNodes);c.appendChild(f);d.$outer=b.$outer;b={nodes:g,vmodels:[d].concat(b.vmodels)};e.push(b)}function Ia(b,c){var d=b.endRepeat,e=[],f=b.element.nextSibling;if(f!==d){do if(f!==d)e.push(f);else break;while(f=f.nextSibling)}return e[b.group*c]||d}function Bb(b,c,d){c*=d||1;d=[b];for(var e= -1,f=I;eu.maxRepeatSize&&ea.pop()}b.length=0}function U(){q.body&&(D?(s["ready!"].state= -2,D.checkDeps()):Eb.forEach(function(b){b(avalon)}),U=y)}function Fb(){try{B.doScroll("left"),U()}catch(b){setTimeout(Fb)}}var A=new Date-0,G="$"+A,r=this||(0,eval)("this"),zc=r.require,Ac=r.define,ka=!1,z=/[^, ]+/g,Gb=/\[native code\]/,xa=/^(?:object|array)$/,Hb=/^\[object SVG\w*Element\]$/,Ub=/^\[object (?:Window|DOMWindow|global)\]$/,Ja=Object.prototype,M=Ja.hasOwnProperty,ja=Ja.toString,K=Array.prototype,aa=K.slice,Z={},v=r.dispatchEvent,B=q.documentElement,J=q.getElementsByTagName("head")[0], -I=q.createDocumentFragment(),fa=q.createElement("div"),Ib={};"Boolean Number String Function Array Date RegExp Object Error".replace(z,function(b){Ib["[object "+b+"]"]=b.toLowerCase()});avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.type=function(b){return null==b?String(b):"object"===typeof b||"function"===typeof b?Ib[ja.call(b)]||"object":typeof b};var W="object"===typeof alert?function(b){try{return/^\s*\bfunction\b/.test(b+ -"")}catch(c){return!1}}:function(b){return"[object Function]"==ja.call(b)};avalon.isFunction=W;avalon.isWindow=function(b){return!b?!1:b==b.document&&b.document!=b};Ya(r)&&(avalon.isWindow=Ya);for(var Bc in avalon({}))break;var Cc="0"!==Bc;avalon.isPlainObject=function(b,c){if(!b||"object"!==avalon.type(b)||b.nodeType||avalon.isWindow(b))return!1;try{if(b.constructor&&!M.call(b,"constructor")&&!M.call(b.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}if(Cc)for(c in b)return M.call(b, -c);for(c in b);return void 0===c||M.call(b,c)};Gb.test(Object.getPrototypeOf)&&(avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Ja});avalon.mix=avalon.fn.mix=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,l=arguments.length,k=!1;"boolean"===typeof g&&(k=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&&(g={});h===l&&(g=this,h--);for(;hb?Math.max(c+b,0):Math.min(b,c)}function Ub(b,c, +d){if(V(c)||c&&c.nodeType||-1!==d.indexOf(b)||-1!==ta.indexOf(b))return!1;c=d.$special;return b&&"$"===b.charAt(0)&&!c[b]?!1:!0}function L(b,c,d){if(Array.isArray(b)){var e=b.concat();b.length=0;c=Vb(b);c.pushArray(e);return c}if("number"===typeof b.nodeType||b.$id&&b.$model&&b.$events)return b;Array.isArray(b.$skipArray)||(b.$skipArray=[]);b.$skipArray.$special=c||{};var f={};d=d||{};var g={},h={},l=[];for(e in b)(function(c,e){d[c]=e;if(Ub(c,e,b.$skipArray)){var k,t=avalon.type(e);g[c]=[];if("object"=== +t&&V(e.get)&&2>=Object.keys(e).length){var H=e.set,F=e.get;k=function(b){var e=f.$events,g=d[c];if(arguments.length){if(ja)return;if(V(H)){var h=e[c];e[c]=[];H.call(f,b);e[c]=h}}else avalon.openComputedCollect&&ka(e[c]);b=d[c]=F.call(f);if(!la(g,b)){if(ma&&(h=W[f.$id])&&h[c])h[c].$val=b;va(e[c]);f.$events&&Q.$fire.call(f,c,b,g)}return b};l.push(function(){Y[z]={evaluator:k,element:J,type:"computed::"+c,handler:y,args:[]};k();ka(g[c]);delete Y[z]})}else wa.test(t)?(k=function(b){var e=k.child,h=d[c]; +if(arguments.length)!ja&&!la(h,b)&&(e=k.child=Wb(f,c,b,t),b=d[c]=e.$model,(e=xa[e.$id])&&e(),f.$events&&Q.$fire.call(f,c,b,h));else return ka(g[c]),e},(k.child=L(e,0,d[c])).$events[G]=g[c]):k=function(b){var e=d[c];if(arguments.length){if(!la(e,b)){d[c]=b;if(ma){var h=W[f.$id];h&&h[c]&&(h[c].$val=b)}va(g[c]);f.$events&&Q.$fire.call(f,c,b,e)}}else return ka(g[c]),e};h[c]=k}})(e,b[e]);ta.forEach(function(c){delete b[c];delete d[c]});var f=na(f,Xb(h),b),k;for(k in b)h[k]||(f[k]=b[k]);f.$id=ha();f.$model= +d;f.$events=g;for(e in Q)c=Q[e],v||(c=c.bind(f)),f[e]=c;f.hasOwnProperty=function(b){return b in f.$model};l.forEach(function(b){b()});return f}function Wb(b,c,d,e){var f=b[c];if("array"===e){if(!Array.isArray(d)||f===d)return f;f.clear();f.pushArray(d.concat());return f}var g=b.$events[c];W[f.$id]&&(ma--,delete W[f.$id]);var h=L(d);h.$events[G]=g;xa[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&&b.rollback();C[b.type](b,b.vmodels)})})(b);delete xa[h.$id]}; +return h}function Z(b,c,d){b="for(var "+b+"i=0,n = this.length; i < n; i++){"+c.replace("_","((i in this) && fn.call(scope,this[i],i,this))")+"}"+d;return Function("fn,scope",b)}function Ya(b,c){try{for(;c=c.parentNode;)if(c===b)return!0;return!1}catch(d){return!1}}function Za(){return(new XMLSerializer).serializeToString(this)}function u(b){for(var c in b)if(M.call(b,c)){var d=b[c];if("function"===typeof u.plugins[c])u.plugins[c](d);else"object"===typeof u[c]?avalon.mix(u[c],d):u[c]=d}return this} +function $a(b){return b.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function oa(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function ab(b){if(!("classList"in b)){b.classList={node:b};for(var c in bb)b.classList[c.slice(1)]=bb[c]}return b.classList}function cb(b){try{b="true"===b?!0:"false"===b?!1:"null"===b?null:+b+""===b?+b:Yb.test(b)?avalon.parseJSON(b):b}catch(c){}return b}function db(b,c){if(0>=b.offsetWidth){if(Zb.test(x["@:get"](b, +"display"))){var d={node:b},e;for(e in eb)d[e]=b.style[e],b.style[e]=eb[e];c.push(d)}(d=b.parentNode)&&1===d.nodeType&&db(d,c)}}function fb(b){var c=b.nodeName;return c.toLowerCase()===c&&b.scopeName&&""===b.outerText}function $b(b){"url(#default#VML)"!==b.currentStyle.behavior&&(b.style.behavior="url(#default#VML)",b.style.display="inline-block",b.style.zoom=1)}function ya(b){Y[z]=b;avalon.openComputedCollect=!0;var c=b.evaluator;if(c)try{var d=ac.test(b.type)?b:c.apply(0,b.args);b.handler(d,b.element, +b)}catch(e){w("warning:exception throwed in [registerSubscriber] "+e),delete b.evaluator,c=b.element,3===c.nodeType&&(d=c.parentNode,u.commentInterpolate?d.replaceChild(q.createComment(b.value),c):c.data=N+b.value+O)}avalon.openComputedCollect=!1;delete Y[z]}function ka(b){var c=Y[z];b&&(c&&avalon.Array.ensure(b,c)&&c.element)&&gb(c,b)}function gb(b,c){b.$uuid=b.$uuid||ha();c.$uuid=c.$uuid||ha();var d={data:b,list:c,toString:function(){return b.$uuid+" "+c.$uuid}};R[d]||(R[d]=1,R.push(d))}function hb(){for(var b= +za,c=za+bc;b"))&&nb(b,c)}}function Ca(b,c){for(var d=0,e;e=b[d++];)e.vmodels=c,C[e.type](e,c),e.evaluator&&(e.element&&1===e.element.nodeType)&&e.element.removeAttribute(e.name);b.length=0}function qb(b,c){0b&&delete c[d.shift()];return c[e]=f}var d=[];return c}function ra(b,c,d){var e=d.type,f=d.filters?d.filters.join(""):"",g=c.map(function(b){return b.$id.replace(mc,"$1")})+b+e+f,h=nc(b).concat(),l=[],k=[],m=[],n="";c=vb(c);for(var p=0,n=c.length;p>0)-(d.clientLeft>>0),c.pageY=b.clientY+(d.scrollTop>>0)-(d.clientTop>>0),c.wheelDeltaY=c.wheelDelta,c.wheelDeltaX=0);c.timeStamp=new Date-0;c.originalEvent=b;c.preventDefault=function(){b.returnValue=!1};c.stopPropagation=function(){b.cancelBubble=!0};return c}function Vb(b){var c=[];c.$id=ha();c.$model=b;c.$events={};c.$events[G]= +[];c._=L({length:b.length});c._.$watch("length",function(b,d){c.$fire("length",b,d)});for(var d in Q)c[d]=Q[d];avalon.mix(c,yb);return c}function zb(b,c,d,e){var f=avalon.parseHTML(b.template),g=avalon.slice(f.childNodes);c.appendChild(f);d.$outer=b.$outer;b={nodes:g,vmodels:[d].concat(b.vmodels)};e.push(b)}function Ha(b,c){var d=b.endRepeat,e=[],f=b.element.nextSibling;if(f!==d){do if(f!==d)e.push(f);else break;while(f=f.nextSibling)}return e[b.group*c]||d}function Ab(b,c,d){c*=d||1;d=[b];for(var e= +1,f=I;eu.maxRepeatSize&&da.pop()}b.length=0}function T(){q.body&&(D?(s["ready!"].state= +2,D.checkDeps()):Db.forEach(function(b){b(avalon)}),T=y)}function Eb(){try{B.doScroll("left"),T()}catch(b){setTimeout(Eb)}}var z=new Date-0,G="$"+z,r=this||(0,eval)("this"),zc=r.require,Ac=r.define,ja=!1,A=/[^, ]+/g,Fb=/\[native code\]/,wa=/^(?:object|array)$/,Gb=/^\[object SVG\w*Element\]$/,Tb=/^\[object (?:Window|DOMWindow|global)\]$/,Ia=Object.prototype,M=Ia.hasOwnProperty,ia=Ia.toString,K=Array.prototype,$=K.slice,Y={},v=r.dispatchEvent,B=q.documentElement,J=q.getElementsByTagName("head")[0], +I=q.createDocumentFragment(),ea=q.createElement("div"),Hb={};"Boolean Number String Function Array Date RegExp Object Error".replace(A,function(b){Hb["[object "+b+"]"]=b.toLowerCase()});avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.type=function(b){return null==b?String(b):"object"===typeof b||"function"===typeof b?Hb[ia.call(b)]||"object":typeof b};var V="object"===typeof alert?function(b){try{return/^\s*\bfunction\b/.test(b+ +"")}catch(c){return!1}}:function(b){return"[object Function]"==ia.call(b)};avalon.isFunction=V;avalon.isWindow=function(b){return!b?!1:b==b.document&&b.document!=b};Xa(r)&&(avalon.isWindow=Xa);for(var Bc in avalon({}))break;var Cc="0"!==Bc;avalon.isPlainObject=function(b,c){if(!b||"object"!==avalon.type(b)||b.nodeType||avalon.isWindow(b))return!1;try{if(b.constructor&&!M.call(b,"constructor")&&!M.call(b.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}if(Cc)for(c in b)return M.call(b, +c);for(c in b);return void 0===c||M.call(b,c)};Fb.test(Object.getPrototypeOf)&&(avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Ia});avalon.mix=avalon.fn.mix=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,l=arguments.length,k=!1;"boolean"===typeof g&&(k=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&&(g={});h===l&&(g=this,h--);for(;h 0 Then","\t\t["+b+'] = [__proxy__]([__data__],"'+b+'")',"\tEnd If","\tOn Error Goto 0","\tEnd Property");f.push("End Class");b=f.join("\r\n"); -b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](c,Dc)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var Ec=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(Ec,"")}}var Fc=!{toString:null}.propertyIsEnumerable("toString"),Gc=function(){}.propertyIsEnumerable("prototype"),Jb="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), -Hc=Jb.length;Object.keys||(Object.keys=function(b){var c=[],d=Gc&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(d=0;d -arguments.length&&void 0===b)return this;var c=this,d=arguments;return function(){var e=[],f;for(f=1;fe&&(e+=d);ee&&(e=Math.max(0,d+e));0<=e;e--)if(this[e]===b)return e;return-1},forEach:$("","_",""),filter:$("r=[],j=0,", -"if(_)r[j++]=this[i]","return r"),map:$("r=[],","r[i]=_","return r"),some:$("","if(_)return true","return false"),every:$("","if(!_)return false","return true")});B.contains||(Node.prototype.contains=function(b){return!!(this.compareDocumentPosition(b)&16)});q.contains||(q.contains=function(b){return Za(q,b)});if(r.SVGElement){var Kb=q.createElementNS("http://www.w3.org/2000/svg","svg");Kb.innerHTML='';if(!Hb.test(Kb.firstChild)){var La=function(b,c){if(b&& -b.childNodes)for(var d=b.childNodes,e=0,f;f=d[e++];)if(f.tagName){var g=q.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());K.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});La(f,g);c.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:$a,set:function(b){var c=this.tagName.toLowerCase(),d=this.parentNode;b=avalon.parseHTML(b);"svg"===c?d.insertBefore(b,this):(c=q.createDocumentFragment(),La(b,c),d.insertBefore(c, -this));d.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),La(b,this))}}})}}!B.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",$a);var N,O,ba,Lb,vb,Mb=/[-.*+?^${}()|[\]\/\\]/g,D=y,V={loader:function(b){r.define= -b?D.define:Ac;r.require=b?D:zc},interpolate:function(b){N=b[0];O=b[1];if(N===O)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")u.commentInterpolate=!0;else{b=N+"test"+O;fa.innerHTML=b;if(fa.innerHTML!==b&&0<=fa.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");fa.innerHTML=""}b=(N+"").replace(Mb,"\\$&");var c=(O+"").replace(Mb,"\\$&");ba=RegExp(b+"(.*?)"+c);Lb=RegExp(b+"(.*?)"+c,"g");vb=RegExp(b+".*?"+c+"|\\sms-")}};u.debug=!0;u.plugins= -V;u.plugins.interpolate(["{{","}}"]);u.paths={};u.shim={};u.maxRepeatSize=100;avalon.config=u;var cb={_toString:function(){var b=this.node.className;return("string"===typeof b?b:b.baseVal).split(/\s+/).join(" ")},_contains:function(b){return-1<(" "+this+" ").indexOf(" "+b+" ")},_add:function(b){this.contains(b)||this._set(this+" "+b)},_remove:function(b){this._set((" "+this+" ").replace(" "+b+" "," ").trim())},__set:function(b){var c=this.node;"string"===typeof c.className?c.className=b:c.setAttribute("class", -b)}};"add,remove".replace(z,function(b){avalon.fn[b+"Class"]=function(c){var d=this[0];c&&("string"===typeof c&&d&&1===d.nodeType)&&c.replace(/\S+/g,function(c){bb(d)[b](c)});return this}});avalon.fn.mix({hasClass:function(b){var c=this[0]||{};return 1===c.nodeType&&bb(c).contains(b)},toggleClass:function(b,c){for(var d,e=0,f=b.split(/\s+/),g="boolean"===typeof c;d=f[e++];)this[(g?c:!this.hasClass(d))?"addClass":"removeClass"](d);return this},attr:function(b,c){return 2===arguments.length?(this[0].setAttribute(b, -c),this):this[0].getAttribute(b)},data:function(b,c){b="data-"+ab(b||"");switch(arguments.length){case 2:return this.attr(b,c),this;case 1:var d=this.attr(b);return db(d);case 0:var e={};K.forEach.call(this[0].attributes,function(c){c&&(b=c.name,b.indexOf("data-")||(b=pa(b.slice(5)),e[b]=db(c.value)))});return e}},removeData:function(b){b="data-"+ab(b);this[0].removeAttribute(b);return this},css:function(b,c){if(avalon.isPlainObject(b))for(var d in b)avalon.css(this,d,b[d]);else var e=avalon.css(this, +avalon.Array.removeAt(b,d):!1}}});avalon.nextTick=r.setImmediate?setImmediate.bind(r):function(b){setTimeout(b,0)};var qa=avalon.vmodels={};avalon.define=function(b,c){var d=b.$id||b;d||w("warning: vm\u5fc5\u987b\u6307\u5b9a$id");qa[d]&&w("warning: "+d+" \u5df2\u7ecf\u5b58\u5728\u4e8eavalon.vmodels\u4e2d");if("object"===typeof b)var e=L(b);else e={$watch:y},c(e),e=L(e),ja=!0,c(e),ja=!1;e.$id=d;return qa[d]=e};var ta="$id,$watch,$unwatch,$fire,$events,$model,$skipArray".match(A),la=Object.is||function(b, +c){return 0===b&&0===c?1/b===1/c:b!==b?c!==c:b===c},Xb=v?function(b){var c={},d;for(d in b)c[d]={get:b[d],set:b[d],enumerable:!0,configurable:!0};return c}:function(b){return b},W={},ma=0,xa={},Ja=Object.defineProperty;try{Ja({},"_",{value:"x"});var na=Object.defineProperties}catch(od){"__defineGetter__"in avalon&&(Ja=function(b,c,d){"value"in d&&(b[c]=d.value);"get"in d&&b.__defineGetter__(c,d.get);"set"in d&&b.__defineSetter__(c,d.set);return b},na=function(b,c){for(var d in c)c.hasOwnProperty(d)&& +Ja(b,d,c[d]);return b})}if(!na&&r.VBArray){r.execScript('Function parseVB(code)\n\tExecuteGlobal(code)\nEnd Function\nDim VBClassBodies\nSet VBClassBodies=CreateObject("Scripting.Dictionary")\nFunction findOrDefineVBClass(name,body)\n\tDim found\n\tfound=""\n\tFor Each key in VBClassBodies\n\t\tIf body=VBClassBodies.Item(key) Then\n\t\t\tfound=key\n\t\t\tExit For\n\t\tEnd If\n\tnext\n\tIf found="" Then\n\t\tparseVB("Class " + name + body)\n\t\tVBClassBodies.Add name, body\n\t\tfound=name\n\tEnd If\n\tfindOrDefineVBClass=found\nEnd Function', +"VBScript");var Dc=function(b,c,d){var e=b[c];if("function"===typeof e)if(3===arguments.length)e(d);else return e()},na=function(b,c,d){var e="VBClass"+setTimeout("1"),f=[];f.push("\r\n\tPrivate [__data__], [__proxy__]","\tPublic Default Function [__const__](d, p)","\t\tSet [__data__] = d: set [__proxy__] = p","\t\tSet [__const__] = Me","\tEnd Function");for(b in d)c.hasOwnProperty(b)||f.push("\tPublic ["+b+"]");ta.forEach(function(b){c.hasOwnProperty(b)||f.push("\tPublic ["+b+"]")});f.push("\tPublic [hasOwnProperty]"); +for(b in c)f.push("\tPublic Property Let ["+b+"](val"+z+")",'\t\tCall [__proxy__]([__data__], "'+b+'", val'+z+")","\tEnd Property","\tPublic Property Set ["+b+"](val"+z+")",'\t\tCall [__proxy__]([__data__], "'+b+'", val'+z+")","\tEnd Property","\tPublic Property Get ["+b+"]","\tOn Error Resume Next","\t\tSet["+b+'] = [__proxy__]([__data__],"'+b+'")',"\tIf Err.Number <> 0 Then","\t\t["+b+'] = [__proxy__]([__data__],"'+b+'")',"\tEnd If","\tOn Error Goto 0","\tEnd Property");f.push("End Class");b=f.join("\r\n"); +b=r.findOrDefineVBClass(e,b);b===e&&r.parseVB(["Function "+e+"Factory(a, b)","\tDim o","\tSet o = (New "+e+")(a, b)","\tSet "+e+"Factory = o","End Function"].join("\r\n"));return r[b+"Factory"](c,Dc)}}if(!"\u53f8\u5f92\u6b63\u7f8e".trim){var Ec=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(Ec,"")}}var Fc=!{toString:null}.propertyIsEnumerable("toString"),Gc=function(){}.propertyIsEnumerable("prototype"),Ib="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), +Hc=Ib.length;Object.keys||(Object.keys=function(b){var c=[],d=Gc&&"function"===typeof b;if("string"===typeof b||b&&b.callee)for(d=0;d +arguments.length&&void 0===b)return this;var c=this,d=arguments;return function(){var e=[],f;for(f=1;fe&&(e+=d);ee&&(e=Math.max(0,d+e));0<=e;e--)if(this[e]===b)return e;return-1},forEach:Z("","_",""),filter:Z("r=[],j=0,", +"if(_)r[j++]=this[i]","return r"),map:Z("r=[],","r[i]=_","return r"),some:Z("","if(_)return true","return false"),every:Z("","if(!_)return false","return true")});B.contains||(Node.prototype.contains=function(b){return!!(this.compareDocumentPosition(b)&16)});q.contains||(q.contains=function(b){return Ya(q,b)});if(r.SVGElement){var Jb=q.createElementNS("http://www.w3.org/2000/svg","svg");Jb.innerHTML='';if(!Gb.test(Jb.firstChild)){var Ka=function(b,c){if(b&& +b.childNodes)for(var d=b.childNodes,e=0,f;f=d[e++];)if(f.tagName){var g=q.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());K.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});Ka(f,g);c.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:Za,set:function(b){var c=this.tagName.toLowerCase(),d=this.parentNode;b=avalon.parseHTML(b);"svg"===c?d.insertBefore(b,this):(c=q.createDocumentFragment(),Ka(b,c),d.insertBefore(c, +this));d.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTM&&(avalon.clearHTML(this),b=avalon.parseHTML(b),Ka(b,this))}}})}}!B.outerHTML&&r.HTMLElement&&HTMLElement.prototype.__defineGetter__("outerHTML",Za);var N,O,aa,Kb,ub,Lb=/[-.*+?^${}()|[\]\/\\]/g,D=y,U={loader:function(b){r.define= +b?D.define:Ac;r.require=b?D:zc},interpolate:function(b){N=b[0];O=b[1];if(N===O)throw new SyntaxError("openTag!==closeTag");if("\x3c!--,--\x3e"===b+"")u.commentInterpolate=!0;else{b=N+"test"+O;ea.innerHTML=b;if(ea.innerHTML!==b&&0<=ea.innerHTML.indexOf("<"))throw new SyntaxError("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5");ea.innerHTML=""}b=(N+"").replace(Lb,"\\$&");var c=(O+"").replace(Lb,"\\$&");aa=RegExp(b+"(.*?)"+c);Kb=RegExp(b+"(.*?)"+c,"g");ub=RegExp(b+".*?"+c+"|\\sms-")}};u.debug=!0;u.plugins= +U;u.plugins.interpolate(["{{","}}"]);u.paths={};u.shim={};u.maxRepeatSize=100;avalon.config=u;var bb={_toString:function(){var b=this.node.className;return("string"===typeof b?b:b.baseVal).split(/\s+/).join(" ")},_contains:function(b){return-1<(" "+this+" ").indexOf(" "+b+" ")},_add:function(b){this.contains(b)||this._set(this+" "+b)},_remove:function(b){this._set((" "+this+" ").replace(" "+b+" "," ").trim())},__set:function(b){var c=this.node;"string"===typeof c.className?c.className=b:c.setAttribute("class", +b)}};"add,remove".replace(A,function(b){avalon.fn[b+"Class"]=function(c){var d=this[0];c&&("string"===typeof c&&d&&1===d.nodeType)&&c.replace(/\S+/g,function(c){ab(d)[b](c)});return this}});avalon.fn.mix({hasClass:function(b){var c=this[0]||{};return 1===c.nodeType&&ab(c).contains(b)},toggleClass:function(b,c){for(var d,e=0,f=b.split(/\s+/),g="boolean"===typeof c;d=f[e++];)this[(g?c:!this.hasClass(d))?"addClass":"removeClass"](d);return this},attr:function(b,c){return 2===arguments.length?(this[0].setAttribute(b, +c),this):this[0].getAttribute(b)},data:function(b,c){b="data-"+$a(b||"");switch(arguments.length){case 2:return this.attr(b,c),this;case 1:var d=this.attr(b);return cb(d);case 0:var e={};K.forEach.call(this[0].attributes,function(c){c&&(b=c.name,b.indexOf("data-")||(b=oa(b.slice(5)),e[b]=cb(c.value)))});return e}},removeData:function(b){b="data-"+$a(b);this[0].removeAttribute(b);return this},css:function(b,c){if(avalon.isPlainObject(b))for(var d in b)avalon.css(this,d,b[d]);else var e=avalon.css(this, b,c);return void 0!==e?e:this},position:function(){var b,c,d=this[0],e={top:0,left:0};if(d)return"fixed"===this.css("position")?c=d.getBoundingClientRect():(b=this.offsetParent(),c=this.offset(),"HTML"!==b[0].tagName&&(e=b.offset()),e.top+=avalon.css(b[0],"borderTopWidth",!0),e.left+=avalon.css(b[0],"borderLeftWidth",!0)),{top:c.top-e.top-avalon.css(d,"marginTop",!0),left:c.left-e.left-avalon.css(d,"marginLeft",!0)}},offsetParent:function(){for(var b=this[0].offsetParent||B;b&&"HTML"!==b.tagName&& -"static"===avalon.css(b,"position");)b=b.offsetParent;return avalon(b||B)},bind:function(b,c,d){if(this[0])return avalon.bind(this[0],b,c,d)},unbind:function(b,c,d){this[0]&&avalon.unbind(this[0],b,c,d);return this},val:function(b){var c=this[0];if(c&&1===c.nodeType){var d=0===arguments.length,e=d?":get":":set",f=Ma,g;g=c.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(c.type)?"checked":g;if(e=f[g+e])var h=e(c,b);else{if(d)return(c.value||"").replace(/\r/g,"");c.value=b}}return d?h:this}}); -var Zb=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Ic=/^[\],:{}\s]*$/,Jc=/(?:^|:|,)(?:\s*\[)+/g,Kc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,Lc=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;avalon.parseJSON=r.JSON?JSON.parse:function(b){if("string"===typeof b){if((b=b.trim())&&Ic.test(b.replace(Kc,"@").replace(Lc,"]").replace(Jc,"")))return(new Function("return "+b))();avalon.error("Invalid JSON: "+b)}};avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){avalon.fn[b]=function(d){var e= -this[0]||{},f=e.window&&e.document?e:9===e.nodeType?e.defaultView||e.parentWindow:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?d:avalon(f).scrollLeft(),g?d:avalon(f).scrollTop()):e[b]=d;else return f?c in f?f[c]:B[b]:e[b]}});var x=avalon.cssHooks={},Nb=["","-webkit-","-o-","-moz-","-ms-"],Na={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=Q("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,c,d){if(Na[b])return Na[b]; -c=c||B.style;for(var e=0,f=Nb.length;e=d?"alpha(opacity="+100*d+")":"";c=b.filter||"";b.zoom=1;b.filter=(Ob.test(c)?c.replace(Ob,d):c+" "+d).trim();b.filter||b.removeAttribute("filter")};x["opacity:get"]=function(b){b=b.filters.alpha||b.filters["DXImageTransform.Microsoft.Alpha"];return(b&&b.enabled?b.opacity:100)/100+""}}"top,left".replace(z,function(b){x[b+":get"]=function(c){var d=x["@:get"](c,b);return/px$/.test(d)?d:avalon(c).position()[b]+"px"}});var fb={position:"absolute",visibility:"hidden",display:"block"}, -$b=/^(none|table(?!-c[ea]).+)/;"Width,Height".replace(z,function(b){var c=b.toLowerCase(),d="client"+b,e="scroll"+b,f="offset"+b;x[c+":get"]=function(c,d,e){var k=-4;"number"===typeof e&&(k=e);d="Width"===b?["Left","Right"]:["Top","Bottom"];e=c[f];if(2===k)return e+avalon.css(c,"margin"+d[0],!0)+avalon.css(c,"margin"+d[1],!0);0>k&&(e=e-avalon.css(c,"border"+d[0]+"Width",!0)-avalon.css(c,"border"+d[1]+"Width",!0));-4===k&&(e=e-avalon.css(c,"padding"+d[0],!0)-avalon.css(c,"padding"+d[1],!0));return e}; -x[c+"&get"]=function(b){var d=[];eb(b,d);for(var e=x[c+":get"](b),f=0,m;m=d[f++];){b=m.node;for(var n in m)"string"===typeof m[n]&&(b.style[n]=m[n])}return e};avalon.fn[c]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[d];if(9===h.nodeType){var l=h.documentElement;return Math.max(h.body[e],l[e],h.body[f],l[f],l[d])}return x[c+"&get"](h)}return this.css(c,g)};avalon.fn["inner"+b]=function(){return x[c+":get"](this[0],void 0,-2)};avalon.fn["outer"+ +"static"===avalon.css(b,"position");)b=b.offsetParent;return avalon(b||B)},bind:function(b,c,d){if(this[0])return avalon.bind(this[0],b,c,d)},unbind:function(b,c,d){this[0]&&avalon.unbind(this[0],b,c,d);return this},val:function(b){var c=this[0];if(c&&1===c.nodeType){var d=0===arguments.length,e=d?":get":":set",f=La,g;g=c.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(c.type)?"checked":g;if(e=f[g+e])var h=e(c,b);else{if(d)return(c.value||"").replace(/\r/g,"");c.value=b}}return d?h:this}}); +var Yb=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Ic=/^[\],:{}\s]*$/,Jc=/(?:^|:|,)(?:\s*\[)+/g,Kc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,Lc=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;avalon.parseJSON=r.JSON?JSON.parse:function(b){if("string"===typeof b){if((b=b.trim())&&Ic.test(b.replace(Kc,"@").replace(Lc,"]").replace(Jc,"")))return(new Function("return "+b))();avalon.error("Invalid JSON: "+b)}};avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){avalon.fn[b]=function(d){var e= +this[0]||{},f=e.window&&e.document?e:9===e.nodeType?e.defaultView||e.parentWindow:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?d:avalon(f).scrollLeft(),g?d:avalon(f).scrollTop()):e[b]=d;else return f?c in f?f[c]:B[b]:e[b]}});var x=avalon.cssHooks={},Mb=["","-webkit-","-o-","-moz-","-ms-"],Ma={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=P("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,c,d){if(Ma[b])return Ma[b]; +c=c||B.style;for(var e=0,f=Mb.length;e=d?"alpha(opacity="+100*d+")":"";c=b.filter||"";b.zoom=1;b.filter=(Nb.test(c)?c.replace(Nb,d):c+" "+d).trim();b.filter||b.removeAttribute("filter")};x["opacity:get"]=function(b){b=b.filters.alpha||b.filters["DXImageTransform.Microsoft.Alpha"];return(b&&b.enabled?b.opacity:100)/100+""}}"top,left".replace(A,function(b){x[b+":get"]=function(c){var d=x["@:get"](c,b);return/px$/.test(d)?d:avalon(c).position()[b]+"px"}});var eb={position:"absolute",visibility:"hidden",display:"block"}, +Zb=/^(none|table(?!-c[ea]).+)/;"Width,Height".replace(A,function(b){var c=b.toLowerCase(),d="client"+b,e="scroll"+b,f="offset"+b;x[c+":get"]=function(c,d,e){var k=-4;"number"===typeof e&&(k=e);d="Width"===b?["Left","Right"]:["Top","Bottom"];e=c[f];if(2===k)return e+avalon.css(c,"margin"+d[0],!0)+avalon.css(c,"margin"+d[1],!0);0>k&&(e=e-avalon.css(c,"border"+d[0]+"Width",!0)-avalon.css(c,"border"+d[1]+"Width",!0));-4===k&&(e=e-avalon.css(c,"padding"+d[0],!0)-avalon.css(c,"padding"+d[1],!0));return e}; +x[c+"&get"]=function(b){var d=[];db(b,d);for(var e=x[c+":get"](b),f=0,m;m=d[f++];){b=m.node;for(var n in m)"string"===typeof m[n]&&(b.style[n]=m[n])}return e};avalon.fn[c]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[d];if(9===h.nodeType){var l=h.documentElement;return Math.max(h.body[e],l[e],h.body[f],l[f],l[d])}return x[c+"&get"](h)}return this.css(c,g)};avalon.fn["inner"+b]=function(){return x[c+":get"](this[0],void 0,-2)};avalon.fn["outer"+ b]=function(b){return x[c+":get"](this[0],void 0,!0===b?2:0)}});avalon.fn.offset=function(){var b=this[0],c={left:0,top:0};if(!b||!b.tagName||!b.ownerDocument)return c;var d=b.ownerDocument,e=d.body,f=d.documentElement,d=d.defaultView||d.parentWindow;if(!avalon.contains(f,b))return c;b.getBoundingClientRect&&(c=b.getBoundingClientRect());var b=f.clientTop||e.clientTop,g=f.clientLeft||e.clientLeft,h=Math.max(d.pageYOffset||0,f.scrollTop,e.scrollTop),e=Math.max(d.pageXOffset||0,f.scrollLeft,e.scrollLeft); -return{top:c.top+h-b,left:c.left+e-g}};var Pc=/^]+))?)*\s+value[\s=]/i,Ma={"option:get":r.VBArray?function(b){return Pc.test(b.outerHTML)?b.value:b.text.trim()}:function(b){return b.value},"select:get":function(b,c){for(var d,e=b.options,f=b.selectedIndex,g=Ma["option:get"],h="select-one"===b.type||0>f,l=h?null:[],k=h?f+1:e.length,m=0>f?k:h?f:0;m]*)\/>/ig,Pb=v?/[^\d\D]/:/(<(?:script|link|style|meta|noscript))/ig,Sc=Q(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),Tc=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,E={area:[1,""],param:[1,""],col:[2,"
", -"
"],legend:[1,"
"],option:[1,""],thead:[1,"","
"],tr:[2,""],td:[3,"
"],text:[1,'',""],_default:v?[0,""]:[1,"X
"]};E.optgroup=E.option;E.tbody=E.tfoot=E.colgroup=E.caption=E.thead;E.th=E.td;"g,circle,ellipse,line,path,polygon,polyline,text".replace(A,function(b){E[b]=E.text});var Uc=q.createElement("script");avalon.parseHTML=function(b){"string"!== +typeof b&&(b+="");b=b.replace(Rc,"<$1>").trim();var c=(Qc.exec(b)||["",""])[1].toLowerCase(),d=E[c]||E._default,c=I.cloneNode(!1),e=ea,f;v||(b=b.replace(Ob,"
$1"));e.innerHTML=d[1]+b+(d[2]||"");b=e.getElementsByTagName("script");if(b.length)for(var g=0,h;h=b[g++];){var l=h.parentNode,k=h.nextSibling,m=h.text;l.removeChild(h);Sc[h.type]&&(f=Uc.cloneNode(!1),K.forEach.call(h.attributes,function(b){f.setAttribute(b.name,b.value)}),h=f);h.text=m;l.insertBefore(h,k)}for(g=d[0];g--;e= +e.lastChild);if(!v){b=e.getElementsByTagName("br");for(g=0;h=b[g++];)h.className&&"msNoScope"===h.className&&h.parentNode.removeChild(h);b=e.all;for(g=0;h=b[g++];)fb(h)&&$b(h)}for(;d=e.firstChild;)c.appendChild(d);return c};avalon.innerHTML=function(b,c){if(!v&&!Ob.test(c)&&!Tc.test(c))try{b.innerHTML=c;return}catch(d){}var e=this.parseHTML(c);this.clearHTML(b).appendChild(e)};avalon.clearHTML=function(b){for(b.textContent="";b.firstChild;)b.removeChild(b.firstChild);return b};var Q={$watch:function(b, +c){if("function"===typeof c){var d=this.$events[b];d?d.push(c):this.$events[b]=[c]}else this.$events=this.$watch.backup;return this},$unwatch:function(b,c){var d=arguments.length;if(0===d)this.$watch.backup=this.$events,this.$events={};else if(1===d)this.$events[b]=[];else for(var d=this.$events[b]||[],e=d.length;0>~--e;)if(d[e]===c)return d.splice(e,1);return this},$fire:function(b){var c;/^(\w+)!(\S+)$/.test(b)&&(c=RegExp.$1,b=RegExp.$2);var d=this.$events,e=$.call(arguments,1);if("up"===c||"down"=== +c||"all"===c){if(d=d.expr&&Pb(d.expr)){e=[b].concat(e);for(h in avalon.vmodels){var f=avalon.vmodels[h];if(f&&(f.$events&&f.$events.expr)&&f!==this){var g=Pb(f.$events.expr);if(g&&("all"===c||("down"===c?d.contains(g):g.contains(d))))g._avalon=f}}var h=q.getElementsByTagName("*"),l=[];Array.prototype.forEach.call(h,function(b){b._avalon&&(l.push(b._avalon),b._avalon="",b.removeAttribute("_avalon"))});"up"===c&&l.reverse();for(h=0;(c=l[h++])&&!1!==c.$fire.apply(c,e););}}else{c=d[b]||[];for(var d=d.$all|| +[],h=0;f=c[h++];)V(f)&&f.apply(this,e);for(h=0;f=d[h++];)V(f)&&f.apply(this,arguments)}}},Vc=/(\w+)\[(avalonctrl)="(\S+)"\]/,Pb=q.querySelector?function(b){return q.querySelector(b)}:function(b){b=b.match(Vc);for(var c=q.getElementsByTagName(b[1]),d=0,e;e=c[d++];)if(e.getAttribute(b[2])===b[3])return e},ac=/^(duplex|on)$/,R=[],za=0,bc=200,jb=new Date,ib;avalon.scan=function(b,c){b=b||B;var d=c?[].concat(c):[];lb(b,d)};var fc=P("AREA,BASE,BASEFONT,BR,COL,COMMAND,EMBED,HR,IMG,INPUT,LINK,META,PARAM,SOURCE,TRACK,WBR,NOSCRIPT,SCRIPT,STYLE,TEXTAREA"), +cc=v?30:50,sb=/ms-(\w+)-?(.*)/,tb={"if":10,repeat:90,data:100,widget:110,each:1400,"with":1500,duplex:2E3,on:3E3},ec=P("animationend,blur,change,input,click,dblclick,focus,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,mouseover,mouseup,scan,scroll,submit");if(!"1"[0])var Oa=Da(512),Wc=/\s+(ms-[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,Xc=/^['"]/,Yc=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/i,Zc=/&/g,rb=function(b){b=b.outerHTML;if(".avalonHide{ display: none!important }";var fd=/(?:[\s\S]+?)<\/noscript>/img,gd=/([\s\S]+?)<\/noscript>/im,Ra=function(){return new (r.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP")},fa=function(b,c,d){if(b=b.getAttribute(c)){c=0;for(var e;e=d[c++];)if(e.hasOwnProperty(b)&&"function"===typeof e[b])return e[b]}},Sa=avalon.templateCache={};avalon.contains=Ya;var Ta={};"autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelectedcontentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected".replace(A, +function(b){Ta[b.toLowerCase()]=b});var Fa=avalon.bindingExecutors={attr:function(b,c,d){var e=d.type,f=d.param;if("css"===e)avalon(c).css(f,b);else if("attr"===e){if(Ta[f]&&(e=Ta[f],"boolean"===typeof c[e]))return c[e]=!!b;if(!v&&Qa[f])var f=Qa[f],g=!0;if(!1===b||null===b||void 0===b)return c.removeAttribute(f);r.VBArray&&!g&&(fb(c)?g=!0:Gb.test(c)||(g=(g=(c.attributes||{})[f])?!1===g.expando:null===g));g?c[f]=b:c.setAttribute(f,b)}else if("include"===e&&b){var h=d.vmodels,l=d.includeRendered,k= +d.includeLoaded,m=d.includeReplaced?c.parentNode:c,n=function(b){for(k&&(b=k.apply(m,[b].concat(h)));;){var c=d.startInclude.nextSibling;if(c&&c!==d.endInclude)m.removeChild(c);else break}b=avalon.parseHTML(b);c=avalon.slice(b.childNodes);m.insertBefore(b,d.endInclude);Aa(c,h);l&&kb(m,function(){l.call(m)})};if("src"===d.param)if(Sa[b])avalon.nextTick(function(){n(Sa[b])});else{var p=Ra();p.onreadystatechange=function(){if(4===p.readyState){var c=p.status;if(200<=c&&300>c||304===c||1223===c)n(Sa[b]= +p.responseText)}};p.open("GET",b,!0);"withCredentials"in p&&(p.withCredentials=!0);p.setRequestHeader("X-Requested-With","XMLHttpRequest");p.send(null)}else{var t=b&&1===b.nodeType?b:q.getElementById(b);if(t){if("NOSCRIPT"===t.tagName&&!t.innerHTML&&!t.fixIE78){p=Ra();p.open("GET",location,!1);p.send(null);c=q.getElementsByTagName("noscript");f=(p.responseText||"").match(fd)||[];g=f.length;for(e=0;e\u4e0a\u8981\u6c42\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4"):b.multiple&&w("ms-duplex\u5728\u4e0d\u80fd\u5bf9\u5e94\u4e00\u4e2a\u6570\u7ec4");d=Array.isArray(d)?d.map(String):d+"";d+""!==b.oldValue&&(e.val(d),b.oldValue=d+"")};d.bound("change",function(){if(!1!==e.data("duplex-observe")){var f=e.val(),f=Array.isArray(f)?f.map(function(b){return d.pipe(b,d,"get")}):d.pipe(f,d,"get");f+""!== +b.oldValue&&c(f);d.changed.call(b,f,d)}});var f=NaN,g=setInterval(function(){var e=b.innerHTML;e===f?(clearInterval(g),ya(d),d.changed.call(b,c(),d)):f=e},20)};X.TEXTAREA=X.INPUT;var ga=avalon.eventHooks;"onmouseenter"in B||avalon.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(b,c){ga[b]={type:c,deel:function(c,e){return function(f){var g=f.relatedTarget;if(!g||g!==c&&!(c.compareDocumentPosition(g)&16))return delete f.type,f.type=b,e.call(c,f)}}}});avalon.each({AnimationEvent:"animationend", +WebKitAnimationEvent:"webkitAnimationEnd"},function(b,c){r[b]&&!ga.animationend&&(ga.animationend={type:c})});"oninput"in q.createElement("input")||(ga.input={type:"propertychange",deel:function(b,c){return function(d){if("value"===d.propertyName)return d.type="input",c.call(b,d)}}});if(void 0===q.onmousewheel){var Sb=void 0!==q.onwheel?"wheel":"DOMMouseScroll",hd="wheel"===Sb?"deltaY":"detail";ga.mousewheel={type:Sb,deel:function(b,c){return function(d){d.wheelDeltaY=d.wheelDelta=0]*>([\S\s]*?)<\/script\s*>/gim,jd=/\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,kd=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/ig,ld={a:/\b(href)\=("javascript[^"]*"|'javascript[^']*')/ig,img:/\b(src)\=("javascript[^"]*"|'javascript[^']*')/ig,form:/\b(action)\=("javascript[^"]*"|'javascript[^']*')/ig},md=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,nd=/([^\#-~| |!])/g,Wa=avalon.filters={uppercase:function(b){return b.toUpperCase()},lowercase:function(b){return b.toLowerCase()}, +truncate:function(b,c,d){c=c||30;d=void 0===d?"...":d;return b.length>c?b.slice(0,c-d.length)+d:String(b)},camelize:oa,sanitize:function(b){return b.replace(id,"").replace(kd,function(b,d){var e=b.toLowerCase().match(/<(\w+)\s/);e&&(e=ld[e[1]])&&(b=b.replace(e,function(b,c,d){b=d.charAt(0);return c+"="+b+"javascript:void(0)"+b}));return b.replace(jd," ").replace(/\s+/g," ")})},escape:function(b){return String(b).replace(/&/g,"&").replace(md,function(b){var d=b.charCodeAt(0);b=b.charCodeAt(1); +return"&#"+(1024*(d-55296)+(b-56320)+65536)+";"}).replace(nd,function(b){return"&#"+b.charCodeAt(0)+";"}).replace(//g,">")},currency:function(b,c){return(c||"\uffe5")+avalon.filters.number(b)},number:function(b,c,d,e){b=(b+"").replace(/[^0-9+\-Ee.]/g,"");b=!isFinite(+b)?0:+b;c=!isFinite(+c)?0:Math.abs(c);e=e||",";d=d||".";var f="",f=function(b,c){var d=Math.pow(10,c);return""+Math.round(b*d)/d},f=(c?f(b,c):""+Math.round(b)).split(".");3b&&(e="-",b=-b);for(b=""+b;b.length-e)g+=e;0===g&&-12===e&&(g=12);return b(g,d,f)}}function d(b,c){return function(d,e){var f=d["get"+b](),g=(c?"SHORT"+b:b).toUpperCase();return e[g][f]}}function e(b){var c;if(c=b.match(l)){b=new Date(0);var d= 0,e=0,f=c[8]?b.setUTCFullYear:b.setFullYear,g=c[8]?b.setUTCHours:b.setHours;c[9]&&(d=parseInt(c[9]+c[10],10),e=parseInt(c[9]+c[11],10));f.call(b,parseInt(c[1],10),parseInt(c[2],10)-1,parseInt(c[3],10));d=parseInt(c[4]||0,10)-d;e=parseInt(c[5]||0,10)-e;f=parseInt(c[6]||0,10);c=Math.round(1E3*parseFloat("0."+(c[7]||0)));g.call(b,d,e,f,c)}return b}var f={yyyy:c("FullYear",4),yy:c("FullYear",2,0,!0),y:c("FullYear",1),MMMM:d("Month"),MMM:d("Month",!0),MM:c("Month",2,1),M:c("Month",1,1),dd:c("Date",2), d:c("Date",1),HH:c("Hours",2),H:c("Hours",1),hh:c("Hours",2,-12),h:c("Hours",1,-12),mm:c("Minutes",2),m:c("Minutes",1),ss:c("Seconds",2),s:c("Seconds",1),sss:c("Milliseconds",3),EEEE:d("Day"),EEE:d("Day",!0),a:function(b,c){return 12>b.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(c){c=-1*c.getTimezoneOffset();return c=(0<=c?"+":"")+(b(Math[0e?avalon.error(b+" \u5bf9\u5e94\u8d44\u6e90\u4e0d\u5b58\u5728\u6216\u6ca1\u6709\u5f00\u542f CORS"):(s[d].state=2,s[d].exports=c.responseText,D.checkDeps())}};c.open("GET",b,!0);"withCredentials"in c&&(c.withCredentials=!0);c.setRequestHeader("X-Requested-With","XMLHttpRequest");c.send();return d};var p=c(!0);p||(p=avalon.slice(q.scripts).pop().src);p=b(p);n=u.base=p.slice(0,p.lastIndexOf("/")+1);var t=/\/\w+\/\.\./;D=avalon.require=function(b,c,d){var f={}, -h=[],m=0,q=0,p=d||"callback"+setTimeout("1");d=d||n;String(b).replace(z,function(b){if(b=g(b,d))m++,s[b]&&2===s[b].state&&q++,f[b]||(h.push(b),f[b]="\u53f8\u5f92\u6b63\u7f8e")});s[p]={id:p,factory:c,deps:f,args:h,state:1};m===q?l(p,h,c):k.unshift(p);e()};D.define=function(e,f,g){var h=aa.call(arguments);if("string"===typeof e)var k=h.shift();"function"===typeof h[0]&&h.unshift([]);var l=s[k]&&1<=s[k].state?k:b(c());!s[l]&&k&&(s[l]={id:l,factory:g,state:1});g=h[1];g.id=k;g.delay=function(b){h.push(b); -var c=!0;try{c=d(s[b].deps,b)}catch(e){}c&&avalon.error(b+"\u6a21\u5757\u4e0e\u4e4b\u524d\u7684\u6a21\u5757\u5b58\u5728\u5faa\u73af\u4f9d\u8d56\uff0c\u8bf7\u4e0d\u8981\u76f4\u63a5\u7528script\u6807\u7b7e\u5f15\u5165"+b+"\u6a21\u5757");delete g.delay;D.apply(null,h)};l?g.delay(l,h):m.push(g)};D.define.amd=s;D.config=u;D.checkDeps=e};var Eb=[];"complete"===q.readyState?setTimeout(U):v?q.addEventListener("DOMContentLoaded",U):(q.attachEvent("onreadystatechange",function(){"complete"===q.readyState&& -U()}),B.doScroll&&Fb());avalon.bind(r,"load",U);avalon.ready=function(b){D?D("ready!",b):U===y?b(avalon):Eb.push(b)};avalon.config({loader:!0});avalon.ready(function(){avalon.scan(q.body)})})(document); +h=[],m=0,q=0,p=d||"callback"+setTimeout("1");d=d||n;String(b).replace(A,function(b){if(b=g(b,d))m++,s[b]&&2===s[b].state&&q++,f[b]||(h.push(b),f[b]="\u53f8\u5f92\u6b63\u7f8e")});s[p]={id:p,factory:c,deps:f,args:h,state:1};m===q?l(p,h,c):k.unshift(p);e()};D.define=function(e,f,g){var h=$.call(arguments);if("string"===typeof e)var k=h.shift();"function"===typeof h[0]&&h.unshift([]);var l=s[k]&&1<=s[k].state?k:b(c());!s[l]&&k&&(s[l]={id:l,factory:g,state:1});g=h[1];g.id=k;g.delay=function(b){h.push(b); +var c=!0;try{c=d(s[b].deps,b)}catch(e){}c&&avalon.error(b+"\u6a21\u5757\u4e0e\u4e4b\u524d\u7684\u6a21\u5757\u5b58\u5728\u5faa\u73af\u4f9d\u8d56\uff0c\u8bf7\u4e0d\u8981\u76f4\u63a5\u7528script\u6807\u7b7e\u5f15\u5165"+b+"\u6a21\u5757");delete g.delay;D.apply(null,h)};l?g.delay(l,h):m.push(g)};D.define.amd=s;D.config=u;D.checkDeps=e};var Db=[];"complete"===q.readyState?setTimeout(T):v?q.addEventListener("DOMContentLoaded",T):(q.attachEvent("onreadystatechange",function(){"complete"===q.readyState&& +T()}),B.doScroll&&Eb());avalon.bind(r,"load",T);avalon.ready=function(b){D?D("ready!",b):T===y?b(avalon):Db.push(b)};avalon.config({loader:!0});avalon.ready(function(){avalon.scan(q.body)})})(document); diff --git a/avalon.modern.js b/avalon.modern.js index 694b7500c..03ce97812 100644 --- a/avalon.modern.js +++ b/avalon.modern.js @@ -5,7 +5,7 @@ http://weibo.com/jslouvre/ Released under the MIT license - avalon 1.3.6 2014.10.24 support IE10 and other latest browsers + avalon 1.3.6 2014.11.4 support IE10 and other latest browsers ==================================================*/ (function(DOC) { var expose = Date.now() @@ -1336,7 +1336,7 @@ if (special === "up") { alls.reverse() } - for (var i = 0, el; el = all[i++]; ) { + for (var i = 0, el; el = alls[i++]; ) { if (el.$fire.apply(el, detail) === false) { break } @@ -2685,13 +2685,7 @@ }, number: { get: function(val, data) { - delete data.error.number - if (isFinite(val)) { - return parseFloat(val) || 0 - } else { - data.error.number = true - return val - } + return isFinite(val) ? parseFloat(val) || 0: val }, set: fixNull } diff --git a/avalon.modern.min.js b/avalon.modern.min.js index 9a887e920..318a919c1 100644 --- a/avalon.modern.min.js +++ b/avalon.modern.min.js @@ -1,106 +1,105 @@ -(function(q){function w(){}function v(){avalon.config.debug&&console.log.apply(console,arguments)}function Q(b,c){"string"===typeof b&&(b=b.match(x)||[]);for(var d={},e=void 0!==c?c:1,f=0,g=b.length;f=Object.keys(e).length){var W=e.set,F=e.get;p=function(b){var e=f.$events,g=d[c]; -if(arguments.length){if(ga)return;if(V(W)){var h=e[c];e[c]=[];W.call(f,b);e[c]=h}}else avalon.openComputedCollect&&ha(e[c]);b=d[c]=F.call(f);if(!ia(g,b)){if(ja&&(h=X[f.$id])&&h[c])h[c].$val=b;ra(e[c]);f.$events&&R.$fire.call(f,c,b,g)}return b};l.push(function(){Z[C]={evaluator:p,element:H,type:"computed::"+c,handler:w,args:[]};p();ha(g[c]);delete Z[C]})}else Na.test(k)?(p=function(b){var e=p.child,h=d[c];if(arguments.length)!ga&&!ia(h,b)&&(e=p.child=Ab(f,c,b,k),b=d[c]=e.$model,(e=sa[e.$id])&&e(), -f.$events&&R.$fire.call(f,c,b,h));else return ha(g[c]),e},(p.child=K(e,0,d[c])).$events[G]=g[c]):p=function(b){var e=d[c];if(arguments.length){if(!ia(e,b)){d[c]=b;if(ja){var h=X[f.$id];h&&h[c]&&(h[c].$val=b)}ra(g[c]);f.$events&&R.$fire.call(f,c,b,e)}}else return ha(g[c]),e};h[c]=p}})(e,b[e]);Ma.forEach(function(c){delete b[c];delete d[c]});Object.defineProperties(f,Bb(h));for(var k in b)h[k]||(f[k]=b[k]);f.$id=fa();f.$model=d;f.$events=g;for(e in R)f[e]=R[e];Object.defineProperty(f,"hasOwnProperty", -{value:function(b){return b in f.$model},writable:!1,enumerable:!1,configurable:!0});l.forEach(function(b){b()});return f}function Bb(b){var c={},d;for(d in b)c[d]={get:b[d],set:b[d],enumerable:!0,configurable:!0};return c}function Ab(b,c,d,e){var f=b[c];if("array"===e){if(!Array.isArray(d)||f===d)return f;f.clear();f.pushArray(d.concat());return f}var g=b.$events[c];X[f.$id]&&(ja--,delete X[f.$id]);var h=K(d);h.$events[G]=g;sa[h.$id]=function(b){for(;b=g.shift();)(function(b){b.type&&avalon.nextTick(function(){b.rollback&& -b.rollback();y[b.type](b,b.vmodels)})})(b);delete sa[h.$id]};return h}function t(b){for(var c in b)if(Oa.call(b,c)){var d=b[c];if("function"===typeof t.plugins[c])t.plugins[c](d);else"object"===typeof t[c]?avalon.mix(t[c],d):t[c]=d}return this}function Pa(b){return b.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function ka(b){return 0>b.indexOf("-")&&0>b.indexOf("_")?b:b.replace(/[-_][^-_]/g,function(b){return b.charAt(1).toUpperCase()})}function la(b){try{b="true"===b?!0:"false"===b?!1:"null"=== -b?null:+b+""===b?+b:Cb.test(b)?JSON.parse(b):b}catch(c){}return b}function Qa(b,c){if(0>=b.offsetWidth){var d=getComputedStyle(b,null);if(Db.test(d.display)){var e={node:b},f;for(f in Ra)e[f]=d[f],b.style[f]=Ra[f];c.push(e)}(d=b.parentNode)&&1===d.nodeType&&Qa(d,c)}}function ta(b){Z[C]=b;avalon.openComputedCollect=!0;var c=b.evaluator;if(c)try{var d=Eb.test(b.type)?b:c.apply(0,b.args);b.handler(d,b.element,b)}catch(e){v("warning:exception throwed in [registerSubscriber] "+e),delete b.evaluator,c= -b.element,3===c.nodeType&&(d=c.parentNode,t.commentInterpolate?d.replaceChild(q.createComment(b.value),c):c.data=L+b.value+M)}avalon.openComputedCollect=!1;delete Z[C]}function ha(b){var c=Z[C];b&&(c&&avalon.Array.ensure(b,c)&&c.element)&&Sa(c,b)}function Sa(b,c){b.$uuid=b.$uuid||fa();c.$uuid=c.$uuid||fa();var d={data:b,list:c,toString:function(){return b.$uuid+" "+c.$uuid}};S[d]||(S[d]=1,S.push(d))}function Ta(){for(var b=ua,c=ua+Fb;bb&&delete c[d.shift()];return c[e]=f}var d=[];return c}function oa(b,c,d){var e=d.type,f=d.filters?d.filters.join(""):"",g=c.map(function(b){return b.$id.replace(Nb,"$1")})+b+ -e+f,h=Ob(b).concat(),l=[],k=[],m=[],n="";c=eb(c);for(var p=0,n=c.length;pt.maxRepeatSize&&ba.pop()}b.length=0}function ca(){B?(r["ready!"].state=2,B.checkDeps()):lb.forEach(function(b){b(avalon)});ca=w}var C=Date.now(),G="$"+C,u=this||(0,eval)("this"),Xb=u.require,Yb=u.define,ga=!1,x=/[^, ]+/g,Na=/^(?:object|array)$/,mb=/^\[object SVG\w*Element\]$/,Zb=/^\[object (Window|DOMWindow|global)\]$/,Da=Object.prototype,Oa=Da.hasOwnProperty, -Ea=Da.toString,O=Array.prototype,ma=O.slice,Z={},H=q.head,D=q.documentElement,I=q.createDocumentFragment(),da=q.createElement("div"),nb={};"Boolean Number String Function Array Date RegExp Object Error".replace(x,function(b){nb["[object "+b+"]"]=b.toLowerCase()});u.avalon=function(b){return new avalon.init(b)};avalon.init=function(b){this[0]=this.element=b};avalon.fn=avalon.prototype=avalon.init.prototype;avalon.isFunction=V;avalon.type=function(b){return null==b?String(b):"object"===typeof b||"function"=== -typeof b?nb[Ea.call(b)]||"object":typeof b};avalon.isWindow=function(b){return Zb.test(Ea.call(b))};avalon.isPlainObject=function(b){return!!b&&"object"===typeof b&&Object.getPrototypeOf(b)===Da};avalon.mix=avalon.fn.mix=function(){var b,c,d,e,f,g=arguments[0]||{},h=1,l=arguments.length,k=!1;"boolean"===typeof g&&(k=g,g=arguments[1]||{},h++);"object"!==typeof g&&"function"!==avalon.type(g)&&(g={});h===l&&(g=this,h--);for(;h';if(!mb.test(ob.firstChild)){var Fa=function(b,c){if(b&&b.childNodes)for(var d=b.childNodes,e=0,f;f=d[e++];)if(f.tagName){var g=q.createElementNS("http://www.w3.org/2000/svg",f.tagName.toLowerCase());O.forEach.call(f.attributes,function(b){g.setAttribute(b.name,b.value)});Fa(f,g);c.appendChild(g)}};Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0, -configurable:!0,get:function(){return(new XMLSerializer).serializeToString(this)},set:function(b){var c=this.tagName.toLowerCase(),d=this.parentNode;b=avalon.parseHTML(b);"svg"===c?d.insertBefore(b,this):(c=q.createDocumentFragment(),Fa(b,c),d.insertBefore(c,this));d.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var b=RegExp("$","i");return this.outerHTML.replace(RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),"").replace(b,"")},set:function(b){avalon.clearHTML&& -(avalon.clearHTML(this),b=avalon.parseHTML(b),Fa(b,this))}}})}}var na=avalon.vmodels={};avalon.define=function(b,c){var d=b.$id||b;d||v("warning: \u5fc5\u987b\u6307\u5b9a$id");na[d]&&v("warning: "+d+" \u5df2\u7ecf\u5b58\u5728\u4e8eavalon.vmodels\u4e2d");if("object"===typeof b)var e=K(b);else e={$watch:w},c(e),e=K(e),ga=!0,c(e),ga=!1;e.$id=d;return na[d]=e};var Ma="$id,$watch,$unwatch,$fire,$events,$model,$skipArray".match(x),ia=Object.is||function(b,c){return 0===b&&0===c?1/b===1/c:b!==b?c!==c:b=== -c},X={},ja=0,sa={},L,M,$,pb,db,qb=/[-.*+?^${}()|[\]\/\\]/g,B=w,P={loader:function(b){u.define=b?B.define:Yb;u.require=b?B:Xb},interpolate:function(b){L=b[0];M=b[1];L===M?avalon.error("openTag!==closeTag",SyntaxError):"\x3c!--,--\x3e"===b+""?t.commentInterpolate=!0:(b=L+"test"+M,da.innerHTML=b,da.innerHTML!==b&&0<=da.innerHTML.indexOf("<")&&avalon.error("\u6b64\u5b9a\u754c\u7b26\u4e0d\u5408\u6cd5",SyntaxError),da.innerHTML="");b=(L+"").replace(qb,"\\$&");var c=(M+"").replace(qb,"\\$&");$=RegExp(b+ -"(.*?)"+c);pb=RegExp(b+"(.*?)"+c,"g");db=RegExp(b+".*?"+c+"|\\sms-")}};t.debug=!0;t.plugins=P;t.plugins.interpolate(["{{","}}"]);t.paths={};t.shim={};t.maxRepeatSize=100;avalon.config=t;"add,remove".replace(x,function(b){avalon.fn[b+"Class"]=function(c){var d=this[0];c&&("string"===typeof c&&d&&1===d.nodeType)&&c.replace(/\S+/g,function(c){d.classList[b](c)});return this}});avalon.fn.mix({hasClass:function(b){var c=this[0]||{};return 1===c.nodeType&&c.classList.contains(b)},toggleClass:function(b, -c){for(var d,e=0,f=b.split(/\s+/),g="boolean"===typeof c;d=f[e++];)this[(g?c:!this.hasClass(d))?"addClass":"removeClass"](d);return this},attr:function(b,c){return 2===arguments.length?(this[0].setAttribute(b,c),this):this[0].getAttribute(b)},data:function(b,c){b="data-"+Pa(b||"");switch(arguments.length){case 2:return this.attr(b,c),this;case 1:var d=this.attr(b);return la(d);case 0:var e={};O.forEach.call(this[0].attributes,function(c){c&&(b=c.name,b.indexOf("data-")||(b=ka(b.slice(5)),e[b]=la(c.value)))}); -return e}},removeData:function(b){b="data-"+Pa(b);this[0].removeAttribute(b);return this},css:function(b,c){if(avalon.isPlainObject(b))for(var d in b)avalon.css(this,d,b[d]);else var e=avalon.css(this,b,c);return void 0!==e?e:this},position:function(){var b,c,d=this[0],e={top:0,left:0};if(d)return"fixed"===this.css("position")?c=d.getBoundingClientRect():(b=this.offsetParent(),c=this.offset(),"HTML"!==b[0].tagName&&(e=b.offset()),e.top+=avalon.css(b[0],"borderTopWidth",!0),e.left+=avalon.css(b[0], -"borderLeftWidth",!0)),{top:c.top-e.top-avalon.css(d,"marginTop",!0),left:c.left-e.left-avalon.css(d,"marginLeft",!0)}},offsetParent:function(){for(var b=this[0].offsetParent||D;b&&"HTML"!==b.tagName&&"static"===avalon.css(b,"position");)b=b.offsetParent;return avalon(b||D)},bind:function(b,c,d){if(this[0])return avalon.bind(this[0],b,c,d)},unbind:function(b,c,d){this[0]&&avalon.unbind(this[0],b,c,d);return this},val:function(b){var c=this[0];if(c&&1===c.nodeType){var d=0===arguments.length,e=d?":get": -":set",f=$b,g;g=c.tagName.toLowerCase();g="input"===g&&/checkbox|radio/.test(c.type)?"checked":g;if(e=f[g+e])var h=e(c,b);else{if(d)return(c.value||"").replace(/\r/g,"");c.value=b}}return d?h:this}});D.dataset&&(avalon.fn.data=function(b,c){var d=this[0].dataset;switch(arguments.length){case 2:return d[b]=c,this;case 1:return c=d[b],la(c);case 0:var e={};for(b in d)e[b]=la(d[b]);return e}});var Cb=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/;avalon.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b, -c){avalon.fn[b]=function(d){var e=this[0]||{},f=e.window&&e.document?e:9===e.nodeType?e.defaultView:!1,g="scrollTop"===b;if(arguments.length)f?f.scrollTo(!g?d:avalon(f).scrollLeft(),g?d:avalon(f).scrollTop()):e[b]=d;else return f?f[c]:e[b]}});var z=avalon.cssHooks={},rb=["","-webkit-","-moz-","-ms-"],Ga={"float":"cssFloat",background:"backgroundColor"};avalon.cssNumber=Q("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom");avalon.cssName=function(b,c,d){if(Ga[b])return Ga[b]; -c=c||D.style;for(var e=0,f=rb.length;ek&&(e=e-avalon.css(c,"border"+d[0]+"Width", -!0)-avalon.css(c,"border"+d[1]+"Width",!0));-4===k&&(e=e-avalon.css(c,"padding"+d[0],!0)-avalon.css(c,"padding"+d[1],!0));return e};z[c+"&get"]=function(b){var d=[];Qa(b,d);for(var e=z[c+":get"](b),f=0,m;m=d[f++];){b=m.node;for(var n in m)"string"===typeof m[n]&&(b.style[n]=m[n])}return e};avalon.fn[c]=function(g){var h=this[0];if(0===arguments.length){if(h.setTimeout)return h["inner"+b]||h.document.documentElement[d];if(9===h.nodeType){var l=h.documentElement;return Math.max(h.body[e],l[e],h.body[f], -l[f],l[d])}return z[c+"&get"](h)}return this.css(c,g)};avalon.fn["inner"+b]=function(){return z[c+":get"](this[0],void 0,-2)};avalon.fn["outer"+b]=function(b){return z[c+":get"](this[0],void 0,!0===b?2:0)}});avalon.fn.offset=function(){var b=this[0],c={left:0,top:0};if(!b||!b.tagName||!b.ownerDocument)return c;var d=b.ownerDocument,e=d.documentElement,d=d.defaultView;if(!e.contains(b))return c;void 0!==b.getBoundingClientRect&&(c=b.getBoundingClientRect());return{top:c.top+d.pageYOffset-e.clientTop, -left:c.left+d.pageXOffset-e.clientLeft}};var $b={"select:get":function(b,c){for(var d,e=b.options,f=b.selectedIndex,g="select-one"===b.type||0>f,h=g?null:[],l=g?f+1:e.length,k=0>f?l:g?f:0;k]*)\/>/ig, -ac=Q(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),ub=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/,s=new function(){avalon.mix(this,{option:q.createElement("select"),thead:q.createElement("table"),td:q.createElement("tr"),area:q.createElement("map"),tr:q.createElement("tbody"),col:q.createElement("colgroup"),legend:q.createElement("fieldset"),"*":q.createElement("div"),text:q.createElementNS("http://www.w3.org/2000/svg","svg")});this.optgroup=this.option; -this.tbody=this.tfoot=this.colgroup=this.caption=this.thead;this.th=this.td};"g,circle,ellipse,line,path,polygon,polyline,text".replace(x,function(b){s[b]=s.text});avalon.clearHTML=function(b){for(;b.firstChild;)b.removeChild(b.firstChild);return b};sb=/<([\w:]+)/;tb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig;ub=/<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/;s={area:[1,""],param:[1,""],col:[2,"
","
"],legend:[1,"
"], -option:[1," + + From fe65333b5b5b00a6256ceb600a7030e07ef9592c Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Tue, 4 Nov 2014 21:39:39 +0800 Subject: [PATCH 068/143] update validate --- avalon.validation.js | 76 +++++++++++++++++++++++++------------------- test.html | 10 +++++- 2 files changed, 52 insertions(+), 34 deletions(-) diff --git a/avalon.validation.js b/avalon.validation.js index bfbd2c628..c37d9f113 100644 --- a/avalon.validation.js +++ b/avalon.validation.js @@ -481,11 +481,9 @@ define(["avalon"], function(avalon) { avalon.scan(element, [vmodel].concat(vmodels)) onSubmitCallback = avalon.bind(element, "submit", function(e) { e.preventDefault() - vm.validateAll(options.callback) + vm.validateAll(vm.onValidateAll) }) - avalon.log("avalon validation init") - if (typeof options.onInit === "function") { - //vmodels是不包括vmodel的 + if (typeof options.onInit === "function") { //vmodels是不包括vmodel的 options.onInit.call(element, vmodel, options, vmodels) } } @@ -495,9 +493,8 @@ define(["avalon"], function(avalon) { element.textContent = element.innerHTML = "" } //重写框架内部的pipe方法 - vm.pipe = function(val, data, action, validate) { + vm.pipe = function(val, data, action, inSubmit) { var inwardHooks = vmodel.validationHooks - var globalHooks = avalon.duplexHooks var promises = [] var elem = data.element @@ -514,15 +511,12 @@ define(["avalon"], function(avalon) { if (a) { resolve(true) } else { - var reason = {} - for(var i in data){ - if(typeof data[i] !== "function"){ - reason[i] = data - } + var reason = { + element: element, + message: hook.message, + validateRule: name } - reason.message = hook.message - reason.validateRule = name - reject(reason) + resolve(reason) } } } else { @@ -531,48 +525,64 @@ define(["avalon"], function(avalon) { val = hook[action](val, data, next) } }) - if (promises.length) {//如果stack不为空,说明经过验证拦截器 - var lastPromise = Promise.all(promises).then(function() { - console.log("成功?") - //callback(true, [])//这里只放置未通过验证的组件 - }, function() { - console.log(arguments) - console.log("失败") - // callback(false, data) + if (promises.length) {//如果promises不为空,说明经过验证拦截器 + var lastPromise = Promise.all(promises).then(function(array) { + if (!inSubmit) { + var reasons = [] + for (var i = 0, el; el = array[i++]; ) { + if (typeof el === "object") { + reasons.push(el) + } + } + if (reasons.length) { + vm.onError(false, reasons) + } else { + vm.onSuccess(true, reasons) + } + vm.onComplete(true) + } + return reasons }) - if(validate){ + if (inSubmit) { return lastPromise } } return val } vm.validateAll = function(callback) { - var data = vm.elements var promise = vm.elements.map(function(el) { - return vm.pipe(avalon(el).val(), el, "get", "validate") + return vm.pipe(avalon(el).val(), el, "get", true) }) - Promise.all.apply(Promise, promise).then(function() { - callback(true, [])//这里只放置未通过验证的组件 - }, function() { - callback(false, data) + Promise.all(promise).then(function(array) { + var reasons = [] + for (var i = 0, el; el = array[i++]; ) { + reasons = reasons.concat(array) + } + callback(!reasons.length, reasons)//这里只放置未通过验证的组件 }) } + //收集下方表单元素的数据 vm.$watch("init-ms-duplex", function(data) { if (typeof data.pipe !== "function" && avalon.contains(element, data.element)) { data.pipe = vm.pipe vm.elements.push(data) - // avalon.log(data) return false } - }) - }) return vmodel } widget.defaults = { - validationHooks: {} + validationHooks: {}, + onSuccess: function() { + }, + onError: function() { + }, + onComplete: function() { + }, + onValidateAll: function() { + } } //http://bootstrapvalidator.com/ //https://github.com/rinh/jvalidator/blob/master/src/index.js diff --git a/test.html b/test.html index fd4501c9c..01a6cd8c0 100644 --- a/test.html +++ b/test.html @@ -13,7 +13,15 @@ aaa: 111, $skipArray: ["validation"], validation: { + onSuccess: function() { + console.log("success") + }, + onError: function(a, b) { + console.log(b) + console.log("error") + }, validationHooks: { + message: "等等", async: { get: function(val, data, next) { setTimeout(function() { @@ -35,7 +43,7 @@
- +
From 3f266abb34d820a17c7853da3de51254e8031ac7 Mon Sep 17 00:00:00 2001 From: RubyLouvre Date: Tue, 4 Nov 2014 21:44:53 +0800 Subject: [PATCH 069/143] update validation --- ...345\233\276\347\211\20720141104214227.jpg" | Bin 0 -> 111995 bytes examples/jquery.js | 10308 ++++++++++++++++ examples/validation.html | 333 + 3 files changed, 10641 insertions(+) create mode 100644 "QQ\345\233\276\347\211\20720141104214227.jpg" create mode 100644 examples/jquery.js create mode 100644 examples/validation.html diff --git "a/QQ\345\233\276\347\211\20720141104214227.jpg" "b/QQ\345\233\276\347\211\20720141104214227.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..dabd6594c7f024bde1a6fcb7c10525cb98a760fb GIT binary patch literal 111995 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 OfA01EIZp7`?Ee9y+FpJD literal 0 HcmV?d00001 diff --git a/examples/jquery.js b/examples/jquery.js new file mode 100644 index 000000000..d4b67f7e6 --- /dev/null +++ b/examples/jquery.js @@ -0,0 +1,10308 @@ +/*! + * jQuery JavaScript Library v1.11.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-05-01T17:42Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper window is present, + // execute the factory and get jQuery + // For environments that do not inherently posses a window with a document + // (such as Node.js), expose a jQuery-making factory as module.exports + // This accentuates the need for the creation of a real window + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var deletedIds = []; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.11.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v1.10.19 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-04-18 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowclip^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery(function() { + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + // Minified: var a,b,c + var input = document.createElement( "input" ), + div = document.createElement( "div" ), + fragment = document.createDocumentFragment(); + + // Setup + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "