Last active
January 3, 2023 12:34
-
-
Save therealbenpai/76c07830e9cba9316290eed95d6a9887 to your computer and use it in GitHub Desktop.
Ad-free Minesweeper
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html lang="en"> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="google" content="notranslate"> | |
<meta http-equiv="Content-Language" content="en"> | |
<title>Minesweeper Offline - Play Free Offline Minesweeper that can be played on any PC</title> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, user-scalable=yes"> | |
<meta name="description" | |
content="Free Offline Minesweeper in JavaScript. Play the classic game in Beginner, Intermediate, and Expert modes."> | |
<!-- Page Stylesheets --> | |
<style> | |
/* Vars */ | |
:root { | |
--hex0: #000; | |
--hex1: #111; | |
--hex2: #222; | |
--hex3: #333; | |
--hex4: #444; | |
--hex5: #555; | |
--hex6: #666; | |
--hex7: #777; | |
--hex8: #888; | |
--hex9: #999; | |
--hexa: #aaa; | |
--hexb: #bbb; | |
--hexc: #ccc; | |
--hexd: #ddd; | |
--hexe: #eee; | |
--hexf: #fff; | |
--ani1: top .3s, left .3s, width .3s, height .3s, opacity .3s; | |
} | |
html { | |
height: 95% | |
} | |
body { | |
margin-left: 0; | |
margin-top: 15px; | |
font-family: arial; | |
font-size: 12px; | |
height: 100% | |
} | |
.night-mode { | |
background-color: black; | |
color: var(--hex8); | |
} | |
label { | |
display: inline-block; | |
margin-bottom: 3px | |
} | |
.outer-container { | |
vertical-align: top; | |
text-align: left; | |
text-align: center | |
} | |
.inner-container { | |
display: inline-block; | |
text-align: left | |
} | |
.left-column, | |
#center-column, | |
.right-column { | |
float: left; | |
} | |
.left-column { | |
margin-right: 10px | |
} | |
.left-column, | |
.right-column { | |
width: 160px | |
} | |
#game-container { | |
position: relative; | |
margin-right: 20px | |
} | |
#options-link, | |
#display-link, | |
#controls-link, | |
#import-link, | |
#export-link { | |
color: blue; | |
text-decoration: underline; | |
cursor: pointer | |
} | |
.night-mode #options-link, | |
.night-mode #display-link, | |
.night-mode #controls-link, | |
.night-mode #import-link, | |
.night-mode #export-link, | |
.night-mode a { | |
color: #069 | |
} | |
#game { | |
background-color: silver | |
} | |
.night-mode #game { | |
background-color: #7e7e7e | |
} | |
.dialog { | |
background-color: var(--hexe); | |
border: 1px solid var(--hex4); | |
position: absolute; | |
display: none; | |
z-index: 1; | |
} | |
.night-mode .dialog { | |
background-color: var(--hexb); | |
color: var(--hex4); | |
} | |
.dialog-title { | |
color: white; | |
font-weight: bold; | |
background-color: #06f; | |
} | |
.night-mode .dialog-title { | |
color: var(--hexa); | |
background-color: #184292; | |
} | |
.dialog-bar { | |
background-color: var(--hexd) | |
} | |
.night-mode .dialog-bar { | |
background-color: var(--hexa) | |
} | |
#controls ul { | |
padding: 0 0 0 12px; | |
margin: 0 | |
} | |
#controls li { | |
margin-bottom: 2px | |
} | |
.dialog-close { | |
color: white; | |
text-decoration: none; | |
font-weight: bold; | |
font-size: 20px; | |
line-height: 15px; | |
cursor: pointer | |
} | |
.night-mode .dialog-close { | |
color: var(--hexa) | |
} | |
.dialog-text-input { | |
width: 30px; | |
font-size: 12px | |
} | |
.dialog td { | |
padding: 3px; | |
white-space: nowrap | |
} | |
.dialog input[type="checkbox"], | |
.dialog input[type="radio"] { | |
margin: 0 3px 0 0; | |
vertical-align: top; | |
padding: 0 | |
} | |
#game div { | |
float: left; | |
line-height: 0; | |
font-size: 0 | |
} | |
.flag-animation { | |
position: absolute; | |
pointer-events: none; | |
transition: var(--ani1); | |
-webkit-transition: var(--ani1); | |
-moz-transition: var(--ani1); | |
-ms-transition: var(--ani1) | |
} | |
.z100 #game div { | |
background-image: url('data:image/png;base64,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') | |
} | |
.night-mode .z100 #game div { | |
background-image: url('data:image/png;base64,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') | |
} | |
.z100 .time0 { | |
background-position: 0 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time1 { | |
background-position: -13px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time2 { | |
background-position: -26px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time3 { | |
background-position: -39px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time4 { | |
background-position: -52px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time5 { | |
background-position: -65px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time6 { | |
background-position: -78px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time7 { | |
background-position: -91px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time8 { | |
background-position: -104px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time9 { | |
background-position: -117px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .time- { | |
background-position: -130px 0; | |
width: 13px; | |
height: 23px | |
} | |
.z100 .open0 { | |
background-position: 0 -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open1 { | |
background-position: -16px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open2 { | |
background-position: -32px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open3 { | |
background-position: -48px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open4 { | |
background-position: -64px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open5 { | |
background-position: -80px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open6 { | |
background-position: -96px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open7 { | |
background-position: -112px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .open8 { | |
background-position: -128px -23px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .blank { | |
background-position: 0 -39px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .bombflagged { | |
background-position: -16px -39px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .bombdeath { | |
background-position: -32px -39px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .bombmisflagged { | |
background-position: -48px -39px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .bombrevealed { | |
background-position: -64px -39px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .question { | |
background-position: -80px -39px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .questionpressed { | |
background-position: -96px -39px; | |
width: 16px; | |
height: 16px | |
} | |
.z100 .facesmile { | |
background-position: 0 -55px; | |
width: 26px; | |
height: 26px | |
} | |
.z100 .facepressed { | |
background-position: -26px -55px; | |
width: 26px; | |
height: 26px | |
} | |
.z100 .faceooh { | |
background-position: -52px -55px; | |
width: 26px; | |
height: 26px | |
} | |
.z100 .facedead { | |
background-position: -78px -55px; | |
width: 26px; | |
height: 26px | |
} | |
.z100 .facewin { | |
background-position: -104px -55px; | |
width: 26px; | |
height: 26px | |
} | |
.z100 .bordertl { | |
background-position: 0 -81px; | |
width: 10px; | |
height: 10px | |
} | |
.z100 .bordertr { | |
background-position: -10px -81px; | |
width: 10px; | |
height: 10px | |
} | |
.z100 .borderbl { | |
background-position: -20px -81px; | |
width: 10px; | |
height: 10px | |
} | |
.z100 .borderbr { | |
background-position: -30px -81px; | |
width: 10px; | |
height: 10px | |
} | |
.z100 .bordertb { | |
background-position: -40px -81px; | |
width: 16px; | |
height: 10px | |
} | |
.z100 .borderjointl { | |
background-position: -56px -81px; | |
width: 10px; | |
height: 10px | |
} | |
.z100 .borderjointr { | |
background-position: -66px -81px; | |
width: 10px; | |
height: 10px | |
} | |
.z100 .borderlr { | |
background-position: -134px -39px; | |
width: 10px; | |
height: 16px | |
} | |
.z100 .borderlrlong { | |
background-position: -134px -39px; | |
width: 10px; | |
height: 32px | |
} | |
.z100 #mines_hundreds { | |
margin: 4px 0 5px 6px | |
} | |
.z100 #mines_tens { | |
margin: 4px 0 5px 0 | |
} | |
.z100 #mines_ones { | |
margin: 4px 0 5px 0 | |
} | |
.z100 #seconds_hundreds { | |
margin: 4px 0 5px 0 | |
} | |
.z100 #seconds_tens { | |
margin: 4px 0 5px 0 | |
} | |
.z100 #seconds_ones { | |
margin: 4px 6px 5px 0 | |
} | |
.z100 #face { | |
margin-top: 3px; | |
margin-bottom: 3px | |
} | |
.z100 .dialog { | |
left: 16px; | |
top: 74px | |
} | |
.z150 #game div { | |
background-image: url('data:image/png;base64,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') | |
} | |
.night-mode .z150 #game div { | |
background-image: url('data:image/png;base64,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'); | |
} | |
.z150 .time0 { | |
background-position: 0 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time1 { | |
background-position: -20px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time2 { | |
background-position: -39px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time3 { | |
background-position: -59px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time4 { | |
background-position: -78px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time5 { | |
background-position: -98px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time6 { | |
background-position: -117px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time7 { | |
background-position: -137px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time8 { | |
background-position: -156px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time9 { | |
background-position: -176px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .time- { | |
background-position: -195px 0; | |
width: 20px; | |
height: 35px | |
} | |
.z150 .open0 { | |
background-position: 0 -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open1 { | |
background-position: -24px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open2 { | |
background-position: -48px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open3 { | |
background-position: -72px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open4 { | |
background-position: -96px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open5 { | |
background-position: -120px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open6 { | |
background-position: -144px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open7 { | |
background-position: -168px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .open8 { | |
background-position: -192px -35px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .blank { | |
background-position: 0 -59px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .bombflagged { | |
background-position: -24px -59px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .bombdeath { | |
background-position: -48px -59px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .bombmisflagged { | |
background-position: -72px -59px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .bombrevealed { | |
background-position: -96px -59px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .question { | |
background-position: -120px -59px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .questionpressed { | |
background-position: -144px -59px; | |
width: 24px; | |
height: 24px | |
} | |
.z150 .facesmile { | |
background-position: 0 -83px; | |
width: 39px; | |
height: 39px | |
} | |
.z150 .facepressed { | |
background-position: -39px -83px; | |
width: 39px; | |
height: 39px | |
} | |
.z150 .faceooh { | |
background-position: -78px -83px; | |
width: 39px; | |
height: 39px | |
} | |
.z150 .facedead { | |
background-position: -117px -83px; | |
width: 39px; | |
height: 39px | |
} | |
.z150 .facewin { | |
background-position: -156px -83px; | |
width: 39px; | |
height: 39px | |
} | |
.z150 .bordertl { | |
background-position: 0 -122px; | |
width: 15px; | |
height: 15px | |
} | |
.z150 .bordertr { | |
background-position: -15px -122px; | |
width: 15px; | |
height: 15px | |
} | |
.z150 .borderbl { | |
background-position: -30px -122px; | |
width: 15px; | |
height: 15px | |
} | |
.z150 .borderbr { | |
background-position: -45px -122px; | |
width: 15px; | |
height: 15px | |
} | |
.z150 .bordertb { | |
background-position: -60px -122px; | |
width: 24px; | |
height: 15px | |
} | |
.z150 .borderjointl { | |
background-position: -84px -122px; | |
width: 15px; | |
height: 15px | |
} | |
.z150 .borderjointr { | |
background-position: -99px -122px; | |
width: 15px; | |
height: 15px | |
} | |
.z150 .borderlr { | |
background-position: -201px -59px; | |
width: 15px; | |
height: 24px | |
} | |
.z150 .borderlrlong { | |
background-position: -201px -59px; | |
width: 15px; | |
height: 48px | |
} | |
.z150 #mines_hundreds { | |
margin: 6px 0 7px 9px | |
} | |
.z150 #mines_tens { | |
margin: 6px 0 7px 0 | |
} | |
.z150 #mines_ones { | |
margin: 6px 0 7px 0 | |
} | |
.z150 #seconds_hundreds { | |
margin: 6px 0 7px 0 | |
} | |
.z150 #seconds_tens { | |
margin: 6px 0 7px 0 | |
} | |
.z150 #seconds_ones { | |
margin: 6px 9px 7px 0 | |
} | |
.z150 #face { | |
margin-top: 4px; | |
margin-bottom: 5px | |
} | |
.z150 .dialog { | |
left: 24px; | |
top: 102px | |
} | |
.z200 #game div { | |
background-image: url('data:image/png;base64,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') | |
} | |
.night-mode .z200 #game div { | |
background-image: url('data:image/png;base64,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') | |
} | |
.z200 .time0 { | |
background-position: 0 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time1 { | |
background-position: -26px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time2 { | |
background-position: -52px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time3 { | |
background-position: -78px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time4 { | |
background-position: -104px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time5 { | |
background-position: -130px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time6 { | |
background-position: -156px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time7 { | |
background-position: -182px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time8 { | |
background-position: -208px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time9 { | |
background-position: -234px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .time- { | |
background-position: -260px 0; | |
width: 26px; | |
height: 46px | |
} | |
.z200 .open0 { | |
background-position: 0 -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open1 { | |
background-position: -32px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open2 { | |
background-position: -64px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open3 { | |
background-position: -96px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open4 { | |
background-position: -128px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open5 { | |
background-position: -160px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open6 { | |
background-position: -192px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open7 { | |
background-position: -224px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .open8 { | |
background-position: -256px -46px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .blank { | |
background-position: 0 -78px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .bombflagged { | |
background-position: -32px -78px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .bombdeath { | |
background-position: -64px -78px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .bombmisflagged { | |
background-position: -96px -78px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .bombrevealed { | |
background-position: -128px -78px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .question { | |
background-position: -160px -78px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .questionpressed { | |
background-position: -192px -78px; | |
width: 32px; | |
height: 32px | |
} | |
.z200 .facesmile { | |
background-position: 0 -110px; | |
width: 52px; | |
height: 52px | |
} | |
.z200 .facepressed { | |
background-position: -52px -110px; | |
width: 52px; | |
height: 52px | |
} | |
.z200 .faceooh { | |
background-position: -104px -110px; | |
width: 52px; | |
height: 52px | |
} | |
.z200 .facedead { | |
background-position: -156px -110px; | |
width: 52px; | |
height: 52px | |
} | |
.z200 .facewin { | |
background-position: -208px -110px; | |
width: 52px; | |
height: 52px | |
} | |
.z200 .bordertl { | |
background-position: 0 -162px; | |
width: 20px; | |
height: 20px | |
} | |
.z200 .bordertr { | |
background-position: -20px -162px; | |
width: 20px; | |
height: 20px | |
} | |
.z200 .borderbl { | |
background-position: -40px -162px; | |
width: 20px; | |
height: 20px | |
} | |
.z200 .borderbr { | |
background-position: -60px -162px; | |
width: 20px; | |
height: 20px | |
} | |
.z200 .bordertb { | |
background-position: -80px -162px; | |
width: 32px; | |
height: 20px | |
} | |
.z200 .borderjointl { | |
background-position: -112px -162px; | |
width: 20px; | |
height: 20px | |
} | |
.z200 .borderjointr { | |
background-position: -132px -162px; | |
width: 20px; | |
height: 20px | |
} | |
.z200 .borderlr { | |
background-position: -268px -78px; | |
width: 20px; | |
height: 32px | |
} | |
.z200 .borderlrlong { | |
background-position: -268px -78px; | |
width: 20px; | |
height: 64px | |
} | |
.z200 #mines_hundreds { | |
margin: 8px 0 10px 12px | |
} | |
.z200 #mines_tens { | |
margin: 8px 0 10px 0 | |
} | |
.z200 #mines_ones { | |
margin: 8px 0 10px 0 | |
} | |
.z200 #seconds_hundreds { | |
margin: 8px 0 10px 0 | |
} | |
.z200 #seconds_tens { | |
margin: 8px 0 10px 0 | |
} | |
.z200 #seconds_ones { | |
margin: 8px 12px 10px 0 | |
} | |
.z200 #face { | |
margin-top: 6px; | |
margin-bottom: 6px | |
} | |
.z200 .dialog { | |
left: 30px; | |
top: 130px | |
} | |
notice { | |
display: none; | |
} | |
@media only screen and (max-width:820px) { | |
body>* { | |
display: none; | |
} | |
notice { | |
display: initial; | |
position: absolute; | |
top: 50%; | |
left: 50%; | |
transform: translate(-50%, -50%); | |
color: white; | |
text-decoration: underline; | |
font-weight: bolder; | |
font-family: 'Comic Sans MS'; | |
font-size: 24px; | |
} | |
} | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
/* #f00 */ | |
</style> | |
<!-- jQuery Code **DO NOT TOUCH** --> | |
<script> | |
(function (e, t) { | |
function _(e) { | |
var t = M[e] = {}; | |
return v.each(e.split(y), function (e, n) { | |
t[n] = !0 | |
}), t | |
} | |
function H(e, n, r) { | |
if (r === t && e.nodeType === 1) { | |
var i = "data-" + n.replace(P, "-$1").toLowerCase(); | |
r = e.getAttribute(i); | |
if (typeof r == "string") { | |
try { | |
r = r === "true" ? !0 : r === "false" ? !1 : r === "null" ? null : +r + "" === r ? +r : D.test(r) ? v.parseJSON(r) : r | |
} catch (s) { } | |
v.data(e, n, r) | |
} else r = t | |
} | |
return r | |
} | |
function B(e) { | |
var t; | |
for (t in e) { | |
if (t === "data" && v.isEmptyObject(e[t])) continue; | |
if (t !== "toJSON") return !1 | |
} | |
return !0 | |
} | |
function et() { | |
return !1 | |
} | |
function tt() { | |
return !0 | |
} | |
function ut(e) { | |
return !e || !e.parentNode || e.parentNode.nodeType === 11 | |
} | |
function at(e, t) { | |
do e = e[t]; while (e && e.nodeType !== 1); | |
return e | |
} | |
function ft(e, t, n) { | |
t = t || 0; | |
if (v.isFunction(t)) return v.grep(e, function (e, r) { | |
var i = !!t.call(e, r, e); | |
return i === n | |
}); | |
if (t.nodeType) return v.grep(e, function (e, r) { | |
return e === t === n | |
}); | |
if (typeof t == "string") { | |
var r = v.grep(e, function (e) { | |
return e.nodeType === 1 | |
}); | |
if (it.test(t)) return v.filter(t, r, !n); | |
t = v.filter(t, r) | |
} | |
return v.grep(e, function (e, r) { | |
return v.inArray(e, t) >= 0 === n | |
}) | |
} | |
function lt(e) { | |
var t = ct.split("|"), | |
n = e.createDocumentFragment(); | |
if (n.createElement) | |
while (t.length) n.createElement(t.pop()); | |
return n | |
} | |
function Lt(e, t) { | |
return e.getElementsByTagName(t)[0] || e.appendChild(e.ownerDocument.createElement(t)) | |
} | |
function At(e, t) { | |
if (t.nodeType !== 1 || !v.hasData(e)) return; | |
var n, r, i, s = v._data(e), | |
o = v._data(t, s), | |
u = s.events; | |
if (u) { | |
delete o.handle, o.events = {}; | |
for (n in u) | |
for (r = 0, i = u[n].length; r < i; r++) v.event.add(t, n, u[n][r]) | |
} | |
o.data && (o.data = v.extend({}, o.data)) | |
} | |
function Ot(e, t) { | |
var n; | |
if (t.nodeType !== 1) return; | |
t.clearAttributes && t.clearAttributes(), t.mergeAttributes && t.mergeAttributes(e), n = t.nodeName.toLowerCase(), n === "object" ? (t.parentNode && (t.outerHTML = e.outerHTML), v.support.html5Clone && e.innerHTML && !v.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : n === "input" && Et.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : n === "option" ? t.selected = e.defaultSelected : n === "input" || n === "textarea" ? t.defaultValue = e.defaultValue : n === "script" && t.text !== e.text && (t.text = e.text), t.removeAttribute(v.expando) | |
} | |
function Mt(e) { | |
return typeof e.getElementsByTagName != "undefined" ? e.getElementsByTagName("*") : typeof e.querySelectorAll != "undefined" ? e.querySelectorAll("*") : [] | |
} | |
function _t(e) { | |
Et.test(e.type) && (e.defaultChecked = e.checked) | |
} | |
function Qt(e, t) { | |
if (t in e) return t; | |
var n = t.charAt(0).toUpperCase() + t.slice(1), | |
r = t, | |
i = Jt.length; | |
while (i--) { | |
t = Jt[i] + n; | |
if (t in e) return t | |
} | |
return r | |
} | |
function Gt(e, t) { | |
return e = t || e, v.css(e, "display") === "none" || !v.contains(e.ownerDocument, e) | |
} | |
function Yt(e, t) { | |
var n, r, i = [], | |
s = 0, | |
o = e.length; | |
for (; s < o; s++) { | |
n = e[s]; | |
if (!n.style) continue; | |
i[s] = v._data(n, "olddisplay"), t ? (!i[s] && n.style.display === "none" && (n.style.display = ""), n.style.display === "" && Gt(n) && (i[s] = v._data(n, "olddisplay", nn(n.nodeName)))) : (r = Dt(n, "display"), !i[s] && r !== "none" && v._data(n, "olddisplay", r)) | |
} | |
for (s = 0; s < o; s++) { | |
n = e[s]; | |
if (!n.style) continue; | |
if (!t || n.style.display === "none" || n.style.display === "") n.style.display = t ? i[s] || "" : "none" | |
} | |
return e | |
} | |
function Zt(e, t, n) { | |
var r = Rt.exec(t); | |
return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t | |
} | |
function en(e, t, n, r) { | |
var i = n === (r ? "border" : "content") ? 4 : t === "width" ? 1 : 0, | |
s = 0; | |
for (; i < 4; i += 2) n === "margin" && (s += v.css(e, n + $t[i], !0)), r ? (n === "content" && (s -= parseFloat(Dt(e, "padding" + $t[i])) || 0), n !== "margin" && (s -= parseFloat(Dt(e, "border" + $t[i] + "Width")) || 0)) : (s += parseFloat(Dt(e, "padding" + $t[i])) || 0, n !== "padding" && (s += parseFloat(Dt(e, "border" + $t[i] + "Width")) || 0)); | |
return s | |
} | |
function tn(e, t, n) { | |
var r = t === "width" ? e.offsetWidth : e.offsetHeight, | |
i = !0, | |
s = v.support.boxSizing && v.css(e, "boxSizing") === "border-box"; | |
if (r <= 0 || r == null) { | |
r = Dt(e, t); | |
if (r < 0 || r == null) r = e.style[t]; | |
if (Ut.test(r)) return r; | |
i = s && (v.support.boxSizingReliable || r === e.style[t]), r = parseFloat(r) || 0 | |
} | |
return r + en(e, t, n || (s ? "border" : "content"), i) + "px" | |
} | |
function nn(e) { | |
if (Wt[e]) return Wt[e]; | |
var t = v("<" + e + ">").appendTo(i.body), | |
n = t.css("display"); | |
t.remove(); | |
if (n === "none" || n === "") { | |
Pt = i.body.appendChild(Pt || v.extend(i.createElement("iframe"), { | |
frameBorder: 0, | |
width: 0, | |
height: 0 | |
})); | |
if (!Ht || !Pt.createElement) Ht = (Pt.contentWindow || Pt.contentDocument).document, Ht.write("<!doctype html><html><body>"), Ht.close(); | |
t = Ht.body.appendChild(Ht.createElement(e)), n = Dt(t, "display"), i.body.removeChild(Pt) | |
} | |
return Wt[e] = n, n | |
} | |
function fn(e, t, n, r) { | |
var i; | |
if (v.isArray(t)) v.each(t, function (t, i) { | |
n || sn.test(e) ? r(e, i) : fn(e + "[" + (typeof i == "object" ? t : "") + "]", i, n, r) | |
}); | |
else if (!n && v.type(t) === "object") | |
for (i in t) fn(e + "[" + i + "]", t[i], n, r); | |
else r(e, t) | |
} | |
function Cn(e) { | |
return function (t, n) { | |
typeof t != "string" && (n = t, t = "*"); | |
var r, i, s, o = t.toLowerCase().split(y), | |
u = 0, | |
a = o.length; | |
if (v.isFunction(n)) | |
for (; u < a; u++) r = o[u], s = /^\+/.test(r), s && (r = r.substr(1) || "*"), i = e[r] = e[r] || [], i[s ? "unshift" : "push"](n) | |
} | |
} | |
function kn(e, n, r, i, s, o) { | |
s = s || n.dataTypes[0], o = o || {}, o[s] = !0; | |
var u, a = e[s], | |
f = 0, | |
l = a ? a.length : 0, | |
c = e === Sn; | |
for (; f < l && (c || !u); f++) u = a[f](n, r, i), typeof u == "string" && (!c || o[u] ? u = t : (n.dataTypes.unshift(u), u = kn(e, n, r, i, u, o))); | |
return (c || !u) && !o["*"] && (u = kn(e, n, r, i, "*", o)), u | |
} | |
function Ln(e, n) { | |
var r, i, s = v.ajaxSettings.flatOptions || {}; | |
for (r in n) n[r] !== t && ((s[r] ? e : i || (i = {}))[r] = n[r]); | |
i && v.extend(!0, e, i) | |
} | |
function An(e, n, r) { | |
var i, s, o, u, a = e.contents, | |
f = e.dataTypes, | |
l = e.responseFields; | |
for (s in l) s in r && (n[l[s]] = r[s]); | |
while (f[0] === "*") f.shift(), i === t && (i = e.mimeType || n.getResponseHeader("content-type")); | |
if (i) | |
for (s in a) | |
if (a[s] && a[s].test(i)) { | |
f.unshift(s); | |
break | |
} if (f[0] in r) o = f[0]; | |
else { | |
for (s in r) { | |
if (!f[0] || e.converters[s + " " + f[0]]) { | |
o = s; | |
break | |
} | |
u || (u = s) | |
} | |
o = o || u | |
} | |
if (o) return o !== f[0] && f.unshift(o), r[o] | |
} | |
function On(e, t) { | |
var n, r, i, s, o = e.dataTypes.slice(), | |
u = o[0], | |
a = {}, | |
f = 0; | |
e.dataFilter && (t = e.dataFilter(t, e.dataType)); | |
if (o[1]) | |
for (n in e.converters) a[n.toLowerCase()] = e.converters[n]; | |
for (; i = o[++f];) | |
if (i !== "*") { | |
if (u !== "*" && u !== i) { | |
n = a[u + " " + i] || a["* " + i]; | |
if (!n) | |
for (r in a) { | |
s = r.split(" "); | |
if (s[1] === i) { | |
n = a[u + " " + s[0]] || a["* " + s[0]]; | |
if (n) { | |
n === !0 ? n = a[r] : a[r] !== !0 && (i = s[0], o.splice(f--, 0, i)); | |
break | |
} | |
} | |
} | |
if (n !== !0) | |
if (n && e["throws"]) t = n(t); | |
else try { | |
t = n(t) | |
} catch (l) { | |
return { | |
state: "parsererror", | |
error: n ? l : "No conversion from " + u + " to " + i | |
} | |
} | |
} | |
u = i | |
} return { | |
state: "success", | |
data: t | |
} | |
} | |
function Fn() { | |
try { | |
return new e.XMLHttpRequest | |
} catch (t) { } | |
} | |
function In() { | |
try { | |
return new e.ActiveXObject("Microsoft.XMLHTTP") | |
} catch (t) { } | |
} | |
function $n() { | |
return setTimeout(function () { | |
qn = t | |
}, 0), qn = v.now() | |
} | |
function Jn(e, t) { | |
v.each(t, function (t, n) { | |
var r = (Vn[t] || []).concat(Vn["*"]), | |
i = 0, | |
s = r.length; | |
for (; i < s; i++) | |
if (r[i].call(e, t, n)) return | |
}) | |
} | |
function Kn(e, t, n) { | |
var r, i = 0, | |
s = 0, | |
o = Xn.length, | |
u = v.Deferred().always(function () { | |
delete a.elem | |
}), | |
a = function () { | |
var t = qn || $n(), | |
n = Math.max(0, f.startTime + f.duration - t), | |
r = n / f.duration || 0, | |
i = 1 - r, | |
s = 0, | |
o = f.tweens.length; | |
for (; s < o; s++) f.tweens[s].run(i); | |
return u.notifyWith(e, [f, i, n]), i < 1 && o ? n : (u.resolveWith(e, [f]), !1) | |
}, | |
f = u.promise({ | |
elem: e, | |
props: v.extend({}, t), | |
opts: v.extend(!0, { | |
specialEasing: {} | |
}, n), | |
originalProperties: t, | |
originalOptions: n, | |
startTime: qn || $n(), | |
duration: n.duration, | |
tweens: [], | |
createTween: function (t, n, r) { | |
var i = v.Tween(e, f.opts, t, n, f.opts.specialEasing[t] || f.opts.easing); | |
return f.tweens.push(i), i | |
}, | |
stop: function (t) { | |
var n = 0, | |
r = t ? f.tweens.length : 0; | |
for (; n < r; n++) f.tweens[n].run(1); | |
return t ? u.resolveWith(e, [f, t]) : u.rejectWith(e, [f, t]), this | |
} | |
}), | |
l = f.props; | |
Qn(l, f.opts.specialEasing); | |
for (; i < o; i++) { | |
r = Xn[i].call(f, e, l, f.opts); | |
if (r) return r | |
} | |
return Jn(f, l), v.isFunction(f.opts.start) && f.opts.start.call(e, f), v.fx.timer(v.extend(a, { | |
anim: f, | |
queue: f.opts.queue, | |
elem: e | |
})), f.progress(f.opts.progress).done(f.opts.done, f.opts.complete).fail(f.opts.fail).always(f.opts.always) | |
} | |
function Qn(e, t) { | |
var n, r, i, s, o; | |
for (n in e) { | |
r = v.camelCase(n), i = t[r], s = e[n], v.isArray(s) && (i = s[1], s = e[n] = s[0]), n !== r && (e[r] = s, delete e[n]), o = v.cssHooks[r]; | |
if (o && "expand" in o) { | |
s = o.expand(s), delete e[r]; | |
for (n in s) n in e || (e[n] = s[n], t[n] = i) | |
} else t[r] = i | |
} | |
} | |
function Gn(e, t, n) { | |
var r, i, s, o, u, a, f, l, c, h = this, | |
p = e.style, | |
d = {}, | |
m = [], | |
g = e.nodeType && Gt(e); | |
n.queue || (l = v._queueHooks(e, "fx"), l.unqueued == null && (l.unqueued = 0, c = l.empty.fire, l.empty.fire = function () { | |
l.unqueued || c() | |
}), l.unqueued++, h.always(function () { | |
h.always(function () { | |
l.unqueued--, v.queue(e, "fx").length || l.empty.fire() | |
}) | |
})), e.nodeType === 1 && ("height" in t || "width" in t) && (n.overflow = [p.overflow, p.overflowX, p.overflowY], v.css(e, "display") === "inline" && v.css(e, "float") === "none" && (!v.support.inlineBlockNeedsLayout || nn(e.nodeName) === "inline" ? p.display = "inline-block" : p.zoom = 1)), n.overflow && (p.overflow = "hidden", v.support.shrinkWrapBlocks || h.done(function () { | |
p.overflow = n.overflow[0], p.overflowX = n.overflow[1], p.overflowY = n.overflow[2] | |
})); | |
for (r in t) { | |
s = t[r]; | |
if (Un.exec(s)) { | |
delete t[r], a = a || s === "toggle"; | |
if (s === (g ? "hide" : "show")) continue; | |
m.push(r) | |
} | |
} | |
o = m.length; | |
if (o) { | |
u = v._data(e, "fxshow") || v._data(e, "fxshow", {}), "hidden" in u && (g = u.hidden), a && (u.hidden = !g), g ? v(e).show() : h.done(function () { | |
v(e).hide() | |
}), h.done(function () { | |
var t; | |
v.removeData(e, "fxshow", !0); | |
for (t in d) v.style(e, t, d[t]) | |
}); | |
for (r = 0; r < o; r++) i = m[r], f = h.createTween(i, g ? u[i] : 0), d[i] = u[i] || v.style(e, i), i in u || (u[i] = f.start, g && (f.end = f.start, f.start = i === "width" || i === "height" ? 1 : 0)) | |
} | |
} | |
function Yn(e, t, n, r, i) { | |
return new Yn.prototype.init(e, t, n, r, i) | |
} | |
function Zn(e, t) { | |
var n, r = { | |
height: e | |
}, | |
i = 0; | |
t = t ? 1 : 0; | |
for (; i < 4; i += 2 - t) n = $t[i], r["margin" + n] = r["padding" + n] = e; | |
return t && (r.opacity = r.width = e), r | |
} | |
function tr(e) { | |
return v.isWindow(e) ? e : e.nodeType === 9 ? e.defaultView || e.parentWindow : !1 | |
} | |
var n, r, i = e.document, | |
s = e.location, | |
o = e.navigator, | |
u = e.jQuery, | |
a = e.$, | |
f = Array.prototype.push, | |
l = Array.prototype.slice, | |
c = Array.prototype.indexOf, | |
h = Object.prototype.toString, | |
p = Object.prototype.hasOwnProperty, | |
d = String.prototype.trim, | |
v = function (e, t) { | |
return new v.fn.init(e, t, n) | |
}, | |
m = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, | |
g = /\S/, | |
y = /\s+/, | |
b = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, | |
w = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, | |
E = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, | |
S = /^[\],:{}\s]*$/, | |
x = /(?:^|:|,)(?:\s*\[)+/g, | |
T = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, | |
N = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, | |
C = /^-ms-/, | |
k = /-([\da-z])/gi, | |
L = function (e, t) { | |
return (t + "").toUpperCase() | |
}, | |
A = function () { | |
i.addEventListener ? (i.removeEventListener("DOMContentLoaded", A, !1), v.ready()) : i.readyState === "complete" && (i.detachEvent("onreadystatechange", A), v.ready()) | |
}, | |
O = {}; | |
v.fn = v.prototype = { | |
constructor: v, | |
init: function (e, n, r) { | |
var s, o, u, a; | |
if (!e) return this; | |
if (e.nodeType) return this.context = this[0] = e, this.length = 1, this; | |
if (typeof e == "string") { | |
e.charAt(0) === "<" && e.charAt(e.length - 1) === ">" && e.length >= 3 ? s = [null, e, null] : s = w.exec(e); | |
if (s && (s[1] || !n)) { | |
if (s[1]) return n = n instanceof v ? n[0] : n, a = n && n.nodeType ? n.ownerDocument || n : i, e = v.parseHTML(s[1], a, !0), E.test(s[1]) && v.isPlainObject(n) && this.attr.call(e, n, !0), v.merge(this, e); | |
o = i.getElementById(s[2]); | |
if (o && o.parentNode) { | |
if (o.id !== s[2]) return r.find(e); | |
this.length = 1, this[0] = o | |
} | |
return this.context = i, this.selector = e, this | |
} | |
return !n || n.jquery ? (n || r).find(e) : this.constructor(n).find(e) | |
} | |
return v.isFunction(e) ? r.ready(e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), v.makeArray(e, this)) | |
}, | |
selector: "", | |
jquery: "1.8.3", | |
length: 0, | |
size: function () { | |
return this.length | |
}, | |
toArray: function () { | |
return l.call(this) | |
}, | |
get: function (e) { | |
return e == null ? this.toArray() : e < 0 ? this[this.length + e] : this[e] | |
}, | |
pushStack: function (e, t, n) { | |
var r = v.merge(this.constructor(), e); | |
return r.prevObject = this, r.context = this.context, t === "find" ? r.selector = this.selector + (this.selector ? " " : "") + n : t && (r.selector = this.selector + "." + t + "(" + n + ")"), r | |
}, | |
each: function (e, t) { | |
return v.each(this, e, t) | |
}, | |
ready: function (e) { | |
return v.ready.promise().done(e), this | |
}, | |
eq: function (e) { | |
return e = +e, e === -1 ? this.slice(e) : this.slice(e, e + 1) | |
}, | |
first: function () { | |
return this.eq(0) | |
}, | |
last: function () { | |
return this.eq(-1) | |
}, | |
slice: function () { | |
return this.pushStack(l.apply(this, arguments), "slice", l.call(arguments).join(",")) | |
}, | |
map: function (e) { | |
return this.pushStack(v.map(this, function (t, n) { | |
return e.call(t, n, t) | |
})) | |
}, | |
end: function () { | |
return this.prevObject || this.constructor(null) | |
}, | |
push: f, | |
sort: [].sort, | |
splice: [].splice | |
}, v.fn.init.prototype = v.fn, v.extend = v.fn.extend = function () { | |
var e, n, r, i, s, o, u = arguments[0] || {}, | |
a = 1, | |
f = arguments.length, | |
l = !1; | |
typeof u == "boolean" && (l = u, u = arguments[1] || {}, a = 2), typeof u != "object" && !v.isFunction(u) && (u = {}), f === a && (u = this, --a); | |
for (; a < f; a++) | |
if ((e = arguments[a]) != null) | |
for (n in e) { | |
r = u[n], i = e[n]; | |
if (u === i) continue; | |
l && i && (v.isPlainObject(i) || (s = v.isArray(i))) ? (s ? (s = !1, o = r && v.isArray(r) ? r : []) : o = r && v.isPlainObject(r) ? r : {}, u[n] = v.extend(l, o, i)) : i !== t && (u[n] = i) | |
} | |
return u | |
}, v.extend({ | |
noConflict: function (t) { | |
return e.$ === v && (e.$ = a), t && e.jQuery === v && (e.jQuery = u), v | |
}, | |
isReady: !1, | |
readyWait: 1, | |
holdReady: function (e) { | |
e ? v.readyWait++ : v.ready(!0) | |
}, | |
ready: function (e) { | |
if (e === !0 ? --v.readyWait : v.isReady) return; | |
if (!i.body) return setTimeout(v.ready, 1); | |
v.isReady = !0; | |
if (e !== !0 && --v.readyWait > 0) return; | |
r.resolveWith(i, [v]), v.fn.trigger && v(i).trigger("ready").off("ready") | |
}, | |
isFunction: function (e) { | |
return v.type(e) === "function" | |
}, | |
isArray: Array.isArray || function (e) { | |
return v.type(e) === "array" | |
}, | |
isWindow: function (e) { | |
return e != null && e == e.window | |
}, | |
isNumeric: function (e) { | |
return !isNaN(parseFloat(e)) && isFinite(e) | |
}, | |
type: function (e) { | |
return e == null ? String(e) : O[h.call(e)] || "object" | |
}, | |
isPlainObject: function (e) { | |
if (!e || v.type(e) !== "object" || e.nodeType || v.isWindow(e)) return !1; | |
try { | |
if (e.constructor && !p.call(e, "constructor") && !p.call(e.constructor.prototype, "isPrototypeOf")) return !1 | |
} catch (n) { | |
return !1 | |
} | |
var r; | |
for (r in e); | |
return r === t || p.call(e, r) | |
}, | |
isEmptyObject: function (e) { | |
var t; | |
for (t in e) return !1; | |
return !0 | |
}, | |
error: function (e) { | |
throw new Error(e) | |
}, | |
parseHTML: function (e, t, n) { | |
var r; | |
return !e || typeof e != "string" ? null : (typeof t == "boolean" && (n = t, t = 0), t = t || i, (r = E.exec(e)) ? [t.createElement(r[1])] : (r = v.buildFragment([e], t, n ? null : []), v.merge([], (r.cacheable ? v.clone(r.fragment) : r.fragment).childNodes))) | |
}, | |
parseJSON: function (t) { | |
if (!t || typeof t != "string") return null; | |
t = v.trim(t); | |
if (e.JSON && e.JSON.parse) return e.JSON.parse(t); | |
if (S.test(t.replace(T, "@").replace(N, "]").replace(x, ""))) return (new Function("return " + t))(); | |
v.error("Invalid JSON: " + t) | |
}, | |
parseXML: function (n) { | |
var r, i; | |
if (!n || typeof n != "string") return null; | |
try { | |
e.DOMParser ? (i = new DOMParser, r = i.parseFromString(n, "text/xml")) : (r = new ActiveXObject("Microsoft.XMLDOM"), r.async = "false", r.loadXML(n)) | |
} catch (s) { | |
r = t | |
} | |
return (!r || !r.documentElement || r.getElementsByTagName("parsererror").length) && v.error("Invalid XML: " + n), r | |
}, | |
noop: function () { }, | |
globalEval: function (t) { | |
t && g.test(t) && (e.execScript || function (t) { | |
e.eval.call(e, t) | |
})(t) | |
}, | |
camelCase: function (e) { | |
return e.replace(C, "ms-").replace(k, L) | |
}, | |
nodeName: function (e, t) { | |
return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() | |
}, | |
each: function (e, n, r) { | |
var i, s = 0, | |
o = e.length, | |
u = o === t || v.isFunction(e); | |
if (r) { | |
if (u) { | |
for (i in e) | |
if (n.apply(e[i], r) === !1) break | |
} else | |
for (; s < o;) | |
if (n.apply(e[s++], r) === !1) break | |
} else if (u) { | |
for (i in e) | |
if (n.call(e[i], i, e[i]) === !1) break | |
} else | |
for (; s < o;) | |
if (n.call(e[s], s, e[s++]) === !1) break; | |
return e | |
}, | |
trim: d && !d.call("\ufeff\u00a0") ? function (e) { | |
return e == null ? "" : d.call(e) | |
} : function (e) { | |
return e == null ? "" : (e + "").replace(b, "") | |
}, | |
makeArray: function (e, t) { | |
var n, r = t || []; | |
return e != null && (n = v.type(e), e.length == null || n === "string" || n === "function" || n === "regexp" || v.isWindow(e) ? f.call(r, e) : v.merge(r, e)), r | |
}, | |
inArray: function (e, t, n) { | |
var r; | |
if (t) { | |
if (c) return c.call(t, e, n); | |
r = t.length, n = n ? n < 0 ? Math.max(0, r + n) : n : 0; | |
for (; n < r; n++) | |
if (n in t && t[n] === e) return n | |
} | |
return -1 | |
}, | |
merge: function (e, n) { | |
var r = n.length, | |
i = e.length, | |
s = 0; | |
if (typeof r == "number") | |
for (; s < r; s++) e[i++] = n[s]; | |
else | |
while (n[s] !== t) e[i++] = n[s++]; | |
return e.length = i, e | |
}, | |
grep: function (e, t, n) { | |
var r, i = [], | |
s = 0, | |
o = e.length; | |
n = !!n; | |
for (; s < o; s++) r = !!t(e[s], s), n !== r && i.push(e[s]); | |
return i | |
}, | |
map: function (e, n, r) { | |
var i, s, o = [], | |
u = 0, | |
a = e.length, | |
f = e instanceof v || a !== t && typeof a == "number" && (a > 0 && e[0] && e[a - 1] || a === 0 || v.isArray(e)); | |
if (f) | |
for (; u < a; u++) i = n(e[u], u, r), i != null && (o[o.length] = i); | |
else | |
for (s in e) i = n(e[s], s, r), i != null && (o[o.length] = i); | |
return o.concat.apply([], o) | |
}, | |
guid: 1, | |
proxy: function (e, n) { | |
var r, i, s; | |
return typeof n == "string" && (r = e[n], n = e, e = r), v.isFunction(e) ? (i = l.call(arguments, 2), s = function () { | |
return e.apply(n, i.concat(l.call(arguments))) | |
}, s.guid = e.guid = e.guid || v.guid++, s) : t | |
}, | |
access: function (e, n, r, i, s, o, u) { | |
var a, f = r == null, | |
l = 0, | |
c = e.length; | |
if (r && typeof r == "object") { | |
for (l in r) v.access(e, n, l, r[l], 1, o, i); | |
s = 1 | |
} else if (i !== t) { | |
a = u === t && v.isFunction(i), f && (a ? (a = n, n = function (e, t, n) { | |
return a.call(v(e), n) | |
}) : (n.call(e, i), n = null)); | |
if (n) | |
for (; l < c; l++) n(e[l], r, a ? i.call(e[l], l, n(e[l], r)) : i, u); | |
s = 1 | |
} | |
return s ? e : f ? n.call(e) : c ? n(e[0], r) : o | |
}, | |
now: function () { | |
return (new Date).getTime() | |
} | |
}), v.ready.promise = function (t) { | |
if (!r) { | |
r = v.Deferred(); | |
if (i.readyState === "complete") setTimeout(v.ready, 1); | |
else if (i.addEventListener) i.addEventListener("DOMContentLoaded", A, !1), e.addEventListener("load", v.ready, !1); | |
else { | |
i.attachEvent("onreadystatechange", A), e.attachEvent("onload", v.ready); | |
var n = !1; | |
try { | |
n = e.frameElement == null && i.documentElement | |
} catch (s) { } | |
n && n.doScroll && function o() { | |
if (!v.isReady) { | |
try { | |
n.doScroll("left") | |
} catch (e) { | |
return setTimeout(o, 50) | |
} | |
v.ready() | |
} | |
}() | |
} | |
} | |
return r.promise(t) | |
}, v.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (e, t) { | |
O["[object " + t + "]"] = t.toLowerCase() | |
}), n = v(i); | |
var M = {}; | |
v.Callbacks = function (e) { | |
e = typeof e == "string" ? M[e] || _(e) : v.extend({}, e); | |
var n, r, i, s, o, u, a = [], | |
f = !e.once && [], | |
l = function (t) { | |
n = e.memory && t, r = !0, u = s || 0, s = 0, o = a.length, i = !0; | |
for (; a && u < o; u++) | |
if (a[u].apply(t[0], t[1]) === !1 && e.stopOnFalse) { | |
n = !1; | |
break | |
} i = !1, a && (f ? f.length && l(f.shift()) : n ? a = [] : c.disable()) | |
}, | |
c = { | |
add: function () { | |
if (a) { | |
var t = a.length; | |
(function r(t) { | |
v.each(t, function (t, n) { | |
var i = v.type(n); | |
i === "function" ? (!e.unique || !c.has(n)) && a.push(n) : n && n.length && i !== "string" && r(n) | |
}) | |
})(arguments), i ? o = a.length : n && (s = t, l(n)) | |
} | |
return this | |
}, | |
remove: function () { | |
return a && v.each(arguments, function (e, t) { | |
var n; | |
while ((n = v.inArray(t, a, n)) > -1) a.splice(n, 1), i && (n <= o && o--, n <= u && u--) | |
}), this | |
}, | |
has: function (e) { | |
return v.inArray(e, a) > -1 | |
}, | |
empty: function () { | |
return a = [], this | |
}, | |
disable: function () { | |
return a = f = n = t, this | |
}, | |
disabled: function () { | |
return !a | |
}, | |
lock: function () { | |
return f = t, n || c.disable(), this | |
}, | |
locked: function () { | |
return !f | |
}, | |
fireWith: function (e, t) { | |
return t = t || [], t = [e, t.slice ? t.slice() : t], a && (!r || f) && (i ? f.push(t) : l(t)), this | |
}, | |
fire: function () { | |
return c.fireWith(this, arguments), this | |
}, | |
fired: function () { | |
return !!r | |
} | |
}; | |
return c | |
}, v.extend({ | |
Deferred: function (e) { | |
var t = [ | |
["resolve", "done", v.Callbacks("once memory"), "resolved"], | |
["reject", "fail", v.Callbacks("once memory"), "rejected"], | |
["notify", "progress", v.Callbacks("memory")] | |
], | |
n = "pending", | |
r = { | |
state: function () { | |
return n | |
}, | |
always: function () { | |
return i.done(arguments).fail(arguments), this | |
}, | |
then: function () { | |
var e = arguments; | |
return v.Deferred(function (n) { | |
v.each(t, function (t, r) { | |
var s = r[0], | |
o = e[t]; | |
i[r[1]](v.isFunction(o) ? function () { | |
var e = o.apply(this, arguments); | |
e && v.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[s + "With"](this === i ? n : this, [e]) | |
} : n[s]) | |
}), e = null | |
}).promise() | |
}, | |
promise: function (e) { | |
return e != null ? v.extend(e, r) : r | |
} | |
}, | |
i = {}; | |
return r.pipe = r.then, v.each(t, function (e, s) { | |
var o = s[2], | |
u = s[3]; | |
r[s[1]] = o.add, u && o.add(function () { | |
n = u | |
}, t[e ^ 1][2].disable, t[2][2].lock), i[s[0]] = o.fire, i[s[0] + "With"] = o.fireWith | |
}), r.promise(i), e && e.call(i, i), i | |
}, | |
when: function (e) { | |
var t = 0, | |
n = l.call(arguments), | |
r = n.length, | |
i = r !== 1 || e && v.isFunction(e.promise) ? r : 0, | |
s = i === 1 ? e : v.Deferred(), | |
o = function (e, t, n) { | |
return function (r) { | |
t[e] = this, n[e] = arguments.length > 1 ? l.call(arguments) : r, n === u ? s.notifyWith(t, n) : --i || s.resolveWith(t, n) | |
} | |
}, | |
u, a, f; | |
if (r > 1) { | |
u = new Array(r), a = new Array(r), f = new Array(r); | |
for (; t < r; t++) n[t] && v.isFunction(n[t].promise) ? n[t].promise().done(o(t, f, n)).fail(s.reject).progress(o(t, a, u)) : --i | |
} | |
return i || s.resolveWith(f, n), s.promise() | |
} | |
}), v.support = function () { | |
var t, n, r, s, o, u, a, f, l, c, h, p = i.createElement("div"); | |
p.setAttribute("className", "t"), p.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", n = p.getElementsByTagName("*"), r = p.getElementsByTagName("a")[0]; | |
if (!n || !r || !n.length) return {}; | |
s = i.createElement("select"), o = s.appendChild(i.createElement("option")), u = p.getElementsByTagName("input")[0], r.style.cssText = "top:1px;float:left;opacity:.5", t = { | |
leadingWhitespace: p.firstChild.nodeType === 3, | |
tbody: !p.getElementsByTagName("tbody").length, | |
htmlSerialize: !!p.getElementsByTagName("link").length, | |
style: /top/.test(r.getAttribute("style")), | |
hrefNormalized: r.getAttribute("href") === "/a", | |
opacity: /^0.5/.test(r.style.opacity), | |
cssFloat: !!r.style.cssFloat, | |
checkOn: u.value === "on", | |
optSelected: o.selected, | |
getSetAttribute: p.className !== "t", | |
enctype: !!i.createElement("form").enctype, | |
html5Clone: i.createElement("nav").cloneNode(!0).outerHTML !== "<:nav></:nav>", | |
boxModel: i.compatMode === "CSS1Compat", | |
submitBubbles: !0, | |
changeBubbles: !0, | |
focusinBubbles: !1, | |
deleteExpando: !0, | |
noCloneEvent: !0, | |
inlineBlockNeedsLayout: !1, | |
shrinkWrapBlocks: !1, | |
reliableMarginRight: !0, | |
boxSizingReliable: !0, | |
pixelPosition: !1 | |
}, u.checked = !0, t.noCloneChecked = u.cloneNode(!0).checked, s.disabled = !0, t.optDisabled = !o.disabled; | |
try { | |
delete p.test | |
} catch (d) { | |
t.deleteExpando = !1 | |
} !p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", h = function () { | |
t.noCloneEvent = !1 | |
}), p.cloneNode(!0).fireEvent("onclick"), p.detachEvent("onclick", h)), u = i.createElement("input"), u.value = "t", u.setAttribute("type", "radio"), t.radioValue = u.value === "t", u.setAttribute("checked", "checked"), u.setAttribute("name", "t"), p.appendChild(u), a = i.createDocumentFragment(), a.appendChild(p.lastChild), t.checkClone = a.cloneNode(!0).cloneNode(!0).lastChild.checked, t.appendChecked = u.checked, a.removeChild(u), a.appendChild(p); | |
if (p.attachEvent) | |
for (l in { | |
submit: !0, | |
change: !0, | |
focusin: !0 | |
}) f = "on" + l, c = f in p, c || (p.setAttribute(f, "return;"), c = typeof p[f] == "function"), t[l + "Bubbles"] = c; | |
return v(function () { | |
var n, r, s, o, u = "padding:0;margin:0;border:0;display:block;overflow:hidden;", | |
a = i.getElementsByTagName("body")[0]; | |
if (!a) return; | |
n = i.createElement("div"), n.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", a.insertBefore(n, a.firstChild), r = i.createElement("div"), n.appendChild(r), r.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", s = r.getElementsByTagName("td"), s[0].style.cssText = "padding:0;margin:0;border:0;display:none", c = s[0].offsetHeight === 0, s[0].style.display = "", s[1].style.display = "none", t.reliableHiddenOffsets = c && s[0].offsetHeight === 0, r.innerHTML = "", r.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", t.boxSizing = r.offsetWidth === 4, t.doesNotIncludeMarginInBodyOffset = a.offsetTop !== 1, e.getComputedStyle && (t.pixelPosition = (e.getComputedStyle(r, null) || {}).top !== "1%", t.boxSizingReliable = (e.getComputedStyle(r, null) || { | |
width: "4px" | |
}).width === "4px", o = i.createElement("div"), o.style.cssText = r.style.cssText = u, o.style.marginRight = o.style.width = "0", r.style.width = "1px", r.appendChild(o), t.reliableMarginRight = !parseFloat((e.getComputedStyle(o, null) || {}).marginRight)), typeof r.style.zoom != "undefined" && (r.innerHTML = "", r.style.cssText = u + "width:1px;padding:1px;display:inline;zoom:1", t.inlineBlockNeedsLayout = r.offsetWidth === 3, r.style.display = "block", r.style.overflow = "visible", r.innerHTML = "<div></div>", r.firstChild.style.width = "5px", t.shrinkWrapBlocks = r.offsetWidth !== 3, n.style.zoom = 1), a.removeChild(n), n = r = s = o = null | |
}), a.removeChild(p), n = r = s = o = u = a = p = null, t | |
}(); | |
var D = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, | |
P = /([A-Z])/g; | |
v.extend({ | |
cache: {}, | |
deletedIds: [], | |
uuid: 0, | |
expando: "jQuery" + (v.fn.jquery + Math.random()).replace(/\D/g, ""), | |
noData: { | |
embed: !0, | |
object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", | |
applet: !0 | |
}, | |
hasData: function (e) { | |
return e = e.nodeType ? v.cache[e[v.expando]] : e[v.expando], !!e && !B(e) | |
}, | |
data: function (e, n, r, i) { | |
if (!v.acceptData(e)) return; | |
var s, o, u = v.expando, | |
a = typeof n == "string", | |
f = e.nodeType, | |
l = f ? v.cache : e, | |
c = f ? e[u] : e[u] && u; | |
if ((!c || !l[c] || !i && !l[c].data) && a && r === t) return; | |
c || (f ? e[u] = c = v.deletedIds.pop() || v.guid++ : c = u), l[c] || (l[c] = {}, f || (l[c].toJSON = v.noop)); | |
if (typeof n == "object" || typeof n == "function") i ? l[c] = v.extend(l[c], n) : l[c].data = v.extend(l[c].data, n); | |
return s = l[c], i || (s.data || (s.data = {}), s = s.data), r !== t && (s[v.camelCase(n)] = r), a ? (o = s[n], o == null && (o = s[v.camelCase(n)])) : o = s, o | |
}, | |
removeData: function (e, t, n) { | |
if (!v.acceptData(e)) return; | |
var r, i, s, o = e.nodeType, | |
u = o ? v.cache : e, | |
a = o ? e[v.expando] : v.expando; | |
if (!u[a]) return; | |
if (t) { | |
r = n ? u[a] : u[a].data; | |
if (r) { | |
v.isArray(t) || (t in r ? t = [t] : (t = v.camelCase(t), t in r ? t = [t] : t = t.split(" "))); | |
for (i = 0, s = t.length; i < s; i++) delete r[t[i]]; | |
if (!(n ? B : v.isEmptyObject)(r)) return | |
} | |
} | |
if (!n) { | |
delete u[a].data; | |
if (!B(u[a])) return | |
} | |
o ? v.cleanData([e], !0) : v.support.deleteExpando || u != u.window ? delete u[a] : u[a] = null | |
}, | |
_data: function (e, t, n) { | |
return v.data(e, t, n, !0) | |
}, | |
acceptData: function (e) { | |
var t = e.nodeName && v.noData[e.nodeName.toLowerCase()]; | |
return !t || t !== !0 && e.getAttribute("classid") === t | |
} | |
}), v.fn.extend({ | |
data: function (e, n) { | |
var r, i, s, o, u, a = this[0], | |
f = 0, | |
l = null; | |
if (e === t) { | |
if (this.length) { | |
l = v.data(a); | |
if (a.nodeType === 1 && !v._data(a, "parsedAttrs")) { | |
s = a.attributes; | |
for (u = s.length; f < u; f++) o = s[f].name, o.indexOf("data-") || (o = v.camelCase(o.substring(5)), H(a, o, l[o])); | |
v._data(a, "parsedAttrs", !0) | |
} | |
} | |
return l | |
} | |
return typeof e == "object" ? this.each(function () { | |
v.data(this, e) | |
}) : (r = e.split(".", 2), r[1] = r[1] ? "." + r[1] : "", i = r[1] + "!", v.access(this, function (n) { | |
if (n === t) return l = this.triggerHandler("getData" + i, [r[0]]), l === t && a && (l = v.data(a, e), l = H(a, e, l)), l === t && r[1] ? this.data(r[0]) : l; | |
r[1] = n, this.each(function () { | |
var t = v(this); | |
t.triggerHandler("setData" + i, r), v.data(this, e, n), t.triggerHandler("changeData" + i, r) | |
}) | |
}, null, n, arguments.length > 1, null, !1)) | |
}, | |
removeData: function (e) { | |
return this.each(function () { | |
v.removeData(this, e) | |
}) | |
} | |
}), v.extend({ | |
queue: function (e, t, n) { | |
var r; | |
if (e) return t = (t || "fx") + "queue", r = v._data(e, t), n && (!r || v.isArray(n) ? r = v._data(e, t, v.makeArray(n)) : r.push(n)), r || [] | |
}, | |
dequeue: function (e, t) { | |
t = t || "fx"; | |
var n = v.queue(e, t), | |
r = n.length, | |
i = n.shift(), | |
s = v._queueHooks(e, t), | |
o = function () { | |
v.dequeue(e, t) | |
}; | |
i === "inprogress" && (i = n.shift(), r--), i && (t === "fx" && n.unshift("inprogress"), delete s.stop, i.call(e, o, s)), !r && s && s.empty.fire() | |
}, | |
_queueHooks: function (e, t) { | |
var n = t + "queueHooks"; | |
return v._data(e, n) || v._data(e, n, { | |
empty: v.Callbacks("once memory").add(function () { | |
v.removeData(e, t + "queue", !0), v.removeData(e, n, !0) | |
}) | |
}) | |
} | |
}), v.fn.extend({ | |
queue: function (e, n) { | |
var r = 2; | |
return typeof e != "string" && (n = e, e = "fx", r--), arguments.length < r ? v.queue(this[0], e) : n === t ? this : this.each(function () { | |
var t = v.queue(this, e, n); | |
v._queueHooks(this, e), e === "fx" && t[0] !== "inprogress" && v.dequeue(this, e) | |
}) | |
}, | |
dequeue: function (e) { | |
return this.each(function () { | |
v.dequeue(this, e) | |
}) | |
}, | |
delay: function (e, t) { | |
return e = v.fx ? v.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function (t, n) { | |
var r = setTimeout(t, e); | |
n.stop = function () { | |
clearTimeout(r) | |
} | |
}) | |
}, | |
clearQueue: function (e) { | |
return this.queue(e || "fx", []) | |
}, | |
promise: function (e, n) { | |
var r, i = 1, | |
s = v.Deferred(), | |
o = this, | |
u = this.length, | |
a = function () { | |
--i || s.resolveWith(o, [o]) | |
}; | |
typeof e != "string" && (n = e, e = t), e = e || "fx"; | |
while (u--) r = v._data(o[u], e + "queueHooks"), r && r.empty && (i++, r.empty.add(a)); | |
return a(), s.promise(n) | |
} | |
}); | |
var j, F, I, q = /[\t\r\n]/g, | |
R = /\r/g, | |
U = /^(?:button|input)$/i, | |
z = /^(?:button|input|object|select|textarea)$/i, | |
W = /^a(?:rea|)$/i, | |
X = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, | |
V = v.support.getSetAttribute; | |
v.fn.extend({ | |
attr: function (e, t) { | |
return v.access(this, v.attr, e, t, arguments.length > 1) | |
}, | |
removeAttr: function (e) { | |
return this.each(function () { | |
v.removeAttr(this, e) | |
}) | |
}, | |
prop: function (e, t) { | |
return v.access(this, v.prop, e, t, arguments.length > 1) | |
}, | |
removeProp: function (e) { | |
return e = v.propFix[e] || e, this.each(function () { | |
try { | |
this[e] = t, delete this[e] | |
} catch (n) { } | |
}) | |
}, | |
addClass: function (e) { | |
var t, n, r, i, s, o, u; | |
if (v.isFunction(e)) return this.each(function (t) { | |
v(this).addClass(e.call(this, t, this.className)) | |
}); | |
if (e && typeof e == "string") { | |
t = e.split(y); | |
for (n = 0, r = this.length; n < r; n++) { | |
i = this[n]; | |
if (i.nodeType === 1) | |
if (!i.className && t.length === 1) i.className = e; | |
else { | |
s = " " + i.className + " "; | |
for (o = 0, u = t.length; o < u; o++) s.indexOf(" " + t[o] + " ") < 0 && (s += t[o] + " "); | |
i.className = v.trim(s) | |
} | |
} | |
} | |
return this | |
}, | |
removeClass: function (e) { | |
var n, r, i, s, o, u, a; | |
if (v.isFunction(e)) return this.each(function (t) { | |
v(this).removeClass(e.call(this, t, this.className)) | |
}); | |
if (e && typeof e == "string" || e === t) { | |
n = (e || "").split(y); | |
for (u = 0, a = this.length; u < a; u++) { | |
i = this[u]; | |
if (i.nodeType === 1 && i.className) { | |
r = (" " + i.className + " ").replace(q, " "); | |
for (s = 0, o = n.length; s < o; s++) | |
while (r.indexOf(" " + n[s] + " ") >= 0) r = r.replace(" " + n[s] + " ", " "); | |
i.className = e ? v.trim(r) : "" | |
} | |
} | |
} | |
return this | |
}, | |
toggleClass: function (e, t) { | |
var n = typeof e, | |
r = typeof t == "boolean"; | |
return v.isFunction(e) ? this.each(function (n) { | |
v(this).toggleClass(e.call(this, n, this.className, t), t) | |
}) : this.each(function () { | |
if (n === "string") { | |
var i, s = 0, | |
o = v(this), | |
u = t, | |
a = e.split(y); | |
while (i = a[s++]) u = r ? u : !o.hasClass(i), o[u ? "addClass" : "removeClass"](i) | |
} else if (n === "undefined" || n === "boolean") this.className && v._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : v._data(this, "__className__") || "" | |
}) | |
}, | |
hasClass: function (e) { | |
var t = " " + e + " ", | |
n = 0, | |
r = this.length; | |
for (; n < r; n++) | |
if (this[n].nodeType === 1 && (" " + this[n].className + " ").replace(q, " ").indexOf(t) >= 0) return !0; | |
return !1 | |
}, | |
val: function (e) { | |
var n, r, i, s = this[0]; | |
if (!arguments.length) { | |
if (s) return n = v.valHooks[s.type] || v.valHooks[s.nodeName.toLowerCase()], n && "get" in n && (r = n.get(s, "value")) !== t ? r : (r = s.value, typeof r == "string" ? r.replace(R, "") : r == null ? "" : r); | |
return | |
} | |
return i = v.isFunction(e), this.each(function (r) { | |
var s, o = v(this); | |
if (this.nodeType !== 1) return; | |
i ? s = e.call(this, r, o.val()) : s = e, s == null ? s = "" : typeof s == "number" ? s += "" : v.isArray(s) && (s = v.map(s, function (e) { | |
return e == null ? "" : e + "" | |
})), n = v.valHooks[this.type] || v.valHooks[this.nodeName.toLowerCase()]; | |
if (!n || !("set" in n) || n.set(this, s, "value") === t) this.value = s | |
}) | |
} | |
}), v.extend({ | |
valHooks: { | |
option: { | |
get: function (e) { | |
var t = e.attributes.value; | |
return !t || t.specified ? e.value : e.text | |
} | |
}, | |
select: { | |
get: function (e) { | |
var t, n, r = e.options, | |
i = e.selectedIndex, | |
s = e.type === "select-one" || i < 0, | |
o = s ? null : [], | |
u = s ? i + 1 : r.length, | |
a = i < 0 ? u : s ? i : 0; | |
for (; a < u; a++) { | |
n = r[a]; | |
if ((n.selected || a === i) && (v.support.optDisabled ? !n.disabled : n.getAttribute("disabled") === null) && (!n.parentNode.disabled || !v.nodeName(n.parentNode, "optgroup"))) { | |
t = v(n).val(); | |
if (s) return t; | |
o.push(t) | |
} | |
} | |
return o | |
}, | |
set: function (e, t) { | |
var n = v.makeArray(t); | |
return v(e).find("option").each(function () { | |
this.selected = v.inArray(v(this).val(), n) >= 0 | |
}), n.length || (e.selectedIndex = -1), n | |
} | |
} | |
}, | |
attrFn: {}, | |
attr: function (e, n, r, i) { | |
var s, o, u, a = e.nodeType; | |
if (!e || a === 3 || a === 8 || a === 2) return; | |
if (i && v.isFunction(v.fn[n])) return v(e)[n](r); | |
if (typeof e.getAttribute == "undefined") return v.prop(e, n, r); | |
u = a !== 1 || !v.isXMLDoc(e), u && (n = n.toLowerCase(), o = v.attrHooks[n] || (X.test(n) ? F : j)); | |
if (r !== t) { | |
if (r === null) { | |
v.removeAttr(e, n); | |
return | |
} | |
return o && "set" in o && u && (s = o.set(e, r, n)) !== t ? s : (e.setAttribute(n, r + ""), r) | |
} | |
return o && "get" in o && u && (s = o.get(e, n)) !== null ? s : (s = e.getAttribute(n), s === null ? t : s) | |
}, | |
removeAttr: function (e, t) { | |
var n, r, i, s, o = 0; | |
if (t && e.nodeType === 1) { | |
r = t.split(y); | |
for (; o < r.length; o++) i = r[o], i && (n = v.propFix[i] || i, s = X.test(i), s || v.attr(e, i, ""), e.removeAttribute(V ? i : n), s && n in e && (e[n] = !1)) | |
} | |
}, | |
attrHooks: { | |
type: { | |
set: function (e, t) { | |
if (U.test(e.nodeName) && e.parentNode) v.error("type property can't be changed"); | |
else if (!v.support.radioValue && t === "radio" && v.nodeName(e, "input")) { | |
var n = e.value; | |
return e.setAttribute("type", t), n && (e.value = n), t | |
} | |
} | |
}, | |
value: { | |
get: function (e, t) { | |
return j && v.nodeName(e, "button") ? j.get(e, t) : t in e ? e.value : null | |
}, | |
set: function (e, t, n) { | |
if (j && v.nodeName(e, "button")) return j.set(e, t, n); | |
e.value = t | |
} | |
} | |
}, | |
propFix: { | |
tabindex: "tabIndex", | |
readonly: "readOnly", | |
"for": "htmlFor", | |
"class": "className", | |
maxlength: "maxLength", | |
cellspacing: "cellSpacing", | |
cellpadding: "cellPadding", | |
rowspan: "rowSpan", | |
colspan: "colSpan", | |
usemap: "useMap", | |
frameborder: "frameBorder", | |
contenteditable: "contentEditable" | |
}, | |
prop: function (e, n, r) { | |
var i, s, o, u = e.nodeType; | |
if (!e || u === 3 || u === 8 || u === 2) return; | |
return o = u !== 1 || !v.isXMLDoc(e), o && (n = v.propFix[n] || n, s = v.propHooks[n]), r !== t ? s && "set" in s && (i = s.set(e, r, n)) !== t ? i : e[n] = r : s && "get" in s && (i = s.get(e, n)) !== null ? i : e[n] | |
}, | |
propHooks: { | |
tabIndex: { | |
get: function (e) { | |
var n = e.getAttributeNode("tabindex"); | |
return n && n.specified ? parseInt(n.value, 10) : z.test(e.nodeName) || W.test(e.nodeName) && e.href ? 0 : t | |
} | |
} | |
} | |
}), F = { | |
get: function (e, n) { | |
var r, i = v.prop(e, n); | |
return i === !0 || typeof i != "boolean" && (r = e.getAttributeNode(n)) && r.nodeValue !== !1 ? n.toLowerCase() : t | |
}, | |
set: function (e, t, n) { | |
var r; | |
return t === !1 ? v.removeAttr(e, n) : (r = v.propFix[n] || n, r in e && (e[r] = !0), e.setAttribute(n, n.toLowerCase())), n | |
} | |
}, V || (I = { | |
name: !0, | |
id: !0, | |
coords: !0 | |
}, j = v.valHooks.button = { | |
get: function (e, n) { | |
var r; | |
return r = e.getAttributeNode(n), r && (I[n] ? r.value !== "" : r.specified) ? r.value : t | |
}, | |
set: function (e, t, n) { | |
var r = e.getAttributeNode(n); | |
return r || (r = i.createAttribute(n), e.setAttributeNode(r)), r.value = t + "" | |
} | |
}, v.each(["width", "height"], function (e, t) { | |
v.attrHooks[t] = v.extend(v.attrHooks[t], { | |
set: function (e, n) { | |
if (n === "") return e.setAttribute(t, "auto"), n | |
} | |
}) | |
}), v.attrHooks.contenteditable = { | |
get: j.get, | |
set: function (e, t, n) { | |
t === "" && (t = "false"), j.set(e, t, n) | |
} | |
}), v.support.hrefNormalized || v.each(["href", "src", "width", "height"], function (e, n) { | |
v.attrHooks[n] = v.extend(v.attrHooks[n], { | |
get: function (e) { | |
var r = e.getAttribute(n, 2); | |
return r === null ? t : r | |
} | |
}) | |
}), v.support.style || (v.attrHooks.style = { | |
get: function (e) { | |
return e.style.cssText.toLowerCase() || t | |
}, | |
set: function (e, t) { | |
return e.style.cssText = t + "" | |
} | |
}), v.support.optSelected || (v.propHooks.selected = v.extend(v.propHooks.selected, { | |
get: function (e) { | |
var t = e.parentNode; | |
return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null | |
} | |
})), v.support.enctype || (v.propFix.enctype = "encoding"), v.support.checkOn || v.each(["radio", "checkbox"], function () { | |
v.valHooks[this] = { | |
get: function (e) { | |
return e.getAttribute("value") === null ? "on" : e.value | |
} | |
} | |
}), v.each(["radio", "checkbox"], function () { | |
v.valHooks[this] = v.extend(v.valHooks[this], { | |
set: function (e, t) { | |
if (v.isArray(t)) return e.checked = v.inArray(v(e).val(), t) >= 0 | |
} | |
}) | |
}); | |
var $ = /^(?:textarea|input|select)$/i, | |
J = /^([^\.]*|)(?:\.(.+)|)$/, | |
K = /(?:^|\s)hover(\.\S+|)\b/, | |
Q = /^key/, | |
G = /^(?:mouse|contextmenu)|click/, | |
Y = /^(?:focusinfocus|focusoutblur)$/, | |
Z = function (e) { | |
return v.event.special.hover ? e : e.replace(K, "mouseenter$1 mouseleave$1") | |
}; | |
v.event = { | |
add: function (e, n, r, i, s) { | |
var o, u, a, f, l, c, h, p, d, m, g; | |
if (e.nodeType === 3 || e.nodeType === 8 || !n || !r || !(o = v._data(e))) return; | |
r.handler && (d = r, r = d.handler, s = d.selector), r.guid || (r.guid = v.guid++), a = o.events, a || (o.events = a = {}), u = o.handle, u || (o.handle = u = function (e) { | |
return typeof v == "undefined" || !!e && v.event.triggered === e.type ? t : v.event.dispatch.apply(u.elem, arguments) | |
}, u.elem = e), n = v.trim(Z(n)).split(" "); | |
for (f = 0; f < n.length; f++) { | |
l = J.exec(n[f]) || [], c = l[1], h = (l[2] || "").split(".").sort(), g = v.event.special[c] || {}, c = (s ? g.delegateType : g.bindType) || c, g = v.event.special[c] || {}, p = v.extend({ | |
type: c, | |
origType: l[1], | |
data: i, | |
handler: r, | |
guid: r.guid, | |
selector: s, | |
needsContext: s && v.expr.match.needsContext.test(s), | |
namespace: h.join(".") | |
}, d), m = a[c]; | |
if (!m) { | |
m = a[c] = [], m.delegateCount = 0; | |
if (!g.setup || g.setup.call(e, i, h, u) === !1) e.addEventListener ? e.addEventListener(c, u, !1) : e.attachEvent && e.attachEvent("on" + c, u) | |
} | |
g.add && (g.add.call(e, p), p.handler.guid || (p.handler.guid = r.guid)), s ? m.splice(m.delegateCount++, 0, p) : m.push(p), v.event.global[c] = !0 | |
} | |
e = null | |
}, | |
global: {}, | |
remove: function (e, t, n, r, i) { | |
var s, o, u, a, f, l, c, h, p, d, m, g = v.hasData(e) && v._data(e); | |
if (!g || !(h = g.events)) return; | |
t = v.trim(Z(t || "")).split(" "); | |
for (s = 0; s < t.length; s++) { | |
o = J.exec(t[s]) || [], u = a = o[1], f = o[2]; | |
if (!u) { | |
for (u in h) v.event.remove(e, u + t[s], n, r, !0); | |
continue | |
} | |
p = v.event.special[u] || {}, u = (r ? p.delegateType : p.bindType) || u, d = h[u] || [], l = d.length, f = f ? new RegExp("(^|\\.)" + f.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; | |
for (c = 0; c < d.length; c++) m = d[c], (i || a === m.origType) && (!n || n.guid === m.guid) && (!f || f.test(m.namespace)) && (!r || r === m.selector || r === "**" && m.selector) && (d.splice(c--, 1), m.selector && d.delegateCount--, p.remove && p.remove.call(e, m)); | |
d.length === 0 && l !== d.length && ((!p.teardown || p.teardown.call(e, f, g.handle) === !1) && v.removeEvent(e, u, g.handle), delete h[u]) | |
} | |
v.isEmptyObject(h) && (delete g.handle, v.removeData(e, "events", !0)) | |
}, | |
customEvent: { | |
getData: !0, | |
setData: !0, | |
changeData: !0 | |
}, | |
trigger: function (n, r, s, o) { | |
if (!s || s.nodeType !== 3 && s.nodeType !== 8) { | |
var u, a, f, l, c, h, p, d, m, g, y = n.type || n, | |
b = []; | |
if (Y.test(y + v.event.triggered)) return; | |
y.indexOf("!") >= 0 && (y = y.slice(0, -1), a = !0), y.indexOf(".") >= 0 && (b = y.split("."), y = b.shift(), b.sort()); | |
if ((!s || v.event.customEvent[y]) && !v.event.global[y]) return; | |
n = typeof n == "object" ? n[v.expando] ? n : new v.Event(y, n) : new v.Event(y), n.type = y, n.isTrigger = !0, n.exclusive = a, n.namespace = b.join("."), n.namespace_re = n.namespace ? new RegExp("(^|\\.)" + b.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, h = y.indexOf(":") < 0 ? "on" + y : ""; | |
if (!s) { | |
u = v.cache; | |
for (f in u) u[f].events && u[f].events[y] && v.event.trigger(n, r, u[f].handle.elem, !0); | |
return | |
} | |
n.result = t, n.target || (n.target = s), r = r != null ? v.makeArray(r) : [], r.unshift(n), p = v.event.special[y] || {}; | |
if (p.trigger && p.trigger.apply(s, r) === !1) return; | |
m = [ | |
[s, p.bindType || y] | |
]; | |
if (!o && !p.noBubble && !v.isWindow(s)) { | |
g = p.delegateType || y, l = Y.test(g + y) ? s : s.parentNode; | |
for (c = s; l; l = l.parentNode) m.push([l, g]), c = l; | |
c === (s.ownerDocument || i) && m.push([c.defaultView || c.parentWindow || e, g]) | |
} | |
for (f = 0; f < m.length && !n.isPropagationStopped(); f++) l = m[f][0], n.type = m[f][1], d = (v._data(l, "events") || {})[n.type] && v._data(l, "handle"), d && d.apply(l, r), d = h && l[h], d && v.acceptData(l) && d.apply && d.apply(l, r) === !1 && n.preventDefault(); | |
return n.type = y, !o && !n.isDefaultPrevented() && (!p._default || p._default.apply(s.ownerDocument, r) === !1) && (y !== "click" || !v.nodeName(s, "a")) && v.acceptData(s) && h && s[y] && (y !== "focus" && y !== "blur" || n.target.offsetWidth !== 0) && !v.isWindow(s) && (c = s[h], c && (s[h] = null), v.event.triggered = y, s[y](), v.event.triggered = t, c && (s[h] = c)), n.result | |
} | |
return | |
}, | |
dispatch: function (n) { | |
n = v.event.fix(n || e.event); | |
var r, i, s, o, u, a, f, c, h, p, d = (v._data(this, "events") || {})[n.type] || [], | |
m = d.delegateCount, | |
g = l.call(arguments), | |
y = !n.exclusive && !n.namespace, | |
b = v.event.special[n.type] || {}, | |
w = []; | |
g[0] = n, n.delegateTarget = this; | |
if (b.preDispatch && b.preDispatch.call(this, n) === !1) return; | |
if (m && (!n.button || n.type !== "click")) | |
for (s = n.target; s != this; s = s.parentNode || this) | |
if (s.disabled !== !0 || n.type !== "click") { | |
u = {}, f = []; | |
for (r = 0; r < m; r++) c = d[r], h = c.selector, u[h] === t && (u[h] = c.needsContext ? v(h, this).index(s) >= 0 : v.find(h, this, null, [s]).length), u[h] && f.push(c); | |
f.length && w.push({ | |
elem: s, | |
matches: f | |
}) | |
} d.length > m && w.push({ | |
elem: this, | |
matches: d.slice(m) | |
}); | |
for (r = 0; r < w.length && !n.isPropagationStopped(); r++) { | |
a = w[r], n.currentTarget = a.elem; | |
for (i = 0; i < a.matches.length && !n.isImmediatePropagationStopped(); i++) { | |
c = a.matches[i]; | |
if (y || !n.namespace && !c.namespace || n.namespace_re && n.namespace_re.test(c.namespace)) n.data = c.data, n.handleObj = c, o = ((v.event.special[c.origType] || {}).handle || c.handler).apply(a.elem, g), o !== t && (n.result = o, o === !1 && (n.preventDefault(), n.stopPropagation())) | |
} | |
} | |
return b.postDispatch && b.postDispatch.call(this, n), n.result | |
}, | |
props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), | |
fixHooks: {}, | |
keyHooks: { | |
props: "char charCode key keyCode".split(" "), | |
filter: function (e, t) { | |
return e.which == null && (e.which = t.charCode != null ? t.charCode : t.keyCode), e | |
} | |
}, | |
mouseHooks: { | |
props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), | |
filter: function (e, n) { | |
var r, s, o, u = n.button, | |
a = n.fromElement; | |
return e.pageX == null && n.clientX != null && (r = e.target.ownerDocument || i, s = r.documentElement, o = r.body, e.pageX = n.clientX + (s && s.scrollLeft || o && o.scrollLeft || 0) - (s && s.clientLeft || o && o.clientLeft || 0), e.pageY = n.clientY + (s && s.scrollTop || o && o.scrollTop || 0) - (s && s.clientTop || o && o.clientTop || 0)), !e.relatedTarget && a && (e.relatedTarget = a === e.target ? n.toElement : a), !e.which && u !== t && (e.which = u & 1 ? 1 : u & 2 ? 3 : u & 4 ? 2 : 0), e | |
} | |
}, | |
fix: function (e) { | |
if (e[v.expando]) return e; | |
var t, n, r = e, | |
s = v.event.fixHooks[e.type] || {}, | |
o = s.props ? this.props.concat(s.props) : this.props; | |
e = v.Event(r); | |
for (t = o.length; t;) n = o[--t], e[n] = r[n]; | |
return e.target || (e.target = r.srcElement || i), e.target.nodeType === 3 && (e.target = e.target.parentNode), e.metaKey = !!e.metaKey, s.filter ? s.filter(e, r) : e | |
}, | |
special: { | |
load: { | |
noBubble: !0 | |
}, | |
focus: { | |
delegateType: "focusin" | |
}, | |
blur: { | |
delegateType: "focusout" | |
}, | |
beforeunload: { | |
setup: function (e, t, n) { | |
v.isWindow(this) && (this.onbeforeunload = n) | |
}, | |
teardown: function (e, t) { | |
this.onbeforeunload === t && (this.onbeforeunload = null) | |
} | |
} | |
}, | |
simulate: function (e, t, n, r) { | |
var i = v.extend(new v.Event, n, { | |
type: e, | |
isSimulated: !0, | |
originalEvent: {} | |
}); | |
r ? v.event.trigger(i, null, t) : v.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault() | |
} | |
}, v.event.handle = v.event.dispatch, v.removeEvent = i.removeEventListener ? function (e, t, n) { | |
e.removeEventListener && e.removeEventListener(t, n, !1) | |
} : function (e, t, n) { | |
var r = "on" + t; | |
e.detachEvent && (typeof e[r] == "undefined" && (e[r] = null), e.detachEvent(r, n)) | |
}, v.Event = function (e, t) { | |
if (!(this instanceof v.Event)) return new v.Event(e, t); | |
e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? tt : et) : this.type = e, t && v.extend(this, t), this.timeStamp = e && e.timeStamp || v.now(), this[v.expando] = !0 | |
}, v.Event.prototype = { | |
preventDefault: function () { | |
this.isDefaultPrevented = tt; | |
var e = this.originalEvent; | |
if (!e) return; | |
e.preventDefault ? e.preventDefault() : e.returnValue = !1 | |
}, | |
stopPropagation: function () { | |
this.isPropagationStopped = tt; | |
var e = this.originalEvent; | |
if (!e) return; | |
e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0 | |
}, | |
stopImmediatePropagation: function () { | |
this.isImmediatePropagationStopped = tt, this.stopPropagation() | |
}, | |
isDefaultPrevented: et, | |
isPropagationStopped: et, | |
isImmediatePropagationStopped: et | |
}, v.each({ | |
mouseenter: "mouseover", | |
mouseleave: "mouseout" | |
}, function (e, t) { | |
v.event.special[e] = { | |
delegateType: t, | |
bindType: t, | |
handle: function (e) { | |
var n, r = this, | |
i = e.relatedTarget, | |
s = e.handleObj, | |
o = s.selector; | |
if (!i || i !== r && !v.contains(r, i)) e.type = s.origType, n = s.handler.apply(this, arguments), e.type = t; | |
return n | |
} | |
} | |
}), v.support.submitBubbles || (v.event.special.submit = { | |
setup: function () { | |
if (v.nodeName(this, "form")) return !1; | |
v.event.add(this, "click._submit keypress._submit", function (e) { | |
var n = e.target, | |
r = v.nodeName(n, "input") || v.nodeName(n, "button") ? n.form : t; | |
r && !v._data(r, "_submit_attached") && (v.event.add(r, "submit._submit", function (e) { | |
e._submit_bubble = !0 | |
}), v._data(r, "_submit_attached", !0)) | |
}) | |
}, | |
postDispatch: function (e) { | |
e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && v.event.simulate("submit", this.parentNode, e, !0)) | |
}, | |
teardown: function () { | |
if (v.nodeName(this, "form")) return !1; | |
v.event.remove(this, "._submit") | |
} | |
}), v.support.changeBubbles || (v.event.special.change = { | |
setup: function () { | |
if ($.test(this.nodeName)) { | |
if (this.type === "checkbox" || this.type === "radio") v.event.add(this, "propertychange._change", function (e) { | |
e.originalEvent.propertyName === "checked" && (this._just_changed = !0) | |
}), v.event.add(this, "click._change", function (e) { | |
this._just_changed && !e.isTrigger && (this._just_changed = !1), v.event.simulate("change", this, e, !0) | |
}); | |
return !1 | |
} | |
v.event.add(this, "beforeactivate._change", function (e) { | |
var t = e.target; | |
$.test(t.nodeName) && !v._data(t, "_change_attached") && (v.event.add(t, "change._change", function (e) { | |
this.parentNode && !e.isSimulated && !e.isTrigger && v.event.simulate("change", this.parentNode, e, !0) | |
}), v._data(t, "_change_attached", !0)) | |
}) | |
}, | |
handle: function (e) { | |
var t = e.target; | |
if (this !== t || e.isSimulated || e.isTrigger || t.type !== "radio" && t.type !== "checkbox") return e.handleObj.handler.apply(this, arguments) | |
}, | |
teardown: function () { | |
return v.event.remove(this, "._change"), !$.test(this.nodeName) | |
} | |
}), v.support.focusinBubbles || v.each({ | |
focus: "focusin", | |
blur: "focusout" | |
}, function (e, t) { | |
var n = 0, | |
r = function (e) { | |
v.event.simulate(t, e.target, v.event.fix(e), !0) | |
}; | |
v.event.special[t] = { | |
setup: function () { | |
n++ === 0 && i.addEventListener(e, r, !0) | |
}, | |
teardown: function () { | |
--n === 0 && i.removeEventListener(e, r, !0) | |
} | |
} | |
}), v.fn.extend({ | |
on: function (e, n, r, i, s) { | |
var o, u; | |
if (typeof e == "object") { | |
typeof n != "string" && (r = r || n, n = t); | |
for (u in e) this.on(u, n, r, e[u], s); | |
return this | |
} | |
r == null && i == null ? (i = n, r = n = t) : i == null && (typeof n == "string" ? (i = r, r = t) : (i = r, r = n, n = t)); | |
if (i === !1) i = et; | |
else if (!i) return this; | |
return s === 1 && (o = i, i = function (e) { | |
return v().off(e), o.apply(this, arguments) | |
}, i.guid = o.guid || (o.guid = v.guid++)), this.each(function () { | |
v.event.add(this, e, i, r, n) | |
}) | |
}, | |
one: function (e, t, n, r) { | |
return this.on(e, t, n, r, 1) | |
}, | |
off: function (e, n, r) { | |
var i, s; | |
if (e && e.preventDefault && e.handleObj) return i = e.handleObj, v(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this; | |
if (typeof e == "object") { | |
for (s in e) this.off(s, n, e[s]); | |
return this | |
} | |
if (n === !1 || typeof n == "function") r = n, n = t; | |
return r === !1 && (r = et), this.each(function () { | |
v.event.remove(this, e, r, n) | |
}) | |
}, | |
bind: function (e, t, n) { | |
return this.on(e, null, t, n) | |
}, | |
unbind: function (e, t) { | |
return this.off(e, null, t) | |
}, | |
live: function (e, t, n) { | |
return v(this.context).on(e, this.selector, t, n), this | |
}, | |
die: function (e, t) { | |
return v(this.context).off(e, this.selector || "**", t), this | |
}, | |
delegate: function (e, t, n, r) { | |
return this.on(t, e, n, r) | |
}, | |
undelegate: function (e, t, n) { | |
return arguments.length === 1 ? this.off(e, "**") : this.off(t, e || "**", n) | |
}, | |
trigger: function (e, t) { | |
return this.each(function () { | |
v.event.trigger(e, t, this) | |
}) | |
}, | |
triggerHandler: function (e, t) { | |
if (this[0]) return v.event.trigger(e, t, this[0], !0) | |
}, | |
toggle: function (e) { | |
var t = arguments, | |
n = e.guid || v.guid++, | |
r = 0, | |
i = function (n) { | |
var i = (v._data(this, "lastToggle" + e.guid) || 0) % r; | |
return v._data(this, "lastToggle" + e.guid, i + 1), n.preventDefault(), t[i].apply(this, arguments) || !1 | |
}; | |
i.guid = n; | |
while (r < t.length) t[r++].guid = n; | |
return this.click(i) | |
}, | |
hover: function (e, t) { | |
return this.mouseenter(e).mouseleave(t || e) | |
} | |
}), v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (e, t) { | |
v.fn[t] = function (e, n) { | |
return n == null && (n = e, e = null), arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t) | |
}, Q.test(t) && (v.event.fixHooks[t] = v.event.keyHooks), G.test(t) && (v.event.fixHooks[t] = v.event.mouseHooks) | |
}), | |
function (e, t) { | |
function nt(e, t, n, r) { | |
n = n || [], t = t || g; | |
var i, s, a, f, l = t.nodeType; | |
if (!e || typeof e != "string") return n; | |
if (l !== 1 && l !== 9) return []; | |
a = o(t); | |
if (!a && !r) | |
if (i = R.exec(e)) | |
if (f = i[1]) { | |
if (l === 9) { | |
s = t.getElementById(f); | |
if (!s || !s.parentNode) return n; | |
if (s.id === f) return n.push(s), n | |
} else if (t.ownerDocument && (s = t.ownerDocument.getElementById(f)) && u(t, s) && s.id === f) return n.push(s), n | |
} else { | |
if (i[2]) return S.apply(n, x.call(t.getElementsByTagName(e), 0)), n; | |
if ((f = i[3]) && Z && t.getElementsByClassName) return S.apply(n, x.call(t.getElementsByClassName(f), 0)), n | |
} return vt(e.replace(j, "$1"), t, n, r, a) | |
} | |
function rt(e) { | |
return function (t) { | |
var n = t.nodeName.toLowerCase(); | |
return n === "input" && t.type === e | |
} | |
} | |
function it(e) { | |
return function (t) { | |
var n = t.nodeName.toLowerCase(); | |
return (n === "input" || n === "button") && t.type === e | |
} | |
} | |
function st(e) { | |
return N(function (t) { | |
return t = +t, N(function (n, r) { | |
var i, s = e([], n.length, t), | |
o = s.length; | |
while (o--) n[i = s[o]] && (n[i] = !(r[i] = n[i])) | |
}) | |
}) | |
} | |
function ot(e, t, n) { | |
if (e === t) return n; | |
var r = e.nextSibling; | |
while (r) { | |
if (r === t) return -1; | |
r = r.nextSibling | |
} | |
return 1 | |
} | |
function ut(e, t) { | |
var n, r, s, o, u, a, f, l = L[d][e + " "]; | |
if (l) return t ? 0 : l.slice(0); | |
u = e, a = [], f = i.preFilter; | |
while (u) { | |
if (!n || (r = F.exec(u))) r && (u = u.slice(r[0].length) || u), a.push(s = []); | |
n = !1; | |
if (r = I.exec(u)) s.push(n = new m(r.shift())), u = u.slice(n.length), n.type = r[0].replace(j, " "); | |
for (o in i.filter) (r = J[o].exec(u)) && (!f[o] || (r = f[o](r))) && (s.push(n = new m(r.shift())), u = u.slice(n.length), n.type = o, n.matches = r); | |
if (!n) break | |
} | |
return t ? u.length : u ? nt.error(e) : L(e, a).slice(0) | |
} | |
function at(e, t, r) { | |
var i = t.dir, | |
s = r && t.dir === "parentNode", | |
o = w++; | |
return t.first ? function (t, n, r) { | |
while (t = t[i]) | |
if (s || t.nodeType === 1) return e(t, n, r) | |
} : function (t, r, u) { | |
if (!u) { | |
var a, f = b + " " + o + " ", | |
l = f + n; | |
while (t = t[i]) | |
if (s || t.nodeType === 1) { | |
if ((a = t[d]) === l) return t.sizset; | |
if (typeof a == "string" && a.indexOf(f) === 0) { | |
if (t.sizset) return t | |
} else { | |
t[d] = l; | |
if (e(t, r, u)) return t.sizset = !0, t; | |
t.sizset = !1 | |
} | |
} | |
} else | |
while (t = t[i]) | |
if (s || t.nodeType === 1) | |
if (e(t, r, u)) return t | |
} | |
} | |
function ft(e) { | |
return e.length > 1 ? function (t, n, r) { | |
var i = e.length; | |
while (i--) | |
if (!e[i](t, n, r)) return !1; | |
return !0 | |
} : e[0] | |
} | |
function lt(e, t, n, r, i) { | |
var s, o = [], | |
u = 0, | |
a = e.length, | |
f = t != null; | |
for (; u < a; u++) | |
if (s = e[u]) | |
if (!n || n(s, r, i)) o.push(s), f && t.push(u); | |
return o | |
} | |
function ct(e, t, n, r, i, s) { | |
return r && !r[d] && (r = ct(r)), i && !i[d] && (i = ct(i, s)), N(function (s, o, u, a) { | |
var f, l, c, h = [], | |
p = [], | |
d = o.length, | |
v = s || dt(t || "*", u.nodeType ? [u] : u, []), | |
m = e && (s || !t) ? lt(v, h, e, u, a) : v, | |
g = n ? i || (s ? e : d || r) ? [] : o : m; | |
n && n(m, g, u, a); | |
if (r) { | |
f = lt(g, p), r(f, [], u, a), l = f.length; | |
while (l--) | |
if (c = f[l]) g[p[l]] = !(m[p[l]] = c) | |
} | |
if (s) { | |
if (i || e) { | |
if (i) { | |
f = [], l = g.length; | |
while (l--) (c = g[l]) && f.push(m[l] = c); | |
i(null, g = [], f, a) | |
} | |
l = g.length; | |
while (l--) (c = g[l]) && (f = i ? T.call(s, c) : h[l]) > -1 && (s[f] = !(o[f] = c)) | |
} | |
} else g = lt(g === o ? g.splice(d, g.length) : g), i ? i(null, o, g, a) : S.apply(o, g) | |
}) | |
} | |
function ht(e) { | |
var t, n, r, s = e.length, | |
o = i.relative[e[0].type], | |
u = o || i.relative[" "], | |
a = o ? 1 : 0, | |
f = at(function (e) { | |
return e === t | |
}, u, !0), | |
l = at(function (e) { | |
return T.call(t, e) > -1 | |
}, u, !0), | |
h = [function (e, n, r) { | |
return !o && (r || n !== c) || ((t = n).nodeType ? f(e, n, r) : l(e, n, r)) | |
}]; | |
for (; a < s; a++) | |
if (n = i.relative[e[a].type]) h = [at(ft(h), n)]; | |
else { | |
n = i.filter[e[a].type].apply(null, e[a].matches); | |
if (n[d]) { | |
r = ++a; | |
for (; r < s; r++) | |
if (i.relative[e[r].type]) break; | |
return ct(a > 1 && ft(h), a > 1 && e.slice(0, a - 1).join("").replace(j, "$1"), n, a < r && ht(e.slice(a, r)), r < s && ht(e = e.slice(r)), r < s && e.join("")) | |
} | |
h.push(n) | |
} return ft(h) | |
} | |
function pt(e, t) { | |
var r = t.length > 0, | |
s = e.length > 0, | |
o = function (u, a, f, l, h) { | |
var p, d, v, m = [], | |
y = 0, | |
w = "0", | |
x = u && [], | |
T = h != null, | |
N = c, | |
C = u || s && i.find.TAG("*", h && a.parentNode || a), | |
k = b += N == null ? 1 : Math.E; | |
T && (c = a !== g && a, n = o.el); | |
for (; | |
(p = C[w]) != null; w++) { | |
if (s && p) { | |
for (d = 0; v = e[d]; d++) | |
if (v(p, a, f)) { | |
l.push(p); | |
break | |
} T && (b = k, n = ++o.el) | |
} | |
r && ((p = !v && p) && y--, u && x.push(p)) | |
} | |
y += w; | |
if (r && w !== y) { | |
for (d = 0; v = t[d]; d++) v(x, m, a, f); | |
if (u) { | |
if (y > 0) | |
while (w--) !x[w] && !m[w] && (m[w] = E.call(l)); | |
m = lt(m) | |
} | |
S.apply(l, m), T && !u && m.length > 0 && y + t.length > 1 && nt.uniqueSort(l) | |
} | |
return T && (b = k, c = N), x | |
}; | |
return o.el = 0, r ? N(o) : o | |
} | |
function dt(e, t, n) { | |
var r = 0, | |
i = t.length; | |
for (; r < i; r++) nt(e, t[r], n); | |
return n | |
} | |
function vt(e, t, n, r, s) { | |
var o, u, f, l, c, h = ut(e), | |
p = h.length; | |
if (!r && h.length === 1) { | |
u = h[0] = h[0].slice(0); | |
if (u.length > 2 && (f = u[0]).type === "ID" && t.nodeType === 9 && !s && i.relative[u[1].type]) { | |
t = i.find.ID(f.matches[0].replace($, ""), t, s)[0]; | |
if (!t) return n; | |
e = e.slice(u.shift().length) | |
} | |
for (o = J.POS.test(e) ? -1 : u.length - 1; o >= 0; o--) { | |
f = u[o]; | |
if (i.relative[l = f.type]) break; | |
if (c = i.find[l]) | |
if (r = c(f.matches[0].replace($, ""), z.test(u[0].type) && t.parentNode || t, s)) { | |
u.splice(o, 1), e = r.length && u.join(""); | |
if (!e) return S.apply(n, x.call(r, 0)), n; | |
break | |
} | |
} | |
} | |
return a(e, h)(r, t, s, n, z.test(e)), n | |
} | |
function mt() { } | |
var n, r, i, s, o, u, a, f, l, c, h = !0, | |
p = "undefined", | |
d = ("sizcache" + Math.random()).replace(".", ""), | |
m = String, | |
g = e.document, | |
y = g.documentElement, | |
b = 0, | |
w = 0, | |
E = [].pop, | |
S = [].push, | |
x = [].slice, | |
T = [].indexOf || function (e) { | |
var t = 0, | |
n = this.length; | |
for (; t < n; t++) | |
if (this[t] === e) return t; | |
return -1 | |
}, | |
N = function (e, t) { | |
return e[d] = t == null || t, e | |
}, | |
C = function () { | |
var e = {}, | |
t = []; | |
return N(function (n, r) { | |
return t.push(n) > i.cacheLength && delete e[t.shift()], e[n + " "] = r | |
}, e) | |
}, | |
k = C(), | |
L = C(), | |
A = C(), | |
O = "[\\x20\\t\\r\\n\\f]", | |
M = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", | |
_ = M.replace("w", "w#"), | |
D = "([*^$|!~]?=)", | |
P = "\\[" + O + "*(" + M + ")" + O + "*(?:" + D + O + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + _ + ")|)|)" + O + "*\\]", | |
H = ":(" + M + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + P + ")|[^:]|\\\\.)*|.*))\\)|)", | |
B = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + O + "*((?:-\\d)?\\d*)" + O + "*\\)|)(?=[^-]|$)", | |
j = new RegExp("^" + O + "+|((?:^|[^\\\\])(?:\\\\.)*)" + O + "+$", "g"), | |
F = new RegExp("^" + O + "*," + O + "*"), | |
I = new RegExp("^" + O + "*([\\x20\\t\\r\\n\\f>+~])" + O + "*"), | |
q = new RegExp(H), | |
R = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, | |
U = /^:not/, | |
z = /[\x20\t\r\n\f]*[+~]/, | |
W = /:not\($/, | |
X = /h\d/i, | |
V = /input|select|textarea|button/i, | |
$ = /\\(?!\\)/g, | |
J = { | |
ID: new RegExp("^#(" + M + ")"), | |
CLASS: new RegExp("^\\.(" + M + ")"), | |
NAME: new RegExp("^\\[name=['\"]?(" + M + ")['\"]?\\]"), | |
TAG: new RegExp("^(" + M.replace("w", "w*") + ")"), | |
ATTR: new RegExp("^" + P), | |
PSEUDO: new RegExp("^" + H), | |
POS: new RegExp(B, "i"), | |
CHILD: new RegExp("^:(only|nth|first|last)-child(?:\\(" + O + "*(even|odd|(([+-]|)(\\d*)n|)" + O + "*(?:([+-]|)" + O + "*(\\d+)|))" + O + "*\\)|)", "i"), | |
needsContext: new RegExp("^" + O + "*[>+~]|" + B, "i") | |
}, | |
K = function (e) { | |
var t = g.createElement("div"); | |
try { | |
return e(t) | |
} catch (n) { | |
return !1 | |
} finally { | |
t = null | |
} | |
}, | |
Q = K(function (e) { | |
return e.appendChild(g.createComment("")), !e.getElementsByTagName("*").length | |
}), | |
G = K(function (e) { | |
return e.innerHTML = "<a href='#'></a>", e.firstChild && typeof e.firstChild.getAttribute !== p && e.firstChild.getAttribute("href") === "#" | |
}), | |
Y = K(function (e) { | |
e.innerHTML = "<select></select>"; | |
var t = typeof e.lastChild.getAttribute("multiple"); | |
return t !== "boolean" && t !== "string" | |
}), | |
Z = K(function (e) { | |
return e.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", !e.getElementsByClassName || !e.getElementsByClassName("e").length ? !1 : (e.lastChild.className = "e", e.getElementsByClassName("e").length === 2) | |
}), | |
et = K(function (e) { | |
e.id = d + 0, e.innerHTML = "<a name='" + d + "'></a><div name='" + d + "'></div>", y.insertBefore(e, y.firstChild); | |
var t = g.getElementsByName && g.getElementsByName(d).length === 2 + g.getElementsByName(d + 0).length; | |
return r = !g.getElementById(d), y.removeChild(e), t | |
}); | |
try { | |
x.call(y.childNodes, 0)[0].nodeType | |
} catch (tt) { | |
x = function (e) { | |
var t, n = []; | |
for (; t = this[e]; e++) n.push(t); | |
return n | |
} | |
} | |
nt.matches = function (e, t) { | |
return nt(e, null, null, t) | |
}, nt.matchesSelector = function (e, t) { | |
return nt(t, null, null, [e]).length > 0 | |
}, s = nt.getText = function (e) { | |
var t, n = "", | |
r = 0, | |
i = e.nodeType; | |
if (i) { | |
if (i === 1 || i === 9 || i === 11) { | |
if (typeof e.textContent == "string") return e.textContent; | |
for (e = e.firstChild; e; e = e.nextSibling) n += s(e) | |
} else if (i === 3 || i === 4) return e.nodeValue | |
} else | |
for (; t = e[r]; r++) n += s(t); | |
return n | |
}, o = nt.isXML = function (e) { | |
var t = e && (e.ownerDocument || e).documentElement; | |
return t ? t.nodeName !== "HTML" : !1 | |
}, u = nt.contains = y.contains ? function (e, t) { | |
var n = e.nodeType === 9 ? e.documentElement : e, | |
r = t && t.parentNode; | |
return e === r || !!(r && r.nodeType === 1 && n.contains && n.contains(r)) | |
} : y.compareDocumentPosition ? function (e, t) { | |
return t && !!(e.compareDocumentPosition(t) & 16) | |
} : function (e, t) { | |
while (t = t.parentNode) | |
if (t === e) return !0; | |
return !1 | |
}, nt.attr = function (e, t) { | |
var n, r = o(e); | |
return r || (t = t.toLowerCase()), (n = i.attrHandle[t]) ? n(e) : r || Y ? e.getAttribute(t) : (n = e.getAttributeNode(t), n ? typeof e[t] == "boolean" ? e[t] ? t : null : n.specified ? n.value : null : null) | |
}, i = nt.selectors = { | |
cacheLength: 50, | |
createPseudo: N, | |
match: J, | |
attrHandle: G ? {} : { | |
href: function (e) { | |
return e.getAttribute("href", 2) | |
}, | |
type: function (e) { | |
return e.getAttribute("type") | |
} | |
}, | |
find: { | |
ID: r ? function (e, t, n) { | |
if (typeof t.getElementById !== p && !n) { | |
var r = t.getElementById(e); | |
return r && r.parentNode ? [r] : [] | |
} | |
} : function (e, n, r) { | |
if (typeof n.getElementById !== p && !r) { | |
var i = n.getElementById(e); | |
return i ? i.id === e || typeof i.getAttributeNode !== p && i.getAttributeNode("id").value === e ? [i] : t : [] | |
} | |
}, | |
TAG: Q ? function (e, t) { | |
if (typeof t.getElementsByTagName !== p) return t.getElementsByTagName(e) | |
} : function (e, t) { | |
var n = t.getElementsByTagName(e); | |
if (e === "*") { | |
var r, i = [], | |
s = 0; | |
for (; r = n[s]; s++) r.nodeType === 1 && i.push(r); | |
return i | |
} | |
return n | |
}, | |
NAME: et && function (e, t) { | |
if (typeof t.getElementsByName !== p) return t.getElementsByName(name) | |
}, | |
CLASS: Z && function (e, t, n) { | |
if (typeof t.getElementsByClassName !== p && !n) return t.getElementsByClassName(e) | |
} | |
}, | |
relative: { | |
">": { | |
dir: "parentNode", | |
first: !0 | |
}, | |
" ": { | |
dir: "parentNode" | |
}, | |
"+": { | |
dir: "previousSibling", | |
first: !0 | |
}, | |
"~": { | |
dir: "previousSibling" | |
} | |
}, | |
preFilter: { | |
ATTR: function (e) { | |
return e[1] = e[1].replace($, ""), e[3] = (e[4] || e[5] || "").replace($, ""), e[2] === "~=" && (e[3] = " " + e[3] + " "), e.slice(0, 4) | |
}, | |
CHILD: function (e) { | |
return e[1] = e[1].toLowerCase(), e[1] === "nth" ? (e[2] || nt.error(e[0]), e[3] = +(e[3] ? e[4] + (e[5] || 1) : 2 * (e[2] === "even" || e[2] === "odd")), e[4] = +(e[6] + e[7] || e[2] === "odd")) : e[2] && nt.error(e[0]), e | |
}, | |
PSEUDO: function (e) { | |
var t, n; | |
if (J.CHILD.test(e[0])) return null; | |
if (e[3]) e[2] = e[3]; | |
else if (t = e[4]) q.test(t) && (n = ut(t, !0)) && (n = t.indexOf(")", t.length - n) - t.length) && (t = t.slice(0, n), e[0] = e[0].slice(0, n)), e[2] = t; | |
return e.slice(0, 3) | |
} | |
}, | |
filter: { | |
ID: r ? function (e) { | |
return e = e.replace($, ""), | |
function (t) { | |
return t.getAttribute("id") === e | |
} | |
} : function (e) { | |
return e = e.replace($, ""), | |
function (t) { | |
var n = typeof t.getAttributeNode !== p && t.getAttributeNode("id"); | |
return n && n.value === e | |
} | |
}, | |
TAG: function (e) { | |
return e === "*" ? function () { | |
return !0 | |
} : (e = e.replace($, "").toLowerCase(), function (t) { | |
return t.nodeName && t.nodeName.toLowerCase() === e | |
}) | |
}, | |
CLASS: function (e) { | |
var t = k[d][e + " "]; | |
return t || (t = new RegExp("(^|" + O + ")" + e + "(" + O + "|$)")) && k(e, function (e) { | |
return t.test(e.className || typeof e.getAttribute !== p && e.getAttribute("class") || "") | |
}) | |
}, | |
ATTR: function (e, t, n) { | |
return function (r, i) { | |
var s = nt.attr(r, e); | |
return s == null ? t === "!=" : t ? (s += "", t === "=" ? s === n : t === "!=" ? s !== n : t === "^=" ? n && s.indexOf(n) === 0 : t === "*=" ? n && s.indexOf(n) > -1 : t === "$=" ? n && s.substr(s.length - n.length) === n : t === "~=" ? (" " + s + " ").indexOf(n) > -1 : t === "|=" ? s === n || s.substr(0, n.length + 1) === n + "-" : !1) : !0 | |
} | |
}, | |
CHILD: function (e, t, n, r) { | |
return e === "nth" ? function (e) { | |
var t, i, s = e.parentNode; | |
if (n === 1 && r === 0) return !0; | |
if (s) { | |
i = 0; | |
for (t = s.firstChild; t; t = t.nextSibling) | |
if (t.nodeType === 1) { | |
i++; | |
if (e === t) break | |
} | |
} | |
return i -= r, i === n || i % n === 0 && i / n >= 0 | |
} : function (t) { | |
var n = t; | |
switch (e) { | |
case "only": | |
case "first": | |
while (n = n.previousSibling) | |
if (n.nodeType === 1) return !1; | |
if (e === "first") return !0; | |
n = t; | |
case "last": | |
while (n = n.nextSibling) | |
if (n.nodeType === 1) return !1; | |
return !0 | |
} | |
} | |
}, | |
PSEUDO: function (e, t) { | |
var n, r = i.pseudos[e] || i.setFilters[e.toLowerCase()] || nt.error("unsupported pseudo: " + e); | |
return r[d] ? r(t) : r.length > 1 ? (n = [e, e, "", t], i.setFilters.hasOwnProperty(e.toLowerCase()) ? N(function (e, n) { | |
var i, s = r(e, t), | |
o = s.length; | |
while (o--) i = T.call(e, s[o]), e[i] = !(n[i] = s[o]) | |
}) : function (e) { | |
return r(e, 0, n) | |
}) : r | |
} | |
}, | |
pseudos: { | |
not: N(function (e) { | |
var t = [], | |
n = [], | |
r = a(e.replace(j, "$1")); | |
return r[d] ? N(function (e, t, n, i) { | |
var s, o = r(e, null, i, []), | |
u = e.length; | |
while (u--) | |
if (s = o[u]) e[u] = !(t[u] = s) | |
}) : function (e, i, s) { | |
return t[0] = e, r(t, null, s, n), !n.pop() | |
} | |
}), | |
has: N(function (e) { | |
return function (t) { | |
return nt(e, t).length > 0 | |
} | |
}), | |
contains: N(function (e) { | |
return function (t) { | |
return (t.textContent || t.innerText || s(t)).indexOf(e) > -1 | |
} | |
}), | |
enabled: function (e) { | |
return e.disabled === !1 | |
}, | |
disabled: function (e) { | |
return e.disabled === !0 | |
}, | |
checked: function (e) { | |
var t = e.nodeName.toLowerCase(); | |
return t === "input" && !!e.checked || t === "option" && !!e.selected | |
}, | |
selected: function (e) { | |
return e.parentNode && e.parentNode.selectedIndex, e.selected === !0 | |
}, | |
parent: function (e) { | |
return !i.pseudos.empty(e) | |
}, | |
empty: function (e) { | |
var t; | |
e = e.firstChild; | |
while (e) { | |
if (e.nodeName > "@" || (t = e.nodeType) === 3 || t === 4) return !1; | |
e = e.nextSibling | |
} | |
return !0 | |
}, | |
header: function (e) { | |
return X.test(e.nodeName) | |
}, | |
text: function (e) { | |
var t, n; | |
return e.nodeName.toLowerCase() === "input" && (t = e.type) === "text" && ((n = e.getAttribute("type")) == null || n.toLowerCase() === t) | |
}, | |
radio: rt("radio"), | |
checkbox: rt("checkbox"), | |
file: rt("file"), | |
password: rt("password"), | |
image: rt("image"), | |
submit: it("submit"), | |
reset: it("reset"), | |
button: function (e) { | |
var t = e.nodeName.toLowerCase(); | |
return t === "input" && e.type === "button" || t === "button" | |
}, | |
input: function (e) { | |
return V.test(e.nodeName) | |
}, | |
focus: function (e) { | |
var t = e.ownerDocument; | |
return e === t.activeElement && (!t.hasFocus || t.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) | |
}, | |
active: function (e) { | |
return e === e.ownerDocument.activeElement | |
}, | |
first: st(function () { | |
return [0] | |
}), | |
last: st(function (e, t) { | |
return [t - 1] | |
}), | |
eq: st(function (e, t, n) { | |
return [n < 0 ? n + t : n] | |
}), | |
even: st(function (e, t) { | |
for (var n = 0; n < t; n += 2) e.push(n); | |
return e | |
}), | |
odd: st(function (e, t) { | |
for (var n = 1; n < t; n += 2) e.push(n); | |
return e | |
}), | |
lt: st(function (e, t, n) { | |
for (var r = n < 0 ? n + t : n; --r >= 0;) e.push(r); | |
return e | |
}), | |
gt: st(function (e, t, n) { | |
for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r); | |
return e | |
}) | |
} | |
}, f = y.compareDocumentPosition ? function (e, t) { | |
return e === t ? (l = !0, 0) : (!e.compareDocumentPosition || !t.compareDocumentPosition ? e.compareDocumentPosition : e.compareDocumentPosition(t) & 4) ? -1 : 1 | |
} : function (e, t) { | |
if (e === t) return l = !0, 0; | |
if (e.sourceIndex && t.sourceIndex) return e.sourceIndex - t.sourceIndex; | |
var n, r, i = [], | |
s = [], | |
o = e.parentNode, | |
u = t.parentNode, | |
a = o; | |
if (o === u) return ot(e, t); | |
if (!o) return -1; | |
if (!u) return 1; | |
while (a) i.unshift(a), a = a.parentNode; | |
a = u; | |
while (a) s.unshift(a), a = a.parentNode; | |
n = i.length, r = s.length; | |
for (var f = 0; f < n && f < r; f++) | |
if (i[f] !== s[f]) return ot(i[f], s[f]); | |
return f === n ? ot(e, s[f], -1) : ot(i[f], t, 1) | |
}, [0, 0].sort(f), h = !l, nt.uniqueSort = function (e) { | |
var t, n = [], | |
r = 1, | |
i = 0; | |
l = h, e.sort(f); | |
if (l) { | |
for (; t = e[r]; r++) t === e[r - 1] && (i = n.push(r)); | |
while (i--) e.splice(n[i], 1) | |
} | |
return e | |
}, nt.error = function (e) { | |
throw new Error("Syntax error, unrecognized expression: " + e) | |
}, a = nt.compile = function (e, t) { | |
var n, r = [], | |
i = [], | |
s = A[d][e + " "]; | |
if (!s) { | |
t || (t = ut(e)), n = t.length; | |
while (n--) s = ht(t[n]), s[d] ? r.push(s) : i.push(s); | |
s = A(e, pt(i, r)) | |
} | |
return s | |
}, g.querySelectorAll && function () { | |
var e, t = vt, | |
n = /'|\\/g, | |
r = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, | |
i = [":focus"], | |
s = [":active"], | |
u = y.matchesSelector || y.mozMatchesSelector || y.webkitMatchesSelector || y.oMatchesSelector || y.msMatchesSelector; | |
K(function (e) { | |
e.innerHTML = "<select><option selected=''></option></select>", e.querySelectorAll("[selected]").length || i.push("\\[" + O + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), e.querySelectorAll(":checked").length || i.push(":checked") | |
}), K(function (e) { | |
e.innerHTML = "<p test=''></p>", e.querySelectorAll("[test^='']").length && i.push("[*^$]=" + O + "*(?:\"\"|'')"), e.innerHTML = "<input type='hidden'/>", e.querySelectorAll(":enabled").length || i.push(":enabled", ":disabled") | |
}), i = new RegExp(i.join("|")), vt = function (e, r, s, o, u) { | |
if (!o && !u && !i.test(e)) { | |
var a, f, l = !0, | |
c = d, | |
h = r, | |
p = r.nodeType === 9 && e; | |
if (r.nodeType === 1 && r.nodeName.toLowerCase() !== "object") { | |
a = ut(e), (l = r.getAttribute("id")) ? c = l.replace(n, "\\$&") : r.setAttribute("id", c), c = "[id='" + c + "'] ", f = a.length; | |
while (f--) a[f] = c + a[f].join(""); | |
h = z.test(e) && r.parentNode || r, p = a.join(",") | |
} | |
if (p) try { | |
return S.apply(s, x.call(h.querySelectorAll(p), 0)), s | |
} catch (v) { } finally { | |
l || r.removeAttribute("id") | |
} | |
} | |
return t(e, r, s, o, u) | |
}, u && (K(function (t) { | |
e = u.call(t, "div"); | |
try { | |
u.call(t, "[test!='']:sizzle"), s.push("!=", H) | |
} catch (n) { } | |
}), s = new RegExp(s.join("|")), nt.matchesSelector = function (t, n) { | |
n = n.replace(r, "='$1']"); | |
if (!o(t) && !s.test(n) && !i.test(n)) try { | |
var a = u.call(t, n); | |
if (a || e || t.document && t.document.nodeType !== 11) return a | |
} catch (f) { } | |
return nt(n, null, null, [t]).length > 0 | |
}) | |
}(), i.pseudos.nth = i.pseudos.eq, i.filters = mt.prototype = i.pseudos, i.setFilters = new mt, nt.attr = v.attr, v.find = nt, v.expr = nt.selectors, v.expr[":"] = v.expr.pseudos, v.unique = nt.uniqueSort, v.text = nt.getText, v.isXMLDoc = nt.isXML, v.contains = nt.contains | |
}(e); | |
var nt = /Until$/, | |
rt = /^(?:parents|prev(?:Until|All))/, | |
it = /^.[^:#\[\.,]*$/, | |
st = v.expr.match.needsContext, | |
ot = { | |
children: !0, | |
contents: !0, | |
next: !0, | |
prev: !0 | |
}; | |
v.fn.extend({ | |
find: function (e) { | |
var t, n, r, i, s, o, u = this; | |
if (typeof e != "string") return v(e).filter(function () { | |
for (t = 0, n = u.length; t < n; t++) | |
if (v.contains(u[t], this)) return !0 | |
}); | |
o = this.pushStack("", "find", e); | |
for (t = 0, n = this.length; t < n; t++) { | |
r = o.length, v.find(e, this[t], o); | |
if (t > 0) | |
for (i = r; i < o.length; i++) | |
for (s = 0; s < r; s++) | |
if (o[s] === o[i]) { | |
o.splice(i--, 1); | |
break | |
} | |
} | |
return o | |
}, | |
has: function (e) { | |
var t, n = v(e, this), | |
r = n.length; | |
return this.filter(function () { | |
for (t = 0; t < r; t++) | |
if (v.contains(this, n[t])) return !0 | |
}) | |
}, | |
not: function (e) { | |
return this.pushStack(ft(this, e, !1), "not", e) | |
}, | |
filter: function (e) { | |
return this.pushStack(ft(this, e, !0), "filter", e) | |
}, | |
is: function (e) { | |
return !!e && (typeof e == "string" ? st.test(e) ? v(e, this.context).index(this[0]) >= 0 : v.filter(e, this).length > 0 : this.filter(e).length > 0) | |
}, | |
closest: function (e, t) { | |
var n, r = 0, | |
i = this.length, | |
s = [], | |
o = st.test(e) || typeof e != "string" ? v(e, t || this.context) : 0; | |
for (; r < i; r++) { | |
n = this[r]; | |
while (n && n.ownerDocument && n !== t && n.nodeType !== 11) { | |
if (o ? o.index(n) > -1 : v.find.matchesSelector(n, e)) { | |
s.push(n); | |
break | |
} | |
n = n.parentNode | |
} | |
} | |
return s = s.length > 1 ? v.unique(s) : s, this.pushStack(s, "closest", e) | |
}, | |
index: function (e) { | |
return e ? typeof e == "string" ? v.inArray(this[0], v(e)) : v.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1 | |
}, | |
add: function (e, t) { | |
var n = typeof e == "string" ? v(e, t) : v.makeArray(e && e.nodeType ? [e] : e), | |
r = v.merge(this.get(), n); | |
return this.pushStack(ut(n[0]) || ut(r[0]) ? r : v.unique(r)) | |
}, | |
addBack: function (e) { | |
return this.add(e == null ? this.prevObject : this.prevObject.filter(e)) | |
} | |
}), v.fn.andSelf = v.fn.addBack, v.each({ | |
parent: function (e) { | |
var t = e.parentNode; | |
return t && t.nodeType !== 11 ? t : null | |
}, | |
parents: function (e) { | |
return v.dir(e, "parentNode") | |
}, | |
parentsUntil: function (e, t, n) { | |
return v.dir(e, "parentNode", n) | |
}, | |
next: function (e) { | |
return at(e, "nextSibling") | |
}, | |
prev: function (e) { | |
return at(e, "previousSibling") | |
}, | |
nextAll: function (e) { | |
return v.dir(e, "nextSibling") | |
}, | |
prevAll: function (e) { | |
return v.dir(e, "previousSibling") | |
}, | |
nextUntil: function (e, t, n) { | |
return v.dir(e, "nextSibling", n) | |
}, | |
prevUntil: function (e, t, n) { | |
return v.dir(e, "previousSibling", n) | |
}, | |
siblings: function (e) { | |
return v.sibling((e.parentNode || {}).firstChild, e) | |
}, | |
children: function (e) { | |
return v.sibling(e.firstChild) | |
}, | |
contents: function (e) { | |
return v.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : v.merge([], e.childNodes) | |
} | |
}, function (e, t) { | |
v.fn[e] = function (n, r) { | |
var i = v.map(this, t, n); | |
return nt.test(e) || (r = n), r && typeof r == "string" && (i = v.filter(r, i)), i = this.length > 1 && !ot[e] ? v.unique(i) : i, this.length > 1 && rt.test(e) && (i = i.reverse()), this.pushStack(i, e, l.call(arguments).join(",")) | |
} | |
}), v.extend({ | |
filter: function (e, t, n) { | |
return n && (e = ":not(" + e + ")"), t.length === 1 ? v.find.matchesSelector(t[0], e) ? [t[0]] : [] : v.find.matches(e, t) | |
}, | |
dir: function (e, n, r) { | |
var i = [], | |
s = e[n]; | |
while (s && s.nodeType !== 9 && (r === t || s.nodeType !== 1 || !v(s).is(r))) s.nodeType === 1 && i.push(s), s = s[n]; | |
return i | |
}, | |
sibling: function (e, t) { | |
var n = []; | |
for (; e; e = e.nextSibling) e.nodeType === 1 && e !== t && n.push(e); | |
return n | |
} | |
}); | |
var ct = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", | |
ht = / jQuery\d+="(?:null|\d+)"/g, | |
pt = /^\s+/, | |
dt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, | |
vt = /<([\w:]+)/, | |
mt = /<tbody/i, | |
gt = /<|&#?\w+;/, | |
yt = /<(?:script|style|link)/i, | |
bt = /<(?:script|object|embed|option|style)/i, | |
wt = new RegExp("<(?:" + ct + ")[\\s/>]", "i"), | |
Et = /^(?:checkbox|radio)$/, | |
St = /checked\s*(?:[^=]|=\s*.checked.)/i, | |
xt = /\/(java|ecma)script/i, | |
Tt = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g, | |
Nt = { | |
option: [1, "<select multiple='multiple'>", "</select>"], | |
legend: [1, "<fieldset>", "</fieldset>"], | |
thead: [1, "<table>", "</table>"], | |
tr: [2, "<table><tbody>", "</tbody></table>"], | |
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], | |
col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], | |
area: [1, "<map>", "</map>"], | |
_default: [0, "", ""] | |
}, | |
Ct = lt(i), | |
kt = Ct.appendChild(i.createElement("div")); | |
Nt.optgroup = Nt.option, Nt.tbody = Nt.tfoot = Nt.colgroup = Nt.caption = Nt.thead, Nt.th = Nt.td, v.support.htmlSerialize || (Nt._default = [1, "X<div>", "</div>"]), v.fn.extend({ | |
text: function (e) { | |
return v.access(this, function (e) { | |
return e === t ? v.text(this) : this.empty().append((this[0] && this[0].ownerDocument || i).createTextNode(e)) | |
}, null, e, arguments.length) | |
}, | |
wrapAll: function (e) { | |
if (v.isFunction(e)) return this.each(function (t) { | |
v(this).wrapAll(e.call(this, t)) | |
}); | |
if (this[0]) { | |
var t = v(e, this[0].ownerDocument).eq(0).clone(!0); | |
this[0].parentNode && t.insertBefore(this[0]), t.map(function () { | |
var e = this; | |
while (e.firstChild && e.firstChild.nodeType === 1) e = e.firstChild; | |
return e | |
}).append(this) | |
} | |
return this | |
}, | |
wrapInner: function (e) { | |
return v.isFunction(e) ? this.each(function (t) { | |
v(this).wrapInner(e.call(this, t)) | |
}) : this.each(function () { | |
var t = v(this), | |
n = t.contents(); | |
n.length ? n.wrapAll(e) : t.append(e) | |
}) | |
}, | |
wrap: function (e) { | |
var t = v.isFunction(e); | |
return this.each(function (n) { | |
v(this).wrapAll(t ? e.call(this, n) : e) | |
}) | |
}, | |
unwrap: function () { | |
return this.parent().each(function () { | |
v.nodeName(this, "body") || v(this).replaceWith(this.childNodes) | |
}).end() | |
}, | |
append: function () { | |
return this.domManip(arguments, !0, function (e) { | |
(this.nodeType === 1 || this.nodeType === 11) && this.appendChild(e) | |
}) | |
}, | |
prepend: function () { | |
return this.domManip(arguments, !0, function (e) { | |
(this.nodeType === 1 || this.nodeType === 11) && this.insertBefore(e, this.firstChild) | |
}) | |
}, | |
before: function () { | |
if (!ut(this[0])) return this.domManip(arguments, !1, function (e) { | |
this.parentNode.insertBefore(e, this) | |
}); | |
if (arguments.length) { | |
var e = v.clean(arguments); | |
return this.pushStack(v.merge(e, this), "before", this.selector) | |
} | |
}, | |
after: function () { | |
if (!ut(this[0])) return this.domManip(arguments, !1, function (e) { | |
this.parentNode.insertBefore(e, this.nextSibling) | |
}); | |
if (arguments.length) { | |
var e = v.clean(arguments); | |
return this.pushStack(v.merge(this, e), "after", this.selector) | |
} | |
}, | |
remove: function (e, t) { | |
var n, r = 0; | |
for (; | |
(n = this[r]) != null; r++) | |
if (!e || v.filter(e, [n]).length) !t && n.nodeType === 1 && (v.cleanData(n.getElementsByTagName("*")), v.cleanData([n])), n.parentNode && n.parentNode.removeChild(n); | |
return this | |
}, | |
empty: function () { | |
var e, t = 0; | |
for (; | |
(e = this[t]) != null; t++) { | |
e.nodeType === 1 && v.cleanData(e.getElementsByTagName("*")); | |
while (e.firstChild) e.removeChild(e.firstChild) | |
} | |
return this | |
}, | |
clone: function (e, t) { | |
return e = e == null ? !1 : e, t = t == null ? e : t, this.map(function () { | |
return v.clone(this, e, t) | |
}) | |
}, | |
html: function (e) { | |
return v.access(this, function (e) { | |
var n = this[0] || {}, | |
r = 0, | |
i = this.length; | |
if (e === t) return n.nodeType === 1 ? n.innerHTML.replace(ht, "") : t; | |
if (typeof e == "string" && !yt.test(e) && (v.support.htmlSerialize || !wt.test(e)) && (v.support.leadingWhitespace || !pt.test(e)) && !Nt[(vt.exec(e) || ["", ""])[1].toLowerCase()]) { | |
e = e.replace(dt, "<$1></$2>"); | |
try { | |
for (; r < i; r++) n = this[r] || {}, n.nodeType === 1 && (v.cleanData(n.getElementsByTagName("*")), n.innerHTML = e); | |
n = 0 | |
} catch (s) { } | |
} | |
n && this.empty().append(e) | |
}, null, e, arguments.length) | |
}, | |
replaceWith: function (e) { | |
return ut(this[0]) ? this.length ? this.pushStack(v(v.isFunction(e) ? e() : e), "replaceWith", e) : this : v.isFunction(e) ? this.each(function (t) { | |
var n = v(this), | |
r = n.html(); | |
n.replaceWith(e.call(this, t, r)) | |
}) : (typeof e != "string" && (e = v(e).detach()), this.each(function () { | |
var t = this.nextSibling, | |
n = this.parentNode; | |
v(this).remove(), t ? v(t).before(e) : v(n).append(e) | |
})) | |
}, | |
detach: function (e) { | |
return this.remove(e, !0) | |
}, | |
domManip: function (e, n, r) { | |
e = [].concat.apply([], e); | |
var i, s, o, u, a = 0, | |
f = e[0], | |
l = [], | |
c = this.length; | |
if (!v.support.checkClone && c > 1 && typeof f == "string" && St.test(f)) return this.each(function () { | |
v(this).domManip(e, n, r) | |
}); | |
if (v.isFunction(f)) return this.each(function (i) { | |
var s = v(this); | |
e[0] = f.call(this, i, n ? s.html() : t), s.domManip(e, n, r) | |
}); | |
if (this[0]) { | |
i = v.buildFragment(e, this, l), o = i.fragment, s = o.firstChild, o.childNodes.length === 1 && (o = s); | |
if (s) { | |
n = n && v.nodeName(s, "tr"); | |
for (u = i.cacheable || c - 1; a < c; a++) r.call(n && v.nodeName(this[a], "table") ? Lt(this[a], "tbody") : this[a], a === u ? o : v.clone(o, !0, !0)) | |
} | |
o = s = null, l.length && v.each(l, function (e, t) { | |
t.src ? v.ajax ? v.ajax({ | |
url: t.src, | |
type: "GET", | |
dataType: "script", | |
async: !1, | |
global: !1, | |
"throws": !0 | |
}) : v.error("no ajax") : v.globalEval((t.text || t.textContent || t.innerHTML || "").replace(Tt, "")), t.parentNode && t.parentNode.removeChild(t) | |
}) | |
} | |
return this | |
} | |
}), v.buildFragment = function (e, n, r) { | |
var s, o, u, a = e[0]; | |
return n = n || i, n = !n.nodeType && n[0] || n, n = n.ownerDocument || n, e.length === 1 && typeof a == "string" && a.length < 512 && n === i && a.charAt(0) === "<" && !bt.test(a) && (v.support.checkClone || !St.test(a)) && (v.support.html5Clone || !wt.test(a)) && (o = !0, s = v.fragments[a], u = s !== t), s || (s = n.createDocumentFragment(), v.clean(e, n, s, r), o && (v.fragments[a] = u && s)), { | |
fragment: s, | |
cacheable: o | |
} | |
}, v.fragments = {}, v.each({ | |
appendTo: "append", | |
prependTo: "prepend", | |
insertBefore: "before", | |
insertAfter: "after", | |
replaceAll: "replaceWith" | |
}, function (e, t) { | |
v.fn[e] = function (n) { | |
var r, i = 0, | |
s = [], | |
o = v(n), | |
u = o.length, | |
a = this.length === 1 && this[0].parentNode; | |
if ((a == null || a && a.nodeType === 11 && a.childNodes.length === 1) && u === 1) return o[t](this[0]), this; | |
for (; i < u; i++) r = (i > 0 ? this.clone(!0) : this).get(), v(o[i])[t](r), s = s.concat(r); | |
return this.pushStack(s, e, o.selector) | |
} | |
}), v.extend({ | |
clone: function (e, t, n) { | |
var r, i, s, o; | |
v.support.html5Clone || v.isXMLDoc(e) || !wt.test("<" + e.nodeName + ">") ? o = e.cloneNode(!0) : (kt.innerHTML = e.outerHTML, kt.removeChild(o = kt.firstChild)); | |
if ((!v.support.noCloneEvent || !v.support.noCloneChecked) && (e.nodeType === 1 || e.nodeType === 11) && !v.isXMLDoc(e)) { | |
Ot(e, o), r = Mt(e), i = Mt(o); | |
for (s = 0; r[s]; ++s) i[s] && Ot(r[s], i[s]) | |
} | |
if (t) { | |
At(e, o); | |
if (n) { | |
r = Mt(e), i = Mt(o); | |
for (s = 0; r[s]; ++s) At(r[s], i[s]) | |
} | |
} | |
return r = i = null, o | |
}, | |
clean: function (e, t, n, r) { | |
var s, o, u, a, f, l, c, h, p, d, m, g, y = t === i && Ct, | |
b = []; | |
if (!t || typeof t.createDocumentFragment == "undefined") t = i; | |
for (s = 0; | |
(u = e[s]) != null; s++) { | |
typeof u == "number" && (u += ""); | |
if (!u) continue; | |
if (typeof u == "string") | |
if (!gt.test(u)) u = t.createTextNode(u); | |
else { | |
y = y || lt(t), c = t.createElement("div"), y.appendChild(c), u = u.replace(dt, "<$1></$2>"), a = (vt.exec(u) || ["", ""])[1].toLowerCase(), f = Nt[a] || Nt._default, l = f[0], c.innerHTML = f[1] + u + f[2]; | |
while (l--) c = c.lastChild; | |
if (!v.support.tbody) { | |
h = mt.test(u), p = a === "table" && !h ? c.firstChild && c.firstChild.childNodes : f[1] === "<table>" && !h ? c.childNodes : []; | |
for (o = p.length - 1; o >= 0; --o) v.nodeName(p[o], "tbody") && !p[o].childNodes.length && p[o].parentNode.removeChild(p[o]) | |
} !v.support.leadingWhitespace && pt.test(u) && c.insertBefore(t.createTextNode(pt.exec(u)[0]), c.firstChild), u = c.childNodes, c.parentNode.removeChild(c) | |
} u.nodeType ? b.push(u) : v.merge(b, u) | |
} | |
c && (u = c = y = null); | |
if (!v.support.appendChecked) | |
for (s = 0; | |
(u = b[s]) != null; s++) v.nodeName(u, "input") ? _t(u) : typeof u.getElementsByTagName != "undefined" && v.grep(u.getElementsByTagName("input"), _t); | |
if (n) { | |
m = function (e) { | |
if (!e.type || xt.test(e.type)) return r ? r.push(e.parentNode ? e.parentNode.removeChild(e) : e) : n.appendChild(e) | |
}; | |
for (s = 0; | |
(u = b[s]) != null; s++) | |
if (!v.nodeName(u, "script") || !m(u)) n.appendChild(u), typeof u.getElementsByTagName != "undefined" && (g = v.grep(v.merge([], u.getElementsByTagName("script")), m), b.splice.apply(b, [s + 1, 0].concat(g)), s += g.length) | |
} | |
return b | |
}, | |
cleanData: function (e, t) { | |
var n, r, i, s, o = 0, | |
u = v.expando, | |
a = v.cache, | |
f = v.support.deleteExpando, | |
l = v.event.special; | |
for (; | |
(i = e[o]) != null; o++) | |
if (t || v.acceptData(i)) { | |
r = i[u], n = r && a[r]; | |
if (n) { | |
if (n.events) | |
for (s in n.events) l[s] ? v.event.remove(i, s) : v.removeEvent(i, s, n.handle); | |
a[r] && (delete a[r], f ? delete i[u] : i.removeAttribute ? i.removeAttribute(u) : i[u] = null, v.deletedIds.push(r)) | |
} | |
} | |
} | |
}), | |
function () { | |
var e, t; | |
v.uaMatch = function (e) { | |
e = e.toLowerCase(); | |
var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || e.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || []; | |
return { | |
browser: t[1] || "", | |
version: t[2] || "0" | |
} | |
}, e = v.uaMatch(o.userAgent), t = {}, e.browser && (t[e.browser] = !0, t.version = e.version), t.chrome ? t.webkit = !0 : t.webkit && (t.safari = !0), v.browser = t, v.sub = function () { | |
function e(t, n) { | |
return new e.fn.init(t, n) | |
} | |
v.extend(!0, e, this), e.superclass = this, e.fn = e.prototype = this(), e.fn.constructor = e, e.sub = this.sub, e.fn.init = function (r, i) { | |
return i && i instanceof v && !(i instanceof e) && (i = e(i)), v.fn.init.call(this, r, i, t) | |
}, e.fn.init.prototype = e.fn; | |
var t = e(i); | |
return e | |
} | |
}(); | |
var Dt, Pt, Ht, Bt = /alpha\([^)]*\)/i, | |
jt = /opacity=([^)]*)/, | |
Ft = /^(top|right|bottom|left)$/, | |
It = /^(none|table(?!-c[ea]).+)/, | |
qt = /^margin/, | |
Rt = new RegExp("^(" + m + ")(.*)$", "i"), | |
Ut = new RegExp("^(" + m + ")(?!px)[a-z%]+$", "i"), | |
zt = new RegExp("^([-+])=(" + m + ")", "i"), | |
Wt = { | |
BODY: "block" | |
}, | |
Xt = { | |
position: "absolute", | |
visibility: "hidden", | |
display: "block" | |
}, | |
Vt = { | |
letterSpacing: 0, | |
fontWeight: 400 | |
}, | |
$t = ["Top", "Right", "Bottom", "Left"], | |
Jt = ["Webkit", "O", "Moz", "ms"], | |
Kt = v.fn.toggle; | |
v.fn.extend({ | |
css: function (e, n) { | |
return v.access(this, function (e, n, r) { | |
return r !== t ? v.style(e, n, r) : v.css(e, n) | |
}, e, n, arguments.length > 1) | |
}, | |
show: function () { | |
return Yt(this, !0) | |
}, | |
hide: function () { | |
return Yt(this) | |
}, | |
toggle: function (e, t) { | |
var n = typeof e == "boolean"; | |
return v.isFunction(e) && v.isFunction(t) ? Kt.apply(this, arguments) : this.each(function () { | |
(n ? e : Gt(this)) ? v(this).show() : v(this).hide() | |
}) | |
} | |
}), v.extend({ | |
cssHooks: { | |
opacity: { | |
get: function (e, t) { | |
if (t) { | |
var n = Dt(e, "opacity"); | |
return n === "" ? "1" : n | |
} | |
} | |
} | |
}, | |
cssNumber: { | |
fillOpacity: !0, | |
fontWeight: !0, | |
lineHeight: !0, | |
opacity: !0, | |
orphans: !0, | |
widows: !0, | |
zIndex: !0, | |
zoom: !0 | |
}, | |
cssProps: { | |
"float": v.support.cssFloat ? "cssFloat" : "styleFloat" | |
}, | |
style: function (e, n, r, i) { | |
if (!e || e.nodeType === 3 || e.nodeType === 8 || !e.style) return; | |
var s, o, u, a = v.camelCase(n), | |
f = e.style; | |
n = v.cssProps[a] || (v.cssProps[a] = Qt(f, a)), u = v.cssHooks[n] || v.cssHooks[a]; | |
if (r === t) return u && "get" in u && (s = u.get(e, !1, i)) !== t ? s : f[n]; | |
o = typeof r, o === "string" && (s = zt.exec(r)) && (r = (s[1] + 1) * s[2] + parseFloat(v.css(e, n)), o = "number"); | |
if (r == null || o === "number" && isNaN(r)) return; | |
o === "number" && !v.cssNumber[a] && (r += "px"); | |
if (!u || !("set" in u) || (r = u.set(e, r, i)) !== t) try { | |
f[n] = r | |
} catch (l) { } | |
}, | |
css: function (e, n, r, i) { | |
var s, o, u, a = v.camelCase(n); | |
return n = v.cssProps[a] || (v.cssProps[a] = Qt(e.style, a)), u = v.cssHooks[n] || v.cssHooks[a], u && "get" in u && (s = u.get(e, !0, i)), s === t && (s = Dt(e, n)), s === "normal" && n in Vt && (s = Vt[n]), r || i !== t ? (o = parseFloat(s), r || v.isNumeric(o) ? o || 0 : s) : s | |
}, | |
swap: function (e, t, n) { | |
var r, i, s = {}; | |
for (i in t) s[i] = e.style[i], e.style[i] = t[i]; | |
r = n.call(e); | |
for (i in t) e.style[i] = s[i]; | |
return r | |
} | |
}), e.getComputedStyle ? Dt = function (t, n) { | |
var r, i, s, o, u = e.getComputedStyle(t, null), | |
a = t.style; | |
return u && (r = u.getPropertyValue(n) || u[n], r === "" && !v.contains(t.ownerDocument, t) && (r = v.style(t, n)), Ut.test(r) && qt.test(n) && (i = a.width, s = a.minWidth, o = a.maxWidth, a.minWidth = a.maxWidth = a.width = r, r = u.width, a.width = i, a.minWidth = s, a.maxWidth = o)), r | |
} : i.documentElement.currentStyle && (Dt = function (e, t) { | |
var n, r, i = e.currentStyle && e.currentStyle[t], | |
s = e.style; | |
return i == null && s && s[t] && (i = s[t]), Ut.test(i) && !Ft.test(t) && (n = s.left, r = e.runtimeStyle && e.runtimeStyle.left, r && (e.runtimeStyle.left = e.currentStyle.left), s.left = t === "fontSize" ? "1em" : i, i = s.pixelLeft + "px", s.left = n, r && (e.runtimeStyle.left = r)), i === "" ? "auto" : i | |
}), v.each(["height", "width"], function (e, t) { | |
v.cssHooks[t] = { | |
get: function (e, n, r) { | |
if (n) return e.offsetWidth === 0 && It.test(Dt(e, "display")) ? v.swap(e, Xt, function () { | |
return tn(e, t, r) | |
}) : tn(e, t, r) | |
}, | |
set: function (e, n, r) { | |
return Zt(e, n, r ? en(e, t, r, v.support.boxSizing && v.css(e, "boxSizing") === "border-box") : 0) | |
} | |
} | |
}), v.support.opacity || (v.cssHooks.opacity = { | |
get: function (e, t) { | |
return jt.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : "" | |
}, | |
set: function (e, t) { | |
var n = e.style, | |
r = e.currentStyle, | |
i = v.isNumeric(t) ? "alpha(opacity=" + t * 100 + ")" : "", | |
s = r && r.filter || n.filter || ""; | |
n.zoom = 1; | |
if (t >= 1 && v.trim(s.replace(Bt, "")) === "" && n.removeAttribute) { | |
n.removeAttribute("filter"); | |
if (r && !r.filter) return | |
} | |
n.filter = Bt.test(s) ? s.replace(Bt, i) : s + " " + i | |
} | |
}), v(function () { | |
v.support.reliableMarginRight || (v.cssHooks.marginRight = { | |
get: function (e, t) { | |
return v.swap(e, { | |
display: "inline-block" | |
}, function () { | |
if (t) return Dt(e, "marginRight") | |
}) | |
} | |
}), !v.support.pixelPosition && v.fn.position && v.each(["top", "left"], function (e, t) { | |
v.cssHooks[t] = { | |
get: function (e, n) { | |
if (n) { | |
var r = Dt(e, t); | |
return Ut.test(r) ? v(e).position()[t] + "px" : r | |
} | |
} | |
} | |
}) | |
}), v.expr && v.expr.filters && (v.expr.filters.hidden = function (e) { | |
return e.offsetWidth === 0 && e.offsetHeight === 0 || !v.support.reliableHiddenOffsets && (e.style && e.style.display || Dt(e, "display")) === "none" | |
}, v.expr.filters.visible = function (e) { | |
return !v.expr.filters.hidden(e) | |
}), v.each({ | |
margin: "", | |
padding: "", | |
border: "Width" | |
}, function (e, t) { | |
v.cssHooks[e + t] = { | |
expand: function (n) { | |
var r, i = typeof n == "string" ? n.split(" ") : [n], | |
s = {}; | |
for (r = 0; r < 4; r++) s[e + $t[r] + t] = i[r] || i[r - 2] || i[0]; | |
return s | |
} | |
}, qt.test(e) || (v.cssHooks[e + t].set = Zt) | |
}); | |
var rn = /%20/g, | |
sn = /\[\]$/, | |
on = /\r?\n/g, | |
un = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, | |
an = /^(?:select|textarea)/i; | |
v.fn.extend({ | |
serialize: function () { | |
return v.param(this.serializeArray()) | |
}, | |
serializeArray: function () { | |
return this.map(function () { | |
return this.elements ? v.makeArray(this.elements) : this | |
}).filter(function () { | |
return this.name && !this.disabled && (this.checked || an.test(this.nodeName) || un.test(this.type)) | |
}).map(function (e, t) { | |
var n = v(this).val(); | |
return n == null ? null : v.isArray(n) ? v.map(n, function (e, n) { | |
return { | |
name: t.name, | |
value: e.replace(on, "\r\n") | |
} | |
}) : { | |
name: t.name, | |
value: n.replace(on, "\r\n") | |
} | |
}).get() | |
} | |
}), v.param = function (e, n) { | |
var r, i = [], | |
s = function (e, t) { | |
t = v.isFunction(t) ? t() : t == null ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t) | |
}; | |
n === t && (n = v.ajaxSettings && v.ajaxSettings.traditional); | |
if (v.isArray(e) || e.jquery && !v.isPlainObject(e)) v.each(e, function () { | |
s(this.name, this.value) | |
}); | |
else | |
for (r in e) fn(r, e[r], n, s); | |
return i.join("&").replace(rn, "+") | |
}; | |
var ln, cn, hn = /#.*$/, | |
pn = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, | |
dn = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, | |
vn = /^(?:GET|HEAD)$/, | |
mn = /^\/\//, | |
gn = /\?/, | |
yn = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, | |
bn = /([?&])_=[^&]*/, | |
wn = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, | |
En = v.fn.load, | |
Sn = {}, | |
xn = {}, | |
Tn = ["*/"] + ["*"]; | |
try { | |
cn = s.href | |
} catch (Nn) { | |
cn = i.createElement("a"), cn.href = "", cn = cn.href | |
} | |
ln = wn.exec(cn.toLowerCase()) || [], v.fn.load = function (e, n, r) { | |
if (typeof e != "string" && En) return En.apply(this, arguments); | |
if (!this.length) return this; | |
var i, s, o, u = this, | |
a = e.indexOf(" "); | |
return a >= 0 && (i = e.slice(a, e.length), e = e.slice(0, a)), v.isFunction(n) ? (r = n, n = t) : n && typeof n == "object" && (s = "POST"), v.ajax({ | |
url: e, | |
type: s, | |
dataType: "html", | |
data: n, | |
complete: function (e, t) { | |
r && u.each(r, o || [e.responseText, t, e]) | |
} | |
}).done(function (e) { | |
o = arguments, u.html(i ? v("<div>").append(e.replace(yn, "")).find(i) : e) | |
}), this | |
}, v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function (e, t) { | |
v.fn[t] = function (e) { | |
return this.on(t, e) | |
} | |
}), v.each(["get", "post"], function (e, n) { | |
v[n] = function (e, r, i, s) { | |
return v.isFunction(r) && (s = s || i, i = r, r = t), v.ajax({ | |
type: n, | |
url: e, | |
data: r, | |
success: i, | |
dataType: s | |
}) | |
} | |
}), v.extend({ | |
getScript: function (e, n) { | |
return v.get(e, t, n, "script") | |
}, | |
getJSON: function (e, t, n) { | |
return v.get(e, t, n, "json") | |
}, | |
ajaxSetup: function (e, t) { | |
return t ? Ln(e, v.ajaxSettings) : (t = e, e = v.ajaxSettings), Ln(e, t), e | |
}, | |
ajaxSettings: { | |
url: cn, | |
isLocal: dn.test(ln[1]), | |
global: !0, | |
type: "GET", | |
contentType: "application/x-www-form-urlencoded; charset=UTF-8", | |
processData: !0, | |
async: !0, | |
accepts: { | |
xml: "application/xml, text/xml", | |
html: "text/html", | |
text: "text/plain", | |
json: "application/json, text/javascript", | |
"*": Tn | |
}, | |
contents: { | |
xml: /xml/, | |
html: /html/, | |
json: /json/ | |
}, | |
responseFields: { | |
xml: "responseXML", | |
text: "responseText" | |
}, | |
converters: { | |
"* text": e.String, | |
"text html": !0, | |
"text json": v.parseJSON, | |
"text xml": v.parseXML | |
}, | |
flatOptions: { | |
context: !0, | |
url: !0 | |
} | |
}, | |
ajaxPrefilter: Cn(Sn), | |
ajaxTransport: Cn(xn), | |
ajax: function (e, n) { | |
function T(e, n, s, a) { | |
var l, y, b, w, S, T = n; | |
if (E === 2) return; | |
E = 2, u && clearTimeout(u), o = t, i = a || "", x.readyState = e > 0 ? 4 : 0, s && (w = An(c, x, s)); | |
if (e >= 200 && e < 300 || e === 304) c.ifModified && (S = x.getResponseHeader("Last-Modified"), S && (v.lastModified[r] = S), S = x.getResponseHeader("Etag"), S && (v.etag[r] = S)), e === 304 ? (T = "notmodified", l = !0) : (l = On(c, w), T = l.state, y = l.data, b = l.error, l = !b); | |
else { | |
b = T; | |
if (!T || e) T = "error", e < 0 && (e = 0) | |
} | |
x.status = e, x.statusText = (n || T) + "", l ? d.resolveWith(h, [y, T, x]) : d.rejectWith(h, [x, T, b]), x.statusCode(g), g = t, f && p.trigger("ajax" + (l ? "Success" : "Error"), [x, c, l ? y : b]), m.fireWith(h, [x, T]), f && (p.trigger("ajaxComplete", [x, c]), --v.active || v.event.trigger("ajaxStop")) | |
} | |
typeof e == "object" && (n = e, e = t), n = n || {}; | |
var r, i, s, o, u, a, f, l, c = v.ajaxSetup({}, n), | |
h = c.context || c, | |
p = h !== c && (h.nodeType || h instanceof v) ? v(h) : v.event, | |
d = v.Deferred(), | |
m = v.Callbacks("once memory"), | |
g = c.statusCode || {}, | |
b = {}, | |
w = {}, | |
E = 0, | |
S = "canceled", | |
x = { | |
readyState: 0, | |
setRequestHeader: function (e, t) { | |
if (!E) { | |
var n = e.toLowerCase(); | |
e = w[n] = w[n] || e, b[e] = t | |
} | |
return this | |
}, | |
getAllResponseHeaders: function () { | |
return E === 2 ? i : null | |
}, | |
getResponseHeader: function (e) { | |
var n; | |
if (E === 2) { | |
if (!s) { | |
s = {}; | |
while (n = pn.exec(i)) s[n[1].toLowerCase()] = n[2] | |
} | |
n = s[e.toLowerCase()] | |
} | |
return n === t ? null : n | |
}, | |
overrideMimeType: function (e) { | |
return E || (c.mimeType = e), this | |
}, | |
abort: function (e) { | |
return e = e || S, o && o.abort(e), T(0, e), this | |
} | |
}; | |
d.promise(x), x.success = x.done, x.error = x.fail, x.complete = m.add, x.statusCode = function (e) { | |
if (e) { | |
var t; | |
if (E < 2) | |
for (t in e) g[t] = [g[t], e[t]]; | |
else t = e[x.status], x.always(t) | |
} | |
return this | |
}, c.url = ((e || c.url) + "").replace(hn, "").replace(mn, ln[1] + "//"), c.dataTypes = v.trim(c.dataType || "*").toLowerCase().split(y), c.crossDomain == null && (a = wn.exec(c.url.toLowerCase()), c.crossDomain = !(!a || a[1] === ln[1] && a[2] === ln[2] && (a[3] || (a[1] === "http:" ? 80 : 443)) == (ln[3] || (ln[1] === "http:" ? 80 : 443)))), c.data && c.processData && typeof c.data != "string" && (c.data = v.param(c.data, c.traditional)), kn(Sn, c, n, x); | |
if (E === 2) return x; | |
f = c.global, c.type = c.type.toUpperCase(), c.hasContent = !vn.test(c.type), f && v.active++ === 0 && v.event.trigger("ajaxStart"); | |
if (!c.hasContent) { | |
c.data && (c.url += (gn.test(c.url) ? "&" : "?") + c.data, delete c.data), r = c.url; | |
if (c.cache === !1) { | |
var N = v.now(), | |
C = c.url.replace(bn, "$1_=" + N); | |
c.url = C + (C === c.url ? (gn.test(c.url) ? "&" : "?") + "_=" + N : "") | |
} | |
} (c.data && c.hasContent && c.contentType !== !1 || n.contentType) && x.setRequestHeader("Content-Type", c.contentType), c.ifModified && (r = r || c.url, v.lastModified[r] && x.setRequestHeader("If-Modified-Since", v.lastModified[r]), v.etag[r] && x.setRequestHeader("If-None-Match", v.etag[r])), x.setRequestHeader("Accept", c.dataTypes[0] && c.accepts[c.dataTypes[0]] ? c.accepts[c.dataTypes[0]] + (c.dataTypes[0] !== "*" ? ", " + Tn + "; q=0.01" : "") : c.accepts["*"]); | |
for (l in c.headers) x.setRequestHeader(l, c.headers[l]); | |
if (!c.beforeSend || c.beforeSend.call(h, x, c) !== !1 && E !== 2) { | |
S = "abort"; | |
for (l in { | |
success: 1, | |
error: 1, | |
complete: 1 | |
}) x[l](c[l]); | |
o = kn(xn, c, n, x); | |
if (!o) T(-1, "No Transport"); | |
else { | |
x.readyState = 1, f && p.trigger("ajaxSend", [x, c]), c.async && c.timeout > 0 && (u = setTimeout(function () { | |
x.abort("timeout") | |
}, c.timeout)); | |
try { | |
E = 1, o.send(b, T) | |
} catch (k) { | |
if (!(E < 2)) throw k; | |
T(-1, k) | |
} | |
} | |
return x | |
} | |
return x.abort() | |
}, | |
active: 0, | |
lastModified: {}, | |
etag: {} | |
}); | |
var Mn = [], | |
_n = /\?/, | |
Dn = /(=)\?(?=&|$)|\?\?/, | |
Pn = v.now(); | |
v.ajaxSetup({ | |
jsonp: "callback", | |
jsonpCallback: function () { | |
var e = Mn.pop() || v.expando + "_" + Pn++; | |
return this[e] = !0, e | |
} | |
}), v.ajaxPrefilter("json jsonp", function (n, r, i) { | |
var s, o, u, a = n.data, | |
f = n.url, | |
l = n.jsonp !== !1, | |
c = l && Dn.test(f), | |
h = l && !c && typeof a == "string" && !(n.contentType || "").indexOf("application/x-www-form-urlencoded") && Dn.test(a); | |
if (n.dataTypes[0] === "jsonp" || c || h) return s = n.jsonpCallback = v.isFunction(n.jsonpCallback) ? n.jsonpCallback() : n.jsonpCallback, o = e[s], c ? n.url = f.replace(Dn, "$1" + s) : h ? n.data = a.replace(Dn, "$1" + s) : l && (n.url += (_n.test(f) ? "&" : "?") + n.jsonp + "=" + s), n.converters["script json"] = function () { | |
return u || v.error(s + " was not called"), u[0] | |
}, n.dataTypes[0] = "json", e[s] = function () { | |
u = arguments | |
}, i.always(function () { | |
e[s] = o, n[s] && (n.jsonpCallback = r.jsonpCallback, Mn.push(s)), u && v.isFunction(o) && o(u[0]), u = o = t | |
}), "script" | |
}), v.ajaxSetup({ | |
accepts: { | |
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" | |
}, | |
contents: { | |
script: /javascript|ecmascript/ | |
}, | |
converters: { | |
"text script": function (e) { | |
return v.globalEval(e), e | |
} | |
} | |
}), v.ajaxPrefilter("script", function (e) { | |
e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1) | |
}), v.ajaxTransport("script", function (e) { | |
if (e.crossDomain) { | |
var n, r = i.head || i.getElementsByTagName("head")[0] || i.documentElement; | |
return { | |
send: function (s, o) { | |
n = i.createElement("script"), n.async = "async", e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function (e, i) { | |
if (i || !n.readyState || /loaded|complete/.test(n.readyState)) n.onload = n.onreadystatechange = null, r && n.parentNode && r.removeChild(n), n = t, i || o(200, "success") | |
}, r.insertBefore(n, r.firstChild) | |
}, | |
abort: function () { | |
n && n.onload(0, 1) | |
} | |
} | |
} | |
}); | |
var Hn, Bn = e.ActiveXObject ? function () { | |
for (var e in Hn) Hn[e](0, 1) | |
} : !1, | |
jn = 0; | |
v.ajaxSettings.xhr = e.ActiveXObject ? function () { | |
return !this.isLocal && Fn() || In() | |
} : Fn, | |
function (e) { | |
v.extend(v.support, { | |
ajax: !!e, | |
cors: !!e && "withCredentials" in e | |
}) | |
}(v.ajaxSettings.xhr()), v.support.ajax && v.ajaxTransport(function (n) { | |
if (!n.crossDomain || v.support.cors) { | |
var r; | |
return { | |
send: function (i, s) { | |
var o, u, a = n.xhr(); | |
n.username ? a.open(n.type, n.url, n.async, n.username, n.password) : a.open(n.type, n.url, n.async); | |
if (n.xhrFields) | |
for (u in n.xhrFields) a[u] = n.xhrFields[u]; | |
n.mimeType && a.overrideMimeType && a.overrideMimeType(n.mimeType), !n.crossDomain && !i["X-Requested-With"] && (i["X-Requested-With"] = "XMLHttpRequest"); | |
try { | |
for (u in i) a.setRequestHeader(u, i[u]) | |
} catch (f) { } | |
a.send(n.hasContent && n.data || null), r = function (e, i) { | |
var u, f, l, c, h; | |
try { | |
if (r && (i || a.readyState === 4)) { | |
r = t, o && (a.onreadystatechange = v.noop, Bn && delete Hn[o]); | |
if (i) a.readyState !== 4 && a.abort(); | |
else { | |
u = a.status, l = a.getAllResponseHeaders(), c = {}, h = a.responseXML, h && h.documentElement && (c.xml = h); | |
try { | |
c.text = a.responseText | |
} catch (p) { } | |
try { | |
f = a.statusText | |
} catch (p) { | |
f = "" | |
} !u && n.isLocal && !n.crossDomain ? u = c.text ? 200 : 404 : u === 1223 && (u = 204) | |
} | |
} | |
} catch (d) { | |
i || s(-1, d) | |
} | |
c && s(u, f, c, l) | |
}, n.async ? a.readyState === 4 ? setTimeout(r, 0) : (o = ++jn, Bn && (Hn || (Hn = {}, v(e).unload(Bn)), Hn[o] = r), a.onreadystatechange = r) : r() | |
}, | |
abort: function () { | |
r && r(0, 1) | |
} | |
} | |
} | |
}); | |
var qn, Rn, Un = /^(?:toggle|show|hide)$/, | |
zn = new RegExp("^(?:([-+])=|)(" + m + ")([a-z%]*)$", "i"), | |
Wn = /queueHooks$/, | |
Xn = [Gn], | |
Vn = { | |
"*": [function (e, t) { | |
var n, r, i = this.createTween(e, t), | |
s = zn.exec(t), | |
o = i.cur(), | |
u = +o || 0, | |
a = 1, | |
f = 20; | |
if (s) { | |
n = +s[2], r = s[3] || (v.cssNumber[e] ? "" : "px"); | |
if (r !== "px" && u) { | |
u = v.css(i.elem, e, !0) || n || 1; | |
do a = a || ".5", u /= a, v.style(i.elem, e, u + r); while (a !== (a = i.cur() / o) && a !== 1 && --f) | |
} | |
i.unit = r, i.start = u, i.end = s[1] ? u + (s[1] + 1) * n : n | |
} | |
return i | |
}] | |
}; | |
v.Animation = v.extend(Kn, { | |
tweener: function (e, t) { | |
v.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" "); | |
var n, r = 0, | |
i = e.length; | |
for (; r < i; r++) n = e[r], Vn[n] = Vn[n] || [], Vn[n].unshift(t) | |
}, | |
prefilter: function (e, t) { | |
t ? Xn.unshift(e) : Xn.push(e) | |
} | |
}), v.Tween = Yn, Yn.prototype = { | |
constructor: Yn, | |
init: function (e, t, n, r, i, s) { | |
this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = s || (v.cssNumber[n] ? "" : "px") | |
}, | |
cur: function () { | |
var e = Yn.propHooks[this.prop]; | |
return e && e.get ? e.get(this) : Yn.propHooks._default.get(this) | |
}, | |
run: function (e) { | |
var t, n = Yn.propHooks[this.prop]; | |
return this.options.duration ? this.pos = t = v.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : Yn.propHooks._default.set(this), this | |
} | |
}, Yn.prototype.init.prototype = Yn.prototype, Yn.propHooks = { | |
_default: { | |
get: function (e) { | |
var t; | |
return e.elem[e.prop] == null || !!e.elem.style && e.elem.style[e.prop] != null ? (t = v.css(e.elem, e.prop, !1, ""), !t || t === "auto" ? 0 : t) : e.elem[e.prop] | |
}, | |
set: function (e) { | |
v.fx.step[e.prop] ? v.fx.step[e.prop](e) : e.elem.style && (e.elem.style[v.cssProps[e.prop]] != null || v.cssHooks[e.prop]) ? v.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now | |
} | |
} | |
}, Yn.propHooks.scrollTop = Yn.propHooks.scrollLeft = { | |
set: function (e) { | |
e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) | |
} | |
}, v.each(["toggle", "show", "hide"], function (e, t) { | |
var n = v.fn[t]; | |
v.fn[t] = function (r, i, s) { | |
return r == null || typeof r == "boolean" || !e && v.isFunction(r) && v.isFunction(i) ? n.apply(this, arguments) : this.animate(Zn(t, !0), r, i, s) | |
} | |
}), v.fn.extend({ | |
fadeTo: function (e, t, n, r) { | |
return this.filter(Gt).css("opacity", 0).show().end().animate({ | |
opacity: t | |
}, e, n, r) | |
}, | |
animate: function (e, t, n, r) { | |
var i = v.isEmptyObject(e), | |
s = v.speed(t, n, r), | |
o = function () { | |
var t = Kn(this, v.extend({}, e), s); | |
i && t.stop(!0) | |
}; | |
return i || s.queue === !1 ? this.each(o) : this.queue(s.queue, o) | |
}, | |
stop: function (e, n, r) { | |
var i = function (e) { | |
var t = e.stop; | |
delete e.stop, t(r) | |
}; | |
return typeof e != "string" && (r = n, n = e, e = t), n && e !== !1 && this.queue(e || "fx", []), this.each(function () { | |
var t = !0, | |
n = e != null && e + "queueHooks", | |
s = v.timers, | |
o = v._data(this); | |
if (n) o[n] && o[n].stop && i(o[n]); | |
else | |
for (n in o) o[n] && o[n].stop && Wn.test(n) && i(o[n]); | |
for (n = s.length; n--;) s[n].elem === this && (e == null || s[n].queue === e) && (s[n].anim.stop(r), t = !1, s.splice(n, 1)); | |
(t || !r) && v.dequeue(this, e) | |
}) | |
} | |
}), v.each({ | |
slideDown: Zn("show"), | |
slideUp: Zn("hide"), | |
slideToggle: Zn("toggle"), | |
fadeIn: { | |
opacity: "show" | |
}, | |
fadeOut: { | |
opacity: "hide" | |
}, | |
fadeToggle: { | |
opacity: "toggle" | |
} | |
}, function (e, t) { | |
v.fn[e] = function (e, n, r) { | |
return this.animate(t, e, n, r) | |
} | |
}), v.speed = function (e, t, n) { | |
var r = e && typeof e == "object" ? v.extend({}, e) : { | |
complete: n || !n && t || v.isFunction(e) && e, | |
duration: e, | |
easing: n && t || t && !v.isFunction(t) && t | |
}; | |
r.duration = v.fx.off ? 0 : typeof r.duration == "number" ? r.duration : r.duration in v.fx.speeds ? v.fx.speeds[r.duration] : v.fx.speeds._default; | |
if (r.queue == null || r.queue === !0) r.queue = "fx"; | |
return r.old = r.complete, r.complete = function () { | |
v.isFunction(r.old) && r.old.call(this), r.queue && v.dequeue(this, r.queue) | |
}, r | |
}, v.easing = { | |
linear: function (e) { | |
return e | |
}, | |
swing: function (e) { | |
return .5 - Math.cos(e * Math.PI) / 2 | |
} | |
}, v.timers = [], v.fx = Yn.prototype.init, v.fx.tick = function () { | |
var e, n = v.timers, | |
r = 0; | |
qn = v.now(); | |
for (; r < n.length; r++) e = n[r], !e() && n[r] === e && n.splice(r--, 1); | |
n.length || v.fx.stop(), qn = t | |
}, v.fx.timer = function (e) { | |
e() && v.timers.push(e) && !Rn && (Rn = setInterval(v.fx.tick, v.fx.interval)) | |
}, v.fx.interval = 13, v.fx.stop = function () { | |
clearInterval(Rn), Rn = null | |
}, v.fx.speeds = { | |
slow: 600, | |
fast: 200, | |
_default: 400 | |
}, v.fx.step = {}, v.expr && v.expr.filters && (v.expr.filters.animated = function (e) { | |
return v.grep(v.timers, function (t) { | |
return e === t.elem | |
}).length | |
}); | |
var er = /^(?:body|html)$/i; | |
v.fn.offset = function (e) { | |
if (arguments.length) return e === t ? this : this.each(function (t) { | |
v.offset.setOffset(this, e, t) | |
}); | |
var n, r, i, s, o, u, a, f = { | |
top: 0, | |
left: 0 | |
}, | |
l = this[0], | |
c = l && l.ownerDocument; | |
if (!c) return; | |
return (r = c.body) === l ? v.offset.bodyOffset(l) : (n = c.documentElement, v.contains(n, l) ? (typeof l.getBoundingClientRect != "undefined" && (f = l.getBoundingClientRect()), i = tr(c), s = n.clientTop || r.clientTop || 0, o = n.clientLeft || r.clientLeft || 0, u = i.pageYOffset || n.scrollTop, a = i.pageXOffset || n.scrollLeft, { | |
top: f.top + u - s, | |
left: f.left + a - o | |
}) : f) | |
}, v.offset = { | |
bodyOffset: function (e) { | |
var t = e.offsetTop, | |
n = e.offsetLeft; | |
return v.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(v.css(e, "marginTop")) || 0, n += parseFloat(v.css(e, "marginLeft")) || 0), { | |
top: t, | |
left: n | |
} | |
}, | |
setOffset: function (e, t, n) { | |
var r = v.css(e, "position"); | |
r === "static" && (e.style.position = "relative"); | |
var i = v(e), | |
s = i.offset(), | |
o = v.css(e, "top"), | |
u = v.css(e, "left"), | |
a = (r === "absolute" || r === "fixed") && v.inArray("auto", [o, u]) > -1, | |
f = {}, | |
l = {}, | |
c, h; | |
a ? (l = i.position(), c = l.top, h = l.left) : (c = parseFloat(o) || 0, h = parseFloat(u) || 0), v.isFunction(t) && (t = t.call(e, n, s)), t.top != null && (f.top = t.top - s.top + c), t.left != null && (f.left = t.left - s.left + h), "using" in t ? t.using.call(e, f) : i.css(f) | |
} | |
}, v.fn.extend({ | |
position: function () { | |
if (!this[0]) return; | |
var e = this[0], | |
t = this.offsetParent(), | |
n = this.offset(), | |
r = er.test(t[0].nodeName) ? { | |
top: 0, | |
left: 0 | |
} : t.offset(); | |
return n.top -= parseFloat(v.css(e, "marginTop")) || 0, n.left -= parseFloat(v.css(e, "marginLeft")) || 0, r.top += parseFloat(v.css(t[0], "borderTopWidth")) || 0, r.left += parseFloat(v.css(t[0], "borderLeftWidth")) || 0, { | |
top: n.top - r.top, | |
left: n.left - r.left | |
} | |
}, | |
offsetParent: function () { | |
return this.map(function () { | |
var e = this.offsetParent || i.body; | |
while (e && !er.test(e.nodeName) && v.css(e, "position") === "static") e = e.offsetParent; | |
return e || i.body | |
}) | |
} | |
}), v.each({ | |
scrollLeft: "pageXOffset", | |
scrollTop: "pageYOffset" | |
}, function (e, n) { | |
var r = /Y/.test(n); | |
v.fn[e] = function (i) { | |
return v.access(this, function (e, i, s) { | |
var o = tr(e); | |
if (s === t) return o ? n in o ? o[n] : o.document.documentElement[i] : e[i]; | |
o ? o.scrollTo(r ? v(o).scrollLeft() : s, r ? s : v(o).scrollTop()) : e[i] = s | |
}, e, i, arguments.length, null) | |
} | |
}), v.each({ | |
Height: "height", | |
Width: "width" | |
}, function (e, n) { | |
v.each({ | |
padding: "inner" + e, | |
content: n, | |
"": "outer" + e | |
}, function (r, i) { | |
v.fn[i] = function (i, s) { | |
var o = arguments.length && (r || typeof i != "boolean"), | |
u = r || (i === !0 || s === !0 ? "margin" : "border"); | |
return v.access(this, function (n, r, i) { | |
var s; | |
return v.isWindow(n) ? n.document.documentElement["client" + e] : n.nodeType === 9 ? (s = n.documentElement, Math.max(n.body["scroll" + e], s["scroll" + e], n.body["offset" + e], s["offset" + e], s["client" + e])) : i === t ? v.css(n, r, i, u) : v.style(n, r, i, u) | |
}, n, o ? i : t, o, null) | |
} | |
}) | |
}), e.jQuery = e.$ = v, typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], function () { | |
return v | |
}) | |
})(window); | |
</script> | |
<!-- Main Minesweeper Code --> | |
<script type="text/javascript"> | |
/** | |
* @class | |
* @param A | |
* @param {Function} Q | |
* @param {Function} s | |
*/ | |
function Minesweeper(A, Q, s) { | |
var E = this; | |
var gti; | |
var rows; | |
var cols; | |
var mines; | |
var zoomlvl; | |
var er | |
/** | |
* @inner | |
* Grid Obj | |
*/ | |
var o; | |
/** | |
* @inner | |
* if "ae" in newGame exists, is true. Otherwise, is false | |
*/ | |
var p; | |
/** | |
* @inner | |
* Number of mines for the newGame function | |
*/ | |
var K; | |
/** | |
* @inner | |
* Number of non-mines for the newGame function | |
*/ | |
var G; | |
/** | |
* @inner | |
* Grid Management Varible | |
*/ | |
var I; | |
/** | |
* @inner | |
* Array containing the square pressed/hovered | |
*/ | |
var c; | |
/** | |
* @inner | |
* Time Varible | |
*/ | |
var U = new TimeManager(); | |
/** | |
* @inner | |
* Game Over Varible | |
*/ | |
var L; | |
/** | |
* @inner | |
* Playing Varible | |
*/ | |
var g; | |
/** | |
* @inner | |
* Backup Grid Managment | |
*/ | |
var M; | |
/** | |
* @inner | |
* Game ID | |
*/ | |
var r; | |
/** | |
* tests if the browser is compatable | |
*/ | |
var k; | |
/** | |
* @inner | |
* Mouse Press Tracker | |
*/ | |
var D; | |
/** | |
* @inner | |
* Mouse Press Tracker | |
*/ | |
var e; | |
/** | |
* @inner | |
* Mouse Press Tracker | |
*/ | |
var v; | |
/** | |
* @inner | |
* Unknown, set to Null in newGame, called by ae(), but not changed, and not needed | |
*/ | |
var d; | |
/** | |
* @inner | |
* Gusture Tracker | |
*/ | |
var C; | |
/** | |
* @inner | |
* Likely First-Press protection | |
*/ | |
var y; | |
Setup(); | |
this.newGame = function (ae, Y) { | |
var af, ab; | |
var ad; | |
var aa, ac; | |
var Z; | |
er = undefined | |
aa = gameSettingString(); | |
Z = Q(); | |
gti = Z.gameTypeId; | |
rows = Z.numRows; | |
cols = Z.numCols; | |
mines = Z.numMines; | |
zoomlvl = Z.zoom; | |
if (Y) { | |
if (typeof Y.gameTypeId !== "undefined") { | |
gti = Y.gameTypeId | |
} | |
if (typeof Y.numRows !== "undefined") { | |
rows = Y.numRows | |
} | |
if (typeof Y.numCols !== "undefined") { | |
cols = Y.numCols | |
} | |
if (typeof Y.numMines !== "undefined") { | |
mines = Y.numMines | |
} | |
} | |
ac = (gameSettingString() != aa); | |
setZoom(zoomlvl); | |
if (ac) { | |
gridGen() | |
} | |
mineLayer(ae); | |
setO(); | |
p = !!ae; | |
K = mines; | |
G = rows * cols - mines; | |
for (af = 1; af <= rows; af++) { | |
for (ab = 1; ab <= cols; ab++) { | |
ad = I[af][ab]; | |
if (ad.isFlagged()) { | |
ad.setClass("square bombflagged"); | |
K-- | |
} else { | |
if (ad.isMarked()) { | |
ad.setClass("square question") | |
} else { | |
if (ad.isRevealed()) { | |
ad.setClass("square open" + ad.getValue()); | |
if (!ad.isHidden()) { | |
G-- | |
} | |
} else { | |
ad.setClass("square blank") | |
} | |
} | |
} | |
} | |
} | |
U.stop(); | |
if (!p) { | |
U.setTime(0) | |
} else { | |
if (Y && typeof Y.time !== "undefined") { | |
U.setTime(Y.time) | |
} else { } | |
} | |
updateMines(); | |
L = false; | |
g = false; | |
D = false; | |
e = false; | |
v = false; | |
isMouseDownForCtrlClick = false; | |
d = null; | |
C = false; | |
y = false; | |
$("#face")[0].className = "facesmile"; | |
hoveredSquareId = "" | |
}; | |
this.resize = function (Y) { | |
var Z = zoomMargin(Y); | |
setZoom(Y); | |
$("#game-container").removeClass("getGrid" + zoomlvl * 100).addClass("getGrid" + Y * 100); | |
$("#face").css({ | |
"margin-left": Math.floor(Z) + "px", | |
"margin-right": Math.ceil(Z) + "px" | |
}); | |
zoomlvl = Y | |
}; | |
this.hasStartedPlaying = function () { | |
return g | |
}; | |
this.export_ = function () { | |
var aa = getGrid(true); | |
var Z = U.getTime(); | |
var Y = { | |
version: 1, | |
gameTypeId: gti, | |
numRows: rows, | |
numCols: cols, | |
numMines: mines, | |
gridObj: aa, | |
time: Z | |
}; | |
y = true; | |
return btoa(JSON.stringify(Y)) | |
}; | |
this.isImportable = function (aa) { | |
try { | |
var Y = JSON.parse(atob(aa)); | |
return Y.version === 1 | |
} catch (Z) { | |
return false | |
} | |
}; | |
this.import_ = function (ae) { | |
var aa = JSON.parse(atob(ae)); | |
var ag, Z; | |
var af, ad; | |
var ac = []; | |
for (ag = 0; ag <= aa.numRows + 1; ag++) { | |
ac[ag] = []; | |
for (Z = 0; Z <= aa.numCols + 1; Z++) { | |
af = aa.gridObj[ag][Z]; | |
if (typeof af === "number") { | |
ad = { | |
value: af, | |
isRevealed: false, | |
isFlagged: false, | |
isMarked: false | |
} | |
} else { | |
ad = { | |
value: af[0], | |
isRevealed: af[1] === 1, | |
isFlagged: af[2] === 1, | |
isMarked: af[3] === 1 | |
} | |
} | |
ac[ag][Z] = ad | |
} | |
} | |
var Y = { | |
gridObj: ac | |
}; | |
var ab = { | |
gameTypeId: aa.gameTypeId, | |
numRows: aa.numRows, | |
numCols: aa.numCols, | |
numMines: aa.numMines, | |
time: aa.time | |
}; | |
s({ | |
gameTypeId: aa.gameTypeId, | |
numRows: aa.numRows, | |
numCols: aa.numCols, | |
numMines: aa.numMines | |
}); | |
E.newGame(Y, ab) | |
}; | |
/** | |
* | |
* @param {number} Y Zoom Level (1 <= Y >= 2) | |
* @description | |
* Sets the zoom values for the game | |
*/ | |
function setZoom(Y) { | |
$("#game-container, #game").width(Y * (cols * 16 + 20)); | |
$("#game").height(Y * (rows * 16 + 30 + 26 + 6)) | |
} | |
/** | |
* | |
* @param {number} Y Zoom Level | |
* @description | |
* Returns a special margin value for use in the gridGen function as the margins of the smile | |
*/ | |
function zoomMargin(Y) { | |
return (Y * cols * 16 - 6 * Math.ceil(Y * 13) - Y * 2 * 6 - Y * 26) / 2 | |
} | |
/** | |
* Returns a string with a "ROW_COL_MINES" format | |
*/ | |
function gameSettingString() { | |
return rows + "_" + cols + "_" + mines | |
} | |
/** | |
* Makes a new minesweeper grid for the site | |
*/ | |
function gridGen() { | |
var ab, Y; | |
var Z = []; | |
var aa = zoomMargin(zoomlvl); | |
Z.push('<div class="bordertl"></div>'); | |
for (Y = 0; Y < cols; Y++) { | |
Z.push('<div class="bordertb"></div>') | |
} | |
Z.push('<div class="bordertr"></div>'); | |
Z.push('<div class="borderlrlong"></div>', '<div class="time0" id="mines_hundreds"></div>', '<div class="time0" id="mines_tens"></div>', '<div class="time0" id="mines_ones"></div>', '<div class="facesmile" style="margin-left:', Math.floor(aa), "px; margin-right: ", Math.ceil(aa), 'px;" id="face"></div>', '<div class="time0" id="seconds_hundreds"></div>', '<div class="time0" id="seconds_tens"></div>', '<div class="time0" id="seconds_ones"></div>', '<div class="borderlrlong"></div>'); | |
Z.push('<div class="borderjointl"></div>'); | |
for (Y = 0; Y < cols; Y++) { | |
Z.push('<div class="bordertb"></div>') | |
} | |
Z.push('<div class="borderjointr"></div>'); | |
for (ab = 1; ab <= rows; ab++) { | |
Z.push('<div class="borderlr"></div>'); | |
for (Y = 1; Y <= cols; Y++) { | |
Z.push('<div class="square blank" id="', ab, "_", Y, '"></div>') | |
} | |
Z.push('<div class="borderlr"></div>') | |
} | |
Z.push('<div class="borderbl"></div>'); | |
for (Y = 0; Y < cols; Y++) { | |
Z.push('<div class="bordertb"></div>') | |
} | |
Z.push('<div class="borderbr"></div>'); | |
for (Y = 0; Y <= cols + 1; Y++) { | |
Z.push('<div class="square blank" style="display: none;" id="', 0, "_", Y, '"></div>') | |
} | |
for (Y = 0; Y <= cols + 1; Y++) { | |
Z.push('<div class="square blank" style="display: none;" id="', rows + 1, "_", Y, '"></div>') | |
} | |
for (ab = 1; ab <= rows; ab++) { | |
Z.push('<div class="square blank" style="display: none;" id="', ab, "_", 0, '"></div>'); | |
Z.push('<div class="square blank" style="display: none;" id="', ab, "_", cols + 1, '"></div>') | |
} | |
$("#game").html(Z.join("")) | |
} | |
/** | |
* Sub-function holder | |
* | |
* Values: | |
* - addToValue | |
* - isMine | |
* - isFlagged | |
* - isMarked | |
* - isRevealed | |
* - isHidden | |
* - getRow | |
* - getCol | |
* - getValue | |
* - setRevealed | |
* - plantMine | |
* - unplantMine | |
* - getClass | |
* - reveal1 | |
* - flag | |
* - _showFlagAnimation | |
* - serializeToObj | |
* - deserializeFromObj | |
*/ | |
function squareData(ad, Z) { | |
var ab = 0; | |
var aa = false; | |
var Y = false; | |
var ac = false; | |
this.addToValue = function (ae) { | |
ab += ae | |
}; | |
this.isMine = function () { | |
return ab < 0 | |
}; | |
this.isFlagged = function () { | |
return aa | |
}; | |
this.isMarked = function () { | |
return Y | |
}; | |
this.isRevealed = function () { | |
return ac | |
}; | |
this.isHidden = function () { | |
return ad < 1 || ad > rows || Z < 1 || Z > cols | |
}; | |
this.getRow = function () { | |
return ad | |
}; | |
this.getCol = function () { | |
return Z | |
}; | |
this.getValue = function () { | |
return ab | |
}; | |
this.setRevealed = function (ae) { | |
ac = ae | |
}; | |
this.plantMine = function () { | |
ab -= 10; | |
I[ad - 1][Z - 1].addToValue(1); | |
I[ad - 1][Z].addToValue(1); | |
I[ad - 1][Z + 1].addToValue(1); | |
I[ad][Z - 1].addToValue(1); | |
I[ad][Z + 1].addToValue(1); | |
I[ad + 1][Z - 1].addToValue(1); | |
I[ad + 1][Z].addToValue(1); | |
I[ad + 1][Z + 1].addToValue(1) | |
}; | |
this.unplantMine = function () { | |
ab += 10; | |
I[ad - 1][Z - 1].addToValue(-1); | |
I[ad - 1][Z].addToValue(-1); | |
I[ad - 1][Z + 1].addToValue(-1); | |
I[ad][Z - 1].addToValue(-1); | |
I[ad][Z + 1].addToValue(-1); | |
I[ad + 1][Z - 1].addToValue(-1); | |
I[ad + 1][Z].addToValue(-1); | |
I[ad + 1][Z + 1].addToValue(-1) | |
}; | |
this.setClass = function (ae) { | |
document.getElementById(ad + "_" + Z).className = ae | |
}; | |
this.reveal1 = function () { | |
var ae, af; | |
var ag, ah; | |
var ai = []; | |
ai.push(this); | |
this.pushed = true; | |
while (ai.length > 0) { | |
ag = ai.pop(); | |
if (!ag.isRevealed() && !ag.isFlagged()) { | |
if (ag.isMine()) { | |
return false | |
} else { | |
if (!ag.isFlagged()) { | |
ag.setClass("square open" + ag.getValue()); | |
ag.setRevealed(true); | |
if (!ag.isHidden() && --G == 0) { | |
gameWin(); | |
return true | |
} | |
if (ag.getValue() == 0 && !ag.isHidden()) { | |
for (ae = -1; ae <= 1; ae++) { | |
for (af = -1; af <= 1; af++) { | |
ah = I[ag.getRow() + ae][ag.getCol() + af]; | |
if (!ah.pushed && !ah.isHidden() && !ah.isRevealed()) { | |
ai.push(ah); | |
ah.pushed = true | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
setO(); | |
return true | |
}; | |
this.flag = function (ae) { | |
if (!ac) { | |
if (aa) { | |
if ($("#marks").attr("checked")) { | |
this.setClass("square question"); | |
Y = true | |
} else { | |
this.setClass("square blank"); | |
if (ae) { | |
this._showFlagAnimation(true) | |
} | |
} | |
aa = false; | |
K++; | |
updateMines() | |
} else { | |
if (Y) { | |
this.setClass("square blank"); | |
Y = false | |
} else { | |
this.setClass("square bombflagged"); | |
aa = true; | |
K--; | |
updateMines(); | |
if (ae) { | |
this._showFlagAnimation() | |
} | |
} | |
} | |
setO() | |
} | |
}; | |
this._showFlagAnimation = function (af) { | |
var al = $("#" + ad + "_" + Z); | |
var ag = al.offset(); | |
var aj = ag.left + al.width() / 2; | |
var ai = ag.top + al.height() / 2; | |
var ao = 57 * zoomlvl * 1.75; | |
var ah = 79 * zoomlvl * 1.75; | |
var ae = { | |
left: aj - ao / 2, | |
top: ai - ah / 2, | |
width: ao + "px", | |
height: ah + "px", | |
opacity: 0 | |
}; | |
var am = { | |
left: aj, | |
top: ai, | |
width: 0, | |
height: 0, | |
opacity: 1 | |
}; | |
if (af) { | |
var an = ae; | |
ae = am; | |
am = an | |
} | |
var ak = $('<img src="flag.png" class="flag-animation"></div>').css(ae); | |
$("body").append(ak); | |
setTimeout(function () { | |
ak.css(am) | |
}, 0); | |
setTimeout(function () { | |
ak.remove() | |
}, 500) | |
}; | |
this.serializeToObj = function (ae) { | |
if (ae) { | |
if (!ac && !aa && !Y) { | |
return ab | |
} else { | |
return [ab, ac ? 1 : 0, aa ? 1 : 0, Y ? 1 : 0] | |
} | |
} else { | |
return { | |
value: ab, | |
isRevealed: ac, | |
isFlagged: aa, | |
isMarked: Y | |
} | |
} | |
}; | |
this.deserializeFromObj = function (ae) { | |
ab = ae.value; | |
aa = ae.isFlagged; | |
Y = ae.isMarked; | |
ac = ae.isRevealed | |
} | |
} | |
/** | |
* | |
* @description This is the main function used to lay the mines | |
* @param {Object?} ab | |
*/ | |
function mineLayer(ab) { | |
var X, Y, Z; | |
var aa; | |
I = []; | |
c = []; | |
M = []; | |
Z = 0; | |
for (X = 0; X <= rows + 1; X++) { | |
I[X] = []; | |
for (Y = 0; Y <= cols + 1; Y++) { | |
aa = new squareData(X, Y); | |
I[X][Y] = aa; | |
c[X + "_" + Y] = aa; | |
if (!aa.isHidden()) { | |
M[Z++] = aa | |
} | |
} | |
} | |
if (ab) { | |
var ac = ab.gridObj; | |
for (X = 0; X <= rows + 1; X++) { | |
for (Y = 0; Y <= cols + 1; Y++) { | |
I[X][Y].deserializeFromObj(ac[X][Y]) | |
} | |
} | |
M = []; | |
for (X = 0; X <= rows + 1; X++) { | |
for (Y = 0; Y <= cols + 1; Y++) { | |
aa = I[X][Y]; | |
if (!aa.isHidden() && !aa.isMine()) { | |
M.push(aa) | |
} | |
} | |
} | |
} else { | |
for (Z = 0; Z < mines; Z++) { | |
M.splice(Math.floor(Math.random() * M.length), 1)[0].plantMine() | |
} | |
} | |
} | |
/** | |
* | |
* @param {Boolean} Z | |
* @returns {Object} Grid Object | |
* @decription | |
* Pull the current grid state | |
*/ | |
function getGrid(Z) { | |
var aa = []; | |
var X, Y; | |
for (X = 0; X <= rows + 1; X++) { | |
aa[X] = []; | |
for (Y = 0; Y <= cols + 1; Y++) { | |
aa[X][Y] = I[X][Y].serializeToObj(Z) | |
} | |
} | |
return aa | |
} | |
/** | |
* Pulls the grid state and saves it to the "o" var (called at start, reveal1, and flag) | |
*/ | |
function setO() { | |
var Y = getGrid(); | |
o = { | |
gridObj: Y | |
} | |
} | |
/** | |
* @deprecated | |
*/ | |
function checkMineLayer(ag) { | |
var Y = ag.getRow(); | |
var X = ag.getCol(); | |
var ad, Z; | |
var ac; | |
var af; | |
var aa; | |
if (!p && !y) { | |
if (ag.isMine()) { | |
M.splice(Math.floor(Math.random() * M.length), 1)[0].plantMine(); | |
ag.unplantMine(); | |
M.push(ag) | |
} | |
var af = []; | |
for (var ab = 0; ab < M.length; ab++) { | |
aa = M[ab]; | |
if (aa.getRow() < Y - 1 || aa.getRow() > Y + 1 || aa.getCol() < X - 1 || aa.getCol() > X + 1) { | |
af.push(aa) | |
} | |
} | |
for (ad = -1; ad <= 1; ad++) { | |
for (Z = -1; Z <= 1; Z++) { | |
ac = I[Y + ad][X + Z]; | |
if (ac.isMine() && af.length > 0) { | |
af.splice(Math.floor(Math.random() * af.length), 1)[0].plantMine(); | |
ac.unplantMine() | |
} | |
} | |
} | |
} | |
U.start(); | |
if ((Y == 1 && X == 1) || (Y == 1 && X == cols) || (Y == rows && X == 1) || (Y == rows && X == cols)) { | |
return 1 | |
} else { | |
if (Y == 1 || Y == rows || X == 1 || X == cols) { | |
return 2 | |
} else { | |
return 3 | |
} | |
} | |
} | |
/** | |
* Game ID Generator | |
*/ | |
function gameIDGen() { | |
var Y = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | |
var Z; | |
r = ""; | |
for (var Z = 0; Z < 3; Z++) { | |
r += Y.charAt(Math.floor(Math.random() * Y.length)) | |
} | |
r += 4 * (Math.floor(Math.random() * 225) + 25) + gti; | |
for (var Z = 0; Z < 4; Z++) { | |
r += Y.charAt(Math.floor(Math.random() * Y.length)) | |
} | |
} | |
/** | |
* @class | |
* @description | |
* Time managment Sub-function holder used to keep track of the time | |
*/ | |
function TimeManager() { | |
var aa; | |
var ab; | |
var ac; | |
function startClock() { | |
var ag = new Date().getTime(); | |
var ad = ab * 1000; | |
var af = ag - aa; | |
var ae = 1000 - (af - ad); | |
ac = setTimeout(startClock, ae); | |
ab++; | |
setTimeCounter() | |
} | |
function setTimeCounter() { | |
var ad = numSeg(ab); | |
document.getElementById("seconds_hundreds").className = "time" + ad[0]; | |
document.getElementById("seconds_tens").className = "time" + ad[1]; | |
document.getElementById("seconds_ones").className = "time" + ad[2] | |
} | |
this.start = function () { | |
aa = new Date().getTime() - ab * 1000; | |
startClock() | |
}; | |
this.stop = function () { | |
clearTimeout(ac) | |
}; | |
this.getTime = function () { | |
return ab | |
}; | |
this.setTime = function (ad) { | |
ab = ad; | |
setTimeCounter() | |
} | |
} | |
/** | |
* Sets the mines to the counter | |
*/ | |
function updateMines() { | |
var Y = numSeg(K); | |
document.getElementById("mines_hundreds").className = "time" + Y[0]; | |
document.getElementById("mines_tens").className = "time" + Y[1]; | |
document.getElementById("mines_ones").className = "time" + Y[2] | |
} | |
/** | |
* | |
* @param {number} Y Number Value | |
* | |
* @returns {[string|number,number,number]} | |
* 3 segment number value where if Y is negitive, value 1 is equal to the string "-" | |
*/ | |
function numSeg(Y) { | |
Y = Math.min(Y, 999); | |
if (Y >= 0) { | |
return [Math.floor(Y / 100), Math.floor((Y % 100) / 10), Y % 10] | |
} else { | |
return ["-", Math.floor((-Y % 100) / 10), -Y % 10] | |
} | |
} | |
/** | |
* @param {Object} Y | |
* Game Death Function | |
*/ | |
function gameDeath(Y) { | |
var ac, Z, aa; | |
var ab; | |
if (er) { | |
return | |
} | |
er = 'lose' | |
document.getElementById("face").className = "facedead"; | |
U.stop(); | |
L = true; | |
for (ac = 1; ac <= rows; ac++) { | |
columnloop: for (Z = 1; Z <= cols; Z++) { | |
ab = I[ac][Z]; | |
if (!ab.isRevealed()) { | |
for (aa = 0; aa < Y.length; aa++) { | |
if (ab == Y[aa]) { | |
ab.setClass("square bombdeath"); | |
continue columnloop | |
} | |
} | |
if (ab.isMine() && !ab.isFlagged()) { | |
ab.setClass("square bombrevealed") | |
} else { | |
if (!ab.isMine() && ab.isFlagged()) { | |
ab.setClass("square bombmisflagged") | |
} | |
} | |
} | |
} | |
} | |
} | |
/** | |
* Game Win Function | |
*/ | |
function gameWin() { | |
var ad, Y; | |
var aa; | |
var Z; | |
var ab; | |
var ac = false; | |
if (er) { | |
return | |
} | |
er = 'win' | |
document.getElementById("face").className = "facewin"; | |
U.stop(); | |
L = true; | |
K = 0; | |
updateMines(); | |
for (ad = 1; ad <= rows; ad++) { | |
for (Y = 1; Y <= cols; Y++) { | |
aa = I[ad][Y]; | |
if (!aa.isRevealed() && !aa.isFlagged() && aa.isMine()) { | |
aa.setClass("square bombflagged") | |
} else if (!aa.isRevealed() && !aa.isMine()) { | |
if (aa.isFlagged()) { | |
aa.flag() | |
} | |
aa.setClass("square open" + aa.getValue()); | |
aa.setRevealed(true); | |
} | |
} | |
} | |
if (gti > 0) { | |
ab = U.getTime(); | |
if (!p) { | |
for (Z = 3; Z >= 0; Z--) { | |
if (ab <= A[Z][gti - 1]) { | |
ac = true; | |
break | |
} | |
} | |
} | |
if (E.onWin) { | |
E.onWin(gti, ab) | |
} | |
} | |
} | |
/** | |
* | |
* @param {HTMLElement} Y Elemet Pressed | |
* @returns {Boolean} Returns true if the element pressed has a class starting with "square" | |
*/ | |
function squareTest(Y) { | |
return Y.className.substring(0, 6) == "square" | |
} | |
/** | |
* @param {MouseEvent} Z Mouse Event | |
* @returns {{right:Boolean, left:Boolean}} | |
* tests what mouse button was pressed | |
*/ | |
function mousePressTest(Z) { | |
var Y = {}; | |
if (k) { | |
Y.left = Z.button == 1 || Z.button == 3 || Z.button == 4; | |
Y.right = Z.button == 2 || Z.button == 3 || Z.button == 4 | |
} else { | |
Y.left = Z.button == 0 || Z.button == 1; | |
Y.right = Z.button == 2 || Z.button == 1 | |
} | |
return Y | |
} | |
/** | |
* @param aa Square | |
* @param {String} Z Sets the class name to this if it isn't revealed, marked, and flagged | |
* @param {String} Y Sets the class name to this if it isn't revealed, and if it is marked | |
* @description | |
* Called for use in a square game | |
*/ | |
function classSetter2(aa, Z, Y) { | |
if (!aa.isRevealed()) { | |
if (aa.isMarked()) { | |
aa.setClass(Y) | |
} else { | |
if (!aa.isFlagged()) { | |
aa.setClass(Z) | |
} | |
} | |
} | |
} | |
/** | |
* @param ac Square | |
* @param {String} ab | |
* @param {String} aa | |
* @description | |
* Called for use in a marking game | |
*/ | |
function classSetter3(ac, ab, aa) { | |
var Y, Z; | |
for (Y = -1; Y <= 1; Y++) { | |
for (Z = -1; Z <= 1; Z++) { | |
classSetter2(I[ac.getRow() + Y][ac.getCol() + Z], ab, aa) | |
} | |
} | |
} | |
/** | |
* Game Setup for eventListeners, and grabbing elements, and other required things | |
*/ | |
function Setup() { | |
var aa = false; | |
var ac; | |
/** | |
* @param {MouseEvent} ag | |
* Used for marking games | |
*/ | |
function markFunc1(ag) { | |
if (ag.type === "touchmove") { | |
return | |
} | |
var af = eleSelector(ag); | |
if (af != ac && !D) { | |
if (v) { | |
if (ac) { | |
classSetter3(c[ac.id], "square blank", "square question") | |
} | |
if (squareTest(af)) { | |
classSetter3(c[af.id], "square open0", "square questionpressed") | |
} | |
} else { | |
if (ac) { | |
classSetter2(c[ac.id], "square blank", "square question") | |
} | |
if (squareTest(af)) { | |
classSetter2(c[af.id], "square open0", "square questionpressed") | |
} | |
} | |
} | |
ac = (squareTest(af)) ? af : undefined | |
} | |
/** | |
* | |
* @param {TouchEvent} ag | |
* Changes the face upon touching it | |
*/ | |
function faceSetter(ag) { | |
if (ag.type === "touchmove") { | |
return | |
} | |
var af = eleSelector(ag); | |
document.getElementById("face").className = (af.id == "face") ? "facepressed" : "facesmile" | |
} | |
/** | |
* @param {TouchEvent} af Triggering Event | |
* @returns {HTMLElement} | |
* @description | |
* Grabs the element the user is touching | |
*/ | |
function eleSelector(af) { | |
if (af.type === "touchmove" || af.type === "touchend") { | |
var ag = af.originalEvent.changedTouches[0]; | |
return document.elementFromPoint(ag.clientX, ag.clientY) | |
} else { | |
return af.target | |
} | |
} | |
k = false | |
$(document).bind("gesturestart", function (af) { | |
C = true; | |
scrollManager() | |
}); | |
$(document).bind("gestureend", function (af) { | |
C = false | |
}); | |
$(document).bind("scroll", scrollManager); | |
function scrollManager() { | |
if (!d) { | |
return | |
} | |
d = null; | |
if (ac) { | |
classSetter2(c[ac.id], "square blank", "square question"); | |
ac = undefined | |
} | |
if (!L) { | |
document.getElementById("face").className = "facesmile" | |
} | |
} | |
$(document).mousedown(function (ag) { | |
var af = mousePressTest(ag); | |
e = af.left || e; | |
v = af.right || v; | |
if (ag.ctrlKey && squareTest(ag.target) && !L) { | |
if (er) return; | |
c[ag.target.id].flag(); | |
isMouseDownForCtrlClick = true | |
} else { | |
if (e) { | |
if (squareTest(ag.target) && !L) { | |
ag.preventDefault(); | |
$(document).bind("mousemove", markFunc1); | |
document.getElementById("face").className = "faceooh"; | |
ac = undefined; | |
markFunc1(ag) | |
} else { | |
if (ag.target.id == "face") { | |
ag.preventDefault(); | |
aa = true; | |
$(document).bind("mousemove", faceSetter); | |
document.getElementById("face").className = "facepressed" | |
} | |
} | |
} else { | |
if (v) { | |
if (squareTest(ag.target) && !L) { | |
if (er) return; | |
c[ag.target.id].flag() | |
} | |
return false | |
} | |
} | |
} | |
}); | |
$(document).mouseup(function (ai) { | |
var af = mousePressTest(ai); | |
var ah; | |
var ag; | |
if (isMouseDownForCtrlClick) { | |
e = false; | |
v = false; | |
isMouseDownForCtrlClick = false; | |
return | |
} | |
if (er) { | |
if (ai.target.id == "face" && aa) { | |
E.newGame() | |
aa = false | |
} | |
else { | |
return | |
} | |
} | |
if (af.left) { | |
e = false; | |
$(document).unbind("mousemove", markFunc1).unbind("mousemove", faceSetter); | |
if (aa || !L) { | |
document.getElementById("face").className = "facesmile" | |
} | |
if (squareTest(ai.target) && !L) { | |
ah = c[ai.target.id]; | |
if (v) { | |
D = true; | |
classSetter3(c[ai.target.id], "square blank", "square question"); | |
} else { | |
if (!D) { | |
if (!g) { | |
ag = checkMineLayer(ah) | |
g = true | |
} | |
if (!ah.reveal1()) { | |
gameDeath([ah]) | |
} | |
} | |
D = false | |
} | |
} | |
} | |
if (af.right) { | |
v = false; | |
if (squareTest(ai.target) && !L) { | |
if (e) { | |
ah = c[ai.target.id]; | |
D = true; | |
classSetter3(ah, "square blank", "square question"); | |
} else { | |
D = false | |
} | |
if (!L) { | |
document.getElementById("face").className = "facesmile" | |
} | |
} | |
} | |
}); | |
$(document).keydown(function (ag) { | |
if (ag.which !== 83 && er) { | |
ag.preventDefault() | |
return | |
} | |
if (ag.which == 83) { | |
ag.preventDefault() | |
E.newGame() | |
} else if (ag.which == 32) { | |
ag.preventDefault() | |
square = c[hoveredSquareId]; | |
square.flag() | |
} else if (ag.which == 68) { | |
gameDeath([c[hoveredSquareId]]) | |
} else if (ag.which == 70) { | |
document.body.requestFullscreen() | |
} else if (ag.key == "~") { | |
gameWin() | |
} else { | |
} | |
}); | |
$("#game").mouseover(function (af) { | |
if (squareTest(af.target)) { | |
hoveredSquareId = af.target.id | |
} | |
}); | |
$("#game").mouseout(function (af) { | |
if (squareTest(af.target)) { | |
if (hoveredSquareId = af.target.id) { | |
hoveredSquareId = "" | |
} | |
} | |
}) | |
$(document).contextmenu(function (event) { | |
event.preventDefault() | |
}) | |
} | |
}; | |
</script> | |
<!-- Page Minesweeper Code --> | |
<script> | |
$(function () { | |
var gameType = 'expert'; | |
var zoom = '200'; | |
var position = 'center'; | |
var isNightMode = false; | |
var hashParts, i; | |
var minesweeper; | |
if (!!location.hash && location.hash.length > 1) { | |
hashParts = location.hash.substring(1).split('-'); | |
for (i = 0; i < hashParts.length; i++) { | |
switch (hashParts[i]) { | |
case 'beginner': gameType = 'beginner'; break; | |
case 'intermediate': gameType = 'intermediate'; break; | |
case '150': zoom = '150'; break; | |
case '200': zoom = '200'; break; | |
case 'left': position = 'left'; break; | |
case 'night': isNightMode = true; break; | |
} | |
} | |
} | |
$('#' + gameType).attr('checked', true); | |
$('#zoom' + zoom).attr('checked', true); | |
$('#position-' + position).attr('checked', true); | |
$('#nightMode').attr('checked', isNightMode); | |
document.getElementById('game-container').className = 'z' + zoom; | |
setPosition(position); | |
if (isNightMode) { | |
toggleNightMode(isNightMode); | |
} | |
minesweeper = new Minesweeper([ | |
[2, 20, 59], | |
[2, 18, 54], | |
[1, 15, 51], | |
[1, 10, 45] | |
], getOptions, setOptions); | |
minesweeper.onWin = function (gameTypeId, time) { | |
var mode; | |
switch (gameTypeId) { | |
case 1: mode = 'Beginner'; break; | |
case 2: mode = 'Intermediate'; break; | |
case 3: mode = 'Expert'; break; | |
default: return; | |
} | |
}; | |
minesweeper.newGame(); | |
setHash(); | |
$("#options-link, #options-close").click(function () { | |
$("#options").toggle(); | |
$("#display").hide(); | |
$("#controls").hide(); | |
$("#import").hide(); | |
$("#export").hide(); | |
}); | |
$("#options-form").submit(function (e) { | |
$("#options").hide(); | |
minesweeper.newGame(); | |
setHash(); | |
e.preventDefault(); | |
}); | |
$("#display-link, #display-close").click(function () { | |
$("#options").hide(); | |
$("#display").toggle(); | |
$("#controls").hide(); | |
$("#import").hide(); | |
$("#export").hide(); | |
}); | |
$('input[name="zoom"]').change(function () { | |
var zoom = parseFloat($(this).val()); | |
minesweeper.resize(zoom); | |
setHash(); | |
}); | |
$('input[name="position"]').change(function () { | |
setPosition($(this).val()); | |
setHash(); | |
}); | |
$('input[name="nightMode"]').change(function () { | |
var isNightMode = $(this).is(':checked'); | |
toggleNightMode(isNightMode); | |
setHash(); | |
}); | |
$("#controls-link, #controls-close").click(function () { | |
$("#options").hide(); | |
$("#display").hide(); | |
$("#controls").toggle(); | |
$("#import").hide(); | |
$("#export").hide(); | |
}); | |
$("#import-link, #import-close").click(function () { | |
$("#options").hide(); | |
$("#display").hide(); | |
$("#controls").hide(); | |
$("#import").toggle(); | |
$("#export").hide(); | |
if ($('#import').is(':visible')) { | |
$('#import input[type=submit]').prop('disabled', true); | |
// trigger propertychange so "load game" button becomes enabled/disabled as needed | |
$('#import textarea').select().trigger('propertychange'); | |
} | |
}); | |
$('#import textarea').bind('input propertychange', function () { | |
var isImportable = minesweeper.isImportable($.trim($(this).val())); | |
$('#import input[type=submit]').prop('disabled', !isImportable); | |
}); | |
$("#import-form").submit(function (e) { | |
$("#import").hide(); | |
minesweeper.import_($.trim($('#import textarea').val())); | |
e.preventDefault(); | |
}); | |
$("#export-link, #export-close").click(function () { | |
$("#options").hide(); | |
$("#display").hide(); | |
$("#controls").hide(); | |
$("#import").hide(); | |
$("#export").toggle(); | |
if ($('#export').is(':visible')) { | |
$('#export textarea').val(minesweeper.export_()).select(); | |
var didCopySucceed = document.execCommand('copy'); | |
$('#export-message').text(didCopySucceed ? 'Game state copied to your clipboard!' : 'Copy game state to your clipboard:'); | |
$('#export-first-click-message').toggle(!minesweeper.hasStartedPlaying()); | |
} | |
}); | |
$('#export textarea').mousedown(function () { | |
// If the textarea already has focus, don't override default behavior. | |
if (document.activeElement === $(this)[0]) { | |
return; | |
} | |
// Defer or else the ensuing click event will un-highlight. | |
var that = this; | |
setTimeout(() => { | |
$(that).select(); | |
}, 0); | |
}); | |
$(document).keydown(function (e) { | |
if (e.keyCode == 27) { //escape | |
$("#options, #display, #controls, #import, #export").hide(); | |
} | |
}); | |
function setPosition(position) { | |
if (position == 'left') { | |
$('.outer-container').css('text-align', 'left'); | |
$('body').css('margin-left', '20px'); | |
} | |
else if (position == 'center') { | |
$('.outer-container').css('text-align', 'center'); | |
$('body').css('margin-left', '0px'); | |
} | |
} | |
function toggleNightMode(isOn) { | |
$('body').toggleClass('night-mode', isOn); | |
} | |
function getOptions() { | |
var gameTypeId; | |
var numRows; | |
var numCols; | |
var numMines; | |
var zoom; | |
if ($("#beginner").attr("checked")) { | |
gameTypeId = 1; | |
numRows = 9; | |
numCols = 9; | |
numMines = 10; | |
} | |
else if ($("#intermediate").attr("checked")) { | |
gameTypeId = 2; | |
numRows = 16; | |
numCols = 16; | |
numMines = 40; | |
} | |
else if ($("#expert").attr("checked")) { | |
gameTypeId = 3; | |
numRows = 16; | |
numCols = 30; | |
numMines = 99; | |
} | |
else if ($("#custom").attr("checked")) { | |
gameTypeId = 0; | |
numRows = parseInt($("#custom_height").val(), 10); | |
if (isNaN(numRows)) { | |
numRows = 20; | |
} | |
numRows = Math.max(1, numRows); | |
numRows = Math.min(99, numRows); | |
$("#custom_height").val(numRows); | |
numCols = parseInt($("#custom_width").val(), 10); | |
if (isNaN(numCols)) { | |
numCols = 30; | |
} | |
numCols = Math.max(8, numCols); | |
numCols = Math.min(99, numCols); | |
$("#custom_width").val(numCols); | |
numMines = parseInt($("#custom_mines").val(), 10); | |
if (isNaN(numMines)) { | |
numMines = Math.round(numRows * numCols / 5); | |
} | |
numMines = Math.max(0, numMines); | |
numMines = Math.min(numRows * numCols, numMines); | |
$("#custom_mines").val(numMines); | |
} | |
zoom = parseFloat($('input[name="zoom"]:checked').val()); | |
return { | |
gameTypeId: gameTypeId, | |
numRows: numRows, | |
numCols: numCols, | |
numMines: numMines, | |
zoom: zoom | |
}; | |
} | |
function setOptions(options) { | |
switch (options.gameTypeId) { | |
case 1: $('#beginner').prop('checked', true); break; | |
case 2: $('#intermediate').prop('checked', true); break; | |
case 3: $('#expert').prop('checked', true); break; | |
default: | |
$('#custom').prop('checked', true); | |
$('#custom_height').val(options.numRows); | |
$('#custom_width').val(options.numCols); | |
$('#custom_mines').val(options.numMines); | |
break; | |
} | |
} | |
function setHash() { | |
var gameType = 'expert'; | |
var zoom = $('input[name="zoom"]:checked').val(); | |
var position = $('input[name="position"]:checked').val(); | |
var isNightMode = $('input[name="nightMode"]').is(':checked'); | |
var hashParts = []; | |
if ($("#beginner").attr("checked")) { | |
hashParts.push("beginner"); | |
} | |
else if ($("#intermediate").attr("checked")) { | |
hashParts.push("intermediate"); | |
} | |
if (zoom != 1) { | |
hashParts.push(zoom * 100); | |
} | |
if (position != "center") { | |
hashParts.push(position); | |
} | |
if (isNightMode) { | |
hashParts.push('night'); | |
} | |
if (hashParts.length > 0) { | |
location.hash = '#' + hashParts.join('-'); | |
} | |
else { | |
location.hash = ''; | |
} | |
} | |
}); | |
</script> | |
<noscript>Please enable JavaScript so that this page can properly work! Thanks!</noscript> | |
</head> | |
<body class="night-mode" style="margin-left: 0px;"> | |
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"> | |
<tbody> | |
<tr> | |
<td class="outer-container" style="text-align: center;"> | |
<div class="inner-container" style="margin-left: auto; margin-right: auto;"> | |
<div id="center-column"> | |
<div id="game-container" class="z200" style="width: 1000px;"> | |
<div style="white-space: nowrap;"> | |
<span id="options-link" title="game options">Game</span> | |
| <span id="display-link" title="size/position">Display</span> | |
| <span id="controls-link" title="keyboard/mouse controls">Controls</span> | |
| <span id="import-link" title="load exported game">Import</span> | |
| <span id="export-link" title="same game to be impoorted">Export</span> | |
| <span title="Fullscreen the minesweeper window"><a | |
href="javascript:document.body.requestFullscreen()">Fullscreen</a></span> | |
</div> | |
<div id="game" oncontextmenu="(e) => {e.preventDefault()}" | |
ondrag="(e) => {e.preventDefault()}" ondragstart="(e) => {e.preventDefault()}" | |
style="width: 1000px; height: 636px;"> | |
<div class="bordertl"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertr"></div> | |
<div class="borderlrlong"></div> | |
<div class="time0" id="mines_hundreds"></div> | |
<div class="time9" id="mines_tens"></div> | |
<div class="time9" id="mines_ones"></div> | |
<div class="facesmile" style="margin-left:364px; margin-right: 364px;" id="face"> | |
</div> | |
<div class="time0" id="seconds_hundreds"></div> | |
<div class="time0" id="seconds_tens"></div> | |
<div class="time0" id="seconds_ones"></div> | |
<div class="borderlrlong"></div> | |
<div class="borderjointl"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="borderjointr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="1_1"></div> | |
<div class="square blank" id="1_2"></div> | |
<div class="square blank" id="1_3"></div> | |
<div class="square blank" id="1_4"></div> | |
<div class="square blank" id="1_5"></div> | |
<div class="square blank" id="1_6"></div> | |
<div class="square blank" id="1_7"></div> | |
<div class="square blank" id="1_8"></div> | |
<div class="square blank" id="1_9"></div> | |
<div class="square blank" id="1_10"></div> | |
<div class="square blank" id="1_11"></div> | |
<div class="square blank" id="1_12"></div> | |
<div class="square blank" id="1_13"></div> | |
<div class="square blank" id="1_14"></div> | |
<div class="square blank" id="1_15"></div> | |
<div class="square blank" id="1_16"></div> | |
<div class="square blank" id="1_17"></div> | |
<div class="square blank" id="1_18"></div> | |
<div class="square blank" id="1_19"></div> | |
<div class="square blank" id="1_20"></div> | |
<div class="square blank" id="1_21"></div> | |
<div class="square blank" id="1_22"></div> | |
<div class="square blank" id="1_23"></div> | |
<div class="square blank" id="1_24"></div> | |
<div class="square blank" id="1_25"></div> | |
<div class="square blank" id="1_26"></div> | |
<div class="square blank" id="1_27"></div> | |
<div class="square blank" id="1_28"></div> | |
<div class="square blank" id="1_29"></div> | |
<div class="square blank" id="1_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="2_1"></div> | |
<div class="square blank" id="2_2"></div> | |
<div class="square blank" id="2_3"></div> | |
<div class="square blank" id="2_4"></div> | |
<div class="square blank" id="2_5"></div> | |
<div class="square blank" id="2_6"></div> | |
<div class="square blank" id="2_7"></div> | |
<div class="square blank" id="2_8"></div> | |
<div class="square blank" id="2_9"></div> | |
<div class="square blank" id="2_10"></div> | |
<div class="square blank" id="2_11"></div> | |
<div class="square blank" id="2_12"></div> | |
<div class="square blank" id="2_13"></div> | |
<div class="square blank" id="2_14"></div> | |
<div class="square blank" id="2_15"></div> | |
<div class="square blank" id="2_16"></div> | |
<div class="square blank" id="2_17"></div> | |
<div class="square blank" id="2_18"></div> | |
<div class="square blank" id="2_19"></div> | |
<div class="square blank" id="2_20"></div> | |
<div class="square blank" id="2_21"></div> | |
<div class="square blank" id="2_22"></div> | |
<div class="square blank" id="2_23"></div> | |
<div class="square blank" id="2_24"></div> | |
<div class="square blank" id="2_25"></div> | |
<div class="square blank" id="2_26"></div> | |
<div class="square blank" id="2_27"></div> | |
<div class="square blank" id="2_28"></div> | |
<div class="square blank" id="2_29"></div> | |
<div class="square blank" id="2_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="3_1"></div> | |
<div class="square blank" id="3_2"></div> | |
<div class="square blank" id="3_3"></div> | |
<div class="square blank" id="3_4"></div> | |
<div class="square blank" id="3_5"></div> | |
<div class="square blank" id="3_6"></div> | |
<div class="square blank" id="3_7"></div> | |
<div class="square blank" id="3_8"></div> | |
<div class="square blank" id="3_9"></div> | |
<div class="square blank" id="3_10"></div> | |
<div class="square blank" id="3_11"></div> | |
<div class="square blank" id="3_12"></div> | |
<div class="square blank" id="3_13"></div> | |
<div class="square blank" id="3_14"></div> | |
<div class="square blank" id="3_15"></div> | |
<div class="square blank" id="3_16"></div> | |
<div class="square blank" id="3_17"></div> | |
<div class="square blank" id="3_18"></div> | |
<div class="square blank" id="3_19"></div> | |
<div class="square blank" id="3_20"></div> | |
<div class="square blank" id="3_21"></div> | |
<div class="square blank" id="3_22"></div> | |
<div class="square blank" id="3_23"></div> | |
<div class="square blank" id="3_24"></div> | |
<div class="square blank" id="3_25"></div> | |
<div class="square blank" id="3_26"></div> | |
<div class="square blank" id="3_27"></div> | |
<div class="square blank" id="3_28"></div> | |
<div class="square blank" id="3_29"></div> | |
<div class="square blank" id="3_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="4_1"></div> | |
<div class="square blank" id="4_2"></div> | |
<div class="square blank" id="4_3"></div> | |
<div class="square blank" id="4_4"></div> | |
<div class="square blank" id="4_5"></div> | |
<div class="square blank" id="4_6"></div> | |
<div class="square blank" id="4_7"></div> | |
<div class="square blank" id="4_8"></div> | |
<div class="square blank" id="4_9"></div> | |
<div class="square blank" id="4_10"></div> | |
<div class="square blank" id="4_11"></div> | |
<div class="square blank" id="4_12"></div> | |
<div class="square blank" id="4_13"></div> | |
<div class="square blank" id="4_14"></div> | |
<div class="square blank" id="4_15"></div> | |
<div class="square blank" id="4_16"></div> | |
<div class="square blank" id="4_17"></div> | |
<div class="square blank" id="4_18"></div> | |
<div class="square blank" id="4_19"></div> | |
<div class="square blank" id="4_20"></div> | |
<div class="square blank" id="4_21"></div> | |
<div class="square blank" id="4_22"></div> | |
<div class="square blank" id="4_23"></div> | |
<div class="square blank" id="4_24"></div> | |
<div class="square blank" id="4_25"></div> | |
<div class="square blank" id="4_26"></div> | |
<div class="square blank" id="4_27"></div> | |
<div class="square blank" id="4_28"></div> | |
<div class="square blank" id="4_29"></div> | |
<div class="square blank" id="4_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="5_1"></div> | |
<div class="square blank" id="5_2"></div> | |
<div class="square blank" id="5_3"></div> | |
<div class="square blank" id="5_4"></div> | |
<div class="square blank" id="5_5"></div> | |
<div class="square blank" id="5_6"></div> | |
<div class="square blank" id="5_7"></div> | |
<div class="square blank" id="5_8"></div> | |
<div class="square blank" id="5_9"></div> | |
<div class="square blank" id="5_10"></div> | |
<div class="square blank" id="5_11"></div> | |
<div class="square blank" id="5_12"></div> | |
<div class="square blank" id="5_13"></div> | |
<div class="square blank" id="5_14"></div> | |
<div class="square blank" id="5_15"></div> | |
<div class="square blank" id="5_16"></div> | |
<div class="square blank" id="5_17"></div> | |
<div class="square blank" id="5_18"></div> | |
<div class="square blank" id="5_19"></div> | |
<div class="square blank" id="5_20"></div> | |
<div class="square blank" id="5_21"></div> | |
<div class="square blank" id="5_22"></div> | |
<div class="square blank" id="5_23"></div> | |
<div class="square blank" id="5_24"></div> | |
<div class="square blank" id="5_25"></div> | |
<div class="square blank" id="5_26"></div> | |
<div class="square blank" id="5_27"></div> | |
<div class="square blank" id="5_28"></div> | |
<div class="square blank" id="5_29"></div> | |
<div class="square blank" id="5_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="6_1"></div> | |
<div class="square blank" id="6_2"></div> | |
<div class="square blank" id="6_3"></div> | |
<div class="square blank" id="6_4"></div> | |
<div class="square blank" id="6_5"></div> | |
<div class="square blank" id="6_6"></div> | |
<div class="square blank" id="6_7"></div> | |
<div class="square blank" id="6_8"></div> | |
<div class="square blank" id="6_9"></div> | |
<div class="square blank" id="6_10"></div> | |
<div class="square blank" id="6_11"></div> | |
<div class="square blank" id="6_12"></div> | |
<div class="square blank" id="6_13"></div> | |
<div class="square blank" id="6_14"></div> | |
<div class="square blank" id="6_15"></div> | |
<div class="square blank" id="6_16"></div> | |
<div class="square blank" id="6_17"></div> | |
<div class="square blank" id="6_18"></div> | |
<div class="square blank" id="6_19"></div> | |
<div class="square blank" id="6_20"></div> | |
<div class="square blank" id="6_21"></div> | |
<div class="square blank" id="6_22"></div> | |
<div class="square blank" id="6_23"></div> | |
<div class="square blank" id="6_24"></div> | |
<div class="square blank" id="6_25"></div> | |
<div class="square blank" id="6_26"></div> | |
<div class="square blank" id="6_27"></div> | |
<div class="square blank" id="6_28"></div> | |
<div class="square blank" id="6_29"></div> | |
<div class="square blank" id="6_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="7_1"></div> | |
<div class="square blank" id="7_2"></div> | |
<div class="square blank" id="7_3"></div> | |
<div class="square blank" id="7_4"></div> | |
<div class="square blank" id="7_5"></div> | |
<div class="square blank" id="7_6"></div> | |
<div class="square blank" id="7_7"></div> | |
<div class="square blank" id="7_8"></div> | |
<div class="square blank" id="7_9"></div> | |
<div class="square blank" id="7_10"></div> | |
<div class="square blank" id="7_11"></div> | |
<div class="square blank" id="7_12"></div> | |
<div class="square blank" id="7_13"></div> | |
<div class="square blank" id="7_14"></div> | |
<div class="square blank" id="7_15"></div> | |
<div class="square blank" id="7_16"></div> | |
<div class="square blank" id="7_17"></div> | |
<div class="square blank" id="7_18"></div> | |
<div class="square blank" id="7_19"></div> | |
<div class="square blank" id="7_20"></div> | |
<div class="square blank" id="7_21"></div> | |
<div class="square blank" id="7_22"></div> | |
<div class="square blank" id="7_23"></div> | |
<div class="square blank" id="7_24"></div> | |
<div class="square blank" id="7_25"></div> | |
<div class="square blank" id="7_26"></div> | |
<div class="square blank" id="7_27"></div> | |
<div class="square blank" id="7_28"></div> | |
<div class="square blank" id="7_29"></div> | |
<div class="square blank" id="7_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="8_1"></div> | |
<div class="square blank" id="8_2"></div> | |
<div class="square blank" id="8_3"></div> | |
<div class="square blank" id="8_4"></div> | |
<div class="square blank" id="8_5"></div> | |
<div class="square blank" id="8_6"></div> | |
<div class="square blank" id="8_7"></div> | |
<div class="square blank" id="8_8"></div> | |
<div class="square blank" id="8_9"></div> | |
<div class="square blank" id="8_10"></div> | |
<div class="square blank" id="8_11"></div> | |
<div class="square blank" id="8_12"></div> | |
<div class="square blank" id="8_13"></div> | |
<div class="square blank" id="8_14"></div> | |
<div class="square blank" id="8_15"></div> | |
<div class="square blank" id="8_16"></div> | |
<div class="square blank" id="8_17"></div> | |
<div class="square blank" id="8_18"></div> | |
<div class="square blank" id="8_19"></div> | |
<div class="square blank" id="8_20"></div> | |
<div class="square blank" id="8_21"></div> | |
<div class="square blank" id="8_22"></div> | |
<div class="square blank" id="8_23"></div> | |
<div class="square blank" id="8_24"></div> | |
<div class="square blank" id="8_25"></div> | |
<div class="square blank" id="8_26"></div> | |
<div class="square blank" id="8_27"></div> | |
<div class="square blank" id="8_28"></div> | |
<div class="square blank" id="8_29"></div> | |
<div class="square blank" id="8_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="9_1"></div> | |
<div class="square blank" id="9_2"></div> | |
<div class="square blank" id="9_3"></div> | |
<div class="square blank" id="9_4"></div> | |
<div class="square blank" id="9_5"></div> | |
<div class="square blank" id="9_6"></div> | |
<div class="square blank" id="9_7"></div> | |
<div class="square blank" id="9_8"></div> | |
<div class="square blank" id="9_9"></div> | |
<div class="square blank" id="9_10"></div> | |
<div class="square blank" id="9_11"></div> | |
<div class="square blank" id="9_12"></div> | |
<div class="square blank" id="9_13"></div> | |
<div class="square blank" id="9_14"></div> | |
<div class="square blank" id="9_15"></div> | |
<div class="square blank" id="9_16"></div> | |
<div class="square blank" id="9_17"></div> | |
<div class="square blank" id="9_18"></div> | |
<div class="square blank" id="9_19"></div> | |
<div class="square blank" id="9_20"></div> | |
<div class="square blank" id="9_21"></div> | |
<div class="square blank" id="9_22"></div> | |
<div class="square blank" id="9_23"></div> | |
<div class="square blank" id="9_24"></div> | |
<div class="square blank" id="9_25"></div> | |
<div class="square blank" id="9_26"></div> | |
<div class="square blank" id="9_27"></div> | |
<div class="square blank" id="9_28"></div> | |
<div class="square blank" id="9_29"></div> | |
<div class="square blank" id="9_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="10_1"></div> | |
<div class="square blank" id="10_2"></div> | |
<div class="square blank" id="10_3"></div> | |
<div class="square blank" id="10_4"></div> | |
<div class="square blank" id="10_5"></div> | |
<div class="square blank" id="10_6"></div> | |
<div class="square blank" id="10_7"></div> | |
<div class="square blank" id="10_8"></div> | |
<div class="square blank" id="10_9"></div> | |
<div class="square blank" id="10_10"></div> | |
<div class="square blank" id="10_11"></div> | |
<div class="square blank" id="10_12"></div> | |
<div class="square blank" id="10_13"></div> | |
<div class="square blank" id="10_14"></div> | |
<div class="square blank" id="10_15"></div> | |
<div class="square blank" id="10_16"></div> | |
<div class="square blank" id="10_17"></div> | |
<div class="square blank" id="10_18"></div> | |
<div class="square blank" id="10_19"></div> | |
<div class="square blank" id="10_20"></div> | |
<div class="square blank" id="10_21"></div> | |
<div class="square blank" id="10_22"></div> | |
<div class="square blank" id="10_23"></div> | |
<div class="square blank" id="10_24"></div> | |
<div class="square blank" id="10_25"></div> | |
<div class="square blank" id="10_26"></div> | |
<div class="square blank" id="10_27"></div> | |
<div class="square blank" id="10_28"></div> | |
<div class="square blank" id="10_29"></div> | |
<div class="square blank" id="10_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="11_1"></div> | |
<div class="square blank" id="11_2"></div> | |
<div class="square blank" id="11_3"></div> | |
<div class="square blank" id="11_4"></div> | |
<div class="square blank" id="11_5"></div> | |
<div class="square blank" id="11_6"></div> | |
<div class="square blank" id="11_7"></div> | |
<div class="square blank" id="11_8"></div> | |
<div class="square blank" id="11_9"></div> | |
<div class="square blank" id="11_10"></div> | |
<div class="square blank" id="11_11"></div> | |
<div class="square blank" id="11_12"></div> | |
<div class="square blank" id="11_13"></div> | |
<div class="square blank" id="11_14"></div> | |
<div class="square blank" id="11_15"></div> | |
<div class="square blank" id="11_16"></div> | |
<div class="square blank" id="11_17"></div> | |
<div class="square blank" id="11_18"></div> | |
<div class="square blank" id="11_19"></div> | |
<div class="square blank" id="11_20"></div> | |
<div class="square blank" id="11_21"></div> | |
<div class="square blank" id="11_22"></div> | |
<div class="square blank" id="11_23"></div> | |
<div class="square blank" id="11_24"></div> | |
<div class="square blank" id="11_25"></div> | |
<div class="square blank" id="11_26"></div> | |
<div class="square blank" id="11_27"></div> | |
<div class="square blank" id="11_28"></div> | |
<div class="square blank" id="11_29"></div> | |
<div class="square blank" id="11_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="12_1"></div> | |
<div class="square blank" id="12_2"></div> | |
<div class="square blank" id="12_3"></div> | |
<div class="square blank" id="12_4"></div> | |
<div class="square blank" id="12_5"></div> | |
<div class="square blank" id="12_6"></div> | |
<div class="square blank" id="12_7"></div> | |
<div class="square blank" id="12_8"></div> | |
<div class="square blank" id="12_9"></div> | |
<div class="square blank" id="12_10"></div> | |
<div class="square blank" id="12_11"></div> | |
<div class="square blank" id="12_12"></div> | |
<div class="square blank" id="12_13"></div> | |
<div class="square blank" id="12_14"></div> | |
<div class="square blank" id="12_15"></div> | |
<div class="square blank" id="12_16"></div> | |
<div class="square blank" id="12_17"></div> | |
<div class="square blank" id="12_18"></div> | |
<div class="square blank" id="12_19"></div> | |
<div class="square blank" id="12_20"></div> | |
<div class="square blank" id="12_21"></div> | |
<div class="square blank" id="12_22"></div> | |
<div class="square blank" id="12_23"></div> | |
<div class="square blank" id="12_24"></div> | |
<div class="square blank" id="12_25"></div> | |
<div class="square blank" id="12_26"></div> | |
<div class="square blank" id="12_27"></div> | |
<div class="square blank" id="12_28"></div> | |
<div class="square blank" id="12_29"></div> | |
<div class="square blank" id="12_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="13_1"></div> | |
<div class="square blank" id="13_2"></div> | |
<div class="square blank" id="13_3"></div> | |
<div class="square blank" id="13_4"></div> | |
<div class="square blank" id="13_5"></div> | |
<div class="square blank" id="13_6"></div> | |
<div class="square blank" id="13_7"></div> | |
<div class="square blank" id="13_8"></div> | |
<div class="square blank" id="13_9"></div> | |
<div class="square blank" id="13_10"></div> | |
<div class="square blank" id="13_11"></div> | |
<div class="square blank" id="13_12"></div> | |
<div class="square blank" id="13_13"></div> | |
<div class="square blank" id="13_14"></div> | |
<div class="square blank" id="13_15"></div> | |
<div class="square blank" id="13_16"></div> | |
<div class="square blank" id="13_17"></div> | |
<div class="square blank" id="13_18"></div> | |
<div class="square blank" id="13_19"></div> | |
<div class="square blank" id="13_20"></div> | |
<div class="square blank" id="13_21"></div> | |
<div class="square blank" id="13_22"></div> | |
<div class="square blank" id="13_23"></div> | |
<div class="square blank" id="13_24"></div> | |
<div class="square blank" id="13_25"></div> | |
<div class="square blank" id="13_26"></div> | |
<div class="square blank" id="13_27"></div> | |
<div class="square blank" id="13_28"></div> | |
<div class="square blank" id="13_29"></div> | |
<div class="square blank" id="13_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="14_1"></div> | |
<div class="square blank" id="14_2"></div> | |
<div class="square blank" id="14_3"></div> | |
<div class="square blank" id="14_4"></div> | |
<div class="square blank" id="14_5"></div> | |
<div class="square blank" id="14_6"></div> | |
<div class="square blank" id="14_7"></div> | |
<div class="square blank" id="14_8"></div> | |
<div class="square blank" id="14_9"></div> | |
<div class="square blank" id="14_10"></div> | |
<div class="square blank" id="14_11"></div> | |
<div class="square blank" id="14_12"></div> | |
<div class="square blank" id="14_13"></div> | |
<div class="square blank" id="14_14"></div> | |
<div class="square blank" id="14_15"></div> | |
<div class="square blank" id="14_16"></div> | |
<div class="square blank" id="14_17"></div> | |
<div class="square blank" id="14_18"></div> | |
<div class="square blank" id="14_19"></div> | |
<div class="square blank" id="14_20"></div> | |
<div class="square blank" id="14_21"></div> | |
<div class="square blank" id="14_22"></div> | |
<div class="square blank" id="14_23"></div> | |
<div class="square blank" id="14_24"></div> | |
<div class="square blank" id="14_25"></div> | |
<div class="square blank" id="14_26"></div> | |
<div class="square blank" id="14_27"></div> | |
<div class="square blank" id="14_28"></div> | |
<div class="square blank" id="14_29"></div> | |
<div class="square blank" id="14_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="15_1"></div> | |
<div class="square blank" id="15_2"></div> | |
<div class="square blank" id="15_3"></div> | |
<div class="square blank" id="15_4"></div> | |
<div class="square blank" id="15_5"></div> | |
<div class="square blank" id="15_6"></div> | |
<div class="square blank" id="15_7"></div> | |
<div class="square blank" id="15_8"></div> | |
<div class="square blank" id="15_9"></div> | |
<div class="square blank" id="15_10"></div> | |
<div class="square blank" id="15_11"></div> | |
<div class="square blank" id="15_12"></div> | |
<div class="square blank" id="15_13"></div> | |
<div class="square blank" id="15_14"></div> | |
<div class="square blank" id="15_15"></div> | |
<div class="square blank" id="15_16"></div> | |
<div class="square blank" id="15_17"></div> | |
<div class="square blank" id="15_18"></div> | |
<div class="square blank" id="15_19"></div> | |
<div class="square blank" id="15_20"></div> | |
<div class="square blank" id="15_21"></div> | |
<div class="square blank" id="15_22"></div> | |
<div class="square blank" id="15_23"></div> | |
<div class="square blank" id="15_24"></div> | |
<div class="square blank" id="15_25"></div> | |
<div class="square blank" id="15_26"></div> | |
<div class="square blank" id="15_27"></div> | |
<div class="square blank" id="15_28"></div> | |
<div class="square blank" id="15_29"></div> | |
<div class="square blank" id="15_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderlr"></div> | |
<div class="square blank" id="16_1"></div> | |
<div class="square blank" id="16_2"></div> | |
<div class="square blank" id="16_3"></div> | |
<div class="square blank" id="16_4"></div> | |
<div class="square blank" id="16_5"></div> | |
<div class="square blank" id="16_6"></div> | |
<div class="square blank" id="16_7"></div> | |
<div class="square blank" id="16_8"></div> | |
<div class="square blank" id="16_9"></div> | |
<div class="square blank" id="16_10"></div> | |
<div class="square blank" id="16_11"></div> | |
<div class="square blank" id="16_12"></div> | |
<div class="square blank" id="16_13"></div> | |
<div class="square blank" id="16_14"></div> | |
<div class="square blank" id="16_15"></div> | |
<div class="square blank" id="16_16"></div> | |
<div class="square blank" id="16_17"></div> | |
<div class="square blank" id="16_18"></div> | |
<div class="square blank" id="16_19"></div> | |
<div class="square blank" id="16_20"></div> | |
<div class="square blank" id="16_21"></div> | |
<div class="square blank" id="16_22"></div> | |
<div class="square blank" id="16_23"></div> | |
<div class="square blank" id="16_24"></div> | |
<div class="square blank" id="16_25"></div> | |
<div class="square blank" id="16_26"></div> | |
<div class="square blank" id="16_27"></div> | |
<div class="square blank" id="16_28"></div> | |
<div class="square blank" id="16_29"></div> | |
<div class="square blank" id="16_30"></div> | |
<div class="borderlr"></div> | |
<div class="borderbl"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="bordertb"></div> | |
<div class="borderbr"></div> | |
<div class="square blank" style="display: none;" id="0_0"></div> | |
<div class="square blank" style="display: none;" id="0_1"></div> | |
<div class="square blank" style="display: none;" id="0_2"></div> | |
<div class="square blank" style="display: none;" id="0_3"></div> | |
<div class="square blank" style="display: none;" id="0_4"></div> | |
<div class="square blank" style="display: none;" id="0_5"></div> | |
<div class="square blank" style="display: none;" id="0_6"></div> | |
<div class="square blank" style="display: none;" id="0_7"></div> | |
<div class="square blank" style="display: none;" id="0_8"></div> | |
<div class="square blank" style="display: none;" id="0_9"></div> | |
<div class="square blank" style="display: none;" id="0_10"></div> | |
<div class="square blank" style="display: none;" id="0_11"></div> | |
<div class="square blank" style="display: none;" id="0_12"></div> | |
<div class="square blank" style="display: none;" id="0_13"></div> | |
<div class="square blank" style="display: none;" id="0_14"></div> | |
<div class="square blank" style="display: none;" id="0_15"></div> | |
<div class="square blank" style="display: none;" id="0_16"></div> | |
<div class="square blank" style="display: none;" id="0_17"></div> | |
<div class="square blank" style="display: none;" id="0_18"></div> | |
<div class="square blank" style="display: none;" id="0_19"></div> | |
<div class="square blank" style="display: none;" id="0_20"></div> | |
<div class="square blank" style="display: none;" id="0_21"></div> | |
<div class="square blank" style="display: none;" id="0_22"></div> | |
<div class="square blank" style="display: none;" id="0_23"></div> | |
<div class="square blank" style="display: none;" id="0_24"></div> | |
<div class="square blank" style="display: none;" id="0_25"></div> | |
<div class="square blank" style="display: none;" id="0_26"></div> | |
<div class="square blank" style="display: none;" id="0_27"></div> | |
<div class="square blank" style="display: none;" id="0_28"></div> | |
<div class="square blank" style="display: none;" id="0_29"></div> | |
<div class="square blank" style="display: none;" id="0_30"></div> | |
<div class="square blank" style="display: none;" id="0_31"></div> | |
<div class="square blank" style="display: none;" id="17_0"></div> | |
<div class="square blank" style="display: none;" id="17_1"></div> | |
<div class="square blank" style="display: none;" id="17_2"></div> | |
<div class="square blank" style="display: none;" id="17_3"></div> | |
<div class="square blank" style="display: none;" id="17_4"></div> | |
<div class="square blank" style="display: none;" id="17_5"></div> | |
<div class="square blank" style="display: none;" id="17_6"></div> | |
<div class="square blank" style="display: none;" id="17_7"></div> | |
<div class="square blank" style="display: none;" id="17_8"></div> | |
<div class="square blank" style="display: none;" id="17_9"></div> | |
<div class="square blank" style="display: none;" id="17_10"></div> | |
<div class="square blank" style="display: none;" id="17_11"></div> | |
<div class="square blank" style="display: none;" id="17_12"></div> | |
<div class="square blank" style="display: none;" id="17_13"></div> | |
<div class="square blank" style="display: none;" id="17_14"></div> | |
<div class="square blank" style="display: none;" id="17_15"></div> | |
<div class="square blank" style="display: none;" id="17_16"></div> | |
<div class="square blank" style="display: none;" id="17_17"></div> | |
<div class="square blank" style="display: none;" id="17_18"></div> | |
<div class="square blank" style="display: none;" id="17_19"></div> | |
<div class="square blank" style="display: none;" id="17_20"></div> | |
<div class="square blank" style="display: none;" id="17_21"></div> | |
<div class="square blank" style="display: none;" id="17_22"></div> | |
<div class="square blank" style="display: none;" id="17_23"></div> | |
<div class="square blank" style="display: none;" id="17_24"></div> | |
<div class="square blank" style="display: none;" id="17_25"></div> | |
<div class="square blank" style="display: none;" id="17_26"></div> | |
<div class="square blank" style="display: none;" id="17_27"></div> | |
<div class="square blank" style="display: none;" id="17_28"></div> | |
<div class="square blank" style="display: none;" id="17_29"></div> | |
<div class="square blank" style="display: none;" id="17_30"></div> | |
<div class="square blank" style="display: none;" id="17_31"></div> | |
<div class="square blank" style="display: none;" id="1_0"></div> | |
<div class="square blank" style="display: none;" id="1_31"></div> | |
<div class="square blank" style="display: none;" id="2_0"></div> | |
<div class="square blank" style="display: none;" id="2_31"></div> | |
<div class="square blank" style="display: none;" id="3_0"></div> | |
<div class="square blank" style="display: none;" id="3_31"></div> | |
<div class="square blank" style="display: none;" id="4_0"></div> | |
<div class="square blank" style="display: none;" id="4_31"></div> | |
<div class="square blank" style="display: none;" id="5_0"></div> | |
<div class="square blank" style="display: none;" id="5_31"></div> | |
<div class="square blank" style="display: none;" id="6_0"></div> | |
<div class="square blank" style="display: none;" id="6_31"></div> | |
<div class="square blank" style="display: none;" id="7_0"></div> | |
<div class="square blank" style="display: none;" id="7_31"></div> | |
<div class="square blank" style="display: none;" id="8_0"></div> | |
<div class="square blank" style="display: none;" id="8_31"></div> | |
<div class="square blank" style="display: none;" id="9_0"></div> | |
<div class="square blank" style="display: none;" id="9_31"></div> | |
<div class="square blank" style="display: none;" id="10_0"></div> | |
<div class="square blank" style="display: none;" id="10_31"></div> | |
<div class="square blank" style="display: none;" id="11_0"></div> | |
<div class="square blank" style="display: none;" id="11_31"></div> | |
<div class="square blank" style="display: none;" id="12_0"></div> | |
<div class="square blank" style="display: none;" id="12_31"></div> | |
<div class="square blank" style="display: none;" id="13_0"></div> | |
<div class="square blank" style="display: none;" id="13_31"></div> | |
<div class="square blank" style="display: none;" id="14_0"></div> | |
<div class="square blank" style="display: none;" id="14_31"></div> | |
<div class="square blank" style="display: none;" id="15_0"></div> | |
<div class="square blank" style="display: none;" id="15_31"></div> | |
<div class="square blank" style="display: none;" id="16_0"></div> | |
<div class="square blank" style="display: none;" id="16_31"></div> | |
</div> | |
<form id="options-form"> | |
<table cellspacing="0" cellpadding="2" id="options" class="dialog"> | |
<tbody> | |
<tr class="dialog-title"> | |
<td style="padding: 3px;">Game</td> | |
<td colspan="3" style="padding: 3px; text-align: right;"> | |
<span id="options-close" class="dialog-close" | |
title="close this box">×</span> | |
</td> | |
</tr> | |
<tr class="dialog-bar"> | |
<td></td> | |
<td>Height</td> | |
<td>Width</td> | |
<td>Mines</td> | |
</tr> | |
<tr> | |
<td><label><input type="radio" name="field" id="beginner"> | |
<strong>Beginner</strong></label></td> | |
<td>9</td> | |
<td>9</td> | |
<td>10</td> | |
</tr> | |
<tr> | |
<td><label><input type="radio" name="field" id="intermediate"> | |
<strong>Intermediate</strong></label></td> | |
<td>16</td> | |
<td>16</td> | |
<td>40</td> | |
</tr> | |
<tr> | |
<td><label><input type="radio" name="field" checked="checked" | |
id="expert"> <strong>Expert</strong></label></td> | |
<td>16</td> | |
<td>30</td> | |
<td>99</td> | |
</tr> | |
<tr> | |
<td><label><input type="radio" name="field" id="custom"> Custom</label> | |
</td> | |
<td><input type="text" value="20" id="custom_height" | |
class="dialog-text-input" | |
onfocus="$('#custom').attr('checked', true);"></td> | |
<td><input type="text" value="30" id="custom_width" | |
class="dialog-text-input" | |
onfocus="$('#custom').attr('checked', true);"></td> | |
<td><input type="text" value="145" id="custom_mines" | |
class="dialog-text-input" | |
onfocus="$('#custom').attr('checked', true);"></td> | |
</tr> | |
<tr class="dialog-bar"> | |
<td><input type="submit" value="New Game" class="dialogText" | |
style="vertical-align: middle;"></td> | |
<td colspan="3"> | |
<label style="margin-bottom: 0;"><input type="checkbox" id="marks"> | |
Marks (?)</label> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</form> | |
<table cellspacing="0" cellpadding="2" id="display" class="dialog"> | |
<tbody> | |
<tr class="dialog-title"> | |
<td>Display</td> | |
<td style="text-align: right;"> | |
<span id="display-close" class="dialog-close" | |
title="close this box">×</span> | |
</td> | |
</tr> | |
<tr> | |
<td style="padding: 6px;"><strong>Zoom</strong></td> | |
<td style="padding: 6px;"> | |
<label><input type="radio" name="zoom" id="zoom100" value="1" | |
checked="checked"> 100%</label><br> | |
<label><input type="radio" name="zoom" id="zoom150" value="1.5"> | |
150%</label><br> | |
<label><input type="radio" name="zoom" id="zoom200" value="2" | |
checked="checked"> 200%</label> | |
</td> | |
</tr> | |
<tr> | |
<td style="padding: 6px; border-top: 1px solid #AAA;"> | |
<strong>Position</strong> | |
</td> | |
<td style="padding: 6px; border-top: 1px solid #AAA;"> | |
<label><input type="radio" name="position" id="position-center" | |
value="center" checked="checked"> Center</label><br> | |
<label><input type="radio" name="position" id="position-left" | |
value="left" checked="checked"> Left</label> | |
</td> | |
</tr> | |
<tr> | |
<td style="padding: 6px; border-top: 1px solid #AAA;"><label | |
for="nightMode"><strong>Night Mode</strong></label></td> | |
<td style="padding: 6px; border-top: 1px solid #AAA;"> | |
<input type="checkbox" name="nightMode" id="nightMode" | |
checked="checked"> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
<table cellspacing="0" cellpadding="2" id="controls" class="dialog"> | |
<tbody> | |
<tr class="dialog-title"> | |
<td>Controls</td> | |
<td style="text-align: right;"> | |
<span id="controls-close" class="dialog-close" | |
title="close this box">×</span> | |
</td> | |
</tr> | |
<tr> | |
<td style="padding: 6px;"><strong>Desktop</strong></td> | |
<td style="padding: 6px;"> | |
<ul> | |
<li><b>Left-click</b> an empty square to reveal it.</li> | |
<li><b>Right-click</b> (or <b>Ctrl+click</b>) an empty square to | |
flag it.</li> | |
<li><b>Midde-click</b> (or <b>left+right click</b>) a number to | |
reveal<br> its adjacent squares.</li> | |
<li>Press <b>space</b> bar while hovering over a square to | |
flag<br>it or reveal its adjacent squares.</li> | |
<li>Press <b>S</b> or click the smiley face to start a new game. | |
</li> | |
<li>Press <b>D</b> to self-destruct</li> | |
<li>Press <b>F</b> to Fullscreen</li> | |
</ul> | |
</td> | |
</tr> | |
<tr> | |
<td style="padding: 6px; border-top: 1px solid var(--hexa)"> | |
<strong>Mobile</strong> | |
</td> | |
<td style="padding: 6px; border-top: 1px solid var(--hexa);"> | |
<ul> | |
<li><b>Tap</b> an empty square to reveal it.</li> | |
<li><b>Long-press</b> an empty square to flag it.</li> | |
<li><b>Tap</b> a number to reveal its adjacent squares.</li> | |
</ul> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
<form id="import-form"> | |
<table cellspacing="0" cellpadding="2" id="import" class="dialog"> | |
<tbody> | |
<tr class="dialog-title"> | |
<td>Import</td> | |
<td style="text-align: right;"> | |
<span id="import-close" class="dialog-close" | |
title="close this box">×</span> | |
</td> | |
</tr> | |
<tr> | |
<td colspan="2"> | |
Paste exported game state: | |
<br> | |
<textarea | |
style="width: 240px; height: 40px; margin-top: 4px;"></textarea> | |
</td> | |
</tr> | |
<tr class="dialog-bar"> | |
<td colspan="2"> | |
<input type="submit" value="Load Game"> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</form> | |
<table cellspacing="0" cellpadding="2" id="export" class="dialog"> | |
<tbody> | |
<tr class="dialog-title"> | |
<td>Export</td> | |
<td style="text-align: right;"> | |
<span id="export-close" class="dialog-close" | |
title="close this box">×</span> | |
</td> | |
</tr> | |
<tr> | |
<td colspan="2"> | |
<em id="export-message"></em> | |
<br> | |
<textarea | |
style="width: 240px; height: 40px; margin-top: 4px;"></textarea> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</div> | |
</div> | |
</div> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
<notice> | |
<h1>Please close DevTools and/or use a PC</h1> | |
</notice> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment