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
0b69fdca
Commit
0b69fdca
authored
Oct 20, 2011
by
addyosmani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
merging fidel todo app
parent
7d8888e7
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1995 additions
and
0 deletions
+1995
-0
todo-example/fidel/app.js
todo-example/fidel/app.js
+132
-0
todo-example/fidel/images/destroy.png
todo-example/fidel/images/destroy.png
+0
-0
todo-example/fidel/index.html
todo-example/fidel/index.html
+86
-0
todo-example/fidel/stylesheets/todos.css
todo-example/fidel/stylesheets/todos.css
+532
-0
todo-example/fidel/vendor/fidel.js
todo-example/fidel/vendor/fidel.js
+268
-0
todo-example/fidel/vendor/jquery-1.6.4.min.js
todo-example/fidel/vendor/jquery-1.6.4.min.js
+4
-0
todo-example/fidel/vendor/json2.js
todo-example/fidel/vendor/json2.js
+481
-0
todo-example/fidel/vendor/live.js
todo-example/fidel/vendor/live.js
+233
-0
todo-example/fidel/vendor/todos.js
todo-example/fidel/vendor/todos.js
+259
-0
No files found.
todo-example/fidel/app.js
0 → 100644
View file @
0b69fdca
var
todoStore
=
(
function
()
{
return
{
get
:
function
()
{
var
d
=
localStorage
.
getItem
(
'
fidel.todos
'
);
var
todos
=
{};
if
(
d
)
{
d
=
JSON
.
parse
(
d
);
for
(
var
key
in
d
)
{
todos
[
key
]
=
new
Todo
(
d
[
key
]);
}
}
return
todos
;
},
save
:
function
(
todos
)
{
localStorage
.
setItem
(
'
fidel.todos
'
,
JSON
.
stringify
(
todos
));
}
};
})();
var
Todo
=
Fidel
.
Class
.
extend
({
defaults
:
{
name
:
"
empty todo...
"
,
done
:
false
,
order
:
0
},
init
:
function
()
{
},
toggleDone
:
function
()
{
this
.
done
=
!
this
.
done
;
}
});
var
TodoView
=
Fidel
.
ViewController
.
extend
({
templates
:
{
item
:
"
#item-template
"
,
stats
:
'
#stats-template
'
},
events
:
{
'
keypress input[type="text"]
'
:
'
addOnEnter
'
,
'
click .check
'
:
'
complete
'
},
init
:
function
()
{
this
.
todos
=
todoStore
.
get
();
this
.
renderAll
();
},
addOnEnter
:
function
(
e
)
{
if
(
e
.
keyCode
==
13
)
this
.
add
();
},
add
:
function
()
{
var
name
=
this
.
input
.
val
();
this
.
input
.
val
(
''
);
var
todo
=
new
Todo
({
name
:
name
,
order
:
this
.
taskCount
});
this
.
taskCount
++
;
this
.
todos
[
todo
.
guid
]
=
todo
;
this
.
save
();
var
tmp
=
this
.
template
(
this
.
templates
.
item
,
{
todo
:
todo
});
this
.
todosContainer
.
prepend
(
tmp
);
this
.
renderStats
();
},
save
:
function
()
{
todoStore
.
save
(
this
.
todos
);
},
sortTasks
:
function
()
{
var
sorted
=
[];
for
(
var
key
in
this
.
todos
)
{
sorted
.
push
(
this
.
todos
[
key
]);
}
sorted
.
sort
(
function
(
a
,
b
)
{
return
(
b
.
order
-
a
.
order
);
});
return
sorted
;
},
renderAll
:
function
()
{
var
html
=
[];
var
todos
=
this
.
sortTasks
();
this
.
taskCount
=
todos
.
length
;
for
(
var
i
=
0
,
c
=
todos
.
length
;
i
<
c
;
i
++
)
{
var
todo
=
todos
[
i
];
var
tmp
=
this
.
template
(
this
.
templates
.
item
,
{
todo
:
todo
});
html
.
push
(
tmp
);
}
this
.
todosContainer
.
html
(
html
.
join
(
''
));
this
.
renderStats
();
},
renderStats
:
function
()
{
var
todos
=
this
.
sortTasks
();
var
data
=
{
total
:
todos
.
length
,
remaining
:
0
,
done
:
0
};
for
(
var
i
=
0
,
c
=
todos
.
length
;
i
<
c
;
i
++
)
{
var
todo
=
todos
[
i
];
if
(
todo
.
done
)
data
.
done
++
;
else
data
.
remaining
++
;
}
this
.
render
(
'
stats
'
,
data
,
this
.
statsContainer
);
},
complete
:
function
(
e
)
{
var
complete
=
(
e
.
target
.
value
==
"
on
"
);
var
el
=
$
(
e
.
target
);
el
.
parents
(
'
li
'
).
toggleClass
(
'
done
'
);
var
todoId
=
el
.
parents
(
'
li
'
).
attr
(
'
data-todoid
'
);
this
.
todos
[
todoId
].
toggleDone
();
this
.
save
();
this
.
renderStats
();
},
clearCompleted
:
function
()
{
var
completedTodos
=
this
.
find
(
'
input:checked
'
);
for
(
var
i
=
0
,
c
=
completedTodos
.
length
;
i
<
c
;
i
++
)
{
var
item
=
completedTodos
[
i
];
this
.
destroyTodo
(
$
(
item
));
}
},
destroyTodo
:
function
(
el
)
{
var
parent
=
el
.
parents
(
'
li
'
);
var
guid
=
parent
.
attr
(
'
data-todoid
'
);
delete
this
.
todos
[
guid
];
parent
.
remove
();
this
.
save
();
this
.
renderStats
();
}
});
//app
var
todos
=
new
TodoView
({
el
:
$
(
"
#todoapp
"
)
});
todo-example/fidel/images/destroy.png
0 → 100644
View file @
0b69fdca
555 Bytes
todo-example/fidel/index.html
0 → 100644
View file @
0b69fdca
<!DOCTYPE html>
<html>
<head>
<title>
Fidel
</title>
<link
href=
"stylesheets/todos.css"
media=
"all"
rel=
"stylesheet"
type=
"text/css"
/>
<!--<script src="vendor/live.js"></script>-->
</head>
<body>
<!-- Todo App Interface -->
<div
id=
"todoapp"
>
<div
class=
"title"
>
<h1>
Todos
</h1>
</div>
<div
class=
"content"
>
<div
id=
"create-todo"
>
<input
data-element=
"input"
placeholder=
"What needs to be done?"
type=
"text"
/>
<span
class=
"ui-tooltip-top"
style=
"display:none;"
>
Press Enter to save this task
</span>
</div>
<div
id=
"todos"
>
<ul
id=
"todo-list"
data-element=
"todosContainer"
></ul>
</div>
<div
id=
"todo-stats"
data-element=
"statsContainer"
></div>
</div>
</div>
<div
id=
"credits"
>
Created by
<br
/>
<a
href=
"http://jga.me/"
>
Greg Allen
</a>
(
<a
href=
"http://twitter.com/jgaui"
>
jgaui
</a>
).
</div>
<!-- Templates -->
<script
type=
"text/template"
id=
"item-template"
>
<
li
class
=
"
todo {!= todo.done ? 'done' : '' !}
"
data
-
todoid
=
"
{!= todo.guid !}
"
>
<
div
class
=
"
display
"
>
<
input
class
=
"
check
"
type
=
"
checkbox
"
{
!=
todo
.
done
?
'
checked="checked"
'
:
''
!
}
/
>
<
div
class
=
"
todo-content
"
>
{
!=
todo
.
name
!
}
<
/div
>
<
span
data
-
action
=
"
destroyTodo
"
class
=
"
todo-destroy
"
><
/span
>
<
/div
>
<
div
class
=
"
edit
"
>
<
input
class
=
"
todo-input
"
type
=
"
text
"
value
=
""
/>
<
/div
>
<
/li
>
</script>
<script
type=
"text/template"
id=
"stats-template"
>
{
!
if
(
total
)
{
!
}
<
span
class
=
"
todo-count
"
>
<
span
class
=
"
number
"
>
{
!=
remaining
!
}
<
/span
>
<
span
class
=
"
word
"
>
{
!=
remaining
==
1
?
'
item
'
:
'
items
'
!
}
<
/span> left
.
<
/span
>
{
!
}
!
}
{
!
if
(
done
)
{
!
}
<
span
class
=
"
todo-clear
"
>
<
a
data
-
action
=
"
clearCompleted
"
>
Clear
<
span
class
=
"
number-done
"
>
{
!=
done
!
}
<
/span
>
completed
<
span
class
=
"
word-done
"
>
{
!=
done
==
1
?
'
item
'
:
'
items
'
!
}
<
/span
>
<
/a
>
<
/span
>
{
!
}
!
}
</script>
<script
src=
"vendor/json2.js"
></script>
<script
src=
"vendor/jquery-1.6.4.min.js"
></script>
<script
src=
"vendor/fidel.js"
></script>
<!--<script src="../../lib/core.js"></script>-->
<!--<script src="../../lib/class.js"></script>-->
<!--<script src="../../lib/events.js"></script>-->
<!--<script src="../../lib/controller.js"></script>-->
<script
src=
"app.js"
></script>
</body>
</html>
todo-example/fidel/stylesheets/todos.css
0 → 100644
View file @
0b69fdca
html
,
body
,
div
,
span
,
applet
,
object
,
iframe
,
h1
,
h2
,
h3
,
h4
,
h5
,
h6
,
p
,
blockquote
,
pre
,
a
,
abbr
,
acronym
,
address
,
big
,
cite
,
code
,
del
,
dfn
,
em
,
font
,
img
,
ins
,
kbd
,
q
,
s
,
samp
,
small
,
strike
,
strong
,
sub
,
sup
,
tt
,
var
,
dl
,
dt
,
dd
,
ol
,
ul
,
li
,
fieldset
,
form
,
label
,
legend
,
table
,
caption
,
tbody
,
tfoot
,
thead
,
tr
,
th
,
td
{
margin
:
0
;
padding
:
0
;
border
:
0
;
outline
:
0
;
font-weight
:
inherit
;
font-style
:
inherit
;
font-size
:
100%
;
font-family
:
inherit
;
vertical-align
:
baseline
;
}
body
{
line-height
:
1
;
color
:
black
;
background
:
white
;
}
ol
,
ul
{
list-style
:
none
;
}
a
img
{
border
:
none
;
}
html
{
background
:
#eeeeee
;
}
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
;
background
:
white
;
padding
:
20px
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
5px
6px
0
;
}
#todoapp
h1
{
font-size
:
36px
;
font-weight
:
bold
;
text-align
:
center
;
padding
:
20px
0
30px
0
;
line-height
:
1
;
}
#create-todo
{
position
:
relative
;
}
#create-todo
input
{
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
;
}
#create-todo
span
{
position
:
absolute
;
z-index
:
999
;
width
:
170px
;
left
:
50%
;
margin-left
:
-85px
;
}
#todo-list
{
margin-top
:
10px
;
}
#todo-list
li
{
padding
:
12px
20px
11px
0
;
position
:
relative
;
font-size
:
24px
;
line-height
:
1.1em
;
border-bottom
:
1px
solid
#cccccc
;
}
#todo-list
li
:after
{
content
:
"\0020"
;
display
:
block
;
height
:
0
;
clear
:
both
;
overflow
:
hidden
;
visibility
:
hidden
;
}
#todo-list
li
.editing
{
padding
:
0
;
border-bottom
:
0
;
}
#todo-list
.editing
.display
,
#todo-list
.edit
{
display
:
none
;
}
#todo-list
.editing
.edit
{
display
:
block
;
}
#todo-list
.editing
input
{
width
:
444px
;
font-size
:
24px
;
font-family
:
inherit
;
margin
:
0
;
line-height
:
1.6em
;
border
:
0
;
outline
:
none
;
padding
:
10px
7px
0px
27px
;
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
;
}
#todo-list
.check
{
position
:
relative
;
top
:
9px
;
margin
:
0
10px
0
7px
;
float
:
left
;
}
#todo-list
.done
.todo-content
{
text-decoration
:
line-through
;
color
:
#777777
;
}
#todo-list
.todo-destroy
{
position
:
absolute
;
right
:
5px
;
top
:
14px
;
display
:
none
;
cursor
:
pointer
;
width
:
20px
;
height
:
20px
;
background
:
url(../images/destroy.png)
no-repeat
0
0
;
}
#todo-list
li
:hover
.todo-destroy
{
display
:
block
;
}
#todo-list
.todo-destroy
:hover
{
background-position
:
0
-20px
;
}
#todo-stats
{
*
zoom
:
1
;
margin-top
:
10px
;
color
:
#777777
;
}
#todo-stats
:after
{
content
:
"\0020"
;
display
:
block
;
height
:
0
;
clear
:
both
;
overflow
:
hidden
;
visibility
:
hidden
;
}
#todo-stats
.todo-count
{
float
:
left
;
}
#todo-stats
.todo-count
.number
{
font-weight
:
bold
;
color
:
#333333
;
}
#todo-stats
.todo-clear
{
float
:
right
;
}
#todo-stats
.todo-clear
a
{
color
:
#777777
;
font-size
:
12px
;
}
#todo-stats
.todo-clear
a
:visited
{
color
:
#777777
;
}
#todo-stats
.todo-clear
a
:hover
{
color
:
#336699
;
}
#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
;
}
/*
* François 'cahnory' Germain
*/
.ui-tooltip
,
.ui-tooltip-top
,
.ui-tooltip-right
,
.ui-tooltip-bottom
,
.ui-tooltip-left
{
color
:
#ffffff
;
cursor
:
normal
;
display
:
-moz-inline-stack
;
display
:
inline-block
;
font-size
:
12px
;
font-family
:
arial
;
padding
:
.5em
1em
;
position
:
relative
;
text-align
:
center
;
text-shadow
:
0
-1px
1px
#111111
;
-webkit-border-top-left-radius
:
4px
;
-webkit-border-top-right-radius
:
4px
;
-webkit-border-bottom-right-radius
:
4px
;
-webkit-border-bottom-left-radius
:
4px
;
-khtml-border-top-left-radius
:
4px
;
-khtml-border-top-right-radius
:
4px
;
-khtml-border-bottom-right-radius
:
4px
;
-khtml-border-bottom-left-radius
:
4px
;
-moz-border-radius-topleft
:
4px
;
-moz-border-radius-topright
:
4px
;
-moz-border-radius-bottomright
:
4px
;
-moz-border-radius-bottomleft
:
4px
;
border-top-left-radius
:
4px
;
border-top-right-radius
:
4px
;
border-bottom-right-radius
:
4px
;
border-bottom-left-radius
:
4px
;
-o-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
-moz-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
-khtml-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
-webkit-box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
box-shadow
:
0
1px
2px
#000000
,
inset
0
0
0
1px
#222222
,
inset
0
2px
#666666
,
inset
0
-2px
2px
#444444
;
background-color
:
#3b3b3b
;
background-image
:
-moz-linear-gradient
(
top
,
#555555
,
#222222
);
background-image
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0
,
#555555
),
color-stop
(
1
,
#222222
));
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorStr
=
#555555
,
EndColorStr
=
#222222
);
-ms-filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startColorStr
=
#555555
,
EndColorStr
=
#222222
);
}
.ui-tooltip
:after
,
.ui-tooltip-top
:after
,
.ui-tooltip-right
:after
,
.ui-tooltip-bottom
:after
,
.ui-tooltip-left
:after
{
content
:
"\25B8"
;
display
:
block
;
font-size
:
2em
;
height
:
0
;
line-height
:
0
;
position
:
absolute
;
}
.ui-tooltip
:after
,
.ui-tooltip-bottom
:after
{
color
:
#2a2a2a
;
bottom
:
0
;
left
:
1px
;
text-align
:
center
;
text-shadow
:
1px
0
2px
#000000
;
-o-transform
:
rotate
(
90deg
);
-moz-transform
:
rotate
(
90deg
);
-khtml-transform
:
rotate
(
90deg
);
-webkit-transform
:
rotate
(
90deg
);
width
:
100%
;
}
.ui-tooltip-top
:after
{
bottom
:
auto
;
color
:
#4f4f4f
;
left
:
-2px
;
top
:
0
;
text-align
:
center
;
text-shadow
:
none
;
-o-transform
:
rotate
(
-90deg
);
-moz-transform
:
rotate
(
-90deg
);
-khtml-transform
:
rotate
(
-90deg
);
-webkit-transform
:
rotate
(
-90deg
);
width
:
100%
;
}
.ui-tooltip-right
:after
{
color
:
#222222
;
right
:
-0.375em
;
top
:
50%
;
margin-top
:
-.05em
;
text-shadow
:
0
1px
2px
#000000
;
-o-transform
:
rotate
(
0
);
-moz-transform
:
rotate
(
0
);
-khtml-transform
:
rotate
(
0
);
-webkit-transform
:
rotate
(
0
);
}
.ui-tooltip-left
:after
{
color
:
#222222
;
left
:
-0.375em
;
top
:
50%
;
margin-top
:
.1em
;
text-shadow
:
0
-1px
2px
#000000
;
-o-transform
:
rotate
(
180deg
);
-moz-transform
:
rotate
(
180deg
);
-khtml-transform
:
rotate
(
180deg
);
-webkit-transform
:
rotate
(
180deg
);
}
/*the following changes require some cleanup and integration with the above.**/
/* line 9 */
/* line 17 */
#todoapp
{
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-bottomleft
:
5px
;
-webkit-border-bottom-left-radius
:
5px
;
-o-border-bottom-left-radius
:
5px
;
-ms-border-bottom-left-radius
:
5px
;
-khtml-border-bottom-left-radius
:
5px
;
border-bottom-left-radius
:
5px
;
-moz-border-radius-bottomright
:
5px
;
-webkit-border-bottom-right-radius
:
5px
;
-o-border-bottom-right-radius
:
5px
;
-ms-border-bottom-right-radius
:
5px
;
-khtml-border-bottom-right-radius
:
5px
;
border-bottom-right-radius
:
5px
;
}
/* line 24 */
/* line 32 */
#todoapp
.content
#create-todo
{
position
:
relative
;
}
/* line 34 */
#todoapp
.content
#create-todo
input
{
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
;
}
/* line 47 */
#todoapp
.content
#create-todo
span
{
position
:
absolute
;
z-index
:
999
;
width
:
170px
;
left
:
50%
;
margin-left
:
-85px
;
opacity
:
0
;
}
/* line 55 */
#todoapp
.content
ul
#todo-list
{
margin-top
:
10px
;
}
/* line 57 */
#todoapp
.content
ul
#todo-list
li
{
padding
:
15px
20px
15px
0
;
position
:
relative
;
font-size
:
24px
;
border-bottom
:
1px
solid
#cccccc
;
*
zoom
:
1
;
cursor
:
move
;
}
/* line 22, /opt/ree/lib/ruby/gems/1.8/gems/compass-0.10.5/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss */
#todoapp
.content
ul
#todo-list
li
:after
{
content
:
"\0020"
;
display
:
block
;
height
:
0
;
clear
:
both
;
overflow
:
hidden
;
visibility
:
hidden
;
}
/* line 64 */
#todoapp
.content
ul
#todo-list
li
.editing
{
padding
:
0
;
border-bottom
:
0
;
}
/* line 67 */
#todoapp
.content
ul
#todo-list
li
.editing
.todo-input
{
display
:
block
;
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
;
}
/* line 79 */
#todoapp
.content
ul
#todo-list
li
.editing
.todo-content
{
display
:
none
;
}
/* line 81 */
#todoapp
.content
ul
#todo-list
li
.editing
.todo-check
{
display
:
none
;
}
/* line 83 */
#todoapp
.content
ul
#todo-list
li
.editing
.todo-destroy
{
display
:
none
!important
;
}
/* line 85 */
#todoapp
.content
ul
#todo-list
li
.todo-input
{
display
:
none
;
}
/* line 87 */
#todoapp
.content
ul
#todo-list
li
.todo-check
{
position
:
relative
;
top
:
6px
;
margin
:
0
10px
0
7px
;
float
:
left
;
}
/* line 93 */
#todoapp
.content
ul
#todo-list
li
.done
.todo-content
{
text-decoration
:
line-through
;
color
:
#777777
;
}
/* line 96 */
#todoapp
.content
ul
#todo-list
li
.todo-destroy
{
position
:
absolute
;
right
:
0px
;
top
:
16px
;
display
:
none
;
cursor
:
pointer
;
width
:
20px
;
height
:
20px
;
}
/* line 106 */
#todoapp
.content
ul
#todo-list
li
:hover
.todo-destroy
{
display
:
block
;
}
/* line 109 */
#todoapp
#todo-stats
{
*
zoom
:
1
;
margin-top
:
10px
;
color
:
#555555
;
-moz-border-radius-bottomleft
:
5px
;
-webkit-border-bottom-left-radius
:
5px
;
-o-border-bottom-left-radius
:
5px
;
-ms-border-bottom-left-radius
:
5px
;
-khtml-border-bottom-left-radius
:
5px
;
border-bottom-left-radius
:
5px
;
-moz-border-radius-bottomright
:
5px
;
-webkit-border-bottom-right-radius
:
5px
;
-o-border-bottom-right-radius
:
5px
;
-ms-border-bottom-right-radius
:
5px
;
-khtml-border-bottom-right-radius
:
5px
;
border-bottom-right-radius
:
5px
;
background
:
#f4fce8
;
border-top
:
1px
solid
#ededed
;
padding
:
0
20px
;
line-height
:
36px
;
}
/* line 22, /opt/ree/lib/ruby/gems/1.8/gems/compass-0.10.5/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss */
#todoapp
#todo-stats
:after
{
content
:
"\0020"
;
display
:
block
;
height
:
0
;
clear
:
both
;
overflow
:
hidden
;
visibility
:
hidden
;
}
/* line 118 */
#todoapp
#todo-stats
.todo-count
{
float
:
left
;
}
/* line 120 */
#todoapp
#todo-stats
.todo-count
.number
{
font-weight
:
bold
;
color
:
#555555
;
}
/* line 123 */
#todoapp
#todo-stats
.todo-clear
{
float
:
right
;
}
/* line 125 */
#todoapp
#todo-stats
.todo-clear
a
{
display
:
block
;
line-height
:
20px
;
text-decoration
:
none
;
-moz-border-radius
:
12px
;
-webkit-border-radius
:
12px
;
-o-border-radius
:
12px
;
-ms-border-radius
:
12px
;
-khtml-border-radius
:
12px
;
border-radius
:
12px
;
background
:
rgba
(
0
,
0
,
0
,
0.1
);
color
:
#555555
;
font-size
:
11px
;
margin-top
:
8px
;
padding
:
0
10px
1px
;
-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
;
}
/* line 136 */
#todoapp
#todo-stats
.todo-clear
a
: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
;
}
/* line 139 */
#todoapp
#todo-stats
.todo-clear
a
:active
{
position
:
relative
;
top
:
1px
;
}
todo-example/fidel/vendor/fidel.js
0 → 100644
View file @
0b69fdca
/*!
* Fidel - A javascript controller
* v1.2.2
* https://github.com/jgallen23/fidel
* copyright JGA 2011
* MIT License
*/
!
function
(
name
,
definition
)
{
if
(
typeof
module
!=
'
undefined
'
&&
module
.
exports
)
module
.
exports
=
definition
();
else
if
(
typeof
define
==
'
function
'
&&
typeof
define
.
amd
==
'
object
'
)
define
(
definition
);
else
this
[
name
]
=
definition
();
}(
'
Fidel
'
,
function
()
{
var
context
=
this
;
var
Fidel
=
{};
Fidel
.
guid
=
function
(){
return
'
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
'
.
replace
(
/
[
xy
]
/g
,
function
(
c
)
{
var
r
=
Math
.
random
()
*
16
|
0
,
v
=
c
===
'
x
'
?
r
:
(
r
&
0x3
|
0x8
);
return
v
.
toString
(
16
);
}).
toUpperCase
();
};
Fidel
.
extend
=
function
()
{
throw
new
Error
(
"
Fidel.extend is deprecated, please use Fidel.ViewController.extend
"
);
};
var
o
=
context
.
Fidel
;
Fidel
.
noConflict
=
function
()
{
context
.
Fidel
=
o
;
return
this
;
};
var
initializing
=
false
,
fnTest
=
/xyz/
.
test
(
function
(){
xyz
;})
?
/
\b
_super
\b
/
:
/.*/
;
// The base Class implementation (does nothing)
Fidel
.
Class
=
function
(){};
// Create a new Class that inherits from this class
Fidel
.
Class
.
extend
=
function
(
prop
)
{
var
_super
=
this
.
prototype
;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing
=
true
;
var
prototype
=
new
this
();
initializing
=
false
;
// Copy the properties over onto the new prototype
for
(
var
name
in
prop
)
{
// Check if we're overwriting an existing function
prototype
[
name
]
=
typeof
prop
[
name
]
==
"
function
"
&&
typeof
_super
[
name
]
==
"
function
"
&&
fnTest
.
test
(
prop
[
name
])
?
(
function
(
name
,
fn
){
return
function
()
{
var
tmp
=
this
.
_super
;
// Add a new ._super() method that is the same method
// but on the super-class
this
.
_super
=
_super
[
name
];
// The method only need to be bound temporarily, so we
// remove it when we're done executing
var
ret
=
fn
.
apply
(
this
,
arguments
);
this
.
_super
=
tmp
;
return
ret
;
};
})(
name
,
prop
[
name
])
:
prop
[
name
];
}
// The dummy class constructor
function
Class
(
opt
)
{
// All construction is actually done in the init method
if
(
!
initializing
)
{
if
(
this
.
defaults
)
{
for
(
var
key
in
this
.
defaults
)
{
if
(
typeof
opt
!==
'
object
'
||
!
opt
[
key
])
this
[
key
]
=
this
.
defaults
[
key
];
}
}
if
(
typeof
opt
===
'
object
'
)
{
for
(
var
okey
in
opt
)
{
this
[
okey
]
=
opt
[
okey
];
}
}
if
(
!
this
.
guid
)
this
.
guid
=
Fidel
.
guid
();
if
(
this
.
_initialize
)
this
.
_initialize
.
apply
(
this
,
arguments
);
if
(
this
.
init
)
this
.
init
.
apply
(
this
,
arguments
);
}
}
// Populate our constructed prototype object
Class
.
prototype
=
prototype
;
Class
.
prototype
.
proxy
=
function
(
func
)
{
var
thisObject
=
this
;
return
(
function
(){
if
(
!
func
)
return
;
return
func
.
apply
(
thisObject
,
arguments
);
});
};
// Enforce the constructor to be what we expect
Class
.
constructor
=
Class
;
// And make this class extendable
Class
.
extend
=
arguments
.
callee
;
return
Class
;
};
var
cache
=
{};
//check for "c_" cache for unit testing
//publish("/some/topic", ["a","b","c"]);
Fidel
.
publish
=
function
(
topic
,
args
){
var
subs
=
cache
[
topic
],
len
=
subs
?
subs
.
length
:
0
;
//can change loop or reverse array if the order matters
while
(
len
--
){
subs
[
len
].
apply
(
this
,
args
||
[]);
}
};
//subscribe("/some/topic", function(a, b, c){ /* handle data */ });
Fidel
.
subscribe
=
function
(
topic
,
callback
){
if
(
!
cache
[
topic
]){
cache
[
topic
]
=
[];
}
cache
[
topic
].
push
(
callback
);
return
[
topic
,
callback
];
// Array
};
//var handle = subscribe("/some/topic", function(){});
//unsubscribe(handle);
Fidel
.
unsubscribe
=
function
(
handle
){
var
subs
=
cache
[
handle
[
0
]],
callback
=
handle
[
1
],
len
=
subs
?
subs
.
length
:
0
;
while
(
len
--
){
if
(
subs
[
len
]
===
callback
){
subs
.
splice
(
len
,
1
);
}
}
};
Fidel
.
Class
.
prototype
.
on
=
Fidel
.
Class
.
prototype
.
bind
=
function
(
name
,
callback
)
{
return
Fidel
.
subscribe
(
this
.
guid
+
"
.
"
+
name
,
this
.
proxy
(
callback
));
};
Fidel
.
Class
.
prototype
.
emit
=
Fidel
.
Class
.
prototype
.
trigger
=
function
(
name
,
data
)
{
Fidel
.
publish
(
this
.
guid
+
"
.
"
+
name
,
data
);
Fidel
.
publish
(
name
,
data
);
};
Fidel
.
Class
.
prototype
.
removeListener
=
Fidel
.
Class
.
prototype
.
unbind
=
function
(
handle
)
{
Fidel
.
unsubscribe
(
handle
);
};
!
function
()
{
var
templateCache
=
{};
Fidel
.
template
=
function
tmpl
(
template
,
data
)
{
var
fn
=
!
/
\W
/
.
test
(
template
)
?
templateCache
[
template
]
=
templateCache
[
template
]
||
tmpl
(
template
)
:
new
Function
(
"
obj
"
,
"
var p=[],print=function(){p.push.apply(p,arguments);};
"
+
"
with(obj){p.push('
"
+
template
.
replace
(
/
[\r\t\n]
/g
,
""
)
.
split
(
"
{!
"
).
join
(
"
\t
"
)
.
replace
(
/
((
^|!}
)[^\t]
*
)
'/g
,
"
$1
\r
"
)
.
replace
(
/
\t
=
(
.*
?)
!}/g
,
"
',$1,'
"
)
.
split
(
"
\t
"
).
join
(
"
');
"
)
.
split
(
"
!}
"
).
join
(
"
p.push('
"
)
.
split
(
"
\r
"
).
join
(
"
\\
'
"
)
+
"
');}return p.join('');
"
);
return
data
?
fn
(
data
)
:
fn
;
};
}();
var
eventSplitter
=
/^
(\w
+
)\s
*
(
.*
)
$/
;
var
ViewController
=
Fidel
.
Class
.
extend
({
_initialize
:
function
(
options
)
{
if
(
!
this
.
el
)
throw
"
el is required
"
;
this
.
_subscribeHandles
=
{};
if
(
this
.
events
)
this
.
delegateEvents
();
if
(
this
.
elements
)
this
.
refreshElements
();
if
(
this
.
templates
)
this
.
loadTemplates
();
if
(
!
this
.
actionEvent
)
this
.
actionEvent
=
"
click
"
;
if
(
this
.
subscribe
)
this
.
bindSubscriptions
();
this
.
delegateActions
();
this
.
getDataElements
();
},
template
:
Fidel
.
template
,
delegateEvents
:
function
()
{
for
(
var
key
in
this
.
events
)
{
var
methodName
=
this
.
events
[
key
];
var
match
=
key
.
match
(
eventSplitter
);
var
eventName
=
match
[
1
],
selector
=
match
[
2
];
var
method
=
this
.
proxy
(
this
[
methodName
]);
if
(
selector
===
''
)
{
this
.
el
.
bind
(
eventName
,
method
);
}
else
{
this
.
el
.
delegate
(
selector
,
eventName
,
method
);
}
}
},
delegateActions
:
function
()
{
var
self
=
this
;
this
.
el
.
delegate
(
'
[data-action]
'
,
this
.
actionEvent
,
function
(
e
)
{
var
el
=
$
(
this
);
var
methodName
=
el
.
attr
(
'
data-action
'
);
if
(
self
[
methodName
])
self
[
methodName
].
call
(
self
,
el
,
e
);
});
},
refreshElements
:
function
()
{
for
(
var
key
in
this
.
elements
)
{
this
[
key
]
=
this
.
find
(
this
.
elements
[
key
]);
}
},
getDataElements
:
function
()
{
var
self
=
this
;
var
elements
=
this
.
find
(
"
[data-element]
"
);
for
(
var
i
=
0
,
c
=
elements
.
length
;
i
<
c
;
i
++
)
{
var
name
=
elements
[
i
].
getAttribute
(
'
data-element
'
);
if
(
!
self
[
name
])
{
var
elem
=
this
.
find
(
'
[data-element="
'
+
name
+
'
"]
'
);
self
[
name
]
=
elem
;
}
}
},
bindSubscriptions
:
function
()
{
for
(
var
key
in
this
.
subscribe
)
{
this
.
_subscribeHandles
[
key
]
=
Fidel
.
subscribe
(
key
,
this
.
proxy
(
this
[
this
.
subscribe
[
key
]]));
}
},
loadTemplates
:
function
()
{
for
(
var
name
in
this
.
templates
)
{
this
.
templates
[
name
]
=
$
(
this
.
templates
[
name
]).
html
();
}
},
find
:
function
(
selector
)
{
return
$
(
selector
,
this
.
el
[
0
]);
},
render
:
function
(
templateName
,
data
,
selector
)
{
if
(
arguments
.
length
==
1
)
{
data
=
templateName
;
templateName
=
this
.
primaryTemplate
;
}
template
=
this
.
templates
[
templateName
];
if
(
!
template
)
return
;
var
tmp
=
this
.
template
(
template
,
data
);
selector
=
(
selector
)?
$
(
selector
):
this
.
el
;
selector
.
html
(
tmp
);
},
destroy
:
function
()
{
for
(
var
key
in
this
.
_subscribeHandles
)
{
Fidel
.
unsubscribe
(
this
.
_subscribeHandles
[
key
]);
}
this
.
el
.
undelegate
(
'
[data-action]
'
,
this
.
actionEvent
);
this
.
el
=
null
;
}
});
Fidel
.
ViewController
=
ViewController
;
return
Fidel
;
});
todo-example/fidel/vendor/jquery-1.6.4.min.js
0 → 100644
View file @
0b69fdca
/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(
function
(
a
,
b
){
function
cu
(
a
){
return
f
.
isWindow
(
a
)?
a
:
a
.
nodeType
===
9
?
a
.
defaultView
||
a
.
parentWindow
:
!
1
}
function
cr
(
a
){
if
(
!
cg
[
a
]){
var
b
=
c
.
body
,
d
=
f
(
"
<
"
+
a
+
"
>
"
).
appendTo
(
b
),
e
=
d
.
css
(
"
display
"
);
d
.
remove
();
if
(
e
===
"
none
"
||
e
===
""
){
ch
||
(
ch
=
c
.
createElement
(
"
iframe
"
),
ch
.
frameBorder
=
ch
.
width
=
ch
.
height
=
0
),
b
.
appendChild
(
ch
);
if
(
!
ci
||!
ch
.
createElement
)
ci
=
(
ch
.
contentWindow
||
ch
.
contentDocument
).
document
,
ci
.
write
((
c
.
compatMode
===
"
CSS1Compat
"
?
"
<!doctype html>
"
:
""
)
+
"
<html><body>
"
),
ci
.
close
();
d
=
ci
.
createElement
(
a
),
ci
.
body
.
appendChild
(
d
),
e
=
f
.
css
(
d
,
"
display
"
),
b
.
removeChild
(
ch
)}
cg
[
a
]
=
e
}
return
cg
[
a
]}
function
cq
(
a
,
b
){
var
c
=
{};
f
.
each
(
cm
.
concat
.
apply
([],
cm
.
slice
(
0
,
b
)),
function
(){
c
[
this
]
=
a
});
return
c
}
function
cp
(){
cn
=
b
}
function
co
(){
setTimeout
(
cp
,
0
);
return
cn
=
f
.
now
()}
function
cf
(){
try
{
return
new
a
.
ActiveXObject
(
"
Microsoft.XMLHTTP
"
)}
catch
(
b
){}}
function
ce
(){
try
{
return
new
a
.
XMLHttpRequest
}
catch
(
b
){}}
function
b$
(
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
bZ
(
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
bY
(
a
,
b
,
c
,
d
){
if
(
f
.
isArray
(
b
))
f
.
each
(
b
,
function
(
b
,
e
){
c
||
bA
.
test
(
a
)?
d
(
a
,
e
):
bY
(
a
+
"
[
"
+
(
typeof
e
==
"
object
"
||
f
.
isArray
(
e
)?
b
:
""
)
+
"
]
"
,
e
,
c
,
d
)});
else
if
(
!
c
&&
b
!=
null
&&
typeof
b
==
"
object
"
)
for
(
var
e
in
b
)
bY
(
a
+
"
[
"
+
e
+
"
]
"
,
b
[
e
],
c
,
d
);
else
d
(
a
,
b
)}
function
bX
(
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
bW
(
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
===
bP
,
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
=
bW
(
a
,
c
,
d
,
e
,
l
,
g
)));(
k
||!
l
)
&&!
g
[
"
*
"
]
&&
(
l
=
bW
(
a
,
c
,
d
,
e
,
"
*
"
,
g
));
return
l
}
function
bV
(
a
){
return
function
(
b
,
c
){
typeof
b
!=
"
string
"
&&
(
c
=
b
,
b
=
"
*
"
);
if
(
f
.
isFunction
(
c
)){
var
d
=
b
.
toLowerCase
().
split
(
bL
),
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
by
(
a
,
b
,
c
){
var
d
=
b
===
"
width
"
?
a
.
offsetWidth
:
a
.
offsetHeight
,
e
=
b
===
"
width
"
?
bt
:
bu
;
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
=
bv
(
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
bl
(
a
,
b
){
b
.
src
?
f
.
ajax
({
url
:
b
.
src
,
async
:
!
1
,
dataType
:
"
script
"
}):
f
.
globalEval
((
b
.
text
||
b
.
textContent
||
b
.
innerHTML
||
""
).
replace
(
bd
,
"
/*$0*/
"
)),
b
.
parentNode
&&
b
.
parentNode
.
removeChild
(
b
)}
function
bk
(
a
){
f
.
nodeName
(
a
,
"
input
"
)?
bj
(
a
):
"
getElementsByTagName
"
in
a
&&
f
.
grep
(
a
.
getElementsByTagName
(
"
input
"
),
bj
)}
function
bj
(
a
){
if
(
a
.
type
===
"
checkbox
"
||
a
.
type
===
"
radio
"
)
a
.
defaultChecked
=
a
.
checked
}
function
bi
(
a
){
return
"
getElementsByTagName
"
in
a
?
a
.
getElementsByTagName
(
"
*
"
):
"
querySelectorAll
"
in
a
?
a
.
querySelectorAll
(
"
*
"
):[]}
function
bh
(
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
bg
(
a
,
b
){
if
(
b
.
nodeType
===
1
&&!!
f
.
hasData
(
a
)){
var
c
=
f
.
expando
,
d
=
f
.
data
(
a
),
e
=
f
.
data
(
b
,
d
);
if
(
d
=
d
[
c
]){
var
g
=
d
.
events
;
e
=
e
[
c
]
=
f
.
extend
({},
d
);
if
(
g
){
delete
e
.
handle
,
e
.
events
=
{};
for
(
var
h
in
g
)
for
(
var
i
=
0
,
j
=
g
[
h
].
length
;
i
<
j
;
i
++
)
f
.
event
.
add
(
b
,
h
+
(
g
[
h
][
i
].
namespace
?
"
.
"
:
""
)
+
g
[
h
][
i
].
namespace
,
g
[
h
][
i
],
g
[
h
][
i
].
data
)}}}}
function
bf
(
a
,
b
){
return
f
.
nodeName
(
a
,
"
table
"
)?
a
.
getElementsByTagName
(
"
tbody
"
)[
0
]
||
a
.
appendChild
(
a
.
ownerDocument
.
createElement
(
"
tbody
"
)):
a
}
function
V
(
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
(
Q
.
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
U
(
a
){
return
!
a
||!
a
.
parentNode
||
a
.
parentNode
.
nodeType
===
11
}
function
M
(
a
,
b
){
return
(
a
&&
a
!==
"
*
"
?
a
+
"
.
"
:
""
)
+
b
.
replace
(
y
,
"
`
"
).
replace
(
z
,
"
&
"
)}
function
L
(
a
){
var
b
,
c
,
d
,
e
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
=
[],
q
=
[],
r
=
f
.
_data
(
this
,
"
events
"
);
if
(
!
(
a
.
liveFired
===
this
||!
r
||!
r
.
live
||
a
.
target
.
disabled
||
a
.
button
&&
a
.
type
===
"
click
"
)){
a
.
namespace
&&
(
n
=
new
RegExp
(
"
(^|
\\
.)
"
+
a
.
namespace
.
split
(
"
.
"
).
join
(
"
\\
.(?:.*
\\
.)?
"
)
+
"
(
\\
.|$)
"
)),
a
.
liveFired
=
this
;
var
s
=
r
.
live
.
slice
(
0
);
for
(
i
=
0
;
i
<
s
.
length
;
i
++
)
g
=
s
[
i
],
g
.
origType
.
replace
(
w
,
""
)
===
a
.
type
?
q
.
push
(
g
.
selector
):
s
.
splice
(
i
--
,
1
);
e
=
f
(
a
.
target
).
closest
(
q
,
a
.
currentTarget
);
for
(
j
=
0
,
k
=
e
.
length
;
j
<
k
;
j
++
){
m
=
e
[
j
];
for
(
i
=
0
;
i
<
s
.
length
;
i
++
){
g
=
s
[
i
];
if
(
m
.
selector
===
g
.
selector
&&
(
!
n
||
n
.
test
(
g
.
namespace
))
&&!
m
.
elem
.
disabled
){
h
=
m
.
elem
,
d
=
null
;
if
(
g
.
preType
===
"
mouseenter
"
||
g
.
preType
===
"
mouseleave
"
)
a
.
type
=
g
.
preType
,
d
=
f
(
a
.
relatedTarget
).
closest
(
g
.
selector
)[
0
],
d
&&
f
.
contains
(
h
,
d
)
&&
(
d
=
h
);(
!
d
||
d
!==
h
)
&&
p
.
push
({
elem
:
h
,
handleObj
:
g
,
level
:
m
.
level
})}}}
for
(
j
=
0
,
k
=
p
.
length
;
j
<
k
;
j
++
){
e
=
p
[
j
];
if
(
c
&&
e
.
level
>
c
)
break
;
a
.
currentTarget
=
e
.
elem
,
a
.
data
=
e
.
handleObj
.
data
,
a
.
handleObj
=
e
.
handleObj
,
o
=
e
.
handleObj
.
origHandler
.
apply
(
e
.
elem
,
arguments
);
if
(
o
===!
1
||
a
.
isPropagationStopped
()){
c
=
e
.
level
,
o
===!
1
&&
(
b
=!
1
);
if
(
a
.
isImmediatePropagationStopped
())
break
}}
return
b
}}
function
J
(
a
,
c
,
d
){
var
e
=
f
.
extend
({},
d
[
0
]);
e
.
type
=
a
,
e
.
originalEvent
=
{},
e
.
liveFired
=
b
,
f
.
event
.
handle
.
call
(
c
,
e
),
e
.
isDefaultPrevented
()
&&
d
[
0
].
preventDefault
()}
function
D
(){
return
!
0
}
function
C
(){
return
!
1
}
function
m
(
a
,
c
,
d
){
var
e
=
c
+
"
defer
"
,
g
=
c
+
"
queue
"
,
h
=
c
+
"
mark
"
,
i
=
f
.
data
(
a
,
e
,
b
,
!
0
);
i
&&
(
d
===
"
queue
"
||!
f
.
data
(
a
,
g
,
b
,
!
0
))
&&
(
d
===
"
mark
"
||!
f
.
data
(
a
,
h
,
b
,
!
0
))
&&
setTimeout
(
function
(){
!
f
.
data
(
a
,
g
,
b
,
!
0
)
&&!
f
.
data
(
a
,
h
,
b
,
!
0
)
&&
(
f
.
removeData
(
a
,
e
,
!
0
),
i
.
resolve
())},
0
)}
function
l
(
a
){
for
(
var
b
in
a
)
if
(
b
!==
"
toJSON
"
)
return
!
1
;
return
!
0
}
function
k
(
a
,
c
,
d
){
if
(
d
===
b
&&
a
.
nodeType
===
1
){
var
e
=
"
data-
"
+
c
.
replace
(
j
,
"
-$1
"
).
toLowerCase
();
d
=
a
.
getAttribute
(
e
);
if
(
typeof
d
==
"
string
"
){
try
{
d
=
d
===
"
true
"
?
!
0
:
d
===
"
false
"
?
!
1
:
d
===
"
null
"
?
null
:
f
.
isNaN
(
d
)?
i
.
test
(
d
)?
f
.
parseJSON
(
d
):
d
:
parseFloat
(
d
)}
catch
(
g
){}
f
.
data
(
a
,
c
,
d
)}
else
d
=
b
}
return
d
}
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.6.4
"
,
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
.
done
(
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
.
resolveWith
(
c
,[
e
]),
e
.
fn
.
trigger
&&
e
(
c
).
trigger
(
"
ready
"
).
unbind
(
"
ready
"
)}},
bindReady
:
function
(){
if
(
!
B
){
B
=
e
.
_Deferred
();
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
},
isNaN
:
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
){
if
(
!
b
)
return
-
1
;
if
(
I
)
return
I
.
call
(
b
,
a
);
for
(
var
c
=
0
,
d
=
b
.
length
;
c
<
d
;
c
++
)
if
(
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
())});
return
e
}(),
g
=
"
done fail isResolved isRejected promise then always pipe
"
.
split
(
"
"
),
h
=
[].
slice
;
f
.
extend
({
_Deferred
:
function
(){
var
a
=
[],
b
,
c
,
d
,
e
=
{
done
:
function
(){
if
(
!
d
){
var
c
=
arguments
,
g
,
h
,
i
,
j
,
k
;
b
&&
(
k
=
b
,
b
=
0
);
for
(
g
=
0
,
h
=
c
.
length
;
g
<
h
;
g
++
)
i
=
c
[
g
],
j
=
f
.
type
(
i
),
j
===
"
array
"
?
e
.
done
.
apply
(
e
,
i
):
j
===
"
function
"
&&
a
.
push
(
i
);
k
&&
e
.
resolveWith
(
k
[
0
],
k
[
1
])}
return
this
},
resolveWith
:
function
(
e
,
f
){
if
(
!
d
&&!
b
&&!
c
){
f
=
f
||
[],
c
=
1
;
try
{
while
(
a
[
0
])
a
.
shift
().
apply
(
e
,
f
)}
finally
{
b
=
[
e
,
f
],
c
=
0
}}
return
this
},
resolve
:
function
(){
e
.
resolveWith
(
this
,
arguments
);
return
this
},
isResolved
:
function
(){
return
!!
c
||!!
b
},
cancel
:
function
(){
d
=
1
,
a
=
[];
return
this
}};
return
e
},
Deferred
:
function
(
a
){
var
b
=
f
.
_Deferred
(),
c
=
f
.
_Deferred
(),
d
;
f
.
extend
(
b
,{
then
:
function
(
a
,
c
){
b
.
done
(
a
).
fail
(
c
);
return
this
},
always
:
function
(){
return
b
.
done
.
apply
(
b
,
arguments
).
fail
.
apply
(
this
,
arguments
)},
fail
:
c
.
done
,
rejectWith
:
c
.
resolveWith
,
reject
:
c
.
resolve
,
isRejected
:
c
.
isResolved
,
pipe
:
function
(
a
,
c
){
return
f
.
Deferred
(
function
(
d
){
f
.
each
({
done
:[
a
,
"
resolve
"
],
fail
:[
c
,
"
reject
"
]},
function
(
a
,
c
){
var
e
=
c
[
0
],
g
=
c
[
1
],
h
;
f
.
isFunction
(
e
)?
b
[
a
](
function
(){
h
=
e
.
apply
(
this
,
arguments
),
h
&&
f
.
isFunction
(
h
.
promise
)?
h
.
promise
().
then
(
d
.
resolve
,
d
.
reject
):
d
[
g
+
"
With
"
](
this
===
b
?
d
:
this
,[
h
])}):
b
[
a
](
d
[
g
])})}).
promise
()},
promise
:
function
(
a
){
if
(
a
==
null
){
if
(
d
)
return
d
;
d
=
a
=
{}}
var
c
=
g
.
length
;
while
(
c
--
)
a
[
g
[
c
]]
=
b
[
g
[
c
]];
return
a
}}),
b
.
done
(
c
.
cancel
).
fail
(
b
.
cancel
),
delete
b
.
cancel
,
a
&&
a
.
call
(
b
,
b
);
return
b
},
when
:
function
(
a
){
function
i
(
a
){
return
function
(
c
){
b
[
a
]
=
arguments
.
length
>
1
?
h
.
call
(
arguments
,
0
):
c
,
--
e
||
g
.
resolveWith
(
g
,
h
.
call
(
b
,
0
))}}
var
b
=
arguments
,
c
=
0
,
d
=
b
.
length
,
e
=
d
,
g
=
d
<=
1
&&
a
&&
f
.
isFunction
(
a
.
promise
)?
a
:
f
.
Deferred
();
if
(
d
>
1
){
for
(;
c
<
d
;
c
++
)
b
[
c
]
&&
f
.
isFunction
(
b
[
c
].
promise
)?
b
[
c
].
promise
().
then
(
i
(
c
),
g
.
reject
):
--
e
;
e
||
g
.
resolveWith
(
g
,
b
)}
else
g
!==
a
&&
g
.
resolveWith
(
g
,
d
?[
a
]:[]);
return
g
.
promise
()}}),
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'/>
"
,
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
,
checkOn
:
i
.
value
===
"
on
"
,
optSelected
:
h
.
selected
,
getSetAttribute
:
a
.
className
!==
"
t
"
,
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
.
firstChild
),
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
:
"
-1000px
"
,
top
:
"
-1000px
"
});
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
),
o
.
innerHTML
=
""
,
n
.
removeChild
(
o
);
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
;
o
=
l
=
g
=
h
=
m
=
j
=
a
=
i
=
null
;
return
k
}(),
f
.
boxModel
=
f
.
support
.
boxModel
;
var
i
=
/^
(?:\{
.*
\}
|
\[
.*
\])
$/
,
j
=
/
([
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
&&!
l
(
a
)},
data
:
function
(
a
,
c
,
d
,
e
){
if
(
!!
f
.
acceptData
(
a
)){
var
g
,
h
,
i
=
f
.
expando
,
j
=
typeof
c
==
"
string
"
,
k
=
a
.
nodeType
,
l
=
k
?
f
.
cache
:
a
,
m
=
k
?
a
[
f
.
expando
]:
a
[
f
.
expando
]
&&
f
.
expando
;
if
((
!
m
||
e
&&
m
&&
l
[
m
]
&&!
l
[
m
][
i
])
&&
j
&&
d
===
b
)
return
;
m
||
(
k
?
a
[
f
.
expando
]
=
m
=++
f
.
uuid
:
m
=
f
.
expando
),
l
[
m
]
||
(
l
[
m
]
=
{},
k
||
(
l
[
m
].
toJSON
=
f
.
noop
));
if
(
typeof
c
==
"
object
"
||
typeof
c
==
"
function
"
)
e
?
l
[
m
][
i
]
=
f
.
extend
(
l
[
m
][
i
],
c
):
l
[
m
]
=
f
.
extend
(
l
[
m
],
c
);
g
=
l
[
m
],
e
&&
(
g
[
i
]
||
(
g
[
i
]
=
{}),
g
=
g
[
i
]),
d
!==
b
&&
(
g
[
f
.
camelCase
(
c
)]
=
d
);
if
(
c
===
"
events
"
&&!
g
[
c
])
return
g
[
i
]
&&
g
[
i
].
events
;
j
?(
h
=
g
[
c
],
h
==
null
&&
(
h
=
g
[
f
.
camelCase
(
c
)])):
h
=
g
;
return
h
}},
removeData
:
function
(
a
,
b
,
c
){
if
(
!!
f
.
acceptData
(
a
)){
var
d
,
e
=
f
.
expando
,
g
=
a
.
nodeType
,
h
=
g
?
f
.
cache
:
a
,
i
=
g
?
a
[
f
.
expando
]:
f
.
expando
;
if
(
!
h
[
i
])
return
;
if
(
b
){
d
=
c
?
h
[
i
][
e
]:
h
[
i
];
if
(
d
){
d
[
b
]
||
(
b
=
f
.
camelCase
(
b
)),
delete
d
[
b
];
if
(
!
l
(
d
))
return
}}
if
(
c
){
delete
h
[
i
][
e
];
if
(
!
l
(
h
[
i
]))
return
}
var
j
=
h
[
i
][
e
];
f
.
support
.
deleteExpando
||!
h
.
setInterval
?
delete
h
[
i
]:
h
[
i
]
=
null
,
j
?(
h
[
i
]
=
{},
g
||
(
h
[
i
].
toJSON
=
f
.
noop
),
h
[
i
][
e
]
=
j
):
g
&&
(
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
=
null
;
if
(
typeof
a
==
"
undefined
"
){
if
(
this
.
length
){
d
=
f
.
data
(
this
[
0
]);
if
(
this
[
0
].
nodeType
===
1
){
var
e
=
this
[
0
].
attributes
,
g
;
for
(
var
h
=
0
,
i
=
e
.
length
;
h
<
i
;
h
++
)
g
=
e
[
h
].
name
,
g
.
indexOf
(
"
data-
"
)
===
0
&&
(
g
=
f
.
camelCase
(
g
.
substring
(
5
)),
k
(
this
[
0
],
g
,
d
[
g
]))}}
return
d
}
if
(
typeof
a
==
"
object
"
)
return
this
.
each
(
function
(){
f
.
data
(
this
,
a
)});
var
j
=
a
.
split
(
"
.
"
);
j
[
1
]
=
j
[
1
]?
"
.
"
+
j
[
1
]:
""
;
if
(
c
===
b
){
d
=
this
.
triggerHandler
(
"
getData
"
+
j
[
1
]
+
"
!
"
,[
j
[
0
]]),
d
===
b
&&
this
.
length
&&
(
d
=
f
.
data
(
this
[
0
],
a
),
d
=
k
(
this
[
0
],
a
,
d
));
return
d
===
b
&&
j
[
1
]?
this
.
data
(
j
[
0
]):
d
}
return
this
.
each
(
function
(){
var
b
=
f
(
this
),
d
=
[
j
[
0
],
c
];
b
.
triggerHandler
(
"
setData
"
+
j
[
1
]
+
"
!
"
,
d
),
f
.
data
(
this
,
a
,
c
),
b
.
triggerHandler
(
"
changeData
"
+
j
[
1
]
+
"
!
"
,
d
)})},
removeData
:
function
(
a
){
return
this
.
each
(
function
(){
f
.
removeData
(
this
,
a
)})}}),
f
.
extend
({
_mark
:
function
(
a
,
c
){
a
&&
(
c
=
(
c
||
"
fx
"
)
+
"
mark
"
,
f
.
data
(
a
,
c
,(
f
.
data
(
a
,
c
,
b
,
!
0
)
||
0
)
+
1
,
!
0
))},
_unmark
:
function
(
a
,
c
,
d
){
a
!==!
0
&&
(
d
=
c
,
c
=
a
,
a
=!
1
);
if
(
c
){
d
=
d
||
"
fx
"
;
var
e
=
d
+
"
mark
"
,
g
=
a
?
0
:(
f
.
data
(
c
,
e
,
b
,
!
0
)
||
1
)
-
1
;
g
?
f
.
data
(
c
,
e
,
g
,
!
0
):(
f
.
removeData
(
c
,
e
,
!
0
),
m
(
c
,
d
,
"
mark
"
))}},
queue
:
function
(
a
,
c
,
d
){
if
(
a
){
c
=
(
c
||
"
fx
"
)
+
"
queue
"
;
var
e
=
f
.
data
(
a
,
c
,
b
,
!
0
);
d
&&
(
!
e
||
f
.
isArray
(
d
)?
e
=
f
.
data
(
a
,
c
,
f
.
makeArray
(
d
),
!
0
):
e
.
push
(
d
));
return
e
||
[]}},
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
"
),
d
.
call
(
a
,
function
(){
f
.
dequeue
(
a
,
b
)})),
c
.
length
||
(
f
.
removeData
(
a
,
b
+
"
queue
"
,
!
0
),
m
(
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
(){
var
c
=
this
;
setTimeout
(
function
(){
f
.
dequeue
(
c
,
b
)},
a
)})},
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
.
_Deferred
(),
!
0
))
h
++
,
l
.
done
(
m
);
m
();
return
d
.
promise
()}});
var
n
=
/
[\n\t\r]
/g
,
o
=
/
\s
+/
,
p
=
/
\r
/g
,
q
=
/^
(?:
button|input
)
$/i
,
r
=
/^
(?:
button|input|object|select|textarea
)
$/i
,
s
=
/^a
(?:
rea
)?
$/i
,
t
=
/^
(?:
autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected
)
$/i
,
u
,
v
;
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
(
o
);
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
(
o
);
for
(
d
=
0
,
e
=
this
.
length
;
d
<
e
;
d
++
){
g
=
this
[
d
];
if
(
g
.
nodeType
===
1
&&
g
.
className
)
if
(
a
){
h
=
(
"
"
+
g
.
className
+
"
"
).
replace
(
n
,
"
"
);
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
(
o
);
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
+
"
"
;
for
(
var
c
=
0
,
d
=
this
.
length
;
c
<
d
;
c
++
)
if
(
this
[
c
].
nodeType
===
1
&&
(
"
"
+
this
[
c
].
className
+
"
"
).
replace
(
n
,
"
"
).
indexOf
(
b
)
>-
1
)
return
!
0
;
return
!
1
},
val
:
function
(
a
){
var
c
,
d
,
e
=
this
[
0
];
if
(
!
arguments
.
length
){
if
(
e
){
c
=
f
.
valHooks
[
e
.
nodeName
.
toLowerCase
()]
||
f
.
valHooks
[
e
.
type
];
if
(
c
&&
"
get
"
in
c
&&
(
d
=
c
.
get
(
e
,
"
value
"
))
!==
b
)
return
d
;
d
=
e
.
value
;
return
typeof
d
==
"
string
"
?
d
.
replace
(
p
,
""
):
d
==
null
?
""
:
d
}
return
b
}
var
g
=
f
.
isFunction
(
a
);
return
this
.
each
(
function
(
d
){
var
e
=
f
(
this
),
h
;
if
(
this
.
nodeType
===
1
){
g
?
h
=
a
.
call
(
this
,
d
,
e
.
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
=
a
.
selectedIndex
,
d
=
[],
e
=
a
.
options
,
g
=
a
.
type
===
"
select-one
"
;
if
(
c
<
0
)
return
null
;
for
(
var
h
=
g
?
c
:
0
,
i
=
g
?
c
+
1
:
e
.
length
;
h
<
i
;
h
++
){
var
j
=
e
[
h
];
if
(
j
.
selected
&&
(
f
.
support
.
optDisabled
?
!
j
.
disabled
:
j
.
getAttribute
(
"
disabled
"
)
===
null
)
&&
(
!
j
.
parentNode
.
disabled
||!
f
.
nodeName
(
j
.
parentNode
,
"
optgroup
"
))){
b
=
f
(
j
).
val
();
if
(
g
)
return
b
;
d
.
push
(
b
)}}
if
(
g
&&!
d
.
length
&&
e
.
length
)
return
f
(
e
[
c
]).
val
();
return
d
},
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
},
attrFix
:{
tabindex
:
"
tabIndex
"
},
attr
:
function
(
a
,
c
,
d
,
e
){
var
g
=
a
.
nodeType
;
if
(
!
a
||
g
===
3
||
g
===
8
||
g
===
2
)
return
b
;
if
(
e
&&
c
in
f
.
attrFn
)
return
f
(
a
)[
c
](
d
);
if
(
!
(
"
getAttribute
"
in
a
))
return
f
.
prop
(
a
,
c
,
d
);
var
h
,
i
,
j
=
g
!==
1
||!
f
.
isXMLDoc
(
a
);
j
&&
(
c
=
f
.
attrFix
[
c
]
||
c
,
i
=
f
.
attrHooks
[
c
],
i
||
(
t
.
test
(
c
)?
i
=
v
:
u
&&
(
i
=
u
)));
if
(
d
!==
b
){
if
(
d
===
null
){
f
.
removeAttr
(
a
,
c
);
return
b
}
if
(
i
&&
"
set
"
in
i
&&
j
&&
(
h
=
i
.
set
(
a
,
d
,
c
))
!==
b
)
return
h
;
a
.
setAttribute
(
c
,
""
+
d
);
return
d
}
if
(
i
&&
"
get
"
in
i
&&
j
&&
(
h
=
i
.
get
(
a
,
c
))
!==
null
)
return
h
;
h
=
a
.
getAttribute
(
c
);
return
h
===
null
?
b
:
h
},
removeAttr
:
function
(
a
,
b
){
var
c
;
a
.
nodeType
===
1
&&
(
b
=
f
.
attrFix
[
b
]
||
b
,
f
.
attr
(
a
,
b
,
""
),
a
.
removeAttribute
(
b
),
t
.
test
(
b
)
&&
(
c
=
f
.
propFix
[
b
]
||
b
)
in
a
&&
(
a
[
c
]
=!
1
))},
attrHooks
:{
type
:{
set
:
function
(
a
,
b
){
if
(
q
.
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
(
u
&&
f
.
nodeName
(
a
,
"
button
"
))
return
u
.
get
(
a
,
b
);
return
b
in
a
?
a
.
value
:
null
},
set
:
function
(
a
,
b
,
c
){
if
(
u
&&
f
.
nodeName
(
a
,
"
button
"
))
return
u
.
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
=
a
.
nodeType
;
if
(
!
a
||
e
===
3
||
e
===
8
||
e
===
2
)
return
b
;
var
g
,
h
,
i
=
e
!==
1
||!
f
.
isXMLDoc
(
a
);
i
&&
(
c
=
f
.
propFix
[
c
]
||
c
,
h
=
f
.
propHooks
[
c
]);
return
d
!==
b
?
h
&&
"
set
"
in
h
&&
(
g
=
h
.
set
(
a
,
d
,
c
))
!==
b
?
g
:
a
[
c
]
=
d
:
h
&&
"
get
"
in
h
&&
(
g
=
h
.
get
(
a
,
c
))
!==
null
?
g
:
a
[
c
]},
propHooks
:{
tabIndex
:{
get
:
function
(
a
){
var
c
=
a
.
getAttributeNode
(
"
tabindex
"
);
return
c
&&
c
.
specified
?
parseInt
(
c
.
value
,
10
):
r
.
test
(
a
.
nodeName
)
||
s
.
test
(
a
.
nodeName
)
&&
a
.
href
?
0
:
b
}}}}),
f
.
attrHooks
.
tabIndex
=
f
.
propHooks
.
tabIndex
,
v
=
{
get
:
function
(
a
,
c
){
var
d
;
return
f
.
prop
(
a
,
c
)
===!
0
||
(
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
}},
f
.
support
.
getSetAttribute
||
(
u
=
f
.
valHooks
.
button
=
{
get
:
function
(
a
,
c
){
var
d
;
d
=
a
.
getAttributeNode
(
c
);
return
d
&&
d
.
nodeValue
!==
""
?
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
.
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
.
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
.
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
w
=
/
\.(
.*
)
$/
,
x
=
/^
(?:
textarea|input|select
)
$/i
,
y
=
/
\.
/g
,
z
=
/ /g
,
A
=
/
[^\w\s
.|`
]
/g
,
B
=
function
(
a
){
return
a
.
replace
(
A
,
"
\\
$&
"
)};
f
.
event
=
{
add
:
function
(
a
,
c
,
d
,
e
){
if
(
a
.
nodeType
!==
3
&&
a
.
nodeType
!==
8
){
if
(
d
===!
1
)
d
=
C
;
else
if
(
!
d
)
return
;
var
g
,
h
;
d
.
handler
&&
(
g
=
d
,
d
=
g
.
handler
),
d
.
guid
||
(
d
.
guid
=
f
.
guid
++
);
var
i
=
f
.
_data
(
a
);
if
(
!
i
)
return
;
var
j
=
i
.
events
,
k
=
i
.
handle
;
j
||
(
i
.
events
=
j
=
{}),
k
||
(
i
.
handle
=
k
=
function
(
a
){
return
typeof
f
!=
"
undefined
"
&&
(
!
a
||
f
.
event
.
triggered
!==
a
.
type
)?
f
.
event
.
handle
.
apply
(
k
.
elem
,
arguments
):
b
}),
k
.
elem
=
a
,
c
=
c
.
split
(
"
"
);
var
l
,
m
=
0
,
n
;
while
(
l
=
c
[
m
++
]){
h
=
g
?
f
.
extend
({},
g
):{
handler
:
d
,
data
:
e
},
l
.
indexOf
(
"
.
"
)
>-
1
?(
n
=
l
.
split
(
"
.
"
),
l
=
n
.
shift
(),
h
.
namespace
=
n
.
slice
(
0
).
sort
().
join
(
"
.
"
)):(
n
=
[],
h
.
namespace
=
""
),
h
.
type
=
l
,
h
.
guid
||
(
h
.
guid
=
d
.
guid
);
var
o
=
j
[
l
],
p
=
f
.
event
.
special
[
l
]
||
{};
if
(
!
o
){
o
=
j
[
l
]
=
[];
if
(
!
p
.
setup
||
p
.
setup
.
call
(
a
,
e
,
n
,
k
)
===!
1
)
a
.
addEventListener
?
a
.
addEventListener
(
l
,
k
,
!
1
):
a
.
attachEvent
&&
a
.
attachEvent
(
"
on
"
+
l
,
k
)}
p
.
add
&&
(
p
.
add
.
call
(
a
,
h
),
h
.
handler
.
guid
||
(
h
.
handler
.
guid
=
d
.
guid
)),
o
.
push
(
h
),
f
.
event
.
global
[
l
]
=!
0
}
a
=
null
}},
global
:{},
remove
:
function
(
a
,
c
,
d
,
e
){
if
(
a
.
nodeType
!==
3
&&
a
.
nodeType
!==
8
){
d
===!
1
&&
(
d
=
C
);
var
g
,
h
,
i
,
j
,
k
=
0
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
=
f
.
hasData
(
a
)
&&
f
.
_data
(
a
),
t
=
s
&&
s
.
events
;
if
(
!
s
||!
t
)
return
;
c
&&
c
.
type
&&
(
d
=
c
.
handler
,
c
=
c
.
type
);
if
(
!
c
||
typeof
c
==
"
string
"
&&
c
.
charAt
(
0
)
===
"
.
"
){
c
=
c
||
""
;
for
(
h
in
t
)
f
.
event
.
remove
(
a
,
h
+
c
);
return
}
c
=
c
.
split
(
"
"
);
while
(
h
=
c
[
k
++
]){
r
=
h
,
q
=
null
,
l
=
h
.
indexOf
(
"
.
"
)
<
0
,
m
=
[],
l
||
(
m
=
h
.
split
(
"
.
"
),
h
=
m
.
shift
(),
n
=
new
RegExp
(
"
(^|
\\
.)
"
+
f
.
map
(
m
.
slice
(
0
).
sort
(),
B
).
join
(
"
\\
.(?:.*
\\
.)?
"
)
+
"
(
\\
.|$)
"
)),
p
=
t
[
h
];
if
(
!
p
)
continue
;
if
(
!
d
){
for
(
j
=
0
;
j
<
p
.
length
;
j
++
){
q
=
p
[
j
];
if
(
l
||
n
.
test
(
q
.
namespace
))
f
.
event
.
remove
(
a
,
r
,
q
.
handler
,
j
),
p
.
splice
(
j
--
,
1
)}
continue
}
o
=
f
.
event
.
special
[
h
]
||
{};
for
(
j
=
e
||
0
;
j
<
p
.
length
;
j
++
){
q
=
p
[
j
];
if
(
d
.
guid
===
q
.
guid
){
if
(
l
||
n
.
test
(
q
.
namespace
))
e
==
null
&&
p
.
splice
(
j
--
,
1
),
o
.
remove
&&
o
.
remove
.
call
(
a
,
q
);
if
(
e
!=
null
)
break
}}
if
(
p
.
length
===
0
||
e
!=
null
&&
p
.
length
===
1
)(
!
o
.
teardown
||
o
.
teardown
.
call
(
a
,
m
)
===!
1
)
&&
f
.
removeEvent
(
a
,
h
,
s
.
handle
),
g
=
null
,
delete
t
[
h
]}
if
(
f
.
isEmptyObject
(
t
)){
var
u
=
s
.
handle
;
u
&&
(
u
.
elem
=
null
),
delete
s
.
events
,
delete
s
.
handle
,
f
.
isEmptyObject
(
s
)
&&
f
.
removeData
(
a
,
b
,
!
0
)}}},
customEvent
:{
getData
:
!
0
,
setData
:
!
0
,
changeData
:
!
0
},
trigger
:
function
(
c
,
d
,
e
,
g
){
var
h
=
c
.
type
||
c
,
i
=
[],
j
;
h
.
indexOf
(
"
!
"
)
>=
0
&&
(
h
=
h
.
slice
(
0
,
-
1
),
j
=!
0
),
h
.
indexOf
(
"
.
"
)
>=
0
&&
(
i
=
h
.
split
(
"
.
"
),
h
=
i
.
shift
(),
i
.
sort
());
if
(
!!
e
&&!
f
.
event
.
customEvent
[
h
]
||!!
f
.
event
.
global
[
h
]){
c
=
typeof
c
==
"
object
"
?
c
[
f
.
expando
]?
c
:
new
f
.
Event
(
h
,
c
):
new
f
.
Event
(
h
),
c
.
type
=
h
,
c
.
exclusive
=
j
,
c
.
namespace
=
i
.
join
(
"
.
"
),
c
.
namespace_re
=
new
RegExp
(
"
(^|
\\
.)
"
+
i
.
join
(
"
\\
.(?:.*
\\
.)?
"
)
+
"
(
\\
.|$)
"
);
if
(
g
||!
e
)
c
.
preventDefault
(),
c
.
stopPropagation
();
if
(
!
e
){
f
.
each
(
f
.
cache
,
function
(){
var
a
=
f
.
expando
,
b
=
this
[
a
];
b
&&
b
.
events
&&
b
.
events
[
h
]
&&
f
.
event
.
trigger
(
c
,
d
,
b
.
handle
.
elem
)});
return
}
if
(
e
.
nodeType
===
3
||
e
.
nodeType
===
8
)
return
;
c
.
result
=
b
,
c
.
target
=
e
,
d
=
d
!=
null
?
f
.
makeArray
(
d
):[],
d
.
unshift
(
c
);
var
k
=
e
,
l
=
h
.
indexOf
(
"
:
"
)
<
0
?
"
on
"
+
h
:
""
;
do
{
var
m
=
f
.
_data
(
k
,
"
handle
"
);
c
.
currentTarget
=
k
,
m
&&
m
.
apply
(
k
,
d
),
l
&&
f
.
acceptData
(
k
)
&&
k
[
l
]
&&
k
[
l
].
apply
(
k
,
d
)
===!
1
&&
(
c
.
result
=!
1
,
c
.
preventDefault
()),
k
=
k
.
parentNode
||
k
.
ownerDocument
||
k
===
c
.
target
.
ownerDocument
&&
a
}
while
(
k
&&!
c
.
isPropagationStopped
());
if
(
!
c
.
isDefaultPrevented
()){
var
n
,
o
=
f
.
event
.
special
[
h
]
||
{};
if
((
!
o
.
_default
||
o
.
_default
.
call
(
e
.
ownerDocument
,
c
)
===!
1
)
&&
(
h
!==
"
click
"
||!
f
.
nodeName
(
e
,
"
a
"
))
&&
f
.
acceptData
(
e
)){
try
{
l
&&
e
[
h
]
&&
(
n
=
e
[
l
],
n
&&
(
e
[
l
]
=
null
),
f
.
event
.
triggered
=
h
,
e
[
h
]())}
catch
(
p
){}
n
&&
(
e
[
l
]
=
n
),
f
.
event
.
triggered
=
b
}}
return
c
.
result
}},
handle
:
function
(
c
){
c
=
f
.
event
.
fix
(
c
||
a
.
event
);
var
d
=
((
f
.
_data
(
this
,
"
events
"
)
||
{})[
c
.
type
]
||
[]).
slice
(
0
),
e
=!
c
.
exclusive
&&!
c
.
namespace
,
g
=
Array
.
prototype
.
slice
.
call
(
arguments
,
0
);
g
[
0
]
=
c
,
c
.
currentTarget
=
this
;
for
(
var
h
=
0
,
i
=
d
.
length
;
h
<
i
;
h
++
){
var
j
=
d
[
h
];
if
(
e
||
c
.
namespace_re
.
test
(
j
.
namespace
)){
c
.
handler
=
j
.
handler
,
c
.
data
=
j
.
data
,
c
.
handleObj
=
j
;
var
k
=
j
.
handler
.
apply
(
this
,
g
);
k
!==
b
&&
(
c
.
result
=
k
,
k
===!
1
&&
(
c
.
preventDefault
(),
c
.
stopPropagation
()));
if
(
c
.
isImmediatePropagationStopped
())
break
}}
return
c
.
result
},
props
:
"
altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which
"
.
split
(
"
"
),
fix
:
function
(
a
){
if
(
a
[
f
.
expando
])
return
a
;
var
d
=
a
;
a
=
f
.
Event
(
d
);
for
(
var
e
=
this
.
props
.
length
,
g
;
e
;)
g
=
this
.
props
[
--
e
],
a
[
g
]
=
d
[
g
];
a
.
target
||
(
a
.
target
=
a
.
srcElement
||
c
),
a
.
target
.
nodeType
===
3
&&
(
a
.
target
=
a
.
target
.
parentNode
),
!
a
.
relatedTarget
&&
a
.
fromElement
&&
(
a
.
relatedTarget
=
a
.
fromElement
===
a
.
target
?
a
.
toElement
:
a
.
fromElement
);
if
(
a
.
pageX
==
null
&&
a
.
clientX
!=
null
){
var
h
=
a
.
target
.
ownerDocument
||
c
,
i
=
h
.
documentElement
,
j
=
h
.
body
;
a
.
pageX
=
a
.
clientX
+
(
i
&&
i
.
scrollLeft
||
j
&&
j
.
scrollLeft
||
0
)
-
(
i
&&
i
.
clientLeft
||
j
&&
j
.
clientLeft
||
0
),
a
.
pageY
=
a
.
clientY
+
(
i
&&
i
.
scrollTop
||
j
&&
j
.
scrollTop
||
0
)
-
(
i
&&
i
.
clientTop
||
j
&&
j
.
clientTop
||
0
)}
a
.
which
==
null
&&
(
a
.
charCode
!=
null
||
a
.
keyCode
!=
null
)
&&
(
a
.
which
=
a
.
charCode
!=
null
?
a
.
charCode
:
a
.
keyCode
),
!
a
.
metaKey
&&
a
.
ctrlKey
&&
(
a
.
metaKey
=
a
.
ctrlKey
),
!
a
.
which
&&
a
.
button
!==
b
&&
(
a
.
which
=
a
.
button
&
1
?
1
:
a
.
button
&
2
?
3
:
a
.
button
&
4
?
2
:
0
);
return
a
},
guid
:
1
e8
,
proxy
:
f
.
proxy
,
special
:{
ready
:{
setup
:
f
.
bindReady
,
teardown
:
f
.
noop
},
live
:{
add
:
function
(
a
){
f
.
event
.
add
(
this
,
M
(
a
.
origType
,
a
.
selector
),
f
.
extend
({},
a
,{
handler
:
L
,
guid
:
a
.
handler
.
guid
}))},
remove
:
function
(
a
){
f
.
event
.
remove
(
this
,
M
(
a
.
origType
,
a
.
selector
),
a
)}},
beforeunload
:{
setup
:
function
(
a
,
b
,
c
){
f
.
isWindow
(
this
)
&&
(
this
.
onbeforeunload
=
c
)},
teardown
:
function
(
a
,
b
){
this
.
onbeforeunload
===
b
&&
(
this
.
onbeforeunload
=
null
)}}}},
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
.
preventDefault
)
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
()?
D
:
C
):
this
.
type
=
a
,
b
&&
f
.
extend
(
this
,
b
),
this
.
timeStamp
=
f
.
now
(),
this
[
f
.
expando
]
=!
0
},
f
.
Event
.
prototype
=
{
preventDefault
:
function
(){
this
.
isDefaultPrevented
=
D
;
var
a
=
this
.
originalEvent
;
!
a
||
(
a
.
preventDefault
?
a
.
preventDefault
():
a
.
returnValue
=!
1
)},
stopPropagation
:
function
(){
this
.
isPropagationStopped
=
D
;
var
a
=
this
.
originalEvent
;
!
a
||
(
a
.
stopPropagation
&&
a
.
stopPropagation
(),
a
.
cancelBubble
=!
0
)},
stopImmediatePropagation
:
function
(){
this
.
isImmediatePropagationStopped
=
D
,
this
.
stopPropagation
()},
isDefaultPrevented
:
C
,
isPropagationStopped
:
C
,
isImmediatePropagationStopped
:
C
};
var
E
=
function
(
a
){
var
b
=
a
.
relatedTarget
,
c
=!
1
,
d
=
a
.
type
;
a
.
type
=
a
.
data
,
b
!==
this
&&
(
b
&&
(
c
=
f
.
contains
(
this
,
b
)),
c
||
(
f
.
event
.
handle
.
apply
(
this
,
arguments
),
a
.
type
=
d
))},
F
=
function
(
a
){
a
.
type
=
a
.
data
,
f
.
event
.
handle
.
apply
(
this
,
arguments
)};
f
.
each
({
mouseenter
:
"
mouseover
"
,
mouseleave
:
"
mouseout
"
},
function
(
a
,
b
){
f
.
event
.
special
[
a
]
=
{
setup
:
function
(
c
){
f
.
event
.
add
(
this
,
b
,
c
&&
c
.
selector
?
F
:
E
,
a
)},
teardown
:
function
(
a
){
f
.
event
.
remove
(
this
,
b
,
a
&&
a
.
selector
?
F
:
E
)}}}),
f
.
support
.
submitBubbles
||
(
f
.
event
.
special
.
submit
=
{
setup
:
function
(
a
,
b
){
if
(
!
f
.
nodeName
(
this
,
"
form
"
))
f
.
event
.
add
(
this
,
"
click.specialSubmit
"
,
function
(
a
){
var
b
=
a
.
target
,
c
=
f
.
nodeName
(
b
,
"
input
"
)
||
f
.
nodeName
(
b
,
"
button
"
)?
b
.
type
:
""
;(
c
===
"
submit
"
||
c
===
"
image
"
)
&&
f
(
b
).
closest
(
"
form
"
).
length
&&
J
(
"
submit
"
,
this
,
arguments
)}),
f
.
event
.
add
(
this
,
"
keypress.specialSubmit
"
,
function
(
a
){
var
b
=
a
.
target
,
c
=
f
.
nodeName
(
b
,
"
input
"
)
||
f
.
nodeName
(
b
,
"
button
"
)?
b
.
type
:
""
;(
c
===
"
text
"
||
c
===
"
password
"
)
&&
f
(
b
).
closest
(
"
form
"
).
length
&&
a
.
keyCode
===
13
&&
J
(
"
submit
"
,
this
,
arguments
)});
else
return
!
1
},
teardown
:
function
(
a
){
f
.
event
.
remove
(
this
,
"
.specialSubmit
"
)}});
if
(
!
f
.
support
.
changeBubbles
){
var
G
,
H
=
function
(
a
){
var
b
=
f
.
nodeName
(
a
,
"
input
"
)?
a
.
type
:
""
,
c
=
a
.
value
;
b
===
"
radio
"
||
b
===
"
checkbox
"
?
c
=
a
.
checked
:
b
===
"
select-multiple
"
?
c
=
a
.
selectedIndex
>-
1
?
f
.
map
(
a
.
options
,
function
(
a
){
return
a
.
selected
}).
join
(
"
-
"
):
""
:
f
.
nodeName
(
a
,
"
select
"
)
&&
(
c
=
a
.
selectedIndex
);
return
c
},
I
=
function
(
c
){
var
d
=
c
.
target
,
e
,
g
;
if
(
!!
x
.
test
(
d
.
nodeName
)
&&!
d
.
readOnly
){
e
=
f
.
_data
(
d
,
"
_change_data
"
),
g
=
H
(
d
),(
c
.
type
!==
"
focusout
"
||
d
.
type
!==
"
radio
"
)
&&
f
.
_data
(
d
,
"
_change_data
"
,
g
);
if
(
e
===
b
||
g
===
e
)
return
;
if
(
e
!=
null
||
g
)
c
.
type
=
"
change
"
,
c
.
liveFired
=
b
,
f
.
event
.
trigger
(
c
,
arguments
[
1
],
d
)}};
f
.
event
.
special
.
change
=
{
filters
:{
focusout
:
I
,
beforedeactivate
:
I
,
click
:
function
(
a
){
var
b
=
a
.
target
,
c
=
f
.
nodeName
(
b
,
"
input
"
)?
b
.
type
:
""
;(
c
===
"
radio
"
||
c
===
"
checkbox
"
||
f
.
nodeName
(
b
,
"
select
"
))
&&
I
.
call
(
this
,
a
)},
keydown
:
function
(
a
){
var
b
=
a
.
target
,
c
=
f
.
nodeName
(
b
,
"
input
"
)?
b
.
type
:
""
;(
a
.
keyCode
===
13
&&!
f
.
nodeName
(
b
,
"
textarea
"
)
||
a
.
keyCode
===
32
&&
(
c
===
"
checkbox
"
||
c
===
"
radio
"
)
||
c
===
"
select-multiple
"
)
&&
I
.
call
(
this
,
a
)},
beforeactivate
:
function
(
a
){
var
b
=
a
.
target
;
f
.
_data
(
b
,
"
_change_data
"
,
H
(
b
))}},
setup
:
function
(
a
,
b
){
if
(
this
.
type
===
"
file
"
)
return
!
1
;
for
(
var
c
in
G
)
f
.
event
.
add
(
this
,
c
+
"
.specialChange
"
,
G
[
c
]);
return
x
.
test
(
this
.
nodeName
)},
teardown
:
function
(
a
){
f
.
event
.
remove
(
this
,
"
.specialChange
"
);
return
x
.
test
(
this
.
nodeName
)}},
G
=
f
.
event
.
special
.
change
.
filters
,
G
.
focus
=
G
.
beforeactivate
}
f
.
support
.
focusinBubbles
||
f
.
each
({
focus
:
"
focusin
"
,
blur
:
"
focusout
"
},
function
(
a
,
b
){
function
e
(
a
){
var
c
=
f
.
event
.
fix
(
a
);
c
.
type
=
b
,
c
.
originalEvent
=
{},
f
.
event
.
trigger
(
c
,
null
,
c
.
target
),
c
.
isDefaultPrevented
()
&&
a
.
preventDefault
()}
var
d
=
0
;
f
.
event
.
special
[
b
]
=
{
setup
:
function
(){
d
++===
0
&&
c
.
addEventListener
(
a
,
e
,
!
0
)},
teardown
:
function
(){
--
d
===
0
&&
c
.
removeEventListener
(
a
,
e
,
!
0
)}}}),
f
.
each
([
"
bind
"
,
"
one
"
],
function
(
a
,
c
){
f
.
fn
[
c
]
=
function
(
a
,
d
,
e
){
var
g
;
if
(
typeof
a
==
"
object
"
){
for
(
var
h
in
a
)
this
[
c
](
h
,
d
,
a
[
h
],
e
);
return
this
}
if
(
arguments
.
length
===
2
||
d
===!
1
)
e
=
d
,
d
=
b
;
c
===
"
one
"
?(
g
=
function
(
a
){
f
(
this
).
unbind
(
a
,
g
);
return
e
.
apply
(
this
,
arguments
)},
g
.
guid
=
e
.
guid
||
f
.
guid
++
):
g
=
e
;
if
(
a
===
"
unload
"
&&
c
!==
"
one
"
)
this
.
one
(
a
,
d
,
e
);
else
for
(
var
i
=
0
,
j
=
this
.
length
;
i
<
j
;
i
++
)
f
.
event
.
add
(
this
[
i
],
a
,
g
,
d
);
return
this
}}),
f
.
fn
.
extend
({
unbind
:
function
(
a
,
b
){
if
(
typeof
a
==
"
object
"
&&!
a
.
preventDefault
)
for
(
var
c
in
a
)
this
.
unbind
(
c
,
a
[
c
]);
else
for
(
var
d
=
0
,
e
=
this
.
length
;
d
<
e
;
d
++
)
f
.
event
.
remove
(
this
[
d
],
a
,
b
);
return
this
},
delegate
:
function
(
a
,
b
,
c
,
d
){
return
this
.
live
(
b
,
c
,
d
,
a
)},
undelegate
:
function
(
a
,
b
,
c
){
return
arguments
.
length
===
0
?
this
.
unbind
(
"
live
"
):
this
.
die
(
b
,
null
,
c
,
a
)},
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
)}});
var
K
=
{
focus
:
"
focusin
"
,
blur
:
"
focusout
"
,
mouseenter
:
"
mouseover
"
,
mouseleave
:
"
mouseout
"
};
f
.
each
([
"
live
"
,
"
die
"
],
function
(
a
,
c
){
f
.
fn
[
c
]
=
function
(
a
,
d
,
e
,
g
){
var
h
,
i
=
0
,
j
,
k
,
l
,
m
=
g
||
this
.
selector
,
n
=
g
?
this
:
f
(
this
.
context
);
if
(
typeof
a
==
"
object
"
&&!
a
.
preventDefault
){
for
(
var
o
in
a
)
n
[
c
](
o
,
d
,
a
[
o
],
m
);
return
this
}
if
(
c
===
"
die
"
&&!
a
&&
g
&&
g
.
charAt
(
0
)
===
"
.
"
){
n
.
unbind
(
g
);
return
this
}
if
(
d
===!
1
||
f
.
isFunction
(
d
))
e
=
d
||
C
,
d
=
b
;
a
=
(
a
||
""
).
split
(
"
"
);
while
((
h
=
a
[
i
++
])
!=
null
){
j
=
w
.
exec
(
h
),
k
=
""
,
j
&&
(
k
=
j
[
0
],
h
=
h
.
replace
(
w
,
""
));
if
(
h
===
"
hover
"
){
a
.
push
(
"
mouseenter
"
+
k
,
"
mouseleave
"
+
k
);
continue
}
l
=
h
,
K
[
h
]?(
a
.
push
(
K
[
h
]
+
k
),
h
=
h
+
k
):
h
=
(
K
[
h
]
||
h
)
+
k
;
if
(
c
===
"
live
"
)
for
(
var
p
=
0
,
q
=
n
.
length
;
p
<
q
;
p
++
)
f
.
event
.
add
(
n
[
p
],
"
live.
"
+
M
(
h
,
m
),{
data
:
d
,
selector
:
m
,
handler
:
e
,
origType
:
h
,
origHandler
:
e
,
preType
:
l
});
else
n
.
unbind
(
"
live.
"
+
M
(
h
,
m
),
e
)}
return
this
}}),
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
"
.
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
)}),
function
(){
function
u
(
a
,
b
,
c
,
d
,
e
,
f
){
for
(
var
g
=
0
,
h
=
d
.
length
;
g
<
h
;
g
++
){
var
i
=
d
[
g
];
if
(
i
){
var
j
=!
1
;
i
=
i
[
a
];
while
(
i
){
if
(
i
.
sizcache
===
c
){
j
=
d
[
i
.
sizset
];
break
}
if
(
i
.
nodeType
===
1
){
f
||
(
i
.
sizcache
=
c
,
i
.
sizset
=
g
);
if
(
typeof
b
!=
"
string
"
){
if
(
i
===
b
){
j
=!
0
;
break
}}
else
if
(
k
.
filter
(
b
,[
i
]).
length
>
0
){
j
=
i
;
break
}}
i
=
i
[
a
]}
d
[
g
]
=
j
}}}
function
t
(
a
,
b
,
c
,
d
,
e
,
f
){
for
(
var
g
=
0
,
h
=
d
.
length
;
g
<
h
;
g
++
){
var
i
=
d
[
g
];
if
(
i
){
var
j
=!
1
;
i
=
i
[
a
];
while
(
i
){
if
(
i
.
sizcache
===
c
){
j
=
d
[
i
.
sizset
];
break
}
i
.
nodeType
===
1
&&!
f
&&
(
i
.
sizcache
=
c
,
i
.
sizset
=
g
);
if
(
i
.
nodeName
.
toLowerCase
()
===
b
){
j
=
i
;
break
}
i
=
i
[
a
]}
d
[
g
]
=
j
}}}
var
a
=
/
((?:\((?:\([^
()
]
+
\)
|
[^
()
]
+
)
+
\)
|
\[(?:\[[^\[\]]
*
\]
|
[
'"
][^
'"
]
*
[
'"
]
|
[^\[\]
'"
]
+
)
+
\]
|
\\
.|
[^
>+~,(
\[\\]
+
)
+|
[
>+~
])(\s
*,
\s
*
)?((?:
.|
\r
|
\n)
*
)
/g
,
d
=
0
,
e
=
Object
.
prototype
.
toString
,
g
=!
1
,
h
=!
0
,
i
=
/
\\
/g
,
j
=
/
\W
/
;[
0
,
0
].
sort
(
function
(){
h
=!
1
;
return
0
});
var
k
=
function
(
b
,
d
,
f
,
g
){
f
=
f
||
[],
d
=
d
||
c
;
var
h
=
d
;
if
(
d
.
nodeType
!==
1
&&
d
.
nodeType
!==
9
)
return
[];
if
(
!
b
||
typeof
b
!=
"
string
"
)
return
f
;
var
i
,
j
,
n
,
o
,
q
,
r
,
s
,
t
,
u
=!
0
,
w
=
k
.
isXML
(
d
),
x
=
[],
y
=
b
;
do
{
a
.
exec
(
""
),
i
=
a
.
exec
(
y
);
if
(
i
){
y
=
i
[
3
],
x
.
push
(
i
[
1
]);
if
(
i
[
2
]){
o
=
i
[
3
];
break
}}}
while
(
i
);
if
(
x
.
length
>
1
&&
m
.
exec
(
b
))
if
(
x
.
length
===
2
&&
l
.
relative
[
x
[
0
]])
j
=
v
(
x
[
0
]
+
x
[
1
],
d
);
else
{
j
=
l
.
relative
[
x
[
0
]]?[
d
]:
k
(
x
.
shift
(),
d
);
while
(
x
.
length
)
b
=
x
.
shift
(),
l
.
relative
[
b
]
&&
(
b
+=
x
.
shift
()),
j
=
v
(
b
,
j
)}
else
{
!
g
&&
x
.
length
>
1
&&
d
.
nodeType
===
9
&&!
w
&&
l
.
match
.
ID
.
test
(
x
[
0
])
&&!
l
.
match
.
ID
.
test
(
x
[
x
.
length
-
1
])
&&
(
q
=
k
.
find
(
x
.
shift
(),
d
,
w
),
d
=
q
.
expr
?
k
.
filter
(
q
.
expr
,
q
.
set
)[
0
]:
q
.
set
[
0
]);
if
(
d
){
q
=
g
?{
expr
:
x
.
pop
(),
set
:
p
(
g
)}:
k
.
find
(
x
.
pop
(),
x
.
length
===
1
&&
(
x
[
0
]
===
"
~
"
||
x
[
0
]
===
"
+
"
)
&&
d
.
parentNode
?
d
.
parentNode
:
d
,
w
),
j
=
q
.
expr
?
k
.
filter
(
q
.
expr
,
q
.
set
):
q
.
set
,
x
.
length
>
0
?
n
=
p
(
j
):
u
=!
1
;
while
(
x
.
length
)
r
=
x
.
pop
(),
s
=
r
,
l
.
relative
[
r
]?
s
=
x
.
pop
():
r
=
""
,
s
==
null
&&
(
s
=
d
),
l
.
relative
[
r
](
n
,
s
,
w
)}
else
n
=
x
=
[]}
n
||
(
n
=
j
),
n
||
k
.
error
(
r
||
b
);
if
(
e
.
call
(
n
)
===
"
[object Array]
"
)
if
(
!
u
)
f
.
push
.
apply
(
f
,
n
);
else
if
(
d
&&
d
.
nodeType
===
1
)
for
(
t
=
0
;
n
[
t
]
!=
null
;
t
++
)
n
[
t
]
&&
(
n
[
t
]
===!
0
||
n
[
t
].
nodeType
===
1
&&
k
.
contains
(
d
,
n
[
t
]))
&&
f
.
push
(
j
[
t
]);
else
for
(
t
=
0
;
n
[
t
]
!=
null
;
t
++
)
n
[
t
]
&&
n
[
t
].
nodeType
===
1
&&
f
.
push
(
j
[
t
]);
else
p
(
n
,
f
);
o
&&
(
k
(
o
,
h
,
f
,
g
),
k
.
uniqueSort
(
f
));
return
f
};
k
.
uniqueSort
=
function
(
a
){
if
(
r
){
g
=
h
,
a
.
sort
(
r
);
if
(
g
)
for
(
var
b
=
1
;
b
<
a
.
length
;
b
++
)
a
[
b
]
===
a
[
b
-
1
]
&&
a
.
splice
(
b
--
,
1
)}
return
a
},
k
.
matches
=
function
(
a
,
b
){
return
k
(
a
,
null
,
null
,
b
)},
k
.
matchesSelector
=
function
(
a
,
b
){
return
k
(
b
,
null
,
null
,[
a
]).
length
>
0
},
k
.
find
=
function
(
a
,
b
,
c
){
var
d
;
if
(
!
a
)
return
[];
for
(
var
e
=
0
,
f
=
l
.
order
.
length
;
e
<
f
;
e
++
){
var
g
,
h
=
l
.
order
[
e
];
if
(
g
=
l
.
leftMatch
[
h
].
exec
(
a
)){
var
j
=
g
[
1
];
g
.
splice
(
1
,
1
);
if
(
j
.
substr
(
j
.
length
-
1
)
!==
"
\\
"
){
g
[
1
]
=
(
g
[
1
]
||
""
).
replace
(
i
,
""
),
d
=
l
.
find
[
h
](
g
,
b
,
c
);
if
(
d
!=
null
){
a
=
a
.
replace
(
l
.
match
[
h
],
""
);
break
}}}}
d
||
(
d
=
typeof
b
.
getElementsByTagName
!=
"
undefined
"
?
b
.
getElementsByTagName
(
"
*
"
):[]);
return
{
set
:
d
,
expr
:
a
}},
k
.
filter
=
function
(
a
,
c
,
d
,
e
){
var
f
,
g
,
h
=
a
,
i
=
[],
j
=
c
,
m
=
c
&&
c
[
0
]
&&
k
.
isXML
(
c
[
0
]);
while
(
a
&&
c
.
length
){
for
(
var
n
in
l
.
filter
)
if
((
f
=
l
.
leftMatch
[
n
].
exec
(
a
))
!=
null
&&
f
[
2
]){
var
o
,
p
,
q
=
l
.
filter
[
n
],
r
=
f
[
1
];
g
=!
1
,
f
.
splice
(
1
,
1
);
if
(
r
.
substr
(
r
.
length
-
1
)
===
"
\\
"
)
continue
;
j
===
i
&&
(
i
=
[]);
if
(
l
.
preFilter
[
n
]){
f
=
l
.
preFilter
[
n
](
f
,
j
,
d
,
i
,
e
,
m
);
if
(
!
f
)
g
=
o
=!
0
;
else
if
(
f
===!
0
)
continue
}
if
(
f
)
for
(
var
s
=
0
;(
p
=
j
[
s
])
!=
null
;
s
++
)
if
(
p
){
o
=
q
(
p
,
f
,
s
,
j
);
var
t
=
e
^!!
o
;
d
&&
o
!=
null
?
t
?
g
=!
0
:
j
[
s
]
=!
1
:
t
&&
(
i
.
push
(
p
),
g
=!
0
)}
if
(
o
!==
b
){
d
||
(
j
=
i
),
a
=
a
.
replace
(
l
.
match
[
n
],
""
);
if
(
!
g
)
return
[];
break
}}
if
(
a
===
h
)
if
(
g
==
null
)
k
.
error
(
a
);
else
break
;
h
=
a
}
return
j
},
k
.
error
=
function
(
a
){
throw
"
Syntax error, unrecognized expression:
"
+
a
};
var
l
=
k
.
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
&&!
j
.
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
&&
k
.
filter
(
b
,
a
,
!
0
)},
"
>
"
:
function
(
a
,
b
){
var
c
,
d
=
typeof
b
==
"
string
"
,
e
=
0
,
f
=
a
.
length
;
if
(
d
&&!
j
.
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
&&
k
.
filter
(
b
,
a
,
!
0
)}},
""
:
function
(
a
,
b
,
c
){
var
e
,
f
=
d
++
,
g
=
u
;
typeof
b
==
"
string
"
&&!
j
.
test
(
b
)
&&
(
b
=
b
.
toLowerCase
(),
e
=
b
,
g
=
t
),
g
(
"
parentNode
"
,
b
,
f
,
a
,
e
,
c
)},
"
~
"
:
function
(
a
,
b
,
c
){
var
e
,
f
=
d
++
,
g
=
u
;
typeof
b
==
"
string
"
&&!
j
.
test
(
b
)
&&
(
b
=
b
.
toLowerCase
(),
e
=
b
,
g
=
t
),
g
(
"
previousSibling
"
,
b
,
f
,
a
,
e
,
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
(
i
,
""
)
+
"
"
;
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
(
i
,
""
)},
TAG
:
function
(
a
,
b
){
return
a
[
1
].
replace
(
i
,
""
).
toLowerCase
()},
CHILD
:
function
(
a
){
if
(
a
[
1
]
===
"
nth
"
){
a
[
2
]
||
k
.
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
]
&&
k
.
error
(
a
[
0
]);
a
[
0
]
=
d
++
;
return
a
},
ATTR
:
function
(
a
,
b
,
c
,
d
,
e
,
f
){
var
g
=
a
[
1
]
=
a
[
1
].
replace
(
i
,
""
);
!
f
&&
l
.
attrMap
[
g
]
&&
(
a
[
1
]
=
l
.
attrMap
[
g
]),
a
[
4
]
=
(
a
[
4
]
||
a
[
5
]
||
""
).
replace
(
i
,
""
),
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
]
=
k
(
b
[
3
],
null
,
null
,
c
);
else
{
var
g
=
k
.
filter
(
b
[
3
],
c
,
d
,
!
0
^
f
);
d
||
e
.
push
.
apply
(
e
,
g
);
return
!
1
}
else
if
(
l
.
match
.
POS
.
test
(
b
[
0
])
||
l
.
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
!!
k
(
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
=
l
.
filters
[
e
];
if
(
f
)
return
f
(
a
,
c
,
b
,
d
);
if
(
e
===
"
contains
"
)
return
(
a
.
textContent
||
a
.
innerText
||
k
.
getText
([
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
}
k
.
error
(
e
)},
CHILD
:
function
(
a
,
b
){
var
c
=
b
[
1
],
d
=
a
;
switch
(
c
){
case
"
only
"
:
case
"
first
"
:
while
(
d
=
d
.
previousSibling
)
if
(
d
.
nodeType
===
1
)
return
!
1
;
if
(
c
===
"
first
"
)
return
!
0
;
d
=
a
;
case
"
last
"
:
while
(
d
=
d
.
nextSibling
)
if
(
d
.
nodeType
===
1
)
return
!
1
;
return
!
0
;
case
"
nth
"
:
var
e
=
b
[
2
],
f
=
b
[
3
];
if
(
e
===
1
&&
f
===
0
)
return
!
0
;
var
g
=
b
[
0
],
h
=
a
.
parentNode
;
if
(
h
&&
(
h
.
sizcache
!==
g
||!
a
.
nodeIndex
)){
var
i
=
0
;
for
(
d
=
h
.
firstChild
;
d
;
d
=
d
.
nextSibling
)
d
.
nodeType
===
1
&&
(
d
.
nodeIndex
=++
i
);
h
.
sizcache
=
g
}
var
j
=
a
.
nodeIndex
-
f
;
return
e
===
0
?
j
===
0
:
j
%
e
===
0
&&
j
/
e
>=
0
}},
ID
:
function
(
a
,
b
){
return
a
.
nodeType
===
1
&&
a
.
getAttribute
(
"
id
"
)
===
b
},
TAG
:
function
(
a
,
b
){
return
b
===
"
*
"
&&
a
.
nodeType
===
1
||
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
=
l
.
attrHandle
[
c
]?
l
.
attrHandle
[
c
](
a
):
a
[
c
]
!=
null
?
a
[
c
]:
a
.
getAttribute
(
c
),
e
=
d
+
""
,
f
=
b
[
2
],
g
=
b
[
4
];
return
d
==
null
?
f
===
"
!=
"
:
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
=
l
.
setFilters
[
e
];
if
(
f
)
return
f
(
a
,
c
,
b
,
d
)}}},
m
=
l
.
match
.
POS
,
n
=
function
(
a
,
b
){
return
"
\\
"
+
(
b
-
0
+
1
)};
for
(
var
o
in
l
.
match
)
l
.
match
[
o
]
=
new
RegExp
(
l
.
match
[
o
].
source
+
/
(?![^\[]
*
\])(?![^\(]
*
\))
/
.
source
),
l
.
leftMatch
[
o
]
=
new
RegExp
(
/
(
^
(?:
.|
\r
|
\n)
*
?)
/
.
source
+
l
.
match
[
o
].
source
.
replace
(
/
\\(\d
+
)
/g
,
n
));
var
p
=
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
(
q
){
p
=
function
(
a
,
b
){
var
c
=
0
,
d
=
b
||
[];
if
(
e
.
call
(
a
)
===
"
[object Array]
"
)
Array
.
prototype
.
push
.
apply
(
d
,
a
);
else
if
(
typeof
a
.
length
==
"
number
"
)
for
(
var
f
=
a
.
length
;
c
<
f
;
c
++
)
d
.
push
(
a
[
c
]);
else
for
(;
a
[
c
];
c
++
)
d
.
push
(
a
[
c
]);
return
d
}}
var
r
,
s
;
c
.
documentElement
.
compareDocumentPosition
?
r
=
function
(
a
,
b
){
if
(
a
===
b
){
g
=!
0
;
return
0
}
if
(
!
a
.
compareDocumentPosition
||!
b
.
compareDocumentPosition
)
return
a
.
compareDocumentPosition
?
-
1
:
1
;
return
a
.
compareDocumentPosition
(
b
)
&
4
?
-
1
:
1
}:(
r
=
function
(
a
,
b
){
if
(
a
===
b
){
g
=!
0
;
return
0
}
if
(
a
.
sourceIndex
&&
b
.
sourceIndex
)
return
a
.
sourceIndex
-
b
.
sourceIndex
;
var
c
,
d
,
e
=
[],
f
=
[],
h
=
a
.
parentNode
,
i
=
b
.
parentNode
,
j
=
h
;
if
(
h
===
i
)
return
s
(
a
,
b
);
if
(
!
h
)
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
s
(
e
[
k
],
f
[
k
]);
return
k
===
c
?
s
(
a
,
f
[
k
],
-
1
):
s
(
e
[
k
],
b
,
1
)},
s
=
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
}),
k
.
getText
=
function
(
a
){
var
b
=
""
,
c
;
for
(
var
d
=
0
;
a
[
d
];
d
++
)
c
=
a
[
d
],
c
.
nodeType
===
3
||
c
.
nodeType
===
4
?
b
+=
c
.
nodeValue
:
c
.
nodeType
!==
8
&&
(
b
+=
k
.
getText
(
c
.
childNodes
));
return
b
},
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
)
&&
(
l
.
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
:[]}},
l
.
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
&&
(
l
.
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
"
)
!==
"
#
"
&&
(
l
.
attrHandle
.
href
=
function
(
a
){
return
a
.
getAttribute
(
"
href
"
,
2
)}),
a
=
null
}(),
c
.
querySelectorAll
&&
function
(){
var
a
=
k
,
b
=
c
.
createElement
(
"
div
"
),
d
=
"
__sizzle__
"
;
b
.
innerHTML
=
"
<p class='TEST'></p>
"
;
if
(
!
b
.
querySelectorAll
||
b
.
querySelectorAll
(
"
.TEST
"
).
length
!==
0
){
k
=
function
(
b
,
e
,
f
,
g
){
e
=
e
||
c
;
if
(
!
g
&&!
k
.
isXML
(
e
)){
var
h
=
/^
(\w
+$
)
|^
\.([\w\-]
+$
)
|^#
([\w\-]
+$
)
/
.
exec
(
b
);
if
(
h
&&
(
e
.
nodeType
===
1
||
e
.
nodeType
===
9
)){
if
(
h
[
1
])
return
p
(
e
.
getElementsByTagName
(
b
),
f
);
if
(
h
[
2
]
&&
l
.
find
.
CLASS
&&
e
.
getElementsByClassName
)
return
p
(
e
.
getElementsByClassName
(
h
[
2
]),
f
)}
if
(
e
.
nodeType
===
9
){
if
(
b
===
"
body
"
&&
e
.
body
)
return
p
([
e
.
body
],
f
);
if
(
h
&&
h
[
3
]){
var
i
=
e
.
getElementById
(
h
[
3
]);
if
(
!
i
||!
i
.
parentNode
)
return
p
([],
f
);
if
(
i
.
id
===
h
[
3
])
return
p
([
i
],
f
)}
try
{
return
p
(
e
.
querySelectorAll
(
b
),
f
)}
catch
(
j
){}}
else
if
(
e
.
nodeType
===
1
&&
e
.
nodeName
.
toLowerCase
()
!==
"
object
"
){
var
m
=
e
,
n
=
e
.
getAttribute
(
"
id
"
),
o
=
n
||
d
,
q
=
e
.
parentNode
,
r
=
/^
\s
*
[
+~
]
/
.
test
(
b
);
n
?
o
=
o
.
replace
(
/'/g
,
"
\\
$&
"
):
e
.
setAttribute
(
"
id
"
,
o
),
r
&&
q
&&
(
e
=
e
.
parentNode
);
try
{
if
(
!
r
||
q
)
return
p
(
e
.
querySelectorAll
(
"
[id='
"
+
o
+
"
']
"
+
b
),
f
)}
catch
(
s
){}
finally
{
n
||
m
.
removeAttribute
(
"
id
"
)}}}
return
a
(
b
,
e
,
f
,
g
)};
for
(
var
e
in
a
)
k
[
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
}
k
.
matchesSelector
=
function
(
a
,
c
){
c
=
c
.
replace
(
/
\=\s
*
([^
'"
\]]
*
)\s
*
\]
/g
,
"
='$1']
"
);
if
(
!
k
.
isXML
(
a
))
try
{
if
(
e
||!
l
.
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
k
(
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
;
l
.
order
.
splice
(
1
,
0
,
"
CLASS
"
),
l
.
find
.
CLASS
=
function
(
a
,
b
,
c
){
if
(
typeof
b
.
getElementsByClassName
!=
"
undefined
"
&&!
c
)
return
b
.
getElementsByClassName
(
a
[
1
])},
a
=
null
}}(),
c
.
documentElement
.
contains
?
k
.
contains
=
function
(
a
,
b
){
return
a
!==
b
&&
(
a
.
contains
?
a
.
contains
(
b
):
!
0
)}:
c
.
documentElement
.
compareDocumentPosition
?
k
.
contains
=
function
(
a
,
b
){
return
!!
(
a
.
compareDocumentPosition
(
b
)
&
16
)}:
k
.
contains
=
function
(){
return
!
1
},
k
.
isXML
=
function
(
a
){
var
b
=
(
a
?
a
.
ownerDocument
||
a
:
0
).
documentElement
;
return
b
?
b
.
nodeName
!==
"
HTML
"
:
!
1
};
var
v
=
function
(
a
,
b
){
var
c
,
d
=
[],
e
=
""
,
f
=
b
.
nodeType
?[
b
]:
b
;
while
(
c
=
l
.
match
.
PSEUDO
.
exec
(
a
))
e
+=
c
[
0
],
a
=
a
.
replace
(
l
.
match
.
PSEUDO
,
""
);
a
=
l
.
relative
[
a
]?
a
+
"
*
"
:
a
;
for
(
var
g
=
0
,
h
=
f
.
length
;
g
<
h
;
g
++
)
k
(
a
,
f
[
g
],
d
);
return
k
.
filter
(
e
,
d
)};
f
.
find
=
k
,
f
.
expr
=
k
.
selectors
,
f
.
expr
[
"
:
"
]
=
f
.
expr
.
filters
,
f
.
unique
=
k
.
uniqueSort
,
f
.
text
=
k
.
getText
,
f
.
isXMLDoc
=
k
.
isXML
,
f
.
contains
=
k
.
contains
}();
var
N
=
/Until$/
,
O
=
/^
(?:
parents|prevUntil|prevAll
)
/
,
P
=
/,/
,
Q
=
/^.
[^
:#
\[\.
,
]
*$/
,
R
=
Array
.
prototype
.
slice
,
S
=
f
.
expr
.
match
.
POS
,
T
=
{
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
(
V
(
this
,
a
,
!
1
),
"
not
"
,
a
)},
filter
:
function
(
a
){
return
this
.
pushStack
(
V
(
this
,
a
,
!
0
),
"
filter
"
,
a
)},
is
:
function
(
a
){
return
!!
a
&&
(
typeof
a
==
"
string
"
?
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
,
i
,
j
=
{},
k
=
1
;
if
(
g
&&
a
.
length
){
for
(
d
=
0
,
e
=
a
.
length
;
d
<
e
;
d
++
)
i
=
a
[
d
],
j
[
i
]
||
(
j
[
i
]
=
S
.
test
(
i
)?
f
(
i
,
b
||
this
.
context
):
i
);
while
(
g
&&
g
.
ownerDocument
&&
g
!==
b
){
for
(
i
in
j
)
h
=
j
[
i
],(
h
.
jquery
?
h
.
index
(
g
)
>-
1
:
f
(
g
).
is
(
h
))
&&
c
.
push
({
selector
:
i
,
elem
:
g
,
level
:
k
});
g
=
g
.
parentNode
,
k
++
}}
return
c
}
var
l
=
S
.
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
(
l
?
l
.
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
(
U
(
c
[
0
])
||
U
(
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
=
R
.
call
(
arguments
);
N
.
test
(
a
)
||
(
d
=
c
),
d
&&
typeof
d
==
"
string
"
&&
(
e
=
f
.
filter
(
d
,
e
)),
e
=
this
.
length
>
1
&&!
T
[
a
]?
f
.
unique
(
e
):
e
,(
this
.
length
>
1
||
P
.
test
(
d
))
&&
O
.
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
W
=
/ jQuery
\d
+="
(?:\d
+|null
)
"/g
,
X
=
/^
\s
+/
,
Y
=
/<
(?!
area|br|col|embed|hr|img|input|link|meta|param
)(([\w
:
]
+
)[^
>
]
*
)\/
>/ig
,
Z
=
/<
([\w
:
]
+
)
/
,
$
=
/<tbody/i
,
_
=
/<|&#
?\w
+;/
,
ba
=
/<
(?:
script|object|embed|option|style
)
/i
,
bb
=
/checked
\s
*
(?:[^
=
]
|=
\s
*.checked.
)
/i
,
bc
=
/
\/(
java|ecma
)
script/i
,
bd
=
/^
\s
*<!
(?:\[
CDATA
\[
|
\-\-)
/
,
be
=
{
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
,
""
,
""
]};
be
.
optgroup
=
be
.
option
,
be
.
tbody
=
be
.
tfoot
=
be
.
colgroup
=
be
.
caption
=
be
.
thead
,
be
.
th
=
be
.
td
,
f
.
support
.
htmlSerialize
||
(
be
.
_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
(
W
,
""
):
null
;
if
(
typeof
a
==
"
string
"
&&!
ba
.
test
(
a
)
&&
(
f
.
support
.
leadingWhitespace
||!
X
.
test
(
a
))
&&!
be
[(
Z
.
exec
(
a
)
||
[
""
,
""
])[
1
].
toLowerCase
()]){
a
=
a
.
replace
(
Y
,
"
<$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
"
&&
bb
.
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
?
bf
(
this
[
l
],
g
):
this
[
l
],
e
.
cacheable
||
m
>
1
&&
l
<
n
?
f
.
clone
(
h
,
!
0
,
!
0
):
h
)}
k
.
length
&&
f
.
each
(
k
,
bl
)}
return
this
}}),
f
.
buildFragment
=
function
(
a
,
b
,
d
){
var
e
,
g
,
h
,
i
;
b
&&
b
[
0
]
&&
(
i
=
b
[
0
].
ownerDocument
||
b
[
0
]),
i
.
createDocumentFragment
||
(
i
=
c
),
a
.
length
===
1
&&
typeof
a
[
0
]
==
"
string
"
&&
a
[
0
].
length
<
512
&&
i
===
c
&&
a
[
0
].
charAt
(
0
)
===
"
<
"
&&!
ba
.
test
(
a
[
0
])
&&
(
f
.
support
.
checkClone
||!
bb
.
test
(
a
[
0
]))
&&
(
g
=!
0
,
h
=
f
.
fragments
[
a
[
0
]],
h
&&
h
!==
1
&&
(
e
=
h
)),
e
||
(
e
=
i
.
createDocumentFragment
(),
f
.
clean
(
a
,
i
,
e
,
d
)),
g
&&
(
f
.
fragments
[
a
[
0
]]
=
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
)){
bh
(
a
,
d
),
e
=
bi
(
a
),
g
=
bi
(
d
);
for
(
h
=
0
;
e
[
h
];
++
h
)
g
[
h
]
&&
bh
(
e
[
h
],
g
[
h
])}
if
(
b
){
bg
(
a
,
d
);
if
(
c
){
e
=
bi
(
a
),
g
=
bi
(
d
);
for
(
h
=
0
;
e
[
h
];
++
h
)
bg
(
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
(
!
_
.
test
(
k
))
k
=
b
.
createTextNode
(
k
);
else
{
k
=
k
.
replace
(
Y
,
"
<$1></$2>
"
);
var
l
=
(
Z
.
exec
(
k
)
||
[
""
,
""
])[
1
].
toLowerCase
(),
m
=
be
[
l
]
||
be
.
_default
,
n
=
m
[
0
],
o
=
b
.
createElement
(
"
div
"
);
o
.
innerHTML
=
m
[
1
]
+
k
+
m
[
2
];
while
(
n
--
)
o
=
o
.
lastChild
;
if
(
!
f
.
support
.
tbody
){
var
p
=
$
.
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
&&
X
.
test
(
k
)
&&
o
.
insertBefore
(
b
.
createTextNode
(
X
.
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
++
)
bk
(
k
[
i
]);
else
bk
(
k
);
k
.
nodeType
?
h
.
push
(
k
):
h
=
f
.
merge
(
h
,
k
)}
if
(
d
){
g
=
function
(
a
){
return
!
a
.
type
||
bc
.
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
.
expando
,
g
=
f
.
event
.
special
,
h
=
f
.
support
.
deleteExpando
;
for
(
var
i
=
0
,
j
;(
j
=
a
[
i
])
!=
null
;
i
++
){
if
(
j
.
nodeName
&&
f
.
noData
[
j
.
nodeName
.
toLowerCase
()])
continue
;
c
=
j
[
f
.
expando
];
if
(
c
){
b
=
d
[
c
]
&&
d
[
c
][
e
];
if
(
b
&&
b
.
events
){
for
(
var
k
in
b
.
events
)
g
[
k
]?
f
.
event
.
remove
(
j
,
k
):
f
.
removeEvent
(
j
,
k
,
b
.
handle
);
b
.
handle
&&
(
b
.
handle
.
elem
=
null
)}
h
?
delete
j
[
f
.
expando
]:
j
.
removeAttribute
&&
j
.
removeAttribute
(
f
.
expando
),
delete
d
[
c
]}}}});
var
bm
=
/alpha
\([^
)
]
*
\)
/i
,
bn
=
/opacity=
([^
)
]
*
)
/
,
bo
=
/
([
A-Z
]
|^ms
)
/g
,
bp
=
/^-
?\d
+
(?:
px
)?
$/i
,
bq
=
/^-
?\d
/
,
br
=
/^
([\-
+
])
=
([\-
+.
\d
e
]
+
)
/
,
bs
=
{
position
:
"
absolute
"
,
visibility
:
"
hidden
"
,
display
:
"
block
"
},
bt
=
[
"
Left
"
,
"
Right
"
],
bu
=
[
"
Top
"
,
"
Bottom
"
],
bv
,
bw
,
bx
;
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
=
bv
(
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
=
br
.
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
(
bv
)
return
bv
(
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
by
(
a
,
b
,
d
);
f
.
swap
(
a
,
bs
,
function
(){
e
=
by
(
a
,
b
,
d
)});
return
e
}},
set
:
function
(
a
,
b
){
if
(
!
bp
.
test
(
b
))
return
b
;
b
=
parseFloat
(
b
);
if
(
b
>=
0
)
return
b
+
"
px
"
}}}),
f
.
support
.
opacity
||
(
f
.
cssHooks
.
opacity
=
{
get
:
function
(
a
,
b
){
return
bn
.
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
.
isNaN
(
b
)?
""
:
"
alpha(opacity=
"
+
b
*
100
+
"
)
"
,
g
=
d
&&
d
.
filter
||
c
.
filter
||
""
;
c
.
zoom
=
1
;
if
(
b
>=
1
&&
f
.
trim
(
g
.
replace
(
bm
,
""
))
===
""
){
c
.
removeAttribute
(
"
filter
"
);
if
(
d
&&!
d
.
filter
)
return
}
c
.
filter
=
bm
.
test
(
g
)?
g
.
replace
(
bm
,
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
=
bv
(
a
,
"
margin-right
"
,
"
marginRight
"
):
c
=
a
.
style
.
marginRight
});
return
c
}})}),
c
.
defaultView
&&
c
.
defaultView
.
getComputedStyle
&&
(
bw
=
function
(
a
,
c
){
var
d
,
e
,
g
;
c
=
c
.
replace
(
bo
,
"
-$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
&&
(
bx
=
function
(
a
,
b
){
var
c
,
d
=
a
.
currentStyle
&&
a
.
currentStyle
[
b
],
e
=
a
.
runtimeStyle
&&
a
.
runtimeStyle
[
b
],
f
=
a
.
style
;
!
bp
.
test
(
d
)
&&
bq
.
test
(
d
)
&&
(
c
=
f
.
left
,
e
&&
(
a
.
runtimeStyle
.
left
=
a
.
currentStyle
.
left
),
f
.
left
=
b
===
"
fontSize
"
?
"
1em
"
:
d
||
0
,
d
=
f
.
pixelLeft
+
"
px
"
,
f
.
left
=
c
,
e
&&
(
a
.
runtimeStyle
.
left
=
e
));
return
d
===
""
?
"
auto
"
:
d
}),
bv
=
bw
||
bx
,
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
.
display
||
f
.
css
(
a
,
"
display
"
))
===
"
none
"
},
f
.
expr
.
filters
.
visible
=
function
(
a
){
return
!
f
.
expr
.
filters
.
hidden
(
a
)});
var
bz
=
/%20/g
,
bA
=
/
\[\]
$/
,
bB
=
/
\r?\n
/g
,
bC
=
/#.*$/
,
bD
=
/^
(
.*
?)
:
[
\t]
*
([^\r\n]
*
)\r?
$/mg
,
bE
=
/^
(?:
color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week
)
$/i
,
bF
=
/^
(?:
about|app|app
\-
storage|.+
\-
extension|file|res|widget
)
:$/
,
bG
=
/^
(?:
GET|HEAD
)
$/
,
bH
=
/^
\/\/
/
,
bI
=
/
\?
/
,
bJ
=
/<script
\b[^
<
]
*
(?:(?!
<
\/
script>
)
<
[^
<
]
*
)
*<
\/
script>/gi
,
bK
=
/^
(?:
select|textarea
)
/i
,
bL
=
/
\s
+/
,
bM
=
/
([
?&
])
_=
[^
&
]
*/
,
bN
=
/^
([\w\+\.\-]
+:
)(?:\/\/([^\/
?#:
]
*
)(?:
:
(\d
+
))?)?
/
,
bO
=
f
.
fn
.
load
,
bP
=
{},
bQ
=
{},
bR
,
bS
,
bT
=
[
"
*/
"
]
+
[
"
*
"
];
try
{
bR
=
e
.
href
}
catch
(
bU
){
bR
=
c
.
createElement
(
"
a
"
),
bR
.
href
=
""
,
bR
=
bR
.
href
}
bS
=
bN
.
exec
(
bR
.
toLowerCase
())
||
[],
f
.
fn
.
extend
({
load
:
function
(
a
,
c
,
d
){
if
(
typeof
a
!=
"
string
"
&&
bO
)
return
bO
.
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
(
bJ
,
""
)).
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
||
bK
.
test
(
this
.
nodeName
)
||
bE
.
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
(
bB
,
"
\r\n
"
)}}):{
name
:
b
.
name
,
value
:
c
.
replace
(
bB
,
"
\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
?
bX
(
a
,
f
.
ajaxSettings
):(
b
=
a
,
a
=
f
.
ajaxSettings
),
bX
(
a
,
b
);
return
a
},
ajaxSettings
:{
url
:
bR
,
isLocal
:
bF
.
test
(
bS
[
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
"
,
"
*
"
:
bT
},
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
:
bV
(
bP
),
ajaxTransport
:
bV
(
bQ
),
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
?
bZ
(
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
=
b$
(
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
.
resolveWith
(
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
.
_Deferred
(),
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
=
bD
.
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
.
done
,
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
(
bC
,
""
).
replace
(
bH
,
bS
[
1
]
+
"
//
"
),
d
.
dataTypes
=
f
.
trim
(
d
.
dataType
||
"
*
"
).
toLowerCase
().
split
(
bL
),
d
.
crossDomain
==
null
&&
(
r
=
bN
.
exec
(
d
.
url
.
toLowerCase
()),
d
.
crossDomain
=!
(
!
r
||
r
[
1
]
==
bS
[
1
]
&&
r
[
2
]
==
bS
[
2
]
&&
(
r
[
3
]
||
(
r
[
1
]
===
"
http:
"
?
80
:
443
))
==
(
bS
[
3
]
||
(
bS
[
1
]
===
"
http:
"
?
80
:
443
)))),
d
.
data
&&
d
.
processData
&&
typeof
d
.
data
!=
"
string
"
&&
(
d
.
data
=
f
.
param
(
d
.
data
,
d
.
traditional
)),
bW
(
bP
,
d
,
c
,
v
);
if
(
s
===
2
)
return
!
1
;
t
=
d
.
global
,
d
.
type
=
d
.
type
.
toUpperCase
(),
d
.
hasContent
=!
bG
.
test
(
d
.
type
),
t
&&
f
.
active
++===
0
&&
f
.
event
.
trigger
(
"
ajaxStart
"
);
if
(
!
d
.
hasContent
){
d
.
data
&&
(
d
.
url
+=
(
bI
.
test
(
d
.
url
)?
"
&
"
:
"
?
"
)
+
d
.
data
,
delete
d
.
data
),
k
=
d
.
url
;
if
(
d
.
cache
===!
1
){
var
x
=
f
.
now
(),
y
=
d
.
url
.
replace
(
bM
,
"
$1_=
"
+
x
);
d
.
url
=
y
+
(
y
===
d
.
url
?(
bI
.
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
]
!==
"
*
"
?
"
,
"
+
bT
+
"
; 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
=
bW
(
bQ
,
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
)
bY
(
g
,
a
[
g
],
c
,
e
);
return
d
.
join
(
"
&
"
).
replace
(
bz
,
"
+
"
)}}),
f
.
extend
({
active
:
0
,
lastModified
:{},
etag
:{}});
var
b_
=
f
.
now
(),
ca
=
/
(\=)\?(
&|$
)
|
\?\?
/i
;
f
.
ajaxSetup
({
jsonp
:
"
callback
"
,
jsonpCallback
:
function
(){
return
f
.
expando
+
"
_
"
+
b_
++
}}),
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
&&
(
ca
.
test
(
b
.
url
)
||
e
&&
ca
.
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
(
ca
,
l
),
b
.
url
===
j
&&
(
e
&&
(
k
=
k
.
replace
(
ca
,
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
cb
=
a
.
ActiveXObject
?
function
(){
for
(
var
a
in
cd
)
cd
[
a
](
0
,
1
)}:
!
1
,
cc
=
0
,
cd
;
f
.
ajaxSettings
.
xhr
=
a
.
ActiveXObject
?
function
(){
return
!
this
.
isLocal
&&
ce
()
||
cf
()}:
ce
,
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
,
cb
&&
delete
cd
[
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
=++
cc
,
cb
&&
(
cd
||
(
cd
=
{},
f
(
a
).
unload
(
cb
)),
cd
[
i
]
=
d
),
h
.
onreadystatechange
=
d
)},
abort
:
function
(){
d
&&
d
(
0
,
1
)}}}});
var
cg
=
{},
ch
,
ci
,
cj
=
/^
(?:
toggle|show|hide
)
$/
,
ck
=
/^
([
+
\-]
=
)?([\d
+.
\-]
+
)([
a-z%
]
*
)
$/i
,
cl
,
cm
=
[[
"
height
"
,
"
marginTop
"
,
"
marginBottom
"
,
"
paddingTop
"
,
"
paddingBottom
"
],[
"
width
"
,
"
marginLeft
"
,
"
marginRight
"
,
"
paddingLeft
"
,
"
paddingRight
"
],[
"
opacity
"
]],
cn
;
f
.
fn
.
extend
({
show
:
function
(
a
,
b
,
c
){
var
d
,
e
;
if
(
a
||
a
===
0
)
return
this
.
animate
(
cq
(
"
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
"
,
cr
(
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
(
cq
(
"
hide
"
,
3
),
a
,
b
,
c
);
for
(
var
d
=
0
,
e
=
this
.
length
;
d
<
e
;
d
++
)
if
(
this
[
d
].
style
){
var
g
=
f
.
css
(
this
[
d
],
"
display
"
);
g
!==
"
none
"
&&!
f
.
_data
(
this
[
d
],
"
olddisplay
"
)
&&
f
.
_data
(
this
[
d
],
"
olddisplay
"
,
g
)}
for
(
d
=
0
;
d
<
e
;
d
++
)
this
[
d
].
style
&&
(
this
[
d
].
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
(
cq
(
"
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
){
var
e
=
f
.
speed
(
b
,
c
,
d
);
if
(
f
.
isEmptyObject
(
a
))
return
this
.
each
(
e
.
complete
,[
!
1
]);
a
=
f
.
extend
({},
a
);
return
this
[
e
.
queue
===!
1
?
"
each
"
:
"
queue
"
](
function
(){
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
?(
j
=
cr
(
this
.
nodeName
),
j
===
"
inline
"
?
this
.
style
.
display
=
"
inline-block
"
:(
this
.
style
.
display
=
"
inline
"
,
this
.
style
.
zoom
=
1
)):
this
.
style
.
display
=
"
inline-block
"
))}
b
.
overflow
!=
null
&&
(
this
.
style
.
overflow
=
"
hidden
"
);
for
(
i
in
a
)
k
=
new
f
.
fx
(
this
,
b
,
i
),
h
=
a
[
i
],
cj
.
test
(
h
)?
k
[
h
===
"
toggle
"
?
d
?
"
show
"
:
"
hide
"
:
h
]():(
l
=
ck
.
exec
(
h
),
m
=
k
.
cur
(),
l
?(
n
=
parseFloat
(
l
[
2
]),
o
=
l
[
3
]
||
(
f
.
cssNumber
[
i
]?
""
:
"
px
"
),
o
!==
"
px
"
&&
(
f
.
style
(
this
,
i
,(
n
||
1
)
+
o
),
m
=
(
n
||
1
)
/
k
.
cur
()
*
m
,
f
.
style
(
this
,
i
,
m
+
o
)),
l
[
1
]
&&
(
n
=
(
l
[
1
]
===
"
-=
"
?
-
1
:
1
)
*
n
+
m
),
k
.
custom
(
m
,
n
,
o
)):
k
.
custom
(
m
,
h
,
""
));
return
!
0
})},
stop
:
function
(
a
,
b
){
a
&&
this
.
queue
([]),
this
.
each
(
function
(){
var
a
=
f
.
timers
,
c
=
a
.
length
;
b
||
f
.
_unmark
(
!
0
,
this
);
while
(
c
--
)
a
[
c
].
elem
===
this
&&
(
b
&&
a
[
c
](
!
0
),
a
.
splice
(
c
,
1
))}),
b
||
this
.
dequeue
();
return
this
}}),
f
.
each
({
slideDown
:
cq
(
"
show
"
,
1
),
slideUp
:
cq
(
"
hide
"
,
1
),
slideToggle
:
cq
(
"
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
,
d
.
old
=
d
.
complete
,
d
.
complete
=
function
(
a
){
f
.
isFunction
(
d
.
old
)
&&
d
.
old
.
call
(
this
),
d
.
queue
!==!
1
?
f
.
dequeue
(
this
):
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
,
b
,
c
){
function
g
(
a
){
return
d
.
step
(
a
)}
var
d
=
this
,
e
=
f
.
fx
;
this
.
startTime
=
cn
||
co
(),
this
.
start
=
a
,
this
.
end
=
b
,
this
.
unit
=
c
||
this
.
unit
||
(
f
.
cssNumber
[
this
.
prop
]?
""
:
"
px
"
),
this
.
now
=
this
.
start
,
this
.
pos
=
this
.
state
=
0
,
g
.
elem
=
this
.
elem
,
g
()
&&
f
.
timers
.
push
(
g
)
&&!
cl
&&
(
cl
=
setInterval
(
e
.
tick
,
e
.
interval
))},
show
:
function
(){
this
.
options
.
orig
[
this
.
prop
]
=
f
.
style
(
this
.
elem
,
this
.
prop
),
this
.
options
.
show
=!
0
,
this
.
custom
(
this
.
prop
===
"
width
"
||
this
.
prop
===
"
height
"
?
1
:
0
,
this
.
cur
()),
f
(
this
.
elem
).
show
()},
hide
:
function
(){
this
.
options
.
orig
[
this
.
prop
]
=
f
.
style
(
this
.
elem
,
this
.
prop
),
this
.
options
.
hide
=!
0
,
this
.
custom
(
this
.
cur
(),
0
)},
step
:
function
(
a
){
var
b
=
cn
||
co
(),
c
=!
0
,
d
=
this
.
elem
,
e
=
this
.
options
,
g
,
h
;
if
(
a
||
b
>=
e
.
duration
+
this
.
startTime
){
this
.
now
=
this
.
end
,
this
.
pos
=
this
.
state
=
1
,
this
.
update
(),
e
.
animatedProperties
[
this
.
prop
]
=!
0
;
for
(
g
in
e
.
animatedProperties
)
e
.
animatedProperties
[
g
]
!==!
0
&&
(
c
=!
1
);
if
(
c
){
e
.
overflow
!=
null
&&!
f
.
support
.
shrinkWrapBlocks
&&
f
.
each
([
""
,
"
X
"
,
"
Y
"
],
function
(
a
,
b
){
d
.
style
[
"
overflow
"
+
b
]
=
e
.
overflow
[
a
]}),
e
.
hide
&&
f
(
d
).
hide
();
if
(
e
.
hide
||
e
.
show
)
for
(
var
i
in
e
.
animatedProperties
)
f
.
style
(
d
,
i
,
e
.
orig
[
i
]);
e
.
complete
.
call
(
d
)}
return
!
1
}
e
.
duration
==
Infinity
?
this
.
now
=
b
:(
h
=
b
-
this
.
startTime
,
this
.
state
=
h
/
e
.
duration
,
this
.
pos
=
f
.
easing
[
e
.
animatedProperties
[
this
.
prop
]](
this
.
state
,
h
,
0
,
1
,
e
.
duration
),
this
.
now
=
this
.
start
+
(
this
.
end
-
this
.
start
)
*
this
.
pos
),
this
.
update
();
return
!
0
}},
f
.
extend
(
f
.
fx
,{
tick
:
function
(){
for
(
var
a
=
f
.
timers
,
b
=
0
;
b
<
a
.
length
;
++
b
)
a
[
b
]()
||
a
.
splice
(
b
--
,
1
);
a
.
length
||
f
.
fx
.
stop
()},
interval
:
13
,
stop
:
function
(){
clearInterval
(
cl
),
cl
=
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
.
prop
===
"
width
"
||
a
.
prop
===
"
height
"
?
Math
.
max
(
0
,
a
.
now
):
a
.
now
)
+
a
.
unit
:
a
.
elem
[
a
.
prop
]
=
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
cs
=
/^t
(?:
able|d|h
)
$/i
,
ct
=
/^
(?:
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
=
cu
(
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
);
f
.
offset
.
initialize
();
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
.
offset
.
supportsFixedPosition
&&
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
.
offset
.
doesNotAddBorder
&&
(
!
f
.
offset
.
doesAddBorderForTableAndCells
||!
cs
.
test
(
b
.
nodeName
))
&&
(
l
+=
parseFloat
(
c
.
borderTopWidth
)
||
0
,
m
+=
parseFloat
(
c
.
borderLeftWidth
)
||
0
),
e
=
d
,
d
=
b
.
offsetParent
),
f
.
offset
.
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
.
offset
.
supportsFixedPosition
&&
k
.
position
===
"
fixed
"
&&
(
l
+=
Math
.
max
(
h
.
scrollTop
,
i
.
scrollTop
),
m
+=
Math
.
max
(
h
.
scrollLeft
,
i
.
scrollLeft
));
return
{
top
:
l
,
left
:
m
}},
f
.
offset
=
{
initialize
:
function
(){
var
a
=
c
.
body
,
b
=
c
.
createElement
(
"
div
"
),
d
,
e
,
g
,
h
,
i
=
parseFloat
(
f
.
css
(
a
,
"
marginTop
"
))
||
0
,
j
=
"
<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>
"
;
f
.
extend
(
b
.
style
,{
position
:
"
absolute
"
,
top
:
0
,
left
:
0
,
margin
:
0
,
border
:
0
,
width
:
"
1px
"
,
height
:
"
1px
"
,
visibility
:
"
hidden
"
}),
b
.
innerHTML
=
j
,
a
.
insertBefore
(
b
,
a
.
firstChild
),
d
=
b
.
firstChild
,
e
=
d
.
firstChild
,
h
=
d
.
nextSibling
.
firstChild
.
firstChild
,
this
.
doesNotAddBorder
=
e
.
offsetTop
!==
5
,
this
.
doesAddBorderForTableAndCells
=
h
.
offsetTop
===
5
,
e
.
style
.
position
=
"
fixed
"
,
e
.
style
.
top
=
"
20px
"
,
this
.
supportsFixedPosition
=
e
.
offsetTop
===
20
||
e
.
offsetTop
===
15
,
e
.
style
.
position
=
e
.
style
.
top
=
""
,
d
.
style
.
overflow
=
"
hidden
"
,
d
.
style
.
position
=
"
relative
"
,
this
.
subtractsBorderForOverflowNotVisible
=
e
.
offsetTop
===-
5
,
this
.
doesNotIncludeMarginInBodyOffset
=
a
.
offsetTop
!==
i
,
a
.
removeChild
(
b
),
f
.
offset
.
initialize
=
f
.
noop
},
bodyOffset
:
function
(
a
){
var
b
=
a
.
offsetTop
,
c
=
a
.
offsetLeft
;
f
.
offset
.
initialize
(),
f
.
offset
.
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
=
ct
.
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
&&!
ct
.
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
=
cu
(
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
=
cu
(
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
"
)):
null
},
f
.
fn
[
"
outer
"
+
c
]
=
function
(
a
){
var
b
=
this
[
0
];
return
b
&&
b
.
style
?
parseFloat
(
f
.
css
(
b
,
d
,
a
?
"
margin
"
:
"
border
"
)):
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
.
isNaN
(
j
)?
i
:
j
}
return
this
.
css
(
d
,
typeof
a
==
"
string
"
?
a
:
a
+
"
px
"
)}}),
a
.
jQuery
=
a
.
$
=
f
})(
window
);
\ No newline at end of file
todo-example/fidel/vendor/json2.js
0 → 100644
View file @
0b69fdca
/*
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/fidel/vendor/live.js
0 → 100644
View file @
0b69fdca
/*
Live.js - One script closer to Designing in the Browser
Written for Handcraft.com by Martin Kool (@mrtnkl).
Version 4.
Recent change: Made stylesheet and mimetype checks case insensitive.
http://livejs.com
http://livejs.com/license (MIT)
@livejs
Include live.js#css to monitor css changes only.
Include live.js#js to monitor js changes only.
Include live.js#html to monitor html changes only.
Mix and match to monitor a preferred combination such as live.js#html,css
By default, just include live.js to monitor all css, js and html changes.
Live.js can also be loaded as a bookmarklet. It is best to only use it for CSS then,
as a page reload due to a change in html or css would not re-include the bookmarklet.
To monitor CSS and be notified that it has loaded, include it as: live.js#css,notify
*/
(
function
()
{
var
headers
=
{
"
Etag
"
:
1
,
"
Last-Modified
"
:
1
,
"
Content-Length
"
:
1
,
"
Content-Type
"
:
1
},
resources
=
{},
pendingRequests
=
{},
currentLinkElements
=
{},
oldLinkElements
=
{},
interval
=
1000
,
loaded
=
false
,
active
=
{
"
html
"
:
1
,
"
css
"
:
1
,
"
js
"
:
1
};
var
Live
=
{
// performs a cycle per interval
heartbeat
:
function
()
{
if
(
document
.
body
)
{
// make sure all resources are loaded on first activation
if
(
!
loaded
)
Live
.
loadresources
();
Live
.
checkForChanges
();
}
setTimeout
(
Live
.
heartbeat
,
interval
);
},
// loads all local css and js resources upon first activation
loadresources
:
function
()
{
// helper method to assert if a given url is local
function
isLocal
(
url
)
{
var
loc
=
document
.
location
,
reg
=
new
RegExp
(
"
^
\\
.|^
\
/(?!
\
/)|^[
\\
w]((?!://).)*$|
"
+
loc
.
protocol
+
"
//
"
+
loc
.
host
);
return
url
.
match
(
reg
);
}
// gather all resources
var
scripts
=
document
.
getElementsByTagName
(
"
script
"
),
links
=
document
.
getElementsByTagName
(
"
link
"
),
uris
=
[];
// track local js urls
for
(
var
i
=
0
;
i
<
scripts
.
length
;
i
++
)
{
var
script
=
scripts
[
i
],
src
=
script
.
getAttribute
(
"
src
"
);
if
(
src
&&
isLocal
(
src
))
uris
.
push
(
src
);
if
(
src
&&
src
.
match
(
/
\b
live.js#/
))
{
for
(
var
type
in
active
)
active
[
type
]
=
src
.
match
(
"
[#,|]
"
+
type
)
!=
null
if
(
src
.
match
(
"
notify
"
))
alert
(
"
Live.js is loaded.
"
);
}
}
if
(
!
active
.
js
)
uris
=
[];
if
(
active
.
html
)
uris
.
push
(
document
.
location
.
href
);
// track local css urls
for
(
var
i
=
0
;
i
<
links
.
length
&&
active
.
css
;
i
++
)
{
var
link
=
links
[
i
],
rel
=
link
.
getAttribute
(
"
rel
"
),
href
=
link
.
getAttribute
(
"
href
"
,
2
);
if
(
href
&&
rel
&&
rel
.
match
(
new
RegExp
(
"
stylesheet
"
,
"
i
"
))
&&
isLocal
(
href
))
{
uris
.
push
(
href
);
currentLinkElements
[
href
]
=
link
;
}
}
// initialize the resources info
for
(
var
i
=
0
;
i
<
uris
.
length
;
i
++
)
{
var
url
=
uris
[
i
];
Live
.
getHead
(
url
,
function
(
url
,
info
)
{
resources
[
url
]
=
info
;
});
}
// add rule for morphing between old and new css files
var
head
=
document
.
getElementsByTagName
(
"
head
"
)[
0
],
style
=
document
.
createElement
(
"
style
"
),
rule
=
"
transition: all .3s ease-out;
"
css
=
[
"
.livejs-loading * {
"
,
rule
,
"
-webkit-
"
,
rule
,
"
-moz-
"
,
rule
,
"
-o-
"
,
rule
,
"
}
"
].
join
(
''
);
style
.
setAttribute
(
"
type
"
,
"
text/css
"
);
head
.
appendChild
(
style
);
style
.
styleSheet
?
style
.
styleSheet
.
cssText
=
css
:
style
.
appendChild
(
document
.
createTextNode
(
css
));
// yep
loaded
=
true
;
},
// check all tracking resources for changes
checkForChanges
:
function
()
{
for
(
var
url
in
resources
)
{
if
(
pendingRequests
[
url
])
continue
;
Live
.
getHead
(
url
,
function
(
url
,
newInfo
)
{
var
oldInfo
=
resources
[
url
],
hasChanged
=
false
;
resources
[
url
]
=
newInfo
;
for
(
var
header
in
oldInfo
)
{
// do verification based on the header type
var
oldValue
=
oldInfo
[
header
],
newValue
=
newInfo
[
header
],
contentType
=
newInfo
[
"
Content-Type
"
];
switch
(
header
.
toLowerCase
())
{
case
"
etag
"
:
if
(
!
newValue
)
break
;
// fall through to default
default
:
hasChanged
=
oldValue
!=
newValue
;
break
;
}
// if changed, act
if
(
hasChanged
)
{
Live
.
refreshResource
(
url
,
contentType
);
break
;
}
}
});
}
},
// act upon a changed url of certain content type
refreshResource
:
function
(
url
,
type
)
{
switch
(
type
.
toLowerCase
())
{
// css files can be reloaded dynamically by replacing the link element
case
"
text/css
"
:
var
link
=
currentLinkElements
[
url
],
html
=
document
.
body
.
parentNode
,
head
=
link
.
parentNode
,
next
=
link
.
nextSibling
,
newLink
=
document
.
createElement
(
"
link
"
);
html
.
className
=
html
.
className
.
replace
(
/
\s
*livejs
\-
loading/gi
,
''
)
+
'
livejs-loading
'
;
newLink
.
setAttribute
(
"
type
"
,
"
text/css
"
);
newLink
.
setAttribute
(
"
rel
"
,
"
stylesheet
"
);
newLink
.
setAttribute
(
"
href
"
,
url
+
"
?now=
"
+
new
Date
()
*
1
);
next
?
head
.
insertBefore
(
newLink
,
next
)
:
head
.
appendChild
(
newLink
);
currentLinkElements
[
url
]
=
newLink
;
oldLinkElements
[
url
]
=
link
;
// schedule removal of the old link
Live
.
removeoldLinkElements
();
break
;
// check if an html resource is our current url, then reload
case
"
text/html
"
:
if
(
url
!=
document
.
location
.
href
)
return
;
// local javascript changes cause a reload as well
case
"
text/javascript
"
:
case
"
application/javascript
"
:
case
"
application/x-javascript
"
:
document
.
location
.
reload
();
}
},
// removes the old stylesheet rules only once the new one has finished loading
removeoldLinkElements
:
function
()
{
var
pending
=
0
;
for
(
var
url
in
oldLinkElements
)
{
// if this sheet has any cssRules, delete the old link
try
{
var
link
=
currentLinkElements
[
url
],
oldLink
=
oldLinkElements
[
url
],
html
=
document
.
body
.
parentNode
,
sheet
=
link
.
sheet
||
link
.
styleSheet
,
rules
=
sheet
.
rules
||
sheet
.
cssRules
;
if
(
rules
.
length
>=
0
)
{
oldLink
.
parentNode
.
removeChild
(
oldLink
);
delete
oldLinkElements
[
url
];
setTimeout
(
function
()
{
html
.
className
=
html
.
className
.
replace
(
/
\s
*livejs
\-
loading/gi
,
''
);
},
100
);
}
}
catch
(
e
)
{
pending
++
;
}
if
(
pending
)
setTimeout
(
Live
.
removeoldLinkElements
,
50
);
}
},
// performs a HEAD request and passes the header info to the given callback
getHead
:
function
(
url
,
callback
)
{
pendingRequests
[
url
]
=
true
;
var
xhr
=
window
.
XMLHttpRequest
?
new
XMLHttpRequest
()
:
new
ActiveXObject
(
"
Microsoft.XmlHttp
"
);
xhr
.
open
(
"
HEAD
"
,
url
,
true
);
xhr
.
onreadystatechange
=
function
()
{
delete
pendingRequests
[
url
];
if
(
xhr
.
readyState
==
4
&&
xhr
.
status
!=
304
)
{
xhr
.
getAllResponseHeaders
();
var
info
=
{};
for
(
var
h
in
headers
)
{
var
value
=
xhr
.
getResponseHeader
(
h
);
// adjust the simple Etag variant to match on its significant part
if
(
h
.
toLowerCase
()
==
"
etag
"
&&
value
)
value
=
value
.
replace
(
/^W
\/
/
,
''
);
if
(
h
.
toLowerCase
()
==
"
content-type
"
&&
value
)
value
=
value
.
replace
(
/^
(
.*
?)
;.*
?
$/i
,
"
$1
"
);
info
[
h
]
=
value
;
}
callback
(
url
,
info
);
}
}
xhr
.
send
();
}
};
// start listening
if
(
document
.
location
.
protocol
!=
"
file:
"
)
{
if
(
!
window
.
liveJsLoaded
)
Live
.
heartbeat
();
window
.
liveJsLoaded
=
true
;
}
else
if
(
window
.
console
)
console
.
log
(
"
Live.js doesn't support the file protocol. It needs http.
"
);
})();
\ No newline at end of file
todo-example/fidel/vendor/todos.js
0 → 100644
View file @
0b69fdca
// An example Backbone application contributed by
// [Jérôme Gravel-Niquet](http://jgn.me/). This demo uses a simple
// [LocalStorage adapter](backbone-localstorage.html)
// to persist Backbone models within your browser.
// Load the application once the DOM is ready, using `jQuery.ready`:
$
(
function
(){
// Todo Model
// ----------
// Our basic **Todo** model has `content`, `order`, and `done` attributes.
window
.
Todo
=
Backbone
.
Model
.
extend
({
// Default attributes for the todo.
defaults
:
{
content
:
"
empty todo...
"
,
done
:
false
},
// Ensure that each todo created has `content`.
initialize
:
function
()
{
if
(
!
this
.
get
(
"
content
"
))
{
this
.
set
({
"
content
"
:
this
.
defaults
.
content
});
}
},
// Toggle the `done` state of this todo item.
toggle
:
function
()
{
this
.
save
({
done
:
!
this
.
get
(
"
done
"
)});
},
// Remove this Todo from *localStorage* and delete its view.
clear
:
function
()
{
this
.
destroy
();
this
.
view
.
remove
();
}
});
// Todo Collection
// ---------------
// The collection of todos is backed by *localStorage* instead of a remote
// server.
window
.
TodoList
=
Backbone
.
Collection
.
extend
({
// Reference to this collection's model.
model
:
Todo
,
// Save all of the todo items under the `"todos"` namespace.
localStorage
:
new
Store
(
"
todos
"
),
// Filter down the list of all todo items that are finished.
done
:
function
()
{
return
this
.
filter
(
function
(
todo
){
return
todo
.
get
(
'
done
'
);
});
},
// Filter down the list to only todo items that are still not finished.
remaining
:
function
()
{
return
this
.
without
.
apply
(
this
,
this
.
done
());
},
// We keep the Todos in sequential order, despite being saved by unordered
// GUID in the database. This generates the next order number for new items.
nextOrder
:
function
()
{
if
(
!
this
.
length
)
return
1
;
return
this
.
last
().
get
(
'
order
'
)
+
1
;
},
// Todos are sorted by their original insertion order.
comparator
:
function
(
todo
)
{
return
todo
.
get
(
'
order
'
);
}
});
// Create our global collection of **Todos**.
window
.
Todos
=
new
TodoList
;
// Todo Item View
// --------------
// The DOM element for a todo item...
window
.
TodoView
=
Backbone
.
View
.
extend
({
//... is a list tag.
tagName
:
"
li
"
,
// Cache the template function for a single item.
template
:
_
.
template
(
$
(
'
#item-template
'
).
html
()),
// The DOM events specific to an item.
events
:
{
"
click .check
"
:
"
toggleDone
"
,
"
dblclick div.todo-content
"
:
"
edit
"
,
"
click span.todo-destroy
"
:
"
clear
"
,
"
keypress .todo-input
"
:
"
updateOnEnter
"
},
// The TodoView listens for changes to its model, re-rendering. Since there's
// a one-to-one correspondence between a **Todo** and a **TodoView** in this
// app, we set a direct reference on the model for convenience.
initialize
:
function
()
{
_
.
bindAll
(
this
,
'
render
'
,
'
close
'
);
this
.
model
.
bind
(
'
change
'
,
this
.
render
);
this
.
model
.
view
=
this
;
},
// Re-render the contents of the todo item.
render
:
function
()
{
$
(
this
.
el
).
html
(
this
.
template
(
this
.
model
.
toJSON
()));
this
.
setContent
();
return
this
;
},
// To avoid XSS (not that it would be harmful in this particular app),
// we use `jQuery.text` to set the contents of the todo item.
setContent
:
function
()
{
var
content
=
this
.
model
.
get
(
'
content
'
);
this
.
$
(
'
.todo-content
'
).
text
(
content
);
this
.
input
=
this
.
$
(
'
.todo-input
'
);
this
.
input
.
bind
(
'
blur
'
,
this
.
close
);
this
.
input
.
val
(
content
);
},
// Toggle the `"done"` state of the model.
toggleDone
:
function
()
{
this
.
model
.
toggle
();
},
// Switch this view into `"editing"` mode, displaying the input field.
edit
:
function
()
{
$
(
this
.
el
).
addClass
(
"
editing
"
);
this
.
input
.
focus
();
},
// Close the `"editing"` mode, saving changes to the todo.
close
:
function
()
{
this
.
model
.
save
({
content
:
this
.
input
.
val
()});
$
(
this
.
el
).
removeClass
(
"
editing
"
);
},
// If you hit `enter`, we're through editing the item.
updateOnEnter
:
function
(
e
)
{
if
(
e
.
keyCode
==
13
)
this
.
close
();
},
// Remove this view from the DOM.
remove
:
function
()
{
$
(
this
.
el
).
remove
();
},
// Remove the item, destroy the model.
clear
:
function
()
{
this
.
model
.
clear
();
}
});
// The Application
// ---------------
// Our overall **AppView** is the top-level piece of UI.
window
.
AppView
=
Backbone
.
View
.
extend
({
// Instead of generating a new element, bind to the existing skeleton of
// the App already present in the HTML.
el
:
$
(
"
#todoapp
"
),
// Our template for the line of statistics at the bottom of the app.
statsTemplate
:
_
.
template
(
$
(
'
#stats-template
'
).
html
()),
// Delegated events for creating new items, and clearing completed ones.
events
:
{
"
keypress #new-todo
"
:
"
createOnEnter
"
,
"
keyup #new-todo
"
:
"
showTooltip
"
,
"
click .todo-clear a
"
:
"
clearCompleted
"
},
// At initialization we bind to the relevant events on the `Todos`
// collection, when items are added or changed. Kick things off by
// loading any preexisting todos that might be saved in *localStorage*.
initialize
:
function
()
{
_
.
bindAll
(
this
,
'
addOne
'
,
'
addAll
'
,
'
render
'
);
this
.
input
=
this
.
$
(
"
#new-todo
"
);
Todos
.
bind
(
'
add
'
,
this
.
addOne
);
Todos
.
bind
(
'
reset
'
,
this
.
addAll
);
Todos
.
bind
(
'
all
'
,
this
.
render
);
Todos
.
fetch
();
},
// Re-rendering the App just means refreshing the statistics -- the rest
// of the app doesn't change.
render
:
function
()
{
var
done
=
Todos
.
done
().
length
;
this
.
$
(
'
#todo-stats
'
).
html
(
this
.
statsTemplate
({
total
:
Todos
.
length
,
done
:
Todos
.
done
().
length
,
remaining
:
Todos
.
remaining
().
length
}));
},
// Add a single todo item to the list by creating a view for it, and
// appending its element to the `<ul>`.
addOne
:
function
(
todo
)
{
var
view
=
new
TodoView
({
model
:
todo
});
this
.
$
(
"
#todo-list
"
).
append
(
view
.
render
().
el
);
},
// Add all items in the **Todos** collection at once.
addAll
:
function
()
{
Todos
.
each
(
this
.
addOne
);
},
// Generate the attributes for a new Todo item.
newAttributes
:
function
()
{
return
{
content
:
this
.
input
.
val
(),
order
:
Todos
.
nextOrder
(),
done
:
false
};
},
// If you hit return in the main input field, create new **Todo** model,
// persisting it to *localStorage*.
createOnEnter
:
function
(
e
)
{
if
(
e
.
keyCode
!=
13
)
return
;
Todos
.
create
(
this
.
newAttributes
());
this
.
input
.
val
(
''
);
},
// Clear all done todo items, destroying their models.
clearCompleted
:
function
()
{
_
.
each
(
Todos
.
done
(),
function
(
todo
){
todo
.
clear
();
});
return
false
;
},
// Lazily show the tooltip that tells you to press `enter` to save
// a new todo item, after one second.
showTooltip
:
function
(
e
)
{
var
tooltip
=
this
.
$
(
"
.ui-tooltip-top
"
);
var
val
=
this
.
input
.
val
();
tooltip
.
fadeOut
();
if
(
this
.
tooltipTimeout
)
clearTimeout
(
this
.
tooltipTimeout
);
if
(
val
==
''
||
val
==
this
.
input
.
attr
(
'
placeholder
'
))
return
;
var
show
=
function
(){
tooltip
.
show
().
fadeIn
();
};
this
.
tooltipTimeout
=
_
.
delay
(
show
,
1000
);
}
});
// Finally, we kick things off by creating the **App**.
window
.
App
=
new
AppView
;
});
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