前言
由于工作需要,找了很多版本的词云,在此分享供大家参考,样式优化自行解决。
拖动、缩放、点击 、牵引(鼠标指向的方向就是转动的地方)(复制及可用)
注意:依赖文件 在 index.html 中引入(依赖文件下面直接提供) 设置TagCanvas的样式请看文档
< template>
< div class = "ciyun" >
< canvas id= "myCanvas" > < / canvas>
< div id= "tags" >
< a href= "http://www.baidu.com" target= "_blank" > 爱< / a>
< a href= "http://www.baidu.com" target= "_blank" > 承诺< / a>
< a href= "http://www.baidu.com" target= "_blank" > 轻时尚< / a>
< a href= "http://www.baidu.com" target= "_blank" > 简约< / a>
< a href= "http://www.baidu.com" target= "_blank" > 科技< / a>
< a href= "http://www.baidu.com" target= "_blank" > 美丽< / a>
< a href= "http://www.baidu.com" target= "_blank" > 智慧< / a>
< / div>
< / div>
< / template>
< script>
export default {
data ( ) {
return {
}
} ,
mounted ( ) {
this . ciyun ( )
} ,
methods: {
ciyun ( ) {
try {
var i, et = document. getElementById ( 'tags' ) . childNodes;
for ( i in et) {
if ( et[ i] . nodeName == 'A' ) {
et[ i] . style. color = "rgb(" + parseInt ( Math. random ( ) * 255 ) + "," + parseInt ( Math. random ( ) * 255 ) + "," + parseInt ( Math. random ( ) * 255 ) + ")" ;
}
et[ i] . nodeName == 'A' && et[ i] . addEventListener ( 'mouseover' , function ( e ) {
e. preventDefault ( ) ;
} ) ;
}
TagCanvas. Start ( 'myCanvas' , 'tags' , {
textColour: null ,
outlineColour: '#fff' ,
reverse: true ,
depth: 2.9 ,
dragControl: false ,
dragControl: true ,
decel: 0.95 ,
maxSpeed: 0.05 ,
initial: [ - 0.2 , 0 ]
} ) ;
} catch ( e) {
}
}
} ,
}
< / script>
< style scoped lang= "scss" >
. ciyun{
text- align: center;
width: 100 % ;
height: 100 % ;
}
#myCanvas {
width: 100 % ;
height: 100 % ;
}
#tags {
width: 100 % ;
}
< / style>
< script type = "text/javascript" src= "./jquery-1.11.3.min.js" > < / script>
< script type = "text/javascript" src= "./tagcanvas.min.js" > < / script>
jquery-1.11.3.min.js
! function ( a, b ) { "object" == typeof module&& "object" == typeof module. exports? module. exports= a. document? b ( a, ! 0 ) : function ( a ) { if ( ! a. document) throw new Error ( "jQuery requires a window with a document" ) ; return b ( a) } : b ( a) } ( "undefined" != typeof window? window: this , function ( a, b ) { var c= [ ] , d= c. slice, e= c. concat, f= c. push, g= c. indexOf, h= { } , i= h. toString, j= h. hasOwnProperty, k= { } , l= "1.11.3" , m = function ( a, b ) { return new m. fn. init ( a, b) } , n= / ^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$ / g , o= / ^-ms- / , p= / -([\da-z]) / gi , q = function ( a, b ) { return b. toUpperCase ( ) } ; m. fn= m. prototype= { jquery: l, constructor: m, selector: "" , length: 0 , toArray : function ( ) { return d . call ( this ) } , get : function ( a ) { return null != a? 0 > a? this [ a+ this . length] : this [ a] : d . call ( this ) } , pushStack : function ( a ) { var b= m. merge ( this . constructor ( ) , a) ; return b. prevObject= this , b. context= this . context, b} , each : function ( a, b ) { return m. each ( this , a, b) } , map : function ( a ) { return this . pushStack ( m. map ( this , function ( b, c ) { return a . call ( b, c, b) } ) ) } , slice : function ( ) { return this . pushStack ( d . apply ( this , arguments) ) } , first : function ( ) { return this . eq ( 0 ) } , last : function ( ) { return this . eq ( - 1 ) } , eq : function ( a ) { var b= this . length, c= + a+ ( 0 > a? b: 0 ) ; return this . pushStack ( c>= 0 && b> c? [ this [ c] ] : [ ] ) } , end : function ( ) { return this . prevObject|| this . constructor ( null ) } , push: f, sort: c. sort, splice: c. splice} , m. extend= m. fn. extend = function ( ) { var a, b, c, d, e, f, g= arguments[ 0 ] || { } , h= 1 , i= arguments. length, j= ! 1 ; for ( "boolean" == typeof g&& ( j= g, g= arguments[ h] || { } , h++ ) , "object" == typeof g|| m. isFunction ( g) || ( g= { } ) , h=== i&& ( g= this , h-- ) ; i> h; h++ ) if ( null != ( e= arguments[ h] ) ) for ( d in e) a= g[ d] , c= e[ d] , g!== c&& ( j&& c&& ( m. isPlainObject ( c) || ( b= m. isArray ( c) ) ) ? ( b? ( b= ! 1 , f= a&& m. isArray ( a) ? a: [ ] ) : f= a&& m. isPlainObject ( a) ? a: { } , g[ d] = m. extend ( j, f, c) ) : void 0 !== c&& ( g[ d] = c) ) ; return g} , m. extend ( { expando: "jQuery" + ( l+ Math. random ( ) ) . replace ( / \D / g , "" ) , isReady: ! 0 , error : function ( a ) { throw new Error ( a) } , noop : function ( ) { } , isFunction : function ( a ) { return "function" === m. type ( a) } , isArray: Array. isArray|| function ( a ) { return "array" === m. type ( a) } , isWindow : function ( a ) { return null != a&& a== a. window} , isNumeric : function ( a ) { return ! m. isArray ( a) && a- parseFloat ( a) + 1 >= 0 } , isEmptyObject : function ( a ) { var b; for ( b in a) return ! 1 ; return ! 0 } , isPlainObject : function ( a ) { var b; if ( ! a|| "object" !== m. type ( a) || a. nodeType|| m. isWindow ( a) ) return ! 1 ; try { if ( a. constructor&& ! j . call ( a, "constructor" ) && ! j . call ( a. constructor. prototype, "isPrototypeOf" ) ) return ! 1 } catch ( c) { return ! 1 } if ( k. ownLast) for ( b in a) return j . call ( a, b) ; for ( b in a) ; return void 0 === b|| j . call ( a, b) } , type : function ( a ) { return null == a? a+ "" : "object" == typeof a|| "function" == typeof a? h[ i . call ( a) ] || "object" : typeof a} , globalEval : function ( b ) { b&& m. trim ( b) && ( a. execScript|| function ( b ) { a. eval . call ( a, b) } ) ( b) } , camelCase : function ( a ) { return a. replace ( o, "ms-" ) . replace ( p, q) } , nodeName : function ( a, b ) { return a. nodeName&& a. nodeName. toLowerCase ( ) === b. toLowerCase ( ) } , each : function ( a, b, c ) { var d, e= 0 , f= a. length, g= r ( a) ; if ( c) { if ( g) { for ( ; f> e; e++ ) if ( d= b . apply ( a[ e] , c) , d=== ! 1 ) break } else for ( e in a) if ( d= b . apply ( a[ e] , c) , d=== ! 1 ) break } else if ( g) { for ( ; f> e; e++ ) if ( d= b . call ( a[ e] , e, a[ e] ) , d=== ! 1 ) break } else for ( e in a) if ( d= b . call ( a[ e] , e, a[ e] ) , d=== ! 1 ) break ; return a} , trim : function ( a ) { return null == a? "" : ( a+ "" ) . replace ( n, "" ) } , makeArray : function ( a, b ) { var c= b|| [ ] ; return null != a&& ( r ( Object ( a) ) ? m. merge ( c, "string" == typeof a? [ a] : a) : f . call ( c, a) ) , c} , inArray : function ( a, b, c ) { var d; if ( b) { if ( g) return g . call ( b, a, c) ; for ( d= b. length, c= c? 0 > c? Math. max ( 0 , d+ c) : c: 0 ; d> c; c++ ) if ( c in b&& b[ c] === a) return c} return - 1 } , merge : function ( a, b ) { var c= + b. length, d= 0 , e= a. length; while ( c> d) a[ e++ ] = b[ d++ ] ; if ( c!== c) while ( void 0 !== b[ d] ) a[ e++ ] = b[ d++ ] ; return a. length= e, a} , grep : function ( a, b, c ) { for ( var d, e= [ ] , f= 0 , g= a. length, h= ! c; g> f; f++ ) d= ! b ( a[ f] , f) , d!== h&& e. push ( a[ f] ) ; return e} , map : function ( a, b, c ) { var d, f= 0 , g= a. length, h= r ( a) , i= [ ] ; if ( h) for ( ; g> f; f++ ) d= b ( a[ f] , f, c) , null != d&& i. push ( d) ; else for ( f in a) d= b ( a[ f] , f, c) , null != d&& i. push ( d) ; return e . apply ( [ ] , i) } , guid: 1 , proxy : function ( a, b ) { var c, e, f; return "string" == typeof b&& ( f= a[ b] , b= a, a= f) , m. isFunction ( a) ? ( c= d . call ( arguments, 2 ) , e = function ( ) { return a . apply ( b|| this , c. concat ( d . call ( arguments) ) ) } , e. guid= a. guid= a. guid|| m. guid++ , e) : void 0 } , now : function ( ) { return + new Date } , support: k} ) , m. each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) , function ( a, b ) { h[ "[object " + b+ "]" ] = b. toLowerCase ( ) } ) ; function r ( a ) { var b= "length" in a&& a. length, c= m. type ( a) ; return "function" === c|| m. isWindow ( a) ? ! 1 : 1 === a. nodeType&& b? ! 0 : "array" === c|| 0 === b|| "number" == typeof b&& b> 0 && b- 1 in a} var s = function ( a ) { var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u= "sizzle" + 1 * new Date , v= a. document, w= 0 , x= 0 , y= ha ( ) , z= ha ( ) , A = ha ( ) , B = function ( a, b ) { return a=== b&& ( l= ! 0 ) , 0 } , C = 1 << 31 , D = { } . hasOwnProperty, E = [ ] , F = E . pop, G = E . push, H = E . push, I = E . slice, J = function ( a, b ) { for ( var c= 0 , d= a. length; d> c; c++ ) if ( a[ c] === b) return c; return - 1 } , K = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped" , L = "[\\x20\\t\\r\\n\\f]" , M = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" , N = M . replace ( "w" , "w#" ) , O = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + N + "))|)" + L + "*\\]" , P = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + O + ")*)|.*)\\)|)" , Q = new RegExp ( L + "+" , "g" ) , R = new RegExp ( "^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$" , "g" ) , S = new RegExp ( "^" + L + "*," + L + "*" ) , T = new RegExp ( "^" + L + "*([>+~]|" + L + ")" + L + "*" ) , U = new RegExp ( "=" + L + "*([^\\]'\"]*?)" + L + "*\\]" , "g" ) , V = new RegExp ( P ) , W = new RegExp ( "^" + N + "$" ) , X = { ID : new RegExp ( "^#(" + M + ")" ) , CLASS : new RegExp ( "^\\.(" + M + ")" ) , TAG : new RegExp ( "^(" + M . replace ( "w" , "w*" ) + ")" ) , ATTR : new RegExp ( "^" + O ) , PSEUDO : new RegExp ( "^" + P ) , CHILD : new RegExp ( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + L + "*(even|odd|(([+-]|)(\\d*)n|)" + L + "*(?:([+-]|)" + L + "*(\\d+)|))" + L + "*\\)|)" , "i" ) , bool: new RegExp ( "^(?:" + K + ")$" , "i" ) , needsContext: new RegExp ( "^" + L + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + L + "*((?:-\\d)?\\d*)" + L + "*\\)|)(?=[^-]|$)" , "i" ) } , Y = / ^(?:input|select|textarea|button)$ / i , Z = / ^h\d$ / i , $= / ^[^{]+\{\s*\[native \w / , _= / ^(?:#([\w-]+)|(\w+)|\.([\w-]+))$ / , aa= / [+~] / , ba= / '|\\ / g , ca= new RegExp ( "\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)" , "ig" ) , da = function ( a, b, c ) { var d= "0x" + b- 65536 ; return d!== d|| c? b: 0 > d? String. fromCharCode ( d+ 65536 ) : String. fromCharCode ( d>> 10 | 55296 , 1023 & d| 56320 ) } , ea = function ( ) { m ( ) } ; try { H . apply ( E = I . call ( v. childNodes) , v. childNodes) , E [ v. childNodes. length] . nodeType} catch ( fa) { H = { apply: E . length? function ( a, b ) { G . apply ( a, I . call ( b) ) } : function ( a, b ) { var c= a. length, d= 0 ; while ( a[ c++ ] = b[ d++ ] ) ; a. length= c- 1 } } } function ga ( a, b, d, e ) { var f, h, j, k, l, o, r, s, w, x; if ( ( b? b. ownerDocument|| b: v) !== n&& m ( b) , b= b|| n, d= d|| [ ] , k= b. nodeType, "string" != typeof a|| ! a|| 1 !== k&& 9 !== k&& 11 !== k) return d; if ( ! e&& p) { if ( 11 !== k&& ( f= _. exec ( a) ) ) if ( j= f[ 1 ] ) { if ( 9 === k) { if ( h= b. getElementById ( j) , ! h|| ! h. parentNode) return d; if ( h. id=== j) return d. push ( h) , d} else if ( b. ownerDocument&& ( h= b. ownerDocument. getElementById ( j) ) && t ( b, h) && h. id=== j) return d. push ( h) , d} else { if ( f[ 2 ] ) return H . apply ( d, b. getElementsByTagName ( a) ) , d; if ( ( j= f[ 3 ] ) && c. getElementsByClassName) return H . apply ( d, b. getElementsByClassName ( j) ) , d} if ( c. qsa&& ( ! q|| ! q. test ( a) ) ) { if ( s= r= u, w= b, x= 1 !== k&& a, 1 === k&& "object" !== b. nodeName. toLowerCase ( ) ) { o= g ( a) , ( r= b. getAttribute ( "id" ) ) ? s= r. replace ( ba, "\\$&" ) : b. setAttribute ( "id" , s) , s= "[id='" + s+ "'] " , l= o. length; while ( l-- ) o[ l] = s+ ra ( o[ l] ) ; w= aa. test ( a) && pa ( b. parentNode) || b, x= o. join ( "," ) } if ( x) try { return H . apply ( d, w. querySelectorAll ( x) ) , d} catch ( y) { } finally { r|| b. removeAttribute ( "id" ) } } } return i ( a. replace ( R , "$1" ) , b, d, e) } function ha ( ) { var a= [ ] ; function b ( c, e ) { return a. push ( c+ " " ) > d. cacheLength&& delete b[ a. shift ( ) ] , b[ c+ " " ] = e} return b} function ia ( a ) { return a[ u] = ! 0 , a} function ja ( a ) { var b= n. createElement ( "div" ) ; try { return ! ! a ( b) } catch ( c) { return ! 1 } finally { b. parentNode&& b. parentNode. removeChild ( b) , b= null } } function ka ( a, b ) { var c= a. split ( "|" ) , e= a. length; while ( e-- ) d. attrHandle[ c[ e] ] = b} function la ( a, b ) { var c= b&& a, d= c&& 1 === a. nodeType&& 1 === b. nodeType&& ( ~ b. sourceIndex|| C ) - ( ~ a. sourceIndex|| C ) ; if ( d) return d; if ( c) while ( c= c. nextSibling) if ( c=== b) return - 1 ; return a? 1 : - 1 } function ma ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return "input" === c&& b. type=== a} } function na ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return ( "input" === c|| "button" === c) && b. type=== a} } function oa ( a ) { return ia ( function ( b ) { return b= + b, ia ( function ( c, d ) { var e, f= a ( [ ] , c. length, b) , g= f. length; while ( g-- ) c[ e= f[ g] ] && ( c[ e] = ! ( d[ e] = c[ e] ) ) } ) } ) } function pa ( a ) { return a&& "undefined" != typeof a. getElementsByTagName&& a} c= ga. support= { } , f= ga. isXML = function ( a ) { var b= a&& ( a. ownerDocument|| a) . documentElement; return b? "HTML" !== b. nodeName: ! 1 } , m= ga. setDocument = function ( a ) { var b, e, g= a? a. ownerDocument|| a: v; return g!== n&& 9 === g. nodeType&& g. documentElement? ( n= g, o= g. documentElement, e= g. defaultView, e&& e!== e. top&& ( e. addEventListener? e. addEventListener ( "unload" , ea, ! 1 ) : e. attachEvent&& e. attachEvent ( "onunload" , ea) ) , p= ! f ( g) , c. attributes= ja ( function ( a ) { return a. className= "i" , ! a. getAttribute ( "className" ) } ) , c. getElementsByTagName= ja ( function ( a ) { return a. appendChild ( g. createComment ( "" ) ) , ! a. getElementsByTagName ( "*" ) . length} ) , c. getElementsByClassName= $. test ( g. getElementsByClassName) , c. getById= ja ( function ( a ) { return o. appendChild ( a) . id= u, ! g. getElementsByName|| ! g. getElementsByName ( u) . length} ) , c. getById? ( d. find. ID = function ( a, b ) { if ( "undefined" != typeof b. getElementById&& p) { var c= b. getElementById ( a) ; return c&& c. parentNode? [ c] : [ ] } } , d. filter. ID = function ( a ) { var b= a. replace ( ca, da) ; return function ( a ) { return a. getAttribute ( "id" ) === b} } ) : ( delete d. find. ID , d. filter. ID = function ( a ) { var b= a. replace ( ca, da) ; return function ( a ) { var c= "undefined" != typeof a. getAttributeNode&& a. getAttributeNode ( "id" ) ; return c&& c. value=== b} } ) , d. find. TAG = c. getElementsByTagName? function ( a, b ) { return "undefined" != typeof b. getElementsByTagName? b. getElementsByTagName ( a) : c. qsa? b. querySelectorAll ( a) : void 0 } : function ( a, b ) { var c, d= [ ] , e= 0 , f= b. getElementsByTagName ( a) ; if ( "*" === a) { while ( c= f[ e++ ] ) 1 === c. nodeType&& d. push ( c) ; return d} return f} , d. find. CLASS = c. getElementsByClassName&& function ( a, b ) { return p? b. getElementsByClassName ( a) : void 0 } , r= [ ] , q= [ ] , ( c. qsa= $. test ( g. querySelectorAll) ) && ( ja ( function ( a ) { o. appendChild ( a) . innerHTML= " " , a. querySelectorAll ( "[msallowcapture^='']" ) . length&& q. push ( "[*^$]=" + L + "*(?:''|\"\")" ) , a. querySelectorAll ( "[selected]" ) . length|| q. push ( "\\[" + L + "*(?:value|" + K + ")" ) , a. querySelectorAll ( "[id~=" + u+ "-]" ) . length|| q. push ( "~=" ) , a. querySelectorAll ( ":checked" ) . length|| q. push ( ":checked" ) , a. querySelectorAll ( "a#" + u+ "+*" ) . length|| q. push ( ".#.+[+~]" ) } ) , ja ( function ( a ) { var b= g. createElement ( "input" ) ; b. setAttribute ( "type" , "hidden" ) , a. appendChild ( b) . setAttribute ( "name" , "D" ) , a. querySelectorAll ( "[name=d]" ) . length&& q. push ( "name" + L + "*[*^$|!~]?=" ) , a. querySelectorAll ( ":enabled" ) . length|| q. push ( ":enabled" , ":disabled" ) , a. querySelectorAll ( "*,:x" ) , q. push ( ",.*:" ) } ) ) , ( c. matchesSelector= $. test ( s= o. matches|| o. webkitMatchesSelector|| o. mozMatchesSelector|| o. oMatchesSelector|| o. msMatchesSelector) ) && ja ( function ( a ) { c. disconnectedMatch= s . call ( a, "div" ) , s . call ( a, "[s!='']:x" ) , r. push ( "!=" , P ) } ) , q= q. length&& new RegExp ( q. join ( "|" ) ) , r= r. length&& new RegExp ( r. join ( "|" ) ) , b= $. test ( o. compareDocumentPosition) , t= b|| $. test ( o. contains) ? function ( a, b ) { var c= 9 === a. nodeType? a. documentElement: a, d= b&& b. parentNode; return a=== d|| ! ( ! d|| 1 !== d. nodeType|| ! ( c. contains? c. contains ( d) : a. compareDocumentPosition&& 16 & a. compareDocumentPosition ( d) ) ) } : function ( a, b ) { if ( b) while ( b= b. parentNode) if ( b=== a) return ! 0 ; return ! 1 } , B = b? function ( a, b ) { if ( a=== b) return l= ! 0 , 0 ; var d= ! a. compareDocumentPosition- ! b. compareDocumentPosition; return d? d: ( d= ( a. ownerDocument|| a) === ( b. ownerDocument|| b) ? a. compareDocumentPosition ( b) : 1 , 1 & d|| ! c. sortDetached&& b. compareDocumentPosition ( a) === d? a=== g|| a. ownerDocument=== v&& t ( v, a) ? - 1 : b=== g|| b. ownerDocument=== v&& t ( v, b) ? 1 : k? J ( k, a) - J ( k, b) : 0 : 4 & d? - 1 : 1 ) } : function ( a, b ) { if ( a=== b) return l= ! 0 , 0 ; var c, d= 0 , e= a. parentNode, f= b. parentNode, h= [ a] , i= [ b] ; if ( ! e|| ! f) return a=== g? - 1 : b=== g? 1 : e? - 1 : f? 1 : k? J ( k, a) - J ( k, b) : 0 ; if ( e=== f) return la ( a, b) ; c= a; while ( c= c. parentNode) h. unshift ( c) ; c= b; while ( c= c. parentNode) i. unshift ( c) ; while ( h[ d] === i[ d] ) d++ ; return d? la ( h[ d] , i[ d] ) : h[ d] === v? - 1 : i[ d] === v? 1 : 0 } , g) : n} , ga. matches = function ( a, b ) { return ga ( a, null , null , b) } , ga. matchesSelector = function ( a, b ) { if ( ( a. ownerDocument|| a) !== n&& m ( a) , b= b. replace ( U , "='$1']" ) , ! ( ! c. matchesSelector|| ! p|| r&& r. test ( b) || q&& q. test ( b) ) ) try { var d= s . call ( a, b) ; if ( d|| c. disconnectedMatch|| a. document&& 11 !== a. document. nodeType) return d} catch ( e) { } return ga ( b, n, null , [ a] ) . length> 0 } , ga. contains = function ( a, b ) { return ( a. ownerDocument|| a) !== n&& m ( a) , t ( a, b) } , ga. attr = function ( a, b ) { ( a. ownerDocument|| a) !== n&& m ( a) ; var e= d. attrHandle[ b. toLowerCase ( ) ] , f= e&& D . call ( d. attrHandle, b. toLowerCase ( ) ) ? e ( a, b, ! p) : void 0 ; return void 0 !== f? f: c. attributes|| ! p? a. getAttribute ( b) : ( f= a. getAttributeNode ( b) ) && f. specified? f. value: null } , ga. error = function ( a ) { throw new Error ( "Syntax error, unrecognized expression: " + a) } , ga. uniqueSort = function ( a ) { var b, d= [ ] , e= 0 , f= 0 ; if ( l= ! c. detectDuplicates, k= ! c. sortStable&& a. slice ( 0 ) , a. sort ( B ) , l) { while ( b= a[ f++ ] ) b=== a[ f] && ( e= d. push ( f) ) ; while ( e-- ) a. splice ( d[ e] , 1 ) } return k= null , a} , e= ga. getText = function ( a ) { var b, c= "" , d= 0 , f= a. nodeType; if ( f) { if ( 1 === f|| 9 === f|| 11 === f) { if ( "string" == typeof a. textContent) return a. textContent; for ( a= a. firstChild; a; a= a. nextSibling) c+= e ( a) } else if ( 3 === f|| 4 === f) return a. nodeValue} else while ( b= a[ d++ ] ) c+= e ( b) ; return c} , d= ga. selectors= { cacheLength: 50 , createPseudo: ia, match: X , attrHandle: { } , find: { } , relative: { ">" : { dir: "parentNode" , first: ! 0 } , " " : { dir: "parentNode" } , "+" : { dir: "previousSibling" , first: ! 0 } , "~" : { dir: "previousSibling" } } , preFilter: { ATTR : function ( a ) { return a[ 1 ] = a[ 1 ] . replace ( ca, da) , a[ 3 ] = ( a[ 3 ] || a[ 4 ] || a[ 5 ] || "" ) . replace ( ca, da) , "~=" === a[ 2 ] && ( a[ 3 ] = " " + a[ 3 ] + " " ) , a. slice ( 0 , 4 ) } , CHILD : function ( a ) { return a[ 1 ] = a[ 1 ] . toLowerCase ( ) , "nth" === a[ 1 ] . slice ( 0 , 3 ) ? ( a[ 3 ] || ga. error ( a[ 0 ] ) , a[ 4 ] = + ( a[ 4 ] ? a[ 5 ] + ( a[ 6 ] || 1 ) : 2 * ( "even" === a[ 3 ] || "odd" === a[ 3 ] ) ) , a[ 5 ] = + ( a[ 7 ] + a[ 8 ] || "odd" === a[ 3 ] ) ) : a[ 3 ] && ga. error ( a[ 0 ] ) , a} , PSEUDO : function ( a ) { var b, c= ! a[ 6 ] && a[ 2 ] ; return X . CHILD . test ( a[ 0 ] ) ? null : ( a[ 3 ] ? a[ 2 ] = a[ 4 ] || a[ 5 ] || "" : c&& V . test ( c) && ( b= g ( c, ! 0 ) ) && ( b= c. indexOf ( ")" , c. length- b) - c. length) && ( a[ 0 ] = a[ 0 ] . slice ( 0 , b) , a[ 2 ] = c. slice ( 0 , b) ) , a. slice ( 0 , 3 ) ) } } , filter: { TAG : function ( a ) { var b= a. replace ( ca, da) . toLowerCase ( ) ; return "*" === a? function ( ) { return ! 0 } : function ( a ) { return a. nodeName&& a. nodeName. toLowerCase ( ) === b} } , CLASS : function ( a ) { var b= y[ a+ " " ] ; return b|| ( b= new RegExp ( "(^|" + L + ")" + a+ "(" + L + "|$)" ) ) && y ( a, function ( a ) { return b. test ( "string" == typeof a. className&& a. className|| "undefined" != typeof a. getAttribute&& a. getAttribute ( "class" ) || "" ) } ) } , ATTR : function ( a, b, c ) { return function ( d ) { var e= ga. attr ( d, a) ; return null == e? "!=" === b: b? ( e+= "" , "=" === b? e=== c: "!=" === b? e!== c: "^=" === b? c&& 0 === e. indexOf ( c) : "*=" === b? c&& e. indexOf ( c) > - 1 : "$=" === b? c&& e. slice ( - c. length) === c: "~=" === b? ( " " + e. replace ( Q , " " ) + " " ) . indexOf ( c) > - 1 : "|=" === b? e=== c|| e. slice ( 0 , c. length+ 1 ) === c+ "-" : ! 1 ) : ! 0 } } , CHILD : function ( a, b, c, d, e ) { var f= "nth" !== a. slice ( 0 , 3 ) , g= "last" !== a. slice ( - 4 ) , h= "of-type" === b; return 1 === d&& 0 === e? function ( a ) { return ! ! a. parentNode} : function ( b, c, i ) { var j, k, l, m, n, o, p= f!== g? "nextSibling" : "previousSibling" , q= b. parentNode, r= h&& b. nodeName. toLowerCase ( ) , s= ! i&& ! h; if ( q) { if ( f) { while ( p) { l= b; while ( l= l[ p] ) if ( h? l. nodeName. toLowerCase ( ) === r: 1 === l. nodeType) return ! 1 ; o= p= "only" === a&& ! o&& "nextSibling" } return ! 0 } if ( o= [ g? q. firstChild: q. lastChild] , g&& s) { k= q[ u] || ( q[ u] = { } ) , j= k[ a] || [ ] , n= j[ 0 ] === w&& j[ 1 ] , m= j[ 0 ] === w&& j[ 2 ] , l= n&& q. childNodes[ n] ; while ( l= ++ n&& l&& l[ p] || ( m= n= 0 ) || o. pop ( ) ) if ( 1 === l. nodeType&& ++ m&& l=== b) { k[ a] = [ w, n, m] ; break } } else if ( s&& ( j= ( b[ u] || ( b[ u] = { } ) ) [ a] ) && j[ 0 ] === w) m= j[ 1 ] ; else while ( l= ++ n&& l&& l[ p] || ( m= n= 0 ) || o. pop ( ) ) if ( ( h? l. nodeName. toLowerCase ( ) === r: 1 === l. nodeType) && ++ m&& ( s&& ( ( l[ u] || ( l[ u] = { } ) ) [ a] = [ w, m] ) , l=== b) ) break ; return m-= e, m=== d|| m% d=== 0 && m/ d>= 0 } } } , PSEUDO : function ( a, b ) { var c, e= d. pseudos[ a] || d. setFilters[ a. toLowerCase ( ) ] || ga. error ( "unsupported pseudo: " + a) ; return e[ u] ? e ( b) : e. length> 1 ? ( c= [ a, a, "" , b] , d. setFilters. hasOwnProperty ( a. toLowerCase ( ) ) ? ia ( function ( a, c ) { var d, f= e ( a, b) , g= f. length; while ( g-- ) d= J ( a, f[ g] ) , a[ d] = ! ( c[ d] = f[ g] ) } ) : function ( a ) { return e ( a, 0 , c) } ) : e} } , pseudos: { not: ia ( function ( a ) { var b= [ ] , c= [ ] , d= h ( a. replace ( R , "$1" ) ) ; return d[ u] ? ia ( function ( a, b, c, e ) { var f, g= d ( a, null , e, [ ] ) , h= a. length; while ( h-- ) ( f= g[ h] ) && ( a[ h] = ! ( b[ h] = f) ) } ) : function ( a, e, f ) { return b[ 0 ] = a, d ( b, null , f, c) , b[ 0 ] = null , ! c. pop ( ) } } ) , has: ia ( function ( a ) { return function ( b ) { return ga ( a, b) . length> 0 } } ) , contains: ia ( function ( a ) { return a= a. replace ( ca, da) , function ( b ) { return ( b. textContent|| b. innerText|| e ( b) ) . indexOf ( a) > - 1 } } ) , lang: ia ( function ( a ) { return W . test ( a|| "" ) || ga. error ( "unsupported lang: " + a) , a= a. replace ( ca, da) . toLowerCase ( ) , function ( b ) { var c; do if ( c= p? b. lang: b. getAttribute ( "xml:lang" ) || b. getAttribute ( "lang" ) ) return c= c. toLowerCase ( ) , c=== a|| 0 === c. indexOf ( a+ "-" ) ; while ( ( b= b. parentNode) && 1 === b. nodeType) ; return ! 1 } } ) , target : function ( b ) { var c= a. location&& a. location. hash; return c&& c. slice ( 1 ) === b. id} , root : function ( a ) { return a=== o} , focus : function ( a ) { return a=== n. activeElement&& ( ! n. hasFocus|| n. hasFocus ( ) ) && ! ! ( a. type|| a. href|| ~ a. tabIndex) } , enabled : function ( a ) { return a. disabled=== ! 1 } , disabled : function ( a ) { return a. disabled=== ! 0 } , checked : function ( a ) { var b= a. nodeName. toLowerCase ( ) ; return "input" === b&& ! ! a. checked|| "option" === b&& ! ! a. selected} , selected : function ( a ) { return a. parentNode&& a. parentNode. selectedIndex, a. selected=== ! 0 } , empty : function ( a ) { for ( a= a. firstChild; a; a= a. nextSibling) if ( a. nodeType< 6 ) return ! 1 ; return ! 0 } , parent : function ( a ) { return ! d. pseudos. empty ( a) } , header : function ( a ) { return Z . test ( a. nodeName) } , input : function ( a ) { return Y . test ( a. nodeName) } , button : function ( a ) { var b= a. nodeName. toLowerCase ( ) ; return "input" === b&& "button" === a. type|| "button" === b} , text : function ( a ) { var b; return "input" === a. nodeName. toLowerCase ( ) && "text" === a. type&& ( null == ( b= a. getAttribute ( "type" ) ) || "text" === b. toLowerCase ( ) ) } , first: oa ( function ( ) { return [ 0 ] } ) , last: oa ( function ( a, b ) { return [ b- 1 ] } ) , eq: oa ( function ( a, b, c ) { return [ 0 > c? c+ b: c] } ) , even: oa ( function ( a, b ) { for ( var c= 0 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , odd: oa ( function ( a, b ) { for ( var c= 1 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , lt: oa ( function ( a, b, c ) { for ( var d= 0 > c? c+ b: c; -- d>= 0 ; ) a. push ( d) ; return a} ) , gt: oa ( function ( a, b, c ) { for ( var d= 0 > c? c+ b: c; ++ d< b; ) a. push ( d) ; return a} ) } } , d. pseudos. nth= d. pseudos. eq; for ( b in { radio: ! 0 , checkbox: ! 0 , file: ! 0 , password: ! 0 , image: ! 0 } ) d. pseudos[ b] = ma ( b) ; for ( b in { submit: ! 0 , reset: ! 0 } ) d. pseudos[ b] = na ( b) ; function qa ( ) { } qa. prototype= d. filters= d. pseudos, d. setFilters= new qa , g= ga. tokenize = function ( a, b ) { var c, e, f, g, h, i, j, k= z[ a+ " " ] ; if ( k) return b? 0 : k. slice ( 0 ) ; h= a, i= [ ] , j= d. preFilter; while ( h) { ( ! c|| ( e= S . exec ( h) ) ) && ( e&& ( h= h. slice ( e[ 0 ] . length) || h) , i. push ( f= [ ] ) ) , c= ! 1 , ( e= T . exec ( h) ) && ( c= e. shift ( ) , f. push ( { value: c, type: e[ 0 ] . replace ( R , " " ) } ) , h= h. slice ( c. length) ) ; for ( g in d. filter) ! ( e= X [ g] . exec ( h) ) || j[ g] && ! ( e= j[ g] ( e) ) || ( c= e. shift ( ) , f. push ( { value: c, type: g, matches: e} ) , h= h. slice ( c. length) ) ; if ( ! c) break } return b? h. length: h? ga. error ( a) : z ( a, i) . slice ( 0 ) } ; function ra ( a ) { for ( var b= 0 , c= a. length, d= "" ; c> b; b++ ) d+= a[ b] . value; return d} function sa ( a, b, c ) { var d= b. dir, e= c&& "parentNode" === d, f= x++ ; return b. first? function ( b, c, f ) { while ( b= b[ d] ) if ( 1 === b. nodeType|| e) return a ( b, c, f) } : function ( b, c, g ) { var h, i, j= [ w, f] ; if ( g) { while ( b= b[ d] ) if ( ( 1 === b. nodeType|| e) && a ( b, c, g) ) return ! 0 } else while ( b= b[ d] ) if ( 1 === b. nodeType|| e) { if ( i= b[ u] || ( b[ u] = { } ) , ( h= i[ d] ) && h[ 0 ] === w&& h[ 1 ] === f) return j[ 2 ] = h[ 2 ] ; if ( i[ d] = j, j[ 2 ] = a ( b, c, g) ) return ! 0 } } } function ta ( a ) { return a. length> 1 ? function ( b, c, d ) { var e= a. length; while ( e-- ) if ( ! a[ e] ( b, c, d) ) return ! 1 ; return ! 0 } : a[ 0 ] } function ua ( a, b, c ) { for ( var d= 0 , e= b. length; e> d; d++ ) ga ( a, b[ d] , c) ; return c} function va ( a, b, c, d, e ) { for ( var f, g= [ ] , h= 0 , i= a. length, j= null != b; i> h; h++ ) ( f= a[ h] ) && ( ! c|| c ( f, d, e) ) && ( g. push ( f) , j&& b. push ( h) ) ; return g} function wa ( a, b, c, d, e, f ) { return d&& ! d[ u] && ( d= wa ( d) ) , e&& ! e[ u] && ( e= wa ( e, f) ) , ia ( function ( f, g, h, i ) { var j, k, l, m= [ ] , n= [ ] , o= g. length, p= f|| ua ( b|| "*" , h. nodeType? [ h] : h, [ ] ) , q= ! a|| ! f&& b? p: va ( p, m, a, h, i) , r= c? e|| ( f? a: o|| d) ? [ ] : g: q; if ( c&& c ( q, r, h, i) , d) { j= va ( r, n) , d ( j, [ ] , h, i) , k= j. length; while ( k-- ) ( l= j[ k] ) && ( r[ n[ k] ] = ! ( q[ n[ k] ] = l) ) } if ( f) { if ( e|| a) { if ( e) { j= [ ] , k= r. length; while ( k-- ) ( l= r[ k] ) && j. push ( q[ k] = l) ; e ( null , r= [ ] , j, i) } k= r. length; while ( k-- ) ( l= r[ k] ) && ( j= e? J ( f, l) : m[ k] ) > - 1 && ( f[ j] = ! ( g[ j] = l) ) } } else r= va ( r=== g? r. splice ( o, r. length) : r) , e? e ( null , g, r, i) : H . apply ( g, r) } ) } function xa ( a ) { for ( var b, c, e, f= a. length, g= d. relative[ a[ 0 ] . type] , h= g|| d. relative[ " " ] , i= g? 1 : 0 , k= sa ( function ( a ) { return a=== b} , h, ! 0 ) , l= sa ( function ( a ) { return J ( b, a) > - 1 } , h, ! 0 ) , m= [ function ( a, c, d ) { var e= ! g&& ( d|| c!== j) || ( ( b= c) . nodeType? k ( a, c, d) : l ( a, c, d) ) ; return b= null , e} ] ; f> i; i++ ) if ( c= d. relative[ a[ i] . type] ) m= [ sa ( ta ( m) , c) ] ; else { if ( c= d. filter[ a[ i] . type] . apply ( null , a[ i] . matches) , c[ u] ) { for ( e= ++ i; f> e; e++ ) if ( d. relative[ a[ e] . type] ) break ; return wa ( i> 1 && ta ( m) , i> 1 && ra ( a. slice ( 0 , i- 1 ) . concat ( { value: " " === a[ i- 2 ] . type? "*" : "" } ) ) . replace ( R , "$1" ) , c, e> i&& xa ( a. slice ( i, e) ) , f> e&& xa ( a= a. slice ( e) ) , f> e&& ra ( a) ) } m. push ( c) } return ta ( m) } function ya ( a, b ) { var c= b. length> 0 , e= a. length> 0 , f = function ( f, g, h, i, k ) { var l, m, o, p= 0 , q= "0" , r= f&& [ ] , s= [ ] , t= j, u= f|| e&& d. find. TAG ( "*" , k) , v= w+= null == t? 1 : Math. random ( ) || .1 , x= u. length; for ( k&& ( j= g!== n&& g) ; q!== x&& null != ( l= u[ q] ) ; q++ ) { if ( e&& l) { m= 0 ; while ( o= a[ m++ ] ) if ( o ( l, g, h) ) { i. push ( l) ; break } k&& ( w= v) } c&& ( ( l= ! o&& l) && p-- , f&& r. push ( l) ) } if ( p+= q, c&& q!== p) { m= 0 ; while ( o= b[ m++ ] ) o ( r, s, g, h) ; if ( f) { if ( p> 0 ) while ( q-- ) r[ q] || s[ q] || ( s[ q] = F . call ( i) ) ; s= va ( s) } H . apply ( i, s) , k&& ! f&& s. length> 0 && p+ b. length> 1 && ga. uniqueSort ( i) } return k&& ( w= v, j= t) , r} ; return c? ia ( f) : f} return h= ga. compile = function ( a, b ) { var c, d= [ ] , e= [ ] , f= A [ a+ " " ] ; if ( ! f) { b|| ( b= g ( a) ) , c= b. length; while ( c-- ) f= xa ( b[ c] ) , f[ u] ? d. push ( f) : e. push ( f) ; f= A ( a, ya ( e, d) ) , f. selector= a} return f} , i= ga. select = function ( a, b, e, f ) { var i, j, k, l, m, n= "function" == typeof a&& a, o= ! f&& g ( a= n. selector|| a) ; if ( e= e|| [ ] , 1 === o. length) { if ( j= o[ 0 ] = o[ 0 ] . slice ( 0 ) , j. length> 2 && "ID" === ( k= j[ 0 ] ) . type&& c. getById&& 9 === b. nodeType&& p&& d. relative[ j[ 1 ] . type] ) { if ( b= ( d. find. ID ( k. matches[ 0 ] . replace ( ca, da) , b) || [ ] ) [ 0 ] , ! b) return e; n&& ( b= b. parentNode) , a= a. slice ( j. shift ( ) . value. length) } i= X . needsContext. test ( a) ? 0 : j. length; while ( i-- ) { if ( k= j[ i] , d. relative[ l= k. type] ) break ; if ( ( m= d. find[ l] ) && ( f= m ( k. matches[ 0 ] . replace ( ca, da) , aa. test ( j[ 0 ] . type) && pa ( b. parentNode) || b) ) ) { if ( j. splice ( i, 1 ) , a= f. length&& ra ( j) , ! a) return H . apply ( e, f) , e; break } } } return ( n|| h ( a, o) ) ( f, b, ! p, e, aa. test ( a) && pa ( b. parentNode) || b) , e} , c. sortStable= u. split ( "" ) . sort ( B ) . join ( "" ) === u, c. detectDuplicates= ! ! l, m ( ) , c. sortDetached= ja ( function ( a ) { return 1 & a. compareDocumentPosition ( n. createElement ( "div" ) ) } ) , ja ( function ( a ) { return a. innerHTML= " " , "#" === a. firstChild. getAttribute ( "href" ) } ) || ka ( "type|href|height|width" , function ( a, b, c ) { return c? void 0 : a. getAttribute ( b, "type" === b. toLowerCase ( ) ? 1 : 2 ) } ) , c. attributes&& ja ( function ( a ) { return a. innerHTML= " " , a. firstChild. setAttribute ( "value" , "" ) , "" === a. firstChild. getAttribute ( "value" ) } ) || ka ( "value" , function ( a, b, c ) { return c|| "input" !== a. nodeName. toLowerCase ( ) ? void 0 : a. defaultValue} ) , ja ( function ( a ) { return null == a. getAttribute ( "disabled" ) } ) || ka ( K , function ( a, b, c ) { var d; return c? void 0 : a[ b] === ! 0 ? b. toLowerCase ( ) : ( d= a. getAttributeNode ( b) ) && d. specified? d. value: null } ) , ga} ( a) ; m. find= s, m. expr= s. selectors, m. expr[ ":" ] = m. expr. pseudos, m. unique= s. uniqueSort, m. text= s. getText, m. isXMLDoc= s. isXML, m. contains= s. contains; var t= m. expr. match. needsContext, u= / ^<(\w+)\s*\/?>(?:<\/\1>|)$ / , v= / ^.[^:#\[\.,]*$ / ; function w ( a, b, c ) { if ( m. isFunction ( b) ) return m. grep ( a, function ( a, d ) { return ! ! b . call ( a, d, a) !== c} ) ; if ( b. nodeType) return m. grep ( a, function ( a ) { return a=== b!== c} ) ; if ( "string" == typeof b) { if ( v. test ( b) ) return m. filter ( b, a, c) ; b= m. filter ( b, a) } return m. grep ( a, function ( a ) { return m. inArray ( a, b) >= 0 !== c} ) } m. filter = function ( a, b, c ) { var d= b[ 0 ] ; return c&& ( a= ":not(" + a+ ")" ) , 1 === b. length&& 1 === d. nodeType? m. find. matchesSelector ( d, a) ? [ d] : [ ] : m. find. matches ( a, m. grep ( b, function ( a ) { return 1 === a. nodeType} ) ) } , m. fn. extend ( { find : function ( a ) { var b, c= [ ] , d= this , e= d. length; if ( "string" != typeof a) return this . pushStack ( m ( a) . filter ( function ( ) { for ( b= 0 ; e> b; b++ ) if ( m. contains ( d[ b] , this ) ) return ! 0 } ) ) ; for ( b= 0 ; e> b; b++ ) m. find ( a, d[ b] , c) ; return c= this . pushStack ( e> 1 ? m. unique ( c) : c) , c. selector= this . selector? this . selector+ " " + a: a, c} , filter : function ( a ) { return this . pushStack ( w ( this , a|| [ ] , ! 1 ) ) } , not : function ( a ) { return this . pushStack ( w ( this , a|| [ ] , ! 0 ) ) } , is : function ( a ) { return ! ! w ( this , "string" == typeof a&& t. test ( a) ? m ( a) : a|| [ ] , ! 1 ) . length} } ) ; var x, y= a. document, z= / ^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$ / , A = m. fn. init = function ( a, b ) { var c, d; if ( ! a) return this ; if ( "string" == typeof a) { if ( c= "<" === a. charAt ( 0 ) && ">" === a. charAt ( a. length- 1 ) && a. length>= 3 ? [ null , a, null ] : z. exec ( a) , ! c|| ! c[ 1 ] && b) return ! b|| b. jquery? ( b|| x) . find ( a) : this . constructor ( b) . find ( a) ; if ( c[ 1 ] ) { if ( b= b instanceof m ? b[ 0 ] : b, m. merge ( this , m. parseHTML ( c[ 1 ] , b&& b. nodeType? b. ownerDocument|| b: y, ! 0 ) ) , u. test ( c[ 1 ] ) && m. isPlainObject ( b) ) for ( c in b) m. isFunction ( this [ c] ) ? this [ c] ( b[ c] ) : this . attr ( c, b[ c] ) ; return this } if ( d= y. getElementById ( c[ 2 ] ) , d&& d. parentNode) { if ( d. id!== c[ 2 ] ) return x. find ( a) ; this . length= 1 , this [ 0 ] = d} return this . context= y, this . selector= a, this } return a. nodeType? ( this . context= this [ 0 ] = a, this . length= 1 , this ) : m. isFunction ( a) ? "undefined" != typeof x. ready? x. ready ( a) : a ( m) : ( void 0 !== a. selector&& ( this . selector= a. selector, this . context= a. context) , m. makeArray ( a, this ) ) } ; A . prototype= m. fn, x= m ( y) ; var B = / ^(?:parents|prev(?:Until|All)) / , C = { children: ! 0 , contents: ! 0 , next: ! 0 , prev: ! 0 } ; m. extend ( { dir : function ( a, b, c ) { var d= [ ] , e= a[ b] ; while ( e&& 9 !== e. nodeType&& ( void 0 === c|| 1 !== e. nodeType|| ! m ( e) . is ( c) ) ) 1 === e. nodeType&& d. push ( e) , e= e[ b] ; return d} , sibling : function ( a, b ) { for ( var c= [ ] ; a; a= a. nextSibling) 1 === a. nodeType&& a!== b&& c. push ( a) ; return c} } ) , m. fn. extend ( { has : function ( a ) { var b, c= m ( a, this ) , d= c. length; return this . filter ( function ( ) { for ( b= 0 ; d> b; b++ ) if ( m. contains ( this , c[ b] ) ) return ! 0 } ) } , closest : function ( a, b ) { for ( var c, d= 0 , e= this . length, f= [ ] , g= t. test ( a) || "string" != typeof a? m ( a, b|| this . context) : 0 ; e> d; d++ ) for ( c= this [ d] ; c&& c!== b; c= c. parentNode) if ( c. nodeType< 11 && ( g? g. index ( c) > - 1 : 1 === c. nodeType&& m. find. matchesSelector ( c, a) ) ) { f. push ( c) ; break } return this . pushStack ( f. length> 1 ? m. unique ( f) : f) } , index : function ( a ) { return a? "string" == typeof a? m. inArray ( this [ 0 ] , m ( a) ) : m. inArray ( a. jquery? a[ 0 ] : a, this ) : this [ 0 ] && this [ 0 ] . parentNode? this . first ( ) . prevAll ( ) . length: - 1 } , add : function ( a, b ) { return this . pushStack ( m. unique ( m. merge ( this . get ( ) , m ( a, b) ) ) ) } , addBack : function ( a ) { return this . add ( null == a? this . prevObject: this . prevObject. filter ( a) ) } } ) ; function D ( a, b ) { do a= a[ b] ; while ( a&& 1 !== a. nodeType) ; return a} m. each ( { parent : function ( a ) { var b= a. parentNode; return b&& 11 !== b. nodeType? b: null } , parents : function ( a ) { return m. dir ( a, "parentNode" ) } , parentsUntil : function ( a, b, c ) { return m. dir ( a, "parentNode" , c) } , next : function ( a ) { return D ( a, "nextSibling" ) } , prev : function ( a ) { return D ( a, "previousSibling" ) } , nextAll : function ( a ) { return m. dir ( a, "nextSibling" ) } , prevAll : function ( a ) { return m. dir ( a, "previousSibling" ) } , nextUntil : function ( a, b, c ) { return m. dir ( a, "nextSibling" , c) } , prevUntil : function ( a, b, c ) { return m. dir ( a, "previousSibling" , c) } , siblings : function ( a ) { return m. sibling ( ( a. parentNode|| { } ) . firstChild, a) } , children : function ( a ) { return m. sibling ( a. firstChild) } , contents : function ( a ) { return m. nodeName ( a, "iframe" ) ? a. contentDocument|| a. contentWindow. document: m. merge ( [ ] , a. childNodes) } } , function ( a, b ) { m. fn[ a] = function ( c, d ) { var e= m. map ( this , b, c) ; return "Until" !== a. slice ( - 5 ) && ( d= c) , d&& "string" == typeof d&& ( e= m. filter ( d, e) ) , this . length> 1 && ( C [ a] || ( e= m. unique ( e) ) , B . test ( a) && ( e= e. reverse ( ) ) ) , this . pushStack ( e) } } ) ; var E = / \S+ / g , F = { } ; function G ( a ) { var b= F [ a] = { } ; return m. each ( a. match ( E ) || [ ] , function ( a, c ) { b[ c] = ! 0 } ) , b} m. Callbacks = function ( a ) { a= "string" == typeof a? F [ a] || G ( a) : m. extend ( { } , a) ; var b, c, d, e, f, g, h= [ ] , i= ! a. once&& [ ] , j = function ( l ) { for ( c= a. memory&& l, d= ! 0 , f= g|| 0 , g= 0 , e= h. length, b= ! 0 ; h&& e> f; f++ ) if ( h[ f] . apply ( l[ 0 ] , l[ 1 ] ) === ! 1 && a. stopOnFalse) { c= ! 1 ; break } b= ! 1 , h&& ( i? i. length&& j ( i. shift ( ) ) : c? h= [ ] : k. disable ( ) ) } , k= { add : function ( ) { if ( h) { var d= h. length; ! function f ( b ) { m. each ( b, function ( b, c ) { var d= m. type ( c) ; "function" === d? a. unique&& k. has ( c) || h. push ( c) : c&& c. length&& "string" !== d&& f ( c) } ) } ( arguments) , b? e= h. length: c&& ( g= d, j ( c) ) } return this } , remove : function ( ) { return h&& m. each ( arguments, function ( a, c ) { var d; while ( ( d= m. inArray ( c, h, d) ) > - 1 ) h. splice ( d, 1 ) , b&& ( e>= d&& e-- , f>= d&& f-- ) } ) , this } , has : function ( a ) { return a? m. inArray ( a, h) > - 1 : ! ( ! h|| ! h. length) } , empty : function ( ) { return h= [ ] , e= 0 , this } , disable : function ( ) { return h= i= c= void 0 , this } , disabled : function ( ) { return ! h} , lock : function ( ) { return i= void 0 , c|| k. disable ( ) , this } , locked : function ( ) { return ! i} , fireWith : function ( a, c ) { return ! h|| d&& ! i|| ( c= c|| [ ] , c= [ a, c. slice? c. slice ( ) : c] , b? i. push ( c) : j ( c) ) , this } , fire : function ( ) { return k. fireWith ( this , arguments) , this } , fired : function ( ) { return ! ! d} } ; return k} , m. extend ( { Deferred : function ( a ) { var b= [ [ "resolve" , "done" , m. Callbacks ( "once memory" ) , "resolved" ] , [ "reject" , "fail" , m. Callbacks ( "once memory" ) , "rejected" ] , [ "notify" , "progress" , m. Callbacks ( "memory" ) ] ] , c= "pending" , d= { state : function ( ) { return c} , always : function ( ) { return e. done ( arguments) . fail ( arguments) , this } , then : function ( ) { var a= arguments; return m. Deferred ( function ( c ) { m. each ( b, function ( b, f ) { var g= m. isFunction ( a[ b] ) && a[ b] ; e[ f[ 1 ] ] ( function ( ) { var a= g&& g . apply ( this , arguments) ; a&& m. isFunction ( a. promise) ? a. promise ( ) . done ( c. resolve) . fail ( c. reject) . progress ( c. notify) : c[ f[ 0 ] + "With" ] ( this === d? c. promise ( ) : this , g? [ a] : arguments) } ) } ) , a= null } ) . promise ( ) } , promise : function ( a ) { return null != a? m. extend ( a, d) : d} } , e= { } ; return d. pipe= d. then, m. each ( b, function ( a, f ) { var g= f[ 2 ] , h= f[ 3 ] ; d[ f[ 1 ] ] = g. add, h&& g. add ( function ( ) { c= h} , b[ 1 ^ a] [ 2 ] . disable, b[ 2 ] [ 2 ] . lock) , e[ f[ 0 ] ] = function ( ) { return e[ f[ 0 ] + "With" ] ( this === e? d: this , arguments) , this } , e[ f[ 0 ] + "With" ] = g. fireWith} ) , d. promise ( e) , a&& a . call ( e, e) , e} , when : function ( a ) { var b= 0 , c= d . call ( arguments) , e= c. length, f= 1 !== e|| a&& m. isFunction ( a. promise) ? e: 0 , g= 1 === f? a: m. Deferred ( ) , h = function ( a, b, c ) { return function ( e ) { b[ a] = this , c[ a] = arguments. length> 1 ? d . call ( arguments) : e, c=== i? g. notifyWith ( b, c) : -- f|| g. resolveWith ( b, c) } } , i, j, k; if ( e> 1 ) for ( i= new Array ( e) , j= new Array ( e) , k= new Array ( e) ; e> b; b++ ) c[ b] && m. isFunction ( c[ b] . promise) ? c[ b] . promise ( ) . done ( h ( b, k, c) ) . fail ( g. reject) . progress ( h ( b, j, i) ) : -- f; return f|| g. resolveWith ( k, c) , g. promise ( ) } } ) ; var H ; m. fn. ready = function ( a ) { return m. ready. promise ( ) . done ( a) , this } , m. extend ( { isReady: ! 1 , readyWait: 1 , holdReady : function ( a ) { a? m. readyWait++ : m. ready ( ! 0 ) } , ready : function ( a ) { if ( a=== ! 0 ? ! -- m. readyWait: ! m. isReady) { if ( ! y. body) return setTimeout ( m. ready) ; m. isReady= ! 0 , a!== ! 0 && -- m. readyWait> 0 || ( H . resolveWith ( y, [ m] ) , m. fn. triggerHandler&& ( m ( y) . triggerHandler ( "ready" ) , m ( y) . off ( "ready" ) ) ) } } } ) ; function I ( ) { y. addEventListener? ( y. removeEventListener ( "DOMContentLoaded" , J , ! 1 ) , a. removeEventListener ( "load" , J , ! 1 ) ) : ( y. detachEvent ( "onreadystatechange" , J ) , a. detachEvent ( "onload" , J ) ) } function J ( ) { ( y. addEventListener|| "load" === event. type|| "complete" === y. readyState) && ( I ( ) , m. ready ( ) ) } m. ready. promise = function ( b ) { if ( ! H ) if ( H = m. Deferred ( ) , "complete" === y. readyState) setTimeout ( m. ready) ; else if ( y. addEventListener) y. addEventListener ( "DOMContentLoaded" , J , ! 1 ) , a. addEventListener ( "load" , J , ! 1 ) ; else { y. attachEvent ( "onreadystatechange" , J ) , a. attachEvent ( "onload" , J ) ; var c= ! 1 ; try { c= null == a. frameElement&& y. documentElement} catch ( d) { } c&& c. doScroll&& ! function e ( ) { if ( ! m. isReady) { try { c. doScroll ( "left" ) } catch ( a) { return setTimeout ( e, 50 ) } I ( ) , m. ready ( ) } } ( ) } return H . promise ( b) } ; var K = "undefined" , L ; for ( L in m ( k) ) break ; k. ownLast= "0" !== L , k. inlineBlockNeedsLayout= ! 1 , m ( function ( ) { var a, b, c, d; c= y. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style&& ( b= y. createElement ( "div" ) , d= y. createElement ( "div" ) , d. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( d) . appendChild ( b) , typeof b. style. zoom!== K && ( b. style. cssText= "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1" , k. inlineBlockNeedsLayout= a= 3 === b. offsetWidth, a&& ( c. style. zoom= 1 ) ) , c. removeChild ( d) ) } ) , function ( ) { var a= y. createElement ( "div" ) ; if ( null == k. deleteExpando) { k. deleteExpando= ! 0 ; try { delete a. test} catch ( b) { k. deleteExpando= ! 1 } } a= null } ( ) , m. acceptData = function ( a ) { var b= m. noData[ ( a. nodeName+ " " ) . toLowerCase ( ) ] , c= + a. nodeType|| 1 ; return 1 !== c&& 9 !== c? ! 1 : ! b|| b!== ! 0 && a. getAttribute ( "classid" ) === b} ; var M = / ^(?:\{[\w\W]*\}|\[[\w\W]*\])$ / , N = / ([A-Z]) / g ; function O ( a, b, c ) { if ( void 0 === c&& 1 === a. nodeType) { var d= "data-" + b. replace ( N , "-$1" ) . toLowerCase ( ) ; if ( c= a. getAttribute ( d) , "string" == typeof c) { try { c= "true" === c? ! 0 : "false" === c? ! 1 : "null" === c? null : + c+ "" === c? + c: M . test ( c) ? m. parseJSON ( c) : c} catch ( e) { } m. data ( a, b, c) } else c= void 0 } return c} function P ( a ) { var b; for ( b in a) if ( ( "data" !== b|| ! m. isEmptyObject ( a[ b] ) ) && "toJSON" !== b) return ! 1 ;
return ! 0 } function Q ( a, b, d, e ) { if ( m. acceptData ( a) ) { var f, g, h= m. expando, i= a. nodeType, j= i? m. cache: a, k= i? a[ h] : a[ h] && h; if ( k&& j[ k] && ( e|| j[ k] . data) || void 0 !== d|| "string" != typeof b) return k|| ( k= i? a[ h] = c. pop ( ) || m. guid++ : h) , j[ k] || ( j[ k] = i? { } : { toJSON: m. noop} ) , ( "object" == typeof b|| "function" == typeof b) && ( e? j[ k] = m. extend ( j[ k] , b) : j[ k] . data= m. extend ( j[ k] . data, b) ) , g= j[ k] , e|| ( g. data|| ( g. data= { } ) , g= g. data) , void 0 !== d&& ( g[ m. camelCase ( b) ] = d) , "string" == typeof b? ( f= g[ b] , null == f&& ( f= g[ m. camelCase ( b) ] ) ) : f= g, f} } function R ( a, b, c ) { if ( m. acceptData ( a) ) { var d, e, f= a. nodeType, g= f? m. cache: a, h= f? a[ m. expando] : m. expando; if ( g[ h] ) { if ( b&& ( d= c? g[ h] : g[ h] . data) ) { m. isArray ( b) ? b= b. concat ( m. map ( b, m. camelCase) ) : b in d? b= [ b] : ( b= m. camelCase ( b) , b= b in d? [ b] : b. split ( " " ) ) , e= b. length; while ( e-- ) delete d[ b[ e] ] ; if ( c? ! P ( d) : ! m. isEmptyObject ( d) ) return } ( c|| ( delete g[ h] . data, P ( g[ h] ) ) ) && ( f? m. cleanData ( [ a] , ! 0 ) : k. deleteExpando|| g!= g. window? delete g[ h] : g[ h] = null ) } } } m. extend ( { cache: { } , noData: { "applet " : ! 0 , "embed " : ! 0 , "object " : "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" } , hasData : function ( a ) { return a= a. nodeType? m. cache[ a[ m. expando] ] : a[ m. expando] , ! ! a&& ! P ( a) } , data : function ( a, b, c ) { return Q ( a, b, c) } , removeData : function ( a, b ) { return R ( a, b) } , _data : function ( a, b, c ) { return Q ( a, b, c, ! 0 ) } , _removeData : function ( a, b ) { return R ( a, b, ! 0 ) } } ) , m. fn. extend ( { data : function ( a, b ) { var c, d, e, f= this [ 0 ] , g= f&& f. attributes; if ( void 0 === a) { if ( this . length&& ( e= m. data ( f) , 1 === f. nodeType&& ! m. _data ( f, "parsedAttrs" ) ) ) { c= g. length; while ( c-- ) g[ c] && ( d= g[ c] . name, 0 === d. indexOf ( "data-" ) && ( d= m. camelCase ( d. slice ( 5 ) ) , O ( f, d, e[ d] ) ) ) ; m. _data ( f, "parsedAttrs" , ! 0 ) } return e} return "object" == typeof a? this . each ( function ( ) { m. data ( this , a) } ) : arguments. length> 1 ? this . each ( function ( ) { m. data ( this , a, b) } ) : f? O ( f, a, m. data ( f, a) ) : void 0 } , removeData : function ( a ) { return this . each ( function ( ) { m. removeData ( this , a) } ) } } ) , m. extend ( { queue : function ( a, b, c ) { var d; return a? ( b= ( b|| "fx" ) + "queue" , d= m. _data ( a, b) , c&& ( ! d|| m. isArray ( c) ? d= m. _data ( a, b, m. makeArray ( c) ) : d. push ( c) ) , d|| [ ] ) : void 0 } , dequeue : function ( a, b ) { b= b|| "fx" ; var c= m. queue ( a, b) , d= c. length, e= c. shift ( ) , f= m. _queueHooks ( a, b) , g = function ( ) { m. dequeue ( a, b) } ; "inprogress" === e&& ( e= c. shift ( ) , d-- ) , e&& ( "fx" === b&& c. unshift ( "inprogress" ) , delete f. stop, e . call ( a, g, f) ) , ! d&& f&& f. empty. fire ( ) } , _queueHooks : function ( a, b ) { var c= b+ "queueHooks" ; return m. _data ( a, c) || m. _data ( a, c, { empty: m. Callbacks ( "once memory" ) . add ( function ( ) { m. _removeData ( a, b+ "queue" ) , m. _removeData ( a, c) } ) } ) } } ) , m. fn. extend ( { queue : function ( a, b ) { var c= 2 ; return "string" != typeof a&& ( b= a, a= "fx" , c-- ) , arguments. length< c? m. queue ( this [ 0 ] , a) : void 0 === b? this : this . each ( function ( ) { var c= m. queue ( this , a, b) ; m. _queueHooks ( this , a) , "fx" === a&& "inprogress" !== c[ 0 ] && m. dequeue ( this , a) } ) } , dequeue : function ( a ) { return this . each ( function ( ) { m. dequeue ( this , a) } ) } , clearQueue : function ( a ) { return this . queue ( a|| "fx" , [ ] ) } , promise : function ( a, b ) { var c, d= 1 , e= m. Deferred ( ) , f= this , g= this . length, h = function ( ) { -- d|| e. resolveWith ( f, [ f] ) } ; "string" != typeof a&& ( b= a, a= void 0 ) , a= a|| "fx" ; while ( g-- ) c= m. _data ( f[ g] , a+ "queueHooks" ) , c&& c. empty&& ( d++ , c. empty. add ( h) ) ; return h ( ) , e. promise ( b) } } ) ; var S = / [+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|) / . source, T = [ "Top" , "Right" , "Bottom" , "Left" ] , U = function ( a, b ) { return a= b|| a, "none" === m. css ( a, "display" ) || ! m. contains ( a. ownerDocument, a) } , V = m. access = function ( a, b, c, d, e, f, g ) { var h= 0 , i= a. length, j= null == c; if ( "object" === m. type ( c) ) { e= ! 0 ; for ( h in c) m. access ( a, b, h, c[ h] , ! 0 , f, g) } else if ( void 0 !== d&& ( e= ! 0 , m. isFunction ( d) || ( g= ! 0 ) , j&& ( g? ( b . call ( a, d) , b= null ) : ( j= b, b = function ( a, b, c ) { return j . call ( m ( a) , c) } ) ) , b) ) for ( ; i> h; h++ ) b ( a[ h] , c, g? d: d . call ( a[ h] , h, b ( a[ h] , c) ) ) ; return e? a: j? b . call ( a) : i? b ( a[ 0 ] , c) : f} , W = / ^(?:checkbox|radio)$ / i ; ! function ( ) { var a= y. createElement ( "input" ) , b= y. createElement ( "div" ) , c= y. createDocumentFragment ( ) ; if ( b. innerHTML= " a " , k. leadingWhitespace= 3 === b. firstChild. nodeType, k. tbody= ! b. getElementsByTagName ( "tbody" ) . length, k. htmlSerialize= ! ! b. getElementsByTagName ( "link" ) . length, k. html5Clone= "<:nav>" !== y. createElement ( "nav" ) . cloneNode ( ! 0 ) . outerHTML, a. type= "checkbox" , a. checked= ! 0 , c. appendChild ( a) , k. appendChecked= a. checked, b. innerHTML= "" , k. noCloneChecked= ! ! b. cloneNode ( ! 0 ) . lastChild. defaultValue, c. appendChild ( b) , b. innerHTML= " " , k. checkClone= b. cloneNode ( ! 0 ) . cloneNode ( ! 0 ) . lastChild. checked, k. noCloneEvent= ! 0 , b. attachEvent&& ( b. attachEvent ( "onclick" , function ( ) { k. noCloneEvent= ! 1 } ) , b. cloneNode ( ! 0 ) . click ( ) ) , null == k. deleteExpando) { k. deleteExpando= ! 0 ; try { delete b. test} catch ( d) { k. deleteExpando= ! 1 } } } ( ) , function ( ) { var b, c, d= y. createElement ( "div" ) ; for ( b in { submit: ! 0 , change: ! 0 , focusin: ! 0 } ) c= "on" + b, ( k[ b+ "Bubbles" ] = c in a) || ( d. setAttribute ( c, "t" ) , k[ b+ "Bubbles" ] = d. attributes[ c] . expando=== ! 1 ) ; d= null } ( ) ; var X = / ^(?:input|select|textarea)$ / i , Y = / ^key / , Z = / ^(?:mouse|pointer|contextmenu)|click / , $= / ^(?:focusinfocus|focusoutblur)$ / , _= / ^([^.]*)(?:\.(.+)|)$ / ; function aa ( ) { return ! 0 } function ba ( ) { return ! 1 } function ca ( ) { try { return y. activeElement} catch ( a) { } } m. event= { global: { } , add : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, n, o, p, q, r= m. _data ( a) ; if ( r) { c. handler&& ( i= c, c= i. handler, e= i. selector) , c. guid|| ( c. guid= m. guid++ ) , ( g= r. events) || ( g= r. events= { } ) , ( k= r. handle) || ( k= r. handle = function ( a ) { return typeof m=== K || a&& m. event. triggered=== a. type? void 0 : m. event. dispatch . apply ( k. elem, arguments) } , k. elem= a) , b= ( b|| "" ) . match ( E ) || [ "" ] , h= b. length; while ( h-- ) f= _. exec ( b[ h] ) || [ ] , o= q= f[ 1 ] , p= ( f[ 2 ] || "" ) . split ( "." ) . sort ( ) , o&& ( j= m. event. special[ o] || { } , o= ( e? j. delegateType: j. bindType) || o, j= m. event. special[ o] || { } , l= m. extend ( { type: o, origType: q, data: d, handler: c, guid: c. guid, selector: e, needsContext: e&& m. expr. match. needsContext. test ( e) , namespace: p. join ( "." ) } , i) , ( n= g[ o] ) || ( n= g[ o] = [ ] , n. delegateCount= 0 , j. setup&& j. setup . call ( a, d, p, k) !== ! 1 || ( a. addEventListener? a. addEventListener ( o, k, ! 1 ) : a. attachEvent&& a. attachEvent ( "on" + o, k) ) ) , j. add&& ( j. add . call ( a, l) , l. handler. guid|| ( l. handler. guid= c. guid) ) , e? n. splice ( n. delegateCount++ , 0 , l) : n. push ( l) , m. event. global[ o] = ! 0 ) ; a= null } } , remove : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, n, o, p, q, r= m. hasData ( a) && m. _data ( a) ; if ( r&& ( k= r. events) ) { b= ( b|| "" ) . match ( E ) || [ "" ] , j= b. length; while ( j-- ) if ( h= _. exec ( b[ j] ) || [ ] , o= q= h[ 1 ] , p= ( h[ 2 ] || "" ) . split ( "." ) . sort ( ) , o) { l= m. event. special[ o] || { } , o= ( d? l. delegateType: l. bindType) || o, n= k[ o] || [ ] , h= h[ 2 ] && new RegExp ( "(^|\\.)" + p. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , i= f= n. length; while ( f-- ) g= n[ f] , ! e&& q!== g. origType|| c&& c. guid!== g. guid|| h&& ! h. test ( g. namespace) || d&& d!== g. selector&& ( "**" !== d|| ! g. selector) || ( n. splice ( f, 1 ) , g. selector&& n. delegateCount-- , l. remove&& l. remove . call ( a, g) ) ; i&& ! n. length&& ( l. teardown&& l. teardown . call ( a, p, r. handle) !== ! 1 || m. removeEvent ( a, o, r. handle) , delete k[ o] ) } else for ( o in k) m. event. remove ( a, o+ b[ j] , c, d, ! 0 ) ; m. isEmptyObject ( k) && ( delete r. handle, m. _removeData ( a, "events" ) ) } } , trigger : function ( b, c, d, e ) { var f, g, h, i, k, l, n, o= [ d|| y] , p= j . call ( b, "type" ) ? b. type: b, q= j . call ( b, "namespace" ) ? b. namespace. split ( "." ) : [ ] ; if ( h= l= d= d|| y, 3 !== d. nodeType&& 8 !== d. nodeType&& ! $. test ( p+ m. event. triggered) && ( p. indexOf ( "." ) >= 0 && ( q= p. split ( "." ) , p= q. shift ( ) , q. sort ( ) ) , g= p. indexOf ( ":" ) < 0 && "on" + p, b= b[ m. expando] ? b: new m. Event ( p, "object" == typeof b&& b) , b. isTrigger= e? 2 : 3 , b. namespace= q. join ( "." ) , b. namespace_re= b. namespace? new RegExp ( "(^|\\.)" + q. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , b. result= void 0 , b. target|| ( b. target= d) , c= null == c? [ b] : m. makeArray ( c, [ b] ) , k= m. event. special[ p] || { } , e|| ! k. trigger|| k. trigger . apply ( d, c) !== ! 1 ) ) { if ( ! e&& ! k. noBubble&& ! m. isWindow ( d) ) { for ( i= k. delegateType|| p, $. test ( i+ p) || ( h= h. parentNode) ; h; h= h. parentNode) o. push ( h) , l= h; l=== ( d. ownerDocument|| y) && o. push ( l. defaultView|| l. parentWindow|| a) } n= 0 ; while ( ( h= o[ n++ ] ) && ! b. isPropagationStopped ( ) ) b. type= n> 1 ? i: k. bindType|| p, f= ( m. _data ( h, "events" ) || { } ) [ b. type] && m. _data ( h, "handle" ) , f&& f . apply ( h, c) , f= g&& h[ g] , f&& f. apply&& m. acceptData ( h) && ( b. result= f . apply ( h, c) , b. result=== ! 1 && b. preventDefault ( ) ) ; if ( b. type= p, ! e&& ! b. isDefaultPrevented ( ) && ( ! k. _default|| k. _default . apply ( o. pop ( ) , c) === ! 1 ) && m. acceptData ( d) && g&& d[ p] && ! m. isWindow ( d) ) { l= d[ g] , l&& ( d[ g] = null ) , m. event. triggered= p; try { d[ p] ( ) } catch ( r) { } m. event. triggered= void 0 , l&& ( d[ g] = l) } return b. result} } , dispatch : function ( a ) { a= m. event. fix ( a) ; var b, c, e, f, g, h= [ ] , i= d . call ( arguments) , j= ( m. _data ( this , "events" ) || { } ) [ a. type] || [ ] , k= m. event. special[ a. type] || { } ; if ( i[ 0 ] = a, a. delegateTarget= this , ! k. preDispatch|| k. preDispatch . call ( this , a) !== ! 1 ) { h= m. event. handlers . call ( this , a, j) , b= 0 ; while ( ( f= h[ b++ ] ) && ! a. isPropagationStopped ( ) ) { a. currentTarget= f. elem, g= 0 ; while ( ( e= f. handlers[ g++ ] ) && ! a. isImmediatePropagationStopped ( ) ) ( ! a. namespace_re|| a. namespace_re. test ( e. namespace) ) && ( a. handleObj= e, a. data= e. data, c= ( ( m. event. special[ e. origType] || { } ) . handle|| e. handler) . apply ( f. elem, i) , void 0 !== c&& ( a. result= c) === ! 1 && ( a. preventDefault ( ) , a. stopPropagation ( ) ) ) } return k. postDispatch&& k. postDispatch . call ( this , a) , a. result} } , handlers : function ( a, b ) { var c, d, e, f, g= [ ] , h= b. delegateCount, i= a. target; if ( h&& i. nodeType&& ( ! a. button|| "click" !== a. type) ) for ( ; i!= this ; i= i. parentNode|| this ) if ( 1 === i. nodeType&& ( i. disabled!== ! 0 || "click" !== a. type) ) { for ( e= [ ] , f= 0 ; h> f; f++ ) d= b[ f] , c= d. selector+ " " , void 0 === e[ c] && ( e[ c] = d. needsContext? m ( c, this ) . index ( i) >= 0 : m. find ( c, this , null , [ i] ) . length) , e[ c] && e. push ( d) ; e. length&& g. push ( { elem: i, handlers: e} ) } return h< b. length&& g. push ( { elem: this , handlers: b. slice ( h) } ) , g} , fix : function ( a ) { if ( a[ m. expando] ) return a; var b, c, d, e= a. type, f= a, g= this . fixHooks[ e] ; g|| ( this . fixHooks[ e] = g= Z . test ( e) ? this . mouseHooks: Y . test ( e) ? this . keyHooks: { } ) , d= g. props? this . props. concat ( g. props) : this . props, a= new m. Event ( f) , b= d. length; while ( b-- ) c= d[ b] , a[ c] = f[ c] ; return a. target|| ( a. target= f. srcElement|| y) , 3 === a. target. nodeType&& ( a. target= a. target. parentNode) , a. metaKey= ! ! a. metaKey, g. filter? g. filter ( a, f) : a} , 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 ( a, b ) { return null == a. which&& ( a. which= null != b. charCode? b. charCode: b. keyCode) , a} } , mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement" . split ( " " ) , filter : function ( a, b ) { var c, d, e, f= b. button, g= b. fromElement; return null == a. pageX&& null != b. clientX&& ( d= a. target. ownerDocument|| y, e= d. documentElement, c= d. body, a. pageX= b. clientX+ ( e&& e. scrollLeft|| c&& c. scrollLeft|| 0 ) - ( e&& e. clientLeft|| c&& c. clientLeft|| 0 ) , a. pageY= b. clientY+ ( e&& e. scrollTop|| c&& c. scrollTop|| 0 ) - ( e&& e. clientTop|| c&& c. clientTop|| 0 ) ) , ! a. relatedTarget&& g&& ( a. relatedTarget= g=== a. target? b. toElement: g) , a. which|| void 0 === f|| ( a. which= 1 & f? 1 : 2 & f? 3 : 4 & f? 2 : 0 ) , a} } , special: { load: { noBubble: ! 0 } , focus: { trigger : function ( ) { if ( this !== ca ( ) && this . focus) try { return this . focus ( ) , ! 1 } catch ( a) { } } , delegateType: "focusin" } , blur: { trigger : function ( ) { return this === ca ( ) && this . blur? ( this . blur ( ) , ! 1 ) : void 0 } , delegateType: "focusout" } , click: { trigger : function ( ) { return m. nodeName ( this , "input" ) && "checkbox" === this . type&& this . click? ( this . click ( ) , ! 1 ) : void 0 } , _default : function ( a ) { return m. nodeName ( a. target, "a" ) } } , beforeunload: { postDispatch : function ( a ) { void 0 !== a. result&& a. originalEvent&& ( a. originalEvent. returnValue= a. result) } } } , simulate : function ( a, b, c, d ) { var e= m. extend ( new m. Event , c, { type: a, isSimulated: ! 0 , originalEvent: { } } ) ; d? m. event. trigger ( e, null , b) : m. event. dispatch . call ( b, e) , e. isDefaultPrevented ( ) && c. preventDefault ( ) } } , m. removeEvent= y. removeEventListener? function ( a, b, c ) { a. removeEventListener&& a. removeEventListener ( b, c, ! 1 ) } : function ( a, b, c ) { var d= "on" + b; a. detachEvent&& ( typeof a[ d] === K && ( a[ d] = null ) , a. detachEvent ( d, c) ) } , m. Event = function ( a, b ) { return this instanceof m. Event ? ( a&& a. type? ( this . originalEvent= a, this . type= a. type, this . isDefaultPrevented= a. defaultPrevented|| void 0 === a. defaultPrevented&& a. returnValue=== ! 1 ? aa: ba) : this . type= a, b&& m. extend ( this , b) , this . timeStamp= a&& a. timeStamp|| m. now ( ) , void ( this [ m. expando] = ! 0 ) ) : new m. Event ( a, b) } , m. Event . prototype= { isDefaultPrevented: ba, isPropagationStopped: ba, isImmediatePropagationStopped: ba, preventDefault : function ( ) { var a= this . originalEvent; this . isDefaultPrevented= aa, a&& ( a. preventDefault? a. preventDefault ( ) : a. returnValue= ! 1 ) } , stopPropagation : function ( ) { var a= this . originalEvent; this . isPropagationStopped= aa, a&& ( a. stopPropagation&& a. stopPropagation ( ) , a. cancelBubble= ! 0 ) } , stopImmediatePropagation : function ( ) { var a= this . originalEvent; this . isImmediatePropagationStopped= aa, a&& a. stopImmediatePropagation&& a. stopImmediatePropagation ( ) , this . stopPropagation ( ) } } , m. each ( { mouseenter: "mouseover" , mouseleave: "mouseout" , pointerenter: "pointerover" , pointerleave: "pointerout" } , function ( a, b ) { m. event. special[ a] = { delegateType: b, bindType: b, handle : function ( a ) { var c, d= this , e= a. relatedTarget, f= a. handleObj; return ( ! e|| e!== d&& ! m. contains ( d, e) ) && ( a. type= f. origType, c= f. handler . apply ( this , arguments) , a. type= b) , c} } } ) , k. submitBubbles|| ( m. event. special. submit= { setup : function ( ) { return m. nodeName ( this , "form" ) ? ! 1 : void m. event. add ( this , "click._submit keypress._submit" , function ( a ) { var b= a. target, c= m. nodeName ( b, "input" ) || m. nodeName ( b, "button" ) ? b. form: void 0 ; c&& ! m. _data ( c, "submitBubbles" ) && ( m. event. add ( c, "submit._submit" , function ( a ) { a. _submit_bubble= ! 0 } ) , m. _data ( c, "submitBubbles" , ! 0 ) ) } ) } , postDispatch : function ( a ) { a. _submit_bubble&& ( delete a. _submit_bubble, this . parentNode&& ! a. isTrigger&& m. event. simulate ( "submit" , this . parentNode, a, ! 0 ) ) } , teardown : function ( ) { return m. nodeName ( this , "form" ) ? ! 1 : void m. event. remove ( this , "._submit" ) } } ) , k. changeBubbles|| ( m. event. special. change= { setup : function ( ) { return X . test ( this . nodeName) ? ( ( "checkbox" === this . type|| "radio" === this . type) && ( m. event. add ( this , "propertychange._change" , function ( a ) { "checked" === a. originalEvent. propertyName&& ( this . _just_changed= ! 0 ) } ) , m. event. add ( this , "click._change" , function ( a ) { this . _just_changed&& ! a. isTrigger&& ( this . _just_changed= ! 1 ) , m. event. simulate ( "change" , this , a, ! 0 ) } ) ) , ! 1 ) : void m. event. add ( this , "beforeactivate._change" , function ( a ) { var b= a. target; X . test ( b. nodeName) && ! m. _data ( b, "changeBubbles" ) && ( m. event. add ( b, "change._change" , function ( a ) { ! this . parentNode|| a. isSimulated|| a. isTrigger|| m. event. simulate ( "change" , this . parentNode, a, ! 0 ) } ) , m. _data ( b, "changeBubbles" , ! 0 ) ) } ) } , handle : function ( a ) { var b= a. target; return this !== b|| a. isSimulated|| a. isTrigger|| "radio" !== b. type&& "checkbox" !== b. type? a. handleObj. handler . apply ( this , arguments) : void 0 } , teardown : function ( ) { return m. event. remove ( this , "._change" ) , ! X . test ( this . nodeName) } } ) , k. focusinBubbles|| m. each ( { focus: "focusin" , blur: "focusout" } , function ( a, b ) { var c = function ( a ) { m. event. simulate ( b, a. target, m. event. fix ( a) , ! 0 ) } ; m. event. special[ b] = { setup : function ( ) { var d= this . ownerDocument|| this , e= m. _data ( d, b) ; e|| d. addEventListener ( a, c, ! 0 ) , m. _data ( d, b, ( e|| 0 ) + 1 ) } , teardown : function ( ) { var d= this . ownerDocument|| this , e= m. _data ( d, b) - 1 ; e? m. _data ( d, b, e) : ( d. removeEventListener ( a, c, ! 0 ) , m. _removeData ( d, b) ) } } } ) , m. fn. extend ( { on : function ( a, b, c, d, e ) { var f, g; if ( "object" == typeof a) { "string" != typeof b&& ( c= c|| b, b= void 0 ) ; for ( f in a) this . on ( f, b, c, a[ f] , e) ; return this } if ( null == c&& null == d? ( d= b, c= b= void 0 ) : null == d&& ( "string" == typeof b? ( d= c, c= void 0 ) : ( d= c, c= b, b= void 0 ) ) , d=== ! 1 ) d= ba; else if ( ! d) return this ; return 1 === e&& ( g= d, d = function ( a ) { return m ( ) . off ( a) , g . apply ( this , arguments) } , d. guid= g. guid|| ( g. guid= m. guid++ ) ) , this . each ( function ( ) { m. event. add ( this , a, d, c, b) } ) } , one : function ( a, b, c, d ) { return this . on ( a, b, c, d, 1 ) } , off : function ( a, b, c ) { var d, e; if ( a&& a. preventDefault&& a. handleObj) return d= a. handleObj, m ( a. delegateTarget) . off ( d. namespace? d. origType+ "." + d. namespace: d. origType, d. selector, d. handler) , this ; if ( "object" == typeof a) { for ( e in a) this . off ( e, b, a[ e] ) ; return this } return ( b=== ! 1 || "function" == typeof b) && ( c= b, b= void 0 ) , c=== ! 1 && ( c= ba) , this . each ( function ( ) { m. event. remove ( this , a, c, b) } ) } , trigger : function ( a, b ) { return this . each ( function ( ) { m. event. trigger ( a, b, this ) } ) } , triggerHandler : function ( a, b ) { var c= this [ 0 ] ; return c? m. event. trigger ( a, b, c, ! 0 ) : void 0 } } ) ; function da ( a ) { var b= ea. split ( "|" ) , c= a. createDocumentFragment ( ) ; if ( c. createElement) while ( b. length) c. createElement ( b. pop ( ) ) ; return c} var ea= "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video" , fa= / jQuery\d+="(?:null|\d+)" / g , ga= new RegExp ( "<(?:" + ea+ ")[\\s/>]" , "i" ) , ha= / ^\s+ / , ia= / <(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/> / gi , ja= / <([\w:]+) / , ka= / / i , la= / <|?\w+; / , ma= / <(?:script|style|link) / i , na= / checked\s*(?:[^=]|=\s*.checked.) / i , oa= / ^$|\/(?:java|ecma)script / i , pa= / ^true\/(.*) / , qa= / ^\s*\s*$ / g , ra= { option: [ 1 , "" , "" ] , legend: [ 1 , "" , "" ] , area: [ 1 , "" , "" ] , param: [ 1 , "" , "" ] , thead: [ 1 , "" ] , tr: [ 2 , "" ] , col: [ 2 , "" ] , td: [ 3 , "" ] , _default: k. htmlSerialize? [ 0 , "" , "" ] : [ 1 , "X", "
" ] } , sa= da ( y) , ta= sa. appendChild ( y. createElement ( "div" ) ) ; ra. optgroup= ra. option, ra. tbody= ra. tfoot= ra. colgroup= ra. caption= ra. thead, ra. th= ra. td; function ua ( a, b ) { var c, d, e= 0 , f= typeof a. getElementsByTagName!== K ? a. getElementsByTagName ( b|| "*" ) : typeof a. querySelectorAll!== K ? a. querySelectorAll ( b|| "*" ) : void 0 ; if ( ! f) for ( f= [ ] , c= a. childNodes|| a; null != ( d= c[ e] ) ; e++ ) ! b|| m. nodeName ( d, b) ? f. push ( d) : m. merge ( f, ua ( d, b) ) ; return void 0 === b|| b&& m. nodeName ( a, b) ? m. merge ( [ a] , f) : f} function va ( a ) { W . test ( a. type) && ( a. defaultChecked= a. checked) } function wa ( a, b ) { return m. nodeName ( a, "table" ) && m. nodeName ( 11 !== b. nodeType? b: b. firstChild, "tr" ) ? a. getElementsByTagName ( "tbody" ) [ 0 ] || a. appendChild ( a. ownerDocument. createElement ( "tbody" ) ) : a} function xa ( a ) { return a. type= ( null !== m. find. attr ( a, "type" ) ) + "/" + a. type, a} function ya ( a ) { var b= pa. exec ( a. type) ; return b? a. type= b[ 1 ] : a. removeAttribute ( "type" ) , a} function za ( a, b ) { for ( var c, d= 0 ; null != ( c= a[ d] ) ; d++ ) m. _data ( c, "globalEval" , ! b|| m. _data ( b[ d] , "globalEval" ) ) } function Aa ( a, b ) { if ( 1 === b. nodeType&& m. hasData ( a) ) { var c, d, e, f= m. _data ( a) , g= m. _data ( b, f) , h= f. events; if ( h) { delete g. handle, g. events= { } ; for ( c in h) for ( d= 0 , e= h[ c] . length; e> d; d++ ) m. event. add ( b, c, h[ c] [ d] ) } g. data&& ( g. data= m. extend ( { } , g. data) ) } } function Ba ( a, b ) { var c, d, e; if ( 1 === b. nodeType) { if ( c= b. nodeName. toLowerCase ( ) , ! k. noCloneEvent&& b[ m. expando] ) { e= m. _data ( b) ; for ( d in e. events) m. removeEvent ( b, d, e. handle) ; b. removeAttribute ( m. expando) } "script" === c&& b. text!== a. text? ( xa ( b) . text= a. text, ya ( b) ) : "object" === c? ( b. parentNode&& ( b. outerHTML= a. outerHTML) , k. html5Clone&& a. innerHTML&& ! m. trim ( b. innerHTML) && ( b. innerHTML= a. innerHTML) ) : "input" === c&& W . test ( a. type) ? ( b. defaultChecked= b. checked= a. checked, b. value!== a. value&& ( b. value= a. value) ) : "option" === c? b. defaultSelected= b. selected= a. defaultSelected: ( "input" === c|| "textarea" === c) && ( b. defaultValue= a. defaultValue) } } m. extend ( { clone : function ( a, b, c ) { var d, e, f, g, h, i= m. contains ( a. ownerDocument, a) ; if ( k. html5Clone|| m. isXMLDoc ( a) || ! ga. test ( "<" + a. nodeName+ ">" ) ? f= a. cloneNode ( ! 0 ) : ( ta. innerHTML= a. outerHTML, ta. removeChild ( f= ta. firstChild) ) , ! ( k. noCloneEvent&& k. noCloneChecked|| 1 !== a. nodeType&& 11 !== a. nodeType|| m. isXMLDoc ( a) ) ) for ( d= ua ( f) , h= ua ( a) , g= 0 ; null != ( e= h[ g] ) ; ++ g) d[ g] && Ba ( e, d[ g] ) ; if ( b) if ( c) for ( h= h|| ua ( a) , d= d|| ua ( f) , g= 0 ; null != ( e= h[ g] ) ; g++ ) Aa ( e, d[ g] ) ; else Aa ( a, f) ; return d= ua ( f, "script" ) , d. length> 0 && za ( d, ! i&& ua ( a, "script" ) ) , d= h= e= null , f} , buildFragment : function ( a, b, c, d ) { for ( var e, f, g, h, i, j, l, n= a. length, o= da ( b) , p= [ ] , q= 0 ; n> q; q++ ) if ( f= a[ q] , f|| 0 === f) if ( "object" === m. type ( f) ) m. merge ( p, f. nodeType? [ f] : f) ; else if ( la. test ( f) ) { h= h|| o. appendChild ( b. createElement ( "div" ) ) , i= ( ja. exec ( f) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) , l= ra[ i] || ra. _default, h. innerHTML= l[ 1 ] + f. replace ( ia, "<$1>$2>" ) + l[ 2 ] , e= l[ 0 ] ; while ( e-- ) h= h. lastChild; if ( ! k. leadingWhitespace&& ha. test ( f) && p. push ( b. createTextNode ( ha. exec ( f) [ 0 ] ) ) , ! k. tbody) { f= "table" !== i|| ka. test ( f) ? ""!== l[ 1 ] || ka. test ( f) ? 0 : h: h. firstChild, e= f&& f. childNodes. length; while ( e-- ) m. nodeName ( j= f. childNodes[ e] , "tbody" ) && ! j. childNodes. length&& f. removeChild ( j) } m. merge ( p, h. childNodes) , h. textContent= "" ; while ( h. firstChild) h. removeChild ( h. firstChild) ; h= o. lastChild} else p. push ( b. createTextNode ( f) ) ; h&& o. removeChild ( h) , k. appendChecked|| m. grep ( ua ( p, "input" ) , va) , q= 0 ; while ( f= p[ q++ ] ) if ( ( ! d|| - 1 === m. inArray ( f, d) ) && ( g= m. contains ( f. ownerDocument, f) , h= ua ( o. appendChild ( f) , "script" ) , g&& za ( h) , c) ) { e= 0 ; while ( f= h[ e++ ] ) oa. test ( f. type|| "" ) && c. push ( f) } return h= null , o} , cleanData : function ( a, b ) { for ( var d, e, f, g, h= 0 , i= m. expando, j= m. cache, l= k. deleteExpando, n= m. event. special; null != ( d= a[ h] ) ; h++ ) if ( ( b|| m. acceptData ( d) ) && ( f= d[ i] , g= f&& j[ f] ) ) { if ( g. events) for ( e in g. events) n[ e] ? m. event. remove ( d, e) : m. removeEvent ( d, e, g. handle) ; j[ f] && ( delete j[ f] , l? delete d[ i] : typeof d. removeAttribute!== K ? d. removeAttribute ( i) : d[ i] = null , c. push ( f) ) } } } ) , m. fn. extend ( { text : function ( a ) { return V ( this , function ( a ) { return void 0 === a? m. text ( this ) : this . empty ( ) . append ( ( this [ 0 ] && this [ 0 ] . ownerDocument|| y) . createTextNode ( a) ) } , null , a, arguments. length) } , append : function ( ) { return this . domManip ( arguments, function ( a ) { if ( 1 === this . nodeType|| 11 === this . nodeType|| 9 === this . nodeType) { var b= wa ( this , a) ; b. appendChild ( a) } } ) } , prepend : function ( ) { return this . domManip ( arguments, function ( a ) { if ( 1 === this . nodeType|| 11 === this . nodeType|| 9 === this . nodeType) { var b= wa ( this , a) ; b. insertBefore ( a, b. firstChild) } } ) } , before : function ( ) { return this . domManip ( arguments, function ( a ) { this . parentNode&& this . parentNode. insertBefore ( a, this ) } ) } , after : function ( ) { return this . domManip ( arguments, function ( a ) { this . parentNode&& this . parentNode. insertBefore ( a, this . nextSibling) } ) } , remove : function ( a, b ) { for ( var c, d= a? m. filter ( a, this ) : this , e= 0 ; null != ( c= d[ e] ) ; e++ ) b|| 1 !== c. nodeType|| m. cleanData ( ua ( c) ) , c. parentNode&& ( b&& m. contains ( c. ownerDocument, c) && za ( ua ( c, "script" ) ) , c. parentNode. removeChild ( c) ) ; return this } , empty : function ( ) { for ( var a, b= 0 ; null != ( a= this [ b] ) ; b++ ) { 1 === a. nodeType&& m. cleanData ( ua ( a, ! 1 ) ) ; while ( a. firstChild) a. removeChild ( a. firstChild) ; a. options&& m. nodeName ( a, "select" ) && ( a. options. length= 0 ) } return this } , clone : function ( a, b ) { return a= null == a? ! 1 : a, b= null == b? a: b, this . map ( function ( ) { return m. clone ( this , a, b) } ) } , html : function ( a ) { return V ( this , function ( a ) { var b= this [ 0 ] || { } , c= 0 , d= this . length; if ( void 0 === a) return 1 === b. nodeType? b. innerHTML. replace ( fa, "" ) : void 0 ; if ( ! ( "string" != typeof a|| ma. test ( a) || ! k. htmlSerialize&& ga. test ( a) || ! k. leadingWhitespace&& ha. test ( a) || ra[ ( ja. exec ( a) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ] ) ) { a= a. replace ( ia, "<$1>$2>" ) ; try { for ( ; d> c; c++ ) b= this [ c] || { } , 1 === b. nodeType&& ( m. cleanData ( ua ( b, ! 1 ) ) , b. innerHTML= a) ; b= 0 } catch ( e) { } } b&& this . empty ( ) . append ( a) } , null , a, arguments. length) } , replaceWith : function ( ) { var a= arguments[ 0 ] ; return this . domManip ( arguments, function ( b ) { a= this . parentNode, m. cleanData ( ua ( this ) ) , a&& a. replaceChild ( b, this ) } ) , a&& ( a. length|| a. nodeType) ? this : this . remove ( ) } , detach : function ( a ) { return this . remove ( a, ! 0 ) } , domManip : function ( a, b ) { a= e . apply ( [ ] , a) ; var c, d, f, g, h, i, j= 0 , l= this . length, n= this , o= l- 1 , p= a[ 0 ] , q= m. isFunction ( p) ; if ( q|| l> 1 && "string" == typeof p&& ! k. checkClone&& na. test ( p) ) return this . each ( function ( c ) { var d= n. eq ( c) ; q&& ( a[ 0 ] = p . call ( this , c, d. html ( ) ) ) , d. domManip ( a, b) } ) ; if ( l&& ( i= m. buildFragment ( a, this [ 0 ] . ownerDocument, ! 1 , this ) , c= i. firstChild, 1 === i. childNodes. length&& ( i= c) , c) ) { for ( g= m. map ( ua ( i, "script" ) , xa) , f= g. length; l> j; j++ ) d= i, j!== o&& ( d= m. clone ( d, ! 0 , ! 0 ) , f&& m. merge ( g, ua ( d, "script" ) ) ) , b . call ( this [ j] , d, j) ; if ( f) for ( h= g[ g. length- 1 ] . ownerDocument, m. map ( g, ya) , j= 0 ; f> j; j++ ) d= g[ j] , oa. test ( d. type|| "" ) && ! m. _data ( d, "globalEval" ) && m. contains ( h, d) && ( d. src? m. _evalUrl&& m. _evalUrl ( d. src) : m. globalEval ( ( d. text|| d. textContent|| d. innerHTML|| "" ) . replace ( qa, "" ) ) ) ; i= c= null } return this } } ) , m. each ( { appendTo: "append" , prependTo: "prepend" , insertBefore: "before" , insertAfter: "after" , replaceAll: "replaceWith" } , function ( a, b ) { m. fn[ a] = function ( a ) { for ( var c, d= 0 , e= [ ] , g= m ( a) , h= g. length- 1 ; h>= d; d++ ) c= d=== h? this : this . clone ( ! 0 ) , m ( g[ d] ) [ b] ( c) , f . apply ( e, c. get ( ) ) ; return this . pushStack ( e) } } ) ; var Ca, Da= { } ; function Ea ( b, c ) { var d, e= m ( c. createElement ( b) ) . appendTo ( c. body) , f= a. getDefaultComputedStyle&& ( d= a. getDefaultComputedStyle ( e[ 0 ] ) ) ? d. display: m. css ( e[ 0 ] , "display" ) ; return e. detach ( ) , f} function Fa ( a ) { var b= y, c= Da[ a] ; return c|| ( c= Ea ( a, b) , "none" !== c&& c|| ( Ca= ( Ca|| m ( "" ) ) . appendTo ( b. documentElement) , b= ( Ca[ 0 ] . contentWindow|| Ca[ 0 ] . contentDocument) . document, b. write ( ) , b. close ( ) , c= Ea ( a, b) , Ca. detach ( ) ) , Da[ a] = c) , c} ! function ( ) { var a; k. shrinkWrapBlocks = function ( ) { if ( null != a) return a; a= ! 1 ; var b, c, d; return c= y. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style? ( b= y. createElement ( "div" ) , d= y. createElement ( "div" ) , d. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( d) . appendChild ( b) , typeof b. style. zoom!== K && ( b. style. cssText= "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1" , b. appendChild ( y. createElement ( "div" ) ) . style. width= "5px" , a= 3 !== b. offsetWidth) , c. removeChild ( d) , a) : void 0 } } ( ) ; var Ga= / ^margin / , Ha= new RegExp ( "^(" + S + ")(?!px)[a-z%]+$" , "i" ) , Ia, Ja, Ka= / ^(top|right|bottom|left)$ / ; a. getComputedStyle? ( Ia = function ( b ) { return b. ownerDocument. defaultView. opener? b. ownerDocument. defaultView. getComputedStyle ( b, null ) : a. getComputedStyle ( b, null ) } , Ja = function ( a, b, c ) { var d, e, f, g, h= a. style; return c= c|| Ia ( a) , g= c? c. getPropertyValue ( b) || c[ b] : void 0 , c&& ( "" !== g|| m. contains ( a. ownerDocument, a) || ( g= m. style ( a, b) ) , Ha. test ( g) && Ga. test ( b) && ( d= h. width, e= h. minWidth, f= h. maxWidth, h. minWidth= h. maxWidth= h. width= g, g= c. width, h. width= d, h. minWidth= e, h. maxWidth= f) ) , void 0 === g? g: g+ "" } ) : y. documentElement. currentStyle&& ( Ia = function ( a ) { return a. currentStyle} , Ja = function ( a, b, c ) { var d, e, f, g, h= a. style; return c= c|| Ia ( a) , g= c? c[ b] : void 0 , null == g&& h&& h[ b] && ( g= h[ b] ) , Ha. test ( g) && ! Ka. test ( b) && ( d= h. left, e= a. runtimeStyle, f= e&& e. left, f&& ( e. left= a. currentStyle. left) , h. left= "fontSize" === b? "1em" : g, g= h. pixelLeft+ "px" , h. left= d, f&& ( e. left= f) ) , void 0 === g? g: g+ "" || "auto" } ) ; function La ( a, b ) { return { get : function ( ) { var c= a ( ) ; if ( null != c) return c? void delete this . get: ( this . get= b) . apply ( this , arguments) } } } ! function ( ) { var b, c, d, e, f, g, h; if ( b= y. createElement ( "div" ) , b. innerHTML= " a " , d= b. getElementsByTagName ( "a" ) [ 0 ] , c= d&& d. style) { c. cssText= "float:left;opacity:.5" , k. opacity= "0.5" === c. opacity, k. cssFloat= ! ! c. cssFloat, b. style. backgroundClip= "content-box" , b. cloneNode ( ! 0 ) . style. backgroundClip= "" , k. clearCloneStyle= "content-box" === b. style. backgroundClip, k. boxSizing= "" === c. boxSizing|| "" === c. MozBoxSizing|| "" === c. WebkitBoxSizing, m. extend ( k, { reliableHiddenOffsets : function ( ) { return null == g&& i ( ) , g} , boxSizingReliable : function ( ) { return null == f&& i ( ) , f} , pixelPosition : function ( ) { return null == e&& i ( ) , e} , reliableMarginRight : function ( ) { return null == h&& i ( ) , h} } ) ; function i ( ) { var b, c, d, i; c= y. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style&& ( b= y. createElement ( "div" ) , d= y. createElement ( "div" ) , d. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( d) . appendChild ( b) , b. style. cssText= "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute" , e= f= ! 1 , h= ! 0 , a. getComputedStyle&& ( e= "1%" !== ( a. getComputedStyle ( b, null ) || { } ) . top, f= "4px" === ( a. getComputedStyle ( b, null ) || { width: "4px" } ) . width, i= b. appendChild ( y. createElement ( "div" ) ) , i. style. cssText= b. style. cssText= "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0" , i. style. marginRight= i. style. width= "0" , b. style. width= "1px" , h= ! parseFloat ( ( a. getComputedStyle ( i, null ) || { } ) . marginRight) , b. removeChild ( i) ) , b. innerHTML= "" , i= b. getElementsByTagName ( "td" ) , i[ 0 ] . style. cssText= "margin:0;border:0;padding:0;display:none" , g= 0 === i[ 0 ] . offsetHeight, g&& ( i[ 0 ] . style. display= "" , i[ 1 ] . style. display= "none" , g= 0 === i[ 0 ] . offsetHeight) , c. removeChild ( d) ) } } } ( ) , m. swap = function ( a, b, c, d ) { var e, f, g= { } ; for ( f in b) g[ f] = a. style[ f] , a. style[ f] = b[ f] ; e= c . apply ( a, d|| [ ] ) ; for ( f in b) a. style[ f] = g[ f] ; return e} ; var Ma= / alpha\([^)]*\) / i , Na= / opacity\s*=\s*([^)]*) / , Oa= / ^(none|table(?!-c[ea]).+) / , Pa= new RegExp ( "^(" + S + ")(.*)$" , "i" ) , Qa= new RegExp ( "^([+-])=(" + S + ")" , "i" ) , Ra= { position: "absolute" , visibility: "hidden" , display: "block" } , Sa= { letterSpacing: "0" , fontWeight: "400" } , Ta= [ "Webkit" , "O" , "Moz" , "ms" ] ; function Ua ( a, b ) { if ( b in a) return b; var c= b. charAt ( 0 ) . toUpperCase ( ) + b. slice ( 1 ) , d= b, e= Ta. length; while ( e-- ) if ( b= Ta[ e] + c, b in a) return b; return d} function Va ( a, b ) { for ( var c, d, e, f= [ ] , g= 0 , h= a. length; h> g; g++ ) d= a[ g] , d. style&& ( f[ g] = m. _data ( d, "olddisplay" ) , c= d. style. display, b? ( f[ g] || "none" !== c|| ( d. style. display= "" ) , "" === d. style. display&& U ( d) && ( f[ g] = m. _data ( d, "olddisplay" , Fa ( d. nodeName) ) ) ) : ( e= U ( d) , ( c&& "none" !== c|| ! e) && m. _data ( d, "olddisplay" , e? c: m. css ( d, "display" ) ) ) ) ; for ( g= 0 ; h> g; g++ ) d= a[ g] , d. style&& ( b&& "none" !== d. style. display&& "" !== d. style. display|| ( d. style. display= b? f[ g] || "" : "none" ) ) ; return a} function Wa ( a, b, c ) { var d= Pa. exec ( b) ; return d? Math. max ( 0 , d[ 1 ] - ( c|| 0 ) ) + ( d[ 2 ] || "px" ) : b} function Xa ( a, b, c, d, e ) { for ( var f= c=== ( d? "border" : "content" ) ? 4 : "width" === b? 1 : 0 , g= 0 ; 4 > f; f+= 2 ) "margin" === c&& ( g+= m. css ( a, c+ T [ f] , ! 0 , e) ) , d? ( "content" === c&& ( g-= m. css ( a, "padding" + T [ f] , ! 0 , e) ) , "margin" !== c&& ( g-= m. css ( a, "border" + T [ f] + "Width" , ! 0 , e) ) ) : ( g+= m. css ( a, "padding" + T [ f] , ! 0 , e) , "padding" !== c&& ( g+= m. css ( a, "border" + T [ f] + "Width" , ! 0 , e) ) ) ; return g} function Ya ( a, b, c ) { var d= ! 0 , e= "width" === b? a. offsetWidth: a. offsetHeight, f= Ia ( a) , g= k. boxSizing&& "border-box" === m. css ( a, "boxSizing" , ! 1 , f) ; if ( 0 >= e|| null == e) { if ( e= Ja ( a, b, f) , ( 0 > e|| null == e) && ( e= a. style[ b] ) , Ha. test ( e) ) return e; d= g&& ( k. boxSizingReliable ( ) || e=== a. style[ b] ) , e= parseFloat ( e) || 0 } return e+ Xa ( a, b, c|| ( g? "border" : "content" ) , d, f) + "px" } m. extend ( { cssHooks: { opacity: { get : function ( a, b ) { if ( b) { var c= Ja ( a, "opacity" ) ; return "" === c? "1" : c} } } } , cssNumber: { columnCount: ! 0 , fillOpacity: ! 0 , flexGrow: ! 0 , flexShrink: ! 0 , fontWeight: ! 0 , lineHeight: ! 0 , opacity: ! 0 , order: ! 0 , orphans: ! 0 , widows: ! 0 , zIndex: ! 0 , zoom: ! 0 } , cssProps: { "float" : k. cssFloat? "cssFloat" : "styleFloat" } , style : function ( a, b, c, d ) { if ( a&& 3 !== a. nodeType&& 8 !== a. nodeType&& a. style) { var e, f, g, h= m. camelCase ( b) , i= a. style; if ( b= m. cssProps[ h] || ( m. cssProps[ h] = Ua ( i, h) ) , g= m. cssHooks[ b] || m. cssHooks[ h] , void 0 === c) return g&& "get" in g&& void 0 !== ( e= g. get ( a, ! 1 , d) ) ? e: i[ b] ; if ( f= typeof c, "string" === f&& ( e= Qa. exec ( c) ) && ( c= ( e[ 1 ] + 1 ) * e[ 2 ] + parseFloat ( m. css ( a, b) ) , f= "number" ) , null != c&& c=== c&& ( "number" !== f|| m. cssNumber[ h] || ( c+= "px" ) , k. clearCloneStyle|| "" !== c|| 0 !== b. indexOf ( "background" ) || ( i[ b] = "inherit" ) , ! ( g&& "set" in g&& void 0 === ( c= g. set ( a, c, d) ) ) ) ) try { i[ b] = c} catch ( j) { } } } , css : function ( a, b, c, d ) { var e, f, g, h= m. camelCase ( b) ; return b= m. cssProps[ h] || ( m. cssProps[ h] = Ua ( a. style, h) ) , g= m. cssHooks[ b] || m. cssHooks[ h] , g&& "get" in g&& ( f= g. get ( a, ! 0 , c) ) , void 0 === f&& ( f= Ja ( a, b, d) ) , "normal" === f&& b in Sa&& ( f= Sa[ b] ) , "" === c|| c? ( e= parseFloat ( f) , c=== ! 0 || m. isNumeric ( e) ? e|| 0 : f) : f} } ) , m. each ( [ "height" , "width" ] , function ( a, b ) { m. cssHooks[ b] = { get : function ( a, c, d ) { return c? Oa. test ( m. css ( a, "display" ) ) && 0 === a. offsetWidth? m. swap ( a, Ra, function ( ) { return Ya ( a, b, d) } ) : Ya ( a, b, d) : void 0 } , set : function ( a, c, d ) { var e= d&& Ia ( a) ; return Wa ( a, c, d? Xa ( a, b, d, k. boxSizing&& "border-box" === m. css ( a, "boxSizing" , ! 1 , e) , e) : 0 ) } } } ) , k. opacity|| ( m. cssHooks. opacity= { get : function ( a, b ) { return Na. test ( ( b&& a. currentStyle? a. currentStyle. filter: a. style. filter) || "" ) ? .01 * parseFloat ( RegExp. $1 ) + "" : b? "1" : "" } , set : function ( a, b ) { var c= a. style, d= a. currentStyle, e= m. isNumeric ( b) ? "alpha(opacity=" + 100 * b+ ")" : "" , f= d&& d. filter|| c. filter|| "" ; c. zoom= 1 , ( b>= 1 || "" === b) && "" === m. trim ( f. replace ( Ma, "" ) ) && c. removeAttribute&& ( c. removeAttribute ( "filter" ) , "" === b|| d&& ! d. filter) || ( c. filter= Ma. test ( f) ? f. replace ( Ma, e) : f+ " " + e) } } ) , m. cssHooks. marginRight= La ( k. reliableMarginRight, function ( a, b ) { return b? m. swap ( a, { display: "inline-block" } , Ja, [ a, "marginRight" ] ) : void 0 } ) , m. each ( { margin: "" , padding: "" , border: "Width" } , function ( a, b ) { m. cssHooks[ a+ b] = { expand : function ( c ) { for ( var d= 0 , e= { } , f= "string" == typeof c? c. split ( " " ) : [ c] ; 4 > d; d++ ) e[ a+ T [ d] + b] = f[ d] || f[ d- 2 ] || f[ 0 ] ; return e} } , Ga. test ( a) || ( m. cssHooks[ a+ b] . set= Wa) } ) , m. fn. extend ( { css : function ( a, b ) { return V ( this , function ( a, b, c ) { var d, e, f= { } , g= 0 ; if ( m. isArray ( b) ) { for ( d= Ia ( a) , e= b. length; e> g; g++ ) f[ b[ g] ] = m. css ( a, b[ g] , ! 1 , d) ; return f} return void 0 !== c? m. style ( a, b, c) : m. css ( a, b) } , a, b, arguments. length> 1 ) } , show : function ( ) { return Va ( this , ! 0 ) } , hide : function ( ) { return Va ( this ) } , toggle : function ( a ) { return "boolean" == typeof a? a? this . show ( ) : this . hide ( ) : this . each ( function ( ) { U ( this ) ? m ( this ) . show ( ) : m ( this ) . hide ( ) } ) } } ) ; function Za ( a, b, c, d, e ) {
return new Za. prototype. init ( a, b, c, d, e) } m. Tween= Za, Za . prototype= { constructor: Za, init : function ( a, b, c, d, e, f ) { this . elem= a, this . prop= c, this . easing= e|| "swing" , this . options= b, this . start= this . now= this . cur ( ) , this . end= d, this . unit= f|| ( m. cssNumber[ c] ? "" : "px" ) } , cur : function ( ) { var a= Za. propHooks[ this . prop] ; return a&& a. get? a. get ( this ) : Za. propHooks. _default. get ( this ) } , run : function ( a ) { var b, c= Za. propHooks[ this . prop] ; return this . options. duration? this . pos= b= m. easing[ this . easing] ( a, this . options. duration* a, 0 , 1 , this . options. duration) : this . pos= b= a, this . now= ( this . end- this . start) * b+ this . start, this . options. step&& this . options. step . call ( this . elem, this . now, this ) , c&& c. set? c. set ( this ) : Za. propHooks. _default. set ( this ) , this } } , Za . prototype. init. prototype= Za . prototype, Za. propHooks= { _default: { get : function ( a ) { var b; return null == a. elem[ a. prop] || a. elem. style&& null != a. elem. style[ a. prop] ? ( b= m. css ( a. elem, a. prop, "" ) , b&& "auto" !== b? b: 0 ) : a. elem[ a. prop] } , set : function ( a ) { m. fx. step[ a. prop] ? m. fx. step[ a. prop] ( a) : a. elem. style&& ( null != a. elem. style[ m. cssProps[ a. prop] ] || m. cssHooks[ a. prop] ) ? m. style ( a. elem, a. prop, a. now+ a. unit) : a. elem[ a. prop] = a. now} } } , Za. propHooks. scrollTop= Za. propHooks. scrollLeft= { set : function ( a ) { a. elem. nodeType&& a. elem. parentNode&& ( a. elem[ a. prop] = a. now) } } , m. easing= { linear : function ( a ) { return a} , swing : function ( a ) { return .5 - Math. cos ( a* Math. PI ) / 2 } } , m. fx= Za . prototype. init, m. fx. step= { } ; var $a, _a, ab= / ^(?:toggle|show|hide)$ / , bb= new RegExp ( "^(?:([+-])=|)(" + S + ")([a-z%]*)$" , "i" ) , cb= / queueHooks$ / , db= [ ib] , eb= { "*" : [ function ( a, b ) { var c= this . createTween ( a, b) , d= c. cur ( ) , e= bb. exec ( b) , f= e&& e[ 3 ] || ( m. cssNumber[ a] ? "" : "px" ) , g= ( m. cssNumber[ a] || "px" !== f&& + d) && bb. exec ( m. css ( c. elem, a) ) , h= 1 , i= 20 ; if ( g&& g[ 3 ] !== f) { f= f|| g[ 3 ] , e= e|| [ ] , g= + d|| 1 ; do h= h|| ".5" , g/= h, m. style ( c. elem, a, g+ f) ; while ( h!== ( h= c. cur ( ) / d) && 1 !== h&& -- i) } return e&& ( g= c. start= + g|| + d|| 0 , c. unit= f, c. end= e[ 1 ] ? g+ ( e[ 1 ] + 1 ) * e[ 2 ] : + e[ 2 ] ) , c} ] } ; function fb ( ) { return setTimeout ( function ( ) { $a= void 0 } ) , $a= m. now ( ) } function gb ( a, b ) { var c, d= { height: a} , e= 0 ; for ( b= b? 1 : 0 ; 4 > e; e+= 2 - b) c= T [ e] , d[ "margin" + c] = d[ "padding" + c] = a; return b&& ( d. opacity= d. width= a) , d} function hb ( a, b, c ) { for ( var d, e= ( eb[ b] || [ ] ) . concat ( eb[ "*" ] ) , f= 0 , g= e. length; g> f; f++ ) if ( d= e[
你可能感兴趣的:(前端积累,echarts,javascript)
Javascript的数据类型
太阳与星辰
JavaScript 前端 javascript 前端 数据类型
Javascript的数据类型1.基本数据类型1.1七种基本数据类型1.2单独说说BigInt1.3其它注意点2.引用数据类型3.基本数据类型和引用数据类型的区别4.双等于号和三等于号的区别5.Javascript的类型转换机制5.1显示转换(强制转换)5.2隐式转换(1)减、乘、除(2)加(加法要区别算,因为+不仅仅是加法,还可以拼接)(3)单个变量(4)ToPrimitive原则JavaS
JavaScript系列(73)--装饰器详解
ᅟᅠ 一进制
JavaScript javascript 开发语言 ecmascript
JavaScript装饰器详解JavaScript装饰器是一个强大的语言特性,它让我们能够以声明式的方式修改类和类成员的行为。本文将深入探讨装饰器的原理、使用方法和最佳实践。装饰器基础小知识:装饰器是一种特殊类型的声明,它能够被附加到类声明、方法、访问器、属性或参数上。装饰器使用@expression形式,其中expression必须计算为一个函数。//基础装饰器语法functionreadonl
【JavaScript】异步编程汇总
秀秀_heo
JavaScript javascript 开发语言 ecmascript
异步编程解决方案:回调函数PromiseGeneratorawait/async回调函数回调函数是早期处理异步编程的主要方式,虽然它本身存在很多的缺陷,比如那个时候对于复杂的异步处理常常会出现回调地狱。但是因为JavaScript中当时并没有很好的API来帮助我们以比较优雅的方式编写代码,所以依然应用非常广泛。functionfetchData(url,callback){setTimeout((
使用 MySQL 从 JSON 字符串提取数据
m0_66323401
面试 学习路线 阿里巴巴 mysql json oracle
使用MySQL从JSON字符串提取数据在现代数据库管理中,JSON格式因其灵活性而广泛使用。然而,当数据存储在JSON中时,我们经常需要将其转换为更易于处理的格式。本篇文章将通过一个具体的SQL查询示例,展示如何从存储在MySQL中的JSON字符串提取数据并重新格式化。1.背景知识JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器
Vue3 + Moveable + Selecto 拖拽组件 Demo
巧克力力克巧!
学习积累 vue.js javascript 前端
一、项目概述本demo旨在通过Vue3、Moveable和Selecto三个库的结合,实现一个基本的拖拽组件功能。通过Selecto实现元素的选择功能,通过Moveable控制选中元素的大小和位置。同时,封装了hooks以实现元素与数据之间的绑定,使得操作更加灵活和可维护。二、技术栈Vue3:用于构建用户界面的渐进式JavaScript框架。Moveable:一个可以拖拽、缩放、旋转DOM元素的库
学习使用Elm架构的JavaScript项目
陈昊和
学习使用Elm架构的JavaScript项目learn-elm-architecture-in-javascript:unicorn:LearnhowtobuildwebappsusingtheElmArchitecturein"vanilla"JavaScript(step-by-stepTDDtutorial)!项目地址:https://gitcode.com/gh_mirrors/le/le
学习Elm架构在JavaScript中的应用
萧书泓
学习Elm架构在JavaScript中的应用learn-elm-architecture-in-javascript:unicorn:LearnhowtobuildwebappsusingtheElmArchitecturein"vanilla"JavaScript(step-by-stepTDDtutorial)!项目地址:https://gitcode.com/gh_mirrors/le/le
探索Redux:构建可预测、可测试的JavaScript应用
黎杉娜Torrent
探索Redux:构建可预测、可测试的JavaScript应用learn-redux:boom:ComprehensiveNotesforLearning(howtouse)ReduxtomanagestateinyourWeb/Mobile(React.js)Apps.项目地址:https://gitcode.com/gh_mirrors/le/learn-redux项目介绍在现代Web开发中,J
探索Elm架构:用纯JavaScript构建优雅的Web应用
邵瑗跃Free
探索Elm架构:用纯JavaScript构建优雅的Web应用learn-elm-architecture-in-javascript:unicorn:LearnhowtobuildwebappsusingtheElmArchitecturein"vanilla"JavaScript(step-by-stepTDDtutorial)!项目地址:https://gitcode.com/gh_mirro
[失业前端恶补算法]JavaScript leetcode刷题top100(六):字母异位词分组、最长连续序列、找到字符串中所有字母异位词、最大子数组和、除自身以外数组的乘积
摸鱼老萌新
失业前端恶补算法 前端 javascript 动态规划 算法 哈希
专栏声明:只求用最简单的,容易理解的方法通过,不求优化,不喜勿喷49.字母异位词分组题面给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。知识点:哈希表、排序思路这里用了js语言的一个小技巧,我们可以使用split这个api将字符串变成字符的数组,之后我们对得到的数组进行排序,这样字母异位词得到了结果字符串的一致的,
Vue.js 新手必看:5个趣味小案例快速理解数据绑定原理
云资社
VUE vue.js 前端 javascript
Vue.js是一个渐进式JavaScript框架,用于构建用户界面。其核心特性之一是数据绑定,它允许开发者通过简单的声明式语法将数据与DOM元素绑定在一起。这种双向数据绑定机制使得数据更新和视图更新变得非常直观和高效。本文将通过5个趣味小案例,帮助Vue.js新手快速理解数据绑定的原理和实现方式。案例1:简单的文本绑定目标将输入框中的内容实时显示在页面上。实现代码Vue数据绑定-文本绑定输入框内容
vue3 ref/reactive 修改数组的方法
取啥好
vue vue.js javascript 前端
import{ref}from'vue'//给每个todo对象一个唯一的idletid=0constnewTodo=ref('')consttodos=ref([{id:id++,text:'LearnHTML'},{id:id++,text:'LearnJavaScript'},{id:id++,text:'LearnVue'}])functionaddTodo(){todos.value.pu
C#中的动态类型用法总结带演示代码
yuanpan
c# windows microsoft
在C#中,dynamic类型是一种特殊的类型,它允许你在编译时绕过类型检查,而是在运行时解析类型。这使得你可以编写更灵活的代码,但也增加了运行时错误的风险。dynamic类型通常用于与动态语言(如Python、JavaScript)交互,或者处理一些在编译时无法确定类型的场景。1.基本用法你可以使用dynamic关键字来声明一个动态类型的变量。这个变量在编译时不会进行类型检查,而是在运行时根据实际
JavaScript网页设计案例:动态天气预报页面
静默.\\
javascript 开发语言
在这个案例中,我们将创建一个简单的网页,该网页能够根据用户输入的城市名称显示当前的天气情况。这个项目不仅将帮助我们理解如何使用JavaScript进行DOM操作和事件处理,还将介绍如何通过API获取实时数据。1.准备工作首先,你需要注册一个免费的天气API服务(如OpenWeatherMap),以获取API密钥。这将允许你访问其服务器上的天气数据。2.HTML结构让我们从基本的HTML结构开始:D
解析浏览器中JavaScript与Native交互原理:以WebGPU为例
ttod_qzstudio
JavaScript JavaScript WebGPU
引言随着Web应用复杂度的提升,开发者对浏览器访问本地硬件能力的需求日益增长。然而,浏览器必须在开放性与安全性之间找到平衡——既不能放任JavaScript(JS)随意操作系统资源,又要为高性能计算、图形渲染等场景提供支持。WebGPU的出现正是这一矛盾的解决方案之一。作为新一代Web图形API,WebGPU允许JS以接近原生(Native)的方式操作GPU,同时严格遵循浏览器的安全模型。本文将结
在Vue中使用highlight.js代码高亮
技术驱动者
javascript vue.js 前端 js
代码高亮是在网页开发中常见的需求之一,它可以使代码在页面上以不同的颜色或样式进行突出显示,提高可读性。highlight.js是一个流行的JavaScript库,它提供了丰富的语法高亮功能,支持多种编程语言和模板语言。本文将介绍如何在Vue项目中使用highlight.js来实现代码高亮的效果。步骤1:安装highlight.js首先,我们需要安装highlight.js库。在Vue项目的根目录下
Vue.js 配置 Babel、Webpack 和 ESLint
轻口味
VUE.JS 入门与实践 vue.js webpack 前端
Vue.js配置Babel、Webpack和ESLint今天我们来聊聊如何配置Babel、Webpack和ESLint,这三个工具在现代前端开发中扮演着重要角色。它们分别负责代码转译、模块打包和代码质量检测,合理配置它们能大大提高项目的开发效率和质量。下面我将详细介绍它们的作用,并提供具体的配置示例。1.Babel配置Babel主要用于将现代JavaScript(ES6+)代码转译为兼容性更好的版
如何使用Three.js制作3D月球与星空效果
软件工程师文艺
前端 javascript 3d html
目录1.基本设置2.创建星空效果3.创建月球模型4.添加中文3D文字5.光照与相机配置6.动画与控制7.响应式布局8.结语在本文中,我们将一起学习如何利用Three.js实现一个3D月球与星空的效果,并添加一些有趣的元素,比如中文3D文字和互动功能。Three.js是一个强大的JavaScript库,它简化了WebGL的使用,使得在网页上进行3D图形渲染变得更加容易。我们将逐步分析代码,帮助大家理
Github 2024-06-20 开源项目日报 Top10
老孙正经胡说
github 开源 Github趋势分析 开源项目 Python Golang
根据GithubTrendings的统计,今日(2024-06-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下:开发语言项目数量Python项目4TypeScript项目4Rust项目2JavaScript项目1Dart项目1Java项目1Go项目1RustDesk:用Rust编写的开源远程桌面软件创建周期:1218天开发语言:Rust,Dart协议类型:GNUAfferoG
阮一峰的ES6文档(第一天)
jackzhuoa
es6 javascript 前端
目录ECMAScript6简介let和const命名let基本用法-块级作用域不存在变量提升不允许重复声明暂时性死区为什么需要块级作用域?原因一:内层变量可能会覆盖外层变量原因二:用来计数的循环遍历泄露为全局变量const基本用法-声明只读的常量与let命令相同点let和const使用建议ECMAScript6简介ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准,
vue和Django快速创建项目
CCSBRIDGE
了解Vue vue.js 前端 javascript
一、VUE1.创建Vue3+JavaScript项目npmcreatevite@latest项目名称----templatevue创建Vue3+TypeScript项目npmcreatevite@latest项目名称----templatevue-ts2.然后cd项目名称npminstallnpminstallaxios#发送API请求npminstallpinia#Vue3推荐的状态管理库npm
JavaScript前端性能优化技巧分享
代码旅人博客
前端 javascript 性能优化
在前端开发中,性能优化是一个持续不断的追求。随着Web应用的日益复杂,如何确保应用的流畅性和响应速度,成为了每个前端开发者必须面对的问题。JavaScript作为前端的核心语言,其性能优化更是至关重要。本文将分享一些JavaScript前端性能优化的技巧,帮助开发者提升Web应用的性能。一、减少DOM操作DOM(文档对象模型)操作是JavaScript中常见的性能瓶颈之一。频繁的DOM操作会导致浏
【Node-Red】Function节点教学
零炻大礼包
Node-Red 笔记 node.js
本篇来讲在Node-Red中编写函数时用到的一个至关重要的节点:function。function节点允许消息运行JavaScript代码。其中部分内容来自官方文档翻译:function节点用户指南。Function节点教学1.变量定义2.返回值1)返回单条数据进阶1进阶22)返回多条数据3.其他变量定义1)数组定义buffer2.Array4.运算符1)算数运算符2)赋值运算符3)字符与运算符4
JavaScript 内置对象-Math对象
難釋懷
javascript 开发语言
在JavaScript中,Math对象提供了一系列与数学相关的静态方法和属性,帮助开发者执行复杂的计算任务。无论是简单的算术运算还是高级的几何、统计计算,Math对象都能提供强大的支持。本文将详细介绍Math对象的主要功能及其使用方法。一、简介不同于其他全局对象,Math不是一个构造函数,而是一个静态对象。这意味着我们不能通过new关键字创建Math的实例,所有的属性和方法都必须直接调用Math来
JavaScript内置对象
難釋懷
javascript 开发语言
JavaScript提供了一套丰富的内置对象,这些对象为开发者提供了处理数据、操作日期时间、执行数学运算等众多功能的强大工具。掌握这些内置对象不仅能够提高代码的效率,还能让开发过程更加简洁流畅。本文将详细介绍一些常用的JavaScript内置对象及其使用方法。一、Object对象Object是JavaScript中所有对象的基类。每个对象都是直接或间接地继承自Object.prototype。它提
Vue和React的区别
挨踢女孩y
vue.js react.js javascript 前端 css webpack ecmascript
组件开发方式:Vue使用单文件组件(SFC),HTML,JS和CSS在一个文件内实现exportdefault{//JavaScript代码}.my-component{/*CSS样式*/}React使用JSX和JavaScriptimportReactfrom'react';import'./MyComponent.css';functionMyComponent(){return({/*JSX
React VS Vue
懒人村杂货铺
前端
React和Vue是目前最流行的两个前端框架,它们在设计理念、生态系统和开发体验上各有特点。以下是对React和Vue的全方位对比:1.核心设计理念React库而非框架:React是一个用于构建UI的库,专注于视图层,其他功能(如路由、状态管理)需要借助第三方库。函数式编程:推崇组件化、函数式编程,强调不可变性和单向数据流。JSX:使用JSX语法,将HTML和JavaScript结合在一起。Vue
疯狂前端面试题(四)
吃蛋糕的居居
前端 html5 ajax 正则表达式 javascript firefox chrome
一、Ajax、JSONP、JSON、Fetch和Axios技术详解1.Ajax(异步JavaScript和XML)什么是Ajax?Ajax是一种用于在不刷新页面的情况下与服务器进行数据交互的技术。它通过`XMLHttpRequest`对象实现。优点-支持同步和异步请求。-能够发送和接收多种格式的数据(如JSON、XML等)。缺点-原生代码较复杂。-不支持跨域请求(需要服务器配置CORS或使用JSO
JavaScript实现拖动窗口功能详解
滚菩提哦呢
本文还有配套的精品资源,点击获取简介:本教程深入讲解了如何通过JavaScript实现拖动窗口功能,涵盖了原生方法和面向对象(OOP)的封装技术,以及确保代码在主流浏览器(包括IE6、Firefox和Chrome)中的兼容性。教程提供详细代码示例,从基础的原生拖动方法到利用OOP封装的Droppable类,再到特殊浏览器的兼容性处理,使读者能够掌握全面的拖动窗口实现技巧。1.JavaScript拖
JavaScript窗口大小变化事件:window.resize
星际编程喵
探索Spring的奇妙世界 javascript 前端 html vue.js react.js 前端框架 html5
1.前言在Web开发中,JavaScript是一种强大的脚本语言,它可以与HTML和CSS一起使用,为用户提供交互性和动态性的体验。其中,window.addEventListener("resize")事件是一个常用的事件之一,用于在浏览器窗口大小发生变化时触发相应的操作。本文将深入介绍这个事件的相关内容。2.简介window.resize事件是浏览器提供的一种事件,用于监听窗口大小的改变。这意
html页面js获取参数值
0624chenhong
html
1.js获取参数值js
function GetQueryString(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = windo
MongoDB 在多线程高并发下的问题
BigCat2013
mongodb DB 高并发 重复数据
最近项目用到 MongoDB , 主要是一些读取数据及改状态位的操作. 因为是结合了最近流行的 Storm进行大数据的分析处理,并将分析结果插入Vertica数据库,所以在多线程高并发的情境下, 会发现 Vertica 数据库中有部分重复的数据. 这到底是什么原因导致的呢?笔者开始也是一筹莫 展,重复去看 MongoDB 的 API , 终于有了新发现 :
com.mongodb.DB 这个类有
c++ 用类模版实现链表(c++语言程序设计第四版示例代码)
CrazyMizzz
数据结构 C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T>
class Node
{
private:
Node<T> * next;
public:
T data;
最近情况
麦田的设计者
感慨 考试 生活
在五月黄梅天的岁月里,一年两次的软考又要开始了。到目前为止,我已经考了多达三次的软考,最后的结果就是通过了初级考试(程序员)。人啊,就是不满足,考了初级就希望考中级,于是,这学期我就报考了中级,明天就要考试。感觉机会不大,期待奇迹发生吧。这个学期忙于练车,写项目,反正最后是一团糟。后天还要考试科目二。这个星期真的是很艰难的一周,希望能快点度过。
linux系统中用pkill踢出在线登录用户
被触发
linux
由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍所以需要有时踢出指定的用户
1/#who 查出当前有那些终端登录(用 w 命令更详细)
# who
root pts/0 2010-10-28 09:36 (192
仿QQ聊天第二版
肆无忌惮_
qq
在第一版之上的改进内容:
第一版链接:
http://479001499.iteye.com/admin/blogs/2100893
用map存起来号码对应的聊天窗口对象,解决私聊的时候所有消息发到一个窗口的问题.
增加ViewInfo类,这个是信息预览的窗口,如果是自己的信息,则可以进行编辑.
信息修改后上传至服务器再告诉所有用户,自己的窗口
java读取配置文件
知了ing
1,java读取.properties配置文件
InputStream in;
try {
in = test.class.getClassLoader().getResourceAsStream("config/ipnetOracle.properties");//配置文件的路径
Properties p = new Properties()
__attribute__ 你知多少?
矮蛋蛋
C++ gcc
原文地址:
http://www.cnblogs.com/astwish/p/3460618.html
GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。
__attribute__ 书写特征是:
jsoup使用笔记
alleni123
java 爬虫 JSoup
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.3</version>
</dependency>
2014/08/28
今天遇到这种形式,
JAVA中的集合 Collectio 和Map的简单使用及方法
百合不是茶
list map set
List ,set ,map的使用方法和区别
java容器类类库的用途是保存对象,并将其分为两个概念:
Collection集合:一个独立的序列,这些序列都服从一条或多条规则;List必须按顺序保存元素 ,set不能重复元素;Queue按照排队规则来确定对象产生的顺序(通常与他们被插入的
杀LINUX的JOB进程
bijian1013
linux unix
今天发现数据库一个JOB一直在执行,都执行了好几个小时还在执行,所以想办法给删除掉
系统环境:
ORACLE 10G
Linux操作系统
操作步骤如下:
第一步.查询出来那个job在运行,找个对应的SID字段
select * from dba_jobs_running--找到job对应的sid
&n
Spring AOP详解
bijian1013
java spring AOP
最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决。一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习Spring AOP相关的内容。例如,以下需求不用AOP肯定也能解决,至于是否牵强附会,仁者见仁智者见智。
1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用
[Gson六]Gson类型适配器(TypeAdapter)
bit1129
Adapter
TypeAdapter的使用动机
Gson在序列化和反序列化时,默认情况下,是按照POJO类的字段属性名和JSON串键进行一一映射匹配,然后把JSON串的键对应的值转换成POJO相同字段对应的值,反之亦然,在这个过程中有一个JSON串Key对应的Value和对象之间如何转换(序列化/反序列化)的问题。
以Date为例,在序列化和反序列化时,Gson默认使用java.
【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行
bit1129
driver
Driver Program是用户编写的提交给Spark集群执行的application,它包含两部分
作为驱动: Driver与Master、Worker协作完成application进程的启动、DAG划分、计算任务封装、计算任务分发到各个计算节点(Worker)、计算资源的分配等。
计算逻辑本身,当计算任务在Worker执行时,执行计算逻辑完成application的计算任务
nginx 经验总结
ronin47
nginx 总结
深感nginx的强大,只学了皮毛,把学下的记录。
获取Header 信息,一般是以$http_XX(XX是小写)
获取body,通过接口,再展开,根据K取V
获取uri,以$arg_XX
&n
轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点
bylijinnan
数组
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ExoWeb {
public static void main(String[] args) {
ExoWeb ew=new ExoWeb();
System.out.pri
Netty源码学习-Java-NIO-Reactor
bylijinnan
java 多线程 netty
Netty里面采用了NIO-based Reactor Pattern
了解这个模式对学习Netty非常有帮助
参考以下两篇文章:
http://jeewanthad.blogspot.com/2013/02/reactor-pattern-explained-part-1.html
http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf
AOP通俗理解
cngolon
spring AOP
1.我所知道的aop 初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等。一下子让你不知所措,心想着:怪不得很多人都和 我说aop多难多难。当我看进去以后,我才发现:它就是一些java基础上的朴实无华的应用,包括ioc,包括许许多多这样的名词,都是万变不离其宗而 已。 2.为什么用aop&nb
cursor variable 实例
ctrain
variable
create or replace procedure proc_test01
as
type emp_row is record(
empno emp.empno%type,
ename emp.ename%type,
job emp.job%type,
mgr emp.mgr%type,
hiberdate emp.hiredate%type,
sal emp.sal%t
shell报bash: service: command not found解决方法
daizj
linux shell service jps
今天在执行一个脚本时,本来是想在脚本中启动hdfs和hive等程序,可以在执行到service hive-server start等启动服务的命令时会报错,最终解决方法记录一下:
脚本报错如下:
./olap_quick_intall.sh: line 57: service: command not found
./olap_quick_intall.sh: line 59
40个迹象表明你还是PHP菜鸟
dcj3sjt126com
设计模式 PHP 正则表达式 oop
你是PHP菜鸟,如果你:1. 不会利用如phpDoc 这样的工具来恰当地注释你的代码2. 对优秀的集成开发环境如Zend Studio 或Eclipse PDT 视而不见3. 从未用过任何形式的版本控制系统,如Subclipse4. 不采用某种编码与命名标准 ,以及通用约定,不能在项目开发周期里贯彻落实5. 不使用统一开发方式6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函
Android逐帧动画的实现
dcj3sjt126com
android
一、代码实现:
private ImageView iv;
private AnimationDrawable ad;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout
java远程调用linux的命令或者脚本
eksliang
linux ganymed-ssh2
转载请出自出处:
http://eksliang.iteye.com/blog/2105862
Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)
使用步骤如下:
1.导包
官网下载:
http://www.ganymed.ethz.ch/ssh2/
ma
adb端口被占用问题
gqdy365
adb
最近重新安装的电脑,配置了新环境,老是出现:
adb server is out of date. killing...
ADB server didn't ACK
* failed to start daemon *
百度了一下,说是端口被占用,我开个eclipse,然后打开cmd,就提示这个,很烦人。
一个比较彻底的解决办法就是修改
ASP.NET使用FileUpload上传文件
hvt
.net C# hovertree asp.net webform
前台代码:
<asp:FileUpload ID="fuKeleyi" runat="server" />
<asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" />
代码之谜(四)- 浮点数(从惊讶到思考)
justjavac
浮点数 精度 代码之谜 IEEE
在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。
单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试
记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为了一名很出色的
数据结构随记_1
lx.asymmetric
数据结构 笔记
第一章
1.数据结构包括数据的
逻辑结构、数据的物理/存储结构和数据的逻辑关系这三个方面的内容。 2.数据的存储结构可用四种基本的存储方法表示,它们分别是
顺序存储、链式存储 、索引存储 和 散列存储。 3.数据运算最常用的有五种,分别是
查找/检索、排序、插入、删除、修改。 4.算法主要有以下五个特性:
输入、输出、可行性、确定性和有穷性。 5.算法分析的
linux的会话和进程组
网络接口
linux
会话: 一个或多个进程组。起于用户登录,终止于用户退出。此期间所有进程都属于这个会话期。会话首进程:调用setsid创建会话的进程1.规定组长进程不能调用setsid,因为调用setsid后,调用进程会成为新的进程组的组长进程.如何保证? 先调用fork,然后终止父进程,此时由于子进程的进程组ID为父进程的进程组ID,而子进程的ID是重新分配的,所以保证子进程不会是进程组长,从而子进程可以调用se
二维数组 元素的连续求解
1140566087
二维数组 ACM
import java.util.HashMap;
public class Title {
public static void main(String[] args){
f();
}
// 二位数组的应用
//12、二维数组中,哪一行或哪一列的连续存放的0的个数最多,是几个0。注意,是“连续”。
public static void f(){
也谈什么时候Java比C++快
windshome
java C++
刚打开iteye就看到这个标题“Java什么时候比C++快”,觉得很好笑。
你要比,就比同等水平的基础上的相比,笨蛋写得C代码和C++代码,去和高手写的Java代码比效率,有什么意义呢?
我是写密码算法的,深刻知道算法C和C++实现和Java实现之间的效率差,甚至也比对过C代码和汇编代码的效率差,计算机是个死的东西,再怎么优化,Java也就是和C