金山打字
【金山打字】这是一个练习打字的游戏,当游戏开始后,界面从顶部不断落下内容为随机字母的方块,当按下相对应的按键时,就会清除对应方块。游戏难度会随着落下的速度加快而提高。玩家每次成功清除字母方块,都会获得一定的分数。
运行效果:
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)
SpringBoot常用技术集成
陌殇殇
spring boot java
SpringBoot中常用技术集成文章目录SpringBoot中常用技术集成1.@ConfigurationProperties2.集成Mybatis-Plus3.Web组件的使用1.注解方式2.配置类注册1.Servlet2.过滤器3.拦截器4.集成Redis5.集成RabbitMQ6.LogBack日志7.Swegger2集成8.阿里云OSS对象存储9.HttpClient10.Task定时任
django
唱歌的人不掉泪
字写笔记 django python
1、WEB与服务器1.WEB表示用户可以浏览的网页内容(HTML,CSS,JS)2.服务器能够给用户提供服务的机器1.硬件与软件硬件范畴:一台机器软件范畴:一个能够接收用户请求并给出响应的程序APACHETOMCATIISNginx2.作用存储web所需要的信息(HTML,图片,文件,…)能够处理用户的请求(request),并给出响应(response)执行服务器端程序:数据库操作3.WEB与服
html文件插入到ppt中,怎么把视频嵌入到ppt里
野蛮人柯南
html文件插入到ppt中
ppt是我们常用的一款办公软件,它能够给我们呈现更好的视觉体验,不仅能够更直观的介绍需要展现的知识点,又能够突出个性化的设计风格。现在随着大家的创新思维越来越扩张,我们在制作ppt时并不再局限于图片、艺术字和音频了,越来越多的人开始在ppt中加入网络视频,接下来就为打击来介绍一下如何在ppt中加入网络视频吧。方法一:该方法较简单,但是在具体播放的时候,操控性不强,首先打开ppt进入编辑页面。之后单
重定向和渲染的区别。
old_man31
python django
defnew_topic(request):#如果提交方法不是post则显示表单ifrequest.method!='POST':returnrender(request,'new_topic.html')else:text=request.POST.get('text')ifall((text)):try:#凡是可能存在没有数据的地方,需要用try或者if,把可能出现的问题更改下。Topic.o
Django下 render与redirect的区别
energy_百分百
django django python html render redircet
render返回页面内容(渲染变量到模板中),并且没有发送第二次请求redirect发送了第二次请求,是个跳转函数,一般跳转到外部网站,而且会返回302的状态码此外:render参数一般为模板html文件redirect参数一般为URL地址
井字棋(三字棋)游戏#C语言
Eternallassmpsit
游戏 c语言 算法
#include"stdio.h"#include"stdlib.h"#include"time.h"#defineROW3#defineCOL3//如果满了返回一intIsFull(charboard[ROW][COL],introw,intcol){inti=0;intj=0;for(i=0;i=1&&x=1&&y");scanf("%d",&input);switch(input){case
Vue - 自定义Hooks
来一碗刘肉面
Vue vue.js javascript 前端
在Vue3中,自定义Hooks是一个强大的功能,允许开发者封装和重用逻辑。在Vue中它们通常通过组合式API实现。通过自定义Hooks,可以将复杂的逻辑封装在一个函数中,便于在多个组件之间共享。自定义Hooks是一个普通的JavaScript函数/TypeScript函数(js或ts),通常以use开头,并且它会使用Vue的响应式API,如ref、reactive、computed、watch等。
Vue - route路由(router-link、useRoute、useRouter)
来一碗刘肉面
Vue vue.js javascript 前端
为了避免反复在app.vue中去修改引入的路径,当用了新的页面,想切换回老页面的时候,都需要去手动改变路径,那么有没有一种可能,可以在一个地方,把这些组件配置好,然后通过不同的路径,就去访问不同的组件呢?vuerouter就提供了这个功能,翻译一下,router:路由,vuerouter,vue的路由。单页面应用:SPASPA的核心思想是将应用划分为多个组件,通过前端路由来控制不同组件的显示,实现
Python 条件判断:全面掌握 if、else、elif 语句的用法
敲代码不忘补水
一起学 Python python 开发语言
Python条件判断:全面掌握if、else、elif语句的用法文章目录Python条件判断:全面掌握if、else、elif语句的用法一if如果二if-else如果否则三判断条件四文字之间的判断五andornot判断六if-elif-else七完整代码示例八源码地址在Python编程中,条件判断语句是控制程序执行流程的重要工具。本文将带你深入了解Python中的if、if-else、和if-el
Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍
是Dream呀
Python python 神经网络 网络
前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新
2025 年使用 Python 对招聘信息进行网络抓取的终极指南
Smartdaili China
python php 开发语言 抓取 爬虫 代理 beautifulsoup
文章目录前言一、如何用Python在5个步骤中搜索招聘信息二、开始使用Python进行网络抓取三、用Python编写第一个网络抓取脚本1.了解网页结构四、编写用于web抓取的基本Python脚本1.先进的方法五、使用Python进行网页抓取的常见挑战1.处理分页和动态内容2.处理验证码和登录表单六、下一步:掌握Python的网页抓取前言你知道吗,有成千上万的招聘信息散布在不同的网站和平台上,让人几
深入浅出之xml文件解析(python)
浩瀚之水_csdn
# Python学习 xml python 数据库
XML(eXtensibleMarkupLanguage,可扩展标记语言)是一种用于存储和传输数据的标记语言。与HTML相似,XML也使用标签(tags)来定义数据,但XML的标签不是预定义的,而是由用户根据需要自定义的。这使得XML成为一种非常灵活和强大的数据表示方式。一、XML的特点自描述性:XML文档中的每个元素都通过标签来描述,这使得数据易于理解和使用。结构化:XML提供了一种结构化的方式
优化冗余代码:提升前端项目开发效率的实用方法
三掌柜666
web前端知识汇总 前端
目录前言代码复用与组件化模块化开发与代码分割工具辅助与自动化结束语前言在前端开发中,我们常常会遇到代码冗余的问题,这不仅增加了代码量,还影响了项目的可维护性和开发效率。还有就是有时候会接到紧急业务需求,要求立马完成上线,这时候多人协作开发,代码质量不会很高,很多都是复制粘贴;亦或是接手的代码比较老旧,公共组件里面写了大量冗余代码,这种情况下时间越久,开发起来就越难受。那么本文将结合实际项目案例,分
Spring Boot 基础开发:实现 RESTful API 开发
YY...yy
SpringBoot框架学习 spring boot restful 后端
前言在现代Web开发中,RESTfulAPI已经成为前后端分离架构的核心。SpringBoot提供了强大的支持,使得RESTfulAPI的开发变得高效且简洁。本文将从以下几个方面详细讲解如何在SpringBoot中实现RESTfulAPI开发:@RestController设计API:简化Controller的编写HTTP状态码与响应封装:了解常见状态码及其使用场景Swagger3集成:生成接口文
Cesium ArcGisMapServerImageryProvider API 介绍
WebGISer_白茶乌龙桃
Cesium关键API学习 javascript 开发语言 ecmascript
作为一名GIS研究生,WebGIS技术无疑是我们必学的核心之一。说到WebGIS,要提的就是Cesium——这个让3D地球可视化变得简单又强大的工具。为了帮助大家更好地理解和使用Cesium,我决定把我自己在学习Cesium文档过程中的一些心得和收获分享给大家。大家一起交流,一起进步!在Cesium中,ArcGisMapServerImageryProvider是一个非常有用的API,它允许开发者
【zookeeper】zookeeper 性能优化与配置详解 一些踩坑建议
九师兄
不体系 zookeeper 性能优化 服务器
1.概述转载:https://www.cnblogs.com/EasonJim/p/7488834.htmlZooKeeper的功能特性通过ZooKeeper配置文件来进行控制管理(zoo.cfg配置文件)。ZooKeeper这样的设计其实是有它自身的原因的。通过前面对ZooKeeper的配置可以看出,对ZooKeeper集群进行配置的时候,它的配置文档是完全相同的(对于集群伪分布模式来说,只有很
前端学习-事件解绑,mouseover和mouseenter的区别(二十九)
marshalVS
前端 学习
目录前言解绑事件语法鼠标经过事件的区别鼠标经过事件示例代码两种注册事件的区别总结前言人道洛阳花似锦,偏我来时不逢春解绑事件on事件方式,直接使用null覆盖就可以实现事件的解绑语法btn.onclick=function(){alert('点击了')}btn.onclick=null;constben=document.querySelector('button');ben.addEventLis
java web + mysql 实现图书管理系统
鱼弦
【练习两年半】程序基础 【HOT】技术热谈 mysql 数据库
鱼弦:CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)要使用JavaWeb和MySQL实现图书管理系统,你可以按照以下步骤进行操作:数据库设计:创建一个MySQL数据库,并命名为图书管理系统。设计数据库表,例如:图书表(Book)、用户表(User)等。
毕设开源 python大数据旅游数据分析可视化系统(源码分享)
bee_dc
毕业设计 毕设 大数据
文章目录0前言1课题背景2数据处理3数据可视化工具3.1django框架介绍3.2ECharts4Django使用echarts进行可视化展示(mysql数据库)4.1修改setting.py连接mysql数据库4.2导入数据4.3使用echarts可视化展示5实现效果5.1前端展示5.2后端展示6最后0前言这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到
分享求职时遇到的一道面试题
C7211BA
面试 CV 机器学习 深度学习 项目
测试题如下:百度的旋转认证码识别注意,完成后qq远程或者微信视频或者向日葵远程看结果一、准备:看看下面测试网址是否能正常打开https://wappass.baidu.com/static/captcha/tuxing.html?&logid=11395969898338055067&ak=248b24c134a6b4f52ee85f8b9577d4a8&backurl=https%3A%2F%2
玄机靶场--第一章 应急响应-webshell查杀
Clockwiseee
学习 安全 web安全 靶场 应急响应 webshell查杀
文章目录第一章应急响应-webshell查杀1.黑客webshell里面的flagflag{xxxxx-xxxx-xxxx-xxxx-xxxx}2.黑客使用的什么工具的shellgithub地址的md5flag{md5}3.黑客隐藏shell的完整路径的md5flag{md5}注:/xxx/xxx/xxx/xxx/xxx.xxx4.黑客免杀马完整路径md5flag{md5}利用工具查杀第一章应急响
【C/C++】开关灯游戏 蓝桥杯/ACM备考
奇变偶不变0727
c语言 c++ 游戏
本题考点预览:【算法:模拟】状态压缩与枚举利用整数的二进制表示对灯的点击状态进行压缩和枚举。矩阵操作与模拟按下按钮后,矩阵中对应灯的状态发生变化,涉及邻接元素的修改。递归思想简化操作每一行的灯状态由上一行的按钮点击状态决定。边界条件处理特别注意矩阵边界灯的翻转,不越界。拷贝与回溯使用memcpy保持初始状态不变,便于尝试不同方案。题目描述5行6列按钮组成的矩阵,每个按钮下面有一盏灯。当按下一个按钮
Java中的API设计与版本管理:RESTful API的最佳实践
省赚客app开发者
java restful 开发语言
Java中的API设计与版本管理:RESTfulAPI的最佳实践大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代软件开发中,API(应用程序接口)设计与版本管理是至关重要的。RESTfulAPI由于其简洁性和可扩展性,已经成为了最流行的Web服务架构风格。本文将探讨Java中如何设计和管理RESTfulAPI,提供最佳实践和实用的技术方案。1.RESTfulAP
ecmascript标准
周盛欢
ecmascript
一、什么是ECMAScriptECMAScript是一种脚本语言的标准,由EcmaInternational组织制定。简单来说,它就是JavaScript的“官方规范”,规定了JavaScript语言的语法和行为。就像英语有语法一样,JavaScript也有自己的“语法书”,而ECMAScript就是这本“语法书”。二、为什么需要ECMAScript以前,不同的浏览器(比如Chrome、Firef
2025蛇年喜庆HTML5代码
学习&实践爱好者
HTML5与CSS3 JavaScrip技术 编程实践系列 html5 前端 html
2025蛇年喜庆HTML5代码以下是一个简单的HTML5+CSS+JavaScript代码示例,用于庆祝2025年蛇年。先看效果图:源码如下:2025年蛇年快乐!body{font-family:'Arial',sans-serif;background-color:#0a0a23;/*深蓝色背景*/color:#ffffff;/*白色文字*/text-align:center;margin:0;
2025年蛇年新版运势系统源码
网友阿贵
源码 phpstorm vscode php vue html css3
八字精批、事业财运、姓名分析、宝宝起名、公司测名、姓名配对、综合详批、姻缘测算、生肖运势、PC版测算、八字合婚、紫微斗数、流年运程、月老姻缘、许愿祈福、号码解析、塔罗运势、脱单占卜、感情继续、脱单占卜、塔罗爱情、心理有你、能否复合、暗恋对象、是否分手、爱着别人、大师服务(包含多项功能)共计30余项功能,全网功能全,完善的版本。演示图:新版运势测算源码:下载此处内容作者设置了回复可见原文链接:202
Unity中关于游戏制作的代码架构书写
我叫_小Z
unity unity3d c#
本代码架构一个由四篇代码组成,用于单机小游戏的开发首先是Message脚本用于消息的存放,代码如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassMessage{//类型publicbyteType;//命令publicintCommand;//参数publicobjectCo
Python正则表达式指南
weixin_33755554
python
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html1.正则表达式基础1.1.简单介绍正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不
数独是一种逻辑填字游戏,目标是在9×9网格中填充数字,使得每一行、每一列以及每一个3×3子网格都包含1到9之间的所有数字
Bol5261
Storage Matrix(is the environment) Data structure tree(structure) java 服务器 linux
判断一个数独题目是否有唯一解,可以通过以下步骤进行:基本规则检查:首先确保数独题目符合基本的数独规则,即每行、每列和每个3x3的子方格中都包含1到9的数字且不重复。递归搜索法:使用递归搜索法(也称为回溯法)尝试填充数独。从空单元格开始,尝试填入可能的数字,如果发现某个数字导致后续无法继续填充,则回溯并尝试其他数字。唯一性验证:在递归搜索的过程中,如果发现有多个不同的填充方式都能满足数独的规则,说明
java 字符串日期字段格式化前端显示
qq_36608622
java 开发语言
在Java应用程序中,如果你有一个字符串类型的日期字段,并希望将其格式化后显示在前端,可以通过多种方式实现。这通常涉及到在后端将字符串转换为Date或LocalDateTime等对象,然后使用适当的注解或配置来确保它们以正确的格式序列化为JSON发送到前端。以下是几种常见方法:方法一:使用@JsonFormat注解(Jackson)如果你使用的是Jackson来处理JSON序列化和反序列化,可以在
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