金山打字
【金山打字】这是一个练习打字的游戏,当游戏开始后,界面从顶部不断落下内容为随机字母的方块,当按下相对应的按键时,就会清除对应方块。游戏难度会随着落下的速度加快而提高。玩家每次成功清除字母方块,都会获得一定的分数。
运行效果:
HTML
源码-demo.html
:
doctype html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 金山打字游戏 title>
< script src = " jquery.js" > script>
< script src = " js.js" > script>
< script>
$ ( function ( ) {
new typegame ( ) ;
} ) ;
script>
head>
< style>
body {
margin : 0;
background : url ( game.jpg) no-repeat;
background-size : cover;
font-family : "幼圆" ;
background : #E8F0F0;
overflow : hidden;
}
.stop1 {
width : 130px;
height : 50px;
background : red;
position : absolute;
bottom : 0;
left : 30px;
text-align : center;
cursor : pointer;
background : url ( "stop.png" ) ;
background-size : 130px 50px;
line-height : 50px;
color : #392112;
font-size : 16px;
z-index : 6666666;
font-weight : bold;
}
.screen1 {
width : 100%;
height : 100%;
background : url ( img/dz2.jpg) no-repeat;
background-size : cover;
margin : 0 auto;
padding : 0;
position : relative;
overflow : hidden;
}
.xiabian {
width : 100%;
height : 40px;
background : #000;
position : absolute;
bottom : 0;
right : 0;
opacity : 0.8;
filter : alpha ( opacity=80) ;
}
@keyframes cg{
0% {
transform : translateY ( -50%) ;
}
100% {
transform : translateY ( 0%) ;
}
}
@keyframes cgfont{
0% {
transform : scale ( 0, 0) ;
}
100% {
transform : scale ( 1, 1) ;
}
}
body {
background : #84B526;
}
style>
< body>
< div class = " screen1" >
div>
< div class = " stop1" > 暂停游戏 div>
< div class = " xiabian" > div>
body>
html>
js
源码
(1)js.js
:
function typegame ( ) {
this . objletter= { } ;
this . creatGame ( ) ;
this . num= 3 ;
this . check ( ) ;
this . creatScore ( ) ;
this . score= 0 ;
this . stage= 1 ;
this . startGame ( ) ;
this . stopGame ( ) ;
}
typegame. prototype= {
creatGame : function ( ) {
var height= $ ( window) . height ( ) ;
var width1= $ ( window) . width ( ) ;
$ ( ".screen1" ) . css ( {
width : width1,
height : $ ( window) . height ( ) - 10 ,
overflow : "hidden"
} ) ;
} ,
creatletter : function ( ) {
var that= this ;
do {
var randomnum= Math. floor ( Math. random ( ) * 26 + 65 ) ;
var randomletter= String. fromCharCode ( randomnum) ;
} while ( this . objletter[ randomletter] ) ;
var top1= - Math. round ( Math. random ( ) * 100 ) ;
do {
var left1= Math. round ( Math. random ( ) * 740 ) ;
} while ( this . check ( left1) ) ;
var time= new Date ( ) . getTime ( ) ;
var ele= $ ( "+time+ ">
" ) . css ( {
width : "100px" , height : "100px" ,
background : "url(img/" + randomletter+ ".png) center no-repeat" , backgroundSize : "contain"
, lineHeight : "60px" , fontSize : "30px" , color : "#fff" ,
textAlign : "center" , position : "absolute" , left : left1, top : top1
} ) . appendTo ( ".screen1" ) . animate ( { top : $ ( window) . height ( ) } , 6000 , "linear" , function ( ) {
if ( $ ( "div[data-time=" + time+ "]" ) [ 0 ] ) {
that. num = 3 ;
that. score= 0 ;
that. stage= 1 ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. createFail ( ) ;
}
} ) ;
this . objletter[ randomletter] = { start : left1- 60 , end : left1+ 60 , keycode : randomnum, el : ele}
} ,
palyGame : function ( ) {
this . keydown ( ) ;
for ( var i= 0 ; i< this . num; ++ i) {
this . creatletter ( ) ;
}
} ,
check : function ( left ) {
var flag= false ;
$. each ( this . objletter, function ( index, value ) {
if ( left> value. start&& left< value. end) {
flag= true ;
}
} ) ;
return flag;
} ,
keydown : function ( ) {
var that= this ;
$ ( document) . keydown ( function ( e ) {
var code= e. keyCode;
$. each ( that. objletter, function ( index, value ) {
if ( code== value. keycode) {
value. el. remove ( ) ;
delete that. objletter[ index] ;
that. creatletter ( ) ;
that. score++ ;
$ ( ".score" ) . html ( that. score) ;
if ( that. score>= that. stage* 10 ) {
that. score= 0 ;
$ ( ".score" ) . html ( 0 ) ;
that. num++ ;
that. stage++ ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. creatStage ( ) ;
}
}
} ) ;
} ) ;
} ,
creatScore : function ( ) {
$ ( "0
" ) . css ( {
background : "url(fs.png) no-repeat" ,
backgroundSize : "150px 180px" ,
width : 150 , height : 180 ,
position : "absolute" , right : 25 , bottom : 60 , color : "#522E1A" ,
fontSize : "60px" , lineHeight : "140px" , textAlign : "center"
} ) . appendTo ( "body" ) ;
} ,
creatStage : function ( ) {
var that= this ;
$ ( "
" ) . css ( {
position : "absolute" , top : "-50%" , bottom : 0 , right : 0 , left : 0 ,
background : "url(cg.png)" ,
width : 520 , height : 400 , backgroundSize : "contain no-repeat" ,
margin : "auto" ,
borderRadius : "5%" ,
animation : "cg 2s linear"
} ) . appendTo ( "body" ) ;
var btn= $ ( "
" ) . css ( {
position : "absolute" , top : "235px" , right : 0 , left : "65px" , margin : "auto" ,
background : "url(xy.png)" ,
zIndex : 9999 ,
fontFamily : "幼圆" ,
fontSize : "22px" ,
width : 100 , height : 40 , margin : "0 auto" ,
marginTop : "200" ,
color : "#fff" ,
lineHeight : "40px" ,
backgroundSize : "240px 300px" ,
cursor : "pointer"
} ) . appendTo ( ".stage" ) . click ( function ( ) {
that. palyGame ( ) ;
$ ( this ) . parent ( ) . remove ( ) ;
} ) ;
} ,
createFail : function ( ) {
var that= this ;
if ( this . failbord) {
this . failbord. remove ( ) ;
}
var btn= $ ( "
" ) . css ( {
width : 160 , height : 35 , textAlign : "center" , lineHeight : "30px" ,
margin : "0 auto" , cursor : "pointer" ,
position : "absolute" , right : 0 , left : 0 , margin : "auto" , bottom : "70px"
} ) . click ( function ( ) {
$ ( ".scor" ) . html ( 0 ) ;
that. palyGame ( ) ;
$ ( this ) . parent ( ) . remove ( ) ;
} ) ;
this . failbord= $ ( "
" ) . css ( {
position : "absolute" , top : "-50%" , bottom : 0 , right : 0 , left : 0 ,
background : "url(sp1.png)" ,
width : 500 , height : 350 , backgroundSize : "400px 340px" ,
margin : "auto" ,
borderRadius : "5%" ,
backgroundSize : "contain no-repeat" ,
animation : "cg 2s linear"
} ) . appendTo ( "body" ) . append ( btn) ;
} ,
startGame : function ( ) {
var that= this ;
$ ( "开始游戏
" ) . css ( {
width : 130 , height : 50 , textAlign : "center" , lineHeight : "50px" ,
margin : "0 auto" , cursor : "pointer" ,
background : "url(stop.png) no-repeat" ,
backgroundSize : "130px 50px" ,
color : "#392112" ,
position : "absolute" ,
left : "175px" , bottom : 0 ,
fontWeight : "bold" ,
marginTop : "55px"
} ) . appendTo ( "body" ) . click ( function ( ) {
that. palyGame ( ) ;
} )
} ,
stopGame : function ( ) {
var that= this ;
$ ( ".stop1" ) . click ( function ( ) {
$. each ( that. objletter, function ( index, value ) {
value. el. stop ( ) ;
} ) ;
if ( $ ( ".stop1" ) . html ( ) == "暂停游戏" ) {
$ ( ".stop1" ) . html ( "继续游戏" ) ;
} else if ( $ ( ".stop1" ) . html ( ) == "继续游戏" ) {
$ ( ".stop1" ) . html ( "暂停游戏" ) ;
$. each ( that. objletter, function ( index, value ) {
value. el. animate ( { top : $ ( window) . height ( ) } , 6000 , "linear" , function ( ) {
that. num= 3 ;
that. stage= 1 ;
that. score= 0 ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. createFail ( ) ;
} )
} )
}
} )
}
} ;
(2)juery.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= a. document, e= c. slice, f= c. concat, g= c. push, h= c. indexOf, i= { } , j= i. toString, k= i. hasOwnProperty, l= { } , m= "1.12.2" , n = function ( a, b ) { return new n. fn. init ( a, b) } , o= / ^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$ / g , p= / ^-ms- / , q= / -([\da-z]) / gi , r = function ( a, b ) { return b. toUpperCase ( ) } ; n. fn= n. prototype= { jquery : m, constructor : n, selector : "" , length : 0 , toArray : function ( ) { return e . call ( this ) } , get : function ( a ) { return null != a? 0 > a? this [ a+ this . length] : this [ a] : e . call ( this ) } , pushStack : function ( a ) { var b= n. merge ( this . constructor ( ) , a) ; return b. prevObject= this , b. context= this . context, b} , each : function ( a ) { return n. each ( this , a) } , map : function ( a ) { return this . pushStack ( n. map ( this , function ( b, c ) { return a . call ( b, c, b) } ) ) } , slice : function ( ) { return this . pushStack ( e . 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 ( ) } , push : g, sort : c. sort, splice : c. splice} , n. extend= n. 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|| n. 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&& ( n. isPlainObject ( c) || ( b= n. isArray ( c) ) ) ? ( b? ( b= ! 1 , f= a&& n. isArray ( a) ? a: [ ] ) : f= a&& n. isPlainObject ( a) ? a: { } , g[ d] = n. extend ( j, f, c) ) : void 0 !== c&& ( g[ d] = c) ) ; return g} , n. extend ( { expando : "jQuery" + ( m+ Math. random ( ) ) . replace ( / \D / g , "" ) , isReady : ! 0 , error : function ( a ) { throw new Error ( a) } , noop : function ( ) { } , isFunction : function ( a ) { return "function" === n. type ( a) } , isArray : Array. isArray|| function ( a ) { return "array" === n. type ( a) } , isWindow : function ( a ) { return null != a&& a== a. window} , isNumeric : function ( a ) { var b= a&& a. toString ( ) ; return ! n. isArray ( a) && b- parseFloat ( b) + 1 >= 0 } , isEmptyObject : function ( a ) { var b; for ( b in a) return ! 1 ; return ! 0 } , isPlainObject : function ( a ) { var b; if ( ! a|| "object" !== n. type ( a) || a. nodeType|| n. isWindow ( a) ) return ! 1 ; try { if ( a. constructor&& ! k . call ( a, "constructor" ) && ! k . call ( a. constructor. prototype, "isPrototypeOf" ) ) return ! 1 } catch ( c) { return ! 1 } if ( ! l. ownFirst) for ( b in a) return k . call ( a, b) ; for ( b in a) ; return void 0 === b|| k . call ( a, b) } , type : function ( a ) { return null == a? a+ "" : "object" == typeof a|| "function" == typeof a? i[ j . call ( a) ] || "object" : typeof a} , globalEval : function ( b ) { b&& n. trim ( b) && ( a. execScript|| function ( b ) { a. eval . call ( a, b) } ) ( b) } , camelCase : function ( a ) { return a. replace ( p, "ms-" ) . replace ( q, r) } , nodeName : function ( a, b ) { return a. nodeName&& a. nodeName. toLowerCase ( ) === b. toLowerCase ( ) } , each : function ( a, b ) { var c, d= 0 ; if ( s ( a) ) { for ( c= a. length; c> d; d++ ) if ( b . call ( a[ d] , d, a[ d] ) === ! 1 ) break } else for ( d in a) if ( b . call ( a[ d] , d, a[ d] ) === ! 1 ) break ; return a} , trim : function ( a ) { return null == a? "" : ( a+ "" ) . replace ( o, "" ) } , makeArray : function ( a, b ) { var c= b|| [ ] ; return null != a&& ( s ( Object ( a) ) ? n. merge ( c, "string" == typeof a? [ a] : a) : g . call ( c, a) ) , c} , inArray : function ( a, b, c ) { var d; if ( b) { if ( h) return h . 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, e, g= 0 , h= [ ] ; if ( s ( a) ) for ( d= a. length; d> g; g++ ) e= b ( a[ g] , g, c) , null != e&& h. push ( e) ; else for ( g in a) e= b ( a[ g] , g, c) , null != e&& h. push ( e) ; return f . apply ( [ ] , h) } , guid : 1 , proxy : function ( a, b ) { var c, d, f; return "string" == typeof b&& ( f= a[ b] , b= a, a= f) , n. isFunction ( a) ? ( c= e . call ( arguments, 2 ) , d = function ( ) { return a . apply ( b|| this , c. concat ( e . call ( arguments) ) ) } , d. guid= a. guid= a. guid|| n. guid++ , d) : void 0 } , now : function ( ) { return + new Date } , support : l} ) , "function" == typeof Symbol&& ( n. fn[ Symbol. iterator] = c[ Symbol. iterator] ) , n. each ( "Boolean Number String Function Array Date RegExp Object Error Symbol" . split ( " " ) , function ( a, b ) { i[ "[object " + b+ "]" ] = b. toLowerCase ( ) } ) ; function s ( a ) { var b= ! ! a&& "length" in a&& a. length, c= n. type ( a) ; return "function" === c|| n. isWindow ( a) ? ! 1 : "array" === c|| 0 === b|| "number" == typeof b&& b> 0 && b- 1 in a} var t = 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= ga ( ) , z= ga ( ) , A = ga ( ) , 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 = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + M + "))|)" + L + "*\\]" , O = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + N + ")*)|.*)\\)|)" , P = new RegExp ( L + "+" , "g" ) , Q = new RegExp ( "^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$" , "g" ) , R = new RegExp ( "^" + L + "*," + L + "*" ) , S = new RegExp ( "^" + L + "*([>+~]|" + L + ")" + L + "*" ) , T = new RegExp ( "=" + L + "*([^\\]'\"]*?)" + L + "*\\]" , "g" ) , U = new RegExp ( O ) , V = new RegExp ( "^" + M + "$" ) , W = { ID : new RegExp ( "^#(" + M + ")" ) , CLASS : new RegExp ( "^\\.(" + M + ")" ) , TAG : new RegExp ( "^(" + M + "|[*])" ) , ATTR : new RegExp ( "^" + N ) , PSEUDO : new RegExp ( "^" + O ) , 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" ) } , X = / ^(?:input|select|textarea|button)$ / i , Y = / ^h\d$ / i , Z = / ^[^{]+\{\s*\[native \w / , $= / ^(?:#([\w-]+)|(\w+)|\.([\w-]+))$ / , _= / [+~] / , aa= / '|\\ / g , ba= new RegExp ( "\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)" , "ig" ) , ca = 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 ) } , da = function ( ) { m ( ) } ; try { H . apply ( E = I . call ( v. childNodes) , v. childNodes) , E [ v. childNodes. length] . nodeType} catch ( ea) { 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 fa ( a, b, d, e ) { var f, h, j, k, l, o, r, s, w= b&& b. ownerDocument, x= b? b. nodeType: 9 ; if ( d= d|| [ ] , "string" != typeof a|| ! a|| 1 !== x&& 9 !== x&& 11 !== x) return d; if ( ! e&& ( ( b? b. ownerDocument|| b: v) !== n&& m ( b) , b= b|| n, p) ) { if ( 11 !== x&& ( o= $. exec ( a) ) ) if ( f= o[ 1 ] ) { if ( 9 === x) { if ( ! ( j= b. getElementById ( f) ) ) return d; if ( j. id=== f) return d. push ( j) , d} else if ( w&& ( j= w. getElementById ( f) ) && t ( b, j) && j. id=== f) return d. push ( j) , d} else { if ( o[ 2 ] ) return H . apply ( d, b. getElementsByTagName ( a) ) , d; if ( ( f= o[ 3 ] ) && c. getElementsByClassName&& b. getElementsByClassName) return H . apply ( d, b. getElementsByClassName ( f) ) , d} if ( c. qsa&& ! A [ a+ " " ] && ( ! q|| ! q. test ( a) ) ) { if ( 1 !== x) w= b, s= a; else if ( "object" !== b. nodeName. toLowerCase ( ) ) { ( k= b. getAttribute ( "id" ) ) ? k= k. replace ( aa, "\\$&" ) : b. setAttribute ( "id" , k= u) , r= g ( a) , h= r. length, l= V . test ( k) ? "#" + k: "[id='" + k+ "']" ; while ( h-- ) r[ h] = l+ " " + qa ( r[ h] ) ; s= r. join ( "," ) , w= _. test ( a) && oa ( b. parentNode) || b} if ( s) try { return H . apply ( d, w. querySelectorAll ( s) ) , d} catch ( y) { } finally { k=== u&& b. removeAttribute ( "id" ) } } } return i ( a. replace ( Q , "$1" ) , b, d, e) } function ga ( ) { var a= [ ] ; function b ( c, e ) { return a. push ( c+ " " ) > d. cacheLength&& delete b[ a. shift ( ) ] , b[ c+ " " ] = e} return b} function ha ( a ) { return a[ u] = ! 0 , a} function ia ( a ) { var b= n. createElement ( "div" ) ; try { return ! ! a ( b) } catch ( c) { return ! 1 } finally { b. parentNode&& b. parentNode. removeChild ( b) , b= null } } function ja ( a, b ) { var c= a. split ( "|" ) , e= c. length; while ( e-- ) d. attrHandle[ c[ e] ] = b} function ka ( 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 la ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return "input" === c&& b. type=== a} } function ma ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return ( "input" === c|| "button" === c) && b. type=== a} } function na ( a ) { return ha ( function ( b ) { return b= + b, ha ( 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 oa ( a ) { return a&& "undefined" != typeof a. getElementsByTagName&& a} c= fa. support= { } , f= fa. isXML = function ( a ) { var b= a&& ( a. ownerDocument|| a) . documentElement; return b? "HTML" !== b. nodeName: ! 1 } , m= fa. setDocument = function ( a ) { var b, e, g= a? a. ownerDocument|| a: v; return g!== n&& 9 === g. nodeType&& g. documentElement? ( n= g, o= n. documentElement, p= ! f ( n) , ( e= n. defaultView) && e. top!== e&& ( e. addEventListener? e. addEventListener ( "unload" , da, ! 1 ) : e. attachEvent&& e. attachEvent ( "onunload" , da) ) , c. attributes= ia ( function ( a ) { return a. className= "i" , ! a. getAttribute ( "className" ) } ) , c. getElementsByTagName= ia ( function ( a ) { return a. appendChild ( n. createComment ( "" ) ) , ! a. getElementsByTagName ( "*" ) . length} ) , c. getElementsByClassName= Z . test ( n. getElementsByClassName) , c. getById= ia ( function ( a ) { return o. appendChild ( a) . id= u, ! n. getElementsByName|| ! n. 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] : [ ] } } , d. filter. ID = function ( a ) { var b= a. replace ( ba, ca) ; return function ( a ) { return a. getAttribute ( "id" ) === b} } ) : ( delete d. find. ID , d. filter. ID = function ( a ) { var b= a. replace ( ba, ca) ; 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 "undefined" != typeof b. getElementsByClassName&& p? b. getElementsByClassName ( a) : void 0 } , r= [ ] , q= [ ] , ( c. qsa= Z . test ( n. querySelectorAll) ) && ( ia ( 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 ( ".#.+[+~]" ) } ) , ia ( function ( a ) { var b= n. 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= Z . test ( s= o. matches|| o. webkitMatchesSelector|| o. mozMatchesSelector|| o. oMatchesSelector|| o. msMatchesSelector) ) && ia ( function ( a ) { c. disconnectedMatch= s . call ( a, "div" ) , s . call ( a, "[s!='']:x" ) , r. push ( "!=" , O ) } ) , q= q. length&& new RegExp ( q. join ( "|" ) ) , r= r. length&& new RegExp ( r. join ( "|" ) ) , b= Z . test ( o. compareDocumentPosition) , t= b|| Z . 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=== n|| a. ownerDocument=== v&& t ( v, a) ? - 1 : b=== n|| 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, g= [ a] , h= [ b] ; if ( ! e|| ! f) return a=== n? - 1 : b=== n? 1 : e? - 1 : f? 1 : k? J ( k, a) - J ( k, b) : 0 ; if ( e=== f) return ka ( a, b) ; c= a; while ( c= c. parentNode) g. unshift ( c) ; c= b; while ( c= c. parentNode) h. unshift ( c) ; while ( g[ d] === h[ d] ) d++ ; return d? ka ( g[ d] , h[ d] ) : g[ d] === v? - 1 : h[ d] === v? 1 : 0 } , n) : n} , fa. matches = function ( a, b ) { return fa ( a, null , null , b) } , fa. matchesSelector = function ( a, b ) { if ( ( a. ownerDocument|| a) !== n&& m ( a) , b= b. replace ( T , "='$1']" ) , c. matchesSelector&& p&& ! A [ b+ " " ] && ( ! 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 fa ( b, n, null , [ a] ) . length> 0 } , fa. contains = function ( a, b ) { return ( a. ownerDocument|| a) !== n&& m ( a) , t ( a, b) } , fa. 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 } , fa. error = function ( a ) { throw new Error ( "Syntax error, unrecognized expression: " + a) } , fa. 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= fa. 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= fa. selectors= { cacheLength : 50 , createPseudo : ha, match : W , 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 ( ba, ca) , a[ 3 ] = ( a[ 3 ] || a[ 4 ] || a[ 5 ] || "" ) . replace ( ba, ca) , "~=" === 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 ] || fa. 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 ] && fa. error ( a[ 0 ] ) , a} , PSEUDO : function ( a ) { var b, c= ! a[ 6 ] && a[ 2 ] ; return W . CHILD . test ( a[ 0 ] ) ? null : ( a[ 3 ] ? a[ 2 ] = a[ 4 ] || a[ 5 ] || "" : c&& U . 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 ( ba, ca) . 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= fa. 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 ( P , " " ) + " " ) . 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, t= ! 1 ; if ( q) { if ( f) { while ( p) { m= b; while ( m= m[ p] ) if ( h? m. nodeName. toLowerCase ( ) === r: 1 === m. nodeType) return ! 1 ; o= p= "only" === a&& ! o&& "nextSibling" } return ! 0 } if ( o= [ g? q. firstChild: q. lastChild] , g&& s) { m= q, l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , j= k[ a] || [ ] , n= j[ 0 ] === w&& j[ 1 ] , t= n&& j[ 2 ] , m= n&& q. childNodes[ n] ; while ( m= ++ n&& m&& m[ p] || ( t= n= 0 ) || o. pop ( ) ) if ( 1 === m. nodeType&& ++ t&& m=== b) { k[ a] = [ w, n, t] ; break } } else if ( s&& ( m= b, l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , j= k[ a] || [ ] , n= j[ 0 ] === w&& j[ 1 ] , t= n) , t=== ! 1 ) while ( m= ++ n&& m&& m[ p] || ( t= n= 0 ) || o. pop ( ) ) if ( ( h? m. nodeName. toLowerCase ( ) === r: 1 === m. nodeType) && ++ t&& ( s&& ( l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , k[ a] = [ w, t] ) , m=== b) ) break ; return t-= e, t=== d|| t% d=== 0 && t/ d>= 0 } } } , PSEUDO : function ( a, b ) { var c, e= d. pseudos[ a] || d. setFilters[ a. toLowerCase ( ) ] || fa. error ( "unsupported pseudo: " + a) ; return e[ u] ? e ( b) : e. length> 1 ? ( c= [ a, a, "" , b] , d. setFilters. hasOwnProperty ( a. toLowerCase ( ) ) ? ha ( 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 : ha ( function ( a ) { var b= [ ] , c= [ ] , d= h ( a. replace ( Q , "$1" ) ) ; return d[ u] ? ha ( 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 : ha ( function ( a ) { return function ( b ) { return fa ( a, b) . length> 0 } } ) , contains : ha ( function ( a ) { return a= a. replace ( ba, ca) , function ( b ) { return ( b. textContent|| b. innerText|| e ( b) ) . indexOf ( a) > - 1 } } ) , lang : ha ( function ( a ) { return V . test ( a|| "" ) || fa. error ( "unsupported lang: " + a) , a= a. replace ( ba, ca) . 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 Y . test ( a. nodeName) } , input : function ( a ) { return X . 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 : na ( function ( ) { return [ 0 ] } ) , last : na ( function ( a, b ) { return [ b- 1 ] } ) , eq : na ( function ( a, b, c ) { return [ 0 > c? c+ b: c] } ) , even : na ( function ( a, b ) { for ( var c= 0 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , odd : na ( function ( a, b ) { for ( var c= 1 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , lt : na ( function ( a, b, c ) { for ( var d= 0 > c? c+ b: c; -- d>= 0 ; ) a. push ( d) ; return a} ) , gt : na ( 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] = la ( b) ; for ( b in { submit : ! 0 , reset : ! 0 } ) d. pseudos[ b] = ma ( b) ; function pa ( ) { } pa. prototype= d. filters= d. pseudos, d. setFilters= new pa , g= fa. 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= R . exec ( h) ) || ( e&& ( h= h. slice ( e[ 0 ] . length) || h) , i. push ( f= [ ] ) ) , c= ! 1 , ( e= S . exec ( h) ) && ( c= e. shift ( ) , f. push ( { value : c, type : e[ 0 ] . replace ( Q , " " ) } ) , h= h. slice ( c. length) ) ; for ( g in d. filter) ! ( e= W [ 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? fa. error ( a) : z ( a, i) . slice ( 0 ) } ; function qa ( a ) { for ( var b= 0 , c= a. length, d= "" ; c> b; b++ ) d+= a[ b] . value; return d} function ra ( 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, k= [ 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 ( j= b[ u] || ( b[ u] = { } ) , i= j[ b. uniqueID] || ( j[ b. uniqueID] = { } ) , ( h= i[ d] ) && h[ 0 ] === w&& h[ 1 ] === f) return k[ 2 ] = h[ 2 ] ; if ( i[ d] = k, k[ 2 ] = a ( b, c, g) ) return ! 0 } } } function sa ( 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 ta ( a, b, c ) { for ( var d= 0 , e= b. length; e> d; d++ ) fa ( a, b[ d] , c) ; return c} function ua ( 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 va ( a, b, c, d, e, f ) { return d&& ! d[ u] && ( d= va ( d) ) , e&& ! e[ u] && ( e= va ( e, f) ) , ha ( function ( f, g, h, i ) { var j, k, l, m= [ ] , n= [ ] , o= g. length, p= f|| ta ( b|| "*" , h. nodeType? [ h] : h, [ ] ) , q= ! a|| ! f&& b? p: ua ( p, m, a, h, i) , r= c? e|| ( f? a: o|| d) ? [ ] : g: q; if ( c&& c ( q, r, h, i) , d) { j= ua ( 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= ua ( r=== g? r. splice ( o, r. length) : r) , e? e ( null , g, r, i) : H . apply ( g, r) } ) } function wa ( a ) { for ( var b, c, e, f= a. length, g= d. relative[ a[ 0 ] . type] , h= g|| d. relative[ " " ] , i= g? 1 : 0 , k= ra ( function ( a ) { return a=== b} , h, ! 0 ) , l= ra ( 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= [ ra ( sa ( 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 va ( i> 1 && sa ( m) , i> 1 && qa ( a. slice ( 0 , i- 1 ) . concat ( { value : " " === a[ i- 2 ] . type? "*" : "" } ) ) . replace ( Q , "$1" ) , c, e> i&& wa ( a. slice ( i, e) ) , f> e&& wa ( a= a. slice ( e) ) , f> e&& qa ( a) ) } m. push ( c) } return sa ( m) } function xa ( a, b ) { var c= b. length> 0 , e= a. length> 0 , f = function ( f, g, h, i, k ) { var l, o, q, r= 0 , s= "0" , t= f&& [ ] , u= [ ] , v= j, x= f|| e&& d. find. TAG ( "*" , k) , y= w+= null == v? 1 : Math. random ( ) || .1 , z= x. length; for ( k&& ( j= g=== n|| g|| k) ; s!== z&& null != ( l= x[ s] ) ; s++ ) { if ( e&& l) { o= 0 , g|| l. ownerDocument=== n|| ( m ( l) , h= ! p) ; while ( q= a[ o++ ] ) if ( q ( l, g|| n, h) ) { i. push ( l) ; break } k&& ( w= y) } c&& ( ( l= ! q&& l) && r-- , f&& t. push ( l) ) } if ( r+= s, c&& s!== r) { o= 0 ; while ( q= b[ o++ ] ) q ( t, u, g, h) ; if ( f) { if ( r> 0 ) while ( s-- ) t[ s] || u[ s] || ( u[ s] = F . call ( i) ) ; u= ua ( u) } H . apply ( i, u) , k&& ! f&& u. length> 0 && r+ b. length> 1 && fa. uniqueSort ( i) } return k&& ( w= y, j= v) , t} ; return c? ha ( f) : f} return h= fa. compile = function ( a, b ) { var c, d= [ ] , e= [ ] , f= A [ a+ " " ] ; if ( ! f) { b|| ( b= g ( a) ) , c= b. length; while ( c-- ) f= wa ( b[ c] ) , f[ u] ? d. push ( f) : e. push ( f) ; f= A ( a, xa ( e, d) ) , f. selector= a} return f} , i= fa. 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 ( ba, ca) , b) || [ ] ) [ 0 ] , ! b) return e; n&& ( b= b. parentNode) , a= a. slice ( j. shift ( ) . value. length) } i= W . 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 ( ba, ca) , _. test ( j[ 0 ] . type) && oa ( b. parentNode) || b) ) ) { if ( j. splice ( i, 1 ) , a= f. length&& qa ( j) , ! a) return H . apply ( e, f) , e; break } } } return ( n|| h ( a, o) ) ( f, b, ! p, e, ! b|| _. test ( a) && oa ( b. parentNode) || b) , e} , c. sortStable= u. split ( "" ) . sort ( B ) . join ( "" ) === u, c. detectDuplicates= ! ! l, m ( ) , c. sortDetached= ia ( function ( a ) { return 1 & a. compareDocumentPosition ( n. createElement ( "div" ) ) } ) , ia ( function ( a ) { return a. innerHTML= " " , "#" === a. firstChild. getAttribute ( "href" ) } ) || ja ( "type|href|height|width" , function ( a, b, c ) { return c? void 0 : a. getAttribute ( b, "type" === b. toLowerCase ( ) ? 1 : 2 ) } ) , c. attributes&& ia ( function ( a ) { return a. innerHTML= " " , a. firstChild. setAttribute ( "value" , "" ) , "" === a. firstChild. getAttribute ( "value" ) } ) || ja ( "value" , function ( a, b, c ) { return c|| "input" !== a. nodeName. toLowerCase ( ) ? void 0 : a. defaultValue} ) , ia ( function ( a ) { return null == a. getAttribute ( "disabled" ) } ) || ja ( 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 } ) , fa} ( a) ; n. find= t, n. expr= t. selectors, n. expr[ ":" ] = n. expr. pseudos, n. uniqueSort= n. unique= t. uniqueSort, n. text= t. getText, n. isXMLDoc= t. isXML, n. contains= t. contains; var u = function ( a, b, c ) { var d= [ ] , e= void 0 !== c; while ( ( a= a[ b] ) && 9 !== a. nodeType) if ( 1 === a. nodeType) { if ( e&& n ( a) . is ( c) ) break ; d. push ( a) } return d} , v = function ( a, b ) { for ( var c= [ ] ; a; a= a. nextSibling) 1 === a. nodeType&& a!== b&& c. push ( a) ; return c} , w= n. expr. match. needsContext, x= / ^<([\w-]+)\s*\/?>(?:<\/\1>|)$ / , y= / ^.[^:#\[\.,]*$ / ; function z ( a, b, c ) { if ( n. isFunction ( b) ) return n. grep ( a, function ( a, d ) { return ! ! b . call ( a, d, a) !== c} ) ; if ( b. nodeType) return n. grep ( a, function ( a ) { return a=== b!== c} ) ; if ( "string" == typeof b) { if ( y. test ( b) ) return n. filter ( b, a, c) ; b= n. filter ( b, a) } return n. grep ( a, function ( a ) { return n. inArray ( a, b) > - 1 !== c} ) } n. filter = function ( a, b, c ) { var d= b[ 0 ] ; return c&& ( a= ":not(" + a+ ")" ) , 1 === b. length&& 1 === d. nodeType? n. find. matchesSelector ( d, a) ? [ d] : [ ] : n. find. matches ( a, n. grep ( b, function ( a ) { return 1 === a. nodeType} ) ) } , n. fn. extend ( { find : function ( a ) { var b, c= [ ] , d= this , e= d. length; if ( "string" != typeof a) return this . pushStack ( n ( a) . filter ( function ( ) { for ( b= 0 ; e> b; b++ ) if ( n. contains ( d[ b] , this ) ) return ! 0 } ) ) ; for ( b= 0 ; e> b; b++ ) n. find ( a, d[ b] , c) ; return c= this . pushStack ( e> 1 ? n. unique ( c) : c) , c. selector= this . selector? this . selector+ " " + a: a, c} , filter : function ( a ) { return this . pushStack ( z ( this , a|| [ ] , ! 1 ) ) } , not : function ( a ) { return this . pushStack ( z ( this , a|| [ ] , ! 0 ) ) } , is : function ( a ) { return ! ! z ( this , "string" == typeof a&& w. test ( a) ? n ( a) : a|| [ ] , ! 1 ) . length} } ) ; var A , B = / ^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$ / , C = n. fn. init = function ( a, b, c ) { var e, f; if ( ! a) return this ; if ( c= c|| A , "string" == typeof a) { if ( e= "<" === a. charAt ( 0 ) && ">" === a. charAt ( a. length- 1 ) && a. length>= 3 ? [ null , a, null ] : B . exec ( a) , ! e|| ! e[ 1 ] && b) return ! b|| b. jquery? ( b|| c) . find ( a) : this . constructor ( b) . find ( a) ; if ( e[ 1 ] ) { if ( b= b instanceof n ? b[ 0 ] : b, n. merge ( this , n. parseHTML ( e[ 1 ] , b&& b. nodeType? b. ownerDocument|| b: d, ! 0 ) ) , x. test ( e[ 1 ] ) && n. isPlainObject ( b) ) for ( e in b) n. isFunction ( this [ e] ) ? this [ e] ( b[ e] ) : this . attr ( e, b[ e] ) ; return this } if ( f= d. getElementById ( e[ 2 ] ) , f&& f. parentNode) { if ( f. id!== e[ 2 ] ) return A . find ( a) ; this . length= 1 , this [ 0 ] = f} return this . context= d, this . selector= a, this } return a. nodeType? ( this . context= this [ 0 ] = a, this . length= 1 , this ) : n. isFunction ( a) ? "undefined" != typeof c. ready? c. ready ( a) : a ( n) : ( void 0 !== a. selector&& ( this . selector= a. selector, this . context= a. context) , n. makeArray ( a, this ) ) } ; C . prototype= n. fn, A = n ( d) ; var D = / ^(?:parents|prev(?:Until|All)) / , E = { children : ! 0 , contents : ! 0 , next : ! 0 , prev : ! 0 } ; n. fn. extend ( { has : function ( a ) { var b, c= n ( a, this ) , d= c. length; return this . filter ( function ( ) { for ( b= 0 ; d> b; b++ ) if ( n. contains ( this , c[ b] ) ) return ! 0 } ) } , closest : function ( a, b ) { for ( var c, d= 0 , e= this . length, f= [ ] , g= w. test ( a) || "string" != typeof a? n ( 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&& n. find. matchesSelector ( c, a) ) ) { f. push ( c) ; break } return this . pushStack ( f. length> 1 ? n. uniqueSort ( f) : f) } , index : function ( a ) { return a? "string" == typeof a? n. inArray ( this [ 0 ] , n ( a) ) : n. inArray ( a. jquery? a[ 0 ] : a, this ) : this [ 0 ] && this [ 0 ] . parentNode? this . first ( ) . prevAll ( ) . length: - 1 } , add : function ( a, b ) { return this . pushStack ( n. uniqueSort ( n. merge ( this . get ( ) , n ( a, b) ) ) ) } , addBack : function ( a ) { return this . add ( null == a? this . prevObject: this . prevObject. filter ( a) ) } } ) ; function F ( a, b ) { do a= a[ b] ; while ( a&& 1 !== a. nodeType) ; return a} n. each ( { parent : function ( a ) { var b= a. parentNode; return b&& 11 !== b. nodeType? b: null } , parents : function ( a ) { return u ( a, "parentNode" ) } , parentsUntil : function ( a, b, c ) { return u ( a, "parentNode" , c) } , next : function ( a ) { return F ( a, "nextSibling" ) } , prev : function ( a ) { return F ( a, "previousSibling" ) } , nextAll : function ( a ) { return u ( a, "nextSibling" ) } , prevAll : function ( a ) { return u ( a, "previousSibling" ) } , nextUntil : function ( a, b, c ) { return u ( a, "nextSibling" , c) } , prevUntil : function ( a, b, c ) { return u ( a, "previousSibling" , c) } , siblings : function ( a ) { return v ( ( a. parentNode|| { } ) . firstChild, a) } , children : function ( a ) { return v ( a. firstChild) } , contents : function ( a ) { return n. nodeName ( a, "iframe" ) ? a. contentDocument|| a. contentWindow. document: n. merge ( [ ] , a. childNodes) } } , function ( a, b ) { n. fn[ a] = function ( c, d ) { var e= n. map ( this , b, c) ; return "Until" !== a. slice ( - 5 ) && ( d= c) , d&& "string" == typeof d&& ( e= n. filter ( d, e) ) , this . length> 1 && ( E [ a] || ( e= n. uniqueSort ( e) ) , D . test ( a) && ( e= e. reverse ( ) ) ) , this . pushStack ( e) } } ) ; var G = / \S+ / g ; function H ( a ) { var b= { } ; return n. each ( a. match ( G ) || [ ] , function ( a, c ) { b[ c] = ! 0 } ) , b} n. Callbacks = function ( a ) { a= "string" == typeof a? H ( a) : n. extend ( { } , a) ; var b, c, d, e, f= [ ] , g= [ ] , h= - 1 , i = function ( ) { for ( e= a. once, d= b= ! 0 ; g. length; h= - 1 ) { c= g. shift ( ) ; while ( ++ h< f. length) f[ h] . apply ( c[ 0 ] , c[ 1 ] ) === ! 1 && a. stopOnFalse&& ( h= f. length, c= ! 1 ) } a. memory|| ( c= ! 1 ) , b= ! 1 , e&& ( f= c? [ ] : "" ) } , j= { add : function ( ) { return f&& ( c&& ! b&& ( h= f. length- 1 , g. push ( c) ) , function d ( b ) { n. each ( b, function ( b, c ) { n. isFunction ( c) ? a. unique&& j. has ( c) || f. push ( c) : c&& c. length&& "string" !== n. type ( c) && d ( c) } ) } ( arguments) , c&& ! b&& i ( ) ) , this } , remove : function ( ) { return n. each ( arguments, function ( a, b ) { var c; while ( ( c= n. inArray ( b, f, c) ) > - 1 ) f. splice ( c, 1 ) , h>= c&& h-- } ) , this } , has : function ( a ) { return a? n. inArray ( a, f) > - 1 : f. length> 0 } , empty : function ( ) { return f&& ( f= [ ] ) , this } , disable : function ( ) { return e= g= [ ] , f= c= "" , this } , disabled : function ( ) { return ! f} , lock : function ( ) { return e= ! 0 , c|| j. disable ( ) , this } , locked : function ( ) { return ! ! e} , fireWith : function ( a, c ) { return e|| ( c= c|| [ ] , c= [ a, c. slice? c. slice ( ) : c] , g. push ( c) , b|| i ( ) ) , this } , fire : function ( ) { return j. fireWith ( this , arguments) , this } , fired : function ( ) { return ! ! d} } ; return j} , n. extend ( { Deferred : function ( a ) { var b= [ [ "resolve" , "done" , n. Callbacks ( "once memory" ) , "resolved" ] , [ "reject" , "fail" , n. Callbacks ( "once memory" ) , "rejected" ] , [ "notify" , "progress" , n. Callbacks ( "memory" ) ] ] , c= "pending" , d= { state : function ( ) { return c} , always : function ( ) { return e. done ( arguments) . fail ( arguments) , this } , then : function ( ) { var a= arguments; return n. Deferred ( function ( c ) { n. each ( b, function ( b, f ) { var g= n. isFunction ( a[ b] ) && a[ b] ; e[ f[ 1 ] ] ( function ( ) { var a= g&& g . apply ( this , arguments) ; a&& n. isFunction ( a. promise) ? a. promise ( ) . progress ( c. notify) . done ( c. resolve) . fail ( c. reject) : c[ f[ 0 ] + "With" ] ( this === d? c. promise ( ) : this , g? [ a] : arguments) } ) } ) , a= null } ) . promise ( ) } , promise : function ( a ) { return null != a? n. extend ( a, d) : d} } , e= { } ; return d. pipe= d. then, n. 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= e . call ( arguments) , d= c. length, f= 1 !== d|| a&& n. isFunction ( a. promise) ? d: 0 , g= 1 === f? a: n. Deferred ( ) , h = function ( a, b, c ) { return function ( d ) { b[ a] = this , c[ a] = arguments. length> 1 ? e . call ( arguments) : d, c=== i? g. notifyWith ( b, c) : -- f|| g. resolveWith ( b, c) } } , i, j, k; if ( d> 1 ) for ( i= new Array ( d) , j= new Array ( d) , k= new Array ( d) ; d> b; b++ ) c[ b] && n. isFunction ( c[ b] . promise) ? c[ b] . promise ( ) . progress ( h ( b, j, i) ) . done ( h ( b, k, c) ) . fail ( g. reject) : -- f; return f|| g. resolveWith ( k, c) , g. promise ( ) } } ) ; var I ; n. fn. ready = function ( a ) { return n. ready. promise ( ) . done ( a) , this } , n. extend ( { isReady : ! 1 , readyWait : 1 , holdReady : function ( a ) { a? n. readyWait++ : n. ready ( ! 0 ) } , ready : function ( a ) { ( a=== ! 0 ? -- n. readyWait: n. isReady) || ( n. isReady= ! 0 , a!== ! 0 && -- n. readyWait> 0 || ( I . resolveWith ( d, [ n] ) , n. fn. triggerHandler&& ( n ( d) . triggerHandler ( "ready" ) , n ( d) . off ( "ready" ) ) ) ) } } ) ; function J ( ) { d. addEventListener? ( d. removeEventListener ( "DOMContentLoaded" , K ) , a. removeEventListener ( "load" , K ) ) : ( d. detachEvent ( "onreadystatechange" , K ) , a. detachEvent ( "onload" , K ) ) } function K ( ) { ( d. addEventListener|| "load" === a. event. type|| "complete" === d. readyState) && ( J ( ) , n. ready ( ) ) } n. ready. promise = function ( b ) { if ( ! I ) if ( I = n. Deferred ( ) , "complete" === d. readyState|| "loading" !== d. readyState&& ! d. documentElement. doScroll) a. setTimeout ( n. ready) ; else if ( d. addEventListener) d. addEventListener ( "DOMContentLoaded" , K ) , a. addEventListener ( "load" , K ) ; else { d. attachEvent ( "onreadystatechange" , K ) , a. attachEvent ( "onload" , K ) ; var c= ! 1 ; try { c= null == a. frameElement&& d. documentElement} catch ( e) { } c&& c. doScroll&& ! function f ( ) { if ( ! n. isReady) { try { c. doScroll ( "left" ) } catch ( b) { return a. setTimeout ( f, 50 ) } J ( ) , n. ready ( ) } } ( ) } return I . promise ( b) } , n. ready. promise ( ) ; var L ; for ( L in n ( l) ) break ; l. ownFirst= "0" === L , l. inlineBlockNeedsLayout= ! 1 , n ( function ( ) { var a, b, c, e; c= d. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style&& ( b= d. createElement ( "div" ) , e= d. createElement ( "div" ) , e. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( e) . appendChild ( b) , "undefined" != typeof b. style. zoom&& ( b. style. cssText= "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1" , l. inlineBlockNeedsLayout= a= 3 === b. offsetWidth, a&& ( c. style. zoom= 1 ) ) , c. removeChild ( e) ) } ) , function ( ) { var a= d. createElement ( "div" ) ; l. deleteExpando= ! 0 ; try { delete a. test} catch ( b) { l. deleteExpando= ! 1 } a= null } ( ) ; var M = function ( a ) { var b= n. noData[ ( a. nodeName+ " " ) . toLowerCase ( ) ] , c= + a. nodeType|| 1 ; return 1 !== c&& 9 !== c? ! 1 : ! b|| b!== ! 0 && a. getAttribute ( "classid" ) === b} , N = / ^(?:\{[\w\W]*\}|\[[\w\W]*\])$ / , O = / ([A-Z]) / g ; function P ( a, b, c ) { if ( void 0 === c&& 1 === a. nodeType) { var d= "data-" + b. replace ( O , "-$1" ) . toLowerCase ( ) ; if ( c= a. getAttribute ( d) , "string" == typeof c) { try { c= "true" === c? ! 0 : "false" === c? ! 1 : "null" === c? null : + c+ "" === c? + c: N . test ( c) ? n. parseJSON ( c) : c} catch ( e) { } n. data ( a, b, c) } else c= void 0 ;
} return c} function Q ( a ) { var b; for ( b in a) if ( ( "data" !== b|| ! n. isEmptyObject ( a[ b] ) ) && "toJSON" !== b) return ! 1 ; return ! 0 } function R ( a, b, d, e ) { if ( M ( a) ) { var f, g, h= n. expando, i= a. nodeType, j= i? n. 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 ( ) || n. guid++ : h) , j[ k] || ( j[ k] = i? { } : { toJSON : n. noop} ) , "object" != typeof b&& "function" != typeof b|| ( e? j[ k] = n. extend ( j[ k] , b) : j[ k] . data= n. extend ( j[ k] . data, b) ) , g= j[ k] , e|| ( g. data|| ( g. data= { } ) , g= g. data) , void 0 !== d&& ( g[ n. camelCase ( b) ] = d) , "string" == typeof b? ( f= g[ b] , null == f&& ( f= g[ n. camelCase ( b) ] ) ) : f= g, f} } function S ( a, b, c ) { if ( M ( a) ) { var d, e, f= a. nodeType, g= f? n. cache: a, h= f? a[ n. expando] : n. expando; if ( g[ h] ) { if ( b&& ( d= c? g[ h] : g[ h] . data) ) { n. isArray ( b) ? b= b. concat ( n. map ( b, n. camelCase) ) : b in d? b= [ b] : ( b= n. camelCase ( b) , b= b in d? [ b] : b. split ( " " ) ) , e= b. length; while ( e-- ) delete d[ b[ e] ] ; if ( c? ! Q ( d) : ! n. isEmptyObject ( d) ) return } ( c|| ( delete g[ h] . data, Q ( g[ h] ) ) ) && ( f? n. cleanData ( [ a] , ! 0 ) : l. deleteExpando|| g!= g. window? delete g[ h] : g[ h] = void 0 ) } } } n. extend ( { cache : { } , noData : { "applet " : ! 0 , "embed " : ! 0 , "object " : "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" } , hasData : function ( a ) { return a= a. nodeType? n. cache[ a[ n. expando] ] : a[ n. expando] , ! ! a&& ! Q ( a) } , data : function ( a, b, c ) { return R ( a, b, c) } , removeData : function ( a, b ) { return S ( a, b) } , _data : function ( a, b, c ) { return R ( a, b, c, ! 0 ) } , _removeData : function ( a, b ) { return S ( a, b, ! 0 ) } } ) , n. 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= n. data ( f) , 1 === f. nodeType&& ! n. _data ( f, "parsedAttrs" ) ) ) { c= g. length; while ( c-- ) g[ c] && ( d= g[ c] . name, 0 === d. indexOf ( "data-" ) && ( d= n. camelCase ( d. slice ( 5 ) ) , P ( f, d, e[ d] ) ) ) ; n. _data ( f, "parsedAttrs" , ! 0 ) } return e} return "object" == typeof a? this . each ( function ( ) { n. data ( this , a) } ) : arguments. length> 1 ? this . each ( function ( ) { n. data ( this , a, b) } ) : f? P ( f, a, n. data ( f, a) ) : void 0 } , removeData : function ( a ) { return this . each ( function ( ) { n. removeData ( this , a) } ) } } ) , n. extend ( { queue : function ( a, b, c ) { var d; return a? ( b= ( b|| "fx" ) + "queue" , d= n. _data ( a, b) , c&& ( ! d|| n. isArray ( c) ? d= n. _data ( a, b, n. makeArray ( c) ) : d. push ( c) ) , d|| [ ] ) : void 0 } , dequeue : function ( a, b ) { b= b|| "fx" ; var c= n. queue ( a, b) , d= c. length, e= c. shift ( ) , f= n. _queueHooks ( a, b) , g = function ( ) { n. 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 n. _data ( a, c) || n. _data ( a, c, { empty : n. Callbacks ( "once memory" ) . add ( function ( ) { n. _removeData ( a, b+ "queue" ) , n. _removeData ( a, c) } ) } ) } } ) , n. fn. extend ( { queue : function ( a, b ) { var c= 2 ; return "string" != typeof a&& ( b= a, a= "fx" , c-- ) , arguments. length< c? n. queue ( this [ 0 ] , a) : void 0 === b? this : this . each ( function ( ) { var c= n. queue ( this , a, b) ; n. _queueHooks ( this , a) , "fx" === a&& "inprogress" !== c[ 0 ] && n. dequeue ( this , a) } ) } , dequeue : function ( a ) { return this . each ( function ( ) { n. dequeue ( this , a) } ) } , clearQueue : function ( a ) { return this . queue ( a|| "fx" , [ ] ) } , promise : function ( a, b ) { var c, d= 1 , e= n. 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= n. _data ( f[ g] , a+ "queueHooks" ) , c&& c. empty&& ( d++ , c. empty. add ( h) ) ; return h ( ) , e. promise ( b) } } ) , function ( ) { var a; l. shrinkWrapBlocks = function ( ) { if ( null != a) return a; a= ! 1 ; var b, c, e; return c= d. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style? ( b= d. createElement ( "div" ) , e= d. createElement ( "div" ) , e. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( e) . appendChild ( b) , "undefined" != typeof b. style. zoom&& ( 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 ( d. createElement ( "div" ) ) . style. width= "5px" , a= 3 !== b. offsetWidth) , c. removeChild ( e) , a) : void 0 } } ( ) ; var T = / [+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|) / . source, U = new RegExp ( "^(?:([+-])=|)(" + T + ")([a-z%]*)$" , "i" ) , V = [ "Top" , "Right" , "Bottom" , "Left" ] , W = function ( a, b ) { return a= b|| a, "none" === n. css ( a, "display" ) || ! n. contains ( a. ownerDocument, a) } ; function X ( a, b, c, d ) { var e, f= 1 , g= 20 , h= d? function ( ) { return d. cur ( ) } : function ( ) { return n. css ( a, b, "" ) } , i= h ( ) , j= c&& c[ 3 ] || ( n. cssNumber[ b] ? "" : "px" ) , k= ( n. cssNumber[ b] || "px" !== j&& + i) && U . exec ( n. css ( a, b) ) ; if ( k&& k[ 3 ] !== j) { j= j|| k[ 3 ] , c= c|| [ ] , k= + i|| 1 ; do f= f|| ".5" , k/= f, n. style ( a, b, k+ j) ; while ( f!== ( f= h ( ) / i) && 1 !== f&& -- g) } return c&& ( k= + k|| + i|| 0 , e= c[ 1 ] ? k+ ( c[ 1 ] + 1 ) * c[ 2 ] : + c[ 2 ] , d&& ( d. unit= j, d. start= k, d. end= e) ) , e} var Y = function ( a, b, c, d, e, f, g ) { var h= 0 , i= a. length, j= null == c; if ( "object" === n. type ( c) ) { e= ! 0 ; for ( h in c) Y ( a, b, h, c[ h] , ! 0 , f, g) } else if ( void 0 !== d&& ( e= ! 0 , n. isFunction ( d) || ( g= ! 0 ) , j&& ( g? ( b . call ( a, d) , b= null ) : ( j= b, b = function ( a, b, c ) { return j . call ( n ( 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} , Z = / ^(?:checkbox|radio)$ / i , $= / <([\w:-]+) / , _= / ^$|\/(?:java|ecma)script / i , aa= / ^\s+ / , ba= "abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video" ; function ca ( a ) { var b= ba. split ( "|" ) , c= a. createDocumentFragment ( ) ; if ( c. createElement) while ( b. length) c. createElement ( b. pop ( ) ) ; return c} ! function ( ) { var a= d. createElement ( "div" ) , b= d. createDocumentFragment ( ) , c= d. createElement ( "input" ) ; a. innerHTML= " a " , l. leadingWhitespace= 3 === a. firstChild. nodeType, l. tbody= ! a. getElementsByTagName ( "tbody" ) . length, l. htmlSerialize= ! ! a. getElementsByTagName ( "link" ) . length, l. html5Clone= "<:nav>" !== d. createElement ( "nav" ) . cloneNode ( ! 0 ) . outerHTML, c. type= "checkbox" , c. checked= ! 0 , b. appendChild ( c) , l. appendChecked= c. checked, a. innerHTML= "" , l. noCloneChecked= ! ! a. cloneNode ( ! 0 ) . lastChild. defaultValue, b. appendChild ( a) , c= d. createElement ( "input" ) , c. setAttribute ( "type" , "radio" ) , c. setAttribute ( "checked" , "checked" ) , c. setAttribute ( "name" , "t" ) , a. appendChild ( c) , l. checkClone= a. cloneNode ( ! 0 ) . cloneNode ( ! 0 ) . lastChild. checked, l. noCloneEvent= ! ! a. addEventListener, a[ n. expando] = 1 , l. attributes= ! a. getAttribute ( n. expando) } ( ) ; var da= { option : [ 1 , "" , "" ] , legend : [ 1 , "" , "" ] , area : [ 1 , "" , "" ] , param : [ 1 , "" , "" ] , thead : [ 1 , "" ] , tr : [ 2 , "" ] , col : [ 2 , "" ] , td : [ 3 , "" ] , _default : l. htmlSerialize? [ 0 , "" , "" ] : [ 1 , "X", "
" ] } ; da. optgroup= da. option, da. tbody= da. tfoot= da. colgroup= da. caption= da. thead, da. th= da. td; function ea ( a, b ) { var c, d, e= 0 , f= "undefined" != typeof a. getElementsByTagName? a. getElementsByTagName ( b|| "*" ) : "undefined" != typeof a. querySelectorAll? a. querySelectorAll ( b|| "*" ) : void 0 ; if ( ! f) for ( f= [ ] , c= a. childNodes|| a; null != ( d= c[ e] ) ; e++ ) ! b|| n. nodeName ( d, b) ? f. push ( d) : n. merge ( f, ea ( d, b) ) ; return void 0 === b|| b&& n. nodeName ( a, b) ? n. merge ( [ a] , f) : f} function fa ( a, b ) { for ( var c, d= 0 ; null != ( c= a[ d] ) ; d++ ) n. _data ( c, "globalEval" , ! b|| n. _data ( b[ d] , "globalEval" ) ) } var ga= / <|?\w+; / , ha= / / i ; function ia ( a ) { Z . test ( a. type) && ( a. defaultChecked= a. checked) } function ja ( a, b, c, d, e ) { for ( var f, g, h, i, j, k, m, o= a. length, p= ca ( b) , q= [ ] , r= 0 ; o> r; r++ ) if ( g= a[ r] , g|| 0 === g) if ( "object" === n. type ( g) ) n. merge ( q, g. nodeType? [ g] : g) ; else if ( ga. test ( g) ) { i= i|| p. appendChild ( b. createElement ( "div" ) ) , j= ( $. exec ( g) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) , m= da[ j] || da. _default, i. innerHTML= m[ 1 ] + n. htmlPrefilter ( g) + m[ 2 ] , f= m[ 0 ] ; while ( f-- ) i= i. lastChild; if ( ! l. leadingWhitespace&& aa. test ( g) && q. push ( b. createTextNode ( aa. exec ( g) [ 0 ] ) ) , ! l. tbody) { g= "table" !== j|| ha. test ( g) ? ""!== m[ 1 ] || ha. test ( g) ? 0 : i: i. firstChild, f= g&& g. childNodes. length; while ( f-- ) n. nodeName ( k= g. childNodes[ f] , "tbody" ) && ! k. childNodes. length&& g. removeChild ( k) } n. merge ( q, i. childNodes) , i. textContent= "" ; while ( i. firstChild) i. removeChild ( i. firstChild) ; i= p. lastChild} else q. push ( b. createTextNode ( g) ) ; i&& p. removeChild ( i) , l. appendChecked|| n. grep ( ea ( q, "input" ) , ia) , r= 0 ; while ( g= q[ r++ ] ) if ( d&& n. inArray ( g, d) > - 1 ) e&& e. push ( g) ; else if ( h= n. contains ( g. ownerDocument, g) , i= ea ( p. appendChild ( g) , "script" ) , h&& fa ( i) , c) { f= 0 ; while ( g= i[ f++ ] ) _. test ( g. type|| "" ) && c. push ( g) } return i= null , p} ! function ( ) { var b, c, e= d. createElement ( "div" ) ; for ( b in { submit : ! 0 , change : ! 0 , focusin : ! 0 } ) c= "on" + b, ( l[ b] = c in a) || ( e. setAttribute ( c, "t" ) , l[ b] = e. attributes[ c] . expando=== ! 1 ) ; e= null } ( ) ; var ka= / ^(?:input|select|textarea)$ / i , la= / ^key / , ma= / ^(?:mouse|pointer|contextmenu|drag|drop)|click / , na= / ^(?:focusinfocus|focusoutblur)$ / , oa= / ^([^.]*)(?:\.(.+)|) / ; function pa ( ) { return ! 0 } function qa ( ) { return ! 1 } function ra ( ) { try { return d. activeElement} catch ( a) { } } function sa ( a, b, c, d, e, f ) { var g, h; if ( "object" == typeof b) { "string" != typeof c&& ( d= d|| c, c= void 0 ) ; for ( h in b) sa ( a, h, c, d, b[ h] , f) ; return a} if ( null == d&& null == e? ( e= c, d= c= void 0 ) : null == e&& ( "string" == typeof c? ( e= d, d= void 0 ) : ( e= d, d= c, c= void 0 ) ) , e=== ! 1 ) e= qa; else if ( ! e) return a; return 1 === f&& ( g= e, e = function ( a ) { return n ( ) . off ( a) , g . apply ( this , arguments) } , e. guid= g. guid|| ( g. guid= n. guid++ ) ) , a. each ( function ( ) { n. event. add ( this , b, e, d, c) } ) } n. event= { global : { } , add : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, m, o, p, q, r= n. _data ( a) ; if ( r) { c. handler&& ( i= c, c= i. handler, e= i. selector) , c. guid|| ( c. guid= n. guid++ ) , ( g= r. events) || ( g= r. events= { } ) , ( k= r. handle) || ( k= r. handle = function ( a ) { return "undefined" == typeof n|| a&& n. event. triggered=== a. type? void 0 : n. event. dispatch . apply ( k. elem, arguments) } , k. elem= a) , b= ( b|| "" ) . match ( G ) || [ "" ] , h= b. length; while ( h-- ) f= oa. exec ( b[ h] ) || [ ] , o= q= f[ 1 ] , p= ( f[ 2 ] || "" ) . split ( "." ) . sort ( ) , o&& ( j= n. event. special[ o] || { } , o= ( e? j. delegateType: j. bindType) || o, j= n. event. special[ o] || { } , l= n. extend ( { type : o, origType : q, data : d, handler : c, guid : c. guid, selector : e, needsContext : e&& n. expr. match. needsContext. test ( e) , namespace : p. join ( "." ) } , i) , ( m= g[ o] ) || ( m= g[ o] = [ ] , m. 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? m. splice ( m. delegateCount++ , 0 , l) : m. push ( l) , n. event. global[ o] = ! 0 ) ; a= null } } , remove : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, m, o, p, q, r= n. hasData ( a) && n. _data ( a) ; if ( r&& ( k= r. events) ) { b= ( b|| "" ) . match ( G ) || [ "" ] , j= b. length; while ( j-- ) if ( h= oa. exec ( b[ j] ) || [ ] , o= q= h[ 1 ] , p= ( h[ 2 ] || "" ) . split ( "." ) . sort ( ) , o) { l= n. event. special[ o] || { } , o= ( d? l. delegateType: l. bindType) || o, m= k[ o] || [ ] , h= h[ 2 ] && new RegExp ( "(^|\\.)" + p. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , i= f= m. length; while ( f-- ) g= m[ f] , ! e&& q!== g. origType|| c&& c. guid!== g. guid|| h&& ! h. test ( g. namespace) || d&& d!== g. selector&& ( "**" !== d|| ! g. selector) || ( m. splice ( f, 1 ) , g. selector&& m. delegateCount-- , l. remove&& l. remove . call ( a, g) ) ; i&& ! m. length&& ( l. teardown&& l. teardown . call ( a, p, r. handle) !== ! 1 || n. removeEvent ( a, o, r. handle) , delete k[ o] ) } else for ( o in k) n. event. remove ( a, o+ b[ j] , c, d, ! 0 ) ; n. isEmptyObject ( k) && ( delete r. handle, n. _removeData ( a, "events" ) ) } } , trigger : function ( b, c, e, f ) { var g, h, i, j, l, m, o, p= [ e|| d] , q= k . call ( b, "type" ) ? b. type: b, r= k . call ( b, "namespace" ) ? b. namespace. split ( "." ) : [ ] ; if ( i= m= e= e|| d, 3 !== e. nodeType&& 8 !== e. nodeType&& ! na. test ( q+ n. event. triggered) && ( q. indexOf ( "." ) > - 1 && ( r= q. split ( "." ) , q= r. shift ( ) , r. sort ( ) ) , h= q. indexOf ( ":" ) < 0 && "on" + q, b= b[ n. expando] ? b: new n. Event ( q, "object" == typeof b&& b) , b. isTrigger= f? 2 : 3 , b. namespace= r. join ( "." ) , b. rnamespace= b. namespace? new RegExp ( "(^|\\.)" + r. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , b. result= void 0 , b. target|| ( b. target= e) , c= null == c? [ b] : n. makeArray ( c, [ b] ) , l= n. event. special[ q] || { } , f|| ! l. trigger|| l. trigger . apply ( e, c) !== ! 1 ) ) { if ( ! f&& ! l. noBubble&& ! n. isWindow ( e) ) { for ( j= l. delegateType|| q, na. test ( j+ q) || ( i= i. parentNode) ; i; i= i. parentNode) p. push ( i) , m= i; m=== ( e. ownerDocument|| d) && p. push ( m. defaultView|| m. parentWindow|| a) } o= 0 ; while ( ( i= p[ o++ ] ) && ! b. isPropagationStopped ( ) ) b. type= o> 1 ? j: l. bindType|| q, g= ( n. _data ( i, "events" ) || { } ) [ b. type] && n. _data ( i, "handle" ) , g&& g . apply ( i, c) , g= h&& i[ h] , g&& g. apply&& M ( i) && ( b. result= g . apply ( i, c) , b. result=== ! 1 && b. preventDefault ( ) ) ; if ( b. type= q, ! f&& ! b. isDefaultPrevented ( ) && ( ! l. _default|| l. _default . apply ( p. pop ( ) , c) === ! 1 ) && M ( e) && h&& e[ q] && ! n. isWindow ( e) ) { m= e[ h] , m&& ( e[ h] = null ) , n. event. triggered= q; try { e[ q] ( ) } catch ( s) { } n. event. triggered= void 0 , m&& ( e[ h] = m) } return b. result} } , dispatch : function ( a ) { a= n. event. fix ( a) ; var b, c, d, f, g, h= [ ] , i= e . call ( arguments) , j= ( n. _data ( this , "events" ) || { } ) [ a. type] || [ ] , k= n. event. special[ a. type] || { } ; if ( i[ 0 ] = a, a. delegateTarget= this , ! k. preDispatch|| k. preDispatch . call ( this , a) !== ! 1 ) { h= n. event. handlers . call ( this , a, j) , b= 0 ; while ( ( f= h[ b++ ] ) && ! a. isPropagationStopped ( ) ) { a. currentTarget= f. elem, c= 0 ; while ( ( g= f. handlers[ c++ ] ) && ! a. isImmediatePropagationStopped ( ) ) a. rnamespace&& ! a. rnamespace. test ( g. namespace) || ( a. handleObj= g, a. data= g. data, d= ( ( n. event. special[ g. origType] || { } ) . handle|| g. handler) . apply ( f. elem, i) , void 0 !== d&& ( a. result= d) === ! 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&& ( "click" !== a. type|| isNaN ( a. button) || a. button< 1 ) ) for ( ; i!= this ; i= i. parentNode|| this ) if ( 1 === i. nodeType&& ( i. disabled!== ! 0 || "click" !== a. type) ) { for ( d= [ ] , c= 0 ; h> c; c++ ) f= b[ c] , e= f. selector+ " " , void 0 === d[ e] && ( d[ e] = f. needsContext? n ( e, this ) . index ( i) > - 1 : n. find ( e, this , null , [ i] ) . length) , d[ e] && d. push ( f) ; d. length&& g. push ( { elem : i, handlers : d} ) } return h< b. length&& g. push ( { elem : this , handlers : b. slice ( h) } ) , g} , fix : function ( a ) { if ( a[ n. expando] ) return a; var b, c, e, f= a. type, g= a, h= this . fixHooks[ f] ; h|| ( this . fixHooks[ f] = h= ma. test ( f) ? this . mouseHooks: la. test ( f) ? this . keyHooks: { } ) , e= h. props? this . props. concat ( h. props) : this . props, a= new n. Event ( g) , b= e. length; while ( b-- ) c= e[ b] , a[ c] = g[ c] ; return a. target|| ( a. target= g. srcElement|| d) , 3 === a. target. nodeType&& ( a. target= a. target. parentNode) , a. metaKey= ! ! a. metaKey, h. filter? h. filter ( a, g) : a} , props : "altKey bubbles cancelable ctrlKey currentTarget detail 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, e, f, g= b. button, h= b. fromElement; return null == a. pageX&& null != b. clientX&& ( e= a. target. ownerDocument|| d, f= e. documentElement, c= e. body, a. pageX= b. clientX+ ( f&& f. scrollLeft|| c&& c. scrollLeft|| 0 ) - ( f&& f. clientLeft|| c&& c. clientLeft|| 0 ) , a. pageY= b. clientY+ ( f&& f. scrollTop|| c&& c. scrollTop|| 0 ) - ( f&& f. clientTop|| c&& c. clientTop|| 0 ) ) , ! a. relatedTarget&& h&& ( a. relatedTarget= h=== a. target? b. toElement: h) , a. which|| void 0 === g|| ( a. which= 1 & g? 1 : 2 & g? 3 : 4 & g? 2 : 0 ) , a} } , special : { load : { noBubble : ! 0 } , focus : { trigger : function ( ) { if ( this !== ra ( ) && this . focus) try { return this . focus ( ) , ! 1 } catch ( a) { } } , delegateType : "focusin" }
注意:
由于博客字数限制,本篇文章只展示了部分代码。本项目的完整代码及素材包关注+私信我获取
你可能感兴趣的:(web前端项目-源码自取,前端,游戏,javascript,html)
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
day15|前端框架学习和算法
universe_01
前端 算法 笔记
T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的
SpringMVC执行流程(原理),通俗易懂
国服冰
SpringMVC spring mvc
SpringMVC执行流程(原理),通俗易懂一、图解SpringMVC流程二、进一步理解Springmvc的执行流程1、导入依赖2、建立展示的视图3、web.xml4、spring配置文件springmvc-servlet5、Controller6、tomcat配置7、访问的url8、视图页面一、图解SpringMVC流程图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提
Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程
倾听铃的声
后端 spring java mvc 开发语言 分布式
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第二篇:DispatcherServlet处理请求的过程的源码解析。@pdaiSpring进阶-SpringMVC实现原理之DispatcherServlet处理请求的
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
2025年SDK游戏盾终极解析:重新定义手游安全的“隐形护甲”
上海云盾商务经理杨杨
游戏 安全
副标题:从客户端加密到AI反外挂,拆解全链路防护如何重塑游戏攻防天平引言:当传统高防在手游战场“失效”2025年全球手游市场规模突破$2000亿,黑客单次攻击成本却降至$30——某SLG游戏因协议层CC攻击单日流失37%玩家,某开放世界游戏遭低频DDoS瘫痪6小时损失千万。传统高防IP的致命短板暴露无遗:无法识别伪造客户端流量、难防协议篡改、误杀率超15%。而集成于游戏终端的SDK游戏盾,正以“源
包含日志获取webshell
陈望_ning
日志文件关闭:Apache目录下的httpd.conf文件#ErrorLog"logs/error.log"#CustomLog"logs/access.log"common加#号为注释不产生日志文件如果去掉#将会在Apache/logs/目录下产生日志文件linux:access_logerror_logwindows:access.logerror.logaccess_log每一行记录了一次网
Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)
bug菌¹
Java实战(进阶版) java Java零基础入门 Java并发 线程池 多线程篇
本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行
分支和循环(下)
tryxr
服务器 运维
写⼀个猜数字游戏游戏要求:1.电脑⾃动⽣成1~100的随机数2.玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束1.随机数生成要想完成猜数字游戏,⾸先得产⽣随机数,那怎么产⽣随机数呢?randC语⾔提供了⼀个函数叫rand,这函数是可以⽣成随机数的,函数原型如下所⽰:intrand(void);rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_
2023-07-19
桥东外甥
今天在游戏里卖了第一桶金,哈哈,不多,只有一百块。下班之余,没事在游戏里搬搬砖,一星期搞个一百块钱,少是少了点,毕竟哪怕是捡废品都比这个多,或者送外卖能更多,只不过比较简单,而且也很容易,呆在家里,玩着游戏挣两顿饭钱,总比一毛不挣的强吧?这也算是向前迈出一步吧,毕竟很少之前就有过搬砖挣钱的想法,只不过一开始没有渠道,而且也不想迈步,所以浪费了不少,一想之前浪费了几百块钱,就觉得有些心疼。哎,本来之
农场种蔬菜赚钱小游戏有哪些 五大可以赚钱的小游戏APP
氧惠帮朋友一起省
喜欢种菜吗?我特意带来农场种蔬菜赚钱小游戏排行榜2022,线上汇集了超多模拟种菜玩法,玩家可以免费种植赚钱哦!每天都有大量的种植任务,线上完成就能赚钱哦!快来下载吧!1.氧惠APP购物、看电影、点外卖、用氧惠APP!更优惠!氧惠(全网优惠上氧惠)——是与以往完全不同的抖客+淘客app!2023全新模式,我的直推也会放到你下面,送1:1超级补贴(邀请好友自购多少,你就推广得多少,非常厉害),欢迎各位
uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)
十一猫咪爱养鱼
前端组件与功能(开箱即用) uniapp常见问题解决 uniapp vue3 uniapp3小程序授权登录 微信小程序登录获取用户信息教程 获取用户昵称手机号头像信息登录 vue3版本小程序平台授权登录 uniap小程序端用户登录流程 uni完整的小程序平台登录源码
效果图在uniapp微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。uniappVue3和Vue2都能用,你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。整体思路做功能之前,先来看一下整体流程是
Selenium 特殊控件操作与 ActionChains 实践详解
小馋喵知识杂货铺
selenium 测试工具
1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个
元宇宙中的视觉技术:虚拟化身与场景生成
xcLeigh
计算机视觉CV 元宇宙 虚拟化身 场景生成 AIGC 数字孪生
元宇宙中的视觉技术:虚拟化身与场景生成前言一、元宇宙与视觉技术的深度关联1.1元宇宙概念深度剖析1.2视觉技术:元宇宙的“灵魂之窗”二、虚拟化身:数字世界的“第二自我”2.1虚拟化身技术的深度解析2.1.1核心技术构成2.1.2技术实现原理与流程2.2虚拟化身的应用领域及案例展示2.2.1游戏娱乐领域2.2.2教育培训领域三、场景生成:构建元宇宙的虚拟天地3.1场景生成技术全景透视3.1.1关键技
微信公众号回调java_处理微信公众号消息回调
weixin_39607620
微信公众号回调java
1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.
selenium特殊场景处理
Monica_ll
Selenium selenium chrome python
文章目录前言一、多窗口处理二、浏览器弹窗处理包含alert、confirm、prompt三、鼠标和键盘事件处理前言在使用selenium操作浏览器的过程中可能需要借助键盘和鼠标功能完成一些操作,或者操作弹窗处理,本文主要是整理自己工作过程中使用过的一些方法一、多窗口处理在实际测试过程中经常会有通过点击或者连接打开新的窗口,这种情况下就需要切换webDriver到对应浏览器对象才能操作新窗口的元素。
黛玉葬花是一种什么心情
爱的生命力
图片发自App小区里的花终于开了,带着孩子在小区散步的时候,无意间我注意到了玉兰,第一次我发现原来它是先开花后长叶子的,洁白如玉的花高耸入云,那种洁白,让人敬畏。因为有风,所以带孩子在楼遮挡的草坪上玩,发现紫叶李的花也开了,并且随着风的吹动,落了满地,孩子捡起一朵花,拿到我面前,细声细气的说“花”,我的大脑细胞瞬间激活,为什么不和孩子一起捡花呢!这可是一项好玩的游戏,于是我给孩子拿了一个大的挖土用
今天的彭格列依然被世界游戏吓得瑟瑟发抖呢
云染舒倦
前言有一天,有一个白兰的大魔王想要毁灭世界,创世者非常不高兴,于是,创始者用吞噬一切,包容一切的大空(泽田纲吉)、捉摸不定的雾(六道骸)、孤高的浮云(云雀恭弥)、愤怒的忠岚(狱寺隼人)、晕染一切的雨(山本武)、守护之雷(蓝波)、热血之晴(晴川了平)创造了七位拯救世界的勇士(用属性制造勇士),让他们跟白兰对抗。。。[白兰的力量是游戏,于是要打败他,只要同样在世界布置的游戏中,赢过白兰就行了~]图片发
[spring6: Mvc-网关]-源码解析
推荐阅读:[spring6:Mvc-函数式编程]-源码解析GatewayServerMvcAutoConfiguration@AutoConfiguration(after={HttpClientAutoConfiguration.class,RestTemplateAutoConfiguration.class,RestClientAutoConfiguration.class,FilterAu
人工智能应用研究快讯 2021-11-30
峰谷皆平
[HTML]ArtificialIntelligenceforSkinCancerDetection:ScopingReviewATakiddin,JSchneider,YYang,AAbd-Alrazaq...JournalofMedicalInternet...,2021ABSTACT:Background:Skincanceristhemostcommoncancertypeaffectin
Android 媒体播放开发完全指南
安卓开发者
Android Jetpack android 媒体 python
引言在当今移动应用生态中,媒体播放功能已成为许多应用的核心组成部分。无论是音乐流媒体应用、视频平台、播客客户端还是游戏应用,都需要强大的媒体播放能力。Android平台提供了丰富的API来支持各种媒体播放场景。本文将全面介绍Android媒体播放的开发技术,从基础到高级功能实现。一、Android媒体播放基础1.1支持的媒体格式Android原生支持多种媒体格式:音频:MP3、AAC、FLAC、W
基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践
Liudef06小白
特殊专栏 人工智能 AIGC 架构 人工智能 deepseek
基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践DeepSeek大模型正重塑游戏开发范式,本文将深入解析如何利用这一革命性技术构建下一代大型游戏,涵盖从架构设计到项目管理的全流程实践。目录DeepSeek游戏引擎核心架构1.1神经符号系统融合架构1.2动态世界生成引擎智能NPC与剧情系统2.1角色人格建模技术2.2动态叙事生成算法大型项目管理体系3.1敏捷-AI混合开发流
【Jupyter】个人开发常见命令
TIM老师
# Pycharm & VSCode python Jupyter
1.查看python版本importsysprint(sys.version)2.ipynb/py文件转换jupyternbconvert--topythonmy_file.ipynbipynb转换为mdjupyternbconvert--tomdmy_file.ipynbipynb转为htmljupyternbconvert--tohtmlmy_file.ipynbipython转换为pdfju
用代码生成艺术字:设计个性化海报的秘密
本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准
用 Python 开发小游戏:零基础也能做出《贪吃蛇》
本文专为零基础学习者打造,详细介绍如何用Python开发经典小游戏《贪吃蛇》。无需复杂编程知识,从环境搭建到代码编写、功能实现,逐步讲解核心逻辑与操作。涵盖Pygame库的基础运用、游戏界面设计、蛇的移动与食物生成规则等,让新手能按步骤完成开发,同时融入SEO优化要点,帮助读者轻松入门Python游戏开发,体验从0到1做出游戏的乐趣。一、为什么选择用Python开发《贪吃蛇》对于零基础学习者来说,
基于Python的AI健康助手:开发与部署全攻略
AI算力网络与通信
AI算力网络与通信原理 AI人工智能大数据架构 python 人工智能 开发语言 ai
基于Python的AI健康助手:开发与部署全攻略关键词:Python、AI健康助手、机器学习、自然语言处理、Flask、部署、健康管理摘要:本文将详细介绍如何使用Python开发一个AI健康助手,从需求分析、技术选型到核心功能实现,再到最终部署上线的完整过程。我们将使用自然语言处理技术理解用户健康咨询,通过机器学习模型提供个性化建议,并展示如何用Flask框架构建Web应用接口。文章包含大量实际代
vue element 封装表单
影子信息
vue vue.js javascript 前端
背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进
前端面试每日 3+1 —— 第39天
浪子神剑
今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss
现在玩什么手游可以赚到钱?最新的手游赚钱方法。
会飞滴鱼儿
很多人都认为。在游戏里面赚钱就只能是打怪卖装备搬砖了。其实我告诉你们,这只是游戏里面最低级的赚钱方式,又苦,又累不说,还赚不到几个钱。你可能在游戏里面见过搬砖一天赚100的,但是你绝对没见过在游戏里搬砖一天赚1000的。今天我来给大家分享一个在游戏里一天就能赚1000的另内方法。具体该怎么做呢?接下来认真听我说。其实我告诉大家,现在80%的手游都能在“游人特权站”申请代理。手游代理就是推广游戏,引
Jupyter Notebook:数据科学的“瑞士军刀”
a小胡哦
机器学习基础 人工智能 机器学习
在数据科学的世界里,JupyterNotebook是一个不可或缺的工具,它就像是数据科学家手中的“瑞士军刀”,功能强大且灵活多变。今天,就让我们一起深入了解这个神奇的工具。一、JupyterNotebook是什么?JupyterNotebook是一个开源的Web应用程序,它允许你创建和共享包含实时代码、方程、可视化和解释性文本的文档。它支持多种编程语言,其中Python是最常用的语言之一。Jupy
mongodb3.03开启认证
21jhf
mongodb
下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如下:
(百度上搜到的基本都是老版本的,看到db.addUser的就是,请忽略)
Windows下我做了一个bat文件,用来启动mongodb,命令行如下:
mongod --dbpath db\data --port 27017 --directoryperdb --logp
【Spark103】Task not serializable
bit1129
Serializable
Task not serializable是Spark开发过程最令人头疼的问题之一,这里记录下出现这个问题的两个实例,一个是自己遇到的,另一个是stackoverflow上看到。等有时间了再仔细探究出现Task not serialiazable的各种原因以及出现问题后如何快速定位问题的所在,至少目前阶段碰到此类问题,没有什么章法
1.
package spark.exampl
你所熟知的 LRU(最近最少使用)
dalan_123
java
关于LRU这个名词在很多地方或听说,或使用,接下来看下lru缓存回收的实现
1、大体的想法
a、查询出最近最晚使用的项
b、给最近的使用的项做标记
通过使用链表就可以完成这两个操作,关于最近最少使用的项只需要返回链表的尾部;标记最近使用的项,只需要将该项移除并放置到头部,那么难点就出现 你如何能够快速在链表定位对应的该项?
这时候多
Javascript 跨域
周凡杨
JavaScript jsonp 跨域 cross-domain
 
linux下安装apache服务器
g21121
apache
安装apache
下载windows版本apache,下载地址:http://httpd.apache.org/download.cgi
1.windows下安装apache
Windows下安装apache比较简单,注意选择路径和端口即可,这里就不再赘述了。 2.linux下安装apache:
下载之后上传到linux的相关目录,这里指定为/home/apach
FineReport的JS编辑框和URL地址栏语法简介
老A不折腾
finereport web报表 报表软件 语法总结
JS编辑框:
1.FineReport的js。
作为一款BS产品,browser端的JavaScript是必不可少的。
FineReport中的js是已经调用了finereport.js的。
大家知道,预览报表时,报表servlet会将cpt模板转为html,在这个html的head头部中会引入FineReport的js,这个finereport.js中包含了许多内置的fun
根据STATUS信息对MySQL进行优化
墙头上一根草
status
mysql 查看当前正在执行的操作,即正在执行的sql语句的方法为:
show processlist 命令
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一、慢查询mysql> show variab
我的spring学习笔记7-Spring的Bean配置文件给Bean定义别名
aijuans
Spring 3
本文介绍如何给Spring的Bean配置文件的Bean定义别名?
原始的
<bean id="business" class="onlyfun.caterpillar.device.Business">
<property name="writer">
<ref b
高性能mysql 之 性能剖析
annan211
性能 mysql mysql 性能剖析 剖析
1 定义性能优化
mysql服务器性能,此处定义为 响应时间。
在解释性能优化之前,先来消除一个误解,很多人认为,性能优化就是降低cpu的利用率或者减少对资源的使用。
这是一个陷阱。
资源时用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度,保持cpu忙绿,这是必要的。很多时候发现
编译进了新版本的InnoDB之后,cpu利用率上升的很厉害,这并不
主外键和索引唯一性约束
百合不是茶
索引 唯一性约束 主外键约束 联机删除
目标;第一步;创建两张表 用户表和文章表
第二步;发表文章
1,建表;
---用户表 BlogUsers
--userID唯一的
--userName
--pwd
--sex
create
线程的调度
bijian1013
java 多线程 thread 线程的调度 java多线程
1. Java提供一个线程调度程序来监控程序中启动后进入可运行状态的所有线程。线程调度程序按照线程的优先级决定应调度哪些线程来执行。
2. 多数线程的调度是抢占式的(即我想中断程序运行就中断,不需要和将被中断的程序协商)
a) 
查看日志常用命令
bijian1013
linux 命令 unix
一.日志查找方法,可以用通配符查某台主机上的所有服务器grep "关键字" /wls/applogs/custom-*/error.log
二.查看日志常用命令1.grep '关键字' error.log:在error.log中搜索'关键字'2.grep -C10 '关键字' error.log:显示关键字前后10行记录3.grep '关键字' error.l
【持久化框架MyBatis3一】MyBatis版HelloWorld
bit1129
helloworld
MyBatis这个系列的文章,主要参考《Java Persistence with MyBatis 3》。
样例数据
本文以MySQL数据库为例,建立一个STUDENTS表,插入两条数据,然后进行单表的增删改查
CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
【Hadoop十五】Hadoop Counter
bit1129
hadoop
1. 只有Map任务的Map Reduce Job
File System Counters
FILE: Number of bytes read=3629530
FILE: Number of bytes written=98312
FILE: Number of read operations=0
FILE: Number of lar
解决Tomcat数据连接池无法释放
ronin47
tomcat 连接池 优化
近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上 有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会 再次出现无法登录的情况。
今天上午,开发人员小毛又找到我,要我协助将这个问题根治一下,拖太久用户难保不投诉。
简单分析了一
java-75-二叉树两结点的最低共同父结点
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import ljn.help.*;
public class BTreeLowestParentOfTwoNodes {
public static void main(String[] args) {
/*
* node data is stored in
行业垂直搜索引擎网页抓取项目
carlwu
Lucene Nutch Heritrix Solr
公司有一个搜索引擎项目,希望各路高人有空来帮忙指导,谢谢!
这是详细需求:
(1) 通过提供的网站地址(大概100-200个网站),网页抓取程序能不断抓取网页和其它类型的文件(如Excel、PDF、Word、ppt及zip类型),并且程序能够根据事先提供的规则,过滤掉不相干的下载内容。
(2) 程序能够搜索这些抓取的内容,并能对这些抓取文件按照油田名进行分类,然后放到服务器不同的目录中。
[通讯与服务]在总带宽资源没有大幅增加之前,不适宜大幅度降低资费
comsci
资源
降低通讯服务资费,就意味着有更多的用户进入,就意味着通讯服务提供商要接待和服务更多的用户,在总体运维成本没有由于技术升级而大幅下降的情况下,这种降低资费的行为将导致每个用户的平均带宽不断下降,而享受到的服务质量也在下降,这对用户和服务商都是不利的。。。。。。。。
&nbs
Java时区转换及时间格式
Cwind
java
本文介绍Java API 中 Date, Calendar, TimeZone和DateFormat的使用,以及不同时区时间相互转化的方法和原理。
问题描述:
向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于东八区(北京时间,GMT+8:00),而身处东四区的用户想要查询当天的销售记录。则需把东四区的“今天”这个时间范围转换为服务器所在时区的时间范围。
readonly,只读,不可用
dashuaifu
js jsp disable readOnly readOnly
readOnly 和 readonly 不同,在做js开发时一定要注意函数大小写和jsp黄线的警告!!!我就经历过这么一件事:
使用readOnly在某些浏览器或同一浏览器不同版本有的可以实现“只读”功能,有的就不行,而且函数readOnly有黄线警告!!!就这样被折磨了不短时间!!!(期间使用过disable函数,但是发现disable函数之后后台接收不到前台的的数据!!!)
LABjs、RequireJS、SeaJS 介绍
dcj3sjt126com
js Web
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更
[应用结构]入口脚本
dcj3sjt126com
PHP yii2
入口脚本
入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。终端用户的请求通过入口脚本实例化应用并将将请求转发到应用。
Web 应用的入口脚本必须放在终端用户能够访问的目录下,通常命名为 index.php,也可以使用 Web 服务器能定位到的其他名称。
控制台应用的入口脚本一般在应用根目录下命名为 yii(后缀为.php),该文
haoop shell命令
eksliang
hadoop hadoop shell
cat
chgrp
chmod
chown
copyFromLocal
copyToLocal
cp
du
dus
expunge
get
getmerge
ls
lsr
mkdir
movefromLocal
mv
put
rm
rmr
setrep
stat
tail
test
text
MultiStateView不同的状态下显示不同的界面
gundumw100
android
只要将指定的view放在该控件里面,可以该view在不同的状态下显示不同的界面,这对ListView很有用,比如加载界面,空白界面,错误界面。而且这些见面由你指定布局,非常灵活。
PS:ListView虽然可以设置一个EmptyView,但使用起来不方便,不灵活,有点累赘。
<com.kennyc.view.MultiStateView xmlns:android=&qu
jQuery实现页面内锚点平滑跳转
ini
JavaScript html jquery html5 css
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/37.htmHTML文件代码:
&
kafka offset迁移
kane_xie
kafka
在早前的kafka版本中(0.8.0),offset是被存储在zookeeper中的。
到当前版本(0.8.2)为止,kafka同时支持offset存储在zookeeper和offset manager(broker)中。
从官方的说明来看,未来offset的zookeeper存储将会被弃用。因此现有的基于kafka的项目如果今后计划保持更新的话,可以考虑在合适
android > 搭建 cordova 环境
mft8899
android
1 , 安装 node.js
http://nodejs.org
node -v 查看版本
2, 安装 npm
可以先从 https://github.com/isaacs/npm/tags 下载 源码 解压到
java封装的比较器,比较是否全相同,获取不同字段名字
qifeifei
非常实用的java比较器,贴上代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
i
记录一些函数用法
.Aky.
位运算 PHP 数据库 函数 IP
高手们照旧忽略。
想弄个全天朝IP段数据库,找了个今天最新更新的国内所有运营商IP段,copy到文件,用文件函数,字符串函数把玩下。分割出startIp和endIp这样格式写入.txt文件,直接用phpmyadmin导入.csv文件的形式导入。(生命在于折腾,也许你们觉得我傻X,直接下载人家弄好的导入不就可以,做自己的菜鸟,让别人去说吧)
当然用到了ip2long()函数把字符串转为整型数
sublime text 3 rust
wudixiaotie
Sublime Text
1.sublime text 3 => install package => Rust
2.cd ~/.config/sublime-text-3/Packages
3.mkdir rust
4.git clone https://github.com/sp0/rust-style
5.cd rust-style
6.cargo build --release
7.ctrl