Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
todomvc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Eugene Shen
todomvc
Commits
67233f91
Commit
67233f91
authored
Nov 08, 2011
by
Sindre Sorhus
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add jQuery example
parent
b304ba29
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1488 additions
and
0 deletions
+1488
-0
todo-example/jquery/css/app.css
todo-example/jquery/css/app.css
+170
-0
todo-example/jquery/img/destroy.png
todo-example/jquery/img/destroy.png
+0
-0
todo-example/jquery/index.html
todo-example/jquery/index.html
+45
-0
todo-example/jquery/js/app.js
todo-example/jquery/js/app.js
+137
-0
todo-example/jquery/js/jquery.min.js
todo-example/jquery/js/jquery.min.js
+4
-0
todo-example/jquery/js/jquery.tmpl.js
todo-example/jquery/js/jquery.tmpl.js
+503
-0
todo-example/jquery/js/json2.js
todo-example/jquery/js/json2.js
+481
-0
todo-example/jquery/js/store.js
todo-example/jquery/js/store.js
+148
-0
No files found.
todo-example/jquery/css/app.css
0 → 100755
View file @
67233f91
html
,
body
{
margin
:
0
;
padding
:
0
;
}
body
{
font-family
:
"Helvetica Neue"
,
helvetica
,
arial
,
sans-serif
;
font-size
:
14px
;
line-height
:
1.4em
;
background
:
#eeeeee
;
color
:
#333333
;
}
#todoapp
{
width
:
480px
;
margin
:
0
auto
40px
auto
;
background
:
white
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
2px
6px
0
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
2px
6px
0
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
2px
6px
0
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
2px
6px
0
;
-moz-border-radius
:
0
0
5px
5px
;
-o-border-radius
:
0
0
5px
5px
;
-webkit-border-radius
:
0
0
5px
5px
;
border-radius
:
0
0
5px
5px
;
}
#todoapp
{
padding
:
20px
;
}
#todoapp
h1
{
font-size
:
36px
;
font-weight
:
bold
;
text-align
:
center
;
padding
:
0
0
10px
0
;
}
#todoapp
input
[
type
=
"text"
]
{
width
:
466px
;
font-size
:
24px
;
font-family
:
inherit
;
line-height
:
1.4em
;
border
:
0
;
outline
:
none
;
padding
:
6px
;
border
:
1px
solid
#999999
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
}
#todoapp
input
::-webkit-input-placeholder
{
font-style
:
italic
;
}
#todoapp
.items
{
margin
:
10px
0
;
padding
:
0
;
list-style
:
none
;
}
#todoapp
.item
{
padding
:
15px
20px
15px
0
;
position
:
relative
;
font-size
:
24px
;
border-bottom
:
1px
solid
#cccccc
;
}
#todoapp
.item.done
span
{
color
:
#777777
;
text-decoration
:
line-through
;
}
#todoapp
.item
.destroy
{
position
:
absolute
;
right
:
10px
;
top
:
16px
;
display
:
none
;
cursor
:
pointer
;
width
:
20px
;
height
:
20px
;
background
:
url(../img/destroy.png)
no-repeat
center
center
;
}
#todoapp
.item
:hover
.destroy
{
display
:
block
;
}
#todoapp
.item
.edit
{
display
:
none
;
}
#todoapp
.item.editing
.edit
{
display
:
block
;
}
#todoapp
.item.editing
.view
{
display
:
none
;
}
#todoapp
footer
{
display
:
none
;
margin
:
20px
-20px
-20px
-20px
;
overflow
:
hidden
;
color
:
#555555
;
background
:
#f4fce8
;
border-top
:
1px
solid
#ededed
;
padding
:
0
20px
;
line-height
:
36px
;
-moz-border-radius
:
0
0
5px
5px
;
-o-border-radius
:
0
0
5px
5px
;
-webkit-border-radius
:
0
0
5px
5px
;
border-radius
:
0
0
5px
5px
;
}
#todoapp
.clear
{
display
:
none
;
float
:
right
;
line-height
:
20px
;
text-decoration
:
none
;
background
:
rgba
(
0
,
0
,
0
,
0.1
);
color
:
#555555
;
font-size
:
11px
;
margin-top
:
8px
;
margin-bottom
:
8px
;
padding
:
0
10px
1px
;
-moz-border-radius
:
12px
;
-webkit-border-radius
:
12px
;
-o-border-radius
:
12px
;
border-radius
:
12px
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
-1px
0
0
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
-1px
0
0
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
-1px
0
0
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
-1px
0
0
;
cursor
:
pointer
;
}
#todoapp
.clear
:hover
{
background
:
rgba
(
0
,
0
,
0
,
0.15
);
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.3
)
0
-1px
0
0
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.3
)
0
-1px
0
0
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.3
)
0
-1px
0
0
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.3
)
0
-1px
0
0
;
}
#todoapp
.clear
:active
{
position
:
relative
;
top
:
1px
;
}
#todoapp
.count
span
{
font-weight
:
bold
;
}
#instructions
{
width
:
520px
;
margin
:
10px
auto
;
color
:
#777777
;
text-shadow
:
rgba
(
255
,
255
,
255
,
0.8
)
0
1px
0
;
text-align
:
center
;
}
#instructions
a
{
color
:
#336699
;
}
#credits
{
width
:
520px
;
margin
:
30px
auto
;
color
:
#999
;
text-shadow
:
rgba
(
255
,
255
,
255
,
0.8
)
0
1px
0
;
text-align
:
center
;
}
#credits
a
{
color
:
#888
;
}
\ No newline at end of file
todo-example/jquery/img/destroy.png
0 → 100755
View file @
67233f91
1.19 KB
todo-example/jquery/index.html
0 → 100755
View file @
67233f91
<!doctype html>
<html>
<head>
<title>
jQuery
</title>
<link
rel=
"stylesheet"
href=
"css/app.css"
>
<script
src=
"js/json2.js"
></script>
<script
src=
"js/jquery.min.js"
></script>
<script
src=
"js/jquery.tmpl.js"
></script>
<script
src=
"js/store.js"
></script>
<script
src=
"js/app.js"
></script>
<script
type=
"text/x-jquery-tmpl"
id=
"todo-template"
>
<
li
class
=
"
item {{if done}}done{{/if}}
"
data
-
id
=
"
${id}
"
>
<
div
class
=
"
view
"
title
=
"
Double click to edit...
"
>
<
input
type
=
"
checkbox
"
{{
if
done
}}
checked
=
"
checked
"
{{
/if}}>
<
span
>
$
{
title
}
<
/span
>
<
a
class
=
"
destroy
"
><
/a
>
<
/div
>
<
div
class
=
"
edit
"
>
<
input
type
=
"
text
"
value
=
"
${title}
"
>
<
/div
>
<
/li
>
</script>
</head>
<body>
<div
id=
"todoapp"
>
<h1>
Todos
</h1>
<form>
<input
type=
"text"
placeholder=
"What needs to be done?"
>
</form>
<ul
class=
"items"
></ul>
<footer>
<a
class=
"clear"
>
Clear completed
</a>
<div
class=
"count"
>
<span
class=
"countVal"
></span>
items left
</div>
</footer>
</div>
<div
id=
'instructions'
>
Double-click to edit a todo.
</div>
<div
id=
"credits"
>
Created by
<a
href=
"http://sindresorhus.com"
>
Sindre Sorhus
</a>
.
</div>
</body>
</html>
\ No newline at end of file
todo-example/jquery/js/app.js
0 → 100755
View file @
67233f91
// Array Remove - By John Resig (MIT Licensed)
Array
.
prototype
.
remove
=
function
(
from
,
to
)
{
var
rest
=
this
.
slice
((
to
||
from
)
+
1
||
this
.
length
);
this
.
length
=
from
<
0
?
this
.
length
+
from
:
from
;
return
this
.
push
.
apply
(
this
,
rest
);
};
/*
By Sindre Sorhus
sindresorhus.com
*/
jQuery
(
function
(
$
){
var
Utils
=
{
// https://gist.github.com/823878
uuid
:
function
()
{
var
uuid
=
""
,
i
,
random
;
for
(
i
=
0
;
i
<
32
;
i
++
)
{
random
=
Math
.
random
()
*
16
|
0
;
if
(
i
==
8
||
i
==
12
||
i
==
16
||
i
==
20
)
{
uuid
+=
"
-
"
;
}
uuid
+=
(
i
==
12
?
4
:
(
i
==
16
?
(
random
&
3
|
8
)
:
random
)).
toString
(
16
);
}
return
uuid
;
}
};
var
App
=
{
init
:
function
()
{
this
.
element
=
$
(
'
#todoapp
'
);
this
.
todoList
=
$
(
'
.items
'
);
// localStorage support
this
.
store
=
new
Store
(
'
todoapp
'
);
this
.
todos
=
this
.
store
.
get
(
'
todos
'
)
||
[];
this
.
bindEvents
();
this
.
render
();
},
render
:
function
()
{
var
template
=
$
(
'
#todo-template
'
).
tmpl
(
this
.
todos
);
this
.
todoList
.
html
(
template
);
this
.
renderActiveTodoCount
();
this
.
store
.
set
(
'
todos
'
,
this
.
todos
);
// Only show the footer when there are at least one todo.
$
(
'
footer
'
).
toggle
(
!!
this
.
todos
.
length
);
// Only show the clear button when there are done todos.
$
(
'
.clear
'
).
toggle
(
!!
(
this
.
todos
.
length
-
this
.
renderActiveTodoCount
()
)
);
},
bindEvents
:
function
()
{
var
elem
=
this
.
element
,
list
=
this
.
todoList
;
elem
.
on
(
'
click
'
,
'
.clear
'
,
this
.
destroyDone
);
elem
.
on
(
'
submit
'
,
'
form
'
,
this
.
create
);
list
.
on
(
'
change
'
,
'
input[type="checkbox"]
'
,
this
.
toggle
);
list
.
on
(
'
dblclick
'
,
'
.view
'
,
this
.
edit
);
list
.
on
(
'
keypress
'
,
'
input[type="text"]
'
,
this
.
blurOnEnter
);
list
.
on
(
'
blur
'
,
'
input[type="text"]
'
,
this
.
update
);
list
.
on
(
'
click
'
,
'
.destroy
'
,
this
.
destroy
);
},
renderActiveTodoCount
:
function
()
{
var
count
=
0
;
$
.
each
(
this
.
todos
,
function
(
i
,
val
)
{
if
(
!
val
.
done
)
{
count
++
;
}
});
$
(
'
.countVal
'
).
text
(
count
);
return
count
;
},
destroyDone
:
function
()
{
// Reverse loop; since we are dynamically removing items from the todos array
for
(
var
i
=
App
.
todos
.
length
;
i
--
;
)
{
if
(
App
.
todos
[
i
].
done
)
{
App
.
todos
.
remove
(
i
);
}
}
App
.
render
();
},
// Accepts an element from inside the ".item" div, and returns the corresponding todo in the todos array.
getTodo
:
function
(
elem
,
callback
)
{
var
id
=
$
(
elem
).
closest
(
'
.item
'
).
data
(
'
id
'
);
$
.
each
(
this
.
todos
,
function
(
i
,
val
)
{
if
(
val
.
id
===
id
)
{
callback
.
apply
(
App
,
arguments
);
return
false
;
}
});
},
create
:
function
(
e
)
{
e
.
preventDefault
();
var
$input
=
$
(
this
).
find
(
'
input
'
),
inputVal
=
$input
.
val
();
if
(
!
inputVal
)
{
return
;
}
App
.
todos
.
push
({
title
:
inputVal
,
id
:
Utils
.
uuid
(),
done
:
false
});
$input
.
val
(
''
);
App
.
render
();
},
toggle
:
function
()
{
App
.
getTodo
(
this
,
function
(
i
,
val
)
{
val
.
done
=
!
val
.
done
;
});
App
.
render
();
},
edit
:
function
()
{
$
(
this
).
closest
(
'
.item
'
).
addClass
(
'
editing
'
).
find
(
'
.edit input
'
).
focus
();
},
blurOnEnter
:
function
(
e
)
{
if
(
e
.
keyCode
===
13
)
{
e
.
target
.
blur
();
}
},
update
:
function
()
{
var
newVal
=
$
(
this
).
removeClass
(
'
editing
'
).
val
();
App
.
getTodo
(
this
,
function
(
i
)
{
this
.
todos
[
i
].
title
=
newVal
;
});
App
.
render
();
},
destroy
:
function
()
{
App
.
getTodo
(
this
,
function
(
i
)
{
this
.
todos
.
remove
(
i
);
this
.
render
();
});
}
};
window
.
TodoApp
=
App
.
init
();
});
\ No newline at end of file
todo-example/jquery/js/jquery.min.js
0 → 100644
View file @
67233f91
/*! jQuery v1.7 jquery.com | jquery.org/license */
(
function
(
a
,
b
){
function
cA
(
a
){
return
f
.
isWindow
(
a
)?
a
:
a
.
nodeType
===
9
?
a
.
defaultView
||
a
.
parentWindow
:
!
1
}
function
cx
(
a
){
if
(
!
cm
[
a
]){
var
b
=
c
.
body
,
d
=
f
(
"
<
"
+
a
+
"
>
"
).
appendTo
(
b
),
e
=
d
.
css
(
"
display
"
);
d
.
remove
();
if
(
e
===
"
none
"
||
e
===
""
){
cn
||
(
cn
=
c
.
createElement
(
"
iframe
"
),
cn
.
frameBorder
=
cn
.
width
=
cn
.
height
=
0
),
b
.
appendChild
(
cn
);
if
(
!
co
||!
cn
.
createElement
)
co
=
(
cn
.
contentWindow
||
cn
.
contentDocument
).
document
,
co
.
write
((
c
.
compatMode
===
"
CSS1Compat
"
?
"
<!doctype html>
"
:
""
)
+
"
<html><body>
"
),
co
.
close
();
d
=
co
.
createElement
(
a
),
co
.
body
.
appendChild
(
d
),
e
=
f
.
css
(
d
,
"
display
"
),
b
.
removeChild
(
cn
)}
cm
[
a
]
=
e
}
return
cm
[
a
]}
function
cw
(
a
,
b
){
var
c
=
{};
f
.
each
(
cs
.
concat
.
apply
([],
cs
.
slice
(
0
,
b
)),
function
(){
c
[
this
]
=
a
});
return
c
}
function
cv
(){
ct
=
b
}
function
cu
(){
setTimeout
(
cv
,
0
);
return
ct
=
f
.
now
()}
function
cl
(){
try
{
return
new
a
.
ActiveXObject
(
"
Microsoft.XMLHTTP
"
)}
catch
(
b
){}}
function
ck
(){
try
{
return
new
a
.
XMLHttpRequest
}
catch
(
b
){}}
function
ce
(
a
,
c
){
a
.
dataFilter
&&
(
c
=
a
.
dataFilter
(
c
,
a
.
dataType
));
var
d
=
a
.
dataTypes
,
e
=
{},
g
,
h
,
i
=
d
.
length
,
j
,
k
=
d
[
0
],
l
,
m
,
n
,
o
,
p
;
for
(
g
=
1
;
g
<
i
;
g
++
){
if
(
g
===
1
)
for
(
h
in
a
.
converters
)
typeof
h
==
"
string
"
&&
(
e
[
h
.
toLowerCase
()]
=
a
.
converters
[
h
]);
l
=
k
,
k
=
d
[
g
];
if
(
k
===
"
*
"
)
k
=
l
;
else
if
(
l
!==
"
*
"
&&
l
!==
k
){
m
=
l
+
"
"
+
k
,
n
=
e
[
m
]
||
e
[
"
*
"
+
k
];
if
(
!
n
){
p
=
b
;
for
(
o
in
e
){
j
=
o
.
split
(
"
"
);
if
(
j
[
0
]
===
l
||
j
[
0
]
===
"
*
"
){
p
=
e
[
j
[
1
]
+
"
"
+
k
];
if
(
p
){
o
=
e
[
o
],
o
===!
0
?
n
=
p
:
p
===!
0
&&
(
n
=
o
);
break
}}}}
!
n
&&!
p
&&
f
.
error
(
"
No conversion from
"
+
m
.
replace
(
"
"
,
"
to
"
)),
n
!==!
0
&&
(
c
=
n
?
n
(
c
):
p
(
o
(
c
)))}}
return
c
}
function
cd
(
a
,
c
,
d
){
var
e
=
a
.
contents
,
f
=
a
.
dataTypes
,
g
=
a
.
responseFields
,
h
,
i
,
j
,
k
;
for
(
i
in
g
)
i
in
d
&&
(
c
[
g
[
i
]]
=
d
[
i
]);
while
(
f
[
0
]
===
"
*
"
)
f
.
shift
(),
h
===
b
&&
(
h
=
a
.
mimeType
||
c
.
getResponseHeader
(
"
content-type
"
));
if
(
h
)
for
(
i
in
e
)
if
(
e
[
i
]
&&
e
[
i
].
test
(
h
)){
f
.
unshift
(
i
);
break
}
if
(
f
[
0
]
in
d
)
j
=
f
[
0
];
else
{
for
(
i
in
d
){
if
(
!
f
[
0
]
||
a
.
converters
[
i
+
"
"
+
f
[
0
]]){
j
=
i
;
break
}
k
||
(
k
=
i
)}
j
=
j
||
k
}
if
(
j
){
j
!==
f
[
0
]
&&
f
.
unshift
(
j
);
return
d
[
j
]}}
function
cc
(
a
,
b
,
c
,
d
){
if
(
f
.
isArray
(
b
))
f
.
each
(
b
,
function
(
b
,
e
){
c
||
bG
.
test
(
a
)?
d
(
a
,
e
):
cc
(
a
+
"
[
"
+
(
typeof
e
==
"
object
"
||
f
.
isArray
(
e
)?
b
:
""
)
+
"
]
"
,
e
,
c
,
d
)});
else
if
(
!
c
&&
b
!=
null
&&
typeof
b
==
"
object
"
)
for
(
var
e
in
b
)
cc
(
a
+
"
[
"
+
e
+
"
]
"
,
b
[
e
],
c
,
d
);
else
d
(
a
,
b
)}
function
cb
(
a
,
c
){
var
d
,
e
,
g
=
f
.
ajaxSettings
.
flatOptions
||
{};
for
(
d
in
c
)
c
[
d
]
!==
b
&&
((
g
[
d
]?
a
:
e
||
(
e
=
{}))[
d
]
=
c
[
d
]);
e
&&
f
.
extend
(
!
0
,
a
,
e
)}
function
ca
(
a
,
c
,
d
,
e
,
f
,
g
){
f
=
f
||
c
.
dataTypes
[
0
],
g
=
g
||
{},
g
[
f
]
=!
0
;
var
h
=
a
[
f
],
i
=
0
,
j
=
h
?
h
.
length
:
0
,
k
=
a
===
bV
,
l
;
for
(;
i
<
j
&&
(
k
||!
l
);
i
++
)
l
=
h
[
i
](
c
,
d
,
e
),
typeof
l
==
"
string
"
&&
(
!
k
||
g
[
l
]?
l
=
b
:(
c
.
dataTypes
.
unshift
(
l
),
l
=
ca
(
a
,
c
,
d
,
e
,
l
,
g
)));(
k
||!
l
)
&&!
g
[
"
*
"
]
&&
(
l
=
ca
(
a
,
c
,
d
,
e
,
"
*
"
,
g
));
return
l
}
function
b_
(
a
){
return
function
(
b
,
c
){
typeof
b
!=
"
string
"
&&
(
c
=
b
,
b
=
"
*
"
);
if
(
f
.
isFunction
(
c
)){
var
d
=
b
.
toLowerCase
().
split
(
bR
),
e
=
0
,
g
=
d
.
length
,
h
,
i
,
j
;
for
(;
e
<
g
;
e
++
)
h
=
d
[
e
],
j
=
/^
\+
/
.
test
(
h
),
j
&&
(
h
=
h
.
substr
(
1
)
||
"
*
"
),
i
=
a
[
h
]
=
a
[
h
]
||
[],
i
[
j
?
"
unshift
"
:
"
push
"
](
c
)}}}
function
bE
(
a
,
b
,
c
){
var
d
=
b
===
"
width
"
?
a
.
offsetWidth
:
a
.
offsetHeight
,
e
=
b
===
"
width
"
?
bz
:
bA
;
if
(
d
>
0
){
c
!==
"
border
"
&&
f
.
each
(
e
,
function
(){
c
||
(
d
-=
parseFloat
(
f
.
css
(
a
,
"
padding
"
+
this
))
||
0
),
c
===
"
margin
"
?
d
+=
parseFloat
(
f
.
css
(
a
,
c
+
this
))
||
0
:
d
-=
parseFloat
(
f
.
css
(
a
,
"
border
"
+
this
+
"
Width
"
))
||
0
});
return
d
+
"
px
"
}
d
=
bB
(
a
,
b
,
b
);
if
(
d
<
0
||
d
==
null
)
d
=
a
.
style
[
b
]
||
0
;
d
=
parseFloat
(
d
)
||
0
,
c
&&
f
.
each
(
e
,
function
(){
d
+=
parseFloat
(
f
.
css
(
a
,
"
padding
"
+
this
))
||
0
,
c
!==
"
padding
"
&&
(
d
+=
parseFloat
(
f
.
css
(
a
,
"
border
"
+
this
+
"
Width
"
))
||
0
),
c
===
"
margin
"
&&
(
d
+=
parseFloat
(
f
.
css
(
a
,
c
+
this
))
||
0
)});
return
d
+
"
px
"
}
function
br
(
a
,
b
){
b
.
src
?
f
.
ajax
({
url
:
b
.
src
,
async
:
!
1
,
dataType
:
"
script
"
}):
f
.
globalEval
((
b
.
text
||
b
.
textContent
||
b
.
innerHTML
||
""
).
replace
(
bi
,
"
/*$0*/
"
)),
b
.
parentNode
&&
b
.
parentNode
.
removeChild
(
b
)}
function
bq
(
a
){
var
b
=
(
a
.
nodeName
||
""
).
toLowerCase
();
b
===
"
input
"
?
bp
(
a
):
b
!==
"
script
"
&&
typeof
a
.
getElementsByTagName
!=
"
undefined
"
&&
f
.
grep
(
a
.
getElementsByTagName
(
"
input
"
),
bp
)}
function
bp
(
a
){
if
(
a
.
type
===
"
checkbox
"
||
a
.
type
===
"
radio
"
)
a
.
defaultChecked
=
a
.
checked
}
function
bo
(
a
){
return
typeof
a
.
getElementsByTagName
!=
"
undefined
"
?
a
.
getElementsByTagName
(
"
*
"
):
typeof
a
.
querySelectorAll
!=
"
undefined
"
?
a
.
querySelectorAll
(
"
*
"
):[]}
function
bn
(
a
,
b
){
var
c
;
if
(
b
.
nodeType
===
1
){
b
.
clearAttributes
&&
b
.
clearAttributes
(),
b
.
mergeAttributes
&&
b
.
mergeAttributes
(
a
),
c
=
b
.
nodeName
.
toLowerCase
();
if
(
c
===
"
object
"
)
b
.
outerHTML
=
a
.
outerHTML
;
else
if
(
c
!==
"
input
"
||
a
.
type
!==
"
checkbox
"
&&
a
.
type
!==
"
radio
"
){
if
(
c
===
"
option
"
)
b
.
selected
=
a
.
defaultSelected
;
else
if
(
c
===
"
input
"
||
c
===
"
textarea
"
)
b
.
defaultValue
=
a
.
defaultValue
}
else
a
.
checked
&&
(
b
.
defaultChecked
=
b
.
checked
=
a
.
checked
),
b
.
value
!==
a
.
value
&&
(
b
.
value
=
a
.
value
);
b
.
removeAttribute
(
f
.
expando
)}}
function
bm
(
a
,
b
){
if
(
b
.
nodeType
===
1
&&!!
f
.
hasData
(
a
)){
var
c
,
d
,
e
,
g
=
f
.
_data
(
a
),
h
=
f
.
_data
(
b
,
g
),
i
=
g
.
events
;
if
(
i
){
delete
h
.
handle
,
h
.
events
=
{};
for
(
c
in
i
)
for
(
d
=
0
,
e
=
i
[
c
].
length
;
d
<
e
;
d
++
)
f
.
event
.
add
(
b
,
c
+
(
i
[
c
][
d
].
namespace
?
"
.
"
:
""
)
+
i
[
c
][
d
].
namespace
,
i
[
c
][
d
],
i
[
c
][
d
].
data
)}
h
.
data
&&
(
h
.
data
=
f
.
extend
({},
h
.
data
))}}
function
bl
(
a
,
b
){
return
f
.
nodeName
(
a
,
"
table
"
)?
a
.
getElementsByTagName
(
"
tbody
"
)[
0
]
||
a
.
appendChild
(
a
.
ownerDocument
.
createElement
(
"
tbody
"
)):
a
}
function
X
(
a
){
var
b
=
Y
.
split
(
"
"
),
c
=
a
.
createDocumentFragment
();
if
(
c
.
createElement
)
while
(
b
.
length
)
c
.
createElement
(
b
.
pop
());
return
c
}
function
W
(
a
,
b
,
c
){
b
=
b
||
0
;
if
(
f
.
isFunction
(
b
))
return
f
.
grep
(
a
,
function
(
a
,
d
){
var
e
=!!
b
.
call
(
a
,
d
,
a
);
return
e
===
c
});
if
(
b
.
nodeType
)
return
f
.
grep
(
a
,
function
(
a
,
d
){
return
a
===
b
===
c
});
if
(
typeof
b
==
"
string
"
){
var
d
=
f
.
grep
(
a
,
function
(
a
){
return
a
.
nodeType
===
1
});
if
(
R
.
test
(
b
))
return
f
.
filter
(
b
,
d
,
!
c
);
b
=
f
.
filter
(
b
,
d
)}
return
f
.
grep
(
a
,
function
(
a
,
d
){
return
f
.
inArray
(
a
,
b
)
>=
0
===
c
})}
function
V
(
a
){
return
!
a
||!
a
.
parentNode
||
a
.
parentNode
.
nodeType
===
11
}
function
N
(){
return
!
0
}
function
M
(){
return
!
1
}
function
n
(
a
,
b
,
c
){
var
d
=
b
+
"
defer
"
,
e
=
b
+
"
queue
"
,
g
=
b
+
"
mark
"
,
h
=
f
.
_data
(
a
,
d
);
h
&&
(
c
===
"
queue
"
||!
f
.
_data
(
a
,
e
))
&&
(
c
===
"
mark
"
||!
f
.
_data
(
a
,
g
))
&&
setTimeout
(
function
(){
!
f
.
_data
(
a
,
e
)
&&!
f
.
_data
(
a
,
g
)
&&
(
f
.
removeData
(
a
,
d
,
!
0
),
h
.
fire
())},
0
)}
function
m
(
a
){
for
(
var
b
in
a
){
if
(
b
===
"
data
"
&&
f
.
isEmptyObject
(
a
[
b
]))
continue
;
if
(
b
!==
"
toJSON
"
)
return
!
1
}
return
!
0
}
function
l
(
a
,
c
,
d
){
if
(
d
===
b
&&
a
.
nodeType
===
1
){
var
e
=
"
data-
"
+
c
.
replace
(
k
,
"
-$1
"
).
toLowerCase
();
d
=
a
.
getAttribute
(
e
);
if
(
typeof
d
==
"
string
"
){
try
{
d
=
d
===
"
true
"
?
!
0
:
d
===
"
false
"
?
!
1
:
d
===
"
null
"
?
null
:
f
.
isNumeric
(
d
)?
parseFloat
(
d
):
j
.
test
(
d
)?
f
.
parseJSON
(
d
):
d
}
catch
(
g
){}
f
.
data
(
a
,
c
,
d
)}
else
d
=
b
}
return
d
}
function
h
(
a
){
var
b
=
g
[
a
]
=
{},
c
,
d
;
a
=
a
.
split
(
/
\s
+/
);
for
(
c
=
0
,
d
=
a
.
length
;
c
<
d
;
c
++
)
b
[
a
[
c
]]
=!
0
;
return
b
}
var
c
=
a
.
document
,
d
=
a
.
navigator
,
e
=
a
.
location
,
f
=
function
(){
function
K
(){
if
(
!
e
.
isReady
){
try
{
c
.
documentElement
.
doScroll
(
"
left
"
)}
catch
(
a
){
setTimeout
(
K
,
1
);
return
}
e
.
ready
()}}
var
e
=
function
(
a
,
b
){
return
new
e
.
fn
.
init
(
a
,
b
,
h
)},
f
=
a
.
jQuery
,
g
=
a
.
$
,
h
,
i
=
/^
(?:[^
#<
]
*
(
<
[\w\W]
+>
)[^
>
]
*$|#
([\w\-]
*
)
$
)
/
,
j
=
/
\S
/
,
k
=
/^
\s
+/
,
l
=
/
\s
+$/
,
m
=
/
\d
/
,
n
=
/^<
(\w
+
)\s
*
\/?
>
(?:
<
\/\1
>
)?
$/
,
o
=
/^
[\]
,:{}
\s]
*$/
,
p
=
/
\\(?:[
"
\\\/
bfnrt
]
|u
[
0-9a-fA-F
]{4})
/g
,
q
=
/"
[^
"
\\\n\r]
*"|true|false|null|-
?\d
+
(?:\.\d
*
)?(?:[
eE
][
+
\-]?\d
+
)?
/g
,
r
=
/
(?:
^|:|,
)(?:\s
*
\[)
+/g
,
s
=
/
(
webkit
)[
\/]([\w
.
]
+
)
/
,
t
=
/
(
opera
)(?:
.*version
)?[
\/]([\w
.
]
+
)
/
,
u
=
/
(
msie
)
([\w
.
]
+
)
/
,
v
=
/
(
mozilla
)(?:
.*
?
rv:
([\w
.
]
+
))?
/
,
w
=
/-
([
a-z
]
|
[
0-9
])
/ig
,
x
=
/^-ms-/
,
y
=
function
(
a
,
b
){
return
(
b
+
""
).
toUpperCase
()},
z
=
d
.
userAgent
,
A
,
B
,
C
,
D
=
Object
.
prototype
.
toString
,
E
=
Object
.
prototype
.
hasOwnProperty
,
F
=
Array
.
prototype
.
push
,
G
=
Array
.
prototype
.
slice
,
H
=
String
.
prototype
.
trim
,
I
=
Array
.
prototype
.
indexOf
,
J
=
{};
e
.
fn
=
e
.
prototype
=
{
constructor
:
e
,
init
:
function
(
a
,
d
,
f
){
var
g
,
h
,
j
,
k
;
if
(
!
a
)
return
this
;
if
(
a
.
nodeType
){
this
.
context
=
this
[
0
]
=
a
,
this
.
length
=
1
;
return
this
}
if
(
a
===
"
body
"
&&!
d
&&
c
.
body
){
this
.
context
=
c
,
this
[
0
]
=
c
.
body
,
this
.
selector
=
a
,
this
.
length
=
1
;
return
this
}
if
(
typeof
a
==
"
string
"
){
a
.
charAt
(
0
)
!==
"
<
"
||
a
.
charAt
(
a
.
length
-
1
)
!==
"
>
"
||
a
.
length
<
3
?
g
=
i
.
exec
(
a
):
g
=
[
null
,
a
,
null
];
if
(
g
&&
(
g
[
1
]
||!
d
)){
if
(
g
[
1
]){
d
=
d
instanceof
e
?
d
[
0
]:
d
,
k
=
d
?
d
.
ownerDocument
||
d
:
c
,
j
=
n
.
exec
(
a
),
j
?
e
.
isPlainObject
(
d
)?(
a
=
[
c
.
createElement
(
j
[
1
])],
e
.
fn
.
attr
.
call
(
a
,
d
,
!
0
)):
a
=
[
k
.
createElement
(
j
[
1
])]:(
j
=
e
.
buildFragment
([
g
[
1
]],[
k
]),
a
=
(
j
.
cacheable
?
e
.
clone
(
j
.
fragment
):
j
.
fragment
).
childNodes
);
return
e
.
merge
(
this
,
a
)}
h
=
c
.
getElementById
(
g
[
2
]);
if
(
h
&&
h
.
parentNode
){
if
(
h
.
id
!==
g
[
2
])
return
f
.
find
(
a
);
this
.
length
=
1
,
this
[
0
]
=
h
}
this
.
context
=
c
,
this
.
selector
=
a
;
return
this
}
return
!
d
||
d
.
jquery
?(
d
||
f
).
find
(
a
):
this
.
constructor
(
d
).
find
(
a
)}
if
(
e
.
isFunction
(
a
))
return
f
.
ready
(
a
);
a
.
selector
!==
b
&&
(
this
.
selector
=
a
.
selector
,
this
.
context
=
a
.
context
);
return
e
.
makeArray
(
a
,
this
)},
selector
:
""
,
jquery
:
"
1.7
"
,
length
:
0
,
size
:
function
(){
return
this
.
length
},
toArray
:
function
(){
return
G
.
call
(
this
,
0
)},
get
:
function
(
a
){
return
a
==
null
?
this
.
toArray
():
a
<
0
?
this
[
this
.
length
+
a
]:
this
[
a
]},
pushStack
:
function
(
a
,
b
,
c
){
var
d
=
this
.
constructor
();
e
.
isArray
(
a
)?
F
.
apply
(
d
,
a
):
e
.
merge
(
d
,
a
),
d
.
prevObject
=
this
,
d
.
context
=
this
.
context
,
b
===
"
find
"
?
d
.
selector
=
this
.
selector
+
(
this
.
selector
?
"
"
:
""
)
+
c
:
b
&&
(
d
.
selector
=
this
.
selector
+
"
.
"
+
b
+
"
(
"
+
c
+
"
)
"
);
return
d
},
each
:
function
(
a
,
b
){
return
e
.
each
(
this
,
a
,
b
)},
ready
:
function
(
a
){
e
.
bindReady
(),
B
.
add
(
a
);
return
this
},
eq
:
function
(
a
){
return
a
===-
1
?
this
.
slice
(
a
):
this
.
slice
(
a
,
+
a
+
1
)},
first
:
function
(){
return
this
.
eq
(
0
)},
last
:
function
(){
return
this
.
eq
(
-
1
)},
slice
:
function
(){
return
this
.
pushStack
(
G
.
apply
(
this
,
arguments
),
"
slice
"
,
G
.
call
(
arguments
).
join
(
"
,
"
))},
map
:
function
(
a
){
return
this
.
pushStack
(
e
.
map
(
this
,
function
(
b
,
c
){
return
a
.
call
(
b
,
c
,
b
)}))},
end
:
function
(){
return
this
.
prevObject
||
this
.
constructor
(
null
)},
push
:
F
,
sort
:[].
sort
,
splice
:[].
splice
},
e
.
fn
.
init
.
prototype
=
e
.
fn
,
e
.
extend
=
e
.
fn
.
extend
=
function
(){
var
a
,
c
,
d
,
f
,
g
,
h
,
i
=
arguments
[
0
]
||
{},
j
=
1
,
k
=
arguments
.
length
,
l
=!
1
;
typeof
i
==
"
boolean
"
&&
(
l
=
i
,
i
=
arguments
[
1
]
||
{},
j
=
2
),
typeof
i
!=
"
object
"
&&!
e
.
isFunction
(
i
)
&&
(
i
=
{}),
k
===
j
&&
(
i
=
this
,
--
j
);
for
(;
j
<
k
;
j
++
)
if
((
a
=
arguments
[
j
])
!=
null
)
for
(
c
in
a
){
d
=
i
[
c
],
f
=
a
[
c
];
if
(
i
===
f
)
continue
;
l
&&
f
&&
(
e
.
isPlainObject
(
f
)
||
(
g
=
e
.
isArray
(
f
)))?(
g
?(
g
=!
1
,
h
=
d
&&
e
.
isArray
(
d
)?
d
:[]):
h
=
d
&&
e
.
isPlainObject
(
d
)?
d
:{},
i
[
c
]
=
e
.
extend
(
l
,
h
,
f
)):
f
!==
b
&&
(
i
[
c
]
=
f
)}
return
i
},
e
.
extend
({
noConflict
:
function
(
b
){
a
.
$
===
e
&&
(
a
.
$
=
g
),
b
&&
a
.
jQuery
===
e
&&
(
a
.
jQuery
=
f
);
return
e
},
isReady
:
!
1
,
readyWait
:
1
,
holdReady
:
function
(
a
){
a
?
e
.
readyWait
++
:
e
.
ready
(
!
0
)},
ready
:
function
(
a
){
if
(
a
===!
0
&&!--
e
.
readyWait
||
a
!==!
0
&&!
e
.
isReady
){
if
(
!
c
.
body
)
return
setTimeout
(
e
.
ready
,
1
);
e
.
isReady
=!
0
;
if
(
a
!==!
0
&&--
e
.
readyWait
>
0
)
return
;
B
.
fireWith
(
c
,[
e
]),
e
.
fn
.
trigger
&&
e
(
c
).
trigger
(
"
ready
"
).
unbind
(
"
ready
"
)}},
bindReady
:
function
(){
if
(
!
B
){
B
=
e
.
Callbacks
(
"
once memory
"
);
if
(
c
.
readyState
===
"
complete
"
)
return
setTimeout
(
e
.
ready
,
1
);
if
(
c
.
addEventListener
)
c
.
addEventListener
(
"
DOMContentLoaded
"
,
C
,
!
1
),
a
.
addEventListener
(
"
load
"
,
e
.
ready
,
!
1
);
else
if
(
c
.
attachEvent
){
c
.
attachEvent
(
"
onreadystatechange
"
,
C
),
a
.
attachEvent
(
"
onload
"
,
e
.
ready
);
var
b
=!
1
;
try
{
b
=
a
.
frameElement
==
null
}
catch
(
d
){}
c
.
documentElement
.
doScroll
&&
b
&&
K
()}}},
isFunction
:
function
(
a
){
return
e
.
type
(
a
)
===
"
function
"
},
isArray
:
Array
.
isArray
||
function
(
a
){
return
e
.
type
(
a
)
===
"
array
"
},
isWindow
:
function
(
a
){
return
a
&&
typeof
a
==
"
object
"
&&
"
setInterval
"
in
a
},
isNumeric
:
function
(
a
){
return
a
!=
null
&&
m
.
test
(
a
)
&&!
isNaN
(
a
)},
type
:
function
(
a
){
return
a
==
null
?
String
(
a
):
J
[
D
.
call
(
a
)]
||
"
object
"
},
isPlainObject
:
function
(
a
){
if
(
!
a
||
e
.
type
(
a
)
!==
"
object
"
||
a
.
nodeType
||
e
.
isWindow
(
a
))
return
!
1
;
try
{
if
(
a
.
constructor
&&!
E
.
call
(
a
,
"
constructor
"
)
&&!
E
.
call
(
a
.
constructor
.
prototype
,
"
isPrototypeOf
"
))
return
!
1
}
catch
(
c
){
return
!
1
}
var
d
;
for
(
d
in
a
);
return
d
===
b
||
E
.
call
(
a
,
d
)},
isEmptyObject
:
function
(
a
){
for
(
var
b
in
a
)
return
!
1
;
return
!
0
},
error
:
function
(
a
){
throw
a
},
parseJSON
:
function
(
b
){
if
(
typeof
b
!=
"
string
"
||!
b
)
return
null
;
b
=
e
.
trim
(
b
);
if
(
a
.
JSON
&&
a
.
JSON
.
parse
)
return
a
.
JSON
.
parse
(
b
);
if
(
o
.
test
(
b
.
replace
(
p
,
"
@
"
).
replace
(
q
,
"
]
"
).
replace
(
r
,
""
)))
return
(
new
Function
(
"
return
"
+
b
))();
e
.
error
(
"
Invalid JSON:
"
+
b
)},
parseXML
:
function
(
c
){
var
d
,
f
;
try
{
a
.
DOMParser
?(
f
=
new
DOMParser
,
d
=
f
.
parseFromString
(
c
,
"
text/xml
"
)):(
d
=
new
ActiveXObject
(
"
Microsoft.XMLDOM
"
),
d
.
async
=
"
false
"
,
d
.
loadXML
(
c
))}
catch
(
g
){
d
=
b
}(
!
d
||!
d
.
documentElement
||
d
.
getElementsByTagName
(
"
parsererror
"
).
length
)
&&
e
.
error
(
"
Invalid XML:
"
+
c
);
return
d
},
noop
:
function
(){},
globalEval
:
function
(
b
){
b
&&
j
.
test
(
b
)
&&
(
a
.
execScript
||
function
(
b
){
a
.
eval
.
call
(
a
,
b
)})(
b
)},
camelCase
:
function
(
a
){
return
a
.
replace
(
x
,
"
ms-
"
).
replace
(
w
,
y
)},
nodeName
:
function
(
a
,
b
){
return
a
.
nodeName
&&
a
.
nodeName
.
toUpperCase
()
===
b
.
toUpperCase
()},
each
:
function
(
a
,
c
,
d
){
var
f
,
g
=
0
,
h
=
a
.
length
,
i
=
h
===
b
||
e
.
isFunction
(
a
);
if
(
d
){
if
(
i
){
for
(
f
in
a
)
if
(
c
.
apply
(
a
[
f
],
d
)
===!
1
)
break
}
else
for
(;
g
<
h
;)
if
(
c
.
apply
(
a
[
g
++
],
d
)
===!
1
)
break
}
else
if
(
i
){
for
(
f
in
a
)
if
(
c
.
call
(
a
[
f
],
f
,
a
[
f
])
===!
1
)
break
}
else
for
(;
g
<
h
;)
if
(
c
.
call
(
a
[
g
],
g
,
a
[
g
++
])
===!
1
)
break
;
return
a
},
trim
:
H
?
function
(
a
){
return
a
==
null
?
""
:
H
.
call
(
a
)}:
function
(
a
){
return
a
==
null
?
""
:(
a
+
""
).
replace
(
k
,
""
).
replace
(
l
,
""
)},
makeArray
:
function
(
a
,
b
){
var
c
=
b
||
[];
if
(
a
!=
null
){
var
d
=
e
.
type
(
a
);
a
.
length
==
null
||
d
===
"
string
"
||
d
===
"
function
"
||
d
===
"
regexp
"
||
e
.
isWindow
(
a
)?
F
.
call
(
c
,
a
):
e
.
merge
(
c
,
a
)}
return
c
},
inArray
:
function
(
a
,
b
,
c
){
var
d
;
if
(
b
){
if
(
I
)
return
I
.
call
(
b
,
a
,
c
);
d
=
b
.
length
,
c
=
c
?
c
<
0
?
Math
.
max
(
0
,
d
+
c
):
c
:
0
;
for
(;
c
<
d
;
c
++
)
if
(
c
in
b
&&
b
[
c
]
===
a
)
return
c
}
return
-
1
},
merge
:
function
(
a
,
c
){
var
d
=
a
.
length
,
e
=
0
;
if
(
typeof
c
.
length
==
"
number
"
)
for
(
var
f
=
c
.
length
;
e
<
f
;
e
++
)
a
[
d
++
]
=
c
[
e
];
else
while
(
c
[
e
]
!==
b
)
a
[
d
++
]
=
c
[
e
++
];
a
.
length
=
d
;
return
a
},
grep
:
function
(
a
,
b
,
c
){
var
d
=
[],
e
;
c
=!!
c
;
for
(
var
f
=
0
,
g
=
a
.
length
;
f
<
g
;
f
++
)
e
=!!
b
(
a
[
f
],
f
),
c
!==
e
&&
d
.
push
(
a
[
f
]);
return
d
},
map
:
function
(
a
,
c
,
d
){
var
f
,
g
,
h
=
[],
i
=
0
,
j
=
a
.
length
,
k
=
a
instanceof
e
||
j
!==
b
&&
typeof
j
==
"
number
"
&&
(
j
>
0
&&
a
[
0
]
&&
a
[
j
-
1
]
||
j
===
0
||
e
.
isArray
(
a
));
if
(
k
)
for
(;
i
<
j
;
i
++
)
f
=
c
(
a
[
i
],
i
,
d
),
f
!=
null
&&
(
h
[
h
.
length
]
=
f
);
else
for
(
g
in
a
)
f
=
c
(
a
[
g
],
g
,
d
),
f
!=
null
&&
(
h
[
h
.
length
]
=
f
);
return
h
.
concat
.
apply
([],
h
)},
guid
:
1
,
proxy
:
function
(
a
,
c
){
if
(
typeof
c
==
"
string
"
){
var
d
=
a
[
c
];
c
=
a
,
a
=
d
}
if
(
!
e
.
isFunction
(
a
))
return
b
;
var
f
=
G
.
call
(
arguments
,
2
),
g
=
function
(){
return
a
.
apply
(
c
,
f
.
concat
(
G
.
call
(
arguments
)))};
g
.
guid
=
a
.
guid
=
a
.
guid
||
g
.
guid
||
e
.
guid
++
;
return
g
},
access
:
function
(
a
,
c
,
d
,
f
,
g
,
h
){
var
i
=
a
.
length
;
if
(
typeof
c
==
"
object
"
){
for
(
var
j
in
c
)
e
.
access
(
a
,
j
,
c
[
j
],
f
,
g
,
d
);
return
a
}
if
(
d
!==
b
){
f
=!
h
&&
f
&&
e
.
isFunction
(
d
);
for
(
var
k
=
0
;
k
<
i
;
k
++
)
g
(
a
[
k
],
c
,
f
?
d
.
call
(
a
[
k
],
k
,
g
(
a
[
k
],
c
)):
d
,
h
);
return
a
}
return
i
?
g
(
a
[
0
],
c
):
b
},
now
:
function
(){
return
(
new
Date
).
getTime
()},
uaMatch
:
function
(
a
){
a
=
a
.
toLowerCase
();
var
b
=
s
.
exec
(
a
)
||
t
.
exec
(
a
)
||
u
.
exec
(
a
)
||
a
.
indexOf
(
"
compatible
"
)
<
0
&&
v
.
exec
(
a
)
||
[];
return
{
browser
:
b
[
1
]
||
""
,
version
:
b
[
2
]
||
"
0
"
}},
sub
:
function
(){
function
a
(
b
,
c
){
return
new
a
.
fn
.
init
(
b
,
c
)}
e
.
extend
(
!
0
,
a
,
this
),
a
.
superclass
=
this
,
a
.
fn
=
a
.
prototype
=
this
(),
a
.
fn
.
constructor
=
a
,
a
.
sub
=
this
.
sub
,
a
.
fn
.
init
=
function
(
d
,
f
){
f
&&
f
instanceof
e
&&!
(
f
instanceof
a
)
&&
(
f
=
a
(
f
));
return
e
.
fn
.
init
.
call
(
this
,
d
,
f
,
b
)},
a
.
fn
.
init
.
prototype
=
a
.
fn
;
var
b
=
a
(
c
);
return
a
},
browser
:{}}),
e
.
each
(
"
Boolean Number String Function Array Date RegExp Object
"
.
split
(
"
"
),
function
(
a
,
b
){
J
[
"
[object
"
+
b
+
"
]
"
]
=
b
.
toLowerCase
()}),
A
=
e
.
uaMatch
(
z
),
A
.
browser
&&
(
e
.
browser
[
A
.
browser
]
=!
0
,
e
.
browser
.
version
=
A
.
version
),
e
.
browser
.
webkit
&&
(
e
.
browser
.
safari
=!
0
),
j
.
test
(
"
"
)
&&
(
k
=
/^
[\s\x
A0
]
+/
,
l
=
/
[\s\x
A0
]
+$/
),
h
=
e
(
c
),
c
.
addEventListener
?
C
=
function
(){
c
.
removeEventListener
(
"
DOMContentLoaded
"
,
C
,
!
1
),
e
.
ready
()}:
c
.
attachEvent
&&
(
C
=
function
(){
c
.
readyState
===
"
complete
"
&&
(
c
.
detachEvent
(
"
onreadystatechange
"
,
C
),
e
.
ready
())}),
typeof
define
==
"
function
"
&&
define
.
amd
&&
define
.
amd
.
jQuery
&&
define
(
"
jquery
"
,[],
function
(){
return
e
});
return
e
}(),
g
=
{};
f
.
Callbacks
=
function
(
a
){
a
=
a
?
g
[
a
]
||
h
(
a
):{};
var
c
=
[],
d
=
[],
e
,
i
,
j
,
k
,
l
,
m
=
function
(
b
){
var
d
,
e
,
g
,
h
,
i
;
for
(
d
=
0
,
e
=
b
.
length
;
d
<
e
;
d
++
)
g
=
b
[
d
],
h
=
f
.
type
(
g
),
h
===
"
array
"
?
m
(
g
):
h
===
"
function
"
&&
(
!
a
.
unique
||!
o
.
has
(
g
))
&&
c
.
push
(
g
)},
n
=
function
(
b
,
f
){
f
=
f
||
[],
e
=!
a
.
memory
||
[
b
,
f
],
i
=!
0
,
l
=
j
||
0
,
j
=
0
,
k
=
c
.
length
;
for
(;
c
&&
l
<
k
;
l
++
)
if
(
c
[
l
].
apply
(
b
,
f
)
===!
1
&&
a
.
stopOnFalse
){
e
=!
0
;
break
}
i
=!
1
,
c
&&
(
a
.
once
?
e
===!
0
?
o
.
disable
():
c
=
[]:
d
&&
d
.
length
&&
(
e
=
d
.
shift
(),
o
.
fireWith
(
e
[
0
],
e
[
1
])))},
o
=
{
add
:
function
(){
if
(
c
){
var
a
=
c
.
length
;
m
(
arguments
),
i
?
k
=
c
.
length
:
e
&&
e
!==!
0
&&
(
j
=
a
,
n
(
e
[
0
],
e
[
1
]))}
return
this
},
remove
:
function
(){
if
(
c
){
var
b
=
arguments
,
d
=
0
,
e
=
b
.
length
;
for
(;
d
<
e
;
d
++
)
for
(
var
f
=
0
;
f
<
c
.
length
;
f
++
)
if
(
b
[
d
]
===
c
[
f
]){
i
&&
f
<=
k
&&
(
k
--
,
f
<=
l
&&
l
--
),
c
.
splice
(
f
--
,
1
);
if
(
a
.
unique
)
break
}}
return
this
},
has
:
function
(
a
){
if
(
c
){
var
b
=
0
,
d
=
c
.
length
;
for
(;
b
<
d
;
b
++
)
if
(
a
===
c
[
b
])
return
!
0
}
return
!
1
},
empty
:
function
(){
c
=
[];
return
this
},
disable
:
function
(){
c
=
d
=
e
=
b
;
return
this
},
disabled
:
function
(){
return
!
c
},
lock
:
function
(){
d
=
b
,(
!
e
||
e
===!
0
)
&&
o
.
disable
();
return
this
},
locked
:
function
(){
return
!
d
},
fireWith
:
function
(
b
,
c
){
d
&&
(
i
?
a
.
once
||
d
.
push
([
b
,
c
]):(
!
a
.
once
||!
e
)
&&
n
(
b
,
c
));
return
this
},
fire
:
function
(){
o
.
fireWith
(
this
,
arguments
);
return
this
},
fired
:
function
(){
return
!!
e
}};
return
o
};
var
i
=
[].
slice
;
f
.
extend
({
Deferred
:
function
(
a
){
var
b
=
f
.
Callbacks
(
"
once memory
"
),
c
=
f
.
Callbacks
(
"
once memory
"
),
d
=
f
.
Callbacks
(
"
memory
"
),
e
=
"
pending
"
,
g
=
{
resolve
:
b
,
reject
:
c
,
notify
:
d
},
h
=
{
done
:
b
.
add
,
fail
:
c
.
add
,
progress
:
d
.
add
,
state
:
function
(){
return
e
},
isResolved
:
b
.
fired
,
isRejected
:
c
.
fired
,
then
:
function
(
a
,
b
,
c
){
i
.
done
(
a
).
fail
(
b
).
progress
(
c
);
return
this
},
always
:
function
(){
return
i
.
done
.
apply
(
i
,
arguments
).
fail
.
apply
(
i
,
arguments
)},
pipe
:
function
(
a
,
b
,
c
){
return
f
.
Deferred
(
function
(
d
){
f
.
each
({
done
:[
a
,
"
resolve
"
],
fail
:[
b
,
"
reject
"
],
progress
:[
c
,
"
notify
"
]},
function
(
a
,
b
){
var
c
=
b
[
0
],
e
=
b
[
1
],
g
;
f
.
isFunction
(
c
)?
i
[
a
](
function
(){
g
=
c
.
apply
(
this
,
arguments
),
g
&&
f
.
isFunction
(
g
.
promise
)?
g
.
promise
().
then
(
d
.
resolve
,
d
.
reject
,
d
.
notify
):
d
[
e
+
"
With
"
](
this
===
i
?
d
:
this
,[
g
])}):
i
[
a
](
d
[
e
])})}).
promise
()},
promise
:
function
(
a
){
if
(
a
==
null
)
a
=
h
;
else
for
(
var
b
in
h
)
a
[
b
]
=
h
[
b
];
return
a
}},
i
=
h
.
promise
({}),
j
;
for
(
j
in
g
)
i
[
j
]
=
g
[
j
].
fire
,
i
[
j
+
"
With
"
]
=
g
[
j
].
fireWith
;
i
.
done
(
function
(){
e
=
"
resolved
"
},
c
.
disable
,
d
.
lock
).
fail
(
function
(){
e
=
"
rejected
"
},
b
.
disable
,
d
.
lock
),
a
&&
a
.
call
(
i
,
i
);
return
i
},
when
:
function
(
a
){
function
m
(
a
){
return
function
(
b
){
e
[
a
]
=
arguments
.
length
>
1
?
i
.
call
(
arguments
,
0
):
b
,
j
.
notifyWith
(
k
,
e
)}}
function
l
(
a
){
return
function
(
c
){
b
[
a
]
=
arguments
.
length
>
1
?
i
.
call
(
arguments
,
0
):
c
,
--
g
||
j
.
resolveWith
(
j
,
b
)}}
var
b
=
i
.
call
(
arguments
,
0
),
c
=
0
,
d
=
b
.
length
,
e
=
Array
(
d
),
g
=
d
,
h
=
d
,
j
=
d
<=
1
&&
a
&&
f
.
isFunction
(
a
.
promise
)?
a
:
f
.
Deferred
(),
k
=
j
.
promise
();
if
(
d
>
1
){
for
(;
c
<
d
;
c
++
)
b
[
c
]
&&
b
[
c
].
promise
&&
f
.
isFunction
(
b
[
c
].
promise
)?
b
[
c
].
promise
().
then
(
l
(
c
),
j
.
reject
,
m
(
c
)):
--
g
;
g
||
j
.
resolveWith
(
j
,
b
)}
else
j
!==
a
&&
j
.
resolveWith
(
j
,
d
?[
a
]:[]);
return
k
}}),
f
.
support
=
function
(){
var
a
=
c
.
createElement
(
"
div
"
),
b
=
c
.
documentElement
,
d
,
e
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
,
u
;
a
.
setAttribute
(
"
className
"
,
"
t
"
),
a
.
innerHTML
=
"
<link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>
"
,
d
=
a
.
getElementsByTagName
(
"
*
"
),
e
=
a
.
getElementsByTagName
(
"
a
"
)[
0
];
if
(
!
d
||!
d
.
length
||!
e
)
return
{};
g
=
c
.
createElement
(
"
select
"
),
h
=
g
.
appendChild
(
c
.
createElement
(
"
option
"
)),
i
=
a
.
getElementsByTagName
(
"
input
"
)[
0
],
k
=
{
leadingWhitespace
:
a
.
firstChild
.
nodeType
===
3
,
tbody
:
!
a
.
getElementsByTagName
(
"
tbody
"
).
length
,
htmlSerialize
:
!!
a
.
getElementsByTagName
(
"
link
"
).
length
,
style
:
/top/
.
test
(
e
.
getAttribute
(
"
style
"
)),
hrefNormalized
:
e
.
getAttribute
(
"
href
"
)
===
"
/a
"
,
opacity
:
/^0.55/
.
test
(
e
.
style
.
opacity
),
cssFloat
:
!!
e
.
style
.
cssFloat
,
unknownElems
:
!!
a
.
getElementsByTagName
(
"
nav
"
).
length
,
checkOn
:
i
.
value
===
"
on
"
,
optSelected
:
h
.
selected
,
getSetAttribute
:
a
.
className
!==
"
t
"
,
enctype
:
!!
c
.
createElement
(
"
form
"
).
enctype
,
submitBubbles
:
!
0
,
changeBubbles
:
!
0
,
focusinBubbles
:
!
1
,
deleteExpando
:
!
0
,
noCloneEvent
:
!
0
,
inlineBlockNeedsLayout
:
!
1
,
shrinkWrapBlocks
:
!
1
,
reliableMarginRight
:
!
0
},
i
.
checked
=!
0
,
k
.
noCloneChecked
=
i
.
cloneNode
(
!
0
).
checked
,
g
.
disabled
=!
0
,
k
.
optDisabled
=!
h
.
disabled
;
try
{
delete
a
.
test
}
catch
(
v
){
k
.
deleteExpando
=!
1
}
!
a
.
addEventListener
&&
a
.
attachEvent
&&
a
.
fireEvent
&&
(
a
.
attachEvent
(
"
onclick
"
,
function
(){
k
.
noCloneEvent
=!
1
}),
a
.
cloneNode
(
!
0
).
fireEvent
(
"
onclick
"
)),
i
=
c
.
createElement
(
"
input
"
),
i
.
value
=
"
t
"
,
i
.
setAttribute
(
"
type
"
,
"
radio
"
),
k
.
radioValue
=
i
.
value
===
"
t
"
,
i
.
setAttribute
(
"
checked
"
,
"
checked
"
),
a
.
appendChild
(
i
),
l
=
c
.
createDocumentFragment
(),
l
.
appendChild
(
a
.
lastChild
),
k
.
checkClone
=
l
.
cloneNode
(
!
0
).
cloneNode
(
!
0
).
lastChild
.
checked
,
a
.
innerHTML
=
""
,
a
.
style
.
width
=
a
.
style
.
paddingLeft
=
"
1px
"
,
m
=
c
.
getElementsByTagName
(
"
body
"
)[
0
],
o
=
c
.
createElement
(
m
?
"
div
"
:
"
body
"
),
p
=
{
visibility
:
"
hidden
"
,
width
:
0
,
height
:
0
,
border
:
0
,
margin
:
0
,
background
:
"
none
"
},
m
&&
f
.
extend
(
p
,{
position
:
"
absolute
"
,
left
:
"
-999px
"
,
top
:
"
-999px
"
});
for
(
t
in
p
)
o
.
style
[
t
]
=
p
[
t
];
o
.
appendChild
(
a
),
n
=
m
||
b
,
n
.
insertBefore
(
o
,
n
.
firstChild
),
k
.
appendChecked
=
i
.
checked
,
k
.
boxModel
=
a
.
offsetWidth
===
2
,
"
zoom
"
in
a
.
style
&&
(
a
.
style
.
display
=
"
inline
"
,
a
.
style
.
zoom
=
1
,
k
.
inlineBlockNeedsLayout
=
a
.
offsetWidth
===
2
,
a
.
style
.
display
=
""
,
a
.
innerHTML
=
"
<div style='width:4px;'></div>
"
,
k
.
shrinkWrapBlocks
=
a
.
offsetWidth
!==
2
),
a
.
innerHTML
=
"
<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>
"
,
q
=
a
.
getElementsByTagName
(
"
td
"
),
u
=
q
[
0
].
offsetHeight
===
0
,
q
[
0
].
style
.
display
=
""
,
q
[
1
].
style
.
display
=
"
none
"
,
k
.
reliableHiddenOffsets
=
u
&&
q
[
0
].
offsetHeight
===
0
,
a
.
innerHTML
=
""
,
c
.
defaultView
&&
c
.
defaultView
.
getComputedStyle
&&
(
j
=
c
.
createElement
(
"
div
"
),
j
.
style
.
width
=
"
0
"
,
j
.
style
.
marginRight
=
"
0
"
,
a
.
appendChild
(
j
),
k
.
reliableMarginRight
=
(
parseInt
((
c
.
defaultView
.
getComputedStyle
(
j
,
null
)
||
{
marginRight
:
0
}).
marginRight
,
10
)
||
0
)
===
0
);
if
(
a
.
attachEvent
)
for
(
t
in
{
submit
:
1
,
change
:
1
,
focusin
:
1
})
s
=
"
on
"
+
t
,
u
=
s
in
a
,
u
||
(
a
.
setAttribute
(
s
,
"
return;
"
),
u
=
typeof
a
[
s
]
==
"
function
"
),
k
[
t
+
"
Bubbles
"
]
=
u
;
f
(
function
(){
var
a
,
b
,
d
,
e
,
g
,
h
,
i
=
1
,
j
=
"
position:absolute;top:0;left:0;width:1px;height:1px;margin:0;
"
,
l
=
"
visibility:hidden;border:0;
"
,
n
=
"
style='
"
+
j
+
"
border:5px solid #000;padding:0;'
"
,
p
=
"
<div
"
+
n
+
"
><div></div></div>
"
+
"
<table
"
+
n
+
"
cellpadding='0' cellspacing='0'>
"
+
"
<tr><td></td></tr></table>
"
;
m
=
c
.
getElementsByTagName
(
"
body
"
)[
0
];
!
m
||
(
a
=
c
.
createElement
(
"
div
"
),
a
.
style
.
cssText
=
l
+
"
width:0;height:0;position:static;top:0;margin-top:
"
+
i
+
"
px
"
,
m
.
insertBefore
(
a
,
m
.
firstChild
),
o
=
c
.
createElement
(
"
div
"
),
o
.
style
.
cssText
=
j
+
l
,
o
.
innerHTML
=
p
,
a
.
appendChild
(
o
),
b
=
o
.
firstChild
,
d
=
b
.
firstChild
,
g
=
b
.
nextSibling
.
firstChild
.
firstChild
,
h
=
{
doesNotAddBorder
:
d
.
offsetTop
!==
5
,
doesAddBorderForTableAndCells
:
g
.
offsetTop
===
5
},
d
.
style
.
position
=
"
fixed
"
,
d
.
style
.
top
=
"
20px
"
,
h
.
fixedPosition
=
d
.
offsetTop
===
20
||
d
.
offsetTop
===
15
,
d
.
style
.
position
=
d
.
style
.
top
=
""
,
b
.
style
.
overflow
=
"
hidden
"
,
b
.
style
.
position
=
"
relative
"
,
h
.
subtractsBorderForOverflowNotVisible
=
d
.
offsetTop
===-
5
,
h
.
doesNotIncludeMarginInBodyOffset
=
m
.
offsetTop
!==
i
,
m
.
removeChild
(
a
),
o
=
a
=
null
,
f
.
extend
(
k
,
h
))}),
o
.
innerHTML
=
""
,
n
.
removeChild
(
o
),
o
=
l
=
g
=
h
=
m
=
j
=
a
=
i
=
null
;
return
k
}(),
f
.
boxModel
=
f
.
support
.
boxModel
;
var
j
=
/^
(?:\{
.*
\}
|
\[
.*
\])
$/
,
k
=
/
([
A-Z
])
/g
;
f
.
extend
({
cache
:{},
uuid
:
0
,
expando
:
"
jQuery
"
+
(
f
.
fn
.
jquery
+
Math
.
random
()).
replace
(
/
\D
/g
,
""
),
noData
:{
embed
:
!
0
,
object
:
"
clsid:D27CDB6E-AE6D-11cf-96B8-444553540000
"
,
applet
:
!
0
},
hasData
:
function
(
a
){
a
=
a
.
nodeType
?
f
.
cache
[
a
[
f
.
expando
]]:
a
[
f
.
expando
];
return
!!
a
&&!
m
(
a
)},
data
:
function
(
a
,
c
,
d
,
e
){
if
(
!!
f
.
acceptData
(
a
)){
var
g
,
h
,
i
,
j
=
f
.
expando
,
k
=
typeof
c
==
"
string
"
,
l
=
a
.
nodeType
,
m
=
l
?
f
.
cache
:
a
,
n
=
l
?
a
[
f
.
expando
]:
a
[
f
.
expando
]
&&
f
.
expando
,
o
=
c
===
"
events
"
;
if
((
!
n
||!
m
[
n
]
||!
o
&&!
e
&&!
m
[
n
].
data
)
&&
k
&&
d
===
b
)
return
;
n
||
(
l
?
a
[
f
.
expando
]
=
n
=++
f
.
uuid
:
n
=
f
.
expando
),
m
[
n
]
||
(
m
[
n
]
=
{},
l
||
(
m
[
n
].
toJSON
=
f
.
noop
));
if
(
typeof
c
==
"
object
"
||
typeof
c
==
"
function
"
)
e
?
m
[
n
]
=
f
.
extend
(
m
[
n
],
c
):
m
[
n
].
data
=
f
.
extend
(
m
[
n
].
data
,
c
);
g
=
h
=
m
[
n
],
e
||
(
h
.
data
||
(
h
.
data
=
{}),
h
=
h
.
data
),
d
!==
b
&&
(
h
[
f
.
camelCase
(
c
)]
=
d
);
if
(
o
&&!
h
[
c
])
return
g
.
events
;
k
?(
i
=
h
[
c
],
i
==
null
&&
(
i
=
h
[
f
.
camelCase
(
c
)])):
i
=
h
;
return
i
}},
removeData
:
function
(
a
,
b
,
c
){
if
(
!!
f
.
acceptData
(
a
)){
var
d
,
e
,
g
,
h
=
f
.
expando
,
i
=
a
.
nodeType
,
j
=
i
?
f
.
cache
:
a
,
k
=
i
?
a
[
f
.
expando
]:
f
.
expando
;
if
(
!
j
[
k
])
return
;
if
(
b
){
d
=
c
?
j
[
k
]:
j
[
k
].
data
;
if
(
d
){
f
.
isArray
(
b
)?
b
=
b
:
b
in
d
?
b
=
[
b
]:(
b
=
f
.
camelCase
(
b
),
b
in
d
?
b
=
[
b
]:
b
=
b
.
split
(
"
"
));
for
(
e
=
0
,
g
=
b
.
length
;
e
<
g
;
e
++
)
delete
d
[
b
[
e
]];
if
(
!
(
c
?
m
:
f
.
isEmptyObject
)(
d
))
return
}}
if
(
!
c
){
delete
j
[
k
].
data
;
if
(
!
m
(
j
[
k
]))
return
}
f
.
support
.
deleteExpando
||!
j
.
setInterval
?
delete
j
[
k
]:
j
[
k
]
=
null
,
i
&&
(
f
.
support
.
deleteExpando
?
delete
a
[
f
.
expando
]:
a
.
removeAttribute
?
a
.
removeAttribute
(
f
.
expando
):
a
[
f
.
expando
]
=
null
)}},
_data
:
function
(
a
,
b
,
c
){
return
f
.
data
(
a
,
b
,
c
,
!
0
)},
acceptData
:
function
(
a
){
if
(
a
.
nodeName
){
var
b
=
f
.
noData
[
a
.
nodeName
.
toLowerCase
()];
if
(
b
)
return
b
!==!
0
&&
a
.
getAttribute
(
"
classid
"
)
===
b
}
return
!
0
}}),
f
.
fn
.
extend
({
data
:
function
(
a
,
c
){
var
d
,
e
,
g
,
h
=
null
;
if
(
typeof
a
==
"
undefined
"
){
if
(
this
.
length
){
h
=
f
.
data
(
this
[
0
]);
if
(
this
[
0
].
nodeType
===
1
&&!
f
.
_data
(
this
[
0
],
"
parsedAttrs
"
)){
e
=
this
[
0
].
attributes
;
for
(
var
i
=
0
,
j
=
e
.
length
;
i
<
j
;
i
++
)
g
=
e
[
i
].
name
,
g
.
indexOf
(
"
data-
"
)
===
0
&&
(
g
=
f
.
camelCase
(
g
.
substring
(
5
)),
l
(
this
[
0
],
g
,
h
[
g
]));
f
.
_data
(
this
[
0
],
"
parsedAttrs
"
,
!
0
)}}
return
h
}
if
(
typeof
a
==
"
object
"
)
return
this
.
each
(
function
(){
f
.
data
(
this
,
a
)});
d
=
a
.
split
(
"
.
"
),
d
[
1
]
=
d
[
1
]?
"
.
"
+
d
[
1
]:
""
;
if
(
c
===
b
){
h
=
this
.
triggerHandler
(
"
getData
"
+
d
[
1
]
+
"
!
"
,[
d
[
0
]]),
h
===
b
&&
this
.
length
&&
(
h
=
f
.
data
(
this
[
0
],
a
),
h
=
l
(
this
[
0
],
a
,
h
));
return
h
===
b
&&
d
[
1
]?
this
.
data
(
d
[
0
]):
h
}
return
this
.
each
(
function
(){
var
b
=
f
(
this
),
e
=
[
d
[
0
],
c
];
b
.
triggerHandler
(
"
setData
"
+
d
[
1
]
+
"
!
"
,
e
),
f
.
data
(
this
,
a
,
c
),
b
.
triggerHandler
(
"
changeData
"
+
d
[
1
]
+
"
!
"
,
e
)})},
removeData
:
function
(
a
){
return
this
.
each
(
function
(){
f
.
removeData
(
this
,
a
)})}}),
f
.
extend
({
_mark
:
function
(
a
,
b
){
a
&&
(
b
=
(
b
||
"
fx
"
)
+
"
mark
"
,
f
.
_data
(
a
,
b
,(
f
.
_data
(
a
,
b
)
||
0
)
+
1
))},
_unmark
:
function
(
a
,
b
,
c
){
a
!==!
0
&&
(
c
=
b
,
b
=
a
,
a
=!
1
);
if
(
b
){
c
=
c
||
"
fx
"
;
var
d
=
c
+
"
mark
"
,
e
=
a
?
0
:(
f
.
_data
(
b
,
d
)
||
1
)
-
1
;
e
?
f
.
_data
(
b
,
d
,
e
):(
f
.
removeData
(
b
,
d
,
!
0
),
n
(
b
,
c
,
"
mark
"
))}},
queue
:
function
(
a
,
b
,
c
){
var
d
;
if
(
a
){
b
=
(
b
||
"
fx
"
)
+
"
queue
"
,
d
=
f
.
_data
(
a
,
b
),
c
&&
(
!
d
||
f
.
isArray
(
c
)?
d
=
f
.
_data
(
a
,
b
,
f
.
makeArray
(
c
)):
d
.
push
(
c
));
return
d
||
[]}},
dequeue
:
function
(
a
,
b
){
b
=
b
||
"
fx
"
;
var
c
=
f
.
queue
(
a
,
b
),
d
=
c
.
shift
(),
e
=
{};
d
===
"
inprogress
"
&&
(
d
=
c
.
shift
()),
d
&&
(
b
===
"
fx
"
&&
c
.
unshift
(
"
inprogress
"
),
f
.
_data
(
a
,
b
+
"
.run
"
,
e
),
d
.
call
(
a
,
function
(){
f
.
dequeue
(
a
,
b
)},
e
)),
c
.
length
||
(
f
.
removeData
(
a
,
b
+
"
queue
"
+
b
+
"
.run
"
,
!
0
),
n
(
a
,
b
,
"
queue
"
))}}),
f
.
fn
.
extend
({
queue
:
function
(
a
,
c
){
typeof
a
!=
"
string
"
&&
(
c
=
a
,
a
=
"
fx
"
);
if
(
c
===
b
)
return
f
.
queue
(
this
[
0
],
a
);
return
this
.
each
(
function
(){
var
b
=
f
.
queue
(
this
,
a
,
c
);
a
===
"
fx
"
&&
b
[
0
]
!==
"
inprogress
"
&&
f
.
dequeue
(
this
,
a
)})},
dequeue
:
function
(
a
){
return
this
.
each
(
function
(){
f
.
dequeue
(
this
,
a
)})},
delay
:
function
(
a
,
b
){
a
=
f
.
fx
?
f
.
fx
.
speeds
[
a
]
||
a
:
a
,
b
=
b
||
"
fx
"
;
return
this
.
queue
(
b
,
function
(
b
,
c
){
var
d
=
setTimeout
(
b
,
a
);
c
.
stop
=
function
(){
clearTimeout
(
d
)}})},
clearQueue
:
function
(
a
){
return
this
.
queue
(
a
||
"
fx
"
,[])},
promise
:
function
(
a
,
c
){
function
m
(){
--
h
||
d
.
resolveWith
(
e
,[
e
])}
typeof
a
!=
"
string
"
&&
(
c
=
a
,
a
=
b
),
a
=
a
||
"
fx
"
;
var
d
=
f
.
Deferred
(),
e
=
this
,
g
=
e
.
length
,
h
=
1
,
i
=
a
+
"
defer
"
,
j
=
a
+
"
queue
"
,
k
=
a
+
"
mark
"
,
l
;
while
(
g
--
)
if
(
l
=
f
.
data
(
e
[
g
],
i
,
b
,
!
0
)
||
(
f
.
data
(
e
[
g
],
j
,
b
,
!
0
)
||
f
.
data
(
e
[
g
],
k
,
b
,
!
0
))
&&
f
.
data
(
e
[
g
],
i
,
f
.
Callbacks
(
"
once memory
"
),
!
0
))
h
++
,
l
.
add
(
m
);
m
();
return
d
.
promise
()}});
var
o
=
/
[\n\t\r]
/g
,
p
=
/
\s
+/
,
q
=
/
\r
/g
,
r
=
/^
(?:
button|input
)
$/i
,
s
=
/^
(?:
button|input|object|select|textarea
)
$/i
,
t
=
/^a
(?:
rea
)?
$/i
,
u
=
/^
(?:
autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected
)
$/i
,
v
=
f
.
support
.
getSetAttribute
,
w
,
x
,
y
;
f
.
fn
.
extend
({
attr
:
function
(
a
,
b
){
return
f
.
access
(
this
,
a
,
b
,
!
0
,
f
.
attr
)},
removeAttr
:
function
(
a
){
return
this
.
each
(
function
(){
f
.
removeAttr
(
this
,
a
)})},
prop
:
function
(
a
,
b
){
return
f
.
access
(
this
,
a
,
b
,
!
0
,
f
.
prop
)},
removeProp
:
function
(
a
){
a
=
f
.
propFix
[
a
]
||
a
;
return
this
.
each
(
function
(){
try
{
this
[
a
]
=
b
,
delete
this
[
a
]}
catch
(
c
){}})},
addClass
:
function
(
a
){
var
b
,
c
,
d
,
e
,
g
,
h
,
i
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
f
(
this
).
addClass
(
a
.
call
(
this
,
b
,
this
.
className
))});
if
(
a
&&
typeof
a
==
"
string
"
){
b
=
a
.
split
(
p
);
for
(
c
=
0
,
d
=
this
.
length
;
c
<
d
;
c
++
){
e
=
this
[
c
];
if
(
e
.
nodeType
===
1
)
if
(
!
e
.
className
&&
b
.
length
===
1
)
e
.
className
=
a
;
else
{
g
=
"
"
+
e
.
className
+
"
"
;
for
(
h
=
0
,
i
=
b
.
length
;
h
<
i
;
h
++
)
~
g
.
indexOf
(
"
"
+
b
[
h
]
+
"
"
)
||
(
g
+=
b
[
h
]
+
"
"
);
e
.
className
=
f
.
trim
(
g
)}}}
return
this
},
removeClass
:
function
(
a
){
var
c
,
d
,
e
,
g
,
h
,
i
,
j
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
f
(
this
).
removeClass
(
a
.
call
(
this
,
b
,
this
.
className
))});
if
(
a
&&
typeof
a
==
"
string
"
||
a
===
b
){
c
=
(
a
||
""
).
split
(
p
);
for
(
d
=
0
,
e
=
this
.
length
;
d
<
e
;
d
++
){
g
=
this
[
d
];
if
(
g
.
nodeType
===
1
&&
g
.
className
)
if
(
a
){
h
=
(
"
"
+
g
.
className
+
"
"
).
replace
(
o
,
"
"
);
for
(
i
=
0
,
j
=
c
.
length
;
i
<
j
;
i
++
)
h
=
h
.
replace
(
"
"
+
c
[
i
]
+
"
"
,
"
"
);
g
.
className
=
f
.
trim
(
h
)}
else
g
.
className
=
""
}}
return
this
},
toggleClass
:
function
(
a
,
b
){
var
c
=
typeof
a
,
d
=
typeof
b
==
"
boolean
"
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
c
){
f
(
this
).
toggleClass
(
a
.
call
(
this
,
c
,
this
.
className
,
b
),
b
)});
return
this
.
each
(
function
(){
if
(
c
===
"
string
"
){
var
e
,
g
=
0
,
h
=
f
(
this
),
i
=
b
,
j
=
a
.
split
(
p
);
while
(
e
=
j
[
g
++
])
i
=
d
?
i
:
!
h
.
hasClass
(
e
),
h
[
i
?
"
addClass
"
:
"
removeClass
"
](
e
)}
else
if
(
c
===
"
undefined
"
||
c
===
"
boolean
"
)
this
.
className
&&
f
.
_data
(
this
,
"
__className__
"
,
this
.
className
),
this
.
className
=
this
.
className
||
a
===!
1
?
""
:
f
.
_data
(
this
,
"
__className__
"
)
||
""
})},
hasClass
:
function
(
a
){
var
b
=
"
"
+
a
+
"
"
,
c
=
0
,
d
=
this
.
length
;
for
(;
c
<
d
;
c
++
)
if
(
this
[
c
].
nodeType
===
1
&&
(
"
"
+
this
[
c
].
className
+
"
"
).
replace
(
o
,
"
"
).
indexOf
(
b
)
>-
1
)
return
!
0
;
return
!
1
},
val
:
function
(
a
){
var
c
,
d
,
e
,
g
=
this
[
0
];
if
(
!
arguments
.
length
){
if
(
g
){
c
=
f
.
valHooks
[
g
.
nodeName
.
toLowerCase
()]
||
f
.
valHooks
[
g
.
type
];
if
(
c
&&
"
get
"
in
c
&&
(
d
=
c
.
get
(
g
,
"
value
"
))
!==
b
)
return
d
;
d
=
g
.
value
;
return
typeof
d
==
"
string
"
?
d
.
replace
(
q
,
""
):
d
==
null
?
""
:
d
}
return
b
}
e
=
f
.
isFunction
(
a
);
return
this
.
each
(
function
(
d
){
var
g
=
f
(
this
),
h
;
if
(
this
.
nodeType
===
1
){
e
?
h
=
a
.
call
(
this
,
d
,
g
.
val
()):
h
=
a
,
h
==
null
?
h
=
""
:
typeof
h
==
"
number
"
?
h
+=
""
:
f
.
isArray
(
h
)
&&
(
h
=
f
.
map
(
h
,
function
(
a
){
return
a
==
null
?
""
:
a
+
""
})),
c
=
f
.
valHooks
[
this
.
nodeName
.
toLowerCase
()]
||
f
.
valHooks
[
this
.
type
];
if
(
!
c
||!
(
"
set
"
in
c
)
||
c
.
set
(
this
,
h
,
"
value
"
)
===
b
)
this
.
value
=
h
}})}}),
f
.
extend
({
valHooks
:{
option
:{
get
:
function
(
a
){
var
b
=
a
.
attributes
.
value
;
return
!
b
||
b
.
specified
?
a
.
value
:
a
.
text
}},
select
:{
get
:
function
(
a
){
var
b
,
c
,
d
,
e
,
g
=
a
.
selectedIndex
,
h
=
[],
i
=
a
.
options
,
j
=
a
.
type
===
"
select-one
"
;
if
(
g
<
0
)
return
null
;
c
=
j
?
g
:
0
,
d
=
j
?
g
+
1
:
i
.
length
;
for
(;
c
<
d
;
c
++
){
e
=
i
[
c
];
if
(
e
.
selected
&&
(
f
.
support
.
optDisabled
?
!
e
.
disabled
:
e
.
getAttribute
(
"
disabled
"
)
===
null
)
&&
(
!
e
.
parentNode
.
disabled
||!
f
.
nodeName
(
e
.
parentNode
,
"
optgroup
"
))){
b
=
f
(
e
).
val
();
if
(
j
)
return
b
;
h
.
push
(
b
)}}
if
(
j
&&!
h
.
length
&&
i
.
length
)
return
f
(
i
[
g
]).
val
();
return
h
},
set
:
function
(
a
,
b
){
var
c
=
f
.
makeArray
(
b
);
f
(
a
).
find
(
"
option
"
).
each
(
function
(){
this
.
selected
=
f
.
inArray
(
f
(
this
).
val
(),
c
)
>=
0
}),
c
.
length
||
(
a
.
selectedIndex
=-
1
);
return
c
}}},
attrFn
:{
val
:
!
0
,
css
:
!
0
,
html
:
!
0
,
text
:
!
0
,
data
:
!
0
,
width
:
!
0
,
height
:
!
0
,
offset
:
!
0
},
attr
:
function
(
a
,
c
,
d
,
e
){
var
g
,
h
,
i
,
j
=
a
.
nodeType
;
if
(
!
a
||
j
===
3
||
j
===
8
||
j
===
2
)
return
b
;
if
(
e
&&
c
in
f
.
attrFn
)
return
f
(
a
)[
c
](
d
);
if
(
!
(
"
getAttribute
"
in
a
))
return
f
.
prop
(
a
,
c
,
d
);
i
=
j
!==
1
||!
f
.
isXMLDoc
(
a
),
i
&&
(
c
=
c
.
toLowerCase
(),
h
=
f
.
attrHooks
[
c
]
||
(
u
.
test
(
c
)?
x
:
w
));
if
(
d
!==
b
){
if
(
d
===
null
){
f
.
removeAttr
(
a
,
c
);
return
b
}
if
(
h
&&
"
set
"
in
h
&&
i
&&
(
g
=
h
.
set
(
a
,
d
,
c
))
!==
b
)
return
g
;
a
.
setAttribute
(
c
,
""
+
d
);
return
d
}
if
(
h
&&
"
get
"
in
h
&&
i
&&
(
g
=
h
.
get
(
a
,
c
))
!==
null
)
return
g
;
g
=
a
.
getAttribute
(
c
);
return
g
===
null
?
b
:
g
},
removeAttr
:
function
(
a
,
b
){
var
c
,
d
,
e
,
g
,
h
=
0
;
if
(
a
.
nodeType
===
1
){
d
=
(
b
||
""
).
split
(
p
),
g
=
d
.
length
;
for
(;
h
<
g
;
h
++
)
e
=
d
[
h
].
toLowerCase
(),
c
=
f
.
propFix
[
e
]
||
e
,
f
.
attr
(
a
,
e
,
""
),
a
.
removeAttribute
(
v
?
e
:
c
),
u
.
test
(
e
)
&&
c
in
a
&&
(
a
[
c
]
=!
1
)}},
attrHooks
:{
type
:{
set
:
function
(
a
,
b
){
if
(
r
.
test
(
a
.
nodeName
)
&&
a
.
parentNode
)
f
.
error
(
"
type property can't be changed
"
);
else
if
(
!
f
.
support
.
radioValue
&&
b
===
"
radio
"
&&
f
.
nodeName
(
a
,
"
input
"
)){
var
c
=
a
.
value
;
a
.
setAttribute
(
"
type
"
,
b
),
c
&&
(
a
.
value
=
c
);
return
b
}}},
value
:{
get
:
function
(
a
,
b
){
if
(
w
&&
f
.
nodeName
(
a
,
"
button
"
))
return
w
.
get
(
a
,
b
);
return
b
in
a
?
a
.
value
:
null
},
set
:
function
(
a
,
b
,
c
){
if
(
w
&&
f
.
nodeName
(
a
,
"
button
"
))
return
w
.
set
(
a
,
b
,
c
);
a
.
value
=
b
}}},
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
(
a
,
c
,
d
){
var
e
,
g
,
h
,
i
=
a
.
nodeType
;
if
(
!
a
||
i
===
3
||
i
===
8
||
i
===
2
)
return
b
;
h
=
i
!==
1
||!
f
.
isXMLDoc
(
a
),
h
&&
(
c
=
f
.
propFix
[
c
]
||
c
,
g
=
f
.
propHooks
[
c
]);
return
d
!==
b
?
g
&&
"
set
"
in
g
&&
(
e
=
g
.
set
(
a
,
d
,
c
))
!==
b
?
e
:
a
[
c
]
=
d
:
g
&&
"
get
"
in
g
&&
(
e
=
g
.
get
(
a
,
c
))
!==
null
?
e
:
a
[
c
]},
propHooks
:{
tabIndex
:{
get
:
function
(
a
){
var
c
=
a
.
getAttributeNode
(
"
tabindex
"
);
return
c
&&
c
.
specified
?
parseInt
(
c
.
value
,
10
):
s
.
test
(
a
.
nodeName
)
||
t
.
test
(
a
.
nodeName
)
&&
a
.
href
?
0
:
b
}}}}),
f
.
attrHooks
.
tabindex
=
f
.
propHooks
.
tabIndex
,
x
=
{
get
:
function
(
a
,
c
){
var
d
,
e
=
f
.
prop
(
a
,
c
);
return
e
===!
0
||
typeof
e
!=
"
boolean
"
&&
(
d
=
a
.
getAttributeNode
(
c
))
&&
d
.
nodeValue
!==!
1
?
c
.
toLowerCase
():
b
},
set
:
function
(
a
,
b
,
c
){
var
d
;
b
===!
1
?
f
.
removeAttr
(
a
,
c
):(
d
=
f
.
propFix
[
c
]
||
c
,
d
in
a
&&
(
a
[
d
]
=!
0
),
a
.
setAttribute
(
c
,
c
.
toLowerCase
()));
return
c
}},
v
||
(
y
=
{
name
:
!
0
,
id
:
!
0
},
w
=
f
.
valHooks
.
button
=
{
get
:
function
(
a
,
c
){
var
d
;
d
=
a
.
getAttributeNode
(
c
);
return
d
&&
(
y
[
c
]?
d
.
nodeValue
!==
""
:
d
.
specified
)?
d
.
nodeValue
:
b
},
set
:
function
(
a
,
b
,
d
){
var
e
=
a
.
getAttributeNode
(
d
);
e
||
(
e
=
c
.
createAttribute
(
d
),
a
.
setAttributeNode
(
e
));
return
e
.
nodeValue
=
b
+
""
}},
f
.
attrHooks
.
tabindex
.
set
=
w
.
set
,
f
.
each
([
"
width
"
,
"
height
"
],
function
(
a
,
b
){
f
.
attrHooks
[
b
]
=
f
.
extend
(
f
.
attrHooks
[
b
],{
set
:
function
(
a
,
c
){
if
(
c
===
""
){
a
.
setAttribute
(
b
,
"
auto
"
);
return
c
}}})}),
f
.
attrHooks
.
contenteditable
=
{
get
:
w
.
get
,
set
:
function
(
a
,
b
,
c
){
b
===
""
&&
(
b
=
"
false
"
),
w
.
set
(
a
,
b
,
c
)}}),
f
.
support
.
hrefNormalized
||
f
.
each
([
"
href
"
,
"
src
"
,
"
width
"
,
"
height
"
],
function
(
a
,
c
){
f
.
attrHooks
[
c
]
=
f
.
extend
(
f
.
attrHooks
[
c
],{
get
:
function
(
a
){
var
d
=
a
.
getAttribute
(
c
,
2
);
return
d
===
null
?
b
:
d
}})}),
f
.
support
.
style
||
(
f
.
attrHooks
.
style
=
{
get
:
function
(
a
){
return
a
.
style
.
cssText
.
toLowerCase
()
||
b
},
set
:
function
(
a
,
b
){
return
a
.
style
.
cssText
=
""
+
b
}}),
f
.
support
.
optSelected
||
(
f
.
propHooks
.
selected
=
f
.
extend
(
f
.
propHooks
.
selected
,{
get
:
function
(
a
){
var
b
=
a
.
parentNode
;
b
&&
(
b
.
selectedIndex
,
b
.
parentNode
&&
b
.
parentNode
.
selectedIndex
);
return
null
}})),
f
.
support
.
enctype
||
(
f
.
propFix
.
enctype
=
"
encoding
"
),
f
.
support
.
checkOn
||
f
.
each
([
"
radio
"
,
"
checkbox
"
],
function
(){
f
.
valHooks
[
this
]
=
{
get
:
function
(
a
){
return
a
.
getAttribute
(
"
value
"
)
===
null
?
"
on
"
:
a
.
value
}}}),
f
.
each
([
"
radio
"
,
"
checkbox
"
],
function
(){
f
.
valHooks
[
this
]
=
f
.
extend
(
f
.
valHooks
[
this
],{
set
:
function
(
a
,
b
){
if
(
f
.
isArray
(
b
))
return
a
.
checked
=
f
.
inArray
(
f
(
a
).
val
(),
b
)
>=
0
}})});
var
z
=
/
\.(
.*
)
$/
,
A
=
/^
(?:
textarea|input|select
)
$/i
,
B
=
/
\.
/g
,
C
=
/ /g
,
D
=
/
[^\w\s
.|`
]
/g
,
E
=
/^
([^\.]
*
)?(?:\.(
.+
))?
$/
,
F
=
/
\b
hover
(\.\S
+
)?
/
,
G
=
/^key/
,
H
=
/^
(?:
mouse|contextmenu
)
|click/
,
I
=
/^
(\w
*
)(?:
#
([\w\-]
+
))?(?:\.([\w\-]
+
))?
$/
,
J
=
function
(
a
){
var
b
=
I
.
exec
(
a
);
b
&&
(
b
[
1
]
=
(
b
[
1
]
||
""
).
toLowerCase
(),
b
[
3
]
=
b
[
3
]
&&
new
RegExp
(
"
(?:^|
\\
s)
"
+
b
[
3
]
+
"
(?:
\\
s|$)
"
));
return
b
},
K
=
function
(
a
,
b
){
return
(
!
b
[
1
]
||
a
.
nodeName
.
toLowerCase
()
===
b
[
1
])
&&
(
!
b
[
2
]
||
a
.
id
===
b
[
2
])
&&
(
!
b
[
3
]
||
b
[
3
].
test
(
a
.
className
))},
L
=
function
(
a
){
return
f
.
event
.
special
.
hover
?
a
:
a
.
replace
(
F
,
"
mouseenter$1 mouseleave$1
"
)};
f
.
event
=
{
add
:
function
(
a
,
c
,
d
,
e
,
g
){
var
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
;
if
(
!
(
a
.
nodeType
===
3
||
a
.
nodeType
===
8
||!
c
||!
d
||!
(
h
=
f
.
_data
(
a
)))){
d
.
handler
&&
(
p
=
d
,
d
=
p
.
handler
),
d
.
guid
||
(
d
.
guid
=
f
.
guid
++
),
j
=
h
.
events
,
j
||
(
h
.
events
=
j
=
{}),
i
=
h
.
handle
,
i
||
(
h
.
handle
=
i
=
function
(
a
){
return
typeof
f
!=
"
undefined
"
&&
(
!
a
||
f
.
event
.
triggered
!==
a
.
type
)?
f
.
event
.
dispatch
.
apply
(
i
.
elem
,
arguments
):
b
},
i
.
elem
=
a
),
c
=
L
(
c
).
split
(
"
"
);
for
(
k
=
0
;
k
<
c
.
length
;
k
++
){
l
=
E
.
exec
(
c
[
k
])
||
[],
m
=
l
[
1
],
n
=
(
l
[
2
]
||
""
).
split
(
"
.
"
).
sort
(),
s
=
f
.
event
.
special
[
m
]
||
{},
m
=
(
g
?
s
.
delegateType
:
s
.
bindType
)
||
m
,
s
=
f
.
event
.
special
[
m
]
||
{},
o
=
f
.
extend
({
type
:
m
,
origType
:
l
[
1
],
data
:
e
,
handler
:
d
,
guid
:
d
.
guid
,
selector
:
g
,
namespace
:
n
.
join
(
"
.
"
)},
p
),
g
&&
(
o
.
quick
=
J
(
g
),
!
o
.
quick
&&
f
.
expr
.
match
.
POS
.
test
(
g
)
&&
(
o
.
isPositional
=!
0
)),
r
=
j
[
m
];
if
(
!
r
){
r
=
j
[
m
]
=
[],
r
.
delegateCount
=
0
;
if
(
!
s
.
setup
||
s
.
setup
.
call
(
a
,
e
,
n
,
i
)
===!
1
)
a
.
addEventListener
?
a
.
addEventListener
(
m
,
i
,
!
1
):
a
.
attachEvent
&&
a
.
attachEvent
(
"
on
"
+
m
,
i
)}
s
.
add
&&
(
s
.
add
.
call
(
a
,
o
),
o
.
handler
.
guid
||
(
o
.
handler
.
guid
=
d
.
guid
)),
g
?
r
.
splice
(
r
.
delegateCount
++
,
0
,
o
):
r
.
push
(
o
),
f
.
event
.
global
[
m
]
=!
0
}
a
=
null
}},
global
:{},
remove
:
function
(
a
,
b
,
c
,
d
){
var
e
=
f
.
hasData
(
a
)
&&
f
.
_data
(
a
),
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
;
if
(
!!
e
&&!!
(
m
=
e
.
events
)){
b
=
L
(
b
||
""
).
split
(
"
"
);
for
(
g
=
0
;
g
<
b
.
length
;
g
++
){
h
=
E
.
exec
(
b
[
g
])
||
[],
i
=
h
[
1
],
j
=
h
[
2
];
if
(
!
i
){
j
=
j
?
"
.
"
+
j
:
""
;
for
(
l
in
m
)
f
.
event
.
remove
(
a
,
l
+
j
,
c
,
d
);
return
}
n
=
f
.
event
.
special
[
i
]
||
{},
i
=
(
d
?
n
.
delegateType
:
n
.
bindType
)
||
i
,
p
=
m
[
i
]
||
[],
k
=
p
.
length
,
j
=
j
?
new
RegExp
(
"
(^|
\\
.)
"
+
j
.
split
(
"
.
"
).
sort
().
join
(
"
\\
.(?:.*
\\
.)?
"
)
+
"
(
\\
.|$)
"
):
null
;
if
(
c
||
j
||
d
||
n
.
remove
)
for
(
l
=
0
;
l
<
p
.
length
;
l
++
){
q
=
p
[
l
];
if
(
!
c
||
c
.
guid
===
q
.
guid
)
if
(
!
j
||
j
.
test
(
q
.
namespace
))
if
(
!
d
||
d
===
q
.
selector
||
d
===
"
**
"
&&
q
.
selector
)
p
.
splice
(
l
--
,
1
),
q
.
selector
&&
p
.
delegateCount
--
,
n
.
remove
&&
n
.
remove
.
call
(
a
,
q
)}
else
p
.
length
=
0
;
p
.
length
===
0
&&
k
!==
p
.
length
&&
((
!
n
.
teardown
||
n
.
teardown
.
call
(
a
,
j
)
===!
1
)
&&
f
.
removeEvent
(
a
,
i
,
e
.
handle
),
delete
m
[
i
])}
f
.
isEmptyObject
(
m
)
&&
(
o
=
e
.
handle
,
o
&&
(
o
.
elem
=
null
),
f
.
removeData
(
a
,[
"
events
"
,
"
handle
"
],
!
0
))}},
customEvent
:{
getData
:
!
0
,
setData
:
!
0
,
changeData
:
!
0
},
trigger
:
function
(
c
,
d
,
e
,
g
){
if
(
!
e
||
e
.
nodeType
!==
3
&&
e
.
nodeType
!==
8
){
var
h
=
c
.
type
||
c
,
i
=
[],
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
;
h
.
indexOf
(
"
!
"
)
>=
0
&&
(
h
=
h
.
slice
(
0
,
-
1
),
k
=!
0
),
h
.
indexOf
(
"
.
"
)
>=
0
&&
(
i
=
h
.
split
(
"
.
"
),
h
=
i
.
shift
(),
i
.
sort
());
if
((
!
e
||
f
.
event
.
customEvent
[
h
])
&&!
f
.
event
.
global
[
h
])
return
;
c
=
typeof
c
==
"
object
"
?
c
[
f
.
expando
]?
c
:
new
f
.
Event
(
h
,
c
):
new
f
.
Event
(
h
),
c
.
type
=
h
,
c
.
isTrigger
=!
0
,
c
.
exclusive
=
k
,
c
.
namespace
=
i
.
join
(
"
.
"
),
c
.
namespace_re
=
c
.
namespace
?
new
RegExp
(
"
(^|
\\
.)
"
+
i
.
join
(
"
\\
.(?:.*
\\
.)?
"
)
+
"
(
\\
.|$)
"
):
null
,
o
=
h
.
indexOf
(
"
:
"
)
<
0
?
"
on
"
+
h
:
""
,(
g
||!
e
)
&&
c
.
preventDefault
();
if
(
!
e
){
j
=
f
.
cache
;
for
(
l
in
j
)
j
[
l
].
events
&&
j
[
l
].
events
[
h
]
&&
f
.
event
.
trigger
(
c
,
d
,
j
[
l
].
handle
.
elem
,
!
0
);
return
}
c
.
result
=
b
,
c
.
target
||
(
c
.
target
=
e
),
d
=
d
!=
null
?
f
.
makeArray
(
d
):[],
d
.
unshift
(
c
),
p
=
f
.
event
.
special
[
h
]
||
{};
if
(
p
.
trigger
&&
p
.
trigger
.
apply
(
e
,
d
)
===!
1
)
return
;
r
=
[[
e
,
p
.
bindType
||
h
]];
if
(
!
g
&&!
p
.
noBubble
&&!
f
.
isWindow
(
e
)){
s
=
p
.
delegateType
||
h
,
n
=
null
;
for
(
m
=
e
.
parentNode
;
m
;
m
=
m
.
parentNode
)
r
.
push
([
m
,
s
]),
n
=
m
;
n
&&
n
===
e
.
ownerDocument
&&
r
.
push
([
n
.
defaultView
||
n
.
parentWindow
||
a
,
s
])}
for
(
l
=
0
;
l
<
r
.
length
;
l
++
){
m
=
r
[
l
][
0
],
c
.
type
=
r
[
l
][
1
],
q
=
(
f
.
_data
(
m
,
"
events
"
)
||
{})[
c
.
type
]
&&
f
.
_data
(
m
,
"
handle
"
),
q
&&
q
.
apply
(
m
,
d
),
q
=
o
&&
m
[
o
],
q
&&
f
.
acceptData
(
m
)
&&
q
.
apply
(
m
,
d
);
if
(
c
.
isPropagationStopped
())
break
}
c
.
type
=
h
,
c
.
isDefaultPrevented
()
||
(
!
p
.
_default
||
p
.
_default
.
apply
(
e
.
ownerDocument
,
d
)
===!
1
)
&&
(
h
!==
"
click
"
||!
f
.
nodeName
(
e
,
"
a
"
))
&&
f
.
acceptData
(
e
)
&&
o
&&
e
[
h
]
&&
(
h
!==
"
focus
"
&&
h
!==
"
blur
"
||
c
.
target
.
offsetWidth
!==
0
)
&&!
f
.
isWindow
(
e
)
&&
(
n
=
e
[
o
],
n
&&
(
e
[
o
]
=
null
),
f
.
event
.
triggered
=
h
,
e
[
h
](),
f
.
event
.
triggered
=
b
,
n
&&
(
e
[
o
]
=
n
));
return
c
.
result
}},
dispatch
:
function
(
c
){
c
=
f
.
event
.
fix
(
c
||
a
.
event
);
var
d
=
(
f
.
_data
(
this
,
"
events
"
)
||
{})[
c
.
type
]
||
[],
e
=
d
.
delegateCount
,
g
=
[].
slice
.
call
(
arguments
,
0
),
h
=!
c
.
exclusive
&&!
c
.
namespace
,
i
=
(
f
.
event
.
special
[
c
.
type
]
||
{}).
handle
,
j
=
[],
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
,
u
;
g
[
0
]
=
c
,
c
.
delegateTarget
=
this
;
if
(
e
&&!
c
.
target
.
disabled
&&
(
!
c
.
button
||
c
.
type
!==
"
click
"
))
for
(
m
=
c
.
target
;
m
!=
this
;
m
=
m
.
parentNode
||
this
){
o
=
{},
q
=
[];
for
(
k
=
0
;
k
<
e
;
k
++
)
r
=
d
[
k
],
s
=
r
.
selector
,
t
=
o
[
s
],
r
.
isPositional
?
t
=
(
t
||
(
o
[
s
]
=
f
(
s
))).
index
(
m
)
>=
0
:
t
===
b
&&
(
t
=
o
[
s
]
=
r
.
quick
?
K
(
m
,
r
.
quick
):
f
(
m
).
is
(
s
)),
t
&&
q
.
push
(
r
);
q
.
length
&&
j
.
push
({
elem
:
m
,
matches
:
q
})}
d
.
length
>
e
&&
j
.
push
({
elem
:
this
,
matches
:
d
.
slice
(
e
)});
for
(
k
=
0
;
k
<
j
.
length
&&!
c
.
isPropagationStopped
();
k
++
){
p
=
j
[
k
],
c
.
currentTarget
=
p
.
elem
;
for
(
l
=
0
;
l
<
p
.
matches
.
length
&&!
c
.
isImmediatePropagationStopped
();
l
++
){
r
=
p
.
matches
[
l
];
if
(
h
||!
c
.
namespace
&&!
r
.
namespace
||
c
.
namespace_re
&&
c
.
namespace_re
.
test
(
r
.
namespace
))
c
.
data
=
r
.
data
,
c
.
handleObj
=
r
,
n
=
(
i
||
r
.
handler
).
apply
(
p
.
elem
,
g
),
n
!==
b
&&
(
c
.
result
=
n
,
n
===!
1
&&
(
c
.
preventDefault
(),
c
.
stopPropagation
()))}}
return
c
.
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
(
a
,
b
){
a
.
which
==
null
&&
(
a
.
which
=
b
.
charCode
!=
null
?
b
.
charCode
:
b
.
keyCode
);
return
a
}},
mouseHooks
:{
props
:
"
button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta
"
.
split
(
"
"
),
filter
:
function
(
a
,
d
){
var
e
,
f
,
g
,
h
=
d
.
button
,
i
=
d
.
fromElement
;
a
.
pageX
==
null
&&
d
.
clientX
!=
null
&&
(
e
=
a
.
target
.
ownerDocument
||
c
,
f
=
e
.
documentElement
,
g
=
e
.
body
,
a
.
pageX
=
d
.
clientX
+
(
f
&&
f
.
scrollLeft
||
g
&&
g
.
scrollLeft
||
0
)
-
(
f
&&
f
.
clientLeft
||
g
&&
g
.
clientLeft
||
0
),
a
.
pageY
=
d
.
clientY
+
(
f
&&
f
.
scrollTop
||
g
&&
g
.
scrollTop
||
0
)
-
(
f
&&
f
.
clientTop
||
g
&&
g
.
clientTop
||
0
)),
!
a
.
relatedTarget
&&
i
&&
(
a
.
relatedTarget
=
i
===
a
.
target
?
d
.
toElement
:
i
),
!
a
.
which
&&
h
!==
b
&&
(
a
.
which
=
h
&
1
?
1
:
h
&
2
?
3
:
h
&
4
?
2
:
0
);
return
a
}},
fix
:
function
(
a
){
if
(
a
[
f
.
expando
])
return
a
;
var
d
,
e
,
g
=
a
,
h
=
f
.
event
.
fixHooks
[
a
.
type
]
||
{},
i
=
h
.
props
?
this
.
props
.
concat
(
h
.
props
):
this
.
props
;
a
=
f
.
Event
(
g
);
for
(
d
=
i
.
length
;
d
;)
e
=
i
[
--
d
],
a
[
e
]
=
g
[
e
];
a
.
target
||
(
a
.
target
=
g
.
srcElement
||
c
),
a
.
target
.
nodeType
===
3
&&
(
a
.
target
=
a
.
target
.
parentNode
),
a
.
metaKey
===
b
&&
(
a
.
metaKey
=
a
.
ctrlKey
);
return
h
.
filter
?
h
.
filter
(
a
,
g
):
a
},
special
:{
ready
:{
setup
:
f
.
bindReady
},
focus
:{
delegateType
:
"
focusin
"
,
noBubble
:
!
0
},
blur
:{
delegateType
:
"
focusout
"
,
noBubble
:
!
0
},
beforeunload
:{
setup
:
function
(
a
,
b
,
c
){
f
.
isWindow
(
this
)
&&
(
this
.
onbeforeunload
=
c
)},
teardown
:
function
(
a
,
b
){
this
.
onbeforeunload
===
b
&&
(
this
.
onbeforeunload
=
null
)}}},
simulate
:
function
(
a
,
b
,
c
,
d
){
var
e
=
f
.
extend
(
new
f
.
Event
,
c
,{
type
:
a
,
isSimulated
:
!
0
,
originalEvent
:{}});
d
?
f
.
event
.
trigger
(
e
,
null
,
b
):
f
.
event
.
dispatch
.
call
(
b
,
e
),
e
.
isDefaultPrevented
()
&&
c
.
preventDefault
()}},
f
.
event
.
handle
=
f
.
event
.
dispatch
,
f
.
removeEvent
=
c
.
removeEventListener
?
function
(
a
,
b
,
c
){
a
.
removeEventListener
&&
a
.
removeEventListener
(
b
,
c
,
!
1
)}:
function
(
a
,
b
,
c
){
a
.
detachEvent
&&
a
.
detachEvent
(
"
on
"
+
b
,
c
)},
f
.
Event
=
function
(
a
,
b
){
if
(
!
(
this
instanceof
f
.
Event
))
return
new
f
.
Event
(
a
,
b
);
a
&&
a
.
type
?(
this
.
originalEvent
=
a
,
this
.
type
=
a
.
type
,
this
.
isDefaultPrevented
=
a
.
defaultPrevented
||
a
.
returnValue
===!
1
||
a
.
getPreventDefault
&&
a
.
getPreventDefault
()?
N
:
M
):
this
.
type
=
a
,
b
&&
f
.
extend
(
this
,
b
),
this
.
timeStamp
=
a
&&
a
.
timeStamp
||
f
.
now
(),
this
[
f
.
expando
]
=!
0
},
f
.
Event
.
prototype
=
{
preventDefault
:
function
(){
this
.
isDefaultPrevented
=
N
;
var
a
=
this
.
originalEvent
;
!
a
||
(
a
.
preventDefault
?
a
.
preventDefault
():
a
.
returnValue
=!
1
)},
stopPropagation
:
function
(){
this
.
isPropagationStopped
=
N
;
var
a
=
this
.
originalEvent
;
!
a
||
(
a
.
stopPropagation
&&
a
.
stopPropagation
(),
a
.
cancelBubble
=!
0
)},
stopImmediatePropagation
:
function
(){
this
.
isImmediatePropagationStopped
=
N
,
this
.
stopPropagation
()},
isDefaultPrevented
:
M
,
isPropagationStopped
:
M
,
isImmediatePropagationStopped
:
M
},
f
.
each
({
mouseenter
:
"
mouseover
"
,
mouseleave
:
"
mouseout
"
},
function
(
a
,
b
){
f
.
event
.
special
[
a
]
=
f
.
event
.
special
[
b
]
=
{
delegateType
:
b
,
bindType
:
b
,
handle
:
function
(
a
){
var
b
=
this
,
c
=
a
.
relatedTarget
,
d
=
a
.
handleObj
,
e
=
d
.
selector
,
g
,
h
;
if
(
!
c
||
d
.
origType
===
a
.
type
||
c
!==
b
&&!
f
.
contains
(
b
,
c
))
g
=
a
.
type
,
a
.
type
=
d
.
origType
,
h
=
d
.
handler
.
apply
(
this
,
arguments
),
a
.
type
=
g
;
return
h
}}}),
f
.
support
.
submitBubbles
||
(
f
.
event
.
special
.
submit
=
{
setup
:
function
(){
if
(
f
.
nodeName
(
this
,
"
form
"
))
return
!
1
;
f
.
event
.
add
(
this
,
"
click._submit keypress._submit
"
,
function
(
a
){
var
c
=
a
.
target
,
d
=
f
.
nodeName
(
c
,
"
input
"
)
||
f
.
nodeName
(
c
,
"
button
"
)?
c
.
form
:
b
;
d
&&!
d
.
_submit_attached
&&
(
f
.
event
.
add
(
d
,
"
submit._submit
"
,
function
(
a
){
this
.
parentNode
&&
f
.
event
.
simulate
(
"
submit
"
,
this
.
parentNode
,
a
,
!
0
)}),
d
.
_submit_attached
=!
0
)})},
teardown
:
function
(){
if
(
f
.
nodeName
(
this
,
"
form
"
))
return
!
1
;
f
.
event
.
remove
(
this
,
"
._submit
"
)}}),
f
.
support
.
changeBubbles
||
(
f
.
event
.
special
.
change
=
{
setup
:
function
(){
if
(
A
.
test
(
this
.
nodeName
)){
if
(
this
.
type
===
"
checkbox
"
||
this
.
type
===
"
radio
"
)
f
.
event
.
add
(
this
,
"
propertychange._change
"
,
function
(
a
){
a
.
originalEvent
.
propertyName
===
"
checked
"
&&
(
this
.
_just_changed
=!
0
)}),
f
.
event
.
add
(
this
,
"
click._change
"
,
function
(
a
){
this
.
_just_changed
&&
(
this
.
_just_changed
=!
1
,
f
.
event
.
simulate
(
"
change
"
,
this
,
a
,
!
0
))});
return
!
1
}
f
.
event
.
add
(
this
,
"
beforeactivate._change
"
,
function
(
a
){
var
b
=
a
.
target
;
A
.
test
(
b
.
nodeName
)
&&!
b
.
_change_attached
&&
(
f
.
event
.
add
(
b
,
"
change._change
"
,
function
(
a
){
this
.
parentNode
&&!
a
.
isSimulated
&&
f
.
event
.
simulate
(
"
change
"
,
this
.
parentNode
,
a
,
!
0
)}),
b
.
_change_attached
=!
0
)})},
handle
:
function
(
a
){
var
b
=
a
.
target
;
if
(
this
!==
b
||
a
.
isSimulated
||
a
.
isTrigger
||
b
.
type
!==
"
radio
"
&&
b
.
type
!==
"
checkbox
"
)
return
a
.
handleObj
.
handler
.
apply
(
this
,
arguments
)},
teardown
:
function
(){
f
.
event
.
remove
(
this
,
"
._change
"
);
return
A
.
test
(
this
.
nodeName
)}}),
f
.
support
.
focusinBubbles
||
f
.
each
({
focus
:
"
focusin
"
,
blur
:
"
focusout
"
},
function
(
a
,
b
){
var
d
=
0
,
e
=
function
(
a
){
f
.
event
.
simulate
(
b
,
a
.
target
,
f
.
event
.
fix
(
a
),
!
0
)};
f
.
event
.
special
[
b
]
=
{
setup
:
function
(){
d
++===
0
&&
c
.
addEventListener
(
a
,
e
,
!
0
)},
teardown
:
function
(){
--
d
===
0
&&
c
.
removeEventListener
(
a
,
e
,
!
0
)}}}),
f
.
fn
.
extend
({
on
:
function
(
a
,
c
,
d
,
e
,
g
){
var
h
,
i
;
if
(
typeof
a
==
"
object
"
){
typeof
c
!=
"
string
"
&&
(
d
=
c
,
c
=
b
);
for
(
i
in
a
)
this
.
on
(
i
,
c
,
d
,
a
[
i
],
g
);
return
this
}
d
==
null
&&
e
==
null
?(
e
=
c
,
d
=
c
=
b
):
e
==
null
&&
(
typeof
c
==
"
string
"
?(
e
=
d
,
d
=
b
):(
e
=
d
,
d
=
c
,
c
=
b
));
if
(
e
===!
1
)
e
=
M
;
else
if
(
!
e
)
return
this
;
g
===
1
&&
(
h
=
e
,
e
=
function
(
a
){
f
().
off
(
a
);
return
h
.
apply
(
this
,
arguments
)},
e
.
guid
=
h
.
guid
||
(
h
.
guid
=
f
.
guid
++
));
return
this
.
each
(
function
(){
f
.
event
.
add
(
this
,
a
,
e
,
d
,
c
)})},
one
:
function
(
a
,
b
,
c
,
d
){
return
this
.
on
.
call
(
this
,
a
,
b
,
c
,
d
,
1
)},
off
:
function
(
a
,
c
,
d
){
if
(
a
&&
a
.
preventDefault
&&
a
.
handleObj
){
var
e
=
a
.
handleObj
;
f
(
a
.
delegateTarget
).
off
(
e
.
namespace
?
e
.
type
+
"
.
"
+
e
.
namespace
:
e
.
type
,
e
.
selector
,
e
.
handler
);
return
this
}
if
(
typeof
a
==
"
object
"
){
for
(
var
g
in
a
)
this
.
off
(
g
,
c
,
a
[
g
]);
return
this
}
if
(
c
===!
1
||
typeof
c
==
"
function
"
)
d
=
c
,
c
=
b
;
d
===!
1
&&
(
d
=
M
);
return
this
.
each
(
function
(){
f
.
event
.
remove
(
this
,
a
,
d
,
c
)})},
bind
:
function
(
a
,
b
,
c
){
return
this
.
on
(
a
,
null
,
b
,
c
)},
unbind
:
function
(
a
,
b
){
return
this
.
off
(
a
,
null
,
b
)},
live
:
function
(
a
,
b
,
c
){
f
(
this
.
context
).
on
(
a
,
this
.
selector
,
b
,
c
);
return
this
},
die
:
function
(
a
,
b
){
f
(
this
.
context
).
off
(
a
,
this
.
selector
||
"
**
"
,
b
);
return
this
},
delegate
:
function
(
a
,
b
,
c
,
d
){
return
this
.
on
(
b
,
a
,
c
,
d
)},
undelegate
:
function
(
a
,
b
,
c
){
return
arguments
.
length
==
1
?
this
.
off
(
a
,
"
**
"
):
this
.
off
(
b
,
a
,
c
)},
trigger
:
function
(
a
,
b
){
return
this
.
each
(
function
(){
f
.
event
.
trigger
(
a
,
b
,
this
)})},
triggerHandler
:
function
(
a
,
b
){
if
(
this
[
0
])
return
f
.
event
.
trigger
(
a
,
b
,
this
[
0
],
!
0
)},
toggle
:
function
(
a
){
var
b
=
arguments
,
c
=
a
.
guid
||
f
.
guid
++
,
d
=
0
,
e
=
function
(
c
){
var
e
=
(
f
.
_data
(
this
,
"
lastToggle
"
+
a
.
guid
)
||
0
)
%
d
;
f
.
_data
(
this
,
"
lastToggle
"
+
a
.
guid
,
e
+
1
),
c
.
preventDefault
();
return
b
[
e
].
apply
(
this
,
arguments
)
||!
1
};
e
.
guid
=
c
;
while
(
d
<
b
.
length
)
b
[
d
++
].
guid
=
c
;
return
this
.
click
(
e
)},
hover
:
function
(
a
,
b
){
return
this
.
mouseenter
(
a
).
mouseleave
(
b
||
a
)}}),
f
.
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
(
a
,
b
){
f
.
fn
[
b
]
=
function
(
a
,
c
){
c
==
null
&&
(
c
=
a
,
a
=
null
);
return
arguments
.
length
>
0
?
this
.
bind
(
b
,
a
,
c
):
this
.
trigger
(
b
)},
f
.
attrFn
&&
(
f
.
attrFn
[
b
]
=!
0
),
G
.
test
(
b
)
&&
(
f
.
event
.
fixHooks
[
b
]
=
f
.
event
.
keyHooks
),
H
.
test
(
b
)
&&
(
f
.
event
.
fixHooks
[
b
]
=
f
.
event
.
mouseHooks
)}),
function
(){
function
x
(
a
,
b
,
c
,
e
,
f
,
g
){
for
(
var
h
=
0
,
i
=
e
.
length
;
h
<
i
;
h
++
){
var
j
=
e
[
h
];
if
(
j
){
var
k
=!
1
;
j
=
j
[
a
];
while
(
j
){
if
(
j
[
d
]
===
c
){
k
=
e
[
j
.
sizset
];
break
}
if
(
j
.
nodeType
===
1
){
g
||
(
j
[
d
]
=
c
,
j
.
sizset
=
h
);
if
(
typeof
b
!=
"
string
"
){
if
(
j
===
b
){
k
=!
0
;
break
}}
else
if
(
m
.
filter
(
b
,[
j
]).
length
>
0
){
k
=
j
;
break
}}
j
=
j
[
a
]}
e
[
h
]
=
k
}}}
function
w
(
a
,
b
,
c
,
e
,
f
,
g
){
for
(
var
h
=
0
,
i
=
e
.
length
;
h
<
i
;
h
++
){
var
j
=
e
[
h
];
if
(
j
){
var
k
=!
1
;
j
=
j
[
a
];
while
(
j
){
if
(
j
[
d
]
===
c
){
k
=
e
[
j
.
sizset
];
break
}
j
.
nodeType
===
1
&&!
g
&&
(
j
[
d
]
=
c
,
j
.
sizset
=
h
);
if
(
j
.
nodeName
.
toLowerCase
()
===
b
){
k
=
j
;
break
}
j
=
j
[
a
]}
e
[
h
]
=
k
}}}
var
a
=
/
((?:\((?:\([^
()
]
+
\)
|
[^
()
]
+
)
+
\)
|
\[(?:\[[^\[\]]
*
\]
|
[
'"
][^
'"
]
*
[
'"
]
|
[^\[\]
'"
]
+
)
+
\]
|
\\
.|
[^
>+~,(
\[\\]
+
)
+|
[
>+~
])(\s
*,
\s
*
)?((?:
.|
\r
|
\n)
*
)
/g
,
d
=
"
sizcache
"
+
(
Math
.
random
()
+
""
).
replace
(
"
.
"
,
""
),
e
=
0
,
g
=
Object
.
prototype
.
toString
,
h
=!
1
,
i
=!
0
,
j
=
/
\\
/g
,
k
=
/
\r\n
/g
,
l
=
/
\W
/
;[
0
,
0
].
sort
(
function
(){
i
=!
1
;
return
0
});
var
m
=
function
(
b
,
d
,
e
,
f
){
e
=
e
||
[],
d
=
d
||
c
;
var
h
=
d
;
if
(
d
.
nodeType
!==
1
&&
d
.
nodeType
!==
9
)
return
[];
if
(
!
b
||
typeof
b
!=
"
string
"
)
return
e
;
var
i
,
j
,
k
,
l
,
n
,
q
,
r
,
t
,
u
=!
0
,
v
=
m
.
isXML
(
d
),
w
=
[],
x
=
b
;
do
{
a
.
exec
(
""
),
i
=
a
.
exec
(
x
);
if
(
i
){
x
=
i
[
3
],
w
.
push
(
i
[
1
]);
if
(
i
[
2
]){
l
=
i
[
3
];
break
}}}
while
(
i
);
if
(
w
.
length
>
1
&&
p
.
exec
(
b
))
if
(
w
.
length
===
2
&&
o
.
relative
[
w
[
0
]])
j
=
y
(
w
[
0
]
+
w
[
1
],
d
,
f
);
else
{
j
=
o
.
relative
[
w
[
0
]]?[
d
]:
m
(
w
.
shift
(),
d
);
while
(
w
.
length
)
b
=
w
.
shift
(),
o
.
relative
[
b
]
&&
(
b
+=
w
.
shift
()),
j
=
y
(
b
,
j
,
f
)}
else
{
!
f
&&
w
.
length
>
1
&&
d
.
nodeType
===
9
&&!
v
&&
o
.
match
.
ID
.
test
(
w
[
0
])
&&!
o
.
match
.
ID
.
test
(
w
[
w
.
length
-
1
])
&&
(
n
=
m
.
find
(
w
.
shift
(),
d
,
v
),
d
=
n
.
expr
?
m
.
filter
(
n
.
expr
,
n
.
set
)[
0
]:
n
.
set
[
0
]);
if
(
d
){
n
=
f
?{
expr
:
w
.
pop
(),
set
:
s
(
f
)}:
m
.
find
(
w
.
pop
(),
w
.
length
===
1
&&
(
w
[
0
]
===
"
~
"
||
w
[
0
]
===
"
+
"
)
&&
d
.
parentNode
?
d
.
parentNode
:
d
,
v
),
j
=
n
.
expr
?
m
.
filter
(
n
.
expr
,
n
.
set
):
n
.
set
,
w
.
length
>
0
?
k
=
s
(
j
):
u
=!
1
;
while
(
w
.
length
)
q
=
w
.
pop
(),
r
=
q
,
o
.
relative
[
q
]?
r
=
w
.
pop
():
q
=
""
,
r
==
null
&&
(
r
=
d
),
o
.
relative
[
q
](
k
,
r
,
v
)}
else
k
=
w
=
[]}
k
||
(
k
=
j
),
k
||
m
.
error
(
q
||
b
);
if
(
g
.
call
(
k
)
===
"
[object Array]
"
)
if
(
!
u
)
e
.
push
.
apply
(
e
,
k
);
else
if
(
d
&&
d
.
nodeType
===
1
)
for
(
t
=
0
;
k
[
t
]
!=
null
;
t
++
)
k
[
t
]
&&
(
k
[
t
]
===!
0
||
k
[
t
].
nodeType
===
1
&&
m
.
contains
(
d
,
k
[
t
]))
&&
e
.
push
(
j
[
t
]);
else
for
(
t
=
0
;
k
[
t
]
!=
null
;
t
++
)
k
[
t
]
&&
k
[
t
].
nodeType
===
1
&&
e
.
push
(
j
[
t
]);
else
s
(
k
,
e
);
l
&&
(
m
(
l
,
h
,
e
,
f
),
m
.
uniqueSort
(
e
));
return
e
};
m
.
uniqueSort
=
function
(
a
){
if
(
u
){
h
=
i
,
a
.
sort
(
u
);
if
(
h
)
for
(
var
b
=
1
;
b
<
a
.
length
;
b
++
)
a
[
b
]
===
a
[
b
-
1
]
&&
a
.
splice
(
b
--
,
1
)}
return
a
},
m
.
matches
=
function
(
a
,
b
){
return
m
(
a
,
null
,
null
,
b
)},
m
.
matchesSelector
=
function
(
a
,
b
){
return
m
(
b
,
null
,
null
,[
a
]).
length
>
0
},
m
.
find
=
function
(
a
,
b
,
c
){
var
d
,
e
,
f
,
g
,
h
,
i
;
if
(
!
a
)
return
[];
for
(
e
=
0
,
f
=
o
.
order
.
length
;
e
<
f
;
e
++
){
h
=
o
.
order
[
e
];
if
(
g
=
o
.
leftMatch
[
h
].
exec
(
a
)){
i
=
g
[
1
],
g
.
splice
(
1
,
1
);
if
(
i
.
substr
(
i
.
length
-
1
)
!==
"
\\
"
){
g
[
1
]
=
(
g
[
1
]
||
""
).
replace
(
j
,
""
),
d
=
o
.
find
[
h
](
g
,
b
,
c
);
if
(
d
!=
null
){
a
=
a
.
replace
(
o
.
match
[
h
],
""
);
break
}}}}
d
||
(
d
=
typeof
b
.
getElementsByTagName
!=
"
undefined
"
?
b
.
getElementsByTagName
(
"
*
"
):[]);
return
{
set
:
d
,
expr
:
a
}},
m
.
filter
=
function
(
a
,
c
,
d
,
e
){
var
f
,
g
,
h
,
i
,
j
,
k
,
l
,
n
,
p
,
q
=
a
,
r
=
[],
s
=
c
,
t
=
c
&&
c
[
0
]
&&
m
.
isXML
(
c
[
0
]);
while
(
a
&&
c
.
length
){
for
(
h
in
o
.
filter
)
if
((
f
=
o
.
leftMatch
[
h
].
exec
(
a
))
!=
null
&&
f
[
2
]){
k
=
o
.
filter
[
h
],
l
=
f
[
1
],
g
=!
1
,
f
.
splice
(
1
,
1
);
if
(
l
.
substr
(
l
.
length
-
1
)
===
"
\\
"
)
continue
;
s
===
r
&&
(
r
=
[]);
if
(
o
.
preFilter
[
h
]){
f
=
o
.
preFilter
[
h
](
f
,
s
,
d
,
r
,
e
,
t
);
if
(
!
f
)
g
=
i
=!
0
;
else
if
(
f
===!
0
)
continue
}
if
(
f
)
for
(
n
=
0
;(
j
=
s
[
n
])
!=
null
;
n
++
)
j
&&
(
i
=
k
(
j
,
f
,
n
,
s
),
p
=
e
^
i
,
d
&&
i
!=
null
?
p
?
g
=!
0
:
s
[
n
]
=!
1
:
p
&&
(
r
.
push
(
j
),
g
=!
0
));
if
(
i
!==
b
){
d
||
(
s
=
r
),
a
=
a
.
replace
(
o
.
match
[
h
],
""
);
if
(
!
g
)
return
[];
break
}}
if
(
a
===
q
)
if
(
g
==
null
)
m
.
error
(
a
);
else
break
;
q
=
a
}
return
s
},
m
.
error
=
function
(
a
){
throw
"
Syntax error, unrecognized expression:
"
+
a
};
var
n
=
m
.
getText
=
function
(
a
){
var
b
,
c
,
d
=
a
.
nodeType
,
e
=
""
;
if
(
d
){
if
(
d
===
1
){
if
(
typeof
a
.
textContent
==
"
string
"
)
return
a
.
textContent
;
if
(
typeof
a
.
innerText
==
"
string
"
)
return
a
.
innerText
.
replace
(
k
,
""
);
for
(
a
=
a
.
firstChild
;
a
;
a
=
a
.
nextSibling
)
e
+=
n
(
a
)}
else
if
(
d
===
3
||
d
===
4
)
return
a
.
nodeValue
}
else
for
(
b
=
0
;
c
=
a
[
b
];
b
++
)
c
.
nodeType
!==
8
&&
(
e
+=
n
(
c
));
return
e
},
o
=
m
.
selectors
=
{
order
:[
"
ID
"
,
"
NAME
"
,
"
TAG
"
],
match
:{
ID
:
/#
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)
/
,
CLASS
:
/
\.((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)
/
,
NAME
:
/
\[
name=
[
'"
]
*
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)[
'"
]
*
\]
/
,
ATTR
:
/
\[\s
*
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)\s
*
(?:(\S?
=
)\s
*
(?:([
'"
])(
.*
?)\3
|
(
#
?(?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
*
)
|
)
|
)\s
*
\]
/
,
TAG
:
/^
((?:[\w\u
00c0-
\u
FFFF
\*\-]
|
\\
.
)
+
)
/
,
CHILD
:
/:
(
only|nth|last|first
)
-child
(?:\(\s
*
(
even|odd|
(?:[
+
\-]?\d
+|
(?:[
+
\-]?\d
*
)?
n
\s
*
(?:[
+
\-]\s
*
\d
+
)?))\s
*
\))?
/
,
POS
:
/:
(
nth|eq|gt|lt|first|last|even|odd
)(?:\((\d
*
)\))?(?=[^\-]
|$
)
/
,
PSEUDO
:
/:
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)(?:\(([
'"
]?)((?:\([^\)]
+
\)
|
[^\(\)]
*
)
+
)\2\))?
/
},
leftMatch
:{},
attrMap
:{
"
class
"
:
"
className
"
,
"
for
"
:
"
htmlFor
"
},
attrHandle
:{
href
:
function
(
a
){
return
a
.
getAttribute
(
"
href
"
)},
type
:
function
(
a
){
return
a
.
getAttribute
(
"
type
"
)}},
relative
:{
"
+
"
:
function
(
a
,
b
){
var
c
=
typeof
b
==
"
string
"
,
d
=
c
&&!
l
.
test
(
b
),
e
=
c
&&!
d
;
d
&&
(
b
=
b
.
toLowerCase
());
for
(
var
f
=
0
,
g
=
a
.
length
,
h
;
f
<
g
;
f
++
)
if
(
h
=
a
[
f
]){
while
((
h
=
h
.
previousSibling
)
&&
h
.
nodeType
!==
1
);
a
[
f
]
=
e
||
h
&&
h
.
nodeName
.
toLowerCase
()
===
b
?
h
||!
1
:
h
===
b
}
e
&&
m
.
filter
(
b
,
a
,
!
0
)},
"
>
"
:
function
(
a
,
b
){
var
c
,
d
=
typeof
b
==
"
string
"
,
e
=
0
,
f
=
a
.
length
;
if
(
d
&&!
l
.
test
(
b
)){
b
=
b
.
toLowerCase
();
for
(;
e
<
f
;
e
++
){
c
=
a
[
e
];
if
(
c
){
var
g
=
c
.
parentNode
;
a
[
e
]
=
g
.
nodeName
.
toLowerCase
()
===
b
?
g
:
!
1
}}}
else
{
for
(;
e
<
f
;
e
++
)
c
=
a
[
e
],
c
&&
(
a
[
e
]
=
d
?
c
.
parentNode
:
c
.
parentNode
===
b
);
d
&&
m
.
filter
(
b
,
a
,
!
0
)}},
""
:
function
(
a
,
b
,
c
){
var
d
,
f
=
e
++
,
g
=
x
;
typeof
b
==
"
string
"
&&!
l
.
test
(
b
)
&&
(
b
=
b
.
toLowerCase
(),
d
=
b
,
g
=
w
),
g
(
"
parentNode
"
,
b
,
f
,
a
,
d
,
c
)},
"
~
"
:
function
(
a
,
b
,
c
){
var
d
,
f
=
e
++
,
g
=
x
;
typeof
b
==
"
string
"
&&!
l
.
test
(
b
)
&&
(
b
=
b
.
toLowerCase
(),
d
=
b
,
g
=
w
),
g
(
"
previousSibling
"
,
b
,
f
,
a
,
d
,
c
)}},
find
:{
ID
:
function
(
a
,
b
,
c
){
if
(
typeof
b
.
getElementById
!=
"
undefined
"
&&!
c
){
var
d
=
b
.
getElementById
(
a
[
1
]);
return
d
&&
d
.
parentNode
?[
d
]:[]}},
NAME
:
function
(
a
,
b
){
if
(
typeof
b
.
getElementsByName
!=
"
undefined
"
){
var
c
=
[],
d
=
b
.
getElementsByName
(
a
[
1
]);
for
(
var
e
=
0
,
f
=
d
.
length
;
e
<
f
;
e
++
)
d
[
e
].
getAttribute
(
"
name
"
)
===
a
[
1
]
&&
c
.
push
(
d
[
e
]);
return
c
.
length
===
0
?
null
:
c
}},
TAG
:
function
(
a
,
b
){
if
(
typeof
b
.
getElementsByTagName
!=
"
undefined
"
)
return
b
.
getElementsByTagName
(
a
[
1
])}},
preFilter
:{
CLASS
:
function
(
a
,
b
,
c
,
d
,
e
,
f
){
a
=
"
"
+
a
[
1
].
replace
(
j
,
""
)
+
"
"
;
if
(
f
)
return
a
;
for
(
var
g
=
0
,
h
;(
h
=
b
[
g
])
!=
null
;
g
++
)
h
&&
(
e
^
(
h
.
className
&&
(
"
"
+
h
.
className
+
"
"
).
replace
(
/
[\t\n\r]
/g
,
"
"
).
indexOf
(
a
)
>=
0
)?
c
||
d
.
push
(
h
):
c
&&
(
b
[
g
]
=!
1
));
return
!
1
},
ID
:
function
(
a
){
return
a
[
1
].
replace
(
j
,
""
)},
TAG
:
function
(
a
,
b
){
return
a
[
1
].
replace
(
j
,
""
).
toLowerCase
()},
CHILD
:
function
(
a
){
if
(
a
[
1
]
===
"
nth
"
){
a
[
2
]
||
m
.
error
(
a
[
0
]),
a
[
2
]
=
a
[
2
].
replace
(
/^
\+
|
\s
*/g
,
""
);
var
b
=
/
(
-
?)(\d
*
)(?:
n
([
+
\-]?\d
*
))?
/
.
exec
(
a
[
2
]
===
"
even
"
&&
"
2n
"
||
a
[
2
]
===
"
odd
"
&&
"
2n+1
"
||!
/
\D
/
.
test
(
a
[
2
])
&&
"
0n+
"
+
a
[
2
]
||
a
[
2
]);
a
[
2
]
=
b
[
1
]
+
(
b
[
2
]
||
1
)
-
0
,
a
[
3
]
=
b
[
3
]
-
0
}
else
a
[
2
]
&&
m
.
error
(
a
[
0
]);
a
[
0
]
=
e
++
;
return
a
},
ATTR
:
function
(
a
,
b
,
c
,
d
,
e
,
f
){
var
g
=
a
[
1
]
=
a
[
1
].
replace
(
j
,
""
);
!
f
&&
o
.
attrMap
[
g
]
&&
(
a
[
1
]
=
o
.
attrMap
[
g
]),
a
[
4
]
=
(
a
[
4
]
||
a
[
5
]
||
""
).
replace
(
j
,
""
),
a
[
2
]
===
"
~=
"
&&
(
a
[
4
]
=
"
"
+
a
[
4
]
+
"
"
);
return
a
},
PSEUDO
:
function
(
b
,
c
,
d
,
e
,
f
){
if
(
b
[
1
]
===
"
not
"
)
if
((
a
.
exec
(
b
[
3
])
||
""
).
length
>
1
||
/^
\w
/
.
test
(
b
[
3
]))
b
[
3
]
=
m
(
b
[
3
],
null
,
null
,
c
);
else
{
var
g
=
m
.
filter
(
b
[
3
],
c
,
d
,
!
0
^
f
);
d
||
e
.
push
.
apply
(
e
,
g
);
return
!
1
}
else
if
(
o
.
match
.
POS
.
test
(
b
[
0
])
||
o
.
match
.
CHILD
.
test
(
b
[
0
]))
return
!
0
;
return
b
},
POS
:
function
(
a
){
a
.
unshift
(
!
0
);
return
a
}},
filters
:{
enabled
:
function
(
a
){
return
a
.
disabled
===!
1
&&
a
.
type
!==
"
hidden
"
},
disabled
:
function
(
a
){
return
a
.
disabled
===!
0
},
checked
:
function
(
a
){
return
a
.
checked
===!
0
},
selected
:
function
(
a
){
a
.
parentNode
&&
a
.
parentNode
.
selectedIndex
;
return
a
.
selected
===!
0
},
parent
:
function
(
a
){
return
!!
a
.
firstChild
},
empty
:
function
(
a
){
return
!
a
.
firstChild
},
has
:
function
(
a
,
b
,
c
){
return
!!
m
(
c
[
3
],
a
).
length
},
header
:
function
(
a
){
return
/h
\d
/i
.
test
(
a
.
nodeName
)},
text
:
function
(
a
){
var
b
=
a
.
getAttribute
(
"
type
"
),
c
=
a
.
type
;
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
text
"
===
c
&&
(
b
===
c
||
b
===
null
)},
radio
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
radio
"
===
a
.
type
},
checkbox
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
checkbox
"
===
a
.
type
},
file
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
file
"
===
a
.
type
},
password
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
password
"
===
a
.
type
},
submit
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
(
b
===
"
input
"
||
b
===
"
button
"
)
&&
"
submit
"
===
a
.
type
},
image
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
image
"
===
a
.
type
},
reset
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
(
b
===
"
input
"
||
b
===
"
button
"
)
&&
"
reset
"
===
a
.
type
},
button
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
b
===
"
input
"
&&
"
button
"
===
a
.
type
||
b
===
"
button
"
},
input
:
function
(
a
){
return
/input|select|textarea|button/i
.
test
(
a
.
nodeName
)},
focus
:
function
(
a
){
return
a
===
a
.
ownerDocument
.
activeElement
}},
setFilters
:{
first
:
function
(
a
,
b
){
return
b
===
0
},
last
:
function
(
a
,
b
,
c
,
d
){
return
b
===
d
.
length
-
1
},
even
:
function
(
a
,
b
){
return
b
%
2
===
0
},
odd
:
function
(
a
,
b
){
return
b
%
2
===
1
},
lt
:
function
(
a
,
b
,
c
){
return
b
<
c
[
3
]
-
0
},
gt
:
function
(
a
,
b
,
c
){
return
b
>
c
[
3
]
-
0
},
nth
:
function
(
a
,
b
,
c
){
return
c
[
3
]
-
0
===
b
},
eq
:
function
(
a
,
b
,
c
){
return
c
[
3
]
-
0
===
b
}},
filter
:{
PSEUDO
:
function
(
a
,
b
,
c
,
d
){
var
e
=
b
[
1
],
f
=
o
.
filters
[
e
];
if
(
f
)
return
f
(
a
,
c
,
b
,
d
);
if
(
e
===
"
contains
"
)
return
(
a
.
textContent
||
a
.
innerText
||
n
([
a
])
||
""
).
indexOf
(
b
[
3
])
>=
0
;
if
(
e
===
"
not
"
){
var
g
=
b
[
3
];
for
(
var
h
=
0
,
i
=
g
.
length
;
h
<
i
;
h
++
)
if
(
g
[
h
]
===
a
)
return
!
1
;
return
!
0
}
m
.
error
(
e
)},
CHILD
:
function
(
a
,
b
){
var
c
,
e
,
f
,
g
,
h
,
i
,
j
,
k
=
b
[
1
],
l
=
a
;
switch
(
k
){
case
"
only
"
:
case
"
first
"
:
while
(
l
=
l
.
previousSibling
)
if
(
l
.
nodeType
===
1
)
return
!
1
;
if
(
k
===
"
first
"
)
return
!
0
;
l
=
a
;
case
"
last
"
:
while
(
l
=
l
.
nextSibling
)
if
(
l
.
nodeType
===
1
)
return
!
1
;
return
!
0
;
case
"
nth
"
:
c
=
b
[
2
],
e
=
b
[
3
];
if
(
c
===
1
&&
e
===
0
)
return
!
0
;
f
=
b
[
0
],
g
=
a
.
parentNode
;
if
(
g
&&
(
g
[
d
]
!==
f
||!
a
.
nodeIndex
)){
i
=
0
;
for
(
l
=
g
.
firstChild
;
l
;
l
=
l
.
nextSibling
)
l
.
nodeType
===
1
&&
(
l
.
nodeIndex
=++
i
);
g
[
d
]
=
f
}
j
=
a
.
nodeIndex
-
e
;
return
c
===
0
?
j
===
0
:
j
%
c
===
0
&&
j
/
c
>=
0
}},
ID
:
function
(
a
,
b
){
return
a
.
nodeType
===
1
&&
a
.
getAttribute
(
"
id
"
)
===
b
},
TAG
:
function
(
a
,
b
){
return
b
===
"
*
"
&&
a
.
nodeType
===
1
||!!
a
.
nodeName
&&
a
.
nodeName
.
toLowerCase
()
===
b
},
CLASS
:
function
(
a
,
b
){
return
(
"
"
+
(
a
.
className
||
a
.
getAttribute
(
"
class
"
))
+
"
"
).
indexOf
(
b
)
>-
1
},
ATTR
:
function
(
a
,
b
){
var
c
=
b
[
1
],
d
=
m
.
attr
?
m
.
attr
(
a
,
c
):
o
.
attrHandle
[
c
]?
o
.
attrHandle
[
c
](
a
):
a
[
c
]
!=
null
?
a
[
c
]:
a
.
getAttribute
(
c
),
e
=
d
+
""
,
f
=
b
[
2
],
g
=
b
[
4
];
return
d
==
null
?
f
===
"
!=
"
:
!
f
&&
m
.
attr
?
d
!=
null
:
f
===
"
=
"
?
e
===
g
:
f
===
"
*=
"
?
e
.
indexOf
(
g
)
>=
0
:
f
===
"
~=
"
?(
"
"
+
e
+
"
"
).
indexOf
(
g
)
>=
0
:
g
?
f
===
"
!=
"
?
e
!==
g
:
f
===
"
^=
"
?
e
.
indexOf
(
g
)
===
0
:
f
===
"
$=
"
?
e
.
substr
(
e
.
length
-
g
.
length
)
===
g
:
f
===
"
|=
"
?
e
===
g
||
e
.
substr
(
0
,
g
.
length
+
1
)
===
g
+
"
-
"
:
!
1
:
e
&&
d
!==!
1
},
POS
:
function
(
a
,
b
,
c
,
d
){
var
e
=
b
[
2
],
f
=
o
.
setFilters
[
e
];
if
(
f
)
return
f
(
a
,
c
,
b
,
d
)}}},
p
=
o
.
match
.
POS
,
q
=
function
(
a
,
b
){
return
"
\\
"
+
(
b
-
0
+
1
)};
for
(
var
r
in
o
.
match
)
o
.
match
[
r
]
=
new
RegExp
(
o
.
match
[
r
].
source
+
/
(?![^\[]
*
\])(?![^\(]
*
\))
/
.
source
),
o
.
leftMatch
[
r
]
=
new
RegExp
(
/
(
^
(?:
.|
\r
|
\n)
*
?)
/
.
source
+
o
.
match
[
r
].
source
.
replace
(
/
\\(\d
+
)
/g
,
q
));
var
s
=
function
(
a
,
b
){
a
=
Array
.
prototype
.
slice
.
call
(
a
,
0
);
if
(
b
){
b
.
push
.
apply
(
b
,
a
);
return
b
}
return
a
};
try
{
Array
.
prototype
.
slice
.
call
(
c
.
documentElement
.
childNodes
,
0
)[
0
].
nodeType
}
catch
(
t
){
s
=
function
(
a
,
b
){
var
c
=
0
,
d
=
b
||
[];
if
(
g
.
call
(
a
)
===
"
[object Array]
"
)
Array
.
prototype
.
push
.
apply
(
d
,
a
);
else
if
(
typeof
a
.
length
==
"
number
"
)
for
(
var
e
=
a
.
length
;
c
<
e
;
c
++
)
d
.
push
(
a
[
c
]);
else
for
(;
a
[
c
];
c
++
)
d
.
push
(
a
[
c
]);
return
d
}}
var
u
,
v
;
c
.
documentElement
.
compareDocumentPosition
?
u
=
function
(
a
,
b
){
if
(
a
===
b
){
h
=!
0
;
return
0
}
if
(
!
a
.
compareDocumentPosition
||!
b
.
compareDocumentPosition
)
return
a
.
compareDocumentPosition
?
-
1
:
1
;
return
a
.
compareDocumentPosition
(
b
)
&
4
?
-
1
:
1
}:(
u
=
function
(
a
,
b
){
if
(
a
===
b
){
h
=!
0
;
return
0
}
if
(
a
.
sourceIndex
&&
b
.
sourceIndex
)
return
a
.
sourceIndex
-
b
.
sourceIndex
;
var
c
,
d
,
e
=
[],
f
=
[],
g
=
a
.
parentNode
,
i
=
b
.
parentNode
,
j
=
g
;
if
(
g
===
i
)
return
v
(
a
,
b
);
if
(
!
g
)
return
-
1
;
if
(
!
i
)
return
1
;
while
(
j
)
e
.
unshift
(
j
),
j
=
j
.
parentNode
;
j
=
i
;
while
(
j
)
f
.
unshift
(
j
),
j
=
j
.
parentNode
;
c
=
e
.
length
,
d
=
f
.
length
;
for
(
var
k
=
0
;
k
<
c
&&
k
<
d
;
k
++
)
if
(
e
[
k
]
!==
f
[
k
])
return
v
(
e
[
k
],
f
[
k
]);
return
k
===
c
?
v
(
a
,
f
[
k
],
-
1
):
v
(
e
[
k
],
b
,
1
)},
v
=
function
(
a
,
b
,
c
){
if
(
a
===
b
)
return
c
;
var
d
=
a
.
nextSibling
;
while
(
d
){
if
(
d
===
b
)
return
-
1
;
d
=
d
.
nextSibling
}
return
1
}),
function
(){
var
a
=
c
.
createElement
(
"
div
"
),
d
=
"
script
"
+
(
new
Date
).
getTime
(),
e
=
c
.
documentElement
;
a
.
innerHTML
=
"
<a name='
"
+
d
+
"
'/>
"
,
e
.
insertBefore
(
a
,
e
.
firstChild
),
c
.
getElementById
(
d
)
&&
(
o
.
find
.
ID
=
function
(
a
,
c
,
d
){
if
(
typeof
c
.
getElementById
!=
"
undefined
"
&&!
d
){
var
e
=
c
.
getElementById
(
a
[
1
]);
return
e
?
e
.
id
===
a
[
1
]
||
typeof
e
.
getAttributeNode
!=
"
undefined
"
&&
e
.
getAttributeNode
(
"
id
"
).
nodeValue
===
a
[
1
]?[
e
]:
b
:[]}},
o
.
filter
.
ID
=
function
(
a
,
b
){
var
c
=
typeof
a
.
getAttributeNode
!=
"
undefined
"
&&
a
.
getAttributeNode
(
"
id
"
);
return
a
.
nodeType
===
1
&&
c
&&
c
.
nodeValue
===
b
}),
e
.
removeChild
(
a
),
e
=
a
=
null
}(),
function
(){
var
a
=
c
.
createElement
(
"
div
"
);
a
.
appendChild
(
c
.
createComment
(
""
)),
a
.
getElementsByTagName
(
"
*
"
).
length
>
0
&&
(
o
.
find
.
TAG
=
function
(
a
,
b
){
var
c
=
b
.
getElementsByTagName
(
a
[
1
]);
if
(
a
[
1
]
===
"
*
"
){
var
d
=
[];
for
(
var
e
=
0
;
c
[
e
];
e
++
)
c
[
e
].
nodeType
===
1
&&
d
.
push
(
c
[
e
]);
c
=
d
}
return
c
}),
a
.
innerHTML
=
"
<a href='#'></a>
"
,
a
.
firstChild
&&
typeof
a
.
firstChild
.
getAttribute
!=
"
undefined
"
&&
a
.
firstChild
.
getAttribute
(
"
href
"
)
!==
"
#
"
&&
(
o
.
attrHandle
.
href
=
function
(
a
){
return
a
.
getAttribute
(
"
href
"
,
2
)}),
a
=
null
}(),
c
.
querySelectorAll
&&
function
(){
var
a
=
m
,
b
=
c
.
createElement
(
"
div
"
),
d
=
"
__sizzle__
"
;
b
.
innerHTML
=
"
<p class='TEST'></p>
"
;
if
(
!
b
.
querySelectorAll
||
b
.
querySelectorAll
(
"
.TEST
"
).
length
!==
0
){
m
=
function
(
b
,
e
,
f
,
g
){
e
=
e
||
c
;
if
(
!
g
&&!
m
.
isXML
(
e
)){
var
h
=
/^
(\w
+$
)
|^
\.([\w\-]
+$
)
|^#
([\w\-]
+$
)
/
.
exec
(
b
);
if
(
h
&&
(
e
.
nodeType
===
1
||
e
.
nodeType
===
9
)){
if
(
h
[
1
])
return
s
(
e
.
getElementsByTagName
(
b
),
f
);
if
(
h
[
2
]
&&
o
.
find
.
CLASS
&&
e
.
getElementsByClassName
)
return
s
(
e
.
getElementsByClassName
(
h
[
2
]),
f
)}
if
(
e
.
nodeType
===
9
){
if
(
b
===
"
body
"
&&
e
.
body
)
return
s
([
e
.
body
],
f
);
if
(
h
&&
h
[
3
]){
var
i
=
e
.
getElementById
(
h
[
3
]);
if
(
!
i
||!
i
.
parentNode
)
return
s
([],
f
);
if
(
i
.
id
===
h
[
3
])
return
s
([
i
],
f
)}
try
{
return
s
(
e
.
querySelectorAll
(
b
),
f
)}
catch
(
j
){}}
else
if
(
e
.
nodeType
===
1
&&
e
.
nodeName
.
toLowerCase
()
!==
"
object
"
){
var
k
=
e
,
l
=
e
.
getAttribute
(
"
id
"
),
n
=
l
||
d
,
p
=
e
.
parentNode
,
q
=
/^
\s
*
[
+~
]
/
.
test
(
b
);
l
?
n
=
n
.
replace
(
/'/g
,
"
\\
$&
"
):
e
.
setAttribute
(
"
id
"
,
n
),
q
&&
p
&&
(
e
=
e
.
parentNode
);
try
{
if
(
!
q
||
p
)
return
s
(
e
.
querySelectorAll
(
"
[id='
"
+
n
+
"
']
"
+
b
),
f
)}
catch
(
r
){}
finally
{
l
||
k
.
removeAttribute
(
"
id
"
)}}}
return
a
(
b
,
e
,
f
,
g
)};
for
(
var
e
in
a
)
m
[
e
]
=
a
[
e
];
b
=
null
}}(),
function
(){
var
a
=
c
.
documentElement
,
b
=
a
.
matchesSelector
||
a
.
mozMatchesSelector
||
a
.
webkitMatchesSelector
||
a
.
msMatchesSelector
;
if
(
b
){
var
d
=!
b
.
call
(
c
.
createElement
(
"
div
"
),
"
div
"
),
e
=!
1
;
try
{
b
.
call
(
c
.
documentElement
,
"
[test!='']:sizzle
"
)}
catch
(
f
){
e
=!
0
}
m
.
matchesSelector
=
function
(
a
,
c
){
c
=
c
.
replace
(
/
\=\s
*
([^
'"
\]]
*
)\s
*
\]
/g
,
"
='$1']
"
);
if
(
!
m
.
isXML
(
a
))
try
{
if
(
e
||!
o
.
match
.
PSEUDO
.
test
(
c
)
&&!
/!=/
.
test
(
c
)){
var
f
=
b
.
call
(
a
,
c
);
if
(
f
||!
d
||
a
.
document
&&
a
.
document
.
nodeType
!==
11
)
return
f
}}
catch
(
g
){}
return
m
(
c
,
null
,
null
,[
a
]).
length
>
0
}}}(),
function
(){
var
a
=
c
.
createElement
(
"
div
"
);
a
.
innerHTML
=
"
<div class='test e'></div><div class='test'></div>
"
;
if
(
!!
a
.
getElementsByClassName
&&
a
.
getElementsByClassName
(
"
e
"
).
length
!==
0
){
a
.
lastChild
.
className
=
"
e
"
;
if
(
a
.
getElementsByClassName
(
"
e
"
).
length
===
1
)
return
;
o
.
order
.
splice
(
1
,
0
,
"
CLASS
"
),
o
.
find
.
CLASS
=
function
(
a
,
b
,
c
){
if
(
typeof
b
.
getElementsByClassName
!=
"
undefined
"
&&!
c
)
return
b
.
getElementsByClassName
(
a
[
1
])},
a
=
null
}}(),
c
.
documentElement
.
contains
?
m
.
contains
=
function
(
a
,
b
){
return
a
!==
b
&&
(
a
.
contains
?
a
.
contains
(
b
):
!
0
)}:
c
.
documentElement
.
compareDocumentPosition
?
m
.
contains
=
function
(
a
,
b
){
return
!!
(
a
.
compareDocumentPosition
(
b
)
&
16
)}:
m
.
contains
=
function
(){
return
!
1
},
m
.
isXML
=
function
(
a
){
var
b
=
(
a
?
a
.
ownerDocument
||
a
:
0
).
documentElement
;
return
b
?
b
.
nodeName
!==
"
HTML
"
:
!
1
};
var
y
=
function
(
a
,
b
,
c
){
var
d
,
e
=
[],
f
=
""
,
g
=
b
.
nodeType
?[
b
]:
b
;
while
(
d
=
o
.
match
.
PSEUDO
.
exec
(
a
))
f
+=
d
[
0
],
a
=
a
.
replace
(
o
.
match
.
PSEUDO
,
""
);
a
=
o
.
relative
[
a
]?
a
+
"
*
"
:
a
;
for
(
var
h
=
0
,
i
=
g
.
length
;
h
<
i
;
h
++
)
m
(
a
,
g
[
h
],
e
,
c
);
return
m
.
filter
(
f
,
e
)};
m
.
attr
=
f
.
attr
,
m
.
selectors
.
attrMap
=
{},
f
.
find
=
m
,
f
.
expr
=
m
.
selectors
,
f
.
expr
[
"
:
"
]
=
f
.
expr
.
filters
,
f
.
unique
=
m
.
uniqueSort
,
f
.
text
=
m
.
getText
,
f
.
isXMLDoc
=
m
.
isXML
,
f
.
contains
=
m
.
contains
}();
var
O
=
/Until$/
,
P
=
/^
(?:
parents|prevUntil|prevAll
)
/
,
Q
=
/,/
,
R
=
/^.
[^
:#
\[\.
,
]
*$/
,
S
=
Array
.
prototype
.
slice
,
T
=
f
.
expr
.
match
.
POS
,
U
=
{
children
:
!
0
,
contents
:
!
0
,
next
:
!
0
,
prev
:
!
0
};
f
.
fn
.
extend
({
find
:
function
(
a
){
var
b
=
this
,
c
,
d
;
if
(
typeof
a
!=
"
string
"
)
return
f
(
a
).
filter
(
function
(){
for
(
c
=
0
,
d
=
b
.
length
;
c
<
d
;
c
++
)
if
(
f
.
contains
(
b
[
c
],
this
))
return
!
0
});
var
e
=
this
.
pushStack
(
""
,
"
find
"
,
a
),
g
,
h
,
i
;
for
(
c
=
0
,
d
=
this
.
length
;
c
<
d
;
c
++
){
g
=
e
.
length
,
f
.
find
(
a
,
this
[
c
],
e
);
if
(
c
>
0
)
for
(
h
=
g
;
h
<
e
.
length
;
h
++
)
for
(
i
=
0
;
i
<
g
;
i
++
)
if
(
e
[
i
]
===
e
[
h
]){
e
.
splice
(
h
--
,
1
);
break
}}
return
e
},
has
:
function
(
a
){
var
b
=
f
(
a
);
return
this
.
filter
(
function
(){
for
(
var
a
=
0
,
c
=
b
.
length
;
a
<
c
;
a
++
)
if
(
f
.
contains
(
this
,
b
[
a
]))
return
!
0
})},
not
:
function
(
a
){
return
this
.
pushStack
(
W
(
this
,
a
,
!
1
),
"
not
"
,
a
)},
filter
:
function
(
a
){
return
this
.
pushStack
(
W
(
this
,
a
,
!
0
),
"
filter
"
,
a
)},
is
:
function
(
a
){
return
!!
a
&&
(
typeof
a
==
"
string
"
?
T
.
test
(
a
)?
f
(
a
,
this
.
context
).
index
(
this
[
0
])
>=
0
:
f
.
filter
(
a
,
this
).
length
>
0
:
this
.
filter
(
a
).
length
>
0
)},
closest
:
function
(
a
,
b
){
var
c
=
[],
d
,
e
,
g
=
this
[
0
];
if
(
f
.
isArray
(
a
)){
var
h
=
1
;
while
(
g
&&
g
.
ownerDocument
&&
g
!==
b
){
for
(
d
=
0
;
d
<
a
.
length
;
d
++
)
f
(
g
).
is
(
a
[
d
])
&&
c
.
push
({
selector
:
a
[
d
],
elem
:
g
,
level
:
h
});
g
=
g
.
parentNode
,
h
++
}
return
c
}
var
i
=
T
.
test
(
a
)
||
typeof
a
!=
"
string
"
?
f
(
a
,
b
||
this
.
context
):
0
;
for
(
d
=
0
,
e
=
this
.
length
;
d
<
e
;
d
++
){
g
=
this
[
d
];
while
(
g
){
if
(
i
?
i
.
index
(
g
)
>-
1
:
f
.
find
.
matchesSelector
(
g
,
a
)){
c
.
push
(
g
);
break
}
g
=
g
.
parentNode
;
if
(
!
g
||!
g
.
ownerDocument
||
g
===
b
||
g
.
nodeType
===
11
)
break
}}
c
=
c
.
length
>
1
?
f
.
unique
(
c
):
c
;
return
this
.
pushStack
(
c
,
"
closest
"
,
a
)},
index
:
function
(
a
){
if
(
!
a
)
return
this
[
0
]
&&
this
[
0
].
parentNode
?
this
.
prevAll
().
length
:
-
1
;
if
(
typeof
a
==
"
string
"
)
return
f
.
inArray
(
this
[
0
],
f
(
a
));
return
f
.
inArray
(
a
.
jquery
?
a
[
0
]:
a
,
this
)},
add
:
function
(
a
,
b
){
var
c
=
typeof
a
==
"
string
"
?
f
(
a
,
b
):
f
.
makeArray
(
a
&&
a
.
nodeType
?[
a
]:
a
),
d
=
f
.
merge
(
this
.
get
(),
c
);
return
this
.
pushStack
(
V
(
c
[
0
])
||
V
(
d
[
0
])?
d
:
f
.
unique
(
d
))},
andSelf
:
function
(){
return
this
.
add
(
this
.
prevObject
)}}),
f
.
each
({
parent
:
function
(
a
){
var
b
=
a
.
parentNode
;
return
b
&&
b
.
nodeType
!==
11
?
b
:
null
},
parents
:
function
(
a
){
return
f
.
dir
(
a
,
"
parentNode
"
)},
parentsUntil
:
function
(
a
,
b
,
c
){
return
f
.
dir
(
a
,
"
parentNode
"
,
c
)},
next
:
function
(
a
){
return
f
.
nth
(
a
,
2
,
"
nextSibling
"
)},
prev
:
function
(
a
){
return
f
.
nth
(
a
,
2
,
"
previousSibling
"
)},
nextAll
:
function
(
a
){
return
f
.
dir
(
a
,
"
nextSibling
"
)},
prevAll
:
function
(
a
){
return
f
.
dir
(
a
,
"
previousSibling
"
)},
nextUntil
:
function
(
a
,
b
,
c
){
return
f
.
dir
(
a
,
"
nextSibling
"
,
c
)},
prevUntil
:
function
(
a
,
b
,
c
){
return
f
.
dir
(
a
,
"
previousSibling
"
,
c
)},
siblings
:
function
(
a
){
return
f
.
sibling
(
a
.
parentNode
.
firstChild
,
a
)},
children
:
function
(
a
){
return
f
.
sibling
(
a
.
firstChild
)},
contents
:
function
(
a
){
return
f
.
nodeName
(
a
,
"
iframe
"
)?
a
.
contentDocument
||
a
.
contentWindow
.
document
:
f
.
makeArray
(
a
.
childNodes
)}},
function
(
a
,
b
){
f
.
fn
[
a
]
=
function
(
c
,
d
){
var
e
=
f
.
map
(
this
,
b
,
c
),
g
=
S
.
call
(
arguments
);
O
.
test
(
a
)
||
(
d
=
c
),
d
&&
typeof
d
==
"
string
"
&&
(
e
=
f
.
filter
(
d
,
e
)),
e
=
this
.
length
>
1
&&!
U
[
a
]?
f
.
unique
(
e
):
e
,(
this
.
length
>
1
||
Q
.
test
(
d
))
&&
P
.
test
(
a
)
&&
(
e
=
e
.
reverse
());
return
this
.
pushStack
(
e
,
a
,
g
.
join
(
"
,
"
))}}),
f
.
extend
({
filter
:
function
(
a
,
b
,
c
){
c
&&
(
a
=
"
:not(
"
+
a
+
"
)
"
);
return
b
.
length
===
1
?
f
.
find
.
matchesSelector
(
b
[
0
],
a
)?[
b
[
0
]]:[]:
f
.
find
.
matches
(
a
,
b
)},
dir
:
function
(
a
,
c
,
d
){
var
e
=
[],
g
=
a
[
c
];
while
(
g
&&
g
.
nodeType
!==
9
&&
(
d
===
b
||
g
.
nodeType
!==
1
||!
f
(
g
).
is
(
d
)))
g
.
nodeType
===
1
&&
e
.
push
(
g
),
g
=
g
[
c
];
return
e
},
nth
:
function
(
a
,
b
,
c
,
d
){
b
=
b
||
1
;
var
e
=
0
;
for
(;
a
;
a
=
a
[
c
])
if
(
a
.
nodeType
===
1
&&++
e
===
b
)
break
;
return
a
},
sibling
:
function
(
a
,
b
){
var
c
=
[];
for
(;
a
;
a
=
a
.
nextSibling
)
a
.
nodeType
===
1
&&
a
!==
b
&&
c
.
push
(
a
);
return
c
}});
var
Y
=
"
abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video
"
,
Z
=
/ jQuery
\d
+="
(?:\d
+|null
)
"/g
,
$
=
/^
\s
+/
,
_
=
/<
(?!
area|br|col|embed|hr|img|input|link|meta|param
)(([\w
:
]
+
)[^
>
]
*
)\/
>/ig
,
ba
=
/<
([\w
:
]
+
)
/
,
bb
=
/<tbody/i
,
bc
=
/<|&#
?\w
+;/
,
bd
=
/<
(?:
script|style
)
/i
,
be
=
/<
(?:
script|object|embed|option|style
)
/i
,
bf
=
new
RegExp
(
"
<(?:
"
+
Y
.
replace
(
"
"
,
"
|
"
)
+
"
)
"
,
"
i
"
),
bg
=
/checked
\s
*
(?:[^
=
]
|=
\s
*.checked.
)
/i
,
bh
=
/
\/(
java|ecma
)
script/i
,
bi
=
/^
\s
*<!
(?:\[
CDATA
\[
|
\-\-)
/
,
bj
=
{
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
,
""
,
""
]},
bk
=
X
(
c
);
bj
.
optgroup
=
bj
.
option
,
bj
.
tbody
=
bj
.
tfoot
=
bj
.
colgroup
=
bj
.
caption
=
bj
.
thead
,
bj
.
th
=
bj
.
td
,
f
.
support
.
htmlSerialize
||
(
bj
.
_default
=
[
1
,
"
div<div>
"
,
"
</div>
"
]),
f
.
fn
.
extend
({
text
:
function
(
a
){
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
var
c
=
f
(
this
);
c
.
text
(
a
.
call
(
this
,
b
,
c
.
text
()))});
if
(
typeof
a
!=
"
object
"
&&
a
!==
b
)
return
this
.
empty
().
append
((
this
[
0
]
&&
this
[
0
].
ownerDocument
||
c
).
createTextNode
(
a
));
return
f
.
text
(
this
)},
wrapAll
:
function
(
a
){
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
f
(
this
).
wrapAll
(
a
.
call
(
this
,
b
))});
if
(
this
[
0
]){
var
b
=
f
(
a
,
this
[
0
].
ownerDocument
).
eq
(
0
).
clone
(
!
0
);
this
[
0
].
parentNode
&&
b
.
insertBefore
(
this
[
0
]),
b
.
map
(
function
(){
var
a
=
this
;
while
(
a
.
firstChild
&&
a
.
firstChild
.
nodeType
===
1
)
a
=
a
.
firstChild
;
return
a
}).
append
(
this
)}
return
this
},
wrapInner
:
function
(
a
){
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
f
(
this
).
wrapInner
(
a
.
call
(
this
,
b
))});
return
this
.
each
(
function
(){
var
b
=
f
(
this
),
c
=
b
.
contents
();
c
.
length
?
c
.
wrapAll
(
a
):
b
.
append
(
a
)})},
wrap
:
function
(
a
){
return
this
.
each
(
function
(){
f
(
this
).
wrapAll
(
a
)})},
unwrap
:
function
(){
return
this
.
parent
().
each
(
function
(){
f
.
nodeName
(
this
,
"
body
"
)
||
f
(
this
).
replaceWith
(
this
.
childNodes
)}).
end
()},
append
:
function
(){
return
this
.
domManip
(
arguments
,
!
0
,
function
(
a
){
this
.
nodeType
===
1
&&
this
.
appendChild
(
a
)})},
prepend
:
function
(){
return
this
.
domManip
(
arguments
,
!
0
,
function
(
a
){
this
.
nodeType
===
1
&&
this
.
insertBefore
(
a
,
this
.
firstChild
)})},
before
:
function
(){
if
(
this
[
0
]
&&
this
[
0
].
parentNode
)
return
this
.
domManip
(
arguments
,
!
1
,
function
(
a
){
this
.
parentNode
.
insertBefore
(
a
,
this
)});
if
(
arguments
.
length
){
var
a
=
f
(
arguments
[
0
]);
a
.
push
.
apply
(
a
,
this
.
toArray
());
return
this
.
pushStack
(
a
,
"
before
"
,
arguments
)}},
after
:
function
(){
if
(
this
[
0
]
&&
this
[
0
].
parentNode
)
return
this
.
domManip
(
arguments
,
!
1
,
function
(
a
){
this
.
parentNode
.
insertBefore
(
a
,
this
.
nextSibling
)});
if
(
arguments
.
length
){
var
a
=
this
.
pushStack
(
this
,
"
after
"
,
arguments
);
a
.
push
.
apply
(
a
,
f
(
arguments
[
0
]).
toArray
());
return
a
}},
remove
:
function
(
a
,
b
){
for
(
var
c
=
0
,
d
;(
d
=
this
[
c
])
!=
null
;
c
++
)
if
(
!
a
||
f
.
filter
(
a
,[
d
]).
length
)
!
b
&&
d
.
nodeType
===
1
&&
(
f
.
cleanData
(
d
.
getElementsByTagName
(
"
*
"
)),
f
.
cleanData
([
d
])),
d
.
parentNode
&&
d
.
parentNode
.
removeChild
(
d
);
return
this
},
empty
:
function
(){
for
(
var
a
=
0
,
b
;(
b
=
this
[
a
])
!=
null
;
a
++
){
b
.
nodeType
===
1
&&
f
.
cleanData
(
b
.
getElementsByTagName
(
"
*
"
));
while
(
b
.
firstChild
)
b
.
removeChild
(
b
.
firstChild
)}
return
this
},
clone
:
function
(
a
,
b
){
a
=
a
==
null
?
!
1
:
a
,
b
=
b
==
null
?
a
:
b
;
return
this
.
map
(
function
(){
return
f
.
clone
(
this
,
a
,
b
)})},
html
:
function
(
a
){
if
(
a
===
b
)
return
this
[
0
]
&&
this
[
0
].
nodeType
===
1
?
this
[
0
].
innerHTML
.
replace
(
Z
,
""
):
null
;
if
(
typeof
a
==
"
string
"
&&!
bd
.
test
(
a
)
&&
(
f
.
support
.
leadingWhitespace
||!
$
.
test
(
a
))
&&!
bj
[(
ba
.
exec
(
a
)
||
[
""
,
""
])[
1
].
toLowerCase
()]){
a
=
a
.
replace
(
_
,
"
<$1></$2>
"
);
try
{
for
(
var
c
=
0
,
d
=
this
.
length
;
c
<
d
;
c
++
)
this
[
c
].
nodeType
===
1
&&
(
f
.
cleanData
(
this
[
c
].
getElementsByTagName
(
"
*
"
)),
this
[
c
].
innerHTML
=
a
)}
catch
(
e
){
this
.
empty
().
append
(
a
)}}
else
f
.
isFunction
(
a
)?
this
.
each
(
function
(
b
){
var
c
=
f
(
this
);
c
.
html
(
a
.
call
(
this
,
b
,
c
.
html
()))}):
this
.
empty
().
append
(
a
);
return
this
},
replaceWith
:
function
(
a
){
if
(
this
[
0
]
&&
this
[
0
].
parentNode
){
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
var
c
=
f
(
this
),
d
=
c
.
html
();
c
.
replaceWith
(
a
.
call
(
this
,
b
,
d
))});
typeof
a
!=
"
string
"
&&
(
a
=
f
(
a
).
detach
());
return
this
.
each
(
function
(){
var
b
=
this
.
nextSibling
,
c
=
this
.
parentNode
;
f
(
this
).
remove
(),
b
?
f
(
b
).
before
(
a
):
f
(
c
).
append
(
a
)})}
return
this
.
length
?
this
.
pushStack
(
f
(
f
.
isFunction
(
a
)?
a
():
a
),
"
replaceWith
"
,
a
):
this
},
detach
:
function
(
a
){
return
this
.
remove
(
a
,
!
0
)},
domManip
:
function
(
a
,
c
,
d
){
var
e
,
g
,
h
,
i
,
j
=
a
[
0
],
k
=
[];
if
(
!
f
.
support
.
checkClone
&&
arguments
.
length
===
3
&&
typeof
j
==
"
string
"
&&
bg
.
test
(
j
))
return
this
.
each
(
function
(){
f
(
this
).
domManip
(
a
,
c
,
d
,
!
0
)});
if
(
f
.
isFunction
(
j
))
return
this
.
each
(
function
(
e
){
var
g
=
f
(
this
);
a
[
0
]
=
j
.
call
(
this
,
e
,
c
?
g
.
html
():
b
),
g
.
domManip
(
a
,
c
,
d
)});
if
(
this
[
0
]){
i
=
j
&&
j
.
parentNode
,
f
.
support
.
parentNode
&&
i
&&
i
.
nodeType
===
11
&&
i
.
childNodes
.
length
===
this
.
length
?
e
=
{
fragment
:
i
}:
e
=
f
.
buildFragment
(
a
,
this
,
k
),
h
=
e
.
fragment
,
h
.
childNodes
.
length
===
1
?
g
=
h
=
h
.
firstChild
:
g
=
h
.
firstChild
;
if
(
g
){
c
=
c
&&
f
.
nodeName
(
g
,
"
tr
"
);
for
(
var
l
=
0
,
m
=
this
.
length
,
n
=
m
-
1
;
l
<
m
;
l
++
)
d
.
call
(
c
?
bl
(
this
[
l
],
g
):
this
[
l
],
e
.
cacheable
||
m
>
1
&&
l
<
n
?
f
.
clone
(
h
,
!
0
,
!
0
):
h
)}
k
.
length
&&
f
.
each
(
k
,
br
)}
return
this
}}),
f
.
buildFragment
=
function
(
a
,
b
,
d
){
var
e
,
g
,
h
,
i
,
j
=
a
[
0
];
b
&&
b
[
0
]
&&
(
i
=
b
[
0
].
ownerDocument
||
b
[
0
]),
i
.
createDocumentFragment
||
(
i
=
c
),
a
.
length
===
1
&&
typeof
j
==
"
string
"
&&
j
.
length
<
512
&&
i
===
c
&&
j
.
charAt
(
0
)
===
"
<
"
&&!
be
.
test
(
j
)
&&
(
f
.
support
.
checkClone
||!
bg
.
test
(
j
))
&&!
f
.
support
.
unknownElems
&&
bf
.
test
(
j
)
&&
(
g
=!
0
,
h
=
f
.
fragments
[
j
],
h
&&
h
!==
1
&&
(
e
=
h
)),
e
||
(
e
=
i
.
createDocumentFragment
(),
f
.
clean
(
a
,
i
,
e
,
d
)),
g
&&
(
f
.
fragments
[
j
]
=
h
?
e
:
1
);
return
{
fragment
:
e
,
cacheable
:
g
}},
f
.
fragments
=
{},
f
.
each
({
appendTo
:
"
append
"
,
prependTo
:
"
prepend
"
,
insertBefore
:
"
before
"
,
insertAfter
:
"
after
"
,
replaceAll
:
"
replaceWith
"
},
function
(
a
,
b
){
f
.
fn
[
a
]
=
function
(
c
){
var
d
=
[],
e
=
f
(
c
),
g
=
this
.
length
===
1
&&
this
[
0
].
parentNode
;
if
(
g
&&
g
.
nodeType
===
11
&&
g
.
childNodes
.
length
===
1
&&
e
.
length
===
1
){
e
[
b
](
this
[
0
]);
return
this
}
for
(
var
h
=
0
,
i
=
e
.
length
;
h
<
i
;
h
++
){
var
j
=
(
h
>
0
?
this
.
clone
(
!
0
):
this
).
get
();
f
(
e
[
h
])[
b
](
j
),
d
=
d
.
concat
(
j
)}
return
this
.
pushStack
(
d
,
a
,
e
.
selector
)}}),
f
.
extend
({
clone
:
function
(
a
,
b
,
c
){
var
d
=
a
.
cloneNode
(
!
0
),
e
,
g
,
h
;
if
((
!
f
.
support
.
noCloneEvent
||!
f
.
support
.
noCloneChecked
)
&&
(
a
.
nodeType
===
1
||
a
.
nodeType
===
11
)
&&!
f
.
isXMLDoc
(
a
)){
bn
(
a
,
d
),
e
=
bo
(
a
),
g
=
bo
(
d
);
for
(
h
=
0
;
e
[
h
];
++
h
)
g
[
h
]
&&
bn
(
e
[
h
],
g
[
h
])}
if
(
b
){
bm
(
a
,
d
);
if
(
c
){
e
=
bo
(
a
),
g
=
bo
(
d
);
for
(
h
=
0
;
e
[
h
];
++
h
)
bm
(
e
[
h
],
g
[
h
])}}
e
=
g
=
null
;
return
d
},
clean
:
function
(
a
,
b
,
d
,
e
){
var
g
;
b
=
b
||
c
,
typeof
b
.
createElement
==
"
undefined
"
&&
(
b
=
b
.
ownerDocument
||
b
[
0
]
&&
b
[
0
].
ownerDocument
||
c
);
var
h
=
[],
i
;
for
(
var
j
=
0
,
k
;(
k
=
a
[
j
])
!=
null
;
j
++
){
typeof
k
==
"
number
"
&&
(
k
+=
""
);
if
(
!
k
)
continue
;
if
(
typeof
k
==
"
string
"
)
if
(
!
bc
.
test
(
k
))
k
=
b
.
createTextNode
(
k
);
else
{
k
=
k
.
replace
(
_
,
"
<$1></$2>
"
);
var
l
=
(
ba
.
exec
(
k
)
||
[
""
,
""
])[
1
].
toLowerCase
(),
m
=
bj
[
l
]
||
bj
.
_default
,
n
=
m
[
0
],
o
=
b
.
createElement
(
"
div
"
);
b
===
c
?
bk
.
appendChild
(
o
):
X
(
b
).
appendChild
(
o
),
o
.
innerHTML
=
m
[
1
]
+
k
+
m
[
2
];
while
(
n
--
)
o
=
o
.
lastChild
;
if
(
!
f
.
support
.
tbody
){
var
p
=
bb
.
test
(
k
),
q
=
l
===
"
table
"
&&!
p
?
o
.
firstChild
&&
o
.
firstChild
.
childNodes
:
m
[
1
]
===
"
<table>
"
&&!
p
?
o
.
childNodes
:[];
for
(
i
=
q
.
length
-
1
;
i
>=
0
;
--
i
)
f
.
nodeName
(
q
[
i
],
"
tbody
"
)
&&!
q
[
i
].
childNodes
.
length
&&
q
[
i
].
parentNode
.
removeChild
(
q
[
i
])}
!
f
.
support
.
leadingWhitespace
&&
$
.
test
(
k
)
&&
o
.
insertBefore
(
b
.
createTextNode
(
$
.
exec
(
k
)[
0
]),
o
.
firstChild
),
k
=
o
.
childNodes
}
var
r
;
if
(
!
f
.
support
.
appendChecked
)
if
(
k
[
0
]
&&
typeof
(
r
=
k
.
length
)
==
"
number
"
)
for
(
i
=
0
;
i
<
r
;
i
++
)
bq
(
k
[
i
]);
else
bq
(
k
);
k
.
nodeType
?
h
.
push
(
k
):
h
=
f
.
merge
(
h
,
k
)}
if
(
d
){
g
=
function
(
a
){
return
!
a
.
type
||
bh
.
test
(
a
.
type
)};
for
(
j
=
0
;
h
[
j
];
j
++
)
if
(
e
&&
f
.
nodeName
(
h
[
j
],
"
script
"
)
&&
(
!
h
[
j
].
type
||
h
[
j
].
type
.
toLowerCase
()
===
"
text/javascript
"
))
e
.
push
(
h
[
j
].
parentNode
?
h
[
j
].
parentNode
.
removeChild
(
h
[
j
]):
h
[
j
]);
else
{
if
(
h
[
j
].
nodeType
===
1
){
var
s
=
f
.
grep
(
h
[
j
].
getElementsByTagName
(
"
script
"
),
g
);
h
.
splice
.
apply
(
h
,[
j
+
1
,
0
].
concat
(
s
))}
d
.
appendChild
(
h
[
j
])}}
return
h
},
cleanData
:
function
(
a
){
var
b
,
c
,
d
=
f
.
cache
,
e
=
f
.
event
.
special
,
g
=
f
.
support
.
deleteExpando
;
for
(
var
h
=
0
,
i
;(
i
=
a
[
h
])
!=
null
;
h
++
){
if
(
i
.
nodeName
&&
f
.
noData
[
i
.
nodeName
.
toLowerCase
()])
continue
;
c
=
i
[
f
.
expando
];
if
(
c
){
b
=
d
[
c
];
if
(
b
&&
b
.
events
){
for
(
var
j
in
b
.
events
)
e
[
j
]?
f
.
event
.
remove
(
i
,
j
):
f
.
removeEvent
(
i
,
j
,
b
.
handle
);
b
.
handle
&&
(
b
.
handle
.
elem
=
null
)}
g
?
delete
i
[
f
.
expando
]:
i
.
removeAttribute
&&
i
.
removeAttribute
(
f
.
expando
),
delete
d
[
c
]}}}});
var
bs
=
/alpha
\([^
)
]
*
\)
/i
,
bt
=
/opacity=
([^
)
]
*
)
/
,
bu
=
/
([
A-Z
]
|^ms
)
/g
,
bv
=
/^-
?\d
+
(?:
px
)?
$/i
,
bw
=
/^-
?\d
/
,
bx
=
/^
([\-
+
])
=
([\-
+.
\d
e
]
+
)
/
,
by
=
{
position
:
"
absolute
"
,
visibility
:
"
hidden
"
,
display
:
"
block
"
},
bz
=
[
"
Left
"
,
"
Right
"
],
bA
=
[
"
Top
"
,
"
Bottom
"
],
bB
,
bC
,
bD
;
f
.
fn
.
css
=
function
(
a
,
c
){
if
(
arguments
.
length
===
2
&&
c
===
b
)
return
this
;
return
f
.
access
(
this
,
a
,
c
,
!
0
,
function
(
a
,
c
,
d
){
return
d
!==
b
?
f
.
style
(
a
,
c
,
d
):
f
.
css
(
a
,
c
)})},
f
.
extend
({
cssHooks
:{
opacity
:{
get
:
function
(
a
,
b
){
if
(
b
){
var
c
=
bB
(
a
,
"
opacity
"
,
"
opacity
"
);
return
c
===
""
?
"
1
"
:
c
}
return
a
.
style
.
opacity
}}},
cssNumber
:{
fillOpacity
:
!
0
,
fontWeight
:
!
0
,
lineHeight
:
!
0
,
opacity
:
!
0
,
orphans
:
!
0
,
widows
:
!
0
,
zIndex
:
!
0
,
zoom
:
!
0
},
cssProps
:{
"
float
"
:
f
.
support
.
cssFloat
?
"
cssFloat
"
:
"
styleFloat
"
},
style
:
function
(
a
,
c
,
d
,
e
){
if
(
!!
a
&&
a
.
nodeType
!==
3
&&
a
.
nodeType
!==
8
&&!!
a
.
style
){
var
g
,
h
,
i
=
f
.
camelCase
(
c
),
j
=
a
.
style
,
k
=
f
.
cssHooks
[
i
];
c
=
f
.
cssProps
[
i
]
||
i
;
if
(
d
===
b
){
if
(
k
&&
"
get
"
in
k
&&
(
g
=
k
.
get
(
a
,
!
1
,
e
))
!==
b
)
return
g
;
return
j
[
c
]}
h
=
typeof
d
,
h
===
"
string
"
&&
(
g
=
bx
.
exec
(
d
))
&&
(
d
=+
(
g
[
1
]
+
1
)
*+
g
[
2
]
+
parseFloat
(
f
.
css
(
a
,
c
)),
h
=
"
number
"
);
if
(
d
==
null
||
h
===
"
number
"
&&
isNaN
(
d
))
return
;
h
===
"
number
"
&&!
f
.
cssNumber
[
i
]
&&
(
d
+=
"
px
"
);
if
(
!
k
||!
(
"
set
"
in
k
)
||
(
d
=
k
.
set
(
a
,
d
))
!==
b
)
try
{
j
[
c
]
=
d
}
catch
(
l
){}}},
css
:
function
(
a
,
c
,
d
){
var
e
,
g
;
c
=
f
.
camelCase
(
c
),
g
=
f
.
cssHooks
[
c
],
c
=
f
.
cssProps
[
c
]
||
c
,
c
===
"
cssFloat
"
&&
(
c
=
"
float
"
);
if
(
g
&&
"
get
"
in
g
&&
(
e
=
g
.
get
(
a
,
!
0
,
d
))
!==
b
)
return
e
;
if
(
bB
)
return
bB
(
a
,
c
)},
swap
:
function
(
a
,
b
,
c
){
var
d
=
{};
for
(
var
e
in
b
)
d
[
e
]
=
a
.
style
[
e
],
a
.
style
[
e
]
=
b
[
e
];
c
.
call
(
a
);
for
(
e
in
b
)
a
.
style
[
e
]
=
d
[
e
]}}),
f
.
curCSS
=
f
.
css
,
f
.
each
([
"
height
"
,
"
width
"
],
function
(
a
,
b
){
f
.
cssHooks
[
b
]
=
{
get
:
function
(
a
,
c
,
d
){
var
e
;
if
(
c
){
if
(
a
.
offsetWidth
!==
0
)
return
bE
(
a
,
b
,
d
);
f
.
swap
(
a
,
by
,
function
(){
e
=
bE
(
a
,
b
,
d
)});
return
e
}},
set
:
function
(
a
,
b
){
if
(
!
bv
.
test
(
b
))
return
b
;
b
=
parseFloat
(
b
);
if
(
b
>=
0
)
return
b
+
"
px
"
}}}),
f
.
support
.
opacity
||
(
f
.
cssHooks
.
opacity
=
{
get
:
function
(
a
,
b
){
return
bt
.
test
((
b
&&
a
.
currentStyle
?
a
.
currentStyle
.
filter
:
a
.
style
.
filter
)
||
""
)?
parseFloat
(
RegExp
.
$1
)
/
100
+
""
:
b
?
"
1
"
:
""
},
set
:
function
(
a
,
b
){
var
c
=
a
.
style
,
d
=
a
.
currentStyle
,
e
=
f
.
isNumeric
(
b
)?
"
alpha(opacity=
"
+
b
*
100
+
"
)
"
:
""
,
g
=
d
&&
d
.
filter
||
c
.
filter
||
""
;
c
.
zoom
=
1
;
if
(
b
>=
1
&&
f
.
trim
(
g
.
replace
(
bs
,
""
))
===
""
){
c
.
removeAttribute
(
"
filter
"
);
if
(
d
&&!
d
.
filter
)
return
}
c
.
filter
=
bs
.
test
(
g
)?
g
.
replace
(
bs
,
e
):
g
+
"
"
+
e
}}),
f
(
function
(){
f
.
support
.
reliableMarginRight
||
(
f
.
cssHooks
.
marginRight
=
{
get
:
function
(
a
,
b
){
var
c
;
f
.
swap
(
a
,{
display
:
"
inline-block
"
},
function
(){
b
?
c
=
bB
(
a
,
"
margin-right
"
,
"
marginRight
"
):
c
=
a
.
style
.
marginRight
});
return
c
}})}),
c
.
defaultView
&&
c
.
defaultView
.
getComputedStyle
&&
(
bC
=
function
(
a
,
c
){
var
d
,
e
,
g
;
c
=
c
.
replace
(
bu
,
"
-$1
"
).
toLowerCase
();
if
(
!
(
e
=
a
.
ownerDocument
.
defaultView
))
return
b
;
if
(
g
=
e
.
getComputedStyle
(
a
,
null
))
d
=
g
.
getPropertyValue
(
c
),
d
===
""
&&!
f
.
contains
(
a
.
ownerDocument
.
documentElement
,
a
)
&&
(
d
=
f
.
style
(
a
,
c
));
return
d
}),
c
.
documentElement
.
currentStyle
&&
(
bD
=
function
(
a
,
b
){
var
c
,
d
,
e
,
f
=
a
.
currentStyle
&&
a
.
currentStyle
[
b
],
g
=
a
.
style
;
f
===
null
&&
g
&&
(
e
=
g
[
b
])
&&
(
f
=
e
),
!
bv
.
test
(
f
)
&&
bw
.
test
(
f
)
&&
(
c
=
g
.
left
,
d
=
a
.
runtimeStyle
&&
a
.
runtimeStyle
.
left
,
d
&&
(
a
.
runtimeStyle
.
left
=
a
.
currentStyle
.
left
),
g
.
left
=
b
===
"
fontSize
"
?
"
1em
"
:
f
||
0
,
f
=
g
.
pixelLeft
+
"
px
"
,
g
.
left
=
c
,
d
&&
(
a
.
runtimeStyle
.
left
=
d
));
return
f
===
""
?
"
auto
"
:
f
}),
bB
=
bC
||
bD
,
f
.
expr
&&
f
.
expr
.
filters
&&
(
f
.
expr
.
filters
.
hidden
=
function
(
a
){
var
b
=
a
.
offsetWidth
,
c
=
a
.
offsetHeight
;
return
b
===
0
&&
c
===
0
||!
f
.
support
.
reliableHiddenOffsets
&&
(
a
.
style
&&
a
.
style
.
display
||
f
.
css
(
a
,
"
display
"
))
===
"
none
"
},
f
.
expr
.
filters
.
visible
=
function
(
a
){
return
!
f
.
expr
.
filters
.
hidden
(
a
)});
var
bF
=
/%20/g
,
bG
=
/
\[\]
$/
,
bH
=
/
\r?\n
/g
,
bI
=
/#.*$/
,
bJ
=
/^
(
.*
?)
:
[
\t]
*
([^\r\n]
*
)\r?
$/mg
,
bK
=
/^
(?:
color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week
)
$/i
,
bL
=
/^
(?:
about|app|app
\-
storage|.+
\-
extension|file|res|widget
)
:$/
,
bM
=
/^
(?:
GET|HEAD
)
$/
,
bN
=
/^
\/\/
/
,
bO
=
/
\?
/
,
bP
=
/<script
\b[^
<
]
*
(?:(?!
<
\/
script>
)
<
[^
<
]
*
)
*<
\/
script>/gi
,
bQ
=
/^
(?:
select|textarea
)
/i
,
bR
=
/
\s
+/
,
bS
=
/
([
?&
])
_=
[^
&
]
*/
,
bT
=
/^
([\w\+\.\-]
+:
)(?:\/\/([^\/
?#:
]
*
)(?:
:
(\d
+
))?)?
/
,
bU
=
f
.
fn
.
load
,
bV
=
{},
bW
=
{},
bX
,
bY
,
bZ
=
[
"
*/
"
]
+
[
"
*
"
];
try
{
bX
=
e
.
href
}
catch
(
b$
){
bX
=
c
.
createElement
(
"
a
"
),
bX
.
href
=
""
,
bX
=
bX
.
href
}
bY
=
bT
.
exec
(
bX
.
toLowerCase
())
||
[],
f
.
fn
.
extend
({
load
:
function
(
a
,
c
,
d
){
if
(
typeof
a
!=
"
string
"
&&
bU
)
return
bU
.
apply
(
this
,
arguments
);
if
(
!
this
.
length
)
return
this
;
var
e
=
a
.
indexOf
(
"
"
);
if
(
e
>=
0
){
var
g
=
a
.
slice
(
e
,
a
.
length
);
a
=
a
.
slice
(
0
,
e
)}
var
h
=
"
GET
"
;
c
&&
(
f
.
isFunction
(
c
)?(
d
=
c
,
c
=
b
):
typeof
c
==
"
object
"
&&
(
c
=
f
.
param
(
c
,
f
.
ajaxSettings
.
traditional
),
h
=
"
POST
"
));
var
i
=
this
;
f
.
ajax
({
url
:
a
,
type
:
h
,
dataType
:
"
html
"
,
data
:
c
,
complete
:
function
(
a
,
b
,
c
){
c
=
a
.
responseText
,
a
.
isResolved
()
&&
(
a
.
done
(
function
(
a
){
c
=
a
}),
i
.
html
(
g
?
f
(
"
<div>
"
).
append
(
c
.
replace
(
bP
,
""
)).
find
(
g
):
c
)),
d
&&
i
.
each
(
d
,[
c
,
b
,
a
])}});
return
this
},
serialize
:
function
(){
return
f
.
param
(
this
.
serializeArray
())},
serializeArray
:
function
(){
return
this
.
map
(
function
(){
return
this
.
elements
?
f
.
makeArray
(
this
.
elements
):
this
}).
filter
(
function
(){
return
this
.
name
&&!
this
.
disabled
&&
(
this
.
checked
||
bQ
.
test
(
this
.
nodeName
)
||
bK
.
test
(
this
.
type
))}).
map
(
function
(
a
,
b
){
var
c
=
f
(
this
).
val
();
return
c
==
null
?
null
:
f
.
isArray
(
c
)?
f
.
map
(
c
,
function
(
a
,
c
){
return
{
name
:
b
.
name
,
value
:
a
.
replace
(
bH
,
"
\r\n
"
)}}):{
name
:
b
.
name
,
value
:
c
.
replace
(
bH
,
"
\r\n
"
)}}).
get
()}}),
f
.
each
(
"
ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend
"
.
split
(
"
"
),
function
(
a
,
b
){
f
.
fn
[
b
]
=
function
(
a
){
return
this
.
bind
(
b
,
a
)}}),
f
.
each
([
"
get
"
,
"
post
"
],
function
(
a
,
c
){
f
[
c
]
=
function
(
a
,
d
,
e
,
g
){
f
.
isFunction
(
d
)
&&
(
g
=
g
||
e
,
e
=
d
,
d
=
b
);
return
f
.
ajax
({
type
:
c
,
url
:
a
,
data
:
d
,
success
:
e
,
dataType
:
g
})}}),
f
.
extend
({
getScript
:
function
(
a
,
c
){
return
f
.
get
(
a
,
b
,
c
,
"
script
"
)},
getJSON
:
function
(
a
,
b
,
c
){
return
f
.
get
(
a
,
b
,
c
,
"
json
"
)},
ajaxSetup
:
function
(
a
,
b
){
b
?
cb
(
a
,
f
.
ajaxSettings
):(
b
=
a
,
a
=
f
.
ajaxSettings
),
cb
(
a
,
b
);
return
a
},
ajaxSettings
:{
url
:
bX
,
isLocal
:
bL
.
test
(
bY
[
1
]),
global
:
!
0
,
type
:
"
GET
"
,
contentType
:
"
application/x-www-form-urlencoded
"
,
processData
:
!
0
,
async
:
!
0
,
accepts
:{
xml
:
"
application/xml, text/xml
"
,
html
:
"
text/html
"
,
text
:
"
text/plain
"
,
json
:
"
application/json, text/javascript
"
,
"
*
"
:
bZ
},
contents
:{
xml
:
/xml/
,
html
:
/html/
,
json
:
/json/
},
responseFields
:{
xml
:
"
responseXML
"
,
text
:
"
responseText
"
},
converters
:{
"
* text
"
:
a
.
String
,
"
text html
"
:
!
0
,
"
text json
"
:
f
.
parseJSON
,
"
text xml
"
:
f
.
parseXML
},
flatOptions
:{
context
:
!
0
,
url
:
!
0
}},
ajaxPrefilter
:
b_
(
bV
),
ajaxTransport
:
b_
(
bW
),
ajax
:
function
(
a
,
c
){
function
w
(
a
,
c
,
l
,
m
){
if
(
s
!==
2
){
s
=
2
,
q
&&
clearTimeout
(
q
),
p
=
b
,
n
=
m
||
""
,
v
.
readyState
=
a
>
0
?
4
:
0
;
var
o
,
r
,
u
,
w
=
c
,
x
=
l
?
cd
(
d
,
v
,
l
):
b
,
y
,
z
;
if
(
a
>=
200
&&
a
<
300
||
a
===
304
){
if
(
d
.
ifModified
){
if
(
y
=
v
.
getResponseHeader
(
"
Last-Modified
"
))
f
.
lastModified
[
k
]
=
y
;
if
(
z
=
v
.
getResponseHeader
(
"
Etag
"
))
f
.
etag
[
k
]
=
z
}
if
(
a
===
304
)
w
=
"
notmodified
"
,
o
=!
0
;
else
try
{
r
=
ce
(
d
,
x
),
w
=
"
success
"
,
o
=!
0
}
catch
(
A
){
w
=
"
parsererror
"
,
u
=
A
}}
else
{
u
=
w
;
if
(
!
w
||
a
)
w
=
"
error
"
,
a
<
0
&&
(
a
=
0
)}
v
.
status
=
a
,
v
.
statusText
=
""
+
(
c
||
w
),
o
?
h
.
resolveWith
(
e
,[
r
,
w
,
v
]):
h
.
rejectWith
(
e
,[
v
,
w
,
u
]),
v
.
statusCode
(
j
),
j
=
b
,
t
&&
g
.
trigger
(
"
ajax
"
+
(
o
?
"
Success
"
:
"
Error
"
),[
v
,
d
,
o
?
r
:
u
]),
i
.
fireWith
(
e
,[
v
,
w
]),
t
&&
(
g
.
trigger
(
"
ajaxComplete
"
,[
v
,
d
]),
--
f
.
active
||
f
.
event
.
trigger
(
"
ajaxStop
"
))}}
typeof
a
==
"
object
"
&&
(
c
=
a
,
a
=
b
),
c
=
c
||
{};
var
d
=
f
.
ajaxSetup
({},
c
),
e
=
d
.
context
||
d
,
g
=
e
!==
d
&&
(
e
.
nodeType
||
e
instanceof
f
)?
f
(
e
):
f
.
event
,
h
=
f
.
Deferred
(),
i
=
f
.
Callbacks
(
"
once memory
"
),
j
=
d
.
statusCode
||
{},
k
,
l
=
{},
m
=
{},
n
,
o
,
p
,
q
,
r
,
s
=
0
,
t
,
u
,
v
=
{
readyState
:
0
,
setRequestHeader
:
function
(
a
,
b
){
if
(
!
s
){
var
c
=
a
.
toLowerCase
();
a
=
m
[
c
]
=
m
[
c
]
||
a
,
l
[
a
]
=
b
}
return
this
},
getAllResponseHeaders
:
function
(){
return
s
===
2
?
n
:
null
},
getResponseHeader
:
function
(
a
){
var
c
;
if
(
s
===
2
){
if
(
!
o
){
o
=
{};
while
(
c
=
bJ
.
exec
(
n
))
o
[
c
[
1
].
toLowerCase
()]
=
c
[
2
]}
c
=
o
[
a
.
toLowerCase
()]}
return
c
===
b
?
null
:
c
},
overrideMimeType
:
function
(
a
){
s
||
(
d
.
mimeType
=
a
);
return
this
},
abort
:
function
(
a
){
a
=
a
||
"
abort
"
,
p
&&
p
.
abort
(
a
),
w
(
0
,
a
);
return
this
}};
h
.
promise
(
v
),
v
.
success
=
v
.
done
,
v
.
error
=
v
.
fail
,
v
.
complete
=
i
.
add
,
v
.
statusCode
=
function
(
a
){
if
(
a
){
var
b
;
if
(
s
<
2
)
for
(
b
in
a
)
j
[
b
]
=
[
j
[
b
],
a
[
b
]];
else
b
=
a
[
v
.
status
],
v
.
then
(
b
,
b
)}
return
this
},
d
.
url
=
((
a
||
d
.
url
)
+
""
).
replace
(
bI
,
""
).
replace
(
bN
,
bY
[
1
]
+
"
//
"
),
d
.
dataTypes
=
f
.
trim
(
d
.
dataType
||
"
*
"
).
toLowerCase
().
split
(
bR
),
d
.
crossDomain
==
null
&&
(
r
=
bT
.
exec
(
d
.
url
.
toLowerCase
()),
d
.
crossDomain
=!
(
!
r
||
r
[
1
]
==
bY
[
1
]
&&
r
[
2
]
==
bY
[
2
]
&&
(
r
[
3
]
||
(
r
[
1
]
===
"
http:
"
?
80
:
443
))
==
(
bY
[
3
]
||
(
bY
[
1
]
===
"
http:
"
?
80
:
443
)))),
d
.
data
&&
d
.
processData
&&
typeof
d
.
data
!=
"
string
"
&&
(
d
.
data
=
f
.
param
(
d
.
data
,
d
.
traditional
)),
ca
(
bV
,
d
,
c
,
v
);
if
(
s
===
2
)
return
!
1
;
t
=
d
.
global
,
d
.
type
=
d
.
type
.
toUpperCase
(),
d
.
hasContent
=!
bM
.
test
(
d
.
type
),
t
&&
f
.
active
++===
0
&&
f
.
event
.
trigger
(
"
ajaxStart
"
);
if
(
!
d
.
hasContent
){
d
.
data
&&
(
d
.
url
+=
(
bO
.
test
(
d
.
url
)?
"
&
"
:
"
?
"
)
+
d
.
data
,
delete
d
.
data
),
k
=
d
.
url
;
if
(
d
.
cache
===!
1
){
var
x
=
f
.
now
(),
y
=
d
.
url
.
replace
(
bS
,
"
$1_=
"
+
x
);
d
.
url
=
y
+
(
y
===
d
.
url
?(
bO
.
test
(
d
.
url
)?
"
&
"
:
"
?
"
)
+
"
_=
"
+
x
:
""
)}}(
d
.
data
&&
d
.
hasContent
&&
d
.
contentType
!==!
1
||
c
.
contentType
)
&&
v
.
setRequestHeader
(
"
Content-Type
"
,
d
.
contentType
),
d
.
ifModified
&&
(
k
=
k
||
d
.
url
,
f
.
lastModified
[
k
]
&&
v
.
setRequestHeader
(
"
If-Modified-Since
"
,
f
.
lastModified
[
k
]),
f
.
etag
[
k
]
&&
v
.
setRequestHeader
(
"
If-None-Match
"
,
f
.
etag
[
k
])),
v
.
setRequestHeader
(
"
Accept
"
,
d
.
dataTypes
[
0
]
&&
d
.
accepts
[
d
.
dataTypes
[
0
]]?
d
.
accepts
[
d
.
dataTypes
[
0
]]
+
(
d
.
dataTypes
[
0
]
!==
"
*
"
?
"
,
"
+
bZ
+
"
; q=0.01
"
:
""
):
d
.
accepts
[
"
*
"
]);
for
(
u
in
d
.
headers
)
v
.
setRequestHeader
(
u
,
d
.
headers
[
u
]);
if
(
d
.
beforeSend
&&
(
d
.
beforeSend
.
call
(
e
,
v
,
d
)
===!
1
||
s
===
2
)){
v
.
abort
();
return
!
1
}
for
(
u
in
{
success
:
1
,
error
:
1
,
complete
:
1
})
v
[
u
](
d
[
u
]);
p
=
ca
(
bW
,
d
,
c
,
v
);
if
(
!
p
)
w
(
-
1
,
"
No Transport
"
);
else
{
v
.
readyState
=
1
,
t
&&
g
.
trigger
(
"
ajaxSend
"
,[
v
,
d
]),
d
.
async
&&
d
.
timeout
>
0
&&
(
q
=
setTimeout
(
function
(){
v
.
abort
(
"
timeout
"
)},
d
.
timeout
));
try
{
s
=
1
,
p
.
send
(
l
,
w
)}
catch
(
z
){
s
<
2
?
w
(
-
1
,
z
):
f
.
error
(
z
)}}
return
v
},
param
:
function
(
a
,
c
){
var
d
=
[],
e
=
function
(
a
,
b
){
b
=
f
.
isFunction
(
b
)?
b
():
b
,
d
[
d
.
length
]
=
encodeURIComponent
(
a
)
+
"
=
"
+
encodeURIComponent
(
b
)};
c
===
b
&&
(
c
=
f
.
ajaxSettings
.
traditional
);
if
(
f
.
isArray
(
a
)
||
a
.
jquery
&&!
f
.
isPlainObject
(
a
))
f
.
each
(
a
,
function
(){
e
(
this
.
name
,
this
.
value
)});
else
for
(
var
g
in
a
)
cc
(
g
,
a
[
g
],
c
,
e
);
return
d
.
join
(
"
&
"
).
replace
(
bF
,
"
+
"
)}}),
f
.
extend
({
active
:
0
,
lastModified
:{},
etag
:{}});
var
cf
=
f
.
now
(),
cg
=
/
(\=)\?(
&|$
)
|
\?\?
/i
;
f
.
ajaxSetup
({
jsonp
:
"
callback
"
,
jsonpCallback
:
function
(){
return
f
.
expando
+
"
_
"
+
cf
++
}}),
f
.
ajaxPrefilter
(
"
json jsonp
"
,
function
(
b
,
c
,
d
){
var
e
=
b
.
contentType
===
"
application/x-www-form-urlencoded
"
&&
typeof
b
.
data
==
"
string
"
;
if
(
b
.
dataTypes
[
0
]
===
"
jsonp
"
||
b
.
jsonp
!==!
1
&&
(
cg
.
test
(
b
.
url
)
||
e
&&
cg
.
test
(
b
.
data
))){
var
g
,
h
=
b
.
jsonpCallback
=
f
.
isFunction
(
b
.
jsonpCallback
)?
b
.
jsonpCallback
():
b
.
jsonpCallback
,
i
=
a
[
h
],
j
=
b
.
url
,
k
=
b
.
data
,
l
=
"
$1
"
+
h
+
"
$2
"
;
b
.
jsonp
!==!
1
&&
(
j
=
j
.
replace
(
cg
,
l
),
b
.
url
===
j
&&
(
e
&&
(
k
=
k
.
replace
(
cg
,
l
)),
b
.
data
===
k
&&
(
j
+=
(
/
\?
/
.
test
(
j
)?
"
&
"
:
"
?
"
)
+
b
.
jsonp
+
"
=
"
+
h
))),
b
.
url
=
j
,
b
.
data
=
k
,
a
[
h
]
=
function
(
a
){
g
=
[
a
]},
d
.
always
(
function
(){
a
[
h
]
=
i
,
g
&&
f
.
isFunction
(
i
)
&&
a
[
h
](
g
[
0
])}),
b
.
converters
[
"
script json
"
]
=
function
(){
g
||
f
.
error
(
h
+
"
was not called
"
);
return
g
[
0
]},
b
.
dataTypes
[
0
]
=
"
json
"
;
return
"
script
"
}}),
f
.
ajaxSetup
({
accepts
:{
script
:
"
text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
"
},
contents
:{
script
:
/javascript|ecmascript/
},
converters
:{
"
text script
"
:
function
(
a
){
f
.
globalEval
(
a
);
return
a
}}}),
f
.
ajaxPrefilter
(
"
script
"
,
function
(
a
){
a
.
cache
===
b
&&
(
a
.
cache
=!
1
),
a
.
crossDomain
&&
(
a
.
type
=
"
GET
"
,
a
.
global
=!
1
)}),
f
.
ajaxTransport
(
"
script
"
,
function
(
a
){
if
(
a
.
crossDomain
){
var
d
,
e
=
c
.
head
||
c
.
getElementsByTagName
(
"
head
"
)[
0
]
||
c
.
documentElement
;
return
{
send
:
function
(
f
,
g
){
d
=
c
.
createElement
(
"
script
"
),
d
.
async
=
"
async
"
,
a
.
scriptCharset
&&
(
d
.
charset
=
a
.
scriptCharset
),
d
.
src
=
a
.
url
,
d
.
onload
=
d
.
onreadystatechange
=
function
(
a
,
c
){
if
(
c
||!
d
.
readyState
||
/loaded|complete/
.
test
(
d
.
readyState
))
d
.
onload
=
d
.
onreadystatechange
=
null
,
e
&&
d
.
parentNode
&&
e
.
removeChild
(
d
),
d
=
b
,
c
||
g
(
200
,
"
success
"
)},
e
.
insertBefore
(
d
,
e
.
firstChild
)},
abort
:
function
(){
d
&&
d
.
onload
(
0
,
1
)}}}});
var
ch
=
a
.
ActiveXObject
?
function
(){
for
(
var
a
in
cj
)
cj
[
a
](
0
,
1
)}:
!
1
,
ci
=
0
,
cj
;
f
.
ajaxSettings
.
xhr
=
a
.
ActiveXObject
?
function
(){
return
!
this
.
isLocal
&&
ck
()
||
cl
()}:
ck
,
function
(
a
){
f
.
extend
(
f
.
support
,{
ajax
:
!!
a
,
cors
:
!!
a
&&
"
withCredentials
"
in
a
})}(
f
.
ajaxSettings
.
xhr
()),
f
.
support
.
ajax
&&
f
.
ajaxTransport
(
function
(
c
){
if
(
!
c
.
crossDomain
||
f
.
support
.
cors
){
var
d
;
return
{
send
:
function
(
e
,
g
){
var
h
=
c
.
xhr
(),
i
,
j
;
c
.
username
?
h
.
open
(
c
.
type
,
c
.
url
,
c
.
async
,
c
.
username
,
c
.
password
):
h
.
open
(
c
.
type
,
c
.
url
,
c
.
async
);
if
(
c
.
xhrFields
)
for
(
j
in
c
.
xhrFields
)
h
[
j
]
=
c
.
xhrFields
[
j
];
c
.
mimeType
&&
h
.
overrideMimeType
&&
h
.
overrideMimeType
(
c
.
mimeType
),
!
c
.
crossDomain
&&!
e
[
"
X-Requested-With
"
]
&&
(
e
[
"
X-Requested-With
"
]
=
"
XMLHttpRequest
"
);
try
{
for
(
j
in
e
)
h
.
setRequestHeader
(
j
,
e
[
j
])}
catch
(
k
){}
h
.
send
(
c
.
hasContent
&&
c
.
data
||
null
),
d
=
function
(
a
,
e
){
var
j
,
k
,
l
,
m
,
n
;
try
{
if
(
d
&&
(
e
||
h
.
readyState
===
4
)){
d
=
b
,
i
&&
(
h
.
onreadystatechange
=
f
.
noop
,
ch
&&
delete
cj
[
i
]);
if
(
e
)
h
.
readyState
!==
4
&&
h
.
abort
();
else
{
j
=
h
.
status
,
l
=
h
.
getAllResponseHeaders
(),
m
=
{},
n
=
h
.
responseXML
,
n
&&
n
.
documentElement
&&
(
m
.
xml
=
n
),
m
.
text
=
h
.
responseText
;
try
{
k
=
h
.
statusText
}
catch
(
o
){
k
=
""
}
!
j
&&
c
.
isLocal
&&!
c
.
crossDomain
?
j
=
m
.
text
?
200
:
404
:
j
===
1223
&&
(
j
=
204
)}}}
catch
(
p
){
e
||
g
(
-
1
,
p
)}
m
&&
g
(
j
,
k
,
m
,
l
)},
!
c
.
async
||
h
.
readyState
===
4
?
d
():(
i
=++
ci
,
ch
&&
(
cj
||
(
cj
=
{},
f
(
a
).
unload
(
ch
)),
cj
[
i
]
=
d
),
h
.
onreadystatechange
=
d
)},
abort
:
function
(){
d
&&
d
(
0
,
1
)}}}});
var
cm
=
{},
cn
,
co
,
cp
=
/^
(?:
toggle|show|hide
)
$/
,
cq
=
/^
([
+
\-]
=
)?([\d
+.
\-]
+
)([
a-z%
]
*
)
$/i
,
cr
,
cs
=
[[
"
height
"
,
"
marginTop
"
,
"
marginBottom
"
,
"
paddingTop
"
,
"
paddingBottom
"
],[
"
width
"
,
"
marginLeft
"
,
"
marginRight
"
,
"
paddingLeft
"
,
"
paddingRight
"
],[
"
opacity
"
]],
ct
;
f
.
fn
.
extend
({
show
:
function
(
a
,
b
,
c
){
var
d
,
e
;
if
(
a
||
a
===
0
)
return
this
.
animate
(
cw
(
"
show
"
,
3
),
a
,
b
,
c
);
for
(
var
g
=
0
,
h
=
this
.
length
;
g
<
h
;
g
++
)
d
=
this
[
g
],
d
.
style
&&
(
e
=
d
.
style
.
display
,
!
f
.
_data
(
d
,
"
olddisplay
"
)
&&
e
===
"
none
"
&&
(
e
=
d
.
style
.
display
=
""
),
e
===
""
&&
f
.
css
(
d
,
"
display
"
)
===
"
none
"
&&
f
.
_data
(
d
,
"
olddisplay
"
,
cx
(
d
.
nodeName
)));
for
(
g
=
0
;
g
<
h
;
g
++
){
d
=
this
[
g
];
if
(
d
.
style
){
e
=
d
.
style
.
display
;
if
(
e
===
""
||
e
===
"
none
"
)
d
.
style
.
display
=
f
.
_data
(
d
,
"
olddisplay
"
)
||
""
}}
return
this
},
hide
:
function
(
a
,
b
,
c
){
if
(
a
||
a
===
0
)
return
this
.
animate
(
cw
(
"
hide
"
,
3
),
a
,
b
,
c
);
var
d
,
e
,
g
=
0
,
h
=
this
.
length
;
for
(;
g
<
h
;
g
++
)
d
=
this
[
g
],
d
.
style
&&
(
e
=
f
.
css
(
d
,
"
display
"
),
e
!==
"
none
"
&&!
f
.
_data
(
d
,
"
olddisplay
"
)
&&
f
.
_data
(
d
,
"
olddisplay
"
,
e
));
for
(
g
=
0
;
g
<
h
;
g
++
)
this
[
g
].
style
&&
(
this
[
g
].
style
.
display
=
"
none
"
);
return
this
},
_toggle
:
f
.
fn
.
toggle
,
toggle
:
function
(
a
,
b
,
c
){
var
d
=
typeof
a
==
"
boolean
"
;
f
.
isFunction
(
a
)
&&
f
.
isFunction
(
b
)?
this
.
_toggle
.
apply
(
this
,
arguments
):
a
==
null
||
d
?
this
.
each
(
function
(){
var
b
=
d
?
a
:
f
(
this
).
is
(
"
:hidden
"
);
f
(
this
)[
b
?
"
show
"
:
"
hide
"
]()}):
this
.
animate
(
cw
(
"
toggle
"
,
3
),
a
,
b
,
c
);
return
this
},
fadeTo
:
function
(
a
,
b
,
c
,
d
){
return
this
.
filter
(
"
:hidden
"
).
css
(
"
opacity
"
,
0
).
show
().
end
().
animate
({
opacity
:
b
},
a
,
c
,
d
)},
animate
:
function
(
a
,
b
,
c
,
d
){
function
g
(){
e
.
queue
===!
1
&&
f
.
_mark
(
this
);
var
b
=
f
.
extend
({},
e
),
c
=
this
.
nodeType
===
1
,
d
=
c
&&
f
(
this
).
is
(
"
:hidden
"
),
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
;
b
.
animatedProperties
=
{};
for
(
i
in
a
){
g
=
f
.
camelCase
(
i
),
i
!==
g
&&
(
a
[
g
]
=
a
[
i
],
delete
a
[
i
]),
h
=
a
[
g
],
f
.
isArray
(
h
)?(
b
.
animatedProperties
[
g
]
=
h
[
1
],
h
=
a
[
g
]
=
h
[
0
]):
b
.
animatedProperties
[
g
]
=
b
.
specialEasing
&&
b
.
specialEasing
[
g
]
||
b
.
easing
||
"
swing
"
;
if
(
h
===
"
hide
"
&&
d
||
h
===
"
show
"
&&!
d
)
return
b
.
complete
.
call
(
this
);
c
&&
(
g
===
"
height
"
||
g
===
"
width
"
)
&&
(
b
.
overflow
=
[
this
.
style
.
overflow
,
this
.
style
.
overflowX
,
this
.
style
.
overflowY
],
f
.
css
(
this
,
"
display
"
)
===
"
inline
"
&&
f
.
css
(
this
,
"
float
"
)
===
"
none
"
&&
(
!
f
.
support
.
inlineBlockNeedsLayout
||
cx
(
this
.
nodeName
)
===
"
inline
"
?
this
.
style
.
display
=
"
inline-block
"
:
this
.
style
.
zoom
=
1
))}
b
.
overflow
!=
null
&&
(
this
.
style
.
overflow
=
"
hidden
"
);
for
(
i
in
a
)
j
=
new
f
.
fx
(
this
,
b
,
i
),
h
=
a
[
i
],
cp
.
test
(
h
)?(
o
=
f
.
_data
(
this
,
"
toggle
"
+
i
)
||
(
h
===
"
toggle
"
?
d
?
"
show
"
:
"
hide
"
:
0
),
o
?(
f
.
_data
(
this
,
"
toggle
"
+
i
,
o
===
"
show
"
?
"
hide
"
:
"
show
"
),
j
[
o
]()):
j
[
h
]()):(
k
=
cq
.
exec
(
h
),
l
=
j
.
cur
(),
k
?(
m
=
parseFloat
(
k
[
2
]),
n
=
k
[
3
]
||
(
f
.
cssNumber
[
i
]?
""
:
"
px
"
),
n
!==
"
px
"
&&
(
f
.
style
(
this
,
i
,(
m
||
1
)
+
n
),
l
=
(
m
||
1
)
/
j
.
cur
()
*
l
,
f
.
style
(
this
,
i
,
l
+
n
)),
k
[
1
]
&&
(
m
=
(
k
[
1
]
===
"
-=
"
?
-
1
:
1
)
*
m
+
l
),
j
.
custom
(
l
,
m
,
n
)):
j
.
custom
(
l
,
h
,
""
));
return
!
0
}
var
e
=
f
.
speed
(
b
,
c
,
d
);
if
(
f
.
isEmptyObject
(
a
))
return
this
.
each
(
e
.
complete
,[
!
1
]);
a
=
f
.
extend
({},
a
);
return
e
.
queue
===!
1
?
this
.
each
(
g
):
this
.
queue
(
e
.
queue
,
g
)},
stop
:
function
(
a
,
c
,
d
){
typeof
a
!=
"
string
"
&&
(
d
=
c
,
c
=
a
,
a
=
b
),
c
&&
a
!==!
1
&&
this
.
queue
(
a
||
"
fx
"
,[]);
return
this
.
each
(
function
(){
function
h
(
a
,
b
,
c
){
var
e
=
b
[
c
];
f
.
removeData
(
a
,
c
,
!
0
),
e
.
stop
(
d
)}
var
b
,
c
=!
1
,
e
=
f
.
timers
,
g
=
f
.
_data
(
this
);
d
||
f
.
_unmark
(
!
0
,
this
);
if
(
a
==
null
)
for
(
b
in
g
)
g
[
b
].
stop
&&
b
.
indexOf
(
"
.run
"
)
===
b
.
length
-
4
&&
h
(
this
,
g
,
b
);
else
g
[
b
=
a
+
"
.run
"
]
&&
g
[
b
].
stop
&&
h
(
this
,
g
,
b
);
for
(
b
=
e
.
length
;
b
--
;)
e
[
b
].
elem
===
this
&&
(
a
==
null
||
e
[
b
].
queue
===
a
)
&&
(
d
?
e
[
b
](
!
0
):
e
[
b
].
saveState
(),
c
=!
0
,
e
.
splice
(
b
,
1
));(
!
d
||!
c
)
&&
f
.
dequeue
(
this
,
a
)})}}),
f
.
each
({
slideDown
:
cw
(
"
show
"
,
1
),
slideUp
:
cw
(
"
hide
"
,
1
),
slideToggle
:
cw
(
"
toggle
"
,
1
),
fadeIn
:{
opacity
:
"
show
"
},
fadeOut
:{
opacity
:
"
hide
"
},
fadeToggle
:{
opacity
:
"
toggle
"
}},
function
(
a
,
b
){
f
.
fn
[
a
]
=
function
(
a
,
c
,
d
){
return
this
.
animate
(
b
,
a
,
c
,
d
)}}),
f
.
extend
({
speed
:
function
(
a
,
b
,
c
){
var
d
=
a
&&
typeof
a
==
"
object
"
?
f
.
extend
({},
a
):{
complete
:
c
||!
c
&&
b
||
f
.
isFunction
(
a
)
&&
a
,
duration
:
a
,
easing
:
c
&&
b
||
b
&&!
f
.
isFunction
(
b
)
&&
b
};
d
.
duration
=
f
.
fx
.
off
?
0
:
typeof
d
.
duration
==
"
number
"
?
d
.
duration
:
d
.
duration
in
f
.
fx
.
speeds
?
f
.
fx
.
speeds
[
d
.
duration
]:
f
.
fx
.
speeds
.
_default
;
if
(
d
.
queue
==
null
||
d
.
queue
===!
0
)
d
.
queue
=
"
fx
"
;
d
.
old
=
d
.
complete
,
d
.
complete
=
function
(
a
){
f
.
isFunction
(
d
.
old
)
&&
d
.
old
.
call
(
this
),
d
.
queue
?
f
.
dequeue
(
this
,
d
.
queue
):
a
!==!
1
&&
f
.
_unmark
(
this
)};
return
d
},
easing
:{
linear
:
function
(
a
,
b
,
c
,
d
){
return
c
+
d
*
a
},
swing
:
function
(
a
,
b
,
c
,
d
){
return
(
-
Math
.
cos
(
a
*
Math
.
PI
)
/
2
+
.
5
)
*
d
+
c
}},
timers
:[],
fx
:
function
(
a
,
b
,
c
){
this
.
options
=
b
,
this
.
elem
=
a
,
this
.
prop
=
c
,
b
.
orig
=
b
.
orig
||
{}}}),
f
.
fx
.
prototype
=
{
update
:
function
(){
this
.
options
.
step
&&
this
.
options
.
step
.
call
(
this
.
elem
,
this
.
now
,
this
),(
f
.
fx
.
step
[
this
.
prop
]
||
f
.
fx
.
step
.
_default
)(
this
)},
cur
:
function
(){
if
(
this
.
elem
[
this
.
prop
]
!=
null
&&
(
!
this
.
elem
.
style
||
this
.
elem
.
style
[
this
.
prop
]
==
null
))
return
this
.
elem
[
this
.
prop
];
var
a
,
b
=
f
.
css
(
this
.
elem
,
this
.
prop
);
return
isNaN
(
a
=
parseFloat
(
b
))?
!
b
||
b
===
"
auto
"
?
0
:
b
:
a
},
custom
:
function
(
a
,
c
,
d
){
function
h
(
a
){
return
e
.
step
(
a
)}
var
e
=
this
,
g
=
f
.
fx
;
this
.
startTime
=
ct
||
cu
(),
this
.
end
=
c
,
this
.
now
=
this
.
start
=
a
,
this
.
pos
=
this
.
state
=
0
,
this
.
unit
=
d
||
this
.
unit
||
(
f
.
cssNumber
[
this
.
prop
]?
""
:
"
px
"
),
h
.
queue
=
this
.
options
.
queue
,
h
.
elem
=
this
.
elem
,
h
.
saveState
=
function
(){
e
.
options
.
hide
&&
f
.
_data
(
e
.
elem
,
"
fxshow
"
+
e
.
prop
)
===
b
&&
f
.
_data
(
e
.
elem
,
"
fxshow
"
+
e
.
prop
,
e
.
start
)},
h
()
&&
f
.
timers
.
push
(
h
)
&&!
cr
&&
(
cr
=
setInterval
(
g
.
tick
,
g
.
interval
))},
show
:
function
(){
var
a
=
f
.
_data
(
this
.
elem
,
"
fxshow
"
+
this
.
prop
);
this
.
options
.
orig
[
this
.
prop
]
=
a
||
f
.
style
(
this
.
elem
,
this
.
prop
),
this
.
options
.
show
=!
0
,
a
!==
b
?
this
.
custom
(
this
.
cur
(),
a
):
this
.
custom
(
this
.
prop
===
"
width
"
||
this
.
prop
===
"
height
"
?
1
:
0
,
this
.
cur
()),
f
(
this
.
elem
).
show
()},
hide
:
function
(){
this
.
options
.
orig
[
this
.
prop
]
=
f
.
_data
(
this
.
elem
,
"
fxshow
"
+
this
.
prop
)
||
f
.
style
(
this
.
elem
,
this
.
prop
),
this
.
options
.
hide
=!
0
,
this
.
custom
(
this
.
cur
(),
0
)},
step
:
function
(
a
){
var
b
,
c
,
d
,
e
=
ct
||
cu
(),
g
=!
0
,
h
=
this
.
elem
,
i
=
this
.
options
;
if
(
a
||
e
>=
i
.
duration
+
this
.
startTime
){
this
.
now
=
this
.
end
,
this
.
pos
=
this
.
state
=
1
,
this
.
update
(),
i
.
animatedProperties
[
this
.
prop
]
=!
0
;
for
(
b
in
i
.
animatedProperties
)
i
.
animatedProperties
[
b
]
!==!
0
&&
(
g
=!
1
);
if
(
g
){
i
.
overflow
!=
null
&&!
f
.
support
.
shrinkWrapBlocks
&&
f
.
each
([
""
,
"
X
"
,
"
Y
"
],
function
(
a
,
b
){
h
.
style
[
"
overflow
"
+
b
]
=
i
.
overflow
[
a
]}),
i
.
hide
&&
f
(
h
).
hide
();
if
(
i
.
hide
||
i
.
show
)
for
(
b
in
i
.
animatedProperties
)
f
.
style
(
h
,
b
,
i
.
orig
[
b
]),
f
.
removeData
(
h
,
"
fxshow
"
+
b
,
!
0
),
f
.
removeData
(
h
,
"
toggle
"
+
b
,
!
0
);
d
=
i
.
complete
,
d
&&
(
i
.
complete
=!
1
,
d
.
call
(
h
))}
return
!
1
}
i
.
duration
==
Infinity
?
this
.
now
=
e
:(
c
=
e
-
this
.
startTime
,
this
.
state
=
c
/
i
.
duration
,
this
.
pos
=
f
.
easing
[
i
.
animatedProperties
[
this
.
prop
]](
this
.
state
,
c
,
0
,
1
,
i
.
duration
),
this
.
now
=
this
.
start
+
(
this
.
end
-
this
.
start
)
*
this
.
pos
),
this
.
update
();
return
!
0
}},
f
.
extend
(
f
.
fx
,{
tick
:
function
(){
var
a
,
b
=
f
.
timers
,
c
=
0
;
for
(;
c
<
b
.
length
;
c
++
)
a
=
b
[
c
],
!
a
()
&&
b
[
c
]
===
a
&&
b
.
splice
(
c
--
,
1
);
b
.
length
||
f
.
fx
.
stop
()},
interval
:
13
,
stop
:
function
(){
clearInterval
(
cr
),
cr
=
null
},
speeds
:{
slow
:
600
,
fast
:
200
,
_default
:
400
},
step
:{
opacity
:
function
(
a
){
f
.
style
(
a
.
elem
,
"
opacity
"
,
a
.
now
)},
_default
:
function
(
a
){
a
.
elem
.
style
&&
a
.
elem
.
style
[
a
.
prop
]
!=
null
?
a
.
elem
.
style
[
a
.
prop
]
=
a
.
now
+
a
.
unit
:
a
.
elem
[
a
.
prop
]
=
a
.
now
}}}),
f
.
each
([
"
width
"
,
"
height
"
],
function
(
a
,
b
){
f
.
fx
.
step
[
b
]
=
function
(
a
){
f
.
style
(
a
.
elem
,
b
,
Math
.
max
(
0
,
a
.
now
))}}),
f
.
expr
&&
f
.
expr
.
filters
&&
(
f
.
expr
.
filters
.
animated
=
function
(
a
){
return
f
.
grep
(
f
.
timers
,
function
(
b
){
return
a
===
b
.
elem
}).
length
});
var
cy
=
/^t
(?:
able|d|h
)
$/i
,
cz
=
/^
(?:
body|html
)
$/i
;
"
getBoundingClientRect
"
in
c
.
documentElement
?
f
.
fn
.
offset
=
function
(
a
){
var
b
=
this
[
0
],
c
;
if
(
a
)
return
this
.
each
(
function
(
b
){
f
.
offset
.
setOffset
(
this
,
a
,
b
)});
if
(
!
b
||!
b
.
ownerDocument
)
return
null
;
if
(
b
===
b
.
ownerDocument
.
body
)
return
f
.
offset
.
bodyOffset
(
b
);
try
{
c
=
b
.
getBoundingClientRect
()}
catch
(
d
){}
var
e
=
b
.
ownerDocument
,
g
=
e
.
documentElement
;
if
(
!
c
||!
f
.
contains
(
g
,
b
))
return
c
?{
top
:
c
.
top
,
left
:
c
.
left
}:{
top
:
0
,
left
:
0
};
var
h
=
e
.
body
,
i
=
cA
(
e
),
j
=
g
.
clientTop
||
h
.
clientTop
||
0
,
k
=
g
.
clientLeft
||
h
.
clientLeft
||
0
,
l
=
i
.
pageYOffset
||
f
.
support
.
boxModel
&&
g
.
scrollTop
||
h
.
scrollTop
,
m
=
i
.
pageXOffset
||
f
.
support
.
boxModel
&&
g
.
scrollLeft
||
h
.
scrollLeft
,
n
=
c
.
top
+
l
-
j
,
o
=
c
.
left
+
m
-
k
;
return
{
top
:
n
,
left
:
o
}}:
f
.
fn
.
offset
=
function
(
a
){
var
b
=
this
[
0
];
if
(
a
)
return
this
.
each
(
function
(
b
){
f
.
offset
.
setOffset
(
this
,
a
,
b
)});
if
(
!
b
||!
b
.
ownerDocument
)
return
null
;
if
(
b
===
b
.
ownerDocument
.
body
)
return
f
.
offset
.
bodyOffset
(
b
);
var
c
,
d
=
b
.
offsetParent
,
e
=
b
,
g
=
b
.
ownerDocument
,
h
=
g
.
documentElement
,
i
=
g
.
body
,
j
=
g
.
defaultView
,
k
=
j
?
j
.
getComputedStyle
(
b
,
null
):
b
.
currentStyle
,
l
=
b
.
offsetTop
,
m
=
b
.
offsetLeft
;
while
((
b
=
b
.
parentNode
)
&&
b
!==
i
&&
b
!==
h
){
if
(
f
.
support
.
fixedPosition
&&
k
.
position
===
"
fixed
"
)
break
;
c
=
j
?
j
.
getComputedStyle
(
b
,
null
):
b
.
currentStyle
,
l
-=
b
.
scrollTop
,
m
-=
b
.
scrollLeft
,
b
===
d
&&
(
l
+=
b
.
offsetTop
,
m
+=
b
.
offsetLeft
,
f
.
support
.
doesNotAddBorder
&&
(
!
f
.
support
.
doesAddBorderForTableAndCells
||!
cy
.
test
(
b
.
nodeName
))
&&
(
l
+=
parseFloat
(
c
.
borderTopWidth
)
||
0
,
m
+=
parseFloat
(
c
.
borderLeftWidth
)
||
0
),
e
=
d
,
d
=
b
.
offsetParent
),
f
.
support
.
subtractsBorderForOverflowNotVisible
&&
c
.
overflow
!==
"
visible
"
&&
(
l
+=
parseFloat
(
c
.
borderTopWidth
)
||
0
,
m
+=
parseFloat
(
c
.
borderLeftWidth
)
||
0
),
k
=
c
}
if
(
k
.
position
===
"
relative
"
||
k
.
position
===
"
static
"
)
l
+=
i
.
offsetTop
,
m
+=
i
.
offsetLeft
;
f
.
support
.
fixedPosition
&&
k
.
position
===
"
fixed
"
&&
(
l
+=
Math
.
max
(
h
.
scrollTop
,
i
.
scrollTop
),
m
+=
Math
.
max
(
h
.
scrollLeft
,
i
.
scrollLeft
));
return
{
top
:
l
,
left
:
m
}},
f
.
offset
=
{
bodyOffset
:
function
(
a
){
var
b
=
a
.
offsetTop
,
c
=
a
.
offsetLeft
;
f
.
support
.
doesNotIncludeMarginInBodyOffset
&&
(
b
+=
parseFloat
(
f
.
css
(
a
,
"
marginTop
"
))
||
0
,
c
+=
parseFloat
(
f
.
css
(
a
,
"
marginLeft
"
))
||
0
);
return
{
top
:
b
,
left
:
c
}},
setOffset
:
function
(
a
,
b
,
c
){
var
d
=
f
.
css
(
a
,
"
position
"
);
d
===
"
static
"
&&
(
a
.
style
.
position
=
"
relative
"
);
var
e
=
f
(
a
),
g
=
e
.
offset
(),
h
=
f
.
css
(
a
,
"
top
"
),
i
=
f
.
css
(
a
,
"
left
"
),
j
=
(
d
===
"
absolute
"
||
d
===
"
fixed
"
)
&&
f
.
inArray
(
"
auto
"
,[
h
,
i
])
>-
1
,
k
=
{},
l
=
{},
m
,
n
;
j
?(
l
=
e
.
position
(),
m
=
l
.
top
,
n
=
l
.
left
):(
m
=
parseFloat
(
h
)
||
0
,
n
=
parseFloat
(
i
)
||
0
),
f
.
isFunction
(
b
)
&&
(
b
=
b
.
call
(
a
,
c
,
g
)),
b
.
top
!=
null
&&
(
k
.
top
=
b
.
top
-
g
.
top
+
m
),
b
.
left
!=
null
&&
(
k
.
left
=
b
.
left
-
g
.
left
+
n
),
"
using
"
in
b
?
b
.
using
.
call
(
a
,
k
):
e
.
css
(
k
)}},
f
.
fn
.
extend
({
position
:
function
(){
if
(
!
this
[
0
])
return
null
;
var
a
=
this
[
0
],
b
=
this
.
offsetParent
(),
c
=
this
.
offset
(),
d
=
cz
.
test
(
b
[
0
].
nodeName
)?{
top
:
0
,
left
:
0
}:
b
.
offset
();
c
.
top
-=
parseFloat
(
f
.
css
(
a
,
"
marginTop
"
))
||
0
,
c
.
left
-=
parseFloat
(
f
.
css
(
a
,
"
marginLeft
"
))
||
0
,
d
.
top
+=
parseFloat
(
f
.
css
(
b
[
0
],
"
borderTopWidth
"
))
||
0
,
d
.
left
+=
parseFloat
(
f
.
css
(
b
[
0
],
"
borderLeftWidth
"
))
||
0
;
return
{
top
:
c
.
top
-
d
.
top
,
left
:
c
.
left
-
d
.
left
}},
offsetParent
:
function
(){
return
this
.
map
(
function
(){
var
a
=
this
.
offsetParent
||
c
.
body
;
while
(
a
&&!
cz
.
test
(
a
.
nodeName
)
&&
f
.
css
(
a
,
"
position
"
)
===
"
static
"
)
a
=
a
.
offsetParent
;
return
a
})}}),
f
.
each
([
"
Left
"
,
"
Top
"
],
function
(
a
,
c
){
var
d
=
"
scroll
"
+
c
;
f
.
fn
[
d
]
=
function
(
c
){
var
e
,
g
;
if
(
c
===
b
){
e
=
this
[
0
];
if
(
!
e
)
return
null
;
g
=
cA
(
e
);
return
g
?
"
pageXOffset
"
in
g
?
g
[
a
?
"
pageYOffset
"
:
"
pageXOffset
"
]:
f
.
support
.
boxModel
&&
g
.
document
.
documentElement
[
d
]
||
g
.
document
.
body
[
d
]:
e
[
d
]}
return
this
.
each
(
function
(){
g
=
cA
(
this
),
g
?
g
.
scrollTo
(
a
?
f
(
g
).
scrollLeft
():
c
,
a
?
c
:
f
(
g
).
scrollTop
()):
this
[
d
]
=
c
})}}),
f
.
each
([
"
Height
"
,
"
Width
"
],
function
(
a
,
c
){
var
d
=
c
.
toLowerCase
();
f
.
fn
[
"
inner
"
+
c
]
=
function
(){
var
a
=
this
[
0
];
return
a
?
a
.
style
?
parseFloat
(
f
.
css
(
a
,
d
,
"
padding
"
)):
this
[
d
]():
null
},
f
.
fn
[
"
outer
"
+
c
]
=
function
(
a
){
var
b
=
this
[
0
];
return
b
?
b
.
style
?
parseFloat
(
f
.
css
(
b
,
d
,
a
?
"
margin
"
:
"
border
"
)):
this
[
d
]():
null
},
f
.
fn
[
d
]
=
function
(
a
){
var
e
=
this
[
0
];
if
(
!
e
)
return
a
==
null
?
null
:
this
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
var
c
=
f
(
this
);
c
[
d
](
a
.
call
(
this
,
b
,
c
[
d
]()))});
if
(
f
.
isWindow
(
e
)){
var
g
=
e
.
document
.
documentElement
[
"
client
"
+
c
],
h
=
e
.
document
.
body
;
return
e
.
document
.
compatMode
===
"
CSS1Compat
"
&&
g
||
h
&&
h
[
"
client
"
+
c
]
||
g
}
if
(
e
.
nodeType
===
9
)
return
Math
.
max
(
e
.
documentElement
[
"
client
"
+
c
],
e
.
body
[
"
scroll
"
+
c
],
e
.
documentElement
[
"
scroll
"
+
c
],
e
.
body
[
"
offset
"
+
c
],
e
.
documentElement
[
"
offset
"
+
c
]);
if
(
a
===
b
){
var
i
=
f
.
css
(
e
,
d
),
j
=
parseFloat
(
i
);
return
f
.
isNumeric
(
j
)?
j
:
i
}
return
this
.
css
(
d
,
typeof
a
==
"
string
"
?
a
:
a
+
"
px
"
)}}),
a
.
jQuery
=
a
.
$
=
f
})(
window
);
\ No newline at end of file
todo-example/jquery/js/jquery.tmpl.js
0 → 100755
View file @
67233f91
/*!
* jQuery Templates Plugin
* http://github.com/jquery/jquery-tmpl
*
* Copyright Software Freedom Conservancy, Inc.
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(
function
(
jQuery
,
undefined
){
var
oldManip
=
jQuery
.
fn
.
domManip
,
tmplItmAtt
=
"
_tmplitem
"
,
htmlExpr
=
/^
[^
<
]
*
(
<
[\w\W]
+>
)[^
>
]
*$|
\{\{\!
/
,
newTmplItems
=
{},
wrappedItems
=
{},
appendToTmplItems
,
topTmplItem
=
{
key
:
0
,
data
:
{}
},
itemKey
=
0
,
cloneIndex
=
0
,
stack
=
[];
function
newTmplItem
(
options
,
parentItem
,
fn
,
data
)
{
// Returns a template item data structure for a new rendered instance of a template (a 'template item').
// The content field is a hierarchical array of strings and nested items (to be
// removed and replaced by nodes field of dom elements, once inserted in DOM).
var
newItem
=
{
data
:
data
||
(
parentItem
?
parentItem
.
data
:
{}),
_wrap
:
parentItem
?
parentItem
.
_wrap
:
null
,
tmpl
:
null
,
parent
:
parentItem
||
null
,
nodes
:
[],
calls
:
tiCalls
,
nest
:
tiNest
,
wrap
:
tiWrap
,
html
:
tiHtml
,
update
:
tiUpdate
};
if
(
options
)
{
jQuery
.
extend
(
newItem
,
options
,
{
nodes
:
[],
parent
:
parentItem
}
);
}
if
(
fn
)
{
// Build the hierarchical content to be used during insertion into DOM
newItem
.
tmpl
=
fn
;
newItem
.
_ctnt
=
newItem
.
_ctnt
||
newItem
.
tmpl
(
jQuery
,
newItem
);
newItem
.
key
=
++
itemKey
;
// Keep track of new template item, until it is stored as jQuery Data on DOM element
(
stack
.
length
?
wrappedItems
:
newTmplItems
)[
itemKey
]
=
newItem
;
}
return
newItem
;
}
// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).
jQuery
.
each
({
appendTo
:
"
append
"
,
prependTo
:
"
prepend
"
,
insertBefore
:
"
before
"
,
insertAfter
:
"
after
"
,
replaceAll
:
"
replaceWith
"
},
function
(
name
,
original
)
{
jQuery
.
fn
[
name
]
=
function
(
selector
)
{
var
ret
=
[],
insert
=
jQuery
(
selector
),
elems
,
i
,
l
,
tmplItems
,
parent
=
this
.
length
===
1
&&
this
[
0
].
parentNode
;
appendToTmplItems
=
newTmplItems
||
{};
if
(
parent
&&
parent
.
nodeType
===
11
&&
parent
.
childNodes
.
length
===
1
&&
insert
.
length
===
1
)
{
insert
[
original
](
this
[
0
]
);
ret
=
this
;
}
else
{
for
(
i
=
0
,
l
=
insert
.
length
;
i
<
l
;
i
++
)
{
cloneIndex
=
i
;
elems
=
(
i
>
0
?
this
.
clone
(
true
)
:
this
).
get
();
jQuery
.
fn
[
original
].
apply
(
jQuery
(
insert
[
i
]),
elems
);
ret
=
ret
.
concat
(
elems
);
}
cloneIndex
=
0
;
ret
=
this
.
pushStack
(
ret
,
name
,
insert
.
selector
);
}
tmplItems
=
appendToTmplItems
;
appendToTmplItems
=
null
;
jQuery
.
tmpl
.
complete
(
tmplItems
);
return
ret
;
};
});
jQuery
.
fn
.
extend
({
// Use first wrapped element as template markup.
// Return wrapped set of template items, obtained by rendering template against data.
tmpl
:
function
(
data
,
options
,
parentItem
)
{
return
jQuery
.
tmpl
(
this
[
0
],
data
,
options
,
parentItem
);
},
// Find which rendered template item the first wrapped DOM element belongs to
tmplItem
:
function
()
{
return
jQuery
.
tmplItem
(
this
[
0
]
);
},
tmplElement
:
function
()
{
return
jQuery
.
tmplElement
(
this
[
0
]
);
},
// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.
template
:
function
(
name
)
{
return
jQuery
.
template
(
name
,
this
[
0
]
);
},
domManip
:
function
(
args
,
table
,
callback
,
options
)
{
// This appears to be a bug in the appendTo, etc. implementation
// it should be doing .call() instead of .apply(). See #6227
if
(
args
[
0
]
&&
args
[
0
].
nodeType
)
{
var
dmArgs
=
jQuery
.
makeArray
(
arguments
),
argsLength
=
args
.
length
,
i
=
0
,
tmplItem
;
while
(
i
<
argsLength
&&
!
(
tmplItem
=
jQuery
.
data
(
args
[
i
++
],
"
tmplItem
"
)))
{}
if
(
argsLength
>
1
)
{
dmArgs
[
0
]
=
[
jQuery
.
makeArray
(
args
)];
}
if
(
tmplItem
&&
cloneIndex
)
{
dmArgs
[
2
]
=
function
(
fragClone
)
{
// Handler called by oldManip when rendered template has been inserted into DOM.
jQuery
.
tmpl
.
afterManip
(
this
,
fragClone
,
callback
);
};
}
oldManip
.
apply
(
this
,
dmArgs
);
}
else
{
oldManip
.
apply
(
this
,
arguments
);
}
cloneIndex
=
0
;
if
(
!
appendToTmplItems
)
{
jQuery
.
tmpl
.
complete
(
newTmplItems
);
}
return
this
;
}
});
jQuery
.
extend
({
// Return wrapped set of template items, obtained by rendering template against data.
tmpl
:
function
(
tmpl
,
data
,
options
,
parentItem
)
{
var
ret
,
topLevel
=
!
parentItem
;
if
(
topLevel
)
{
// This is a top-level tmpl call (not from a nested template using {{tmpl}})
parentItem
=
topTmplItem
;
if
(
typeof
tmpl
!=
"
function
"
)
tmpl
=
jQuery
.
template
[
tmpl
]
||
jQuery
.
template
(
null
,
tmpl
);
wrappedItems
=
{};
// Any wrapped items will be rebuilt, since this is top level
}
else
if
(
!
tmpl
)
{
// The template item is already associated with DOM - this is a refresh.
// Re-evaluate rendered template for the parentItem
tmpl
=
parentItem
.
tmpl
;
newTmplItems
[
parentItem
.
key
]
=
parentItem
;
parentItem
.
nodes
=
[];
if
(
parentItem
.
wrapped
)
{
updateWrapped
(
parentItem
,
parentItem
.
wrapped
);
}
// Rebuild, without creating a new template item
return
jQuery
(
build
(
parentItem
,
null
,
parentItem
.
tmpl
(
jQuery
,
parentItem
)
));
}
if
(
!
tmpl
)
{
return
[];
// Could throw...
}
if
(
typeof
data
===
"
function
"
)
{
data
=
data
.
call
(
parentItem
||
{}
);
}
if
(
options
&&
options
.
wrapped
)
{
updateWrapped
(
options
,
options
.
wrapped
);
}
ret
=
jQuery
.
isArray
(
data
)
?
jQuery
.
map
(
data
,
function
(
dataItem
)
{
return
dataItem
?
newTmplItem
(
options
,
parentItem
,
tmpl
,
dataItem
)
:
null
;
})
:
[
newTmplItem
(
options
,
parentItem
,
tmpl
,
data
)
];
return
topLevel
?
jQuery
(
build
(
parentItem
,
null
,
ret
)
)
:
ret
;
},
// Return rendered template item for an element.
tmplItem
:
function
(
elem
)
{
var
tmplItem
;
if
(
elem
instanceof
jQuery
)
{
elem
=
elem
[
0
];
}
while
(
elem
&&
elem
.
nodeType
===
1
&&
!
(
tmplItem
=
jQuery
.
data
(
elem
,
"
tmplItem
"
))
&&
(
elem
=
elem
.
parentNode
)
)
{}
return
tmplItem
||
topTmplItem
;
},
tmplElement
:
function
(
elem
)
{
var
tmplItem
;
if
(
elem
instanceof
jQuery
)
{
elem
=
elem
[
0
];
}
while
(
elem
&&
elem
.
nodeType
===
1
&&
!
jQuery
.
data
(
elem
,
"
tmplItem
"
)
&&
(
elem
=
elem
.
parentNode
)
)
{}
return
elem
;
},
// Set:
// Use $.template( name, tmpl ) to cache a named template,
// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.
// Use $( "selector" ).template( name ) to provide access by name to a script block template declaration.
// Get:
// Use $.template( name ) to access a cached template.
// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )
// will return the compiled template, without adding a name reference.
// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent
// to $.template( null, templateString )
template
:
function
(
name
,
tmpl
)
{
if
(
tmpl
)
{
// Compile template and associate with name
if
(
typeof
tmpl
===
"
string
"
)
{
// This is an HTML string being passed directly in.
tmpl
=
buildTmplFn
(
tmpl
)
}
else
if
(
tmpl
instanceof
jQuery
)
{
tmpl
=
tmpl
[
0
]
||
{};
}
if
(
tmpl
.
nodeType
)
{
// If this is a template block, use cached copy, or generate tmpl function and cache.
tmpl
=
jQuery
.
data
(
tmpl
,
"
tmpl
"
)
||
jQuery
.
data
(
tmpl
,
"
tmpl
"
,
buildTmplFn
(
tmpl
.
innerHTML
));
}
return
typeof
name
===
"
string
"
?
(
jQuery
.
template
[
name
]
=
tmpl
)
:
tmpl
;
}
// Return named compiled template
return
name
?
(
typeof
name
!==
"
string
"
?
jQuery
.
template
(
null
,
name
):
(
jQuery
.
template
[
name
]
||
// If not in map, treat as a selector. (If integrated with core, use quickExpr.exec)
jQuery
.
template
(
null
,
htmlExpr
.
test
(
name
)
?
name
:
jQuery
(
name
))))
:
null
;
},
encode
:
function
(
text
)
{
// Do HTML encoding replacing < > & and ' and " by corresponding entities.
return
(
""
+
text
).
split
(
"
<
"
).
join
(
"
<
"
).
split
(
"
>
"
).
join
(
"
>
"
).
split
(
'
"
'
).
join
(
"
"
"
).
split
(
"
'
"
).
join
(
"
'
"
);
}
});
jQuery
.
extend
(
jQuery
.
tmpl
,
{
tag
:
{
"
tmpl
"
:
{
_default
:
{
$2
:
"
null
"
},
open
:
"
if($notnull_1){_=_.concat($item.nest($1,$2));}
"
// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)
// This means that {{tmpl foo}} treats foo as a template (which IS a function).
// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.
},
"
wrap
"
:
{
_default
:
{
$2
:
"
null
"
},
open
:
"
$item.calls(_,$1,$2);_=[];
"
,
close
:
"
call=$item.calls();_=call._.concat($item.wrap(call,_));
"
},
"
each
"
:
{
_default
:
{
$2
:
"
$index, $value
"
},
open
:
"
if($notnull_1){$.each($1a,function($2){with(this){
"
,
close
:
"
}});}
"
},
"
if
"
:
{
open
:
"
if(($notnull_1) && $1a){
"
,
close
:
"
}
"
},
"
else
"
:
{
_default
:
{
$1
:
"
true
"
},
open
:
"
}else if(($notnull_1) && $1a){
"
},
"
html
"
:
{
// Unecoded expression evaluation.
open
:
"
if($notnull_1){_.push($1a);}
"
},
"
=
"
:
{
// Encoded expression evaluation. Abbreviated form is ${}.
_default
:
{
$1
:
"
$data
"
},
open
:
"
if($notnull_1){_.push($.encode($1a));}
"
},
"
!
"
:
{
// Comment tag. Skipped by parser
open
:
""
}
},
// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events
complete
:
function
(
items
)
{
newTmplItems
=
{};
},
// Call this from code which overrides domManip, or equivalent
// Manage cloning/storing template items etc.
afterManip
:
function
afterManip
(
elem
,
fragClone
,
callback
)
{
// Provides cloned fragment ready for fixup prior to and after insertion into DOM
var
content
=
fragClone
.
nodeType
===
11
?
jQuery
.
makeArray
(
fragClone
.
childNodes
)
:
fragClone
.
nodeType
===
1
?
[
fragClone
]
:
[];
// Return fragment to original caller (e.g. append) for DOM insertion
callback
.
call
(
elem
,
fragClone
);
// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.
storeTmplItems
(
content
);
cloneIndex
++
;
}
});
//========================== Private helper functions, used by code above ==========================
function
build
(
tmplItem
,
nested
,
content
)
{
// Convert hierarchical content into flat string array
// and finally return array of fragments ready for DOM insertion
var
frag
,
ret
=
content
?
jQuery
.
map
(
content
,
function
(
item
)
{
return
(
typeof
item
===
"
string
"
)
?
// Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM.
(
tmplItem
.
key
?
item
.
replace
(
/
(
<
\w
+
)(?=[\s
>
])(?![^
>
]
*_tmplitem
)([^
>
]
*
)
/g
,
"
$1
"
+
tmplItmAtt
+
"
=
\"
"
+
tmplItem
.
key
+
"
\"
$2
"
)
:
item
)
:
// This is a child template item. Build nested template.
build
(
item
,
tmplItem
,
item
.
_ctnt
);
})
:
// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.
tmplItem
;
if
(
nested
)
{
return
ret
;
}
// top-level template
ret
=
ret
.
join
(
""
);
// Support templates which have initial or final text nodes, or consist only of text
// Also support HTML entities within the HTML markup.
ret
.
replace
(
/^
\s
*
([^
<
\s][^
<
]
*
)?(
<
[\w\W]
+>
)([^
>
]
*
[^
>
\s])?\s
*$/
,
function
(
all
,
before
,
middle
,
after
)
{
frag
=
jQuery
(
middle
).
get
();
storeTmplItems
(
frag
);
if
(
before
)
{
frag
=
unencode
(
before
).
concat
(
frag
);
}
if
(
after
)
{
frag
=
frag
.
concat
(
unencode
(
after
));
}
});
return
frag
?
frag
:
unencode
(
ret
);
}
function
unencode
(
text
)
{
// Use createElement, since createTextNode will not render HTML entities correctly
var
el
=
document
.
createElement
(
"
div
"
);
el
.
innerHTML
=
text
;
return
jQuery
.
makeArray
(
el
.
childNodes
);
}
// Generate a reusable function that will serve to render a template against data
function
buildTmplFn
(
markup
)
{
return
new
Function
(
"
jQuery
"
,
"
$item
"
,
"
var $=jQuery,call,_=[],$data=$item.data;
"
+
// Introduce the data as local variables using with(){}
"
with($data){_.push('
"
+
// Convert the template into pure JavaScript
jQuery
.
trim
(
markup
)
.
replace
(
/
([\\
'
])
/g
,
"
\\
$1
"
)
.
replace
(
/
[\r\t\n]
/g
,
"
"
)
.
replace
(
/
\$\{([^\}]
*
)\}
/g
,
"
{{= $1}}
"
)
.
replace
(
/
\{\{(\/?)(\w
+|.
)(?:\(((?:[^\}]
|
\}(?!\}))
*
?)?\))?(?:\s
+
(
.*
?)?)?(\(((?:[^\}]
|
\}(?!\}))
*
?)\))?\s
*
\}\}
/g
,
function
(
all
,
slash
,
type
,
fnargs
,
target
,
parens
,
args
)
{
var
tag
=
jQuery
.
tmpl
.
tag
[
type
],
def
,
expr
,
exprAutoFnDetect
;
if
(
!
tag
)
{
throw
"
Template command not found:
"
+
type
;
}
def
=
tag
.
_default
||
[];
if
(
parens
&&
!
/
\w
$/
.
test
(
target
))
{
target
+=
parens
;
parens
=
""
;
}
if
(
target
)
{
target
=
unescape
(
target
);
args
=
args
?
(
"
,
"
+
unescape
(
args
)
+
"
)
"
)
:
(
parens
?
"
)
"
:
""
);
// Support for target being things like a.toLowerCase();
// In that case don't call with template item as 'this' pointer. Just evaluate...
expr
=
parens
?
(
target
.
indexOf
(
"
.
"
)
>
-
1
?
target
+
parens
:
(
"
(
"
+
target
+
"
).call($data
"
+
args
))
:
target
;
exprAutoFnDetect
=
parens
?
expr
:
"
(typeof(
"
+
target
+
"
)==='function'?(
"
+
target
+
"
).call($item):(
"
+
target
+
"
))
"
;
}
else
{
exprAutoFnDetect
=
expr
=
def
.
$1
||
"
null
"
;
}
fnargs
=
unescape
(
fnargs
);
return
"
');
"
+
tag
[
slash
?
"
close
"
:
"
open
"
]
.
split
(
"
$notnull_1
"
).
join
(
target
?
"
typeof(
"
+
target
+
"
)!=='undefined' && (
"
+
target
+
"
)!=null
"
:
"
true
"
)
.
split
(
"
$1a
"
).
join
(
exprAutoFnDetect
)
.
split
(
"
$1
"
).
join
(
expr
)
.
split
(
"
$2
"
).
join
(
fnargs
?
fnargs
.
replace
(
/
\s
*
([^\(]
+
)\s
*
(\((
.*
?)\))?
/g
,
function
(
all
,
name
,
parens
,
params
)
{
params
=
params
?
(
"
,
"
+
params
+
"
)
"
)
:
(
parens
?
"
)
"
:
""
);
return
params
?
(
"
(
"
+
name
+
"
).call($item
"
+
params
)
:
all
;
})
:
(
def
.
$2
||
""
)
)
+
"
_.push('
"
;
})
+
"
');}return _;
"
);
}
function
updateWrapped
(
options
,
wrapped
)
{
// Build the wrapped content.
options
.
_wrap
=
build
(
options
,
true
,
// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.
jQuery
.
isArray
(
wrapped
)
?
wrapped
:
[
htmlExpr
.
test
(
wrapped
)
?
wrapped
:
jQuery
(
wrapped
).
html
()]
).
join
(
""
);
}
function
unescape
(
args
)
{
return
args
?
args
.
replace
(
/
\\
'/g
,
"
'
"
).
replace
(
/
\\\\
/g
,
"
\\
"
)
:
null
;
}
function
outerHtml
(
elem
)
{
var
div
=
document
.
createElement
(
"
div
"
);
div
.
appendChild
(
elem
.
cloneNode
(
true
)
);
return
div
.
innerHTML
;
}
// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.
function
storeTmplItems
(
content
)
{
var
keySuffix
=
"
_
"
+
cloneIndex
,
elem
,
elems
,
newClonedItems
=
{},
i
,
l
,
m
;
for
(
i
=
0
,
l
=
content
.
length
;
i
<
l
;
i
++
)
{
if
(
(
elem
=
content
[
i
]).
nodeType
!==
1
)
{
continue
;
}
elems
=
elem
.
getElementsByTagName
(
"
*
"
);
for
(
m
=
elems
.
length
-
1
;
m
>=
0
;
m
--
)
{
processItemKey
(
elems
[
m
]
);
}
processItemKey
(
elem
);
}
function
processItemKey
(
el
)
{
var
pntKey
,
pntNode
=
el
,
pntItem
,
tmplItem
,
key
;
// Ensure that each rendered template inserted into the DOM has its own template item,
if
(
(
key
=
el
.
getAttribute
(
tmplItmAtt
)))
{
while
(
pntNode
.
parentNode
&&
(
pntNode
=
pntNode
.
parentNode
).
nodeType
===
1
&&
!
(
pntKey
=
pntNode
.
getAttribute
(
tmplItmAtt
)))
{
}
if
(
pntKey
!==
key
)
{
// The next ancestor with a _tmplitem expando is on a different key than this one.
// So this is a top-level element within this template item
// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.
pntNode
=
pntNode
.
parentNode
?
(
pntNode
.
nodeType
===
11
?
0
:
(
pntNode
.
getAttribute
(
tmplItmAtt
)
||
0
))
:
0
;
if
(
!
(
tmplItem
=
newTmplItems
[
key
])
)
{
// The item is for wrapped content, and was copied from the temporary parent wrappedItem.
tmplItem
=
wrappedItems
[
key
];
tmplItem
=
newTmplItem
(
tmplItem
,
newTmplItems
[
pntNode
]
||
wrappedItems
[
pntNode
],
null
,
true
);
tmplItem
.
key
=
++
itemKey
;
newTmplItems
[
itemKey
]
=
tmplItem
;
}
if
(
cloneIndex
)
{
cloneTmplItem
(
key
);
}
}
el
.
removeAttribute
(
tmplItmAtt
);
}
else
if
(
cloneIndex
&&
(
tmplItem
=
jQuery
.
data
(
el
,
"
tmplItem
"
))
)
{
// This was a rendered element, cloned during append or appendTo etc.
// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.
cloneTmplItem
(
tmplItem
.
key
);
newTmplItems
[
tmplItem
.
key
]
=
tmplItem
;
pntNode
=
jQuery
.
data
(
el
.
parentNode
,
"
tmplItem
"
);
pntNode
=
pntNode
?
pntNode
.
key
:
0
;
}
if
(
tmplItem
)
{
pntItem
=
tmplItem
;
// Find the template item of the parent element.
// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)
while
(
pntItem
&&
pntItem
.
key
!=
pntNode
)
{
// Add this element as a top-level node for this rendered template item, as well as for any
// ancestor items between this item and the item of its parent element
pntItem
.
nodes
.
push
(
el
);
pntItem
=
pntItem
.
parent
;
}
// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...
delete
tmplItem
.
_ctnt
;
delete
tmplItem
.
_wrap
;
// Store template item as jQuery data on the element
jQuery
.
data
(
el
,
"
tmplItem
"
,
tmplItem
);
}
function
cloneTmplItem
(
key
)
{
key
=
key
+
keySuffix
;
tmplItem
=
newClonedItems
[
key
]
=
(
newClonedItems
[
key
]
||
newTmplItem
(
tmplItem
,
newTmplItems
[
tmplItem
.
parent
.
key
+
keySuffix
]
||
tmplItem
.
parent
,
null
,
true
));
}
}
}
//---- Helper functions for template item ----
function
tiCalls
(
content
,
tmpl
,
data
,
options
)
{
if
(
!
content
)
{
return
stack
.
pop
();
}
stack
.
push
({
_
:
content
,
tmpl
:
tmpl
,
item
:
this
,
data
:
data
,
options
:
options
});
}
function
tiNest
(
tmpl
,
data
,
options
)
{
// nested template, using {{tmpl}} tag
return
jQuery
.
tmpl
(
jQuery
.
template
(
tmpl
),
data
,
options
,
this
);
}
function
tiWrap
(
call
,
wrapped
)
{
// nested template, using {{wrap}} tag
var
options
=
call
.
options
||
{};
options
.
wrapped
=
wrapped
;
// Apply the template, which may incorporate wrapped content,
return
jQuery
.
tmpl
(
jQuery
.
template
(
call
.
tmpl
),
call
.
data
,
options
,
call
.
item
);
}
function
tiHtml
(
filter
,
textOnly
)
{
var
wrapped
=
this
.
_wrap
;
return
jQuery
.
map
(
jQuery
(
jQuery
.
isArray
(
wrapped
)
?
wrapped
.
join
(
""
)
:
wrapped
).
filter
(
filter
||
"
*
"
),
function
(
e
)
{
return
textOnly
?
e
.
innerText
||
e
.
textContent
:
e
.
outerHTML
||
outerHtml
(
e
);
});
}
function
tiUpdate
()
{
var
coll
=
this
.
nodes
;
jQuery
.
tmpl
(
null
,
null
,
null
,
this
).
insertBefore
(
coll
[
0
]
);
jQuery
(
coll
).
remove
();
}
})(
jQuery
);
\ No newline at end of file
todo-example/jquery/js/json2.js
0 → 100755
View file @
67233f91
/*
http://www.JSON.org/json2.js
2009-09-29
Public Domain.
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
See http://www.JSON.org/js.html
This code should be minified before deployment.
See http://javascript.crockford.com/jsmin.html
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
NOT CONTROL.
This file creates a global JSON object containing two methods: stringify
and parse.
JSON.stringify(value, replacer, space)
value any JavaScript value, usually an object or array.
replacer an optional parameter that determines how object
values are stringified for objects. It can be a
function or an array of strings.
space an optional parameter that specifies the indentation
of nested structures. If it is omitted, the text will
be packed without extra whitespace. If it is a number,
it will specify the number of spaces to indent at each
level. If it is a string (such as '\t' or ' '),
it contains the characters used to indent at each level.
This method produces a JSON text from a JavaScript value.
When an object value is found, if the object contains a toJSON
method, its toJSON method will be called and the result will be
stringified. A toJSON method does not serialize: it returns the
value represented by the name/value pair that should be serialized,
or undefined if nothing should be serialized. The toJSON method
will be passed the key associated with the value, and this will be
bound to the value
For example, this would serialize Dates as ISO strings.
Date.prototype.toJSON = function (key) {
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
return this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z';
};
You can provide an optional replacer method. It will be passed the
key and value of each member, with this bound to the containing
object. The value that is returned from your method will be
serialized. If your method returns undefined, then the member will
be excluded from the serialization.
If the replacer parameter is an array of strings, then it will be
used to select the members to be serialized. It filters the results
such that only members with keys listed in the replacer array are
stringified.
Values that do not have JSON representations, such as undefined or
functions, will not be serialized. Such values in objects will be
dropped; in arrays they will be replaced with null. You can use
a replacer function to replace those with JSON values.
JSON.stringify(undefined) returns undefined.
The optional space parameter produces a stringification of the
value that is filled with line breaks and indentation to make it
easier to read.
If the space parameter is a non-empty string, then that string will
be used for indentation. If the space parameter is a number, then
the indentation will be that many spaces.
Example:
text = JSON.stringify(['e', {pluribus: 'unum'}]);
// text is '["e",{"pluribus":"unum"}]'
text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
// text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
text = JSON.stringify([new Date()], function (key, value) {
return this[key] instanceof Date ?
'Date(' + this[key] + ')' : value;
});
// text is '["Date(---current time---)"]'
JSON.parse(text, reviver)
This method parses a JSON text to produce an object or array.
It can throw a SyntaxError exception.
The optional reviver parameter is a function that can filter and
transform the results. It receives each of the keys and values,
and its return value is used instead of the original value.
If it returns what it received, then the structure is not modified.
If it returns undefined then the member is deleted.
Example:
// Parse the text. Values that look like ISO date strings will
// be converted to Date objects.
myData = JSON.parse(text, function (key, value) {
var a;
if (typeof value === 'string') {
a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
});
myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
var d;
if (typeof value === 'string' &&
value.slice(0, 5) === 'Date(' &&
value.slice(-1) === ')') {
d = new Date(value.slice(5, -1));
if (d) {
return d;
}
}
return value;
});
This is a reference implementation. You are free to copy, modify, or
redistribute.
*/
/*jslint evil: true, strict: false */
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
lastIndex, length, parse, prototype, push, replace, slice, stringify,
test, toJSON, toString, valueOf
*/
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
if
(
!
this
.
JSON
)
{
this
.
JSON
=
{};
}
(
function
()
{
function
f
(
n
)
{
// Format integers to have at least two digits.
return
n
<
10
?
'
0
'
+
n
:
n
;
}
if
(
typeof
Date
.
prototype
.
toJSON
!==
'
function
'
)
{
Date
.
prototype
.
toJSON
=
function
(
key
)
{
return
isFinite
(
this
.
valueOf
())
?
this
.
getUTCFullYear
()
+
'
-
'
+
f
(
this
.
getUTCMonth
()
+
1
)
+
'
-
'
+
f
(
this
.
getUTCDate
())
+
'
T
'
+
f
(
this
.
getUTCHours
())
+
'
:
'
+
f
(
this
.
getUTCMinutes
())
+
'
:
'
+
f
(
this
.
getUTCSeconds
())
+
'
Z
'
:
null
;
};
String
.
prototype
.
toJSON
=
Number
.
prototype
.
toJSON
=
Boolean
.
prototype
.
toJSON
=
function
(
key
)
{
return
this
.
valueOf
();
};
}
var
cx
=
/
[\u
0000
\u
00ad
\u
0600-
\u
0604
\u
070f
\u
17b4
\u
17b5
\u
200c-
\u
200f
\u
2028-
\u
202f
\u
2060-
\u
206f
\u
feff
\u
fff0-
\u
ffff
]
/g
,
escapable
=
/
[\\\"\x
00-
\x
1f
\x
7f-
\x
9f
\u
00ad
\u
0600-
\u
0604
\u
070f
\u
17b4
\u
17b5
\u
200c-
\u
200f
\u
2028-
\u
202f
\u
2060-
\u
206f
\u
feff
\u
fff0-
\u
ffff
]
/g
,
gap
,
indent
,
meta
=
{
// table of character substitutions
'
\
b
'
:
'
\\
b
'
,
'
\t
'
:
'
\\
t
'
,
'
\n
'
:
'
\\
n
'
,
'
\
f
'
:
'
\\
f
'
,
'
\r
'
:
'
\\
r
'
,
'
"
'
:
'
\\
"
'
,
'
\\
'
:
'
\\\\
'
},
rep
;
function
quote
(
string
)
{
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
escapable
.
lastIndex
=
0
;
return
escapable
.
test
(
string
)
?
'
"
'
+
string
.
replace
(
escapable
,
function
(
a
)
{
var
c
=
meta
[
a
];
return
typeof
c
===
'
string
'
?
c
:
'
\\
u
'
+
(
'
0000
'
+
a
.
charCodeAt
(
0
).
toString
(
16
)).
slice
(
-
4
);
})
+
'
"
'
:
'
"
'
+
string
+
'
"
'
;
}
function
str
(
key
,
holder
)
{
// Produce a string from holder[key].
var
i
,
// The loop counter.
k
,
// The member key.
v
,
// The member value.
length
,
mind
=
gap
,
partial
,
value
=
holder
[
key
];
// If the value has a toJSON method, call it to obtain a replacement value.
if
(
value
&&
typeof
value
===
'
object
'
&&
typeof
value
.
toJSON
===
'
function
'
)
{
value
=
value
.
toJSON
(
key
);
}
// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.
if
(
typeof
rep
===
'
function
'
)
{
value
=
rep
.
call
(
holder
,
key
,
value
);
}
// What happens next depends on the value's type.
switch
(
typeof
value
)
{
case
'
string
'
:
return
quote
(
value
);
case
'
number
'
:
// JSON numbers must be finite. Encode non-finite numbers as null.
return
isFinite
(
value
)
?
String
(
value
)
:
'
null
'
;
case
'
boolean
'
:
case
'
null
'
:
// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.
return
String
(
value
);
// If the type is 'object', we might be dealing with an object or an array or
// null.
case
'
object
'
:
// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.
if
(
!
value
)
{
return
'
null
'
;
}
// Make an array to hold the partial results of stringifying this object value.
gap
+=
indent
;
partial
=
[];
// Is the value an array?
if
(
Object
.
prototype
.
toString
.
apply
(
value
)
===
'
[object Array]
'
)
{
// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.
length
=
value
.
length
;
for
(
i
=
0
;
i
<
length
;
i
+=
1
)
{
partial
[
i
]
=
str
(
i
,
value
)
||
'
null
'
;
}
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
v
=
partial
.
length
===
0
?
'
[]
'
:
gap
?
'
[
\n
'
+
gap
+
partial
.
join
(
'
,
\n
'
+
gap
)
+
'
\n
'
+
mind
+
'
]
'
:
'
[
'
+
partial
.
join
(
'
,
'
)
+
'
]
'
;
gap
=
mind
;
return
v
;
}
// If the replacer is an array, use it to select the members to be stringified.
if
(
rep
&&
typeof
rep
===
'
object
'
)
{
length
=
rep
.
length
;
for
(
i
=
0
;
i
<
length
;
i
+=
1
)
{
k
=
rep
[
i
];
if
(
typeof
k
===
'
string
'
)
{
v
=
str
(
k
,
value
);
if
(
v
)
{
partial
.
push
(
quote
(
k
)
+
(
gap
?
'
:
'
:
'
:
'
)
+
v
);
}
}
}
}
else
{
// Otherwise, iterate through all of the keys in the object.
for
(
k
in
value
)
{
if
(
Object
.
hasOwnProperty
.
call
(
value
,
k
))
{
v
=
str
(
k
,
value
);
if
(
v
)
{
partial
.
push
(
quote
(
k
)
+
(
gap
?
'
:
'
:
'
:
'
)
+
v
);
}
}
}
}
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
v
=
partial
.
length
===
0
?
'
{}
'
:
gap
?
'
{
\n
'
+
gap
+
partial
.
join
(
'
,
\n
'
+
gap
)
+
'
\n
'
+
mind
+
'
}
'
:
'
{
'
+
partial
.
join
(
'
,
'
)
+
'
}
'
;
gap
=
mind
;
return
v
;
}
}
// If the JSON object does not yet have a stringify method, give it one.
if
(
typeof
JSON
.
stringify
!==
'
function
'
)
{
JSON
.
stringify
=
function
(
value
,
replacer
,
space
)
{
// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.
var
i
;
gap
=
''
;
indent
=
''
;
// If the space parameter is a number, make an indent string containing that
// many spaces.
if
(
typeof
space
===
'
number
'
)
{
for
(
i
=
0
;
i
<
space
;
i
+=
1
)
{
indent
+=
'
'
;
}
// If the space parameter is a string, it will be used as the indent string.
}
else
if
(
typeof
space
===
'
string
'
)
{
indent
=
space
;
}
// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.
rep
=
replacer
;
if
(
replacer
&&
typeof
replacer
!==
'
function
'
&&
(
typeof
replacer
!==
'
object
'
||
typeof
replacer
.
length
!==
'
number
'
))
{
throw
new
Error
(
'
JSON.stringify
'
);
}
// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.
return
str
(
''
,
{
''
:
value
});
};
}
// If the JSON object does not yet have a parse method, give it one.
if
(
typeof
JSON
.
parse
!==
'
function
'
)
{
JSON
.
parse
=
function
(
text
,
reviver
)
{
// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.
var
j
;
function
walk
(
holder
,
key
)
{
// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.
var
k
,
v
,
value
=
holder
[
key
];
if
(
value
&&
typeof
value
===
'
object
'
)
{
for
(
k
in
value
)
{
if
(
Object
.
hasOwnProperty
.
call
(
value
,
k
))
{
v
=
walk
(
value
,
k
);
if
(
v
!==
undefined
)
{
value
[
k
]
=
v
;
}
else
{
delete
value
[
k
];
}
}
}
}
return
reviver
.
call
(
holder
,
key
,
value
);
}
// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.
cx
.
lastIndex
=
0
;
if
(
cx
.
test
(
text
))
{
text
=
text
.
replace
(
cx
,
function
(
a
)
{
return
'
\\
u
'
+
(
'
0000
'
+
a
.
charCodeAt
(
0
).
toString
(
16
)).
slice
(
-
4
);
});
}
// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.
// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
if
(
/^
[\]
,:{}
\s]
*$/
.
test
(
text
.
replace
(
/
\\(?:[
"
\\\/
bfnrt
]
|u
[
0-9a-fA-F
]{4})
/g
,
'
@
'
).
replace
(
/"
[^
"
\\\n\r]
*"|true|false|null|-
?\d
+
(?:\.\d
*
)?(?:[
eE
][
+
\-]?\d
+
)?
/g
,
'
]
'
).
replace
(
/
(?:
^|:|,
)(?:\s
*
\[)
+/g
,
''
)))
{
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j
=
eval
(
'
(
'
+
text
+
'
)
'
);
// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.
return
typeof
reviver
===
'
function
'
?
walk
({
''
:
j
},
''
)
:
j
;
}
// If the text is not JSON parseable, then a SyntaxError is thrown.
throw
new
SyntaxError
(
'
JSON.parse
'
);
};
}
}());
\ No newline at end of file
todo-example/jquery/js/store.js
0 → 100755
View file @
67233f91
//
// Copyright (c) 2011 Frank Kohlhepp
// https://github.com/frankkohlhepp/store-js
// License: MIT-license
//
(
function
()
{
var
Store
=
this
.
Store
=
function
(
name
,
defaults
,
watcherSpeed
)
{
var
that
=
this
;
this
.
name
=
name
;
this
.
listeners
=
{};
// Set defaults
if
(
defaults
)
{
for
(
var
key
in
defaults
)
{
if
(
defaults
.
hasOwnProperty
(
key
)
&&
this
.
get
(
key
)
===
undefined
)
{
this
.
set
(
key
,
defaults
[
key
]);
}
}
}
// Fake events
var
fireEvent
=
function
(
name
,
value
)
{
([
name
,
"
*
"
]).
each
(
function
(
selector
)
{
if
(
that
.
listeners
[
selector
])
{
that
.
listeners
[
selector
].
each
(
function
(
callback
)
{
callback
(
value
,
name
,
that
.
name
);
});
}
});
};
var
oldObj
=
this
.
toObject
();
var
standby
=
function
()
{
watcher
(
true
);
};
var
watcher
=
function
(
skipCheck
)
{
if
(
Object
.
keys
(
that
.
listeners
).
length
!==
0
)
{
var
newObj
=
that
.
toObject
();
if
(
!
skipCheck
)
{
for
(
var
key
in
newObj
)
{
if
(
newObj
.
hasOwnProperty
(
key
)
&&
newObj
[
key
]
!==
oldObj
[
key
])
{
fireEvent
(
key
,
newObj
[
key
]);
}
}
for
(
var
key
in
oldObj
)
{
if
(
oldObj
.
hasOwnProperty
(
key
)
&&
!
newObj
.
hasOwnProperty
(
key
))
{
fireEvent
(
key
,
newObj
[
key
]);
}
}
}
oldObj
=
newObj
;
setTimeout
(
watcher
,
(
watcherSpeed
||
300
));
}
else
{
setTimeout
(
standby
,
1000
);
}
};
standby
();
};
Store
.
__proto__
=
function
Empty
()
{};
Store
.
__proto__
.
clear
=
function
()
{
localStorage
.
clear
();
};
Store
.
prototype
.
get
=
function
(
name
)
{
var
value
=
localStorage
.
getItem
(
"
store.
"
+
this
.
name
+
"
.
"
+
name
);
if
(
value
===
null
)
{
return
;
}
try
{
return
JSON
.
parse
(
value
);
}
catch
(
e
)
{
return
null
;
}
};
Store
.
prototype
.
set
=
function
(
name
,
value
)
{
if
(
value
===
undefined
)
{
this
.
remove
(
name
);
}
else
{
if
(
typeof
value
===
"
function
"
)
{
value
=
null
;
}
else
{
try
{
value
=
JSON
.
stringify
(
value
);
}
catch
(
e
)
{
value
=
null
;
}
}
localStorage
.
setItem
(
"
store.
"
+
this
.
name
+
"
.
"
+
name
,
value
);
}
return
this
;
};
Store
.
prototype
.
remove
=
function
(
name
)
{
localStorage
.
removeItem
(
"
store.
"
+
this
.
name
+
"
.
"
+
name
);
return
this
;
};
Store
.
prototype
.
removeAll
=
function
()
{
var
name
=
"
store.
"
+
this
.
name
+
"
.
"
;
for
(
var
i
=
(
localStorage
.
length
-
1
);
i
>=
0
;
i
--
)
{
if
(
localStorage
.
key
(
i
).
substring
(
0
,
name
.
length
)
===
name
)
{
localStorage
.
removeItem
(
localStorage
.
key
(
i
));
}
}
return
this
;
};
Store
.
prototype
.
toObject
=
function
()
{
var
values
=
{};
var
name
=
"
store.
"
+
this
.
name
+
"
.
"
;
for
(
var
i
=
(
localStorage
.
length
-
1
);
i
>=
0
;
i
--
)
{
if
(
localStorage
.
key
(
i
).
substring
(
0
,
name
.
length
)
===
name
)
{
var
key
=
localStorage
.
key
(
i
).
substring
(
name
.
length
);
var
value
=
this
.
get
(
key
);
if
(
value
!==
undefined
)
{
values
[
key
]
=
value
;
}
}
}
return
values
;
};
Store
.
prototype
.
fromObject
=
function
(
values
,
merge
)
{
if
(
!
merge
)
{
this
.
removeAll
();
}
for
(
var
key
in
values
)
{
if
(
values
.
hasOwnProperty
(
key
))
{
this
.
set
(
key
,
values
[
key
]);
}
}
return
this
;
};
Store
.
prototype
.
addEvent
=
function
(
selector
,
callback
)
{
if
(
!
this
.
listeners
[
selector
])
{
this
.
listeners
[
selector
]
=
[];
}
this
.
listeners
[
selector
].
push
(
callback
);
return
this
;
};
Store
.
prototype
.
removeEvent
=
function
(
selector
,
callback
)
{
for
(
var
i
=
(
this
.
listeners
[
selector
].
length
-
1
);
i
>=
0
;
i
--
)
{
if
(
this
.
listeners
[
selector
][
i
]
===
callback
)
{
this
.
listeners
[
selector
].
splice
(
i
,
1
);
}
}
if
(
this
.
listeners
[
selector
].
length
===
0
)
{
delete
this
.
listeners
[
selector
];
}
return
this
;
};
}());
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment