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
Sven Franck
todomvc
Commits
7d7de006
Commit
7d7de006
authored
Apr 23, 2012
by
Camille Reynders
Committed by
Sindre Sorhus
Apr 23, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Close #85: Dijon app
parent
55483ef9
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
300 additions
and
2548 deletions
+300
-2548
labs/architecture-examples/dijon/README.md
labs/architecture-examples/dijon/README.md
+7
-0
labs/architecture-examples/dijon/css/app.css
labs/architecture-examples/dijon/css/app.css
+0
-208
labs/architecture-examples/dijon/index.html
labs/architecture-examples/dijon/index.html
+9
-8
labs/architecture-examples/dijon/js/app.js
labs/architecture-examples/dijon/js/app.js
+16
-20
labs/architecture-examples/dijon/js/config.js
labs/architecture-examples/dijon/js/config.js
+49
-54
labs/architecture-examples/dijon/js/controllers/TodosController.js
...itecture-examples/dijon/js/controllers/TodosController.js
+0
-16
labs/architecture-examples/dijon/js/libs/dijon-0.5.1.min.js
labs/architecture-examples/dijon/js/libs/dijon-0.5.1.min.js
+0
-1
labs/architecture-examples/dijon/js/libs/handlebars-1.0.0.beta.6.js
...tecture-examples/dijon/js/libs/handlebars-1.0.0.beta.6.js
+0
-1550
labs/architecture-examples/dijon/js/libs/jquery-1.7.1.min.js
labs/architecture-examples/dijon/js/libs/jquery-1.7.1.min.js
+0
-4
labs/architecture-examples/dijon/js/libs/json2.js
labs/architecture-examples/dijon/js/libs/json2.js
+0
-481
labs/architecture-examples/dijon/js/models/TodosModel.js
labs/architecture-examples/dijon/js/models/TodosModel.js
+79
-74
labs/architecture-examples/dijon/js/services/LocalStorageService.js
...tecture-examples/dijon/js/services/LocalStorageService.js
+14
-14
labs/architecture-examples/dijon/js/utils/Utils.js
labs/architecture-examples/dijon/js/utils/Utils.js
+11
-8
labs/architecture-examples/dijon/js/views/FooterView.js
labs/architecture-examples/dijon/js/views/FooterView.js
+33
-30
labs/architecture-examples/dijon/js/views/TodoFormView.js
labs/architecture-examples/dijon/js/views/TodoFormView.js
+27
-31
labs/architecture-examples/dijon/js/views/TodoListView.js
labs/architecture-examples/dijon/js/views/TodoListView.js
+55
-49
No files found.
labs/architecture-examples/dijon/README.md
0 → 100644
View file @
7d7de006
# Dijon • [TodoMVC](http://todomvc.com)
## Credit
Created by
[
Camille Reynders
](
http://www.creynders.be
)
Largely based on the jQuery example by
[
Sindre Sorhus
](
https://github.com/sindresorhus
)
\ No newline at end of file
labs/architecture-examples/dijon/css/app.css
deleted
100755 → 0
View file @
55483ef9
html
,
body
{
margin
:
0
;
padding
:
0
;
}
body
{
font
:
14px
"Helvetica Neue"
,
Helvetica
,
Arial
,
sans-serif
;
line-height
:
1.4em
;
background
:
#eeeeee
;
color
:
#333333
;
width
:
520px
;
margin
:
0
auto
;
-webkit-font-smoothing
:
antialiased
;
}
#todoapp
{
background
:
#fff
;
padding
:
20px
;
margin-bottom
:
40px
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
2px
6px
0
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
2px
6px
0
;
-ms-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
;
-webkit-border-radius
:
0
0
5px
5px
;
-moz-border-radius
:
0
0
5px
5px
;
-ms-border-radius
:
0
0
5px
5px
;
-o-border-radius
:
0
0
5px
5px
;
border-radius
:
0
0
5px
5px
;
}
#todoapp
h1
{
font-size
:
36px
;
font-weight
:
bold
;
text-align
:
center
;
padding
:
0
0
10px
0
;
}
#todoapp
input
[
type
=
"text"
]
{
width
:
466px
;
font-size
:
24px
;
font-family
:
inherit
;
line-height
:
1.4em
;
border
:
0
;
outline
:
none
;
padding
:
6px
;
border
:
1px
solid
#999999
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-ms-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
-o-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
1px
2px
0
inset
;
}
#todoapp
input
::-webkit-input-placeholder
{
font-style
:
italic
;
}
#main
{
display
:
none
;
}
#todo-list
{
margin
:
10px
0
;
padding
:
0
;
list-style
:
none
;
}
#todo-list
li
{
padding
:
18px
20px
18px
0
;
position
:
relative
;
font-size
:
24px
;
border-bottom
:
1px
solid
#cccccc
;
}
#todo-list
li
:last-child
{
border-bottom
:
none
;
}
#todo-list
li
.done
label
{
color
:
#777777
;
text-decoration
:
line-through
;
}
#todo-list
li
.destroy
{
display
:
none
;
position
:
absolute
;
top
:
20px
;
right
:
10px
;
cursor
:
pointer
;
width
:
20px
;
height
:
20px
;
background
:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUBAMAAAB/pwA+AAAABGdBTUEAALGPC/xhBQAAACdQTFRFzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMAAAA////zMzMhnu0WAAAAAt0Uk5T5u3pqtV3jFQEKAC0bVelAAAAfUlEQVQI12NYtWpFsc8R865VqxhWrZpyBgg8QcylZ8AgCsjMgTCPrWJYfgYKqhjWwJgaDDVnzpw+c2bPmTPHGWzOnNm95/TuM2cOM/AARXfvBooeZAAp270bRCIz4QoOIGtDMqwJZoUEQzvCYrhzuhhWtUKYEahOX7UK6iEA3A6NUGwCTZIAAAAASUVORK5CYII=')
no-repeat
center
center
;
}
#todo-list
li
:hover
.destroy
{
display
:
block
;
}
#todo-list
li
.editing
{
border-bottom
:
none
;
margin-top
:
-1px
;
padding
:
0
;
}
#todo-list
li
.editing
:last-child
{
margin-bottom
:
-1px
;
}
#todo-list
li
.editing
.edit
{
display
:
block
;
width
:
444px
;
padding
:
13px
15px
14px
20px
;
margin
:
0
;
}
#todo-list
li
.editing
.view
{
display
:
none
;
}
#todo-list
li
.view
label
{
word-break
:
break-word
;
}
#todo-list
li
.edit
{
display
:
none
;
}
#todoapp
footer
{
display
:
none
;
margin
:
0
-20px
-20px
-20px
;
overflow
:
hidden
;
color
:
#555555
;
background
:
#f4fce8
;
border-top
:
1px
solid
#ededed
;
padding
:
0
20px
;
line-height
:
37px
;
-webkit-border-radius
:
0
0
5px
5px
;
-moz-border-radius
:
0
0
5px
5px
;
-ms-border-radius
:
0
0
5px
5px
;
-o-border-radius
:
0
0
5px
5px
;
border-radius
:
0
0
5px
5px
;
}
#clear-completed
{
display
:
none
;
float
:
right
;
line-height
:
20px
;
text-decoration
:
none
;
background
:
rgba
(
0
,
0
,
0
,
0.1
);
color
:
#555555
;
font-size
:
11px
;
margin-top
:
8px
;
margin-bottom
:
8px
;
padding
:
0
10px
1px
;
cursor
:
pointer
;
-webkit-border-radius
:
12px
;
-moz-border-radius
:
12px
;
-ms-border-radius
:
12px
;
-o-border-radius
:
12px
;
border-radius
:
12px
;
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
-1px
0
0
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.2
)
0
-1px
0
0
;
-ms-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
;
}
#clear-completed
:hover
{
background
:
rgba
(
0
,
0
,
0
,
0.15
);
-webkit-box-shadow
:
rgba
(
0
,
0
,
0
,
0.3
)
0
-1px
0
0
;
-moz-box-shadow
:
rgba
(
0
,
0
,
0
,
0.3
)
0
-1px
0
0
;
-ms-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
;
}
#clear-completed
:active
{
position
:
relative
;
top
:
1px
;
}
#todo-count
span
{
font-weight
:
bold
;
}
#instructions
{
margin
:
10px
auto
;
color
:
#777777
;
text-shadow
:
rgba
(
255
,
255
,
255
,
0.8
)
0
1px
0
;
text-align
:
center
;
}
#instructions
a
{
color
:
#336699
;
}
#credits
{
margin
:
30px
auto
;
color
:
#999
;
text-shadow
:
rgba
(
255
,
255
,
255
,
0.8
)
0
1px
0
;
text-align
:
center
;
}
#credits
a
{
color
:
#888
;
}
\ No newline at end of file
labs/architecture-examples/dijon/index.html
View file @
7d7de006
...
...
@@ -3,7 +3,7 @@
<head>
<meta
charset=
"utf-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<title>
jQuery
• TodoMVC
</title>
<title>
Dijon
• TodoMVC
</title>
<link
rel=
"stylesheet"
href=
"../../../assets/base.css"
>
</head>
<body>
...
...
@@ -22,8 +22,10 @@
<button
id=
"clear-completed"
>
Clear completed
</button>
</footer>
</section>
<footer
id=
"info"
>
<footer
id=
"info"
>
<p>
Double-click to edit a todo
</p>
<p>
Based on app and template by
<a
href=
"http://sindresorhus.com"
>
Sindre Sorhus
</a></p>
<p>
Created by
<a
href=
"http://www.creynders.be"
>
Camille Reynders
</a></p>
<p>
Part of
<a
href=
"http://todomvc.com"
>
TodoMVC
</a></p>
</footer>
<script
type=
"text/x-handlebars-template"
id=
"todo-template"
>
...
...
@@ -38,17 +40,16 @@
<
/li
>
{{
/
this
}}
</script>
<script
src=
"js/libs/json2.js"
></script>
<script
src=
"js/libs/jquery-1.7.1.min.js"
></script>
<script
src=
"js/libs/handlebars-1.0.0.beta.6.js"
></script>
<script
src=
"js/libs/dijon-0.5.1.min.js"
></script>
<script
src=
"../../../assets/jquery.min.js"
></script>
<script
src=
"../../../assets/handlebars.min.js"
></script>
<script
src=
"http://creynders.github.com/dijon-framework/bin/dijon-0.5.3.min.js"
></script>
<script
src=
"js/config.js"
></script>
<script
src=
"js/models/TodosModel.js"
></script>
<script
src=
"js/services/LocalStorageService.js"
></script>
<script
src=
"js/controllers/TodosController.js"
></script>
<script
src=
"js/utils/Utils.js"
></script>
<script
src=
"js/views/FooterView.js"
></script>
<script
src=
"js/views/TodoFormView.js"
></script>
<script
src=
"js/views/TodoListView.js"
></script>
<script
src=
"js/app.js"
></script>
</body>
</html>
\ No newline at end of file
</html>
labs/architecture-examples/dijon/js/app.js
View file @
7d7de006
/*
/*global jQuery, Handlebars */
(
function
(
ns
)
{
'
use strict
'
;
ns
.
App
=
function
()
{
var
system
;
return
{
startup
:
function
()
{
system
=
new
dijon
.
System
();
[MIT licensed](http://en.wikipedia.org/wiki/MIT_License)
(c) [Sindre Sorhus](http://sindresorhus.com)
system
.
mapValue
(
'
system
'
,
system
);
system
.
mapOutlet
(
'
system
'
);
*/
(
function
(
ns
){
ns
.
App
=
function
(){
var
system
;
return
{
startup
:
function
(){
system
=
new
dijon
.
System
();
system
.
injectInto
(
new
ns
.
Config
()
);
system
.
mapValue
(
'
system
'
,
system
);
system
.
mapOutlet
(
'
system
'
);
system
.
injectInto
(
new
ns
.
Config
()
);
system
.
notify
(
'
App:startup
'
);
system
.
notify
(
'
App:startupComplete
'
);
}
}
}
system
.
notify
(
'
App:startup
'
);
system
.
notify
(
'
App:startupComplete
'
);
}
}
}
}(
dijondemo
)
);
dijondemo
.
app
=
new
dijondemo
.
App
();
...
...
labs/architecture-examples/dijon/js/config.js
View file @
7d7de006
...
...
@@ -6,58 +6,53 @@
var
dijondemo
=
{};
(
function
(
ns
){
ns
.
views
=
{};
ns
.
models
=
{};
ns
.
controllers
=
{};
ns
.
services
=
{};
ns
.
utils
=
{};
ns
.
Config
=
function
(){
return
{
system
:
undefined
,
//inject
setup
:
function
(){
this
.
system
.
autoMapOutlets
=
true
;
//values
this
.
system
.
mapValue
(
'
enterKey
'
,
13
);
this
.
system
.
mapValue
(
'
uuidUtil
'
,
ns
.
utils
.
Utils
);
this
.
system
.
mapValue
(
'
pluralizeUtil
'
,
ns
.
utils
.
Utils
);
//models
this
.
system
.
mapSingleton
(
'
todosModel
'
,
ns
.
models
.
TodosModel
);
//services
this
.
system
.
mapSingleton
(
'
storageService
'
,
ns
.
services
.
LocalStorageService
);
//controllers
this
.
system
.
mapSingleton
(
'
todosController
'
,
ns
.
controllers
.
TodosController
);
//views
this
.
system
.
mapSingleton
(
'
footerView
'
,
ns
.
views
.
FooterView
);
this
.
system
.
mapSingleton
(
'
formView
'
,
ns
.
views
.
TodoFormView
);
this
.
system
.
mapSingleton
(
'
listView
'
,
ns
.
views
.
TodoListView
);
//handlers
this
.
system
.
mapHandler
(
'
TodoFormView:addTodo
'
,
'
todosModel
'
,
'
add
'
);
this
.
system
.
mapHandler
(
'
TodoListView:toggleDoneOfTodo
'
,
'
todosModel
'
,
'
toggleDone
'
);
this
.
system
.
mapHandler
(
'
TodoListView:setTitleOfTodo
'
,
'
todosModel
'
,
'
setTitle
'
);
this
.
system
.
mapHandler
(
'
TodoListView:removeTodo
'
,
'
todosModel
'
,
'
remove
'
);
this
.
system
.
mapHandler
(
'
TodoListView:setDoneForAllTodos
'
,
'
todosModel
'
,
'
setDoneForAll
'
)
this
.
system
.
mapHandler
(
'
TodoListView:removeAllDoneTodos
'
,
'
todosModel
'
,
'
removeAllDone
'
);
this
.
system
.
mapHandler
(
'
StorageService:retrieveCompleted
'
,
'
todosModel
'
,
'
setList
'
);
this
.
system
.
mapHandler
(
'
FooterView:retrieveTodoCounts
'
,
'
todosController
'
,
'
retrieveCounts
'
);
this
.
system
.
mapHandler
(
'
TodosController:todoCountsRetrieved
'
,
'
footerView
'
,
'
updateCounts
'
);
this
.
system
.
mapHandler
(
'
TodosModel:todosListUpdated
'
,
'
listView
'
,
'
render
'
);
this
.
system
.
mapHandler
(
'
TodosModel:todosListUpdated
'
,
'
footerView
'
,
'
render
'
);
this
.
system
.
mapHandler
(
'
TodosModel:todosListUpdated
'
,
'
storageService
'
,
'
store
'
);
this
.
system
.
mapHandler
(
'
App:startup
'
,
'
storageService
'
,
'
retrieve
'
);
this
.
system
.
mapHandler
(
'
App:startupComplete
'
,
'
formView
'
,
'
render
'
);
this
.
system
.
mapHandler
(
'
App:startupComplete
'
,
'
storageService
'
,
'
retrieve
'
);
}
}
}
(
function
(
ns
)
{
ns
.
views
=
{};
ns
.
models
=
{};
ns
.
controllers
=
{};
ns
.
services
=
{};
ns
.
utils
=
{};
ns
.
Config
=
function
()
{
return
{
system
:
undefined
,
//inject
setup
:
function
()
{
this
.
system
.
autoMapOutlets
=
true
;
//values
this
.
system
.
mapValue
(
'
enterKey
'
,
13
);
this
.
system
.
mapValue
(
'
uuidUtil
'
,
ns
.
utils
.
Utils
);
this
.
system
.
mapValue
(
'
pluralizeUtil
'
,
ns
.
utils
.
Utils
);
//models
this
.
system
.
mapSingleton
(
'
todosModel
'
,
ns
.
models
.
TodosModel
);
//services
this
.
system
.
mapSingleton
(
'
storageService
'
,
ns
.
services
.
LocalStorageService
);
//views
this
.
system
.
mapSingleton
(
'
footerView
'
,
ns
.
views
.
FooterView
);
this
.
system
.
mapSingleton
(
'
formView
'
,
ns
.
views
.
TodoFormView
);
this
.
system
.
mapSingleton
(
'
listView
'
,
ns
.
views
.
TodoListView
);
//handlers
this
.
system
.
mapHandler
(
'
TodoFormView:addTodo
'
,
'
todosModel
'
,
'
add
'
);
this
.
system
.
mapHandler
(
'
TodoListView:toggleDoneOfTodo
'
,
'
todosModel
'
,
'
toggleDone
'
);
this
.
system
.
mapHandler
(
'
TodoListView:setTitleOfTodo
'
,
'
todosModel
'
,
'
setTitle
'
);
this
.
system
.
mapHandler
(
'
TodoListView:removeTodo
'
,
'
todosModel
'
,
'
remove
'
);
this
.
system
.
mapHandler
(
'
TodoListView:setDoneForAllTodos
'
,
'
todosModel
'
,
'
setDoneForAll
'
);
this
.
system
.
mapHandler
(
'
TodoListView:removeAllDoneTodos
'
,
'
todosModel
'
,
'
removeAllDone
'
);
this
.
system
.
mapHandler
(
'
StorageService:retrieveCompleted
'
,
'
todosModel
'
,
'
setList
'
);
this
.
system
.
mapHandler
(
'
TodosModel:todosListUpdated
'
,
'
listView
'
,
'
render
'
);
this
.
system
.
mapHandler
(
'
TodosModel:todosListUpdated
'
,
'
footerView
'
,
'
render
'
);
this
.
system
.
mapHandler
(
'
TodosModel:todosListUpdated
'
,
'
storageService
'
,
'
store
'
);
this
.
system
.
mapHandler
(
'
App:startup
'
,
'
storageService
'
,
'
retrieve
'
);
this
.
system
.
mapHandler
(
'
App:startupComplete
'
,
'
formView
'
,
'
render
'
);
this
.
system
.
mapHandler
(
'
App:startupComplete
'
,
'
storageService
'
,
'
retrieve
'
);
}
}
}
}(
dijondemo
)
);
\ No newline at end of file
labs/architecture-examples/dijon/js/controllers/TodosController.js
deleted
100644 → 0
View file @
55483ef9
/**
* @author Camille Reynders
* Date: 03/02/12
* Time: 14:36
*/
(
function
(
ns
){
ns
.
controllers
.
TodosController
=
function
(){
return
{
system
:
undefined
,
//inject
todosModel
:
undefined
,
//inject
retrieveCounts
:
function
(){
this
.
system
.
notify
(
'
TodosController:todoCountsRetrieved
'
,
this
.
todosModel
.
getNumTotal
(),
this
.
todosModel
.
getNumActive
()
);
}
}
}
}(
dijondemo
)
);
\ No newline at end of file
labs/architecture-examples/dijon/js/libs/dijon-0.5.1.min.js
deleted
100644 → 0
View file @
55483ef9
var
dijon
=
{
VERSION
:
"
0.5.0
"
};
dijon
.
System
=
function
(){
this
.
_mappings
=
{};
this
.
_outlets
=
{};
this
.
_handlers
=
{};
this
.
strictInjections
=
true
;
this
.
autoMapOutlets
=
false
};
dijon
.
System
.
prototype
=
{
_createAndSetupInstance
:
function
(
c
,
b
){
var
a
=
new
b
();
this
.
injectInto
(
a
,
c
);
return
a
},
_retrieveFromCacheOrCreate
:
function
(
d
,
c
){
if
(
c
==
undefined
){
c
=
false
}
if
(
this
.
_mappings
.
hasOwnProperty
(
d
)){
var
b
=
this
.
_mappings
[
d
];
var
a
=
null
;
if
(
!
c
&&
b
.
isSingleton
){
if
(
b
.
object
==
null
){
b
.
object
=
this
.
_createAndSetupInstance
(
d
,
b
.
clazz
)}
a
=
b
.
object
}
else
{
if
(
b
.
clazz
){
a
=
this
.
_createAndSetupInstance
(
d
,
b
.
clazz
)}
else
{}}}
else
{
throw
new
Error
(
1020
)}
return
a
},
mapOutlet
:
function
(
c
,
b
,
a
){
if
(
c
==
undefined
){
throw
new
Error
(
1010
)}
if
(
b
==
undefined
){
b
=
"
global
"
}
if
(
a
==
undefined
){
a
=
c
}
if
(
!
this
.
_outlets
.
hasOwnProperty
(
b
)){
this
.
_outlets
[
b
]
=
{}}
this
.
_outlets
[
b
][
a
]
=
c
;
return
this
},
getObject
:
function
(
a
){
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
return
this
.
_retrieveFromCacheOrCreate
(
a
)},
mapValue
:
function
(
a
,
b
){
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
this
.
_mappings
[
a
]
=
{
clazz
:
null
,
object
:
b
,
isSingleton
:
true
};
if
(
this
.
autoMapOutlets
){
this
.
mapOutlet
(
a
)}
return
this
},
hasMapping
:
function
(
a
){
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
return
this
.
_mappings
.
hasOwnProperty
(
a
)},
mapClass
:
function
(
b
,
a
){
if
(
b
==
undefined
){
throw
new
Error
(
1010
)}
if
(
b
==
undefined
){
throw
new
Error
(
1010
)}
this
.
_mappings
[
b
]
=
{
clazz
:
a
,
object
:
null
,
isSingleton
:
false
};
if
(
this
.
autoMapOutlets
){
this
.
mapOutlet
(
b
)}
return
this
},
mapSingleton
:
function
(
b
,
a
){
if
(
b
==
undefined
){
throw
new
Error
(
1010
)}
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
this
.
_mappings
[
b
]
=
{
clazz
:
a
,
object
:
null
,
isSingleton
:
true
};
if
(
this
.
autoMapOutlets
){
this
.
mapOutlet
(
b
)}
return
this
},
instantiate
:
function
(
a
){
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
return
this
.
_retrieveFromCacheOrCreate
(
a
,
true
)},
injectInto
:
function
(
a
,
d
){
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
var
g
=
[];
if
(
this
.
_outlets
.
hasOwnProperty
(
"
global
"
)){
g
.
push
(
this
.
_outlets
.
global
)}
if
(
d
!=
undefined
&&
this
.
_outlets
.
hasOwnProperty
(
d
)){
g
.
push
(
this
.
_outlets
[
d
])}
for
(
var
c
in
g
){
var
b
=
g
[
c
];
for
(
var
f
in
b
){
var
e
=
b
[
f
];
if
(
!
this
.
strictInjections
||
f
in
a
){
a
[
f
]
=
this
.
getObject
(
e
)}}}
if
(
"
setup
"
in
a
){
a
.
setup
.
call
(
a
)}
return
this
},
unmap
:
function
(
a
){
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
delete
this
.
_mappings
[
a
];
return
this
},
unmapOutlet
:
function
(
b
,
a
){
if
(
b
==
undefined
){
throw
new
Error
(
1010
)}
if
(
a
==
undefined
){
throw
new
Error
(
1010
)}
delete
this
.
_outlets
[
b
][
a
];
return
this
},
mapHandler
:
function
(
b
,
c
,
d
,
e
,
a
){
if
(
b
==
undefined
){
throw
new
Error
(
1010
)}
if
(
c
==
undefined
){
c
=
"
global
"
}
if
(
d
==
undefined
){
d
=
b
}
if
(
e
==
undefined
){
e
=
false
}
if
(
a
==
undefined
){
a
=
false
}
if
(
!
this
.
_handlers
.
hasOwnProperty
(
b
)){
this
.
_handlers
[
b
]
=
{}}
if
(
!
this
.
_handlers
[
b
].
hasOwnProperty
(
c
)){
this
.
_handlers
[
b
][
c
]
=
[]}
this
.
_handlers
[
b
][
c
].
push
({
handler
:
d
,
oneShot
:
e
,
passEvent
:
a
});
return
this
},
unmapHandler
:
function
(
b
,
e
,
f
){
if
(
b
==
undefined
){
throw
new
Error
(
1010
)}
if
(
e
==
undefined
){
e
=
"
global
"
}
if
(
f
==
undefined
){
f
=
b
}
if
(
this
.
_handlers
.
hasOwnProperty
(
b
)
&&
this
.
_handlers
[
b
].
hasOwnProperty
(
e
)){
var
a
=
this
.
_handlers
[
b
][
e
];
for
(
var
d
in
a
){
var
c
=
a
[
d
];
if
(
c
.
handler
==
f
){
a
.
splice
(
d
,
1
);
break
}}}
return
this
},
notify
:
function
(
g
){
var
j
=
Array
.
prototype
.
slice
.
call
(
arguments
);
var
c
=
j
.
slice
(
1
);
if
(
this
.
_handlers
.
hasOwnProperty
(
g
)){
var
d
=
this
.
_handlers
[
g
];
for
(
var
k
in
d
){
var
h
=
d
[
k
];
var
l
;
if
(
k
!=
"
global
"
){
l
=
this
.
getObject
(
k
)}
var
f
=
[];
for
(
var
e
=
0
,
b
=
h
.
length
;
e
<
b
;
e
++
){
var
m
;
var
a
=
h
[
e
];
if
(
l
&&
typeof
a
.
handler
==
"
string
"
){
m
=
l
[
a
.
handler
]}
else
{
m
=
a
.
handler
}
if
(
a
.
oneShot
){
f
.
unshift
(
e
)}
if
(
a
.
passEvent
){
m
.
apply
(
l
,
j
)}
else
{
m
.
apply
(
l
,
c
)}}
for
(
var
e
=
0
,
b
=
f
.
length
;
e
<
b
;
e
++
){
h
.
splice
(
f
[
e
],
1
)}}}
return
this
}};
\ No newline at end of file
labs/architecture-examples/dijon/js/libs/handlebars-1.0.0.beta.6.js
deleted
100644 → 0
View file @
55483ef9
// lib/handlebars/base.js
var
Handlebars
=
{};
Handlebars
.
VERSION
=
"
1.0.beta.6
"
;
Handlebars
.
helpers
=
{};
Handlebars
.
partials
=
{};
Handlebars
.
registerHelper
=
function
(
name
,
fn
,
inverse
)
{
if
(
inverse
)
{
fn
.
not
=
inverse
;
}
this
.
helpers
[
name
]
=
fn
;
};
Handlebars
.
registerPartial
=
function
(
name
,
str
)
{
this
.
partials
[
name
]
=
str
;
};
Handlebars
.
registerHelper
(
'
helperMissing
'
,
function
(
arg
)
{
if
(
arguments
.
length
===
2
)
{
return
undefined
;
}
else
{
throw
new
Error
(
"
Could not find property '
"
+
arg
+
"
'
"
);
}
});
var
toString
=
Object
.
prototype
.
toString
,
functionType
=
"
[object Function]
"
;
Handlebars
.
registerHelper
(
'
blockHelperMissing
'
,
function
(
context
,
options
)
{
var
inverse
=
options
.
inverse
||
function
()
{},
fn
=
options
.
fn
;
var
ret
=
""
;
var
type
=
toString
.
call
(
context
);
if
(
type
===
functionType
)
{
context
=
context
.
call
(
this
);
}
if
(
context
===
true
)
{
return
fn
(
this
);
}
else
if
(
context
===
false
||
context
==
null
)
{
return
inverse
(
this
);
}
else
if
(
type
===
"
[object Array]
"
)
{
if
(
context
.
length
>
0
)
{
for
(
var
i
=
0
,
j
=
context
.
length
;
i
<
j
;
i
++
)
{
ret
=
ret
+
fn
(
context
[
i
]);
}
}
else
{
ret
=
inverse
(
this
);
}
return
ret
;
}
else
{
return
fn
(
context
);
}
});
Handlebars
.
registerHelper
(
'
each
'
,
function
(
context
,
options
)
{
var
fn
=
options
.
fn
,
inverse
=
options
.
inverse
;
var
ret
=
""
;
if
(
context
&&
context
.
length
>
0
)
{
for
(
var
i
=
0
,
j
=
context
.
length
;
i
<
j
;
i
++
)
{
ret
=
ret
+
fn
(
context
[
i
]);
}
}
else
{
ret
=
inverse
(
this
);
}
return
ret
;
});
Handlebars
.
registerHelper
(
'
if
'
,
function
(
context
,
options
)
{
var
type
=
toString
.
call
(
context
);
if
(
type
===
functionType
)
{
context
=
context
.
call
(
this
);
}
if
(
!
context
||
Handlebars
.
Utils
.
isEmpty
(
context
))
{
return
options
.
inverse
(
this
);
}
else
{
return
options
.
fn
(
this
);
}
});
Handlebars
.
registerHelper
(
'
unless
'
,
function
(
context
,
options
)
{
var
fn
=
options
.
fn
,
inverse
=
options
.
inverse
;
options
.
fn
=
inverse
;
options
.
inverse
=
fn
;
return
Handlebars
.
helpers
[
'
if
'
].
call
(
this
,
context
,
options
);
});
Handlebars
.
registerHelper
(
'
with
'
,
function
(
context
,
options
)
{
return
options
.
fn
(
context
);
});
Handlebars
.
registerHelper
(
'
log
'
,
function
(
context
)
{
Handlebars
.
log
(
context
);
});
;
// lib/handlebars/compiler/parser.js
/* Jison generated parser */
var
handlebars
=
(
function
(){
var
parser
=
{
trace
:
function
trace
()
{
},
yy
:
{},
symbols_
:
{
"
error
"
:
2
,
"
root
"
:
3
,
"
program
"
:
4
,
"
EOF
"
:
5
,
"
statements
"
:
6
,
"
simpleInverse
"
:
7
,
"
statement
"
:
8
,
"
openInverse
"
:
9
,
"
closeBlock
"
:
10
,
"
openBlock
"
:
11
,
"
mustache
"
:
12
,
"
partial
"
:
13
,
"
CONTENT
"
:
14
,
"
COMMENT
"
:
15
,
"
OPEN_BLOCK
"
:
16
,
"
inMustache
"
:
17
,
"
CLOSE
"
:
18
,
"
OPEN_INVERSE
"
:
19
,
"
OPEN_ENDBLOCK
"
:
20
,
"
path
"
:
21
,
"
OPEN
"
:
22
,
"
OPEN_UNESCAPED
"
:
23
,
"
OPEN_PARTIAL
"
:
24
,
"
params
"
:
25
,
"
hash
"
:
26
,
"
param
"
:
27
,
"
STRING
"
:
28
,
"
INTEGER
"
:
29
,
"
BOOLEAN
"
:
30
,
"
hashSegments
"
:
31
,
"
hashSegment
"
:
32
,
"
ID
"
:
33
,
"
EQUALS
"
:
34
,
"
pathSegments
"
:
35
,
"
SEP
"
:
36
,
"
$accept
"
:
0
,
"
$end
"
:
1
},
terminals_
:
{
2
:
"
error
"
,
5
:
"
EOF
"
,
14
:
"
CONTENT
"
,
15
:
"
COMMENT
"
,
16
:
"
OPEN_BLOCK
"
,
18
:
"
CLOSE
"
,
19
:
"
OPEN_INVERSE
"
,
20
:
"
OPEN_ENDBLOCK
"
,
22
:
"
OPEN
"
,
23
:
"
OPEN_UNESCAPED
"
,
24
:
"
OPEN_PARTIAL
"
,
28
:
"
STRING
"
,
29
:
"
INTEGER
"
,
30
:
"
BOOLEAN
"
,
33
:
"
ID
"
,
34
:
"
EQUALS
"
,
36
:
"
SEP
"
},
productions_
:
[
0
,[
3
,
2
],[
4
,
3
],[
4
,
1
],[
4
,
0
],[
6
,
1
],[
6
,
2
],[
8
,
3
],[
8
,
3
],[
8
,
1
],[
8
,
1
],[
8
,
1
],[
8
,
1
],[
11
,
3
],[
9
,
3
],[
10
,
3
],[
12
,
3
],[
12
,
3
],[
13
,
3
],[
13
,
4
],[
7
,
2
],[
17
,
3
],[
17
,
2
],[
17
,
2
],[
17
,
1
],[
25
,
2
],[
25
,
1
],[
27
,
1
],[
27
,
1
],[
27
,
1
],[
27
,
1
],[
26
,
1
],[
31
,
2
],[
31
,
1
],[
32
,
3
],[
32
,
3
],[
32
,
3
],[
32
,
3
],[
21
,
1
],[
35
,
3
],[
35
,
1
]],
performAction
:
function
anonymous
(
yytext
,
yyleng
,
yylineno
,
yy
,
yystate
,
$$
,
_$
)
{
var
$0
=
$$
.
length
-
1
;
switch
(
yystate
)
{
case
1
:
return
$$
[
$0
-
1
]
break
;
case
2
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
-
2
],
$$
[
$0
])
break
;
case
3
:
this
.
$
=
new
yy
.
ProgramNode
(
$$
[
$0
])
break
;
case
4
:
this
.
$
=
new
yy
.
ProgramNode
([])
break
;
case
5
:
this
.
$
=
[
$$
[
$0
]]
break
;
case
6
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
1
]
break
;
case
7
:
this
.
$
=
new
yy
.
InverseNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
],
$$
[
$0
])
break
;
case
8
:
this
.
$
=
new
yy
.
BlockNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
],
$$
[
$0
])
break
;
case
9
:
this
.
$
=
$$
[
$0
]
break
;
case
10
:
this
.
$
=
$$
[
$0
]
break
;
case
11
:
this
.
$
=
new
yy
.
ContentNode
(
$$
[
$0
])
break
;
case
12
:
this
.
$
=
new
yy
.
CommentNode
(
$$
[
$0
])
break
;
case
13
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
])
break
;
case
14
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
])
break
;
case
15
:
this
.
$
=
$$
[
$0
-
1
]
break
;
case
16
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
])
break
;
case
17
:
this
.
$
=
new
yy
.
MustacheNode
(
$$
[
$0
-
1
][
0
],
$$
[
$0
-
1
][
1
],
true
)
break
;
case
18
:
this
.
$
=
new
yy
.
PartialNode
(
$$
[
$0
-
1
])
break
;
case
19
:
this
.
$
=
new
yy
.
PartialNode
(
$$
[
$0
-
2
],
$$
[
$0
-
1
])
break
;
case
20
:
break
;
case
21
:
this
.
$
=
[[
$$
[
$0
-
2
]].
concat
(
$$
[
$0
-
1
]),
$$
[
$0
]]
break
;
case
22
:
this
.
$
=
[[
$$
[
$0
-
1
]].
concat
(
$$
[
$0
]),
null
]
break
;
case
23
:
this
.
$
=
[[
$$
[
$0
-
1
]],
$$
[
$0
]]
break
;
case
24
:
this
.
$
=
[[
$$
[
$0
]],
null
]
break
;
case
25
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
1
];
break
;
case
26
:
this
.
$
=
[
$$
[
$0
]]
break
;
case
27
:
this
.
$
=
$$
[
$0
]
break
;
case
28
:
this
.
$
=
new
yy
.
StringNode
(
$$
[
$0
])
break
;
case
29
:
this
.
$
=
new
yy
.
IntegerNode
(
$$
[
$0
])
break
;
case
30
:
this
.
$
=
new
yy
.
BooleanNode
(
$$
[
$0
])
break
;
case
31
:
this
.
$
=
new
yy
.
HashNode
(
$$
[
$0
])
break
;
case
32
:
$$
[
$0
-
1
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
1
]
break
;
case
33
:
this
.
$
=
[
$$
[
$0
]]
break
;
case
34
:
this
.
$
=
[
$$
[
$0
-
2
],
$$
[
$0
]]
break
;
case
35
:
this
.
$
=
[
$$
[
$0
-
2
],
new
yy
.
StringNode
(
$$
[
$0
])]
break
;
case
36
:
this
.
$
=
[
$$
[
$0
-
2
],
new
yy
.
IntegerNode
(
$$
[
$0
])]
break
;
case
37
:
this
.
$
=
[
$$
[
$0
-
2
],
new
yy
.
BooleanNode
(
$$
[
$0
])]
break
;
case
38
:
this
.
$
=
new
yy
.
IdNode
(
$$
[
$0
])
break
;
case
39
:
$$
[
$0
-
2
].
push
(
$$
[
$0
]);
this
.
$
=
$$
[
$0
-
2
];
break
;
case
40
:
this
.
$
=
[
$$
[
$0
]]
break
;
}
},
table
:
[{
3
:
1
,
4
:
2
,
5
:[
2
,
4
],
6
:
3
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
22
:[
1
,
13
],
23
:[
1
,
14
],
24
:[
1
,
15
]},{
1
:[
3
]},{
5
:[
1
,
16
]},{
5
:[
2
,
3
],
7
:
17
,
8
:
18
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
19
],
20
:[
2
,
3
],
22
:[
1
,
13
],
23
:[
1
,
14
],
24
:[
1
,
15
]},{
5
:[
2
,
5
],
14
:[
2
,
5
],
15
:[
2
,
5
],
16
:[
2
,
5
],
19
:[
2
,
5
],
20
:[
2
,
5
],
22
:[
2
,
5
],
23
:[
2
,
5
],
24
:[
2
,
5
]},{
4
:
20
,
6
:
3
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
20
:[
2
,
4
],
22
:[
1
,
13
],
23
:[
1
,
14
],
24
:[
1
,
15
]},{
4
:
21
,
6
:
3
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
20
:[
2
,
4
],
22
:[
1
,
13
],
23
:[
1
,
14
],
24
:[
1
,
15
]},{
5
:[
2
,
9
],
14
:[
2
,
9
],
15
:[
2
,
9
],
16
:[
2
,
9
],
19
:[
2
,
9
],
20
:[
2
,
9
],
22
:[
2
,
9
],
23
:[
2
,
9
],
24
:[
2
,
9
]},{
5
:[
2
,
10
],
14
:[
2
,
10
],
15
:[
2
,
10
],
16
:[
2
,
10
],
19
:[
2
,
10
],
20
:[
2
,
10
],
22
:[
2
,
10
],
23
:[
2
,
10
],
24
:[
2
,
10
]},{
5
:[
2
,
11
],
14
:[
2
,
11
],
15
:[
2
,
11
],
16
:[
2
,
11
],
19
:[
2
,
11
],
20
:[
2
,
11
],
22
:[
2
,
11
],
23
:[
2
,
11
],
24
:[
2
,
11
]},{
5
:[
2
,
12
],
14
:[
2
,
12
],
15
:[
2
,
12
],
16
:[
2
,
12
],
19
:[
2
,
12
],
20
:[
2
,
12
],
22
:[
2
,
12
],
23
:[
2
,
12
],
24
:[
2
,
12
]},{
17
:
22
,
21
:
23
,
33
:[
1
,
25
],
35
:
24
},{
17
:
26
,
21
:
23
,
33
:[
1
,
25
],
35
:
24
},{
17
:
27
,
21
:
23
,
33
:[
1
,
25
],
35
:
24
},{
17
:
28
,
21
:
23
,
33
:[
1
,
25
],
35
:
24
},{
21
:
29
,
33
:[
1
,
25
],
35
:
24
},{
1
:[
2
,
1
]},{
6
:
30
,
8
:
4
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
22
:[
1
,
13
],
23
:[
1
,
14
],
24
:[
1
,
15
]},{
5
:[
2
,
6
],
14
:[
2
,
6
],
15
:[
2
,
6
],
16
:[
2
,
6
],
19
:[
2
,
6
],
20
:[
2
,
6
],
22
:[
2
,
6
],
23
:[
2
,
6
],
24
:[
2
,
6
]},{
17
:
22
,
18
:[
1
,
31
],
21
:
23
,
33
:[
1
,
25
],
35
:
24
},{
10
:
32
,
20
:[
1
,
33
]},{
10
:
34
,
20
:[
1
,
33
]},{
18
:[
1
,
35
]},{
18
:[
2
,
24
],
21
:
40
,
25
:
36
,
26
:
37
,
27
:
38
,
28
:[
1
,
41
],
29
:[
1
,
42
],
30
:[
1
,
43
],
31
:
39
,
32
:
44
,
33
:[
1
,
45
],
35
:
24
},{
18
:[
2
,
38
],
28
:[
2
,
38
],
29
:[
2
,
38
],
30
:[
2
,
38
],
33
:[
2
,
38
],
36
:[
1
,
46
]},{
18
:[
2
,
40
],
28
:[
2
,
40
],
29
:[
2
,
40
],
30
:[
2
,
40
],
33
:[
2
,
40
],
36
:[
2
,
40
]},{
18
:[
1
,
47
]},{
18
:[
1
,
48
]},{
18
:[
1
,
49
]},{
18
:[
1
,
50
],
21
:
51
,
33
:[
1
,
25
],
35
:
24
},{
5
:[
2
,
2
],
8
:
18
,
9
:
5
,
11
:
6
,
12
:
7
,
13
:
8
,
14
:[
1
,
9
],
15
:[
1
,
10
],
16
:[
1
,
12
],
19
:[
1
,
11
],
20
:[
2
,
2
],
22
:[
1
,
13
],
23
:[
1
,
14
],
24
:[
1
,
15
]},{
14
:[
2
,
20
],
15
:[
2
,
20
],
16
:[
2
,
20
],
19
:[
2
,
20
],
22
:[
2
,
20
],
23
:[
2
,
20
],
24
:[
2
,
20
]},{
5
:[
2
,
7
],
14
:[
2
,
7
],
15
:[
2
,
7
],
16
:[
2
,
7
],
19
:[
2
,
7
],
20
:[
2
,
7
],
22
:[
2
,
7
],
23
:[
2
,
7
],
24
:[
2
,
7
]},{
21
:
52
,
33
:[
1
,
25
],
35
:
24
},{
5
:[
2
,
8
],
14
:[
2
,
8
],
15
:[
2
,
8
],
16
:[
2
,
8
],
19
:[
2
,
8
],
20
:[
2
,
8
],
22
:[
2
,
8
],
23
:[
2
,
8
],
24
:[
2
,
8
]},{
14
:[
2
,
14
],
15
:[
2
,
14
],
16
:[
2
,
14
],
19
:[
2
,
14
],
20
:[
2
,
14
],
22
:[
2
,
14
],
23
:[
2
,
14
],
24
:[
2
,
14
]},{
18
:[
2
,
22
],
21
:
40
,
26
:
53
,
27
:
54
,
28
:[
1
,
41
],
29
:[
1
,
42
],
30
:[
1
,
43
],
31
:
39
,
32
:
44
,
33
:[
1
,
45
],
35
:
24
},{
18
:[
2
,
23
]},{
18
:[
2
,
26
],
28
:[
2
,
26
],
29
:[
2
,
26
],
30
:[
2
,
26
],
33
:[
2
,
26
]},{
18
:[
2
,
31
],
32
:
55
,
33
:[
1
,
56
]},{
18
:[
2
,
27
],
28
:[
2
,
27
],
29
:[
2
,
27
],
30
:[
2
,
27
],
33
:[
2
,
27
]},{
18
:[
2
,
28
],
28
:[
2
,
28
],
29
:[
2
,
28
],
30
:[
2
,
28
],
33
:[
2
,
28
]},{
18
:[
2
,
29
],
28
:[
2
,
29
],
29
:[
2
,
29
],
30
:[
2
,
29
],
33
:[
2
,
29
]},{
18
:[
2
,
30
],
28
:[
2
,
30
],
29
:[
2
,
30
],
30
:[
2
,
30
],
33
:[
2
,
30
]},{
18
:[
2
,
33
],
33
:[
2
,
33
]},{
18
:[
2
,
40
],
28
:[
2
,
40
],
29
:[
2
,
40
],
30
:[
2
,
40
],
33
:[
2
,
40
],
34
:[
1
,
57
],
36
:[
2
,
40
]},{
33
:[
1
,
58
]},{
14
:[
2
,
13
],
15
:[
2
,
13
],
16
:[
2
,
13
],
19
:[
2
,
13
],
20
:[
2
,
13
],
22
:[
2
,
13
],
23
:[
2
,
13
],
24
:[
2
,
13
]},{
5
:[
2
,
16
],
14
:[
2
,
16
],
15
:[
2
,
16
],
16
:[
2
,
16
],
19
:[
2
,
16
],
20
:[
2
,
16
],
22
:[
2
,
16
],
23
:[
2
,
16
],
24
:[
2
,
16
]},{
5
:[
2
,
17
],
14
:[
2
,
17
],
15
:[
2
,
17
],
16
:[
2
,
17
],
19
:[
2
,
17
],
20
:[
2
,
17
],
22
:[
2
,
17
],
23
:[
2
,
17
],
24
:[
2
,
17
]},{
5
:[
2
,
18
],
14
:[
2
,
18
],
15
:[
2
,
18
],
16
:[
2
,
18
],
19
:[
2
,
18
],
20
:[
2
,
18
],
22
:[
2
,
18
],
23
:[
2
,
18
],
24
:[
2
,
18
]},{
18
:[
1
,
59
]},{
18
:[
1
,
60
]},{
18
:[
2
,
21
]},{
18
:[
2
,
25
],
28
:[
2
,
25
],
29
:[
2
,
25
],
30
:[
2
,
25
],
33
:[
2
,
25
]},{
18
:[
2
,
32
],
33
:[
2
,
32
]},{
34
:[
1
,
57
]},{
21
:
61
,
28
:[
1
,
62
],
29
:[
1
,
63
],
30
:[
1
,
64
],
33
:[
1
,
25
],
35
:
24
},{
18
:[
2
,
39
],
28
:[
2
,
39
],
29
:[
2
,
39
],
30
:[
2
,
39
],
33
:[
2
,
39
],
36
:[
2
,
39
]},{
5
:[
2
,
19
],
14
:[
2
,
19
],
15
:[
2
,
19
],
16
:[
2
,
19
],
19
:[
2
,
19
],
20
:[
2
,
19
],
22
:[
2
,
19
],
23
:[
2
,
19
],
24
:[
2
,
19
]},{
5
:[
2
,
15
],
14
:[
2
,
15
],
15
:[
2
,
15
],
16
:[
2
,
15
],
19
:[
2
,
15
],
20
:[
2
,
15
],
22
:[
2
,
15
],
23
:[
2
,
15
],
24
:[
2
,
15
]},{
18
:[
2
,
34
],
33
:[
2
,
34
]},{
18
:[
2
,
35
],
33
:[
2
,
35
]},{
18
:[
2
,
36
],
33
:[
2
,
36
]},{
18
:[
2
,
37
],
33
:[
2
,
37
]}],
defaultActions
:
{
16
:[
2
,
1
],
37
:[
2
,
23
],
53
:[
2
,
21
]},
parseError
:
function
parseError
(
str
,
hash
)
{
throw
new
Error
(
str
);
},
parse
:
function
parse
(
input
)
{
var
self
=
this
,
stack
=
[
0
],
vstack
=
[
null
],
lstack
=
[],
table
=
this
.
table
,
yytext
=
""
,
yylineno
=
0
,
yyleng
=
0
,
recovering
=
0
,
TERROR
=
2
,
EOF
=
1
;
this
.
lexer
.
setInput
(
input
);
this
.
lexer
.
yy
=
this
.
yy
;
this
.
yy
.
lexer
=
this
.
lexer
;
if
(
typeof
this
.
lexer
.
yylloc
==
"
undefined
"
)
this
.
lexer
.
yylloc
=
{};
var
yyloc
=
this
.
lexer
.
yylloc
;
lstack
.
push
(
yyloc
);
if
(
typeof
this
.
yy
.
parseError
===
"
function
"
)
this
.
parseError
=
this
.
yy
.
parseError
;
function
popStack
(
n
)
{
stack
.
length
=
stack
.
length
-
2
*
n
;
vstack
.
length
=
vstack
.
length
-
n
;
lstack
.
length
=
lstack
.
length
-
n
;
}
function
lex
()
{
var
token
;
token
=
self
.
lexer
.
lex
()
||
1
;
if
(
typeof
token
!==
"
number
"
)
{
token
=
self
.
symbols_
[
token
]
||
token
;
}
return
token
;
}
var
symbol
,
preErrorSymbol
,
state
,
action
,
a
,
r
,
yyval
=
{},
p
,
len
,
newState
,
expected
;
while
(
true
)
{
state
=
stack
[
stack
.
length
-
1
];
if
(
this
.
defaultActions
[
state
])
{
action
=
this
.
defaultActions
[
state
];
}
else
{
if
(
symbol
==
null
)
symbol
=
lex
();
action
=
table
[
state
]
&&
table
[
state
][
symbol
];
}
if
(
typeof
action
===
"
undefined
"
||
!
action
.
length
||
!
action
[
0
])
{
if
(
!
recovering
)
{
expected
=
[];
for
(
p
in
table
[
state
])
if
(
this
.
terminals_
[
p
]
&&
p
>
2
)
{
expected
.
push
(
"
'
"
+
this
.
terminals_
[
p
]
+
"
'
"
);
}
var
errStr
=
""
;
if
(
this
.
lexer
.
showPosition
)
{
errStr
=
"
Parse error on line
"
+
(
yylineno
+
1
)
+
"
:
\n
"
+
this
.
lexer
.
showPosition
()
+
"
\n
Expecting
"
+
expected
.
join
(
"
,
"
)
+
"
, got '
"
+
this
.
terminals_
[
symbol
]
+
"
'
"
;
}
else
{
errStr
=
"
Parse error on line
"
+
(
yylineno
+
1
)
+
"
: Unexpected
"
+
(
symbol
==
1
?
"
end of input
"
:
"
'
"
+
(
this
.
terminals_
[
symbol
]
||
symbol
)
+
"
'
"
);
}
this
.
parseError
(
errStr
,
{
text
:
this
.
lexer
.
match
,
token
:
this
.
terminals_
[
symbol
]
||
symbol
,
line
:
this
.
lexer
.
yylineno
,
loc
:
yyloc
,
expected
:
expected
});
}
}
if
(
action
[
0
]
instanceof
Array
&&
action
.
length
>
1
)
{
throw
new
Error
(
"
Parse Error: multiple actions possible at state:
"
+
state
+
"
, token:
"
+
symbol
);
}
switch
(
action
[
0
])
{
case
1
:
stack
.
push
(
symbol
);
vstack
.
push
(
this
.
lexer
.
yytext
);
lstack
.
push
(
this
.
lexer
.
yylloc
);
stack
.
push
(
action
[
1
]);
symbol
=
null
;
if
(
!
preErrorSymbol
)
{
yyleng
=
this
.
lexer
.
yyleng
;
yytext
=
this
.
lexer
.
yytext
;
yylineno
=
this
.
lexer
.
yylineno
;
yyloc
=
this
.
lexer
.
yylloc
;
if
(
recovering
>
0
)
recovering
--
;
}
else
{
symbol
=
preErrorSymbol
;
preErrorSymbol
=
null
;
}
break
;
case
2
:
len
=
this
.
productions_
[
action
[
1
]][
1
];
yyval
.
$
=
vstack
[
vstack
.
length
-
len
];
yyval
.
_$
=
{
first_line
:
lstack
[
lstack
.
length
-
(
len
||
1
)].
first_line
,
last_line
:
lstack
[
lstack
.
length
-
1
].
last_line
,
first_column
:
lstack
[
lstack
.
length
-
(
len
||
1
)].
first_column
,
last_column
:
lstack
[
lstack
.
length
-
1
].
last_column
};
r
=
this
.
performAction
.
call
(
yyval
,
yytext
,
yyleng
,
yylineno
,
this
.
yy
,
action
[
1
],
vstack
,
lstack
);
if
(
typeof
r
!==
"
undefined
"
)
{
return
r
;
}
if
(
len
)
{
stack
=
stack
.
slice
(
0
,
-
1
*
len
*
2
);
vstack
=
vstack
.
slice
(
0
,
-
1
*
len
);
lstack
=
lstack
.
slice
(
0
,
-
1
*
len
);
}
stack
.
push
(
this
.
productions_
[
action
[
1
]][
0
]);
vstack
.
push
(
yyval
.
$
);
lstack
.
push
(
yyval
.
_$
);
newState
=
table
[
stack
[
stack
.
length
-
2
]][
stack
[
stack
.
length
-
1
]];
stack
.
push
(
newState
);
break
;
case
3
:
return
true
;
}
}
return
true
;
}
};
/* Jison generated lexer */
var
lexer
=
(
function
(){
var
lexer
=
({
EOF
:
1
,
parseError
:
function
parseError
(
str
,
hash
)
{
if
(
this
.
yy
.
parseError
)
{
this
.
yy
.
parseError
(
str
,
hash
);
}
else
{
throw
new
Error
(
str
);
}
},
setInput
:
function
(
input
)
{
this
.
_input
=
input
;
this
.
_more
=
this
.
_less
=
this
.
done
=
false
;
this
.
yylineno
=
this
.
yyleng
=
0
;
this
.
yytext
=
this
.
matched
=
this
.
match
=
''
;
this
.
conditionStack
=
[
'
INITIAL
'
];
this
.
yylloc
=
{
first_line
:
1
,
first_column
:
0
,
last_line
:
1
,
last_column
:
0
};
return
this
;
},
input
:
function
()
{
var
ch
=
this
.
_input
[
0
];
this
.
yytext
+=
ch
;
this
.
yyleng
++
;
this
.
match
+=
ch
;
this
.
matched
+=
ch
;
var
lines
=
ch
.
match
(
/
\n
/
);
if
(
lines
)
this
.
yylineno
++
;
this
.
_input
=
this
.
_input
.
slice
(
1
);
return
ch
;
},
unput
:
function
(
ch
)
{
this
.
_input
=
ch
+
this
.
_input
;
return
this
;
},
more
:
function
()
{
this
.
_more
=
true
;
return
this
;
},
pastInput
:
function
()
{
var
past
=
this
.
matched
.
substr
(
0
,
this
.
matched
.
length
-
this
.
match
.
length
);
return
(
past
.
length
>
20
?
'
...
'
:
''
)
+
past
.
substr
(
-
20
).
replace
(
/
\n
/g
,
""
);
},
upcomingInput
:
function
()
{
var
next
=
this
.
match
;
if
(
next
.
length
<
20
)
{
next
+=
this
.
_input
.
substr
(
0
,
20
-
next
.
length
);
}
return
(
next
.
substr
(
0
,
20
)
+
(
next
.
length
>
20
?
'
...
'
:
''
)).
replace
(
/
\n
/g
,
""
);
},
showPosition
:
function
()
{
var
pre
=
this
.
pastInput
();
var
c
=
new
Array
(
pre
.
length
+
1
).
join
(
"
-
"
);
return
pre
+
this
.
upcomingInput
()
+
"
\n
"
+
c
+
"
^
"
;
},
next
:
function
()
{
if
(
this
.
done
)
{
return
this
.
EOF
;
}
if
(
!
this
.
_input
)
this
.
done
=
true
;
var
token
,
match
,
col
,
lines
;
if
(
!
this
.
_more
)
{
this
.
yytext
=
''
;
this
.
match
=
''
;
}
var
rules
=
this
.
_currentRules
();
for
(
var
i
=
0
;
i
<
rules
.
length
;
i
++
)
{
match
=
this
.
_input
.
match
(
this
.
rules
[
rules
[
i
]]);
if
(
match
)
{
lines
=
match
[
0
].
match
(
/
\n
.*/g
);
if
(
lines
)
this
.
yylineno
+=
lines
.
length
;
this
.
yylloc
=
{
first_line
:
this
.
yylloc
.
last_line
,
last_line
:
this
.
yylineno
+
1
,
first_column
:
this
.
yylloc
.
last_column
,
last_column
:
lines
?
lines
[
lines
.
length
-
1
].
length
-
1
:
this
.
yylloc
.
last_column
+
match
[
0
].
length
}
this
.
yytext
+=
match
[
0
];
this
.
match
+=
match
[
0
];
this
.
matches
=
match
;
this
.
yyleng
=
this
.
yytext
.
length
;
this
.
_more
=
false
;
this
.
_input
=
this
.
_input
.
slice
(
match
[
0
].
length
);
this
.
matched
+=
match
[
0
];
token
=
this
.
performAction
.
call
(
this
,
this
.
yy
,
this
,
rules
[
i
],
this
.
conditionStack
[
this
.
conditionStack
.
length
-
1
]);
if
(
token
)
return
token
;
else
return
;
}
}
if
(
this
.
_input
===
""
)
{
return
this
.
EOF
;
}
else
{
this
.
parseError
(
'
Lexical error on line
'
+
(
this
.
yylineno
+
1
)
+
'
. Unrecognized text.
\n
'
+
this
.
showPosition
(),
{
text
:
""
,
token
:
null
,
line
:
this
.
yylineno
});
}
},
lex
:
function
lex
()
{
var
r
=
this
.
next
();
if
(
typeof
r
!==
'
undefined
'
)
{
return
r
;
}
else
{
return
this
.
lex
();
}
},
begin
:
function
begin
(
condition
)
{
this
.
conditionStack
.
push
(
condition
);
},
popState
:
function
popState
()
{
return
this
.
conditionStack
.
pop
();
},
_currentRules
:
function
_currentRules
()
{
return
this
.
conditions
[
this
.
conditionStack
[
this
.
conditionStack
.
length
-
1
]].
rules
;
},
topState
:
function
()
{
return
this
.
conditionStack
[
this
.
conditionStack
.
length
-
2
];
},
pushState
:
function
begin
(
condition
)
{
this
.
begin
(
condition
);
}});
lexer
.
performAction
=
function
anonymous
(
yy
,
yy_
,
$avoiding_name_collisions
,
YY_START
)
{
var
YYSTATE
=
YY_START
switch
(
$avoiding_name_collisions
)
{
case
0
:
if
(
yy_
.
yytext
.
slice
(
-
1
)
!==
"
\\
"
)
this
.
begin
(
"
mu
"
);
if
(
yy_
.
yytext
.
slice
(
-
1
)
===
"
\\
"
)
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
0
,
yy_
.
yyleng
-
1
),
this
.
begin
(
"
emu
"
);
if
(
yy_
.
yytext
)
return
14
;
break
;
case
1
:
return
14
;
break
;
case
2
:
this
.
popState
();
return
14
;
break
;
case
3
:
return
24
;
break
;
case
4
:
return
16
;
break
;
case
5
:
return
20
;
break
;
case
6
:
return
19
;
break
;
case
7
:
return
19
;
break
;
case
8
:
return
23
;
break
;
case
9
:
return
23
;
break
;
case
10
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
3
,
yy_
.
yyleng
-
5
);
this
.
popState
();
return
15
;
break
;
case
11
:
return
22
;
break
;
case
12
:
return
34
;
break
;
case
13
:
return
33
;
break
;
case
14
:
return
33
;
break
;
case
15
:
return
36
;
break
;
case
16
:
/*ignore whitespace*/
break
;
case
17
:
this
.
popState
();
return
18
;
break
;
case
18
:
this
.
popState
();
return
18
;
break
;
case
19
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
1
,
yy_
.
yyleng
-
2
).
replace
(
/
\\
"/g
,
'
"
'
);
return
28
;
break
;
case
20
:
return
30
;
break
;
case
21
:
return
30
;
break
;
case
22
:
return
29
;
break
;
case
23
:
return
33
;
break
;
case
24
:
yy_
.
yytext
=
yy_
.
yytext
.
substr
(
1
,
yy_
.
yyleng
-
2
);
return
33
;
break
;
case
25
:
return
'
INVALID
'
;
break
;
case
26
:
return
5
;
break
;
}
};
lexer
.
rules
=
[
/^
[^\x
00
]
*
?(?=(\{\{))
/
,
/^
[^\x
00
]
+/
,
/^
[^\x
00
]{2,}?(?=(\{\{))
/
,
/^
\{\{
>/
,
/^
\{\{
#/
,
/^
\{\{\/
/
,
/^
\{\{\^
/
,
/^
\{\{\s
*else
\b
/
,
/^
\{\{\{
/
,
/^
\{\{
&/
,
/^
\{\{
!
[\s\S]
*
?\}\}
/
,
/^
\{\{
/
,
/^=/
,
/^
\.(?=[
}
])
/
,
/^
\.\.
/
,
/^
[\/
.
]
/
,
/^
\s
+/
,
/^
\}\}\}
/
,
/^
\}\}
/
,
/^"
(\\[
"
]
|
[^
"
])
*"/
,
/^true
(?=[
}
\s])
/
,
/^false
(?=[
}
\s])
/
,
/^
[
0-9
]
+
(?=[
}
\s])
/
,
/^
[
a-zA-Z0-9_$-
]
+
(?=[
=}
\s\/
.
])
/
,
/^
\[[^\]]
*
\]
/
,
/^./
,
/^$/
];
lexer
.
conditions
=
{
"
mu
"
:{
"
rules
"
:[
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
26
],
"
inclusive
"
:
false
},
"
emu
"
:{
"
rules
"
:[
2
],
"
inclusive
"
:
false
},
"
INITIAL
"
:{
"
rules
"
:[
0
,
1
,
26
],
"
inclusive
"
:
true
}};
return
lexer
;})()
parser
.
lexer
=
lexer
;
return
parser
;
})();
if
(
typeof
require
!==
'
undefined
'
&&
typeof
exports
!==
'
undefined
'
)
{
exports
.
parser
=
handlebars
;
exports
.
parse
=
function
()
{
return
handlebars
.
parse
.
apply
(
handlebars
,
arguments
);
}
exports
.
main
=
function
commonjsMain
(
args
)
{
if
(
!
args
[
1
])
throw
new
Error
(
'
Usage:
'
+
args
[
0
]
+
'
FILE
'
);
if
(
typeof
process
!==
'
undefined
'
)
{
var
source
=
require
(
'
fs
'
).
readFileSync
(
require
(
'
path
'
).
join
(
process
.
cwd
(),
args
[
1
]),
"
utf8
"
);
}
else
{
var
cwd
=
require
(
"
file
"
).
path
(
require
(
"
file
"
).
cwd
());
var
source
=
cwd
.
join
(
args
[
1
]).
read
({
charset
:
"
utf-8
"
});
}
return
exports
.
parser
.
parse
(
source
);
}
if
(
typeof
module
!==
'
undefined
'
&&
require
.
main
===
module
)
{
exports
.
main
(
typeof
process
!==
'
undefined
'
?
process
.
argv
.
slice
(
1
)
:
require
(
"
system
"
).
args
);
}
};
;
// lib/handlebars/compiler/base.js
Handlebars
.
Parser
=
handlebars
;
Handlebars
.
parse
=
function
(
string
)
{
Handlebars
.
Parser
.
yy
=
Handlebars
.
AST
;
return
Handlebars
.
Parser
.
parse
(
string
);
};
Handlebars
.
print
=
function
(
ast
)
{
return
new
Handlebars
.
PrintVisitor
().
accept
(
ast
);
};
Handlebars
.
logger
=
{
DEBUG
:
0
,
INFO
:
1
,
WARN
:
2
,
ERROR
:
3
,
level
:
3
,
// override in the host environment
log
:
function
(
level
,
str
)
{}
};
Handlebars
.
log
=
function
(
level
,
str
)
{
Handlebars
.
logger
.
log
(
level
,
str
);
};
;
// lib/handlebars/compiler/ast.js
(
function
()
{
Handlebars
.
AST
=
{};
Handlebars
.
AST
.
ProgramNode
=
function
(
statements
,
inverse
)
{
this
.
type
=
"
program
"
;
this
.
statements
=
statements
;
if
(
inverse
)
{
this
.
inverse
=
new
Handlebars
.
AST
.
ProgramNode
(
inverse
);
}
};
Handlebars
.
AST
.
MustacheNode
=
function
(
params
,
hash
,
unescaped
)
{
this
.
type
=
"
mustache
"
;
this
.
id
=
params
[
0
];
this
.
params
=
params
.
slice
(
1
);
this
.
hash
=
hash
;
this
.
escaped
=
!
unescaped
;
};
Handlebars
.
AST
.
PartialNode
=
function
(
id
,
context
)
{
this
.
type
=
"
partial
"
;
// TODO: disallow complex IDs
this
.
id
=
id
;
this
.
context
=
context
;
};
var
verifyMatch
=
function
(
open
,
close
)
{
if
(
open
.
original
!==
close
.
original
)
{
throw
new
Handlebars
.
Exception
(
open
.
original
+
"
doesn't match
"
+
close
.
original
);
}
};
Handlebars
.
AST
.
BlockNode
=
function
(
mustache
,
program
,
close
)
{
verifyMatch
(
mustache
.
id
,
close
);
this
.
type
=
"
block
"
;
this
.
mustache
=
mustache
;
this
.
program
=
program
;
};
Handlebars
.
AST
.
InverseNode
=
function
(
mustache
,
program
,
close
)
{
verifyMatch
(
mustache
.
id
,
close
);
this
.
type
=
"
inverse
"
;
this
.
mustache
=
mustache
;
this
.
program
=
program
;
};
Handlebars
.
AST
.
ContentNode
=
function
(
string
)
{
this
.
type
=
"
content
"
;
this
.
string
=
string
;
};
Handlebars
.
AST
.
HashNode
=
function
(
pairs
)
{
this
.
type
=
"
hash
"
;
this
.
pairs
=
pairs
;
};
Handlebars
.
AST
.
IdNode
=
function
(
parts
)
{
this
.
type
=
"
ID
"
;
this
.
original
=
parts
.
join
(
"
.
"
);
var
dig
=
[],
depth
=
0
;
for
(
var
i
=
0
,
l
=
parts
.
length
;
i
<
l
;
i
++
)
{
var
part
=
parts
[
i
];
if
(
part
===
"
..
"
)
{
depth
++
;
}
else
if
(
part
===
"
.
"
||
part
===
"
this
"
)
{
this
.
isScoped
=
true
;
}
else
{
dig
.
push
(
part
);
}
}
this
.
parts
=
dig
;
this
.
string
=
dig
.
join
(
'
.
'
);
this
.
depth
=
depth
;
this
.
isSimple
=
(
dig
.
length
===
1
)
&&
(
depth
===
0
);
};
Handlebars
.
AST
.
StringNode
=
function
(
string
)
{
this
.
type
=
"
STRING
"
;
this
.
string
=
string
;
};
Handlebars
.
AST
.
IntegerNode
=
function
(
integer
)
{
this
.
type
=
"
INTEGER
"
;
this
.
integer
=
integer
;
};
Handlebars
.
AST
.
BooleanNode
=
function
(
bool
)
{
this
.
type
=
"
BOOLEAN
"
;
this
.
bool
=
bool
;
};
Handlebars
.
AST
.
CommentNode
=
function
(
comment
)
{
this
.
type
=
"
comment
"
;
this
.
comment
=
comment
;
};
})();;
// lib/handlebars/utils.js
Handlebars
.
Exception
=
function
(
message
)
{
var
tmp
=
Error
.
prototype
.
constructor
.
apply
(
this
,
arguments
);
for
(
var
p
in
tmp
)
{
if
(
tmp
.
hasOwnProperty
(
p
))
{
this
[
p
]
=
tmp
[
p
];
}
}
this
.
message
=
tmp
.
message
;
};
Handlebars
.
Exception
.
prototype
=
new
Error
;
// Build out our basic SafeString type
Handlebars
.
SafeString
=
function
(
string
)
{
this
.
string
=
string
;
};
Handlebars
.
SafeString
.
prototype
.
toString
=
function
()
{
return
this
.
string
.
toString
();
};
(
function
()
{
var
escape
=
{
"
<
"
:
"
<
"
,
"
>
"
:
"
>
"
,
'
"
'
:
"
"
"
,
"
'
"
:
"
'
"
,
"
`
"
:
"
`
"
};
var
badChars
=
/&
(?!\w
+;
)
|
[
<>"'`
]
/g
;
var
possible
=
/
[
&<>"'`
]
/
;
var
escapeChar
=
function
(
chr
)
{
return
escape
[
chr
]
||
"
&
"
;
};
Handlebars
.
Utils
=
{
escapeExpression
:
function
(
string
)
{
// don't escape SafeStrings, since they're already safe
if
(
string
instanceof
Handlebars
.
SafeString
)
{
return
string
.
toString
();
}
else
if
(
string
==
null
||
string
===
false
)
{
return
""
;
}
if
(
!
possible
.
test
(
string
))
{
return
string
;
}
return
string
.
replace
(
badChars
,
escapeChar
);
},
isEmpty
:
function
(
value
)
{
if
(
typeof
value
===
"
undefined
"
)
{
return
true
;
}
else
if
(
value
===
null
)
{
return
true
;
}
else
if
(
value
===
false
)
{
return
true
;
}
else
if
(
Object
.
prototype
.
toString
.
call
(
value
)
===
"
[object Array]
"
&&
value
.
length
===
0
)
{
return
true
;
}
else
{
return
false
;
}
}
};
})();;
// lib/handlebars/compiler/compiler.js
Handlebars
.
Compiler
=
function
()
{};
Handlebars
.
JavaScriptCompiler
=
function
()
{};
(
function
(
Compiler
,
JavaScriptCompiler
)
{
Compiler
.
OPCODE_MAP
=
{
appendContent
:
1
,
getContext
:
2
,
lookupWithHelpers
:
3
,
lookup
:
4
,
append
:
5
,
invokeMustache
:
6
,
appendEscaped
:
7
,
pushString
:
8
,
truthyOrFallback
:
9
,
functionOrFallback
:
10
,
invokeProgram
:
11
,
invokePartial
:
12
,
push
:
13
,
assignToHash
:
15
,
pushStringParam
:
16
};
Compiler
.
MULTI_PARAM_OPCODES
=
{
appendContent
:
1
,
getContext
:
1
,
lookupWithHelpers
:
2
,
lookup
:
1
,
invokeMustache
:
3
,
pushString
:
1
,
truthyOrFallback
:
1
,
functionOrFallback
:
1
,
invokeProgram
:
3
,
invokePartial
:
1
,
push
:
1
,
assignToHash
:
1
,
pushStringParam
:
1
};
Compiler
.
DISASSEMBLE_MAP
=
{};
for
(
var
prop
in
Compiler
.
OPCODE_MAP
)
{
var
value
=
Compiler
.
OPCODE_MAP
[
prop
];
Compiler
.
DISASSEMBLE_MAP
[
value
]
=
prop
;
}
Compiler
.
multiParamSize
=
function
(
code
)
{
return
Compiler
.
MULTI_PARAM_OPCODES
[
Compiler
.
DISASSEMBLE_MAP
[
code
]];
};
Compiler
.
prototype
=
{
compiler
:
Compiler
,
disassemble
:
function
()
{
var
opcodes
=
this
.
opcodes
,
opcode
,
nextCode
;
var
out
=
[],
str
,
name
,
value
;
for
(
var
i
=
0
,
l
=
opcodes
.
length
;
i
<
l
;
i
++
)
{
opcode
=
opcodes
[
i
];
if
(
opcode
===
'
DECLARE
'
)
{
name
=
opcodes
[
++
i
];
value
=
opcodes
[
++
i
];
out
.
push
(
"
DECLARE
"
+
name
+
"
=
"
+
value
);
}
else
{
str
=
Compiler
.
DISASSEMBLE_MAP
[
opcode
];
var
extraParams
=
Compiler
.
multiParamSize
(
opcode
);
var
codes
=
[];
for
(
var
j
=
0
;
j
<
extraParams
;
j
++
)
{
nextCode
=
opcodes
[
++
i
];
if
(
typeof
nextCode
===
"
string
"
)
{
nextCode
=
"
\"
"
+
nextCode
.
replace
(
"
\n
"
,
"
\\
n
"
)
+
"
\"
"
;
}
codes
.
push
(
nextCode
);
}
str
=
str
+
"
"
+
codes
.
join
(
"
"
);
out
.
push
(
str
);
}
}
return
out
.
join
(
"
\n
"
);
},
guid
:
0
,
compile
:
function
(
program
,
options
)
{
this
.
children
=
[];
this
.
depths
=
{
list
:
[]};
this
.
options
=
options
;
// These changes will propagate to the other compiler components
var
knownHelpers
=
this
.
options
.
knownHelpers
;
this
.
options
.
knownHelpers
=
{
'
helperMissing
'
:
true
,
'
blockHelperMissing
'
:
true
,
'
each
'
:
true
,
'
if
'
:
true
,
'
unless
'
:
true
,
'
with
'
:
true
,
'
log
'
:
true
};
if
(
knownHelpers
)
{
for
(
var
name
in
knownHelpers
)
{
this
.
options
.
knownHelpers
[
name
]
=
knownHelpers
[
name
];
}
}
return
this
.
program
(
program
);
},
accept
:
function
(
node
)
{
return
this
[
node
.
type
](
node
);
},
program
:
function
(
program
)
{
var
statements
=
program
.
statements
,
statement
;
this
.
opcodes
=
[];
for
(
var
i
=
0
,
l
=
statements
.
length
;
i
<
l
;
i
++
)
{
statement
=
statements
[
i
];
this
[
statement
.
type
](
statement
);
}
this
.
isSimple
=
l
===
1
;
this
.
depths
.
list
=
this
.
depths
.
list
.
sort
(
function
(
a
,
b
)
{
return
a
-
b
;
});
return
this
;
},
compileProgram
:
function
(
program
)
{
var
result
=
new
this
.
compiler
().
compile
(
program
,
this
.
options
);
var
guid
=
this
.
guid
++
;
this
.
usePartial
=
this
.
usePartial
||
result
.
usePartial
;
this
.
children
[
guid
]
=
result
;
for
(
var
i
=
0
,
l
=
result
.
depths
.
list
.
length
;
i
<
l
;
i
++
)
{
depth
=
result
.
depths
.
list
[
i
];
if
(
depth
<
2
)
{
continue
;
}
else
{
this
.
addDepth
(
depth
-
1
);
}
}
return
guid
;
},
block
:
function
(
block
)
{
var
mustache
=
block
.
mustache
;
var
depth
,
child
,
inverse
,
inverseGuid
;
var
params
=
this
.
setupStackForMustache
(
mustache
);
var
programGuid
=
this
.
compileProgram
(
block
.
program
);
if
(
block
.
program
.
inverse
)
{
inverseGuid
=
this
.
compileProgram
(
block
.
program
.
inverse
);
this
.
declare
(
'
inverse
'
,
inverseGuid
);
}
this
.
opcode
(
'
invokeProgram
'
,
programGuid
,
params
.
length
,
!!
mustache
.
hash
);
this
.
declare
(
'
inverse
'
,
null
);
this
.
opcode
(
'
append
'
);
},
inverse
:
function
(
block
)
{
var
params
=
this
.
setupStackForMustache
(
block
.
mustache
);
var
programGuid
=
this
.
compileProgram
(
block
.
program
);
this
.
declare
(
'
inverse
'
,
programGuid
);
this
.
opcode
(
'
invokeProgram
'
,
null
,
params
.
length
,
!!
block
.
mustache
.
hash
);
this
.
declare
(
'
inverse
'
,
null
);
this
.
opcode
(
'
append
'
);
},
hash
:
function
(
hash
)
{
var
pairs
=
hash
.
pairs
,
pair
,
val
;
this
.
opcode
(
'
push
'
,
'
{}
'
);
for
(
var
i
=
0
,
l
=
pairs
.
length
;
i
<
l
;
i
++
)
{
pair
=
pairs
[
i
];
val
=
pair
[
1
];
this
.
accept
(
val
);
this
.
opcode
(
'
assignToHash
'
,
pair
[
0
]);
}
},
partial
:
function
(
partial
)
{
var
id
=
partial
.
id
;
this
.
usePartial
=
true
;
if
(
partial
.
context
)
{
this
.
ID
(
partial
.
context
);
}
else
{
this
.
opcode
(
'
push
'
,
'
depth0
'
);
}
this
.
opcode
(
'
invokePartial
'
,
id
.
original
);
this
.
opcode
(
'
append
'
);
},
content
:
function
(
content
)
{
this
.
opcode
(
'
appendContent
'
,
content
.
string
);
},
mustache
:
function
(
mustache
)
{
var
params
=
this
.
setupStackForMustache
(
mustache
);
this
.
opcode
(
'
invokeMustache
'
,
params
.
length
,
mustache
.
id
.
original
,
!!
mustache
.
hash
);
if
(
mustache
.
escaped
&&
!
this
.
options
.
noEscape
)
{
this
.
opcode
(
'
appendEscaped
'
);
}
else
{
this
.
opcode
(
'
append
'
);
}
},
ID
:
function
(
id
)
{
this
.
addDepth
(
id
.
depth
);
this
.
opcode
(
'
getContext
'
,
id
.
depth
);
this
.
opcode
(
'
lookupWithHelpers
'
,
id
.
parts
[
0
]
||
null
,
id
.
isScoped
||
false
);
for
(
var
i
=
1
,
l
=
id
.
parts
.
length
;
i
<
l
;
i
++
)
{
this
.
opcode
(
'
lookup
'
,
id
.
parts
[
i
]);
}
},
STRING
:
function
(
string
)
{
this
.
opcode
(
'
pushString
'
,
string
.
string
);
},
INTEGER
:
function
(
integer
)
{
this
.
opcode
(
'
push
'
,
integer
.
integer
);
},
BOOLEAN
:
function
(
bool
)
{
this
.
opcode
(
'
push
'
,
bool
.
bool
);
},
comment
:
function
()
{},
// HELPERS
pushParams
:
function
(
params
)
{
var
i
=
params
.
length
,
param
;
while
(
i
--
)
{
param
=
params
[
i
];
if
(
this
.
options
.
stringParams
)
{
if
(
param
.
depth
)
{
this
.
addDepth
(
param
.
depth
);
}
this
.
opcode
(
'
getContext
'
,
param
.
depth
||
0
);
this
.
opcode
(
'
pushStringParam
'
,
param
.
string
);
}
else
{
this
[
param
.
type
](
param
);
}
}
},
opcode
:
function
(
name
,
val1
,
val2
,
val3
)
{
this
.
opcodes
.
push
(
Compiler
.
OPCODE_MAP
[
name
]);
if
(
val1
!==
undefined
)
{
this
.
opcodes
.
push
(
val1
);
}
if
(
val2
!==
undefined
)
{
this
.
opcodes
.
push
(
val2
);
}
if
(
val3
!==
undefined
)
{
this
.
opcodes
.
push
(
val3
);
}
},
declare
:
function
(
name
,
value
)
{
this
.
opcodes
.
push
(
'
DECLARE
'
);
this
.
opcodes
.
push
(
name
);
this
.
opcodes
.
push
(
value
);
},
addDepth
:
function
(
depth
)
{
if
(
depth
===
0
)
{
return
;
}
if
(
!
this
.
depths
[
depth
])
{
this
.
depths
[
depth
]
=
true
;
this
.
depths
.
list
.
push
(
depth
);
}
},
setupStackForMustache
:
function
(
mustache
)
{
var
params
=
mustache
.
params
;
this
.
pushParams
(
params
);
if
(
mustache
.
hash
)
{
this
.
hash
(
mustache
.
hash
);
}
this
.
ID
(
mustache
.
id
);
return
params
;
}
};
JavaScriptCompiler
.
prototype
=
{
// PUBLIC API: You can override these methods in a subclass to provide
// alternative compiled forms for name lookup and buffering semantics
nameLookup
:
function
(
parent
,
name
,
type
)
{
if
(
/^
[
0-9
]
+$/
.
test
(
name
))
{
return
parent
+
"
[
"
+
name
+
"
]
"
;
}
else
if
(
JavaScriptCompiler
.
isValidJavaScriptVariableName
(
name
))
{
return
parent
+
"
.
"
+
name
;
}
else
{
return
parent
+
"
['
"
+
name
+
"
']
"
;
}
},
appendToBuffer
:
function
(
string
)
{
if
(
this
.
environment
.
isSimple
)
{
return
"
return
"
+
string
+
"
;
"
;
}
else
{
return
"
buffer +=
"
+
string
+
"
;
"
;
}
},
initializeBuffer
:
function
()
{
return
this
.
quotedString
(
""
);
},
namespace
:
"
Handlebars
"
,
// END PUBLIC API
compile
:
function
(
environment
,
options
,
context
,
asObject
)
{
this
.
environment
=
environment
;
this
.
options
=
options
||
{};
this
.
name
=
this
.
environment
.
name
;
this
.
isChild
=
!!
context
;
this
.
context
=
context
||
{
programs
:
[],
aliases
:
{
self
:
'
this
'
},
registers
:
{
list
:
[]}
};
this
.
preamble
();
this
.
stackSlot
=
0
;
this
.
stackVars
=
[];
this
.
compileChildren
(
environment
,
options
);
var
opcodes
=
environment
.
opcodes
,
opcode
;
this
.
i
=
0
;
for
(
l
=
opcodes
.
length
;
this
.
i
<
l
;
this
.
i
++
)
{
opcode
=
this
.
nextOpcode
(
0
);
if
(
opcode
[
0
]
===
'
DECLARE
'
)
{
this
.
i
=
this
.
i
+
2
;
this
[
opcode
[
1
]]
=
opcode
[
2
];
}
else
{
this
.
i
=
this
.
i
+
opcode
[
1
].
length
;
this
[
opcode
[
0
]].
apply
(
this
,
opcode
[
1
]);
}
}
return
this
.
createFunctionContext
(
asObject
);
},
nextOpcode
:
function
(
n
)
{
var
opcodes
=
this
.
environment
.
opcodes
,
opcode
=
opcodes
[
this
.
i
+
n
],
name
,
val
;
var
extraParams
,
codes
;
if
(
opcode
===
'
DECLARE
'
)
{
name
=
opcodes
[
this
.
i
+
1
];
val
=
opcodes
[
this
.
i
+
2
];
return
[
'
DECLARE
'
,
name
,
val
];
}
else
{
name
=
Compiler
.
DISASSEMBLE_MAP
[
opcode
];
extraParams
=
Compiler
.
multiParamSize
(
opcode
);
codes
=
[];
for
(
var
j
=
0
;
j
<
extraParams
;
j
++
)
{
codes
.
push
(
opcodes
[
this
.
i
+
j
+
1
+
n
]);
}
return
[
name
,
codes
];
}
},
eat
:
function
(
opcode
)
{
this
.
i
=
this
.
i
+
opcode
.
length
;
},
preamble
:
function
()
{
var
out
=
[];
// this register will disambiguate helper lookup from finding a function in
// a context. This is necessary for mustache compatibility, which requires
// that context functions in blocks are evaluated by blockHelperMissing, and
// then proceed as if the resulting value was provided to blockHelperMissing.
this
.
useRegister
(
'
foundHelper
'
);
if
(
!
this
.
isChild
)
{
var
namespace
=
this
.
namespace
;
var
copies
=
"
helpers = helpers ||
"
+
namespace
+
"
.helpers;
"
;
if
(
this
.
environment
.
usePartial
)
{
copies
=
copies
+
"
partials = partials ||
"
+
namespace
+
"
.partials;
"
;
}
out
.
push
(
copies
);
}
else
{
out
.
push
(
''
);
}
if
(
!
this
.
environment
.
isSimple
)
{
out
.
push
(
"
, buffer =
"
+
this
.
initializeBuffer
());
}
else
{
out
.
push
(
""
);
}
// track the last context pushed into place to allow skipping the
// getContext opcode when it would be a noop
this
.
lastContext
=
0
;
this
.
source
=
out
;
},
createFunctionContext
:
function
(
asObject
)
{
var
locals
=
this
.
stackVars
;
if
(
!
this
.
isChild
)
{
locals
=
locals
.
concat
(
this
.
context
.
registers
.
list
);
}
if
(
locals
.
length
>
0
)
{
this
.
source
[
1
]
=
this
.
source
[
1
]
+
"
,
"
+
locals
.
join
(
"
,
"
);
}
// Generate minimizer alias mappings
if
(
!
this
.
isChild
)
{
var
aliases
=
[]
for
(
var
alias
in
this
.
context
.
aliases
)
{
this
.
source
[
1
]
=
this
.
source
[
1
]
+
'
,
'
+
alias
+
'
=
'
+
this
.
context
.
aliases
[
alias
];
}
}
if
(
this
.
source
[
1
])
{
this
.
source
[
1
]
=
"
var
"
+
this
.
source
[
1
].
substring
(
2
)
+
"
;
"
;
}
// Merge children
if
(
!
this
.
isChild
)
{
this
.
source
[
1
]
+=
'
\n
'
+
this
.
context
.
programs
.
join
(
'
\n
'
)
+
'
\n
'
;
}
if
(
!
this
.
environment
.
isSimple
)
{
this
.
source
.
push
(
"
return buffer;
"
);
}
var
params
=
this
.
isChild
?
[
"
depth0
"
,
"
data
"
]
:
[
"
Handlebars
"
,
"
depth0
"
,
"
helpers
"
,
"
partials
"
,
"
data
"
];
for
(
var
i
=
0
,
l
=
this
.
environment
.
depths
.
list
.
length
;
i
<
l
;
i
++
)
{
params
.
push
(
"
depth
"
+
this
.
environment
.
depths
.
list
[
i
]);
}
if
(
asObject
)
{
params
.
push
(
this
.
source
.
join
(
"
\n
"
));
return
Function
.
apply
(
this
,
params
);
}
else
{
var
functionSource
=
'
function
'
+
(
this
.
name
||
''
)
+
'
(
'
+
params
.
join
(
'
,
'
)
+
'
) {
\n
'
+
this
.
source
.
join
(
"
\n
"
)
+
'
}
'
;
Handlebars
.
log
(
Handlebars
.
logger
.
DEBUG
,
functionSource
+
"
\n\n
"
);
return
functionSource
;
}
},
appendContent
:
function
(
content
)
{
this
.
source
.
push
(
this
.
appendToBuffer
(
this
.
quotedString
(
content
)));
},
append
:
function
()
{
var
local
=
this
.
popStack
();
this
.
source
.
push
(
"
if(
"
+
local
+
"
||
"
+
local
+
"
=== 0) {
"
+
this
.
appendToBuffer
(
local
)
+
"
}
"
);
if
(
this
.
environment
.
isSimple
)
{
this
.
source
.
push
(
"
else {
"
+
this
.
appendToBuffer
(
"
''
"
)
+
"
}
"
);
}
},
appendEscaped
:
function
()
{
var
opcode
=
this
.
nextOpcode
(
1
),
extra
=
""
;
this
.
context
.
aliases
.
escapeExpression
=
'
this.escapeExpression
'
;
if
(
opcode
[
0
]
===
'
appendContent
'
)
{
extra
=
"
+
"
+
this
.
quotedString
(
opcode
[
1
][
0
]);
this
.
eat
(
opcode
);
}
this
.
source
.
push
(
this
.
appendToBuffer
(
"
escapeExpression(
"
+
this
.
popStack
()
+
"
)
"
+
extra
));
},
getContext
:
function
(
depth
)
{
if
(
this
.
lastContext
!==
depth
)
{
this
.
lastContext
=
depth
;
}
},
lookupWithHelpers
:
function
(
name
,
isScoped
)
{
if
(
name
)
{
var
topStack
=
this
.
nextStack
();
this
.
usingKnownHelper
=
false
;
var
toPush
;
if
(
!
isScoped
&&
this
.
options
.
knownHelpers
[
name
])
{
toPush
=
topStack
+
"
=
"
+
this
.
nameLookup
(
'
helpers
'
,
name
,
'
helper
'
);
this
.
usingKnownHelper
=
true
;
}
else
if
(
isScoped
||
this
.
options
.
knownHelpersOnly
)
{
toPush
=
topStack
+
"
=
"
+
this
.
nameLookup
(
'
depth
'
+
this
.
lastContext
,
name
,
'
context
'
);
}
else
{
this
.
register
(
'
foundHelper
'
,
this
.
nameLookup
(
'
helpers
'
,
name
,
'
helper
'
));
toPush
=
topStack
+
"
= foundHelper ||
"
+
this
.
nameLookup
(
'
depth
'
+
this
.
lastContext
,
name
,
'
context
'
);
}
toPush
+=
'
;
'
;
this
.
source
.
push
(
toPush
);
}
else
{
this
.
pushStack
(
'
depth
'
+
this
.
lastContext
);
}
},
lookup
:
function
(
name
)
{
var
topStack
=
this
.
topStack
();
this
.
source
.
push
(
topStack
+
"
= (
"
+
topStack
+
"
=== null ||
"
+
topStack
+
"
=== undefined ||
"
+
topStack
+
"
=== false ?
"
+
topStack
+
"
:
"
+
this
.
nameLookup
(
topStack
,
name
,
'
context
'
)
+
"
);
"
);
},
pushStringParam
:
function
(
string
)
{
this
.
pushStack
(
'
depth
'
+
this
.
lastContext
);
this
.
pushString
(
string
);
},
pushString
:
function
(
string
)
{
this
.
pushStack
(
this
.
quotedString
(
string
));
},
push
:
function
(
name
)
{
this
.
pushStack
(
name
);
},
invokeMustache
:
function
(
paramSize
,
original
,
hasHash
)
{
this
.
populateParams
(
paramSize
,
this
.
quotedString
(
original
),
"
{}
"
,
null
,
hasHash
,
function
(
nextStack
,
helperMissingString
,
id
)
{
if
(
!
this
.
usingKnownHelper
)
{
this
.
context
.
aliases
.
helperMissing
=
'
helpers.helperMissing
'
;
this
.
context
.
aliases
.
undef
=
'
void 0
'
;
this
.
source
.
push
(
"
else if(
"
+
id
+
"
=== undef) {
"
+
nextStack
+
"
= helperMissing.call(
"
+
helperMissingString
+
"
); }
"
);
if
(
nextStack
!==
id
)
{
this
.
source
.
push
(
"
else {
"
+
nextStack
+
"
=
"
+
id
+
"
; }
"
);
}
}
});
},
invokeProgram
:
function
(
guid
,
paramSize
,
hasHash
)
{
var
inverse
=
this
.
programExpression
(
this
.
inverse
);
var
mainProgram
=
this
.
programExpression
(
guid
);
this
.
populateParams
(
paramSize
,
null
,
mainProgram
,
inverse
,
hasHash
,
function
(
nextStack
,
helperMissingString
,
id
)
{
if
(
!
this
.
usingKnownHelper
)
{
this
.
context
.
aliases
.
blockHelperMissing
=
'
helpers.blockHelperMissing
'
;
this
.
source
.
push
(
"
else {
"
+
nextStack
+
"
= blockHelperMissing.call(
"
+
helperMissingString
+
"
); }
"
);
}
});
},
populateParams
:
function
(
paramSize
,
helperId
,
program
,
inverse
,
hasHash
,
fn
)
{
var
needsRegister
=
hasHash
||
this
.
options
.
stringParams
||
inverse
||
this
.
options
.
data
;
var
id
=
this
.
popStack
(),
nextStack
;
var
params
=
[],
param
,
stringParam
,
stringOptions
;
if
(
needsRegister
)
{
this
.
register
(
'
tmp1
'
,
program
);
stringOptions
=
'
tmp1
'
;
}
else
{
stringOptions
=
'
{ hash: {} }
'
;
}
if
(
needsRegister
)
{
var
hash
=
(
hasHash
?
this
.
popStack
()
:
'
{}
'
);
this
.
source
.
push
(
'
tmp1.hash =
'
+
hash
+
'
;
'
);
}
if
(
this
.
options
.
stringParams
)
{
this
.
source
.
push
(
'
tmp1.contexts = [];
'
);
}
for
(
var
i
=
0
;
i
<
paramSize
;
i
++
)
{
param
=
this
.
popStack
();
params
.
push
(
param
);
if
(
this
.
options
.
stringParams
)
{
this
.
source
.
push
(
'
tmp1.contexts.push(
'
+
this
.
popStack
()
+
'
);
'
);
}
}
if
(
inverse
)
{
this
.
source
.
push
(
'
tmp1.fn = tmp1;
'
);
this
.
source
.
push
(
'
tmp1.inverse =
'
+
inverse
+
'
;
'
);
}
if
(
this
.
options
.
data
)
{
this
.
source
.
push
(
'
tmp1.data = data;
'
);
}
params
.
push
(
stringOptions
);
this
.
populateCall
(
params
,
id
,
helperId
||
id
,
fn
,
program
!==
'
{}
'
);
},
populateCall
:
function
(
params
,
id
,
helperId
,
fn
,
program
)
{
var
paramString
=
[
"
depth0
"
].
concat
(
params
).
join
(
"
,
"
);
var
helperMissingString
=
[
"
depth0
"
].
concat
(
helperId
).
concat
(
params
).
join
(
"
,
"
);
var
nextStack
=
this
.
nextStack
();
if
(
this
.
usingKnownHelper
)
{
this
.
source
.
push
(
nextStack
+
"
=
"
+
id
+
"
.call(
"
+
paramString
+
"
);
"
);
}
else
{
this
.
context
.
aliases
.
functionType
=
'
"function"
'
;
var
condition
=
program
?
"
foundHelper &&
"
:
""
this
.
source
.
push
(
"
if(
"
+
condition
+
"
typeof
"
+
id
+
"
=== functionType) {
"
+
nextStack
+
"
=
"
+
id
+
"
.call(
"
+
paramString
+
"
); }
"
);
}
fn
.
call
(
this
,
nextStack
,
helperMissingString
,
id
);
this
.
usingKnownHelper
=
false
;
},
invokePartial
:
function
(
context
)
{
params
=
[
this
.
nameLookup
(
'
partials
'
,
context
,
'
partial
'
),
"
'
"
+
context
+
"
'
"
,
this
.
popStack
(),
"
helpers
"
,
"
partials
"
];
if
(
this
.
options
.
data
)
{
params
.
push
(
"
data
"
);
}
this
.
pushStack
(
"
self.invokePartial(
"
+
params
.
join
(
"
,
"
)
+
"
);
"
);
},
assignToHash
:
function
(
key
)
{
var
value
=
this
.
popStack
();
var
hash
=
this
.
topStack
();
this
.
source
.
push
(
hash
+
"
['
"
+
key
+
"
'] =
"
+
value
+
"
;
"
);
},
// HELPERS
compiler
:
JavaScriptCompiler
,
compileChildren
:
function
(
environment
,
options
)
{
var
children
=
environment
.
children
,
child
,
compiler
;
for
(
var
i
=
0
,
l
=
children
.
length
;
i
<
l
;
i
++
)
{
child
=
children
[
i
];
compiler
=
new
this
.
compiler
();
this
.
context
.
programs
.
push
(
''
);
// Placeholder to prevent name conflicts for nested children
var
index
=
this
.
context
.
programs
.
length
;
child
.
index
=
index
;
child
.
name
=
'
program
'
+
index
;
this
.
context
.
programs
[
index
]
=
compiler
.
compile
(
child
,
options
,
this
.
context
);
}
},
programExpression
:
function
(
guid
)
{
if
(
guid
==
null
)
{
return
"
self.noop
"
;
}
var
child
=
this
.
environment
.
children
[
guid
],
depths
=
child
.
depths
.
list
;
var
programParams
=
[
child
.
index
,
child
.
name
,
"
data
"
];
for
(
var
i
=
0
,
l
=
depths
.
length
;
i
<
l
;
i
++
)
{
depth
=
depths
[
i
];
if
(
depth
===
1
)
{
programParams
.
push
(
"
depth0
"
);
}
else
{
programParams
.
push
(
"
depth
"
+
(
depth
-
1
));
}
}
if
(
depths
.
length
===
0
)
{
return
"
self.program(
"
+
programParams
.
join
(
"
,
"
)
+
"
)
"
;
}
else
{
programParams
.
shift
();
return
"
self.programWithDepth(
"
+
programParams
.
join
(
"
,
"
)
+
"
)
"
;
}
},
register
:
function
(
name
,
val
)
{
this
.
useRegister
(
name
);
this
.
source
.
push
(
name
+
"
=
"
+
val
+
"
;
"
);
},
useRegister
:
function
(
name
)
{
if
(
!
this
.
context
.
registers
[
name
])
{
this
.
context
.
registers
[
name
]
=
true
;
this
.
context
.
registers
.
list
.
push
(
name
);
}
},
pushStack
:
function
(
item
)
{
this
.
source
.
push
(
this
.
nextStack
()
+
"
=
"
+
item
+
"
;
"
);
return
"
stack
"
+
this
.
stackSlot
;
},
nextStack
:
function
()
{
this
.
stackSlot
++
;
if
(
this
.
stackSlot
>
this
.
stackVars
.
length
)
{
this
.
stackVars
.
push
(
"
stack
"
+
this
.
stackSlot
);
}
return
"
stack
"
+
this
.
stackSlot
;
},
popStack
:
function
()
{
return
"
stack
"
+
this
.
stackSlot
--
;
},
topStack
:
function
()
{
return
"
stack
"
+
this
.
stackSlot
;
},
quotedString
:
function
(
str
)
{
return
'
"
'
+
str
.
replace
(
/
\\
/g
,
'
\\\\
'
)
.
replace
(
/"/g
,
'
\\
"
'
)
.
replace
(
/
\n
/g
,
'
\\
n
'
)
.
replace
(
/
\r
/g
,
'
\\
r
'
)
+
'
"
'
;
}
};
var
reservedWords
=
(
"
break else new var
"
+
"
case finally return void
"
+
"
catch for switch while
"
+
"
continue function this with
"
+
"
default if throw
"
+
"
delete in try
"
+
"
do instanceof typeof
"
+
"
abstract enum int short
"
+
"
boolean export interface static
"
+
"
byte extends long super
"
+
"
char final native synchronized
"
+
"
class float package throws
"
+
"
const goto private transient
"
+
"
debugger implements protected volatile
"
+
"
double import public let yield
"
).
split
(
"
"
);
var
compilerWords
=
JavaScriptCompiler
.
RESERVED_WORDS
=
{};
for
(
var
i
=
0
,
l
=
reservedWords
.
length
;
i
<
l
;
i
++
)
{
compilerWords
[
reservedWords
[
i
]]
=
true
;
}
JavaScriptCompiler
.
isValidJavaScriptVariableName
=
function
(
name
)
{
if
(
!
JavaScriptCompiler
.
RESERVED_WORDS
[
name
]
&&
/^
[
a-zA-Z_$
][
0-9a-zA-Z_$
]
+$/
.
test
(
name
))
{
return
true
;
}
return
false
;
}
})(
Handlebars
.
Compiler
,
Handlebars
.
JavaScriptCompiler
);
Handlebars
.
precompile
=
function
(
string
,
options
)
{
options
=
options
||
{};
var
ast
=
Handlebars
.
parse
(
string
);
var
environment
=
new
Handlebars
.
Compiler
().
compile
(
ast
,
options
);
return
new
Handlebars
.
JavaScriptCompiler
().
compile
(
environment
,
options
);
};
Handlebars
.
compile
=
function
(
string
,
options
)
{
options
=
options
||
{};
var
compiled
;
function
compile
()
{
var
ast
=
Handlebars
.
parse
(
string
);
var
environment
=
new
Handlebars
.
Compiler
().
compile
(
ast
,
options
);
var
templateSpec
=
new
Handlebars
.
JavaScriptCompiler
().
compile
(
environment
,
options
,
undefined
,
true
);
return
Handlebars
.
template
(
templateSpec
);
}
// Template is only compiled on first use and cached after that point.
return
function
(
context
,
options
)
{
if
(
!
compiled
)
{
compiled
=
compile
();
}
return
compiled
.
call
(
this
,
context
,
options
);
};
};
;
// lib/handlebars/runtime.js
Handlebars
.
VM
=
{
template
:
function
(
templateSpec
)
{
// Just add water
var
container
=
{
escapeExpression
:
Handlebars
.
Utils
.
escapeExpression
,
invokePartial
:
Handlebars
.
VM
.
invokePartial
,
programs
:
[],
program
:
function
(
i
,
fn
,
data
)
{
var
programWrapper
=
this
.
programs
[
i
];
if
(
data
)
{
return
Handlebars
.
VM
.
program
(
fn
,
data
);
}
else
if
(
programWrapper
)
{
return
programWrapper
;
}
else
{
programWrapper
=
this
.
programs
[
i
]
=
Handlebars
.
VM
.
program
(
fn
);
return
programWrapper
;
}
},
programWithDepth
:
Handlebars
.
VM
.
programWithDepth
,
noop
:
Handlebars
.
VM
.
noop
};
return
function
(
context
,
options
)
{
options
=
options
||
{};
return
templateSpec
.
call
(
container
,
Handlebars
,
context
,
options
.
helpers
,
options
.
partials
,
options
.
data
);
};
},
programWithDepth
:
function
(
fn
,
data
,
$depth
)
{
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
,
2
);
return
function
(
context
,
options
)
{
options
=
options
||
{};
return
fn
.
apply
(
this
,
[
context
,
options
.
data
||
data
].
concat
(
args
));
};
},
program
:
function
(
fn
,
data
)
{
return
function
(
context
,
options
)
{
options
=
options
||
{};
return
fn
(
context
,
options
.
data
||
data
);
};
},
noop
:
function
()
{
return
""
;
},
invokePartial
:
function
(
partial
,
name
,
context
,
helpers
,
partials
,
data
)
{
options
=
{
helpers
:
helpers
,
partials
:
partials
,
data
:
data
};
if
(
partial
===
undefined
)
{
throw
new
Handlebars
.
Exception
(
"
The partial
"
+
name
+
"
could not be found
"
);
}
else
if
(
partial
instanceof
Function
)
{
return
partial
(
context
,
options
);
}
else
if
(
!
Handlebars
.
compile
)
{
throw
new
Handlebars
.
Exception
(
"
The partial
"
+
name
+
"
could not be compiled when running in runtime-only mode
"
);
}
else
{
partials
[
name
]
=
Handlebars
.
compile
(
partial
);
return
partials
[
name
](
context
,
options
);
}
}
};
Handlebars
.
template
=
Handlebars
.
VM
.
template
;
;
labs/architecture-examples/dijon/js/libs/jquery-1.7.1.min.js
deleted
100644 → 0
View file @
55483ef9
/*! jQuery v1.7.1 jquery.com | jquery.org/license */
(
function
(
a
,
b
){
function
cy
(
a
){
return
f
.
isWindow
(
a
)?
a
:
a
.
nodeType
===
9
?
a
.
defaultView
||
a
.
parentWindow
:
!
1
}
function
cv
(
a
){
if
(
!
ck
[
a
]){
var
b
=
c
.
body
,
d
=
f
(
"
<
"
+
a
+
"
>
"
).
appendTo
(
b
),
e
=
d
.
css
(
"
display
"
);
d
.
remove
();
if
(
e
===
"
none
"
||
e
===
""
){
cl
||
(
cl
=
c
.
createElement
(
"
iframe
"
),
cl
.
frameBorder
=
cl
.
width
=
cl
.
height
=
0
),
b
.
appendChild
(
cl
);
if
(
!
cm
||!
cl
.
createElement
)
cm
=
(
cl
.
contentWindow
||
cl
.
contentDocument
).
document
,
cm
.
write
((
c
.
compatMode
===
"
CSS1Compat
"
?
"
<!doctype html>
"
:
""
)
+
"
<html><body>
"
),
cm
.
close
();
d
=
cm
.
createElement
(
a
),
cm
.
body
.
appendChild
(
d
),
e
=
f
.
css
(
d
,
"
display
"
),
b
.
removeChild
(
cl
)}
ck
[
a
]
=
e
}
return
ck
[
a
]}
function
cu
(
a
,
b
){
var
c
=
{};
f
.
each
(
cq
.
concat
.
apply
([],
cq
.
slice
(
0
,
b
)),
function
(){
c
[
this
]
=
a
});
return
c
}
function
ct
(){
cr
=
b
}
function
cs
(){
setTimeout
(
ct
,
0
);
return
cr
=
f
.
now
()}
function
cj
(){
try
{
return
new
a
.
ActiveXObject
(
"
Microsoft.XMLHTTP
"
)}
catch
(
b
){}}
function
ci
(){
try
{
return
new
a
.
XMLHttpRequest
}
catch
(
b
){}}
function
cc
(
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
cb
(
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
ca
(
a
,
b
,
c
,
d
){
if
(
f
.
isArray
(
b
))
f
.
each
(
b
,
function
(
b
,
e
){
c
||
bE
.
test
(
a
)?
d
(
a
,
e
):
ca
(
a
+
"
[
"
+
(
typeof
e
==
"
object
"
||
f
.
isArray
(
e
)?
b
:
""
)
+
"
]
"
,
e
,
c
,
d
)});
else
if
(
!
c
&&
b
!=
null
&&
typeof
b
==
"
object
"
)
for
(
var
e
in
b
)
ca
(
a
+
"
[
"
+
e
+
"
]
"
,
b
[
e
],
c
,
d
);
else
d
(
a
,
b
)}
function
b_
(
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
b$
(
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
===
bT
,
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
=
b$
(
a
,
c
,
d
,
e
,
l
,
g
)));(
k
||!
l
)
&&!
g
[
"
*
"
]
&&
(
l
=
b$
(
a
,
c
,
d
,
e
,
"
*
"
,
g
));
return
l
}
function
bZ
(
a
){
return
function
(
b
,
c
){
typeof
b
!=
"
string
"
&&
(
c
=
b
,
b
=
"
*
"
);
if
(
f
.
isFunction
(
c
)){
var
d
=
b
.
toLowerCase
().
split
(
bP
),
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
bC
(
a
,
b
,
c
){
var
d
=
b
===
"
width
"
?
a
.
offsetWidth
:
a
.
offsetHeight
,
e
=
b
===
"
width
"
?
bx
:
by
,
g
=
0
,
h
=
e
.
length
;
if
(
d
>
0
){
if
(
c
!==
"
border
"
)
for
(;
g
<
h
;
g
++
)
c
||
(
d
-=
parseFloat
(
f
.
css
(
a
,
"
padding
"
+
e
[
g
]))
||
0
),
c
===
"
margin
"
?
d
+=
parseFloat
(
f
.
css
(
a
,
c
+
e
[
g
]))
||
0
:
d
-=
parseFloat
(
f
.
css
(
a
,
"
border
"
+
e
[
g
]
+
"
Width
"
))
||
0
;
return
d
+
"
px
"
}
d
=
bz
(
a
,
b
,
b
);
if
(
d
<
0
||
d
==
null
)
d
=
a
.
style
[
b
]
||
0
;
d
=
parseFloat
(
d
)
||
0
;
if
(
c
)
for
(;
g
<
h
;
g
++
)
d
+=
parseFloat
(
f
.
css
(
a
,
"
padding
"
+
e
[
g
]))
||
0
,
c
!==
"
padding
"
&&
(
d
+=
parseFloat
(
f
.
css
(
a
,
"
border
"
+
e
[
g
]
+
"
Width
"
))
||
0
),
c
===
"
margin
"
&&
(
d
+=
parseFloat
(
f
.
css
(
a
,
c
+
e
[
g
]))
||
0
);
return
d
+
"
px
"
}
function
bp
(
a
,
b
){
b
.
src
?
f
.
ajax
({
url
:
b
.
src
,
async
:
!
1
,
dataType
:
"
script
"
}):
f
.
globalEval
((
b
.
text
||
b
.
textContent
||
b
.
innerHTML
||
""
).
replace
(
bf
,
"
/*$0*/
"
)),
b
.
parentNode
&&
b
.
parentNode
.
removeChild
(
b
)}
function
bo
(
a
){
var
b
=
c
.
createElement
(
"
div
"
);
bh
.
appendChild
(
b
),
b
.
innerHTML
=
a
.
outerHTML
;
return
b
.
firstChild
}
function
bn
(
a
){
var
b
=
(
a
.
nodeName
||
""
).
toLowerCase
();
b
===
"
input
"
?
bm
(
a
):
b
!==
"
script
"
&&
typeof
a
.
getElementsByTagName
!=
"
undefined
"
&&
f
.
grep
(
a
.
getElementsByTagName
(
"
input
"
),
bm
)}
function
bm
(
a
){
if
(
a
.
type
===
"
checkbox
"
||
a
.
type
===
"
radio
"
)
a
.
defaultChecked
=
a
.
checked
}
function
bl
(
a
){
return
typeof
a
.
getElementsByTagName
!=
"
undefined
"
?
a
.
getElementsByTagName
(
"
*
"
):
typeof
a
.
querySelectorAll
!=
"
undefined
"
?
a
.
querySelectorAll
(
"
*
"
):[]}
function
bk
(
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
bj
(
a
,
b
){
if
(
b
.
nodeType
===
1
&&!!
f
.
hasData
(
a
)){
var
c
,
d
,
e
,
g
=
f
.
_data
(
a
),
h
=
f
.
_data
(
b
,
g
),
i
=
g
.
events
;
if
(
i
){
delete
h
.
handle
,
h
.
events
=
{};
for
(
c
in
i
)
for
(
d
=
0
,
e
=
i
[
c
].
length
;
d
<
e
;
d
++
)
f
.
event
.
add
(
b
,
c
+
(
i
[
c
][
d
].
namespace
?
"
.
"
:
""
)
+
i
[
c
][
d
].
namespace
,
i
[
c
][
d
],
i
[
c
][
d
].
data
)}
h
.
data
&&
(
h
.
data
=
f
.
extend
({},
h
.
data
))}}
function
bi
(
a
,
b
){
return
f
.
nodeName
(
a
,
"
table
"
)?
a
.
getElementsByTagName
(
"
tbody
"
)[
0
]
||
a
.
appendChild
(
a
.
ownerDocument
.
createElement
(
"
tbody
"
)):
a
}
function
U
(
a
){
var
b
=
V
.
split
(
"
|
"
),
c
=
a
.
createDocumentFragment
();
if
(
c
.
createElement
)
while
(
b
.
length
)
c
.
createElement
(
b
.
pop
());
return
c
}
function
T
(
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
(
O
.
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
S
(
a
){
return
!
a
||!
a
.
parentNode
||
a
.
parentNode
.
nodeType
===
11
}
function
K
(){
return
!
0
}
function
J
(){
return
!
1
}
function
n
(
a
,
b
,
c
){
var
d
=
b
+
"
defer
"
,
e
=
b
+
"
queue
"
,
g
=
b
+
"
mark
"
,
h
=
f
.
_data
(
a
,
d
);
h
&&
(
c
===
"
queue
"
||!
f
.
_data
(
a
,
e
))
&&
(
c
===
"
mark
"
||!
f
.
_data
(
a
,
g
))
&&
setTimeout
(
function
(){
!
f
.
_data
(
a
,
e
)
&&!
f
.
_data
(
a
,
g
)
&&
(
f
.
removeData
(
a
,
d
,
!
0
),
h
.
fire
())},
0
)}
function
m
(
a
){
for
(
var
b
in
a
){
if
(
b
===
"
data
"
&&
f
.
isEmptyObject
(
a
[
b
]))
continue
;
if
(
b
!==
"
toJSON
"
)
return
!
1
}
return
!
0
}
function
l
(
a
,
c
,
d
){
if
(
d
===
b
&&
a
.
nodeType
===
1
){
var
e
=
"
data-
"
+
c
.
replace
(
k
,
"
-$1
"
).
toLowerCase
();
d
=
a
.
getAttribute
(
e
);
if
(
typeof
d
==
"
string
"
){
try
{
d
=
d
===
"
true
"
?
!
0
:
d
===
"
false
"
?
!
1
:
d
===
"
null
"
?
null
:
f
.
isNumeric
(
d
)?
parseFloat
(
d
):
j
.
test
(
d
)?
f
.
parseJSON
(
d
):
d
}
catch
(
g
){}
f
.
data
(
a
,
c
,
d
)}
else
d
=
b
}
return
d
}
function
h
(
a
){
var
b
=
g
[
a
]
=
{},
c
,
d
;
a
=
a
.
split
(
/
\s
+/
);
for
(
c
=
0
,
d
=
a
.
length
;
c
<
d
;
c
++
)
b
[
a
[
c
]]
=!
0
;
return
b
}
var
c
=
a
.
document
,
d
=
a
.
navigator
,
e
=
a
.
location
,
f
=
function
(){
function
J
(){
if
(
!
e
.
isReady
){
try
{
c
.
documentElement
.
doScroll
(
"
left
"
)}
catch
(
a
){
setTimeout
(
J
,
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
=
/^<
(\w
+
)\s
*
\/?
>
(?:
<
\/\1
>
)?
$/
,
n
=
/^
[\]
,:{}
\s]
*$/
,
o
=
/
\\(?:[
"
\\\/
bfnrt
]
|u
[
0-9a-fA-F
]{4})
/g
,
p
=
/"
[^
"
\\\n\r]
*"|true|false|null|-
?\d
+
(?:\.\d
*
)?(?:[
eE
][
+
\-]?\d
+
)?
/g
,
q
=
/
(?:
^|:|,
)(?:\s
*
\[)
+/g
,
r
=
/
(
webkit
)[
\/]([\w
.
]
+
)
/
,
s
=
/
(
opera
)(?:
.*version
)?[
\/]([\w
.
]
+
)
/
,
t
=
/
(
msie
)
([\w
.
]
+
)
/
,
u
=
/
(
mozilla
)(?:
.*
?
rv:
([\w
.
]
+
))?
/
,
v
=
/-
([
a-z
]
|
[
0-9
])
/ig
,
w
=
/^-ms-/
,
x
=
function
(
a
,
b
){
return
(
b
+
""
).
toUpperCase
()},
y
=
d
.
userAgent
,
z
,
A
,
B
,
C
=
Object
.
prototype
.
toString
,
D
=
Object
.
prototype
.
hasOwnProperty
,
E
=
Array
.
prototype
.
push
,
F
=
Array
.
prototype
.
slice
,
G
=
String
.
prototype
.
trim
,
H
=
Array
.
prototype
.
indexOf
,
I
=
{};
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
=
m
.
exec
(
a
),
j
?
e
.
isPlainObject
(
d
)?(
a
=
[
c
.
createElement
(
j
[
1
])],
e
.
fn
.
attr
.
call
(
a
,
d
,
!
0
)):
a
=
[
k
.
createElement
(
j
[
1
])]:(
j
=
e
.
buildFragment
([
g
[
1
]],[
k
]),
a
=
(
j
.
cacheable
?
e
.
clone
(
j
.
fragment
):
j
.
fragment
).
childNodes
);
return
e
.
merge
(
this
,
a
)}
h
=
c
.
getElementById
(
g
[
2
]);
if
(
h
&&
h
.
parentNode
){
if
(
h
.
id
!==
g
[
2
])
return
f
.
find
(
a
);
this
.
length
=
1
,
this
[
0
]
=
h
}
this
.
context
=
c
,
this
.
selector
=
a
;
return
this
}
return
!
d
||
d
.
jquery
?(
d
||
f
).
find
(
a
):
this
.
constructor
(
d
).
find
(
a
)}
if
(
e
.
isFunction
(
a
))
return
f
.
ready
(
a
);
a
.
selector
!==
b
&&
(
this
.
selector
=
a
.
selector
,
this
.
context
=
a
.
context
);
return
e
.
makeArray
(
a
,
this
)},
selector
:
""
,
jquery
:
"
1.7.1
"
,
length
:
0
,
size
:
function
(){
return
this
.
length
},
toArray
:
function
(){
return
F
.
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
)?
E
.
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
(),
A
.
add
(
a
);
return
this
},
eq
:
function
(
a
){
a
=+
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
(
F
.
apply
(
this
,
arguments
),
"
slice
"
,
F
.
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
:
E
,
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
;
A
.
fireWith
(
c
,[
e
]),
e
.
fn
.
trigger
&&
e
(
c
).
trigger
(
"
ready
"
).
off
(
"
ready
"
)}},
bindReady
:
function
(){
if
(
!
A
){
A
=
e
.
Callbacks
(
"
once memory
"
);
if
(
c
.
readyState
===
"
complete
"
)
return
setTimeout
(
e
.
ready
,
1
);
if
(
c
.
addEventListener
)
c
.
addEventListener
(
"
DOMContentLoaded
"
,
B
,
!
1
),
a
.
addEventListener
(
"
load
"
,
e
.
ready
,
!
1
);
else
if
(
c
.
attachEvent
){
c
.
attachEvent
(
"
onreadystatechange
"
,
B
),
a
.
attachEvent
(
"
onload
"
,
e
.
ready
);
var
b
=!
1
;
try
{
b
=
a
.
frameElement
==
null
}
catch
(
d
){}
c
.
documentElement
.
doScroll
&&
b
&&
J
()}}},
isFunction
:
function
(
a
){
return
e
.
type
(
a
)
===
"
function
"
},
isArray
:
Array
.
isArray
||
function
(
a
){
return
e
.
type
(
a
)
===
"
array
"
},
isWindow
:
function
(
a
){
return
a
&&
typeof
a
==
"
object
"
&&
"
setInterval
"
in
a
},
isNumeric
:
function
(
a
){
return
!
isNaN
(
parseFloat
(
a
))
&&
isFinite
(
a
)},
type
:
function
(
a
){
return
a
==
null
?
String
(
a
):
I
[
C
.
call
(
a
)]
||
"
object
"
},
isPlainObject
:
function
(
a
){
if
(
!
a
||
e
.
type
(
a
)
!==
"
object
"
||
a
.
nodeType
||
e
.
isWindow
(
a
))
return
!
1
;
try
{
if
(
a
.
constructor
&&!
D
.
call
(
a
,
"
constructor
"
)
&&!
D
.
call
(
a
.
constructor
.
prototype
,
"
isPrototypeOf
"
))
return
!
1
}
catch
(
c
){
return
!
1
}
var
d
;
for
(
d
in
a
);
return
d
===
b
||
D
.
call
(
a
,
d
)},
isEmptyObject
:
function
(
a
){
for
(
var
b
in
a
)
return
!
1
;
return
!
0
},
error
:
function
(
a
){
throw
new
Error
(
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
(
n
.
test
(
b
.
replace
(
o
,
"
@
"
).
replace
(
p
,
"
]
"
).
replace
(
q
,
""
)))
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
(
w
,
"
ms-
"
).
replace
(
v
,
x
)},
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
:
G
?
function
(
a
){
return
a
==
null
?
""
:
G
.
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
)?
E
.
call
(
c
,
a
):
e
.
merge
(
c
,
a
)}
return
c
},
inArray
:
function
(
a
,
b
,
c
){
var
d
;
if
(
b
){
if
(
H
)
return
H
.
call
(
b
,
a
,
c
);
d
=
b
.
length
,
c
=
c
?
c
<
0
?
Math
.
max
(
0
,
d
+
c
):
c
:
0
;
for
(;
c
<
d
;
c
++
)
if
(
c
in
b
&&
b
[
c
]
===
a
)
return
c
}
return
-
1
},
merge
:
function
(
a
,
c
){
var
d
=
a
.
length
,
e
=
0
;
if
(
typeof
c
.
length
==
"
number
"
)
for
(
var
f
=
c
.
length
;
e
<
f
;
e
++
)
a
[
d
++
]
=
c
[
e
];
else
while
(
c
[
e
]
!==
b
)
a
[
d
++
]
=
c
[
e
++
];
a
.
length
=
d
;
return
a
},
grep
:
function
(
a
,
b
,
c
){
var
d
=
[],
e
;
c
=!!
c
;
for
(
var
f
=
0
,
g
=
a
.
length
;
f
<
g
;
f
++
)
e
=!!
b
(
a
[
f
],
f
),
c
!==
e
&&
d
.
push
(
a
[
f
]);
return
d
},
map
:
function
(
a
,
c
,
d
){
var
f
,
g
,
h
=
[],
i
=
0
,
j
=
a
.
length
,
k
=
a
instanceof
e
||
j
!==
b
&&
typeof
j
==
"
number
"
&&
(
j
>
0
&&
a
[
0
]
&&
a
[
j
-
1
]
||
j
===
0
||
e
.
isArray
(
a
));
if
(
k
)
for
(;
i
<
j
;
i
++
)
f
=
c
(
a
[
i
],
i
,
d
),
f
!=
null
&&
(
h
[
h
.
length
]
=
f
);
else
for
(
g
in
a
)
f
=
c
(
a
[
g
],
g
,
d
),
f
!=
null
&&
(
h
[
h
.
length
]
=
f
);
return
h
.
concat
.
apply
([],
h
)},
guid
:
1
,
proxy
:
function
(
a
,
c
){
if
(
typeof
c
==
"
string
"
){
var
d
=
a
[
c
];
c
=
a
,
a
=
d
}
if
(
!
e
.
isFunction
(
a
))
return
b
;
var
f
=
F
.
call
(
arguments
,
2
),
g
=
function
(){
return
a
.
apply
(
c
,
f
.
concat
(
F
.
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
=
r
.
exec
(
a
)
||
s
.
exec
(
a
)
||
t
.
exec
(
a
)
||
a
.
indexOf
(
"
compatible
"
)
<
0
&&
u
.
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
){
I
[
"
[object
"
+
b
+
"
]
"
]
=
b
.
toLowerCase
()}),
z
=
e
.
uaMatch
(
y
),
z
.
browser
&&
(
e
.
browser
[
z
.
browser
]
=!
0
,
e
.
browser
.
version
=
z
.
version
),
e
.
browser
.
webkit
&&
(
e
.
browser
.
safari
=!
0
),
j
.
test
(
"
"
)
&&
(
k
=
/^
[\s\x
A0
]
+/
,
l
=
/
[\s\x
A0
]
+$/
),
h
=
e
(
c
),
c
.
addEventListener
?
B
=
function
(){
c
.
removeEventListener
(
"
DOMContentLoaded
"
,
B
,
!
1
),
e
.
ready
()}:
c
.
attachEvent
&&
(
B
=
function
(){
c
.
readyState
===
"
complete
"
&&
(
c
.
detachEvent
(
"
onreadystatechange
"
,
B
),
e
.
ready
())});
return
e
}(),
g
=
{};
f
.
Callbacks
=
function
(
a
){
a
=
a
?
g
[
a
]
||
h
(
a
):{};
var
c
=
[],
d
=
[],
e
,
i
,
j
,
k
,
l
,
m
=
function
(
b
){
var
d
,
e
,
g
,
h
,
i
;
for
(
d
=
0
,
e
=
b
.
length
;
d
<
e
;
d
++
)
g
=
b
[
d
],
h
=
f
.
type
(
g
),
h
===
"
array
"
?
m
(
g
):
h
===
"
function
"
&&
(
!
a
.
unique
||!
o
.
has
(
g
))
&&
c
.
push
(
g
)},
n
=
function
(
b
,
f
){
f
=
f
||
[],
e
=!
a
.
memory
||
[
b
,
f
],
i
=!
0
,
l
=
j
||
0
,
j
=
0
,
k
=
c
.
length
;
for
(;
c
&&
l
<
k
;
l
++
)
if
(
c
[
l
].
apply
(
b
,
f
)
===!
1
&&
a
.
stopOnFalse
){
e
=!
0
;
break
}
i
=!
1
,
c
&&
(
a
.
once
?
e
===!
0
?
o
.
disable
():
c
=
[]:
d
&&
d
.
length
&&
(
e
=
d
.
shift
(),
o
.
fireWith
(
e
[
0
],
e
[
1
])))},
o
=
{
add
:
function
(){
if
(
c
){
var
a
=
c
.
length
;
m
(
arguments
),
i
?
k
=
c
.
length
:
e
&&
e
!==!
0
&&
(
j
=
a
,
n
(
e
[
0
],
e
[
1
]))}
return
this
},
remove
:
function
(){
if
(
c
){
var
b
=
arguments
,
d
=
0
,
e
=
b
.
length
;
for
(;
d
<
e
;
d
++
)
for
(
var
f
=
0
;
f
<
c
.
length
;
f
++
)
if
(
b
[
d
]
===
c
[
f
]){
i
&&
f
<=
k
&&
(
k
--
,
f
<=
l
&&
l
--
),
c
.
splice
(
f
--
,
1
);
if
(
a
.
unique
)
break
}}
return
this
},
has
:
function
(
a
){
if
(
c
){
var
b
=
0
,
d
=
c
.
length
;
for
(;
b
<
d
;
b
++
)
if
(
a
===
c
[
b
])
return
!
0
}
return
!
1
},
empty
:
function
(){
c
=
[];
return
this
},
disable
:
function
(){
c
=
d
=
e
=
b
;
return
this
},
disabled
:
function
(){
return
!
c
},
lock
:
function
(){
d
=
b
,(
!
e
||
e
===!
0
)
&&
o
.
disable
();
return
this
},
locked
:
function
(){
return
!
d
},
fireWith
:
function
(
b
,
c
){
d
&&
(
i
?
a
.
once
||
d
.
push
([
b
,
c
]):(
!
a
.
once
||!
e
)
&&
n
(
b
,
c
));
return
this
},
fire
:
function
(){
o
.
fireWith
(
this
,
arguments
);
return
this
},
fired
:
function
(){
return
!!
e
}};
return
o
};
var
i
=
[].
slice
;
f
.
extend
({
Deferred
:
function
(
a
){
var
b
=
f
.
Callbacks
(
"
once memory
"
),
c
=
f
.
Callbacks
(
"
once memory
"
),
d
=
f
.
Callbacks
(
"
memory
"
),
e
=
"
pending
"
,
g
=
{
resolve
:
b
,
reject
:
c
,
notify
:
d
},
h
=
{
done
:
b
.
add
,
fail
:
c
.
add
,
progress
:
d
.
add
,
state
:
function
(){
return
e
},
isResolved
:
b
.
fired
,
isRejected
:
c
.
fired
,
then
:
function
(
a
,
b
,
c
){
i
.
done
(
a
).
fail
(
b
).
progress
(
c
);
return
this
},
always
:
function
(){
i
.
done
.
apply
(
i
,
arguments
).
fail
.
apply
(
i
,
arguments
);
return
this
},
pipe
:
function
(
a
,
b
,
c
){
return
f
.
Deferred
(
function
(
d
){
f
.
each
({
done
:[
a
,
"
resolve
"
],
fail
:[
b
,
"
reject
"
],
progress
:[
c
,
"
notify
"
]},
function
(
a
,
b
){
var
c
=
b
[
0
],
e
=
b
[
1
],
g
;
f
.
isFunction
(
c
)?
i
[
a
](
function
(){
g
=
c
.
apply
(
this
,
arguments
),
g
&&
f
.
isFunction
(
g
.
promise
)?
g
.
promise
().
then
(
d
.
resolve
,
d
.
reject
,
d
.
notify
):
d
[
e
+
"
With
"
](
this
===
i
?
d
:
this
,[
g
])}):
i
[
a
](
d
[
e
])})}).
promise
()},
promise
:
function
(
a
){
if
(
a
==
null
)
a
=
h
;
else
for
(
var
b
in
h
)
a
[
b
]
=
h
[
b
];
return
a
}},
i
=
h
.
promise
({}),
j
;
for
(
j
in
g
)
i
[
j
]
=
g
[
j
].
fire
,
i
[
j
+
"
With
"
]
=
g
[
j
].
fireWith
;
i
.
done
(
function
(){
e
=
"
resolved
"
},
c
.
disable
,
d
.
lock
).
fail
(
function
(){
e
=
"
rejected
"
},
b
.
disable
,
d
.
lock
),
a
&&
a
.
call
(
i
,
i
);
return
i
},
when
:
function
(
a
){
function
m
(
a
){
return
function
(
b
){
e
[
a
]
=
arguments
.
length
>
1
?
i
.
call
(
arguments
,
0
):
b
,
j
.
notifyWith
(
k
,
e
)}}
function
l
(
a
){
return
function
(
c
){
b
[
a
]
=
arguments
.
length
>
1
?
i
.
call
(
arguments
,
0
):
c
,
--
g
||
j
.
resolveWith
(
j
,
b
)}}
var
b
=
i
.
call
(
arguments
,
0
),
c
=
0
,
d
=
b
.
length
,
e
=
Array
(
d
),
g
=
d
,
h
=
d
,
j
=
d
<=
1
&&
a
&&
f
.
isFunction
(
a
.
promise
)?
a
:
f
.
Deferred
(),
k
=
j
.
promise
();
if
(
d
>
1
){
for
(;
c
<
d
;
c
++
)
b
[
c
]
&&
b
[
c
].
promise
&&
f
.
isFunction
(
b
[
c
].
promise
)?
b
[
c
].
promise
().
then
(
l
(
c
),
j
.
reject
,
m
(
c
)):
--
g
;
g
||
j
.
resolveWith
(
j
,
b
)}
else
j
!==
a
&&
j
.
resolveWith
(
j
,
d
?[
a
]:[]);
return
k
}}),
f
.
support
=
function
(){
var
b
,
d
,
e
,
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
=
c
.
createElement
(
"
div
"
),
r
=
c
.
documentElement
;
q
.
setAttribute
(
"
className
"
,
"
t
"
),
q
.
innerHTML
=
"
<link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>
"
,
d
=
q
.
getElementsByTagName
(
"
*
"
),
e
=
q
.
getElementsByTagName
(
"
a
"
)[
0
];
if
(
!
d
||!
d
.
length
||!
e
)
return
{};
g
=
c
.
createElement
(
"
select
"
),
h
=
g
.
appendChild
(
c
.
createElement
(
"
option
"
)),
i
=
q
.
getElementsByTagName
(
"
input
"
)[
0
],
b
=
{
leadingWhitespace
:
q
.
firstChild
.
nodeType
===
3
,
tbody
:
!
q
.
getElementsByTagName
(
"
tbody
"
).
length
,
htmlSerialize
:
!!
q
.
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
:
q
.
className
!==
"
t
"
,
enctype
:
!!
c
.
createElement
(
"
form
"
).
enctype
,
html5Clone
:
c
.
createElement
(
"
nav
"
).
cloneNode
(
!
0
).
outerHTML
!==
"
<:nav></:nav>
"
,
submitBubbles
:
!
0
,
changeBubbles
:
!
0
,
focusinBubbles
:
!
1
,
deleteExpando
:
!
0
,
noCloneEvent
:
!
0
,
inlineBlockNeedsLayout
:
!
1
,
shrinkWrapBlocks
:
!
1
,
reliableMarginRight
:
!
0
},
i
.
checked
=!
0
,
b
.
noCloneChecked
=
i
.
cloneNode
(
!
0
).
checked
,
g
.
disabled
=!
0
,
b
.
optDisabled
=!
h
.
disabled
;
try
{
delete
q
.
test
}
catch
(
s
){
b
.
deleteExpando
=!
1
}
!
q
.
addEventListener
&&
q
.
attachEvent
&&
q
.
fireEvent
&&
(
q
.
attachEvent
(
"
onclick
"
,
function
(){
b
.
noCloneEvent
=!
1
}),
q
.
cloneNode
(
!
0
).
fireEvent
(
"
onclick
"
)),
i
=
c
.
createElement
(
"
input
"
),
i
.
value
=
"
t
"
,
i
.
setAttribute
(
"
type
"
,
"
radio
"
),
b
.
radioValue
=
i
.
value
===
"
t
"
,
i
.
setAttribute
(
"
checked
"
,
"
checked
"
),
q
.
appendChild
(
i
),
k
=
c
.
createDocumentFragment
(),
k
.
appendChild
(
q
.
lastChild
),
b
.
checkClone
=
k
.
cloneNode
(
!
0
).
cloneNode
(
!
0
).
lastChild
.
checked
,
b
.
appendChecked
=
i
.
checked
,
k
.
removeChild
(
i
),
k
.
appendChild
(
q
),
q
.
innerHTML
=
""
,
a
.
getComputedStyle
&&
(
j
=
c
.
createElement
(
"
div
"
),
j
.
style
.
width
=
"
0
"
,
j
.
style
.
marginRight
=
"
0
"
,
q
.
style
.
width
=
"
2px
"
,
q
.
appendChild
(
j
),
b
.
reliableMarginRight
=
(
parseInt
((
a
.
getComputedStyle
(
j
,
null
)
||
{
marginRight
:
0
}).
marginRight
,
10
)
||
0
)
===
0
);
if
(
q
.
attachEvent
)
for
(
o
in
{
submit
:
1
,
change
:
1
,
focusin
:
1
})
n
=
"
on
"
+
o
,
p
=
n
in
q
,
p
||
(
q
.
setAttribute
(
n
,
"
return;
"
),
p
=
typeof
q
[
n
]
==
"
function
"
),
b
[
o
+
"
Bubbles
"
]
=
p
;
k
.
removeChild
(
q
),
k
=
g
=
h
=
j
=
q
=
i
=
null
,
f
(
function
(){
var
a
,
d
,
e
,
g
,
h
,
i
,
j
,
k
,
m
,
n
,
o
,
r
=
c
.
getElementsByTagName
(
"
body
"
)[
0
];
!
r
||
(
j
=
1
,
k
=
"
position:absolute;top:0;left:0;width:1px;height:1px;margin:0;
"
,
m
=
"
visibility:hidden;border:0;
"
,
n
=
"
style='
"
+
k
+
"
border:5px solid #000;padding:0;'
"
,
o
=
"
<div
"
+
n
+
"
><div></div></div>
"
+
"
<table
"
+
n
+
"
cellpadding='0' cellspacing='0'>
"
+
"
<tr><td></td></tr></table>
"
,
a
=
c
.
createElement
(
"
div
"
),
a
.
style
.
cssText
=
m
+
"
width:0;height:0;position:static;top:0;margin-top:
"
+
j
+
"
px
"
,
r
.
insertBefore
(
a
,
r
.
firstChild
),
q
=
c
.
createElement
(
"
div
"
),
a
.
appendChild
(
q
),
q
.
innerHTML
=
"
<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>
"
,
l
=
q
.
getElementsByTagName
(
"
td
"
),
p
=
l
[
0
].
offsetHeight
===
0
,
l
[
0
].
style
.
display
=
""
,
l
[
1
].
style
.
display
=
"
none
"
,
b
.
reliableHiddenOffsets
=
p
&&
l
[
0
].
offsetHeight
===
0
,
q
.
innerHTML
=
""
,
q
.
style
.
width
=
q
.
style
.
paddingLeft
=
"
1px
"
,
f
.
boxModel
=
b
.
boxModel
=
q
.
offsetWidth
===
2
,
typeof
q
.
style
.
zoom
!=
"
undefined
"
&&
(
q
.
style
.
display
=
"
inline
"
,
q
.
style
.
zoom
=
1
,
b
.
inlineBlockNeedsLayout
=
q
.
offsetWidth
===
2
,
q
.
style
.
display
=
""
,
q
.
innerHTML
=
"
<div style='width:4px;'></div>
"
,
b
.
shrinkWrapBlocks
=
q
.
offsetWidth
!==
2
),
q
.
style
.
cssText
=
k
+
m
,
q
.
innerHTML
=
o
,
d
=
q
.
firstChild
,
e
=
d
.
firstChild
,
h
=
d
.
nextSibling
.
firstChild
.
firstChild
,
i
=
{
doesNotAddBorder
:
e
.
offsetTop
!==
5
,
doesAddBorderForTableAndCells
:
h
.
offsetTop
===
5
},
e
.
style
.
position
=
"
fixed
"
,
e
.
style
.
top
=
"
20px
"
,
i
.
fixedPosition
=
e
.
offsetTop
===
20
||
e
.
offsetTop
===
15
,
e
.
style
.
position
=
e
.
style
.
top
=
""
,
d
.
style
.
overflow
=
"
hidden
"
,
d
.
style
.
position
=
"
relative
"
,
i
.
subtractsBorderForOverflowNotVisible
=
e
.
offsetTop
===-
5
,
i
.
doesNotIncludeMarginInBodyOffset
=
r
.
offsetTop
!==
j
,
r
.
removeChild
(
a
),
q
=
a
=
null
,
f
.
extend
(
b
,
i
))});
return
b
}();
var
j
=
/^
(?:\{
.*
\}
|
\[
.*
\])
$/
,
k
=
/
([
A-Z
])
/g
;
f
.
extend
({
cache
:{},
uuid
:
0
,
expando
:
"
jQuery
"
+
(
f
.
fn
.
jquery
+
Math
.
random
()).
replace
(
/
\D
/g
,
""
),
noData
:{
embed
:
!
0
,
object
:
"
clsid:D27CDB6E-AE6D-11cf-96B8-444553540000
"
,
applet
:
!
0
},
hasData
:
function
(
a
){
a
=
a
.
nodeType
?
f
.
cache
[
a
[
f
.
expando
]]:
a
[
f
.
expando
];
return
!!
a
&&!
m
(
a
)},
data
:
function
(
a
,
c
,
d
,
e
){
if
(
!!
f
.
acceptData
(
a
)){
var
g
,
h
,
i
,
j
=
f
.
expando
,
k
=
typeof
c
==
"
string
"
,
l
=
a
.
nodeType
,
m
=
l
?
f
.
cache
:
a
,
n
=
l
?
a
[
j
]:
a
[
j
]
&&
j
,
o
=
c
===
"
events
"
;
if
((
!
n
||!
m
[
n
]
||!
o
&&!
e
&&!
m
[
n
].
data
)
&&
k
&&
d
===
b
)
return
;
n
||
(
l
?
a
[
j
]
=
n
=++
f
.
uuid
:
n
=
j
),
m
[
n
]
||
(
m
[
n
]
=
{},
l
||
(
m
[
n
].
toJSON
=
f
.
noop
));
if
(
typeof
c
==
"
object
"
||
typeof
c
==
"
function
"
)
e
?
m
[
n
]
=
f
.
extend
(
m
[
n
],
c
):
m
[
n
].
data
=
f
.
extend
(
m
[
n
].
data
,
c
);
g
=
h
=
m
[
n
],
e
||
(
h
.
data
||
(
h
.
data
=
{}),
h
=
h
.
data
),
d
!==
b
&&
(
h
[
f
.
camelCase
(
c
)]
=
d
);
if
(
o
&&!
h
[
c
])
return
g
.
events
;
k
?(
i
=
h
[
c
],
i
==
null
&&
(
i
=
h
[
f
.
camelCase
(
c
)])):
i
=
h
;
return
i
}},
removeData
:
function
(
a
,
b
,
c
){
if
(
!!
f
.
acceptData
(
a
)){
var
d
,
e
,
g
,
h
=
f
.
expando
,
i
=
a
.
nodeType
,
j
=
i
?
f
.
cache
:
a
,
k
=
i
?
a
[
h
]:
h
;
if
(
!
j
[
k
])
return
;
if
(
b
){
d
=
c
?
j
[
k
]:
j
[
k
].
data
;
if
(
d
){
f
.
isArray
(
b
)
||
(
b
in
d
?
b
=
[
b
]:(
b
=
f
.
camelCase
(
b
),
b
in
d
?
b
=
[
b
]:
b
=
b
.
split
(
"
"
)));
for
(
e
=
0
,
g
=
b
.
length
;
e
<
g
;
e
++
)
delete
d
[
b
[
e
]];
if
(
!
(
c
?
m
:
f
.
isEmptyObject
)(
d
))
return
}}
if
(
!
c
){
delete
j
[
k
].
data
;
if
(
!
m
(
j
[
k
]))
return
}
f
.
support
.
deleteExpando
||!
j
.
setInterval
?
delete
j
[
k
]:
j
[
k
]
=
null
,
i
&&
(
f
.
support
.
deleteExpando
?
delete
a
[
h
]:
a
.
removeAttribute
?
a
.
removeAttribute
(
h
):
a
[
h
]
=
null
)}},
_data
:
function
(
a
,
b
,
c
){
return
f
.
data
(
a
,
b
,
c
,
!
0
)},
acceptData
:
function
(
a
){
if
(
a
.
nodeName
){
var
b
=
f
.
noData
[
a
.
nodeName
.
toLowerCase
()];
if
(
b
)
return
b
!==!
0
&&
a
.
getAttribute
(
"
classid
"
)
===
b
}
return
!
0
}}),
f
.
fn
.
extend
({
data
:
function
(
a
,
c
){
var
d
,
e
,
g
,
h
=
null
;
if
(
typeof
a
==
"
undefined
"
){
if
(
this
.
length
){
h
=
f
.
data
(
this
[
0
]);
if
(
this
[
0
].
nodeType
===
1
&&!
f
.
_data
(
this
[
0
],
"
parsedAttrs
"
)){
e
=
this
[
0
].
attributes
;
for
(
var
i
=
0
,
j
=
e
.
length
;
i
<
j
;
i
++
)
g
=
e
[
i
].
name
,
g
.
indexOf
(
"
data-
"
)
===
0
&&
(
g
=
f
.
camelCase
(
g
.
substring
(
5
)),
l
(
this
[
0
],
g
,
h
[
g
]));
f
.
_data
(
this
[
0
],
"
parsedAttrs
"
,
!
0
)}}
return
h
}
if
(
typeof
a
==
"
object
"
)
return
this
.
each
(
function
(){
f
.
data
(
this
,
a
)});
d
=
a
.
split
(
"
.
"
),
d
[
1
]
=
d
[
1
]?
"
.
"
+
d
[
1
]:
""
;
if
(
c
===
b
){
h
=
this
.
triggerHandler
(
"
getData
"
+
d
[
1
]
+
"
!
"
,[
d
[
0
]]),
h
===
b
&&
this
.
length
&&
(
h
=
f
.
data
(
this
[
0
],
a
),
h
=
l
(
this
[
0
],
a
,
h
));
return
h
===
b
&&
d
[
1
]?
this
.
data
(
d
[
0
]):
h
}
return
this
.
each
(
function
(){
var
b
=
f
(
this
),
e
=
[
d
[
0
],
c
];
b
.
triggerHandler
(
"
setData
"
+
d
[
1
]
+
"
!
"
,
e
),
f
.
data
(
this
,
a
,
c
),
b
.
triggerHandler
(
"
changeData
"
+
d
[
1
]
+
"
!
"
,
e
)})},
removeData
:
function
(
a
){
return
this
.
each
(
function
(){
f
.
removeData
(
this
,
a
)})}}),
f
.
extend
({
_mark
:
function
(
a
,
b
){
a
&&
(
b
=
(
b
||
"
fx
"
)
+
"
mark
"
,
f
.
_data
(
a
,
b
,(
f
.
_data
(
a
,
b
)
||
0
)
+
1
))},
_unmark
:
function
(
a
,
b
,
c
){
a
!==!
0
&&
(
c
=
b
,
b
=
a
,
a
=!
1
);
if
(
b
){
c
=
c
||
"
fx
"
;
var
d
=
c
+
"
mark
"
,
e
=
a
?
0
:(
f
.
_data
(
b
,
d
)
||
1
)
-
1
;
e
?
f
.
_data
(
b
,
d
,
e
):(
f
.
removeData
(
b
,
d
,
!
0
),
n
(
b
,
c
,
"
mark
"
))}},
queue
:
function
(
a
,
b
,
c
){
var
d
;
if
(
a
){
b
=
(
b
||
"
fx
"
)
+
"
queue
"
,
d
=
f
.
_data
(
a
,
b
),
c
&&
(
!
d
||
f
.
isArray
(
c
)?
d
=
f
.
_data
(
a
,
b
,
f
.
makeArray
(
c
)):
d
.
push
(
c
));
return
d
||
[]}},
dequeue
:
function
(
a
,
b
){
b
=
b
||
"
fx
"
;
var
c
=
f
.
queue
(
a
,
b
),
d
=
c
.
shift
(),
e
=
{};
d
===
"
inprogress
"
&&
(
d
=
c
.
shift
()),
d
&&
(
b
===
"
fx
"
&&
c
.
unshift
(
"
inprogress
"
),
f
.
_data
(
a
,
b
+
"
.run
"
,
e
),
d
.
call
(
a
,
function
(){
f
.
dequeue
(
a
,
b
)},
e
)),
c
.
length
||
(
f
.
removeData
(
a
,
b
+
"
queue
"
+
b
+
"
.run
"
,
!
0
),
n
(
a
,
b
,
"
queue
"
))}}),
f
.
fn
.
extend
({
queue
:
function
(
a
,
c
){
typeof
a
!=
"
string
"
&&
(
c
=
a
,
a
=
"
fx
"
);
if
(
c
===
b
)
return
f
.
queue
(
this
[
0
],
a
);
return
this
.
each
(
function
(){
var
b
=
f
.
queue
(
this
,
a
,
c
);
a
===
"
fx
"
&&
b
[
0
]
!==
"
inprogress
"
&&
f
.
dequeue
(
this
,
a
)})},
dequeue
:
function
(
a
){
return
this
.
each
(
function
(){
f
.
dequeue
(
this
,
a
)})},
delay
:
function
(
a
,
b
){
a
=
f
.
fx
?
f
.
fx
.
speeds
[
a
]
||
a
:
a
,
b
=
b
||
"
fx
"
;
return
this
.
queue
(
b
,
function
(
b
,
c
){
var
d
=
setTimeout
(
b
,
a
);
c
.
stop
=
function
(){
clearTimeout
(
d
)}})},
clearQueue
:
function
(
a
){
return
this
.
queue
(
a
||
"
fx
"
,[])},
promise
:
function
(
a
,
c
){
function
m
(){
--
h
||
d
.
resolveWith
(
e
,[
e
])}
typeof
a
!=
"
string
"
&&
(
c
=
a
,
a
=
b
),
a
=
a
||
"
fx
"
;
var
d
=
f
.
Deferred
(),
e
=
this
,
g
=
e
.
length
,
h
=
1
,
i
=
a
+
"
defer
"
,
j
=
a
+
"
queue
"
,
k
=
a
+
"
mark
"
,
l
;
while
(
g
--
)
if
(
l
=
f
.
data
(
e
[
g
],
i
,
b
,
!
0
)
||
(
f
.
data
(
e
[
g
],
j
,
b
,
!
0
)
||
f
.
data
(
e
[
g
],
k
,
b
,
!
0
))
&&
f
.
data
(
e
[
g
],
i
,
f
.
Callbacks
(
"
once memory
"
),
!
0
))
h
++
,
l
.
add
(
m
);
m
();
return
d
.
promise
()}});
var
o
=
/
[\n\t\r]
/g
,
p
=
/
\s
+/
,
q
=
/
\r
/g
,
r
=
/^
(?:
button|input
)
$/i
,
s
=
/^
(?:
button|input|object|select|textarea
)
$/i
,
t
=
/^a
(?:
rea
)?
$/i
,
u
=
/^
(?:
autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected
)
$/i
,
v
=
f
.
support
.
getSetAttribute
,
w
,
x
,
y
;
f
.
fn
.
extend
({
attr
:
function
(
a
,
b
){
return
f
.
access
(
this
,
a
,
b
,
!
0
,
f
.
attr
)},
removeAttr
:
function
(
a
){
return
this
.
each
(
function
(){
f
.
removeAttr
(
this
,
a
)})},
prop
:
function
(
a
,
b
){
return
f
.
access
(
this
,
a
,
b
,
!
0
,
f
.
prop
)},
removeProp
:
function
(
a
){
a
=
f
.
propFix
[
a
]
||
a
;
return
this
.
each
(
function
(){
try
{
this
[
a
]
=
b
,
delete
this
[
a
]}
catch
(
c
){}})},
addClass
:
function
(
a
){
var
b
,
c
,
d
,
e
,
g
,
h
,
i
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
f
(
this
).
addClass
(
a
.
call
(
this
,
b
,
this
.
className
))});
if
(
a
&&
typeof
a
==
"
string
"
){
b
=
a
.
split
(
p
);
for
(
c
=
0
,
d
=
this
.
length
;
c
<
d
;
c
++
){
e
=
this
[
c
];
if
(
e
.
nodeType
===
1
)
if
(
!
e
.
className
&&
b
.
length
===
1
)
e
.
className
=
a
;
else
{
g
=
"
"
+
e
.
className
+
"
"
;
for
(
h
=
0
,
i
=
b
.
length
;
h
<
i
;
h
++
)
~
g
.
indexOf
(
"
"
+
b
[
h
]
+
"
"
)
||
(
g
+=
b
[
h
]
+
"
"
);
e
.
className
=
f
.
trim
(
g
)}}}
return
this
},
removeClass
:
function
(
a
){
var
c
,
d
,
e
,
g
,
h
,
i
,
j
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
f
(
this
).
removeClass
(
a
.
call
(
this
,
b
,
this
.
className
))});
if
(
a
&&
typeof
a
==
"
string
"
||
a
===
b
){
c
=
(
a
||
""
).
split
(
p
);
for
(
d
=
0
,
e
=
this
.
length
;
d
<
e
;
d
++
){
g
=
this
[
d
];
if
(
g
.
nodeType
===
1
&&
g
.
className
)
if
(
a
){
h
=
(
"
"
+
g
.
className
+
"
"
).
replace
(
o
,
"
"
);
for
(
i
=
0
,
j
=
c
.
length
;
i
<
j
;
i
++
)
h
=
h
.
replace
(
"
"
+
c
[
i
]
+
"
"
,
"
"
);
g
.
className
=
f
.
trim
(
h
)}
else
g
.
className
=
""
}}
return
this
},
toggleClass
:
function
(
a
,
b
){
var
c
=
typeof
a
,
d
=
typeof
b
==
"
boolean
"
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
c
){
f
(
this
).
toggleClass
(
a
.
call
(
this
,
c
,
this
.
className
,
b
),
b
)});
return
this
.
each
(
function
(){
if
(
c
===
"
string
"
){
var
e
,
g
=
0
,
h
=
f
(
this
),
i
=
b
,
j
=
a
.
split
(
p
);
while
(
e
=
j
[
g
++
])
i
=
d
?
i
:
!
h
.
hasClass
(
e
),
h
[
i
?
"
addClass
"
:
"
removeClass
"
](
e
)}
else
if
(
c
===
"
undefined
"
||
c
===
"
boolean
"
)
this
.
className
&&
f
.
_data
(
this
,
"
__className__
"
,
this
.
className
),
this
.
className
=
this
.
className
||
a
===!
1
?
""
:
f
.
_data
(
this
,
"
__className__
"
)
||
""
})},
hasClass
:
function
(
a
){
var
b
=
"
"
+
a
+
"
"
,
c
=
0
,
d
=
this
.
length
;
for
(;
c
<
d
;
c
++
)
if
(
this
[
c
].
nodeType
===
1
&&
(
"
"
+
this
[
c
].
className
+
"
"
).
replace
(
o
,
"
"
).
indexOf
(
b
)
>-
1
)
return
!
0
;
return
!
1
},
val
:
function
(
a
){
var
c
,
d
,
e
,
g
=
this
[
0
];{
if
(
!!
arguments
.
length
){
e
=
f
.
isFunction
(
a
);
return
this
.
each
(
function
(
d
){
var
g
=
f
(
this
),
h
;
if
(
this
.
nodeType
===
1
){
e
?
h
=
a
.
call
(
this
,
d
,
g
.
val
()):
h
=
a
,
h
==
null
?
h
=
""
:
typeof
h
==
"
number
"
?
h
+=
""
:
f
.
isArray
(
h
)
&&
(
h
=
f
.
map
(
h
,
function
(
a
){
return
a
==
null
?
""
:
a
+
""
})),
c
=
f
.
valHooks
[
this
.
nodeName
.
toLowerCase
()]
||
f
.
valHooks
[
this
.
type
];
if
(
!
c
||!
(
"
set
"
in
c
)
||
c
.
set
(
this
,
h
,
"
value
"
)
===
b
)
this
.
value
=
h
}})}
if
(
g
){
c
=
f
.
valHooks
[
g
.
nodeName
.
toLowerCase
()]
||
f
.
valHooks
[
g
.
type
];
if
(
c
&&
"
get
"
in
c
&&
(
d
=
c
.
get
(
g
,
"
value
"
))
!==
b
)
return
d
;
d
=
g
.
value
;
return
typeof
d
==
"
string
"
?
d
.
replace
(
q
,
""
):
d
==
null
?
""
:
d
}}}}),
f
.
extend
({
valHooks
:{
option
:{
get
:
function
(
a
){
var
b
=
a
.
attributes
.
value
;
return
!
b
||
b
.
specified
?
a
.
value
:
a
.
text
}},
select
:{
get
:
function
(
a
){
var
b
,
c
,
d
,
e
,
g
=
a
.
selectedIndex
,
h
=
[],
i
=
a
.
options
,
j
=
a
.
type
===
"
select-one
"
;
if
(
g
<
0
)
return
null
;
c
=
j
?
g
:
0
,
d
=
j
?
g
+
1
:
i
.
length
;
for
(;
c
<
d
;
c
++
){
e
=
i
[
c
];
if
(
e
.
selected
&&
(
f
.
support
.
optDisabled
?
!
e
.
disabled
:
e
.
getAttribute
(
"
disabled
"
)
===
null
)
&&
(
!
e
.
parentNode
.
disabled
||!
f
.
nodeName
(
e
.
parentNode
,
"
optgroup
"
))){
b
=
f
(
e
).
val
();
if
(
j
)
return
b
;
h
.
push
(
b
)}}
if
(
j
&&!
h
.
length
&&
i
.
length
)
return
f
(
i
[
g
]).
val
();
return
h
},
set
:
function
(
a
,
b
){
var
c
=
f
.
makeArray
(
b
);
f
(
a
).
find
(
"
option
"
).
each
(
function
(){
this
.
selected
=
f
.
inArray
(
f
(
this
).
val
(),
c
)
>=
0
}),
c
.
length
||
(
a
.
selectedIndex
=-
1
);
return
c
}}},
attrFn
:{
val
:
!
0
,
css
:
!
0
,
html
:
!
0
,
text
:
!
0
,
data
:
!
0
,
width
:
!
0
,
height
:
!
0
,
offset
:
!
0
},
attr
:
function
(
a
,
c
,
d
,
e
){
var
g
,
h
,
i
,
j
=
a
.
nodeType
;
if
(
!!
a
&&
j
!==
3
&&
j
!==
8
&&
j
!==
2
){
if
(
e
&&
c
in
f
.
attrFn
)
return
f
(
a
)[
c
](
d
);
if
(
typeof
a
.
getAttribute
==
"
undefined
"
)
return
f
.
prop
(
a
,
c
,
d
);
i
=
j
!==
1
||!
f
.
isXMLDoc
(
a
),
i
&&
(
c
=
c
.
toLowerCase
(),
h
=
f
.
attrHooks
[
c
]
||
(
u
.
test
(
c
)?
x
:
w
));
if
(
d
!==
b
){
if
(
d
===
null
){
f
.
removeAttr
(
a
,
c
);
return
}
if
(
h
&&
"
set
"
in
h
&&
i
&&
(
g
=
h
.
set
(
a
,
d
,
c
))
!==
b
)
return
g
;
a
.
setAttribute
(
c
,
""
+
d
);
return
d
}
if
(
h
&&
"
get
"
in
h
&&
i
&&
(
g
=
h
.
get
(
a
,
c
))
!==
null
)
return
g
;
g
=
a
.
getAttribute
(
c
);
return
g
===
null
?
b
:
g
}},
removeAttr
:
function
(
a
,
b
){
var
c
,
d
,
e
,
g
,
h
=
0
;
if
(
b
&&
a
.
nodeType
===
1
){
d
=
b
.
toLowerCase
().
split
(
p
),
g
=
d
.
length
;
for
(;
h
<
g
;
h
++
)
e
=
d
[
h
],
e
&&
(
c
=
f
.
propFix
[
e
]
||
e
,
f
.
attr
(
a
,
e
,
""
),
a
.
removeAttribute
(
v
?
e
:
c
),
u
.
test
(
e
)
&&
c
in
a
&&
(
a
[
c
]
=!
1
))}},
attrHooks
:{
type
:{
set
:
function
(
a
,
b
){
if
(
r
.
test
(
a
.
nodeName
)
&&
a
.
parentNode
)
f
.
error
(
"
type property can't be changed
"
);
else
if
(
!
f
.
support
.
radioValue
&&
b
===
"
radio
"
&&
f
.
nodeName
(
a
,
"
input
"
)){
var
c
=
a
.
value
;
a
.
setAttribute
(
"
type
"
,
b
),
c
&&
(
a
.
value
=
c
);
return
b
}}},
value
:{
get
:
function
(
a
,
b
){
if
(
w
&&
f
.
nodeName
(
a
,
"
button
"
))
return
w
.
get
(
a
,
b
);
return
b
in
a
?
a
.
value
:
null
},
set
:
function
(
a
,
b
,
c
){
if
(
w
&&
f
.
nodeName
(
a
,
"
button
"
))
return
w
.
set
(
a
,
b
,
c
);
a
.
value
=
b
}}},
propFix
:{
tabindex
:
"
tabIndex
"
,
readonly
:
"
readOnly
"
,
"
for
"
:
"
htmlFor
"
,
"
class
"
:
"
className
"
,
maxlength
:
"
maxLength
"
,
cellspacing
:
"
cellSpacing
"
,
cellpadding
:
"
cellPadding
"
,
rowspan
:
"
rowSpan
"
,
colspan
:
"
colSpan
"
,
usemap
:
"
useMap
"
,
frameborder
:
"
frameBorder
"
,
contenteditable
:
"
contentEditable
"
},
prop
:
function
(
a
,
c
,
d
){
var
e
,
g
,
h
,
i
=
a
.
nodeType
;
if
(
!!
a
&&
i
!==
3
&&
i
!==
8
&&
i
!==
2
){
h
=
i
!==
1
||!
f
.
isXMLDoc
(
a
),
h
&&
(
c
=
f
.
propFix
[
c
]
||
c
,
g
=
f
.
propHooks
[
c
]);
return
d
!==
b
?
g
&&
"
set
"
in
g
&&
(
e
=
g
.
set
(
a
,
d
,
c
))
!==
b
?
e
:
a
[
c
]
=
d
:
g
&&
"
get
"
in
g
&&
(
e
=
g
.
get
(
a
,
c
))
!==
null
?
e
:
a
[
c
]}},
propHooks
:{
tabIndex
:{
get
:
function
(
a
){
var
c
=
a
.
getAttributeNode
(
"
tabindex
"
);
return
c
&&
c
.
specified
?
parseInt
(
c
.
value
,
10
):
s
.
test
(
a
.
nodeName
)
||
t
.
test
(
a
.
nodeName
)
&&
a
.
href
?
0
:
b
}}}}),
f
.
attrHooks
.
tabindex
=
f
.
propHooks
.
tabIndex
,
x
=
{
get
:
function
(
a
,
c
){
var
d
,
e
=
f
.
prop
(
a
,
c
);
return
e
===!
0
||
typeof
e
!=
"
boolean
"
&&
(
d
=
a
.
getAttributeNode
(
c
))
&&
d
.
nodeValue
!==!
1
?
c
.
toLowerCase
():
b
},
set
:
function
(
a
,
b
,
c
){
var
d
;
b
===!
1
?
f
.
removeAttr
(
a
,
c
):(
d
=
f
.
propFix
[
c
]
||
c
,
d
in
a
&&
(
a
[
d
]
=!
0
),
a
.
setAttribute
(
c
,
c
.
toLowerCase
()));
return
c
}},
v
||
(
y
=
{
name
:
!
0
,
id
:
!
0
},
w
=
f
.
valHooks
.
button
=
{
get
:
function
(
a
,
c
){
var
d
;
d
=
a
.
getAttributeNode
(
c
);
return
d
&&
(
y
[
c
]?
d
.
nodeValue
!==
""
:
d
.
specified
)?
d
.
nodeValue
:
b
},
set
:
function
(
a
,
b
,
d
){
var
e
=
a
.
getAttributeNode
(
d
);
e
||
(
e
=
c
.
createAttribute
(
d
),
a
.
setAttributeNode
(
e
));
return
e
.
nodeValue
=
b
+
""
}},
f
.
attrHooks
.
tabindex
.
set
=
w
.
set
,
f
.
each
([
"
width
"
,
"
height
"
],
function
(
a
,
b
){
f
.
attrHooks
[
b
]
=
f
.
extend
(
f
.
attrHooks
[
b
],{
set
:
function
(
a
,
c
){
if
(
c
===
""
){
a
.
setAttribute
(
b
,
"
auto
"
);
return
c
}}})}),
f
.
attrHooks
.
contenteditable
=
{
get
:
w
.
get
,
set
:
function
(
a
,
b
,
c
){
b
===
""
&&
(
b
=
"
false
"
),
w
.
set
(
a
,
b
,
c
)}}),
f
.
support
.
hrefNormalized
||
f
.
each
([
"
href
"
,
"
src
"
,
"
width
"
,
"
height
"
],
function
(
a
,
c
){
f
.
attrHooks
[
c
]
=
f
.
extend
(
f
.
attrHooks
[
c
],{
get
:
function
(
a
){
var
d
=
a
.
getAttribute
(
c
,
2
);
return
d
===
null
?
b
:
d
}})}),
f
.
support
.
style
||
(
f
.
attrHooks
.
style
=
{
get
:
function
(
a
){
return
a
.
style
.
cssText
.
toLowerCase
()
||
b
},
set
:
function
(
a
,
b
){
return
a
.
style
.
cssText
=
""
+
b
}}),
f
.
support
.
optSelected
||
(
f
.
propHooks
.
selected
=
f
.
extend
(
f
.
propHooks
.
selected
,{
get
:
function
(
a
){
var
b
=
a
.
parentNode
;
b
&&
(
b
.
selectedIndex
,
b
.
parentNode
&&
b
.
parentNode
.
selectedIndex
);
return
null
}})),
f
.
support
.
enctype
||
(
f
.
propFix
.
enctype
=
"
encoding
"
),
f
.
support
.
checkOn
||
f
.
each
([
"
radio
"
,
"
checkbox
"
],
function
(){
f
.
valHooks
[
this
]
=
{
get
:
function
(
a
){
return
a
.
getAttribute
(
"
value
"
)
===
null
?
"
on
"
:
a
.
value
}}}),
f
.
each
([
"
radio
"
,
"
checkbox
"
],
function
(){
f
.
valHooks
[
this
]
=
f
.
extend
(
f
.
valHooks
[
this
],{
set
:
function
(
a
,
b
){
if
(
f
.
isArray
(
b
))
return
a
.
checked
=
f
.
inArray
(
f
(
a
).
val
(),
b
)
>=
0
}})});
var
z
=
/^
(?:
textarea|input|select
)
$/i
,
A
=
/^
([^\.]
*
)?(?:\.(
.+
))?
$/
,
B
=
/
\b
hover
(\.\S
+
)?\b
/
,
C
=
/^key/
,
D
=
/^
(?:
mouse|contextmenu
)
|click/
,
E
=
/^
(?:
focusinfocus|focusoutblur
)
$/
,
F
=
/^
(\w
*
)(?:
#
([\w\-]
+
))?(?:\.([\w\-]
+
))?
$/
,
G
=
function
(
a
){
var
b
=
F
.
exec
(
a
);
b
&&
(
b
[
1
]
=
(
b
[
1
]
||
""
).
toLowerCase
(),
b
[
3
]
=
b
[
3
]
&&
new
RegExp
(
"
(?:^|
\\
s)
"
+
b
[
3
]
+
"
(?:
\\
s|$)
"
));
return
b
},
H
=
function
(
a
,
b
){
var
c
=
a
.
attributes
||
{};
return
(
!
b
[
1
]
||
a
.
nodeName
.
toLowerCase
()
===
b
[
1
])
&&
(
!
b
[
2
]
||
(
c
.
id
||
{}).
value
===
b
[
2
])
&&
(
!
b
[
3
]
||
b
[
3
].
test
((
c
[
"
class
"
]
||
{}).
value
))},
I
=
function
(
a
){
return
f
.
event
.
special
.
hover
?
a
:
a
.
replace
(
B
,
"
mouseenter$1 mouseleave$1
"
)};
f
.
event
=
{
add
:
function
(
a
,
c
,
d
,
e
,
g
){
var
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
;
if
(
!
(
a
.
nodeType
===
3
||
a
.
nodeType
===
8
||!
c
||!
d
||!
(
h
=
f
.
_data
(
a
)))){
d
.
handler
&&
(
p
=
d
,
d
=
p
.
handler
),
d
.
guid
||
(
d
.
guid
=
f
.
guid
++
),
j
=
h
.
events
,
j
||
(
h
.
events
=
j
=
{}),
i
=
h
.
handle
,
i
||
(
h
.
handle
=
i
=
function
(
a
){
return
typeof
f
!=
"
undefined
"
&&
(
!
a
||
f
.
event
.
triggered
!==
a
.
type
)?
f
.
event
.
dispatch
.
apply
(
i
.
elem
,
arguments
):
b
},
i
.
elem
=
a
),
c
=
f
.
trim
(
I
(
c
)).
split
(
"
"
);
for
(
k
=
0
;
k
<
c
.
length
;
k
++
){
l
=
A
.
exec
(
c
[
k
])
||
[],
m
=
l
[
1
],
n
=
(
l
[
2
]
||
""
).
split
(
"
.
"
).
sort
(),
s
=
f
.
event
.
special
[
m
]
||
{},
m
=
(
g
?
s
.
delegateType
:
s
.
bindType
)
||
m
,
s
=
f
.
event
.
special
[
m
]
||
{},
o
=
f
.
extend
({
type
:
m
,
origType
:
l
[
1
],
data
:
e
,
handler
:
d
,
guid
:
d
.
guid
,
selector
:
g
,
quick
:
G
(
g
),
namespace
:
n
.
join
(
"
.
"
)},
p
),
r
=
j
[
m
];
if
(
!
r
){
r
=
j
[
m
]
=
[],
r
.
delegateCount
=
0
;
if
(
!
s
.
setup
||
s
.
setup
.
call
(
a
,
e
,
n
,
i
)
===!
1
)
a
.
addEventListener
?
a
.
addEventListener
(
m
,
i
,
!
1
):
a
.
attachEvent
&&
a
.
attachEvent
(
"
on
"
+
m
,
i
)}
s
.
add
&&
(
s
.
add
.
call
(
a
,
o
),
o
.
handler
.
guid
||
(
o
.
handler
.
guid
=
d
.
guid
)),
g
?
r
.
splice
(
r
.
delegateCount
++
,
0
,
o
):
r
.
push
(
o
),
f
.
event
.
global
[
m
]
=!
0
}
a
=
null
}},
global
:{},
remove
:
function
(
a
,
b
,
c
,
d
,
e
){
var
g
=
f
.
hasData
(
a
)
&&
f
.
_data
(
a
),
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
;
if
(
!!
g
&&!!
(
o
=
g
.
events
)){
b
=
f
.
trim
(
I
(
b
||
""
)).
split
(
"
"
);
for
(
h
=
0
;
h
<
b
.
length
;
h
++
){
i
=
A
.
exec
(
b
[
h
])
||
[],
j
=
k
=
i
[
1
],
l
=
i
[
2
];
if
(
!
j
){
for
(
j
in
o
)
f
.
event
.
remove
(
a
,
j
+
b
[
h
],
c
,
d
,
!
0
);
continue
}
p
=
f
.
event
.
special
[
j
]
||
{},
j
=
(
d
?
p
.
delegateType
:
p
.
bindType
)
||
j
,
r
=
o
[
j
]
||
[],
m
=
r
.
length
,
l
=
l
?
new
RegExp
(
"
(^|
\\
.)
"
+
l
.
split
(
"
.
"
).
sort
().
join
(
"
\\
.(?:.*
\\
.)?
"
)
+
"
(
\\
.|$)
"
):
null
;
for
(
n
=
0
;
n
<
r
.
length
;
n
++
)
s
=
r
[
n
],(
e
||
k
===
s
.
origType
)
&&
(
!
c
||
c
.
guid
===
s
.
guid
)
&&
(
!
l
||
l
.
test
(
s
.
namespace
))
&&
(
!
d
||
d
===
s
.
selector
||
d
===
"
**
"
&&
s
.
selector
)
&&
(
r
.
splice
(
n
--
,
1
),
s
.
selector
&&
r
.
delegateCount
--
,
p
.
remove
&&
p
.
remove
.
call
(
a
,
s
));
r
.
length
===
0
&&
m
!==
r
.
length
&&
((
!
p
.
teardown
||
p
.
teardown
.
call
(
a
,
l
)
===!
1
)
&&
f
.
removeEvent
(
a
,
j
,
g
.
handle
),
delete
o
[
j
])}
f
.
isEmptyObject
(
o
)
&&
(
q
=
g
.
handle
,
q
&&
(
q
.
elem
=
null
),
f
.
removeData
(
a
,[
"
events
"
,
"
handle
"
],
!
0
))}},
customEvent
:{
getData
:
!
0
,
setData
:
!
0
,
changeData
:
!
0
},
trigger
:
function
(
c
,
d
,
e
,
g
){
if
(
!
e
||
e
.
nodeType
!==
3
&&
e
.
nodeType
!==
8
){
var
h
=
c
.
type
||
c
,
i
=
[],
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
;
if
(
E
.
test
(
h
+
f
.
event
.
triggered
))
return
;
h
.
indexOf
(
"
!
"
)
>=
0
&&
(
h
=
h
.
slice
(
0
,
-
1
),
k
=!
0
),
h
.
indexOf
(
"
.
"
)
>=
0
&&
(
i
=
h
.
split
(
"
.
"
),
h
=
i
.
shift
(),
i
.
sort
());
if
((
!
e
||
f
.
event
.
customEvent
[
h
])
&&!
f
.
event
.
global
[
h
])
return
;
c
=
typeof
c
==
"
object
"
?
c
[
f
.
expando
]?
c
:
new
f
.
Event
(
h
,
c
):
new
f
.
Event
(
h
),
c
.
type
=
h
,
c
.
isTrigger
=!
0
,
c
.
exclusive
=
k
,
c
.
namespace
=
i
.
join
(
"
.
"
),
c
.
namespace_re
=
c
.
namespace
?
new
RegExp
(
"
(^|
\\
.)
"
+
i
.
join
(
"
\\
.(?:.*
\\
.)?
"
)
+
"
(
\\
.|$)
"
):
null
,
o
=
h
.
indexOf
(
"
:
"
)
<
0
?
"
on
"
+
h
:
""
;
if
(
!
e
){
j
=
f
.
cache
;
for
(
l
in
j
)
j
[
l
].
events
&&
j
[
l
].
events
[
h
]
&&
f
.
event
.
trigger
(
c
,
d
,
j
[
l
].
handle
.
elem
,
!
0
);
return
}
c
.
result
=
b
,
c
.
target
||
(
c
.
target
=
e
),
d
=
d
!=
null
?
f
.
makeArray
(
d
):[],
d
.
unshift
(
c
),
p
=
f
.
event
.
special
[
h
]
||
{};
if
(
p
.
trigger
&&
p
.
trigger
.
apply
(
e
,
d
)
===!
1
)
return
;
r
=
[[
e
,
p
.
bindType
||
h
]];
if
(
!
g
&&!
p
.
noBubble
&&!
f
.
isWindow
(
e
)){
s
=
p
.
delegateType
||
h
,
m
=
E
.
test
(
s
+
h
)?
e
:
e
.
parentNode
,
n
=
null
;
for
(;
m
;
m
=
m
.
parentNode
)
r
.
push
([
m
,
s
]),
n
=
m
;
n
&&
n
===
e
.
ownerDocument
&&
r
.
push
([
n
.
defaultView
||
n
.
parentWindow
||
a
,
s
])}
for
(
l
=
0
;
l
<
r
.
length
&&!
c
.
isPropagationStopped
();
l
++
)
m
=
r
[
l
][
0
],
c
.
type
=
r
[
l
][
1
],
q
=
(
f
.
_data
(
m
,
"
events
"
)
||
{})[
c
.
type
]
&&
f
.
_data
(
m
,
"
handle
"
),
q
&&
q
.
apply
(
m
,
d
),
q
=
o
&&
m
[
o
],
q
&&
f
.
acceptData
(
m
)
&&
q
.
apply
(
m
,
d
)
===!
1
&&
c
.
preventDefault
();
c
.
type
=
h
,
!
g
&&!
c
.
isDefaultPrevented
()
&&
(
!
p
.
_default
||
p
.
_default
.
apply
(
e
.
ownerDocument
,
d
)
===!
1
)
&&
(
h
!==
"
click
"
||!
f
.
nodeName
(
e
,
"
a
"
))
&&
f
.
acceptData
(
e
)
&&
o
&&
e
[
h
]
&&
(
h
!==
"
focus
"
&&
h
!==
"
blur
"
||
c
.
target
.
offsetWidth
!==
0
)
&&!
f
.
isWindow
(
e
)
&&
(
n
=
e
[
o
],
n
&&
(
e
[
o
]
=
null
),
f
.
event
.
triggered
=
h
,
e
[
h
](),
f
.
event
.
triggered
=
b
,
n
&&
(
e
[
o
]
=
n
));
return
c
.
result
}},
dispatch
:
function
(
c
){
c
=
f
.
event
.
fix
(
c
||
a
.
event
);
var
d
=
(
f
.
_data
(
this
,
"
events
"
)
||
{})[
c
.
type
]
||
[],
e
=
d
.
delegateCount
,
g
=
[].
slice
.
call
(
arguments
,
0
),
h
=!
c
.
exclusive
&&!
c
.
namespace
,
i
=
[],
j
,
k
,
l
,
m
,
n
,
o
,
p
,
q
,
r
,
s
,
t
;
g
[
0
]
=
c
,
c
.
delegateTarget
=
this
;
if
(
e
&&!
c
.
target
.
disabled
&&
(
!
c
.
button
||
c
.
type
!==
"
click
"
)){
m
=
f
(
this
),
m
.
context
=
this
.
ownerDocument
||
this
;
for
(
l
=
c
.
target
;
l
!=
this
;
l
=
l
.
parentNode
||
this
){
o
=
{},
q
=
[],
m
[
0
]
=
l
;
for
(
j
=
0
;
j
<
e
;
j
++
)
r
=
d
[
j
],
s
=
r
.
selector
,
o
[
s
]
===
b
&&
(
o
[
s
]
=
r
.
quick
?
H
(
l
,
r
.
quick
):
m
.
is
(
s
)),
o
[
s
]
&&
q
.
push
(
r
);
q
.
length
&&
i
.
push
({
elem
:
l
,
matches
:
q
})}}
d
.
length
>
e
&&
i
.
push
({
elem
:
this
,
matches
:
d
.
slice
(
e
)});
for
(
j
=
0
;
j
<
i
.
length
&&!
c
.
isPropagationStopped
();
j
++
){
p
=
i
[
j
],
c
.
currentTarget
=
p
.
elem
;
for
(
k
=
0
;
k
<
p
.
matches
.
length
&&!
c
.
isImmediatePropagationStopped
();
k
++
){
r
=
p
.
matches
[
k
];
if
(
h
||!
c
.
namespace
&&!
r
.
namespace
||
c
.
namespace_re
&&
c
.
namespace_re
.
test
(
r
.
namespace
))
c
.
data
=
r
.
data
,
c
.
handleObj
=
r
,
n
=
((
f
.
event
.
special
[
r
.
origType
]
||
{}).
handle
||
r
.
handler
).
apply
(
p
.
elem
,
g
),
n
!==
b
&&
(
c
.
result
=
n
,
n
===!
1
&&
(
c
.
preventDefault
(),
c
.
stopPropagation
()))}}
return
c
.
result
},
props
:
"
attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which
"
.
split
(
"
"
),
fixHooks
:{},
keyHooks
:{
props
:
"
char charCode key keyCode
"
.
split
(
"
"
),
filter
:
function
(
a
,
b
){
a
.
which
==
null
&&
(
a
.
which
=
b
.
charCode
!=
null
?
b
.
charCode
:
b
.
keyCode
);
return
a
}},
mouseHooks
:{
props
:
"
button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement
"
.
split
(
"
"
),
filter
:
function
(
a
,
d
){
var
e
,
f
,
g
,
h
=
d
.
button
,
i
=
d
.
fromElement
;
a
.
pageX
==
null
&&
d
.
clientX
!=
null
&&
(
e
=
a
.
target
.
ownerDocument
||
c
,
f
=
e
.
documentElement
,
g
=
e
.
body
,
a
.
pageX
=
d
.
clientX
+
(
f
&&
f
.
scrollLeft
||
g
&&
g
.
scrollLeft
||
0
)
-
(
f
&&
f
.
clientLeft
||
g
&&
g
.
clientLeft
||
0
),
a
.
pageY
=
d
.
clientY
+
(
f
&&
f
.
scrollTop
||
g
&&
g
.
scrollTop
||
0
)
-
(
f
&&
f
.
clientTop
||
g
&&
g
.
clientTop
||
0
)),
!
a
.
relatedTarget
&&
i
&&
(
a
.
relatedTarget
=
i
===
a
.
target
?
d
.
toElement
:
i
),
!
a
.
which
&&
h
!==
b
&&
(
a
.
which
=
h
&
1
?
1
:
h
&
2
?
3
:
h
&
4
?
2
:
0
);
return
a
}},
fix
:
function
(
a
){
if
(
a
[
f
.
expando
])
return
a
;
var
d
,
e
,
g
=
a
,
h
=
f
.
event
.
fixHooks
[
a
.
type
]
||
{},
i
=
h
.
props
?
this
.
props
.
concat
(
h
.
props
):
this
.
props
;
a
=
f
.
Event
(
g
);
for
(
d
=
i
.
length
;
d
;)
e
=
i
[
--
d
],
a
[
e
]
=
g
[
e
];
a
.
target
||
(
a
.
target
=
g
.
srcElement
||
c
),
a
.
target
.
nodeType
===
3
&&
(
a
.
target
=
a
.
target
.
parentNode
),
a
.
metaKey
===
b
&&
(
a
.
metaKey
=
a
.
ctrlKey
);
return
h
.
filter
?
h
.
filter
(
a
,
g
):
a
},
special
:{
ready
:{
setup
:
f
.
bindReady
},
load
:{
noBubble
:
!
0
},
focus
:{
delegateType
:
"
focusin
"
},
blur
:{
delegateType
:
"
focusout
"
},
beforeunload
:{
setup
:
function
(
a
,
b
,
c
){
f
.
isWindow
(
this
)
&&
(
this
.
onbeforeunload
=
c
)},
teardown
:
function
(
a
,
b
){
this
.
onbeforeunload
===
b
&&
(
this
.
onbeforeunload
=
null
)}}},
simulate
:
function
(
a
,
b
,
c
,
d
){
var
e
=
f
.
extend
(
new
f
.
Event
,
c
,{
type
:
a
,
isSimulated
:
!
0
,
originalEvent
:{}});
d
?
f
.
event
.
trigger
(
e
,
null
,
b
):
f
.
event
.
dispatch
.
call
(
b
,
e
),
e
.
isDefaultPrevented
()
&&
c
.
preventDefault
()}},
f
.
event
.
handle
=
f
.
event
.
dispatch
,
f
.
removeEvent
=
c
.
removeEventListener
?
function
(
a
,
b
,
c
){
a
.
removeEventListener
&&
a
.
removeEventListener
(
b
,
c
,
!
1
)}:
function
(
a
,
b
,
c
){
a
.
detachEvent
&&
a
.
detachEvent
(
"
on
"
+
b
,
c
)},
f
.
Event
=
function
(
a
,
b
){
if
(
!
(
this
instanceof
f
.
Event
))
return
new
f
.
Event
(
a
,
b
);
a
&&
a
.
type
?(
this
.
originalEvent
=
a
,
this
.
type
=
a
.
type
,
this
.
isDefaultPrevented
=
a
.
defaultPrevented
||
a
.
returnValue
===!
1
||
a
.
getPreventDefault
&&
a
.
getPreventDefault
()?
K
:
J
):
this
.
type
=
a
,
b
&&
f
.
extend
(
this
,
b
),
this
.
timeStamp
=
a
&&
a
.
timeStamp
||
f
.
now
(),
this
[
f
.
expando
]
=!
0
},
f
.
Event
.
prototype
=
{
preventDefault
:
function
(){
this
.
isDefaultPrevented
=
K
;
var
a
=
this
.
originalEvent
;
!
a
||
(
a
.
preventDefault
?
a
.
preventDefault
():
a
.
returnValue
=!
1
)},
stopPropagation
:
function
(){
this
.
isPropagationStopped
=
K
;
var
a
=
this
.
originalEvent
;
!
a
||
(
a
.
stopPropagation
&&
a
.
stopPropagation
(),
a
.
cancelBubble
=!
0
)},
stopImmediatePropagation
:
function
(){
this
.
isImmediatePropagationStopped
=
K
,
this
.
stopPropagation
()},
isDefaultPrevented
:
J
,
isPropagationStopped
:
J
,
isImmediatePropagationStopped
:
J
},
f
.
each
({
mouseenter
:
"
mouseover
"
,
mouseleave
:
"
mouseout
"
},
function
(
a
,
b
){
f
.
event
.
special
[
a
]
=
{
delegateType
:
b
,
bindType
:
b
,
handle
:
function
(
a
){
var
c
=
this
,
d
=
a
.
relatedTarget
,
e
=
a
.
handleObj
,
g
=
e
.
selector
,
h
;
if
(
!
d
||
d
!==
c
&&!
f
.
contains
(
c
,
d
))
a
.
type
=
e
.
origType
,
h
=
e
.
handler
.
apply
(
this
,
arguments
),
a
.
type
=
b
;
return
h
}}}),
f
.
support
.
submitBubbles
||
(
f
.
event
.
special
.
submit
=
{
setup
:
function
(){
if
(
f
.
nodeName
(
this
,
"
form
"
))
return
!
1
;
f
.
event
.
add
(
this
,
"
click._submit keypress._submit
"
,
function
(
a
){
var
c
=
a
.
target
,
d
=
f
.
nodeName
(
c
,
"
input
"
)
||
f
.
nodeName
(
c
,
"
button
"
)?
c
.
form
:
b
;
d
&&!
d
.
_submit_attached
&&
(
f
.
event
.
add
(
d
,
"
submit._submit
"
,
function
(
a
){
this
.
parentNode
&&!
a
.
isTrigger
&&
f
.
event
.
simulate
(
"
submit
"
,
this
.
parentNode
,
a
,
!
0
)}),
d
.
_submit_attached
=!
0
)})},
teardown
:
function
(){
if
(
f
.
nodeName
(
this
,
"
form
"
))
return
!
1
;
f
.
event
.
remove
(
this
,
"
._submit
"
)}}),
f
.
support
.
changeBubbles
||
(
f
.
event
.
special
.
change
=
{
setup
:
function
(){
if
(
z
.
test
(
this
.
nodeName
)){
if
(
this
.
type
===
"
checkbox
"
||
this
.
type
===
"
radio
"
)
f
.
event
.
add
(
this
,
"
propertychange._change
"
,
function
(
a
){
a
.
originalEvent
.
propertyName
===
"
checked
"
&&
(
this
.
_just_changed
=!
0
)}),
f
.
event
.
add
(
this
,
"
click._change
"
,
function
(
a
){
this
.
_just_changed
&&!
a
.
isTrigger
&&
(
this
.
_just_changed
=!
1
,
f
.
event
.
simulate
(
"
change
"
,
this
,
a
,
!
0
))});
return
!
1
}
f
.
event
.
add
(
this
,
"
beforeactivate._change
"
,
function
(
a
){
var
b
=
a
.
target
;
z
.
test
(
b
.
nodeName
)
&&!
b
.
_change_attached
&&
(
f
.
event
.
add
(
b
,
"
change._change
"
,
function
(
a
){
this
.
parentNode
&&!
a
.
isSimulated
&&!
a
.
isTrigger
&&
f
.
event
.
simulate
(
"
change
"
,
this
.
parentNode
,
a
,
!
0
)}),
b
.
_change_attached
=!
0
)})},
handle
:
function
(
a
){
var
b
=
a
.
target
;
if
(
this
!==
b
||
a
.
isSimulated
||
a
.
isTrigger
||
b
.
type
!==
"
radio
"
&&
b
.
type
!==
"
checkbox
"
)
return
a
.
handleObj
.
handler
.
apply
(
this
,
arguments
)},
teardown
:
function
(){
f
.
event
.
remove
(
this
,
"
._change
"
);
return
z
.
test
(
this
.
nodeName
)}}),
f
.
support
.
focusinBubbles
||
f
.
each
({
focus
:
"
focusin
"
,
blur
:
"
focusout
"
},
function
(
a
,
b
){
var
d
=
0
,
e
=
function
(
a
){
f
.
event
.
simulate
(
b
,
a
.
target
,
f
.
event
.
fix
(
a
),
!
0
)};
f
.
event
.
special
[
b
]
=
{
setup
:
function
(){
d
++===
0
&&
c
.
addEventListener
(
a
,
e
,
!
0
)},
teardown
:
function
(){
--
d
===
0
&&
c
.
removeEventListener
(
a
,
e
,
!
0
)}}}),
f
.
fn
.
extend
({
on
:
function
(
a
,
c
,
d
,
e
,
g
){
var
h
,
i
;
if
(
typeof
a
==
"
object
"
){
typeof
c
!=
"
string
"
&&
(
d
=
c
,
c
=
b
);
for
(
i
in
a
)
this
.
on
(
i
,
c
,
d
,
a
[
i
],
g
);
return
this
}
d
==
null
&&
e
==
null
?(
e
=
c
,
d
=
c
=
b
):
e
==
null
&&
(
typeof
c
==
"
string
"
?(
e
=
d
,
d
=
b
):(
e
=
d
,
d
=
c
,
c
=
b
));
if
(
e
===!
1
)
e
=
J
;
else
if
(
!
e
)
return
this
;
g
===
1
&&
(
h
=
e
,
e
=
function
(
a
){
f
().
off
(
a
);
return
h
.
apply
(
this
,
arguments
)},
e
.
guid
=
h
.
guid
||
(
h
.
guid
=
f
.
guid
++
));
return
this
.
each
(
function
(){
f
.
event
.
add
(
this
,
a
,
e
,
d
,
c
)})},
one
:
function
(
a
,
b
,
c
,
d
){
return
this
.
on
.
call
(
this
,
a
,
b
,
c
,
d
,
1
)},
off
:
function
(
a
,
c
,
d
){
if
(
a
&&
a
.
preventDefault
&&
a
.
handleObj
){
var
e
=
a
.
handleObj
;
f
(
a
.
delegateTarget
).
off
(
e
.
namespace
?
e
.
type
+
"
.
"
+
e
.
namespace
:
e
.
type
,
e
.
selector
,
e
.
handler
);
return
this
}
if
(
typeof
a
==
"
object
"
){
for
(
var
g
in
a
)
this
.
off
(
g
,
c
,
a
[
g
]);
return
this
}
if
(
c
===!
1
||
typeof
c
==
"
function
"
)
d
=
c
,
c
=
b
;
d
===!
1
&&
(
d
=
J
);
return
this
.
each
(
function
(){
f
.
event
.
remove
(
this
,
a
,
d
,
c
)})},
bind
:
function
(
a
,
b
,
c
){
return
this
.
on
(
a
,
null
,
b
,
c
)},
unbind
:
function
(
a
,
b
){
return
this
.
off
(
a
,
null
,
b
)},
live
:
function
(
a
,
b
,
c
){
f
(
this
.
context
).
on
(
a
,
this
.
selector
,
b
,
c
);
return
this
},
die
:
function
(
a
,
b
){
f
(
this
.
context
).
off
(
a
,
this
.
selector
||
"
**
"
,
b
);
return
this
},
delegate
:
function
(
a
,
b
,
c
,
d
){
return
this
.
on
(
b
,
a
,
c
,
d
)},
undelegate
:
function
(
a
,
b
,
c
){
return
arguments
.
length
==
1
?
this
.
off
(
a
,
"
**
"
):
this
.
off
(
b
,
a
,
c
)},
trigger
:
function
(
a
,
b
){
return
this
.
each
(
function
(){
f
.
event
.
trigger
(
a
,
b
,
this
)})},
triggerHandler
:
function
(
a
,
b
){
if
(
this
[
0
])
return
f
.
event
.
trigger
(
a
,
b
,
this
[
0
],
!
0
)},
toggle
:
function
(
a
){
var
b
=
arguments
,
c
=
a
.
guid
||
f
.
guid
++
,
d
=
0
,
e
=
function
(
c
){
var
e
=
(
f
.
_data
(
this
,
"
lastToggle
"
+
a
.
guid
)
||
0
)
%
d
;
f
.
_data
(
this
,
"
lastToggle
"
+
a
.
guid
,
e
+
1
),
c
.
preventDefault
();
return
b
[
e
].
apply
(
this
,
arguments
)
||!
1
};
e
.
guid
=
c
;
while
(
d
<
b
.
length
)
b
[
d
++
].
guid
=
c
;
return
this
.
click
(
e
)},
hover
:
function
(
a
,
b
){
return
this
.
mouseenter
(
a
).
mouseleave
(
b
||
a
)}}),
f
.
each
(
"
blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu
"
.
split
(
"
"
),
function
(
a
,
b
){
f
.
fn
[
b
]
=
function
(
a
,
c
){
c
==
null
&&
(
c
=
a
,
a
=
null
);
return
arguments
.
length
>
0
?
this
.
on
(
b
,
null
,
a
,
c
):
this
.
trigger
(
b
)},
f
.
attrFn
&&
(
f
.
attrFn
[
b
]
=!
0
),
C
.
test
(
b
)
&&
(
f
.
event
.
fixHooks
[
b
]
=
f
.
event
.
keyHooks
),
D
.
test
(
b
)
&&
(
f
.
event
.
fixHooks
[
b
]
=
f
.
event
.
mouseHooks
)}),
function
(){
function
x
(
a
,
b
,
c
,
e
,
f
,
g
){
for
(
var
h
=
0
,
i
=
e
.
length
;
h
<
i
;
h
++
){
var
j
=
e
[
h
];
if
(
j
){
var
k
=!
1
;
j
=
j
[
a
];
while
(
j
){
if
(
j
[
d
]
===
c
){
k
=
e
[
j
.
sizset
];
break
}
if
(
j
.
nodeType
===
1
){
g
||
(
j
[
d
]
=
c
,
j
.
sizset
=
h
);
if
(
typeof
b
!=
"
string
"
){
if
(
j
===
b
){
k
=!
0
;
break
}}
else
if
(
m
.
filter
(
b
,[
j
]).
length
>
0
){
k
=
j
;
break
}}
j
=
j
[
a
]}
e
[
h
]
=
k
}}}
function
w
(
a
,
b
,
c
,
e
,
f
,
g
){
for
(
var
h
=
0
,
i
=
e
.
length
;
h
<
i
;
h
++
){
var
j
=
e
[
h
];
if
(
j
){
var
k
=!
1
;
j
=
j
[
a
];
while
(
j
){
if
(
j
[
d
]
===
c
){
k
=
e
[
j
.
sizset
];
break
}
j
.
nodeType
===
1
&&!
g
&&
(
j
[
d
]
=
c
,
j
.
sizset
=
h
);
if
(
j
.
nodeName
.
toLowerCase
()
===
b
){
k
=
j
;
break
}
j
=
j
[
a
]}
e
[
h
]
=
k
}}}
var
a
=
/
((?:\((?:\([^
()
]
+
\)
|
[^
()
]
+
)
+
\)
|
\[(?:\[[^\[\]]
*
\]
|
[
'"
][^
'"
]
*
[
'"
]
|
[^\[\]
'"
]
+
)
+
\]
|
\\
.|
[^
>+~,(
\[\\]
+
)
+|
[
>+~
])(\s
*,
\s
*
)?((?:
.|
\r
|
\n)
*
)
/g
,
d
=
"
sizcache
"
+
(
Math
.
random
()
+
""
).
replace
(
"
.
"
,
""
),
e
=
0
,
g
=
Object
.
prototype
.
toString
,
h
=!
1
,
i
=!
0
,
j
=
/
\\
/g
,
k
=
/
\r\n
/g
,
l
=
/
\W
/
;[
0
,
0
].
sort
(
function
(){
i
=!
1
;
return
0
});
var
m
=
function
(
b
,
d
,
e
,
f
){
e
=
e
||
[],
d
=
d
||
c
;
var
h
=
d
;
if
(
d
.
nodeType
!==
1
&&
d
.
nodeType
!==
9
)
return
[];
if
(
!
b
||
typeof
b
!=
"
string
"
)
return
e
;
var
i
,
j
,
k
,
l
,
n
,
q
,
r
,
t
,
u
=!
0
,
v
=
m
.
isXML
(
d
),
w
=
[],
x
=
b
;
do
{
a
.
exec
(
""
),
i
=
a
.
exec
(
x
);
if
(
i
){
x
=
i
[
3
],
w
.
push
(
i
[
1
]);
if
(
i
[
2
]){
l
=
i
[
3
];
break
}}}
while
(
i
);
if
(
w
.
length
>
1
&&
p
.
exec
(
b
))
if
(
w
.
length
===
2
&&
o
.
relative
[
w
[
0
]])
j
=
y
(
w
[
0
]
+
w
[
1
],
d
,
f
);
else
{
j
=
o
.
relative
[
w
[
0
]]?[
d
]:
m
(
w
.
shift
(),
d
);
while
(
w
.
length
)
b
=
w
.
shift
(),
o
.
relative
[
b
]
&&
(
b
+=
w
.
shift
()),
j
=
y
(
b
,
j
,
f
)}
else
{
!
f
&&
w
.
length
>
1
&&
d
.
nodeType
===
9
&&!
v
&&
o
.
match
.
ID
.
test
(
w
[
0
])
&&!
o
.
match
.
ID
.
test
(
w
[
w
.
length
-
1
])
&&
(
n
=
m
.
find
(
w
.
shift
(),
d
,
v
),
d
=
n
.
expr
?
m
.
filter
(
n
.
expr
,
n
.
set
)[
0
]:
n
.
set
[
0
]);
if
(
d
){
n
=
f
?{
expr
:
w
.
pop
(),
set
:
s
(
f
)}:
m
.
find
(
w
.
pop
(),
w
.
length
===
1
&&
(
w
[
0
]
===
"
~
"
||
w
[
0
]
===
"
+
"
)
&&
d
.
parentNode
?
d
.
parentNode
:
d
,
v
),
j
=
n
.
expr
?
m
.
filter
(
n
.
expr
,
n
.
set
):
n
.
set
,
w
.
length
>
0
?
k
=
s
(
j
):
u
=!
1
;
while
(
w
.
length
)
q
=
w
.
pop
(),
r
=
q
,
o
.
relative
[
q
]?
r
=
w
.
pop
():
q
=
""
,
r
==
null
&&
(
r
=
d
),
o
.
relative
[
q
](
k
,
r
,
v
)}
else
k
=
w
=
[]}
k
||
(
k
=
j
),
k
||
m
.
error
(
q
||
b
);
if
(
g
.
call
(
k
)
===
"
[object Array]
"
)
if
(
!
u
)
e
.
push
.
apply
(
e
,
k
);
else
if
(
d
&&
d
.
nodeType
===
1
)
for
(
t
=
0
;
k
[
t
]
!=
null
;
t
++
)
k
[
t
]
&&
(
k
[
t
]
===!
0
||
k
[
t
].
nodeType
===
1
&&
m
.
contains
(
d
,
k
[
t
]))
&&
e
.
push
(
j
[
t
]);
else
for
(
t
=
0
;
k
[
t
]
!=
null
;
t
++
)
k
[
t
]
&&
k
[
t
].
nodeType
===
1
&&
e
.
push
(
j
[
t
]);
else
s
(
k
,
e
);
l
&&
(
m
(
l
,
h
,
e
,
f
),
m
.
uniqueSort
(
e
));
return
e
};
m
.
uniqueSort
=
function
(
a
){
if
(
u
){
h
=
i
,
a
.
sort
(
u
);
if
(
h
)
for
(
var
b
=
1
;
b
<
a
.
length
;
b
++
)
a
[
b
]
===
a
[
b
-
1
]
&&
a
.
splice
(
b
--
,
1
)}
return
a
},
m
.
matches
=
function
(
a
,
b
){
return
m
(
a
,
null
,
null
,
b
)},
m
.
matchesSelector
=
function
(
a
,
b
){
return
m
(
b
,
null
,
null
,[
a
]).
length
>
0
},
m
.
find
=
function
(
a
,
b
,
c
){
var
d
,
e
,
f
,
g
,
h
,
i
;
if
(
!
a
)
return
[];
for
(
e
=
0
,
f
=
o
.
order
.
length
;
e
<
f
;
e
++
){
h
=
o
.
order
[
e
];
if
(
g
=
o
.
leftMatch
[
h
].
exec
(
a
)){
i
=
g
[
1
],
g
.
splice
(
1
,
1
);
if
(
i
.
substr
(
i
.
length
-
1
)
!==
"
\\
"
){
g
[
1
]
=
(
g
[
1
]
||
""
).
replace
(
j
,
""
),
d
=
o
.
find
[
h
](
g
,
b
,
c
);
if
(
d
!=
null
){
a
=
a
.
replace
(
o
.
match
[
h
],
""
);
break
}}}}
d
||
(
d
=
typeof
b
.
getElementsByTagName
!=
"
undefined
"
?
b
.
getElementsByTagName
(
"
*
"
):[]);
return
{
set
:
d
,
expr
:
a
}},
m
.
filter
=
function
(
a
,
c
,
d
,
e
){
var
f
,
g
,
h
,
i
,
j
,
k
,
l
,
n
,
p
,
q
=
a
,
r
=
[],
s
=
c
,
t
=
c
&&
c
[
0
]
&&
m
.
isXML
(
c
[
0
]);
while
(
a
&&
c
.
length
){
for
(
h
in
o
.
filter
)
if
((
f
=
o
.
leftMatch
[
h
].
exec
(
a
))
!=
null
&&
f
[
2
]){
k
=
o
.
filter
[
h
],
l
=
f
[
1
],
g
=!
1
,
f
.
splice
(
1
,
1
);
if
(
l
.
substr
(
l
.
length
-
1
)
===
"
\\
"
)
continue
;
s
===
r
&&
(
r
=
[]);
if
(
o
.
preFilter
[
h
]){
f
=
o
.
preFilter
[
h
](
f
,
s
,
d
,
r
,
e
,
t
);
if
(
!
f
)
g
=
i
=!
0
;
else
if
(
f
===!
0
)
continue
}
if
(
f
)
for
(
n
=
0
;(
j
=
s
[
n
])
!=
null
;
n
++
)
j
&&
(
i
=
k
(
j
,
f
,
n
,
s
),
p
=
e
^
i
,
d
&&
i
!=
null
?
p
?
g
=!
0
:
s
[
n
]
=!
1
:
p
&&
(
r
.
push
(
j
),
g
=!
0
));
if
(
i
!==
b
){
d
||
(
s
=
r
),
a
=
a
.
replace
(
o
.
match
[
h
],
""
);
if
(
!
g
)
return
[];
break
}}
if
(
a
===
q
)
if
(
g
==
null
)
m
.
error
(
a
);
else
break
;
q
=
a
}
return
s
},
m
.
error
=
function
(
a
){
throw
new
Error
(
"
Syntax error, unrecognized expression:
"
+
a
)};
var
n
=
m
.
getText
=
function
(
a
){
var
b
,
c
,
d
=
a
.
nodeType
,
e
=
""
;
if
(
d
){
if
(
d
===
1
||
d
===
9
){
if
(
typeof
a
.
textContent
==
"
string
"
)
return
a
.
textContent
;
if
(
typeof
a
.
innerText
==
"
string
"
)
return
a
.
innerText
.
replace
(
k
,
""
);
for
(
a
=
a
.
firstChild
;
a
;
a
=
a
.
nextSibling
)
e
+=
n
(
a
)}
else
if
(
d
===
3
||
d
===
4
)
return
a
.
nodeValue
}
else
for
(
b
=
0
;
c
=
a
[
b
];
b
++
)
c
.
nodeType
!==
8
&&
(
e
+=
n
(
c
));
return
e
},
o
=
m
.
selectors
=
{
order
:[
"
ID
"
,
"
NAME
"
,
"
TAG
"
],
match
:{
ID
:
/#
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)
/
,
CLASS
:
/
\.((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)
/
,
NAME
:
/
\[
name=
[
'"
]
*
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)[
'"
]
*
\]
/
,
ATTR
:
/
\[\s
*
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)\s
*
(?:(\S?
=
)\s
*
(?:([
'"
])(
.*
?)\3
|
(
#
?(?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
*
)
|
)
|
)\s
*
\]
/
,
TAG
:
/^
((?:[\w\u
00c0-
\u
FFFF
\*\-]
|
\\
.
)
+
)
/
,
CHILD
:
/:
(
only|nth|last|first
)
-child
(?:\(\s
*
(
even|odd|
(?:[
+
\-]?\d
+|
(?:[
+
\-]?\d
*
)?
n
\s
*
(?:[
+
\-]\s
*
\d
+
)?))\s
*
\))?
/
,
POS
:
/:
(
nth|eq|gt|lt|first|last|even|odd
)(?:\((\d
*
)\))?(?=[^\-]
|$
)
/
,
PSEUDO
:
/:
((?:[\w\u
00c0-
\u
FFFF
\-]
|
\\
.
)
+
)(?:\(([
'"
]?)((?:\([^\)]
+
\)
|
[^\(\)]
*
)
+
)\2\))?
/
},
leftMatch
:{},
attrMap
:{
"
class
"
:
"
className
"
,
"
for
"
:
"
htmlFor
"
},
attrHandle
:{
href
:
function
(
a
){
return
a
.
getAttribute
(
"
href
"
)},
type
:
function
(
a
){
return
a
.
getAttribute
(
"
type
"
)}},
relative
:{
"
+
"
:
function
(
a
,
b
){
var
c
=
typeof
b
==
"
string
"
,
d
=
c
&&!
l
.
test
(
b
),
e
=
c
&&!
d
;
d
&&
(
b
=
b
.
toLowerCase
());
for
(
var
f
=
0
,
g
=
a
.
length
,
h
;
f
<
g
;
f
++
)
if
(
h
=
a
[
f
]){
while
((
h
=
h
.
previousSibling
)
&&
h
.
nodeType
!==
1
);
a
[
f
]
=
e
||
h
&&
h
.
nodeName
.
toLowerCase
()
===
b
?
h
||!
1
:
h
===
b
}
e
&&
m
.
filter
(
b
,
a
,
!
0
)},
"
>
"
:
function
(
a
,
b
){
var
c
,
d
=
typeof
b
==
"
string
"
,
e
=
0
,
f
=
a
.
length
;
if
(
d
&&!
l
.
test
(
b
)){
b
=
b
.
toLowerCase
();
for
(;
e
<
f
;
e
++
){
c
=
a
[
e
];
if
(
c
){
var
g
=
c
.
parentNode
;
a
[
e
]
=
g
.
nodeName
.
toLowerCase
()
===
b
?
g
:
!
1
}}}
else
{
for
(;
e
<
f
;
e
++
)
c
=
a
[
e
],
c
&&
(
a
[
e
]
=
d
?
c
.
parentNode
:
c
.
parentNode
===
b
);
d
&&
m
.
filter
(
b
,
a
,
!
0
)}},
""
:
function
(
a
,
b
,
c
){
var
d
,
f
=
e
++
,
g
=
x
;
typeof
b
==
"
string
"
&&!
l
.
test
(
b
)
&&
(
b
=
b
.
toLowerCase
(),
d
=
b
,
g
=
w
),
g
(
"
parentNode
"
,
b
,
f
,
a
,
d
,
c
)},
"
~
"
:
function
(
a
,
b
,
c
){
var
d
,
f
=
e
++
,
g
=
x
;
typeof
b
==
"
string
"
&&!
l
.
test
(
b
)
&&
(
b
=
b
.
toLowerCase
(),
d
=
b
,
g
=
w
),
g
(
"
previousSibling
"
,
b
,
f
,
a
,
d
,
c
)}},
find
:{
ID
:
function
(
a
,
b
,
c
){
if
(
typeof
b
.
getElementById
!=
"
undefined
"
&&!
c
){
var
d
=
b
.
getElementById
(
a
[
1
]);
return
d
&&
d
.
parentNode
?[
d
]:[]}},
NAME
:
function
(
a
,
b
){
if
(
typeof
b
.
getElementsByName
!=
"
undefined
"
){
var
c
=
[],
d
=
b
.
getElementsByName
(
a
[
1
]);
for
(
var
e
=
0
,
f
=
d
.
length
;
e
<
f
;
e
++
)
d
[
e
].
getAttribute
(
"
name
"
)
===
a
[
1
]
&&
c
.
push
(
d
[
e
]);
return
c
.
length
===
0
?
null
:
c
}},
TAG
:
function
(
a
,
b
){
if
(
typeof
b
.
getElementsByTagName
!=
"
undefined
"
)
return
b
.
getElementsByTagName
(
a
[
1
])}},
preFilter
:{
CLASS
:
function
(
a
,
b
,
c
,
d
,
e
,
f
){
a
=
"
"
+
a
[
1
].
replace
(
j
,
""
)
+
"
"
;
if
(
f
)
return
a
;
for
(
var
g
=
0
,
h
;(
h
=
b
[
g
])
!=
null
;
g
++
)
h
&&
(
e
^
(
h
.
className
&&
(
"
"
+
h
.
className
+
"
"
).
replace
(
/
[\t\n\r]
/g
,
"
"
).
indexOf
(
a
)
>=
0
)?
c
||
d
.
push
(
h
):
c
&&
(
b
[
g
]
=!
1
));
return
!
1
},
ID
:
function
(
a
){
return
a
[
1
].
replace
(
j
,
""
)},
TAG
:
function
(
a
,
b
){
return
a
[
1
].
replace
(
j
,
""
).
toLowerCase
()},
CHILD
:
function
(
a
){
if
(
a
[
1
]
===
"
nth
"
){
a
[
2
]
||
m
.
error
(
a
[
0
]),
a
[
2
]
=
a
[
2
].
replace
(
/^
\+
|
\s
*/g
,
""
);
var
b
=
/
(
-
?)(\d
*
)(?:
n
([
+
\-]?\d
*
))?
/
.
exec
(
a
[
2
]
===
"
even
"
&&
"
2n
"
||
a
[
2
]
===
"
odd
"
&&
"
2n+1
"
||!
/
\D
/
.
test
(
a
[
2
])
&&
"
0n+
"
+
a
[
2
]
||
a
[
2
]);
a
[
2
]
=
b
[
1
]
+
(
b
[
2
]
||
1
)
-
0
,
a
[
3
]
=
b
[
3
]
-
0
}
else
a
[
2
]
&&
m
.
error
(
a
[
0
]);
a
[
0
]
=
e
++
;
return
a
},
ATTR
:
function
(
a
,
b
,
c
,
d
,
e
,
f
){
var
g
=
a
[
1
]
=
a
[
1
].
replace
(
j
,
""
);
!
f
&&
o
.
attrMap
[
g
]
&&
(
a
[
1
]
=
o
.
attrMap
[
g
]),
a
[
4
]
=
(
a
[
4
]
||
a
[
5
]
||
""
).
replace
(
j
,
""
),
a
[
2
]
===
"
~=
"
&&
(
a
[
4
]
=
"
"
+
a
[
4
]
+
"
"
);
return
a
},
PSEUDO
:
function
(
b
,
c
,
d
,
e
,
f
){
if
(
b
[
1
]
===
"
not
"
)
if
((
a
.
exec
(
b
[
3
])
||
""
).
length
>
1
||
/^
\w
/
.
test
(
b
[
3
]))
b
[
3
]
=
m
(
b
[
3
],
null
,
null
,
c
);
else
{
var
g
=
m
.
filter
(
b
[
3
],
c
,
d
,
!
0
^
f
);
d
||
e
.
push
.
apply
(
e
,
g
);
return
!
1
}
else
if
(
o
.
match
.
POS
.
test
(
b
[
0
])
||
o
.
match
.
CHILD
.
test
(
b
[
0
]))
return
!
0
;
return
b
},
POS
:
function
(
a
){
a
.
unshift
(
!
0
);
return
a
}},
filters
:{
enabled
:
function
(
a
){
return
a
.
disabled
===!
1
&&
a
.
type
!==
"
hidden
"
},
disabled
:
function
(
a
){
return
a
.
disabled
===!
0
},
checked
:
function
(
a
){
return
a
.
checked
===!
0
},
selected
:
function
(
a
){
a
.
parentNode
&&
a
.
parentNode
.
selectedIndex
;
return
a
.
selected
===!
0
},
parent
:
function
(
a
){
return
!!
a
.
firstChild
},
empty
:
function
(
a
){
return
!
a
.
firstChild
},
has
:
function
(
a
,
b
,
c
){
return
!!
m
(
c
[
3
],
a
).
length
},
header
:
function
(
a
){
return
/h
\d
/i
.
test
(
a
.
nodeName
)},
text
:
function
(
a
){
var
b
=
a
.
getAttribute
(
"
type
"
),
c
=
a
.
type
;
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
text
"
===
c
&&
(
b
===
c
||
b
===
null
)},
radio
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
radio
"
===
a
.
type
},
checkbox
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
checkbox
"
===
a
.
type
},
file
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
file
"
===
a
.
type
},
password
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
password
"
===
a
.
type
},
submit
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
(
b
===
"
input
"
||
b
===
"
button
"
)
&&
"
submit
"
===
a
.
type
},
image
:
function
(
a
){
return
a
.
nodeName
.
toLowerCase
()
===
"
input
"
&&
"
image
"
===
a
.
type
},
reset
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
(
b
===
"
input
"
||
b
===
"
button
"
)
&&
"
reset
"
===
a
.
type
},
button
:
function
(
a
){
var
b
=
a
.
nodeName
.
toLowerCase
();
return
b
===
"
input
"
&&
"
button
"
===
a
.
type
||
b
===
"
button
"
},
input
:
function
(
a
){
return
/input|select|textarea|button/i
.
test
(
a
.
nodeName
)},
focus
:
function
(
a
){
return
a
===
a
.
ownerDocument
.
activeElement
}},
setFilters
:{
first
:
function
(
a
,
b
){
return
b
===
0
},
last
:
function
(
a
,
b
,
c
,
d
){
return
b
===
d
.
length
-
1
},
even
:
function
(
a
,
b
){
return
b
%
2
===
0
},
odd
:
function
(
a
,
b
){
return
b
%
2
===
1
},
lt
:
function
(
a
,
b
,
c
){
return
b
<
c
[
3
]
-
0
},
gt
:
function
(
a
,
b
,
c
){
return
b
>
c
[
3
]
-
0
},
nth
:
function
(
a
,
b
,
c
){
return
c
[
3
]
-
0
===
b
},
eq
:
function
(
a
,
b
,
c
){
return
c
[
3
]
-
0
===
b
}},
filter
:{
PSEUDO
:
function
(
a
,
b
,
c
,
d
){
var
e
=
b
[
1
],
f
=
o
.
filters
[
e
];
if
(
f
)
return
f
(
a
,
c
,
b
,
d
);
if
(
e
===
"
contains
"
)
return
(
a
.
textContent
||
a
.
innerText
||
n
([
a
])
||
""
).
indexOf
(
b
[
3
])
>=
0
;
if
(
e
===
"
not
"
){
var
g
=
b
[
3
];
for
(
var
h
=
0
,
i
=
g
.
length
;
h
<
i
;
h
++
)
if
(
g
[
h
]
===
a
)
return
!
1
;
return
!
0
}
m
.
error
(
e
)},
CHILD
:
function
(
a
,
b
){
var
c
,
e
,
f
,
g
,
h
,
i
,
j
,
k
=
b
[
1
],
l
=
a
;
switch
(
k
){
case
"
only
"
:
case
"
first
"
:
while
(
l
=
l
.
previousSibling
)
if
(
l
.
nodeType
===
1
)
return
!
1
;
if
(
k
===
"
first
"
)
return
!
0
;
l
=
a
;
case
"
last
"
:
while
(
l
=
l
.
nextSibling
)
if
(
l
.
nodeType
===
1
)
return
!
1
;
return
!
0
;
case
"
nth
"
:
c
=
b
[
2
],
e
=
b
[
3
];
if
(
c
===
1
&&
e
===
0
)
return
!
0
;
f
=
b
[
0
],
g
=
a
.
parentNode
;
if
(
g
&&
(
g
[
d
]
!==
f
||!
a
.
nodeIndex
)){
i
=
0
;
for
(
l
=
g
.
firstChild
;
l
;
l
=
l
.
nextSibling
)
l
.
nodeType
===
1
&&
(
l
.
nodeIndex
=++
i
);
g
[
d
]
=
f
}
j
=
a
.
nodeIndex
-
e
;
return
c
===
0
?
j
===
0
:
j
%
c
===
0
&&
j
/
c
>=
0
}},
ID
:
function
(
a
,
b
){
return
a
.
nodeType
===
1
&&
a
.
getAttribute
(
"
id
"
)
===
b
},
TAG
:
function
(
a
,
b
){
return
b
===
"
*
"
&&
a
.
nodeType
===
1
||!!
a
.
nodeName
&&
a
.
nodeName
.
toLowerCase
()
===
b
},
CLASS
:
function
(
a
,
b
){
return
(
"
"
+
(
a
.
className
||
a
.
getAttribute
(
"
class
"
))
+
"
"
).
indexOf
(
b
)
>-
1
},
ATTR
:
function
(
a
,
b
){
var
c
=
b
[
1
],
d
=
m
.
attr
?
m
.
attr
(
a
,
c
):
o
.
attrHandle
[
c
]?
o
.
attrHandle
[
c
](
a
):
a
[
c
]
!=
null
?
a
[
c
]:
a
.
getAttribute
(
c
),
e
=
d
+
""
,
f
=
b
[
2
],
g
=
b
[
4
];
return
d
==
null
?
f
===
"
!=
"
:
!
f
&&
m
.
attr
?
d
!=
null
:
f
===
"
=
"
?
e
===
g
:
f
===
"
*=
"
?
e
.
indexOf
(
g
)
>=
0
:
f
===
"
~=
"
?(
"
"
+
e
+
"
"
).
indexOf
(
g
)
>=
0
:
g
?
f
===
"
!=
"
?
e
!==
g
:
f
===
"
^=
"
?
e
.
indexOf
(
g
)
===
0
:
f
===
"
$=
"
?
e
.
substr
(
e
.
length
-
g
.
length
)
===
g
:
f
===
"
|=
"
?
e
===
g
||
e
.
substr
(
0
,
g
.
length
+
1
)
===
g
+
"
-
"
:
!
1
:
e
&&
d
!==!
1
},
POS
:
function
(
a
,
b
,
c
,
d
){
var
e
=
b
[
2
],
f
=
o
.
setFilters
[
e
];
if
(
f
)
return
f
(
a
,
c
,
b
,
d
)}}},
p
=
o
.
match
.
POS
,
q
=
function
(
a
,
b
){
return
"
\\
"
+
(
b
-
0
+
1
)};
for
(
var
r
in
o
.
match
)
o
.
match
[
r
]
=
new
RegExp
(
o
.
match
[
r
].
source
+
/
(?![^\[]
*
\])(?![^\(]
*
\))
/
.
source
),
o
.
leftMatch
[
r
]
=
new
RegExp
(
/
(
^
(?:
.|
\r
|
\n)
*
?)
/
.
source
+
o
.
match
[
r
].
source
.
replace
(
/
\\(\d
+
)
/g
,
q
));
var
s
=
function
(
a
,
b
){
a
=
Array
.
prototype
.
slice
.
call
(
a
,
0
);
if
(
b
){
b
.
push
.
apply
(
b
,
a
);
return
b
}
return
a
};
try
{
Array
.
prototype
.
slice
.
call
(
c
.
documentElement
.
childNodes
,
0
)[
0
].
nodeType
}
catch
(
t
){
s
=
function
(
a
,
b
){
var
c
=
0
,
d
=
b
||
[];
if
(
g
.
call
(
a
)
===
"
[object Array]
"
)
Array
.
prototype
.
push
.
apply
(
d
,
a
);
else
if
(
typeof
a
.
length
==
"
number
"
)
for
(
var
e
=
a
.
length
;
c
<
e
;
c
++
)
d
.
push
(
a
[
c
]);
else
for
(;
a
[
c
];
c
++
)
d
.
push
(
a
[
c
]);
return
d
}}
var
u
,
v
;
c
.
documentElement
.
compareDocumentPosition
?
u
=
function
(
a
,
b
){
if
(
a
===
b
){
h
=!
0
;
return
0
}
if
(
!
a
.
compareDocumentPosition
||!
b
.
compareDocumentPosition
)
return
a
.
compareDocumentPosition
?
-
1
:
1
;
return
a
.
compareDocumentPosition
(
b
)
&
4
?
-
1
:
1
}:(
u
=
function
(
a
,
b
){
if
(
a
===
b
){
h
=!
0
;
return
0
}
if
(
a
.
sourceIndex
&&
b
.
sourceIndex
)
return
a
.
sourceIndex
-
b
.
sourceIndex
;
var
c
,
d
,
e
=
[],
f
=
[],
g
=
a
.
parentNode
,
i
=
b
.
parentNode
,
j
=
g
;
if
(
g
===
i
)
return
v
(
a
,
b
);
if
(
!
g
)
return
-
1
;
if
(
!
i
)
return
1
;
while
(
j
)
e
.
unshift
(
j
),
j
=
j
.
parentNode
;
j
=
i
;
while
(
j
)
f
.
unshift
(
j
),
j
=
j
.
parentNode
;
c
=
e
.
length
,
d
=
f
.
length
;
for
(
var
k
=
0
;
k
<
c
&&
k
<
d
;
k
++
)
if
(
e
[
k
]
!==
f
[
k
])
return
v
(
e
[
k
],
f
[
k
]);
return
k
===
c
?
v
(
a
,
f
[
k
],
-
1
):
v
(
e
[
k
],
b
,
1
)},
v
=
function
(
a
,
b
,
c
){
if
(
a
===
b
)
return
c
;
var
d
=
a
.
nextSibling
;
while
(
d
){
if
(
d
===
b
)
return
-
1
;
d
=
d
.
nextSibling
}
return
1
}),
function
(){
var
a
=
c
.
createElement
(
"
div
"
),
d
=
"
script
"
+
(
new
Date
).
getTime
(),
e
=
c
.
documentElement
;
a
.
innerHTML
=
"
<a name='
"
+
d
+
"
'/>
"
,
e
.
insertBefore
(
a
,
e
.
firstChild
),
c
.
getElementById
(
d
)
&&
(
o
.
find
.
ID
=
function
(
a
,
c
,
d
){
if
(
typeof
c
.
getElementById
!=
"
undefined
"
&&!
d
){
var
e
=
c
.
getElementById
(
a
[
1
]);
return
e
?
e
.
id
===
a
[
1
]
||
typeof
e
.
getAttributeNode
!=
"
undefined
"
&&
e
.
getAttributeNode
(
"
id
"
).
nodeValue
===
a
[
1
]?[
e
]:
b
:[]}},
o
.
filter
.
ID
=
function
(
a
,
b
){
var
c
=
typeof
a
.
getAttributeNode
!=
"
undefined
"
&&
a
.
getAttributeNode
(
"
id
"
);
return
a
.
nodeType
===
1
&&
c
&&
c
.
nodeValue
===
b
}),
e
.
removeChild
(
a
),
e
=
a
=
null
}(),
function
(){
var
a
=
c
.
createElement
(
"
div
"
);
a
.
appendChild
(
c
.
createComment
(
""
)),
a
.
getElementsByTagName
(
"
*
"
).
length
>
0
&&
(
o
.
find
.
TAG
=
function
(
a
,
b
){
var
c
=
b
.
getElementsByTagName
(
a
[
1
]);
if
(
a
[
1
]
===
"
*
"
){
var
d
=
[];
for
(
var
e
=
0
;
c
[
e
];
e
++
)
c
[
e
].
nodeType
===
1
&&
d
.
push
(
c
[
e
]);
c
=
d
}
return
c
}),
a
.
innerHTML
=
"
<a href='#'></a>
"
,
a
.
firstChild
&&
typeof
a
.
firstChild
.
getAttribute
!=
"
undefined
"
&&
a
.
firstChild
.
getAttribute
(
"
href
"
)
!==
"
#
"
&&
(
o
.
attrHandle
.
href
=
function
(
a
){
return
a
.
getAttribute
(
"
href
"
,
2
)}),
a
=
null
}(),
c
.
querySelectorAll
&&
function
(){
var
a
=
m
,
b
=
c
.
createElement
(
"
div
"
),
d
=
"
__sizzle__
"
;
b
.
innerHTML
=
"
<p class='TEST'></p>
"
;
if
(
!
b
.
querySelectorAll
||
b
.
querySelectorAll
(
"
.TEST
"
).
length
!==
0
){
m
=
function
(
b
,
e
,
f
,
g
){
e
=
e
||
c
;
if
(
!
g
&&!
m
.
isXML
(
e
)){
var
h
=
/^
(\w
+$
)
|^
\.([\w\-]
+$
)
|^#
([\w\-]
+$
)
/
.
exec
(
b
);
if
(
h
&&
(
e
.
nodeType
===
1
||
e
.
nodeType
===
9
)){
if
(
h
[
1
])
return
s
(
e
.
getElementsByTagName
(
b
),
f
);
if
(
h
[
2
]
&&
o
.
find
.
CLASS
&&
e
.
getElementsByClassName
)
return
s
(
e
.
getElementsByClassName
(
h
[
2
]),
f
)}
if
(
e
.
nodeType
===
9
){
if
(
b
===
"
body
"
&&
e
.
body
)
return
s
([
e
.
body
],
f
);
if
(
h
&&
h
[
3
]){
var
i
=
e
.
getElementById
(
h
[
3
]);
if
(
!
i
||!
i
.
parentNode
)
return
s
([],
f
);
if
(
i
.
id
===
h
[
3
])
return
s
([
i
],
f
)}
try
{
return
s
(
e
.
querySelectorAll
(
b
),
f
)}
catch
(
j
){}}
else
if
(
e
.
nodeType
===
1
&&
e
.
nodeName
.
toLowerCase
()
!==
"
object
"
){
var
k
=
e
,
l
=
e
.
getAttribute
(
"
id
"
),
n
=
l
||
d
,
p
=
e
.
parentNode
,
q
=
/^
\s
*
[
+~
]
/
.
test
(
b
);
l
?
n
=
n
.
replace
(
/'/g
,
"
\\
$&
"
):
e
.
setAttribute
(
"
id
"
,
n
),
q
&&
p
&&
(
e
=
e
.
parentNode
);
try
{
if
(
!
q
||
p
)
return
s
(
e
.
querySelectorAll
(
"
[id='
"
+
n
+
"
']
"
+
b
),
f
)}
catch
(
r
){}
finally
{
l
||
k
.
removeAttribute
(
"
id
"
)}}}
return
a
(
b
,
e
,
f
,
g
)};
for
(
var
e
in
a
)
m
[
e
]
=
a
[
e
];
b
=
null
}}(),
function
(){
var
a
=
c
.
documentElement
,
b
=
a
.
matchesSelector
||
a
.
mozMatchesSelector
||
a
.
webkitMatchesSelector
||
a
.
msMatchesSelector
;
if
(
b
){
var
d
=!
b
.
call
(
c
.
createElement
(
"
div
"
),
"
div
"
),
e
=!
1
;
try
{
b
.
call
(
c
.
documentElement
,
"
[test!='']:sizzle
"
)}
catch
(
f
){
e
=!
0
}
m
.
matchesSelector
=
function
(
a
,
c
){
c
=
c
.
replace
(
/
\=\s
*
([^
'"
\]]
*
)\s
*
\]
/g
,
"
='$1']
"
);
if
(
!
m
.
isXML
(
a
))
try
{
if
(
e
||!
o
.
match
.
PSEUDO
.
test
(
c
)
&&!
/!=/
.
test
(
c
)){
var
f
=
b
.
call
(
a
,
c
);
if
(
f
||!
d
||
a
.
document
&&
a
.
document
.
nodeType
!==
11
)
return
f
}}
catch
(
g
){}
return
m
(
c
,
null
,
null
,[
a
]).
length
>
0
}}}(),
function
(){
var
a
=
c
.
createElement
(
"
div
"
);
a
.
innerHTML
=
"
<div class='test e'></div><div class='test'></div>
"
;
if
(
!!
a
.
getElementsByClassName
&&
a
.
getElementsByClassName
(
"
e
"
).
length
!==
0
){
a
.
lastChild
.
className
=
"
e
"
;
if
(
a
.
getElementsByClassName
(
"
e
"
).
length
===
1
)
return
;
o
.
order
.
splice
(
1
,
0
,
"
CLASS
"
),
o
.
find
.
CLASS
=
function
(
a
,
b
,
c
){
if
(
typeof
b
.
getElementsByClassName
!=
"
undefined
"
&&!
c
)
return
b
.
getElementsByClassName
(
a
[
1
])},
a
=
null
}}(),
c
.
documentElement
.
contains
?
m
.
contains
=
function
(
a
,
b
){
return
a
!==
b
&&
(
a
.
contains
?
a
.
contains
(
b
):
!
0
)}:
c
.
documentElement
.
compareDocumentPosition
?
m
.
contains
=
function
(
a
,
b
){
return
!!
(
a
.
compareDocumentPosition
(
b
)
&
16
)}:
m
.
contains
=
function
(){
return
!
1
},
m
.
isXML
=
function
(
a
){
var
b
=
(
a
?
a
.
ownerDocument
||
a
:
0
).
documentElement
;
return
b
?
b
.
nodeName
!==
"
HTML
"
:
!
1
};
var
y
=
function
(
a
,
b
,
c
){
var
d
,
e
=
[],
f
=
""
,
g
=
b
.
nodeType
?[
b
]:
b
;
while
(
d
=
o
.
match
.
PSEUDO
.
exec
(
a
))
f
+=
d
[
0
],
a
=
a
.
replace
(
o
.
match
.
PSEUDO
,
""
);
a
=
o
.
relative
[
a
]?
a
+
"
*
"
:
a
;
for
(
var
h
=
0
,
i
=
g
.
length
;
h
<
i
;
h
++
)
m
(
a
,
g
[
h
],
e
,
c
);
return
m
.
filter
(
f
,
e
)};
m
.
attr
=
f
.
attr
,
m
.
selectors
.
attrMap
=
{},
f
.
find
=
m
,
f
.
expr
=
m
.
selectors
,
f
.
expr
[
"
:
"
]
=
f
.
expr
.
filters
,
f
.
unique
=
m
.
uniqueSort
,
f
.
text
=
m
.
getText
,
f
.
isXMLDoc
=
m
.
isXML
,
f
.
contains
=
m
.
contains
}();
var
L
=
/Until$/
,
M
=
/^
(?:
parents|prevUntil|prevAll
)
/
,
N
=
/,/
,
O
=
/^.
[^
:#
\[\.
,
]
*$/
,
P
=
Array
.
prototype
.
slice
,
Q
=
f
.
expr
.
match
.
POS
,
R
=
{
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
(
T
(
this
,
a
,
!
1
),
"
not
"
,
a
)},
filter
:
function
(
a
){
return
this
.
pushStack
(
T
(
this
,
a
,
!
0
),
"
filter
"
,
a
)},
is
:
function
(
a
){
return
!!
a
&&
(
typeof
a
==
"
string
"
?
Q
.
test
(
a
)?
f
(
a
,
this
.
context
).
index
(
this
[
0
])
>=
0
:
f
.
filter
(
a
,
this
).
length
>
0
:
this
.
filter
(
a
).
length
>
0
)},
closest
:
function
(
a
,
b
){
var
c
=
[],
d
,
e
,
g
=
this
[
0
];
if
(
f
.
isArray
(
a
)){
var
h
=
1
;
while
(
g
&&
g
.
ownerDocument
&&
g
!==
b
){
for
(
d
=
0
;
d
<
a
.
length
;
d
++
)
f
(
g
).
is
(
a
[
d
])
&&
c
.
push
({
selector
:
a
[
d
],
elem
:
g
,
level
:
h
});
g
=
g
.
parentNode
,
h
++
}
return
c
}
var
i
=
Q
.
test
(
a
)
||
typeof
a
!=
"
string
"
?
f
(
a
,
b
||
this
.
context
):
0
;
for
(
d
=
0
,
e
=
this
.
length
;
d
<
e
;
d
++
){
g
=
this
[
d
];
while
(
g
){
if
(
i
?
i
.
index
(
g
)
>-
1
:
f
.
find
.
matchesSelector
(
g
,
a
)){
c
.
push
(
g
);
break
}
g
=
g
.
parentNode
;
if
(
!
g
||!
g
.
ownerDocument
||
g
===
b
||
g
.
nodeType
===
11
)
break
}}
c
=
c
.
length
>
1
?
f
.
unique
(
c
):
c
;
return
this
.
pushStack
(
c
,
"
closest
"
,
a
)},
index
:
function
(
a
){
if
(
!
a
)
return
this
[
0
]
&&
this
[
0
].
parentNode
?
this
.
prevAll
().
length
:
-
1
;
if
(
typeof
a
==
"
string
"
)
return
f
.
inArray
(
this
[
0
],
f
(
a
));
return
f
.
inArray
(
a
.
jquery
?
a
[
0
]:
a
,
this
)},
add
:
function
(
a
,
b
){
var
c
=
typeof
a
==
"
string
"
?
f
(
a
,
b
):
f
.
makeArray
(
a
&&
a
.
nodeType
?[
a
]:
a
),
d
=
f
.
merge
(
this
.
get
(),
c
);
return
this
.
pushStack
(
S
(
c
[
0
])
||
S
(
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
);
L
.
test
(
a
)
||
(
d
=
c
),
d
&&
typeof
d
==
"
string
"
&&
(
e
=
f
.
filter
(
d
,
e
)),
e
=
this
.
length
>
1
&&!
R
[
a
]?
f
.
unique
(
e
):
e
,(
this
.
length
>
1
||
N
.
test
(
d
))
&&
M
.
test
(
a
)
&&
(
e
=
e
.
reverse
());
return
this
.
pushStack
(
e
,
a
,
P
.
call
(
arguments
).
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
V
=
"
abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video
"
,
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|style
)
/i
,
bb
=
/<
(?:
script|object|embed|option|style
)
/i
,
bc
=
new
RegExp
(
"
<(?:
"
+
V
+
"
)
"
,
"
i
"
),
bd
=
/checked
\s
*
(?:[^
=
]
|=
\s
*.checked.
)
/i
,
be
=
/
\/(
java|ecma
)
script/i
,
bf
=
/^
\s
*<!
(?:\[
CDATA
\[
|
\-\-)
/
,
bg
=
{
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
,
""
,
""
]},
bh
=
U
(
c
);
bg
.
optgroup
=
bg
.
option
,
bg
.
tbody
=
bg
.
tfoot
=
bg
.
colgroup
=
bg
.
caption
=
bg
.
thead
,
bg
.
th
=
bg
.
td
,
f
.
support
.
htmlSerialize
||
(
bg
.
_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
){
var
b
=
f
.
isFunction
(
a
);
return
this
.
each
(
function
(
c
){
f
(
this
).
wrapAll
(
b
?
a
.
call
(
this
,
c
):
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
.
clean
(
arguments
);
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
.
clean
(
arguments
));
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
))
&&!
bg
[(
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
"
&&
bd
.
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
?
bi
(
this
[
l
],
g
):
this
[
l
],
e
.
cacheable
||
m
>
1
&&
l
<
n
?
f
.
clone
(
h
,
!
0
,
!
0
):
h
)}
k
.
length
&&
f
.
each
(
k
,
bp
)}
return
this
}}),
f
.
buildFragment
=
function
(
a
,
b
,
d
){
var
e
,
g
,
h
,
i
,
j
=
a
[
0
];
b
&&
b
[
0
]
&&
(
i
=
b
[
0
].
ownerDocument
||
b
[
0
]),
i
.
createDocumentFragment
||
(
i
=
c
),
a
.
length
===
1
&&
typeof
j
==
"
string
"
&&
j
.
length
<
512
&&
i
===
c
&&
j
.
charAt
(
0
)
===
"
<
"
&&!
bb
.
test
(
j
)
&&
(
f
.
support
.
checkClone
||!
bd
.
test
(
j
))
&&
(
f
.
support
.
html5Clone
||!
bc
.
test
(
j
))
&&
(
g
=!
0
,
h
=
f
.
fragments
[
j
],
h
&&
h
!==
1
&&
(
e
=
h
)),
e
||
(
e
=
i
.
createDocumentFragment
(),
f
.
clean
(
a
,
i
,
e
,
d
)),
g
&&
(
f
.
fragments
[
j
]
=
h
?
e
:
1
);
return
{
fragment
:
e
,
cacheable
:
g
}},
f
.
fragments
=
{},
f
.
each
({
appendTo
:
"
append
"
,
prependTo
:
"
prepend
"
,
insertBefore
:
"
before
"
,
insertAfter
:
"
after
"
,
replaceAll
:
"
replaceWith
"
},
function
(
a
,
b
){
f
.
fn
[
a
]
=
function
(
c
){
var
d
=
[],
e
=
f
(
c
),
g
=
this
.
length
===
1
&&
this
[
0
].
parentNode
;
if
(
g
&&
g
.
nodeType
===
11
&&
g
.
childNodes
.
length
===
1
&&
e
.
length
===
1
){
e
[
b
](
this
[
0
]);
return
this
}
for
(
var
h
=
0
,
i
=
e
.
length
;
h
<
i
;
h
++
){
var
j
=
(
h
>
0
?
this
.
clone
(
!
0
):
this
).
get
();
f
(
e
[
h
])[
b
](
j
),
d
=
d
.
concat
(
j
)}
return
this
.
pushStack
(
d
,
a
,
e
.
selector
)}}),
f
.
extend
({
clone
:
function
(
a
,
b
,
c
){
var
d
,
e
,
g
,
h
=
f
.
support
.
html5Clone
||!
bc
.
test
(
"
<
"
+
a
.
nodeName
)?
a
.
cloneNode
(
!
0
):
bo
(
a
);
if
((
!
f
.
support
.
noCloneEvent
||!
f
.
support
.
noCloneChecked
)
&&
(
a
.
nodeType
===
1
||
a
.
nodeType
===
11
)
&&!
f
.
isXMLDoc
(
a
)){
bk
(
a
,
h
),
d
=
bl
(
a
),
e
=
bl
(
h
);
for
(
g
=
0
;
d
[
g
];
++
g
)
e
[
g
]
&&
bk
(
d
[
g
],
e
[
g
])}
if
(
b
){
bj
(
a
,
h
);
if
(
c
){
d
=
bl
(
a
),
e
=
bl
(
h
);
for
(
g
=
0
;
d
[
g
];
++
g
)
bj
(
d
[
g
],
e
[
g
])}}
d
=
e
=
null
;
return
h
},
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
=
bg
[
l
]
||
bg
.
_default
,
n
=
m
[
0
],
o
=
b
.
createElement
(
"
div
"
);
b
===
c
?
bh
.
appendChild
(
o
):
U
(
b
).
appendChild
(
o
),
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
++
)
bn
(
k
[
i
]);
else
bn
(
k
);
k
.
nodeType
?
h
.
push
(
k
):
h
=
f
.
merge
(
h
,
k
)}
if
(
d
){
g
=
function
(
a
){
return
!
a
.
type
||
be
.
test
(
a
.
type
)};
for
(
j
=
0
;
h
[
j
];
j
++
)
if
(
e
&&
f
.
nodeName
(
h
[
j
],
"
script
"
)
&&
(
!
h
[
j
].
type
||
h
[
j
].
type
.
toLowerCase
()
===
"
text/javascript
"
))
e
.
push
(
h
[
j
].
parentNode
?
h
[
j
].
parentNode
.
removeChild
(
h
[
j
]):
h
[
j
]);
else
{
if
(
h
[
j
].
nodeType
===
1
){
var
s
=
f
.
grep
(
h
[
j
].
getElementsByTagName
(
"
script
"
),
g
);
h
.
splice
.
apply
(
h
,[
j
+
1
,
0
].
concat
(
s
))}
d
.
appendChild
(
h
[
j
])}}
return
h
},
cleanData
:
function
(
a
){
var
b
,
c
,
d
=
f
.
cache
,
e
=
f
.
event
.
special
,
g
=
f
.
support
.
deleteExpando
;
for
(
var
h
=
0
,
i
;(
i
=
a
[
h
])
!=
null
;
h
++
){
if
(
i
.
nodeName
&&
f
.
noData
[
i
.
nodeName
.
toLowerCase
()])
continue
;
c
=
i
[
f
.
expando
];
if
(
c
){
b
=
d
[
c
];
if
(
b
&&
b
.
events
){
for
(
var
j
in
b
.
events
)
e
[
j
]?
f
.
event
.
remove
(
i
,
j
):
f
.
removeEvent
(
i
,
j
,
b
.
handle
);
b
.
handle
&&
(
b
.
handle
.
elem
=
null
)}
g
?
delete
i
[
f
.
expando
]:
i
.
removeAttribute
&&
i
.
removeAttribute
(
f
.
expando
),
delete
d
[
c
]}}}});
var
bq
=
/alpha
\([^
)
]
*
\)
/i
,
br
=
/opacity=
([^
)
]
*
)
/
,
bs
=
/
([
A-Z
]
|^ms
)
/g
,
bt
=
/^-
?\d
+
(?:
px
)?
$/i
,
bu
=
/^-
?\d
/
,
bv
=
/^
([\-
+
])
=
([\-
+.
\d
e
]
+
)
/
,
bw
=
{
position
:
"
absolute
"
,
visibility
:
"
hidden
"
,
display
:
"
block
"
},
bx
=
[
"
Left
"
,
"
Right
"
],
by
=
[
"
Top
"
,
"
Bottom
"
],
bz
,
bA
,
bB
;
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
=
bz
(
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
=
bv
.
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
(
bz
)
return
bz
(
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
bC
(
a
,
b
,
d
);
f
.
swap
(
a
,
bw
,
function
(){
e
=
bC
(
a
,
b
,
d
)});
return
e
}},
set
:
function
(
a
,
b
){
if
(
!
bt
.
test
(
b
))
return
b
;
b
=
parseFloat
(
b
);
if
(
b
>=
0
)
return
b
+
"
px
"
}}}),
f
.
support
.
opacity
||
(
f
.
cssHooks
.
opacity
=
{
get
:
function
(
a
,
b
){
return
br
.
test
((
b
&&
a
.
currentStyle
?
a
.
currentStyle
.
filter
:
a
.
style
.
filter
)
||
""
)?
parseFloat
(
RegExp
.
$1
)
/
100
+
""
:
b
?
"
1
"
:
""
},
set
:
function
(
a
,
b
){
var
c
=
a
.
style
,
d
=
a
.
currentStyle
,
e
=
f
.
isNumeric
(
b
)?
"
alpha(opacity=
"
+
b
*
100
+
"
)
"
:
""
,
g
=
d
&&
d
.
filter
||
c
.
filter
||
""
;
c
.
zoom
=
1
;
if
(
b
>=
1
&&
f
.
trim
(
g
.
replace
(
bq
,
""
))
===
""
){
c
.
removeAttribute
(
"
filter
"
);
if
(
d
&&!
d
.
filter
)
return
}
c
.
filter
=
bq
.
test
(
g
)?
g
.
replace
(
bq
,
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
=
bz
(
a
,
"
margin-right
"
,
"
marginRight
"
):
c
=
a
.
style
.
marginRight
});
return
c
}})}),
c
.
defaultView
&&
c
.
defaultView
.
getComputedStyle
&&
(
bA
=
function
(
a
,
b
){
var
c
,
d
,
e
;
b
=
b
.
replace
(
bs
,
"
-$1
"
).
toLowerCase
(),(
d
=
a
.
ownerDocument
.
defaultView
)
&&
(
e
=
d
.
getComputedStyle
(
a
,
null
))
&&
(
c
=
e
.
getPropertyValue
(
b
),
c
===
""
&&!
f
.
contains
(
a
.
ownerDocument
.
documentElement
,
a
)
&&
(
c
=
f
.
style
(
a
,
b
)));
return
c
}),
c
.
documentElement
.
currentStyle
&&
(
bB
=
function
(
a
,
b
){
var
c
,
d
,
e
,
f
=
a
.
currentStyle
&&
a
.
currentStyle
[
b
],
g
=
a
.
style
;
f
===
null
&&
g
&&
(
e
=
g
[
b
])
&&
(
f
=
e
),
!
bt
.
test
(
f
)
&&
bu
.
test
(
f
)
&&
(
c
=
g
.
left
,
d
=
a
.
runtimeStyle
&&
a
.
runtimeStyle
.
left
,
d
&&
(
a
.
runtimeStyle
.
left
=
a
.
currentStyle
.
left
),
g
.
left
=
b
===
"
fontSize
"
?
"
1em
"
:
f
||
0
,
f
=
g
.
pixelLeft
+
"
px
"
,
g
.
left
=
c
,
d
&&
(
a
.
runtimeStyle
.
left
=
d
));
return
f
===
""
?
"
auto
"
:
f
}),
bz
=
bA
||
bB
,
f
.
expr
&&
f
.
expr
.
filters
&&
(
f
.
expr
.
filters
.
hidden
=
function
(
a
){
var
b
=
a
.
offsetWidth
,
c
=
a
.
offsetHeight
;
return
b
===
0
&&
c
===
0
||!
f
.
support
.
reliableHiddenOffsets
&&
(
a
.
style
&&
a
.
style
.
display
||
f
.
css
(
a
,
"
display
"
))
===
"
none
"
},
f
.
expr
.
filters
.
visible
=
function
(
a
){
return
!
f
.
expr
.
filters
.
hidden
(
a
)});
var
bD
=
/%20/g
,
bE
=
/
\[\]
$/
,
bF
=
/
\r?\n
/g
,
bG
=
/#.*$/
,
bH
=
/^
(
.*
?)
:
[
\t]
*
([^\r\n]
*
)\r?
$/mg
,
bI
=
/^
(?:
color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week
)
$/i
,
bJ
=
/^
(?:
about|app|app
\-
storage|.+
\-
extension|file|res|widget
)
:$/
,
bK
=
/^
(?:
GET|HEAD
)
$/
,
bL
=
/^
\/\/
/
,
bM
=
/
\?
/
,
bN
=
/<script
\b[^
<
]
*
(?:(?!
<
\/
script>
)
<
[^
<
]
*
)
*<
\/
script>/gi
,
bO
=
/^
(?:
select|textarea
)
/i
,
bP
=
/
\s
+/
,
bQ
=
/
([
?&
])
_=
[^
&
]
*/
,
bR
=
/^
([\w\+\.\-]
+:
)(?:\/\/([^\/
?#:
]
*
)(?:
:
(\d
+
))?)?
/
,
bS
=
f
.
fn
.
load
,
bT
=
{},
bU
=
{},
bV
,
bW
,
bX
=
[
"
*/
"
]
+
[
"
*
"
];
try
{
bV
=
e
.
href
}
catch
(
bY
){
bV
=
c
.
createElement
(
"
a
"
),
bV
.
href
=
""
,
bV
=
bV
.
href
}
bW
=
bR
.
exec
(
bV
.
toLowerCase
())
||
[],
f
.
fn
.
extend
({
load
:
function
(
a
,
c
,
d
){
if
(
typeof
a
!=
"
string
"
&&
bS
)
return
bS
.
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
(
bN
,
""
)).
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
||
bO
.
test
(
this
.
nodeName
)
||
bI
.
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
(
bF
,
"
\r\n
"
)}}):{
name
:
b
.
name
,
value
:
c
.
replace
(
bF
,
"
\r\n
"
)}}).
get
()}}),
f
.
each
(
"
ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend
"
.
split
(
"
"
),
function
(
a
,
b
){
f
.
fn
[
b
]
=
function
(
a
){
return
this
.
on
(
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
?
b_
(
a
,
f
.
ajaxSettings
):(
b
=
a
,
a
=
f
.
ajaxSettings
),
b_
(
a
,
b
);
return
a
},
ajaxSettings
:{
url
:
bV
,
isLocal
:
bJ
.
test
(
bW
[
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
"
,
"
*
"
:
bX
},
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
:
bZ
(
bT
),
ajaxTransport
:
bZ
(
bU
),
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
?
cb
(
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
=
cc
(
d
,
x
),
w
=
"
success
"
,
o
=!
0
}
catch
(
A
){
w
=
"
parsererror
"
,
u
=
A
}}
else
{
u
=
w
;
if
(
!
w
||
a
)
w
=
"
error
"
,
a
<
0
&&
(
a
=
0
)}
v
.
status
=
a
,
v
.
statusText
=
""
+
(
c
||
w
),
o
?
h
.
resolveWith
(
e
,[
r
,
w
,
v
]):
h
.
rejectWith
(
e
,[
v
,
w
,
u
]),
v
.
statusCode
(
j
),
j
=
b
,
t
&&
g
.
trigger
(
"
ajax
"
+
(
o
?
"
Success
"
:
"
Error
"
),[
v
,
d
,
o
?
r
:
u
]),
i
.
fireWith
(
e
,[
v
,
w
]),
t
&&
(
g
.
trigger
(
"
ajaxComplete
"
,[
v
,
d
]),
--
f
.
active
||
f
.
event
.
trigger
(
"
ajaxStop
"
))}}
typeof
a
==
"
object
"
&&
(
c
=
a
,
a
=
b
),
c
=
c
||
{};
var
d
=
f
.
ajaxSetup
({},
c
),
e
=
d
.
context
||
d
,
g
=
e
!==
d
&&
(
e
.
nodeType
||
e
instanceof
f
)?
f
(
e
):
f
.
event
,
h
=
f
.
Deferred
(),
i
=
f
.
Callbacks
(
"
once memory
"
),
j
=
d
.
statusCode
||
{},
k
,
l
=
{},
m
=
{},
n
,
o
,
p
,
q
,
r
,
s
=
0
,
t
,
u
,
v
=
{
readyState
:
0
,
setRequestHeader
:
function
(
a
,
b
){
if
(
!
s
){
var
c
=
a
.
toLowerCase
();
a
=
m
[
c
]
=
m
[
c
]
||
a
,
l
[
a
]
=
b
}
return
this
},
getAllResponseHeaders
:
function
(){
return
s
===
2
?
n
:
null
},
getResponseHeader
:
function
(
a
){
var
c
;
if
(
s
===
2
){
if
(
!
o
){
o
=
{};
while
(
c
=
bH
.
exec
(
n
))
o
[
c
[
1
].
toLowerCase
()]
=
c
[
2
]}
c
=
o
[
a
.
toLowerCase
()]}
return
c
===
b
?
null
:
c
},
overrideMimeType
:
function
(
a
){
s
||
(
d
.
mimeType
=
a
);
return
this
},
abort
:
function
(
a
){
a
=
a
||
"
abort
"
,
p
&&
p
.
abort
(
a
),
w
(
0
,
a
);
return
this
}};
h
.
promise
(
v
),
v
.
success
=
v
.
done
,
v
.
error
=
v
.
fail
,
v
.
complete
=
i
.
add
,
v
.
statusCode
=
function
(
a
){
if
(
a
){
var
b
;
if
(
s
<
2
)
for
(
b
in
a
)
j
[
b
]
=
[
j
[
b
],
a
[
b
]];
else
b
=
a
[
v
.
status
],
v
.
then
(
b
,
b
)}
return
this
},
d
.
url
=
((
a
||
d
.
url
)
+
""
).
replace
(
bG
,
""
).
replace
(
bL
,
bW
[
1
]
+
"
//
"
),
d
.
dataTypes
=
f
.
trim
(
d
.
dataType
||
"
*
"
).
toLowerCase
().
split
(
bP
),
d
.
crossDomain
==
null
&&
(
r
=
bR
.
exec
(
d
.
url
.
toLowerCase
()),
d
.
crossDomain
=!
(
!
r
||
r
[
1
]
==
bW
[
1
]
&&
r
[
2
]
==
bW
[
2
]
&&
(
r
[
3
]
||
(
r
[
1
]
===
"
http:
"
?
80
:
443
))
==
(
bW
[
3
]
||
(
bW
[
1
]
===
"
http:
"
?
80
:
443
)))),
d
.
data
&&
d
.
processData
&&
typeof
d
.
data
!=
"
string
"
&&
(
d
.
data
=
f
.
param
(
d
.
data
,
d
.
traditional
)),
b$
(
bT
,
d
,
c
,
v
);
if
(
s
===
2
)
return
!
1
;
t
=
d
.
global
,
d
.
type
=
d
.
type
.
toUpperCase
(),
d
.
hasContent
=!
bK
.
test
(
d
.
type
),
t
&&
f
.
active
++===
0
&&
f
.
event
.
trigger
(
"
ajaxStart
"
);
if
(
!
d
.
hasContent
){
d
.
data
&&
(
d
.
url
+=
(
bM
.
test
(
d
.
url
)?
"
&
"
:
"
?
"
)
+
d
.
data
,
delete
d
.
data
),
k
=
d
.
url
;
if
(
d
.
cache
===!
1
){
var
x
=
f
.
now
(),
y
=
d
.
url
.
replace
(
bQ
,
"
$1_=
"
+
x
);
d
.
url
=
y
+
(
y
===
d
.
url
?(
bM
.
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
]
!==
"
*
"
?
"
,
"
+
bX
+
"
; 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
=
b$
(
bU
,
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
){
if
(
s
<
2
)
w
(
-
1
,
z
);
else
throw
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
)
ca
(
g
,
a
[
g
],
c
,
e
);
return
d
.
join
(
"
&
"
).
replace
(
bD
,
"
+
"
)}}),
f
.
extend
({
active
:
0
,
lastModified
:{},
etag
:{}});
var
cd
=
f
.
now
(),
ce
=
/
(\=)\?(
&|$
)
|
\?\?
/i
;
f
.
ajaxSetup
({
jsonp
:
"
callback
"
,
jsonpCallback
:
function
(){
return
f
.
expando
+
"
_
"
+
cd
++
}}),
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
&&
(
ce
.
test
(
b
.
url
)
||
e
&&
ce
.
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
(
ce
,
l
),
b
.
url
===
j
&&
(
e
&&
(
k
=
k
.
replace
(
ce
,
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
cf
=
a
.
ActiveXObject
?
function
(){
for
(
var
a
in
ch
)
ch
[
a
](
0
,
1
)}:
!
1
,
cg
=
0
,
ch
;
f
.
ajaxSettings
.
xhr
=
a
.
ActiveXObject
?
function
(){
return
!
this
.
isLocal
&&
ci
()
||
cj
()}:
ci
,
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
,
cf
&&
delete
ch
[
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
=++
cg
,
cf
&&
(
ch
||
(
ch
=
{},
f
(
a
).
unload
(
cf
)),
ch
[
i
]
=
d
),
h
.
onreadystatechange
=
d
)},
abort
:
function
(){
d
&&
d
(
0
,
1
)}}}});
var
ck
=
{},
cl
,
cm
,
cn
=
/^
(?:
toggle|show|hide
)
$/
,
co
=
/^
([
+
\-]
=
)?([\d
+.
\-]
+
)([
a-z%
]
*
)
$/i
,
cp
,
cq
=
[[
"
height
"
,
"
marginTop
"
,
"
marginBottom
"
,
"
paddingTop
"
,
"
paddingBottom
"
],[
"
width
"
,
"
marginLeft
"
,
"
marginRight
"
,
"
paddingLeft
"
,
"
paddingRight
"
],[
"
opacity
"
]],
cr
;
f
.
fn
.
extend
({
show
:
function
(
a
,
b
,
c
){
var
d
,
e
;
if
(
a
||
a
===
0
)
return
this
.
animate
(
cu
(
"
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
"
,
cv
(
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
(
cu
(
"
hide
"
,
3
),
a
,
b
,
c
);
var
d
,
e
,
g
=
0
,
h
=
this
.
length
;
for
(;
g
<
h
;
g
++
)
d
=
this
[
g
],
d
.
style
&&
(
e
=
f
.
css
(
d
,
"
display
"
),
e
!==
"
none
"
&&!
f
.
_data
(
d
,
"
olddisplay
"
)
&&
f
.
_data
(
d
,
"
olddisplay
"
,
e
));
for
(
g
=
0
;
g
<
h
;
g
++
)
this
[
g
].
style
&&
(
this
[
g
].
style
.
display
=
"
none
"
);
return
this
},
_toggle
:
f
.
fn
.
toggle
,
toggle
:
function
(
a
,
b
,
c
){
var
d
=
typeof
a
==
"
boolean
"
;
f
.
isFunction
(
a
)
&&
f
.
isFunction
(
b
)?
this
.
_toggle
.
apply
(
this
,
arguments
):
a
==
null
||
d
?
this
.
each
(
function
(){
var
b
=
d
?
a
:
f
(
this
).
is
(
"
:hidden
"
);
f
(
this
)[
b
?
"
show
"
:
"
hide
"
]()}):
this
.
animate
(
cu
(
"
toggle
"
,
3
),
a
,
b
,
c
);
return
this
},
fadeTo
:
function
(
a
,
b
,
c
,
d
){
return
this
.
filter
(
"
:hidden
"
).
css
(
"
opacity
"
,
0
).
show
().
end
().
animate
({
opacity
:
b
},
a
,
c
,
d
)},
animate
:
function
(
a
,
b
,
c
,
d
){
function
g
(){
e
.
queue
===!
1
&&
f
.
_mark
(
this
);
var
b
=
f
.
extend
({},
e
),
c
=
this
.
nodeType
===
1
,
d
=
c
&&
f
(
this
).
is
(
"
:hidden
"
),
g
,
h
,
i
,
j
,
k
,
l
,
m
,
n
,
o
;
b
.
animatedProperties
=
{};
for
(
i
in
a
){
g
=
f
.
camelCase
(
i
),
i
!==
g
&&
(
a
[
g
]
=
a
[
i
],
delete
a
[
i
]),
h
=
a
[
g
],
f
.
isArray
(
h
)?(
b
.
animatedProperties
[
g
]
=
h
[
1
],
h
=
a
[
g
]
=
h
[
0
]):
b
.
animatedProperties
[
g
]
=
b
.
specialEasing
&&
b
.
specialEasing
[
g
]
||
b
.
easing
||
"
swing
"
;
if
(
h
===
"
hide
"
&&
d
||
h
===
"
show
"
&&!
d
)
return
b
.
complete
.
call
(
this
);
c
&&
(
g
===
"
height
"
||
g
===
"
width
"
)
&&
(
b
.
overflow
=
[
this
.
style
.
overflow
,
this
.
style
.
overflowX
,
this
.
style
.
overflowY
],
f
.
css
(
this
,
"
display
"
)
===
"
inline
"
&&
f
.
css
(
this
,
"
float
"
)
===
"
none
"
&&
(
!
f
.
support
.
inlineBlockNeedsLayout
||
cv
(
this
.
nodeName
)
===
"
inline
"
?
this
.
style
.
display
=
"
inline-block
"
:
this
.
style
.
zoom
=
1
))}
b
.
overflow
!=
null
&&
(
this
.
style
.
overflow
=
"
hidden
"
);
for
(
i
in
a
)
j
=
new
f
.
fx
(
this
,
b
,
i
),
h
=
a
[
i
],
cn
.
test
(
h
)?(
o
=
f
.
_data
(
this
,
"
toggle
"
+
i
)
||
(
h
===
"
toggle
"
?
d
?
"
show
"
:
"
hide
"
:
0
),
o
?(
f
.
_data
(
this
,
"
toggle
"
+
i
,
o
===
"
show
"
?
"
hide
"
:
"
show
"
),
j
[
o
]()):
j
[
h
]()):(
k
=
co
.
exec
(
h
),
l
=
j
.
cur
(),
k
?(
m
=
parseFloat
(
k
[
2
]),
n
=
k
[
3
]
||
(
f
.
cssNumber
[
i
]?
""
:
"
px
"
),
n
!==
"
px
"
&&
(
f
.
style
(
this
,
i
,(
m
||
1
)
+
n
),
l
=
(
m
||
1
)
/
j
.
cur
()
*
l
,
f
.
style
(
this
,
i
,
l
+
n
)),
k
[
1
]
&&
(
m
=
(
k
[
1
]
===
"
-=
"
?
-
1
:
1
)
*
m
+
l
),
j
.
custom
(
l
,
m
,
n
)):
j
.
custom
(
l
,
h
,
""
));
return
!
0
}
var
e
=
f
.
speed
(
b
,
c
,
d
);
if
(
f
.
isEmptyObject
(
a
))
return
this
.
each
(
e
.
complete
,[
!
1
]);
a
=
f
.
extend
({},
a
);
return
e
.
queue
===!
1
?
this
.
each
(
g
):
this
.
queue
(
e
.
queue
,
g
)},
stop
:
function
(
a
,
c
,
d
){
typeof
a
!=
"
string
"
&&
(
d
=
c
,
c
=
a
,
a
=
b
),
c
&&
a
!==!
1
&&
this
.
queue
(
a
||
"
fx
"
,[]);
return
this
.
each
(
function
(){
function
h
(
a
,
b
,
c
){
var
e
=
b
[
c
];
f
.
removeData
(
a
,
c
,
!
0
),
e
.
stop
(
d
)}
var
b
,
c
=!
1
,
e
=
f
.
timers
,
g
=
f
.
_data
(
this
);
d
||
f
.
_unmark
(
!
0
,
this
);
if
(
a
==
null
)
for
(
b
in
g
)
g
[
b
]
&&
g
[
b
].
stop
&&
b
.
indexOf
(
"
.run
"
)
===
b
.
length
-
4
&&
h
(
this
,
g
,
b
);
else
g
[
b
=
a
+
"
.run
"
]
&&
g
[
b
].
stop
&&
h
(
this
,
g
,
b
);
for
(
b
=
e
.
length
;
b
--
;)
e
[
b
].
elem
===
this
&&
(
a
==
null
||
e
[
b
].
queue
===
a
)
&&
(
d
?
e
[
b
](
!
0
):
e
[
b
].
saveState
(),
c
=!
0
,
e
.
splice
(
b
,
1
));(
!
d
||!
c
)
&&
f
.
dequeue
(
this
,
a
)})}}),
f
.
each
({
slideDown
:
cu
(
"
show
"
,
1
),
slideUp
:
cu
(
"
hide
"
,
1
),
slideToggle
:
cu
(
"
toggle
"
,
1
),
fadeIn
:{
opacity
:
"
show
"
},
fadeOut
:{
opacity
:
"
hide
"
},
fadeToggle
:{
opacity
:
"
toggle
"
}},
function
(
a
,
b
){
f
.
fn
[
a
]
=
function
(
a
,
c
,
d
){
return
this
.
animate
(
b
,
a
,
c
,
d
)}}),
f
.
extend
({
speed
:
function
(
a
,
b
,
c
){
var
d
=
a
&&
typeof
a
==
"
object
"
?
f
.
extend
({},
a
):{
complete
:
c
||!
c
&&
b
||
f
.
isFunction
(
a
)
&&
a
,
duration
:
a
,
easing
:
c
&&
b
||
b
&&!
f
.
isFunction
(
b
)
&&
b
};
d
.
duration
=
f
.
fx
.
off
?
0
:
typeof
d
.
duration
==
"
number
"
?
d
.
duration
:
d
.
duration
in
f
.
fx
.
speeds
?
f
.
fx
.
speeds
[
d
.
duration
]:
f
.
fx
.
speeds
.
_default
;
if
(
d
.
queue
==
null
||
d
.
queue
===!
0
)
d
.
queue
=
"
fx
"
;
d
.
old
=
d
.
complete
,
d
.
complete
=
function
(
a
){
f
.
isFunction
(
d
.
old
)
&&
d
.
old
.
call
(
this
),
d
.
queue
?
f
.
dequeue
(
this
,
d
.
queue
):
a
!==!
1
&&
f
.
_unmark
(
this
)};
return
d
},
easing
:{
linear
:
function
(
a
,
b
,
c
,
d
){
return
c
+
d
*
a
},
swing
:
function
(
a
,
b
,
c
,
d
){
return
(
-
Math
.
cos
(
a
*
Math
.
PI
)
/
2
+
.
5
)
*
d
+
c
}},
timers
:[],
fx
:
function
(
a
,
b
,
c
){
this
.
options
=
b
,
this
.
elem
=
a
,
this
.
prop
=
c
,
b
.
orig
=
b
.
orig
||
{}}}),
f
.
fx
.
prototype
=
{
update
:
function
(){
this
.
options
.
step
&&
this
.
options
.
step
.
call
(
this
.
elem
,
this
.
now
,
this
),(
f
.
fx
.
step
[
this
.
prop
]
||
f
.
fx
.
step
.
_default
)(
this
)},
cur
:
function
(){
if
(
this
.
elem
[
this
.
prop
]
!=
null
&&
(
!
this
.
elem
.
style
||
this
.
elem
.
style
[
this
.
prop
]
==
null
))
return
this
.
elem
[
this
.
prop
];
var
a
,
b
=
f
.
css
(
this
.
elem
,
this
.
prop
);
return
isNaN
(
a
=
parseFloat
(
b
))?
!
b
||
b
===
"
auto
"
?
0
:
b
:
a
},
custom
:
function
(
a
,
c
,
d
){
function
h
(
a
){
return
e
.
step
(
a
)}
var
e
=
this
,
g
=
f
.
fx
;
this
.
startTime
=
cr
||
cs
(),
this
.
end
=
c
,
this
.
now
=
this
.
start
=
a
,
this
.
pos
=
this
.
state
=
0
,
this
.
unit
=
d
||
this
.
unit
||
(
f
.
cssNumber
[
this
.
prop
]?
""
:
"
px
"
),
h
.
queue
=
this
.
options
.
queue
,
h
.
elem
=
this
.
elem
,
h
.
saveState
=
function
(){
e
.
options
.
hide
&&
f
.
_data
(
e
.
elem
,
"
fxshow
"
+
e
.
prop
)
===
b
&&
f
.
_data
(
e
.
elem
,
"
fxshow
"
+
e
.
prop
,
e
.
start
)},
h
()
&&
f
.
timers
.
push
(
h
)
&&!
cp
&&
(
cp
=
setInterval
(
g
.
tick
,
g
.
interval
))},
show
:
function
(){
var
a
=
f
.
_data
(
this
.
elem
,
"
fxshow
"
+
this
.
prop
);
this
.
options
.
orig
[
this
.
prop
]
=
a
||
f
.
style
(
this
.
elem
,
this
.
prop
),
this
.
options
.
show
=!
0
,
a
!==
b
?
this
.
custom
(
this
.
cur
(),
a
):
this
.
custom
(
this
.
prop
===
"
width
"
||
this
.
prop
===
"
height
"
?
1
:
0
,
this
.
cur
()),
f
(
this
.
elem
).
show
()},
hide
:
function
(){
this
.
options
.
orig
[
this
.
prop
]
=
f
.
_data
(
this
.
elem
,
"
fxshow
"
+
this
.
prop
)
||
f
.
style
(
this
.
elem
,
this
.
prop
),
this
.
options
.
hide
=!
0
,
this
.
custom
(
this
.
cur
(),
0
)},
step
:
function
(
a
){
var
b
,
c
,
d
,
e
=
cr
||
cs
(),
g
=!
0
,
h
=
this
.
elem
,
i
=
this
.
options
;
if
(
a
||
e
>=
i
.
duration
+
this
.
startTime
){
this
.
now
=
this
.
end
,
this
.
pos
=
this
.
state
=
1
,
this
.
update
(),
i
.
animatedProperties
[
this
.
prop
]
=!
0
;
for
(
b
in
i
.
animatedProperties
)
i
.
animatedProperties
[
b
]
!==!
0
&&
(
g
=!
1
);
if
(
g
){
i
.
overflow
!=
null
&&!
f
.
support
.
shrinkWrapBlocks
&&
f
.
each
([
""
,
"
X
"
,
"
Y
"
],
function
(
a
,
b
){
h
.
style
[
"
overflow
"
+
b
]
=
i
.
overflow
[
a
]}),
i
.
hide
&&
f
(
h
).
hide
();
if
(
i
.
hide
||
i
.
show
)
for
(
b
in
i
.
animatedProperties
)
f
.
style
(
h
,
b
,
i
.
orig
[
b
]),
f
.
removeData
(
h
,
"
fxshow
"
+
b
,
!
0
),
f
.
removeData
(
h
,
"
toggle
"
+
b
,
!
0
);
d
=
i
.
complete
,
d
&&
(
i
.
complete
=!
1
,
d
.
call
(
h
))}
return
!
1
}
i
.
duration
==
Infinity
?
this
.
now
=
e
:(
c
=
e
-
this
.
startTime
,
this
.
state
=
c
/
i
.
duration
,
this
.
pos
=
f
.
easing
[
i
.
animatedProperties
[
this
.
prop
]](
this
.
state
,
c
,
0
,
1
,
i
.
duration
),
this
.
now
=
this
.
start
+
(
this
.
end
-
this
.
start
)
*
this
.
pos
),
this
.
update
();
return
!
0
}},
f
.
extend
(
f
.
fx
,{
tick
:
function
(){
var
a
,
b
=
f
.
timers
,
c
=
0
;
for
(;
c
<
b
.
length
;
c
++
)
a
=
b
[
c
],
!
a
()
&&
b
[
c
]
===
a
&&
b
.
splice
(
c
--
,
1
);
b
.
length
||
f
.
fx
.
stop
()},
interval
:
13
,
stop
:
function
(){
clearInterval
(
cp
),
cp
=
null
},
speeds
:{
slow
:
600
,
fast
:
200
,
_default
:
400
},
step
:{
opacity
:
function
(
a
){
f
.
style
(
a
.
elem
,
"
opacity
"
,
a
.
now
)},
_default
:
function
(
a
){
a
.
elem
.
style
&&
a
.
elem
.
style
[
a
.
prop
]
!=
null
?
a
.
elem
.
style
[
a
.
prop
]
=
a
.
now
+
a
.
unit
:
a
.
elem
[
a
.
prop
]
=
a
.
now
}}}),
f
.
each
([
"
width
"
,
"
height
"
],
function
(
a
,
b
){
f
.
fx
.
step
[
b
]
=
function
(
a
){
f
.
style
(
a
.
elem
,
b
,
Math
.
max
(
0
,
a
.
now
)
+
a
.
unit
)}}),
f
.
expr
&&
f
.
expr
.
filters
&&
(
f
.
expr
.
filters
.
animated
=
function
(
a
){
return
f
.
grep
(
f
.
timers
,
function
(
b
){
return
a
===
b
.
elem
}).
length
});
var
cw
=
/^t
(?:
able|d|h
)
$/i
,
cx
=
/^
(?:
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
=
cy
(
e
),
j
=
g
.
clientTop
||
h
.
clientTop
||
0
,
k
=
g
.
clientLeft
||
h
.
clientLeft
||
0
,
l
=
i
.
pageYOffset
||
f
.
support
.
boxModel
&&
g
.
scrollTop
||
h
.
scrollTop
,
m
=
i
.
pageXOffset
||
f
.
support
.
boxModel
&&
g
.
scrollLeft
||
h
.
scrollLeft
,
n
=
c
.
top
+
l
-
j
,
o
=
c
.
left
+
m
-
k
;
return
{
top
:
n
,
left
:
o
}}:
f
.
fn
.
offset
=
function
(
a
){
var
b
=
this
[
0
];
if
(
a
)
return
this
.
each
(
function
(
b
){
f
.
offset
.
setOffset
(
this
,
a
,
b
)});
if
(
!
b
||!
b
.
ownerDocument
)
return
null
;
if
(
b
===
b
.
ownerDocument
.
body
)
return
f
.
offset
.
bodyOffset
(
b
);
var
c
,
d
=
b
.
offsetParent
,
e
=
b
,
g
=
b
.
ownerDocument
,
h
=
g
.
documentElement
,
i
=
g
.
body
,
j
=
g
.
defaultView
,
k
=
j
?
j
.
getComputedStyle
(
b
,
null
):
b
.
currentStyle
,
l
=
b
.
offsetTop
,
m
=
b
.
offsetLeft
;
while
((
b
=
b
.
parentNode
)
&&
b
!==
i
&&
b
!==
h
){
if
(
f
.
support
.
fixedPosition
&&
k
.
position
===
"
fixed
"
)
break
;
c
=
j
?
j
.
getComputedStyle
(
b
,
null
):
b
.
currentStyle
,
l
-=
b
.
scrollTop
,
m
-=
b
.
scrollLeft
,
b
===
d
&&
(
l
+=
b
.
offsetTop
,
m
+=
b
.
offsetLeft
,
f
.
support
.
doesNotAddBorder
&&
(
!
f
.
support
.
doesAddBorderForTableAndCells
||!
cw
.
test
(
b
.
nodeName
))
&&
(
l
+=
parseFloat
(
c
.
borderTopWidth
)
||
0
,
m
+=
parseFloat
(
c
.
borderLeftWidth
)
||
0
),
e
=
d
,
d
=
b
.
offsetParent
),
f
.
support
.
subtractsBorderForOverflowNotVisible
&&
c
.
overflow
!==
"
visible
"
&&
(
l
+=
parseFloat
(
c
.
borderTopWidth
)
||
0
,
m
+=
parseFloat
(
c
.
borderLeftWidth
)
||
0
),
k
=
c
}
if
(
k
.
position
===
"
relative
"
||
k
.
position
===
"
static
"
)
l
+=
i
.
offsetTop
,
m
+=
i
.
offsetLeft
;
f
.
support
.
fixedPosition
&&
k
.
position
===
"
fixed
"
&&
(
l
+=
Math
.
max
(
h
.
scrollTop
,
i
.
scrollTop
),
m
+=
Math
.
max
(
h
.
scrollLeft
,
i
.
scrollLeft
));
return
{
top
:
l
,
left
:
m
}},
f
.
offset
=
{
bodyOffset
:
function
(
a
){
var
b
=
a
.
offsetTop
,
c
=
a
.
offsetLeft
;
f
.
support
.
doesNotIncludeMarginInBodyOffset
&&
(
b
+=
parseFloat
(
f
.
css
(
a
,
"
marginTop
"
))
||
0
,
c
+=
parseFloat
(
f
.
css
(
a
,
"
marginLeft
"
))
||
0
);
return
{
top
:
b
,
left
:
c
}},
setOffset
:
function
(
a
,
b
,
c
){
var
d
=
f
.
css
(
a
,
"
position
"
);
d
===
"
static
"
&&
(
a
.
style
.
position
=
"
relative
"
);
var
e
=
f
(
a
),
g
=
e
.
offset
(),
h
=
f
.
css
(
a
,
"
top
"
),
i
=
f
.
css
(
a
,
"
left
"
),
j
=
(
d
===
"
absolute
"
||
d
===
"
fixed
"
)
&&
f
.
inArray
(
"
auto
"
,[
h
,
i
])
>-
1
,
k
=
{},
l
=
{},
m
,
n
;
j
?(
l
=
e
.
position
(),
m
=
l
.
top
,
n
=
l
.
left
):(
m
=
parseFloat
(
h
)
||
0
,
n
=
parseFloat
(
i
)
||
0
),
f
.
isFunction
(
b
)
&&
(
b
=
b
.
call
(
a
,
c
,
g
)),
b
.
top
!=
null
&&
(
k
.
top
=
b
.
top
-
g
.
top
+
m
),
b
.
left
!=
null
&&
(
k
.
left
=
b
.
left
-
g
.
left
+
n
),
"
using
"
in
b
?
b
.
using
.
call
(
a
,
k
):
e
.
css
(
k
)}},
f
.
fn
.
extend
({
position
:
function
(){
if
(
!
this
[
0
])
return
null
;
var
a
=
this
[
0
],
b
=
this
.
offsetParent
(),
c
=
this
.
offset
(),
d
=
cx
.
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
&&!
cx
.
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
=
cy
(
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
=
cy
(
this
),
g
?
g
.
scrollTo
(
a
?
f
(
g
).
scrollLeft
():
c
,
a
?
c
:
f
(
g
).
scrollTop
()):
this
[
d
]
=
c
})}}),
f
.
each
([
"
Height
"
,
"
Width
"
],
function
(
a
,
c
){
var
d
=
c
.
toLowerCase
();
f
.
fn
[
"
inner
"
+
c
]
=
function
(){
var
a
=
this
[
0
];
return
a
?
a
.
style
?
parseFloat
(
f
.
css
(
a
,
d
,
"
padding
"
)):
this
[
d
]():
null
},
f
.
fn
[
"
outer
"
+
c
]
=
function
(
a
){
var
b
=
this
[
0
];
return
b
?
b
.
style
?
parseFloat
(
f
.
css
(
b
,
d
,
a
?
"
margin
"
:
"
border
"
)):
this
[
d
]():
null
},
f
.
fn
[
d
]
=
function
(
a
){
var
e
=
this
[
0
];
if
(
!
e
)
return
a
==
null
?
null
:
this
;
if
(
f
.
isFunction
(
a
))
return
this
.
each
(
function
(
b
){
var
c
=
f
(
this
);
c
[
d
](
a
.
call
(
this
,
b
,
c
[
d
]()))});
if
(
f
.
isWindow
(
e
)){
var
g
=
e
.
document
.
documentElement
[
"
client
"
+
c
],
h
=
e
.
document
.
body
;
return
e
.
document
.
compatMode
===
"
CSS1Compat
"
&&
g
||
h
&&
h
[
"
client
"
+
c
]
||
g
}
if
(
e
.
nodeType
===
9
)
return
Math
.
max
(
e
.
documentElement
[
"
client
"
+
c
],
e
.
body
[
"
scroll
"
+
c
],
e
.
documentElement
[
"
scroll
"
+
c
],
e
.
body
[
"
offset
"
+
c
],
e
.
documentElement
[
"
offset
"
+
c
]);
if
(
a
===
b
){
var
i
=
f
.
css
(
e
,
d
),
j
=
parseFloat
(
i
);
return
f
.
isNumeric
(
j
)?
j
:
i
}
return
this
.
css
(
d
,
typeof
a
==
"
string
"
?
a
:
a
+
"
px
"
)}}),
a
.
jQuery
=
a
.
$
=
f
,
typeof
define
==
"
function
"
&&
define
.
amd
&&
define
.
amd
.
jQuery
&&
define
(
"
jquery
"
,[],
function
(){
return
f
})})(
window
);
\ No newline at end of file
labs/architecture-examples/dijon/js/libs/json2.js
deleted
100755 → 0
View file @
55483ef9
/*
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
labs/architecture-examples/dijon/js/models/TodosModel.js
View file @
7d7de006
...
...
@@ -3,81 +3,86 @@
* Date: 03/02/12
* Time: 14:39
*/
(
function
(
ns
){
ns
.
models
.
TodosModel
=
function
(){
var
_list
=
[];
return
{
system
:
undefined
,
//inject,
getTodo
:
function
(
id
){
return
_list
[
this
.
getIndex
(
id
)
];
},
getIndex
:
function
(
id
){
var
list
=
_list
;
for
(
var
i
in
_list
){
(
function
(
ns
)
{
ns
.
models
.
TodosModel
=
function
()
{
var
_list
=
[];
return
{
system
:
undefined
,
//inject,
getTodo
:
function
(
id
)
{
return
_list
[
this
.
getIndex
(
id
)
];
},
getIndex
:
function
(
id
)
{
var
list
=
_list
,
todo
;
for
(
var
i
in
_list
)
{
var
todo
=
_list
[
i
];
if
(
todo
.
id
==
id
)
{
return
i
;
}
}
todo
=
_list
[
i
];
if
(
todo
.
id
==
id
)
{
return
i
;
}
}
return
-
1
;
},
notifyOfListUpdate
:
function
(){
var
list
=
this
.
getList
();
this
.
system
.
notify
(
'
TodosModel:todosListUpdated
'
,
list
);
},
setList
:
function
(
list
){
_list
=
list
||
[];
this
.
system
.
notify
(
'
TodosModel:todosListUpdated
'
,
list
);
},
getList
:
function
(){
return
_list
;
},
add
:
function
(
vo
){
_list
.
push
(
vo
);
this
.
notifyOfListUpdate
();
},
toggleDone
:
function
(
id
){
var
todo
=
this
.
getTodo
(
id
);
todo
.
done
=
!
todo
.
done
;
this
.
notifyOfListUpdate
();
},
setTitle
:
function
(
id
,
title
){
this
.
getTodo
(
id
).
title
=
title
;
this
.
notifyOfListUpdate
();
},
remove
:
function
(
id
){
_list
.
splice
(
this
.
getIndex
(
id
),
1
);
this
.
notifyOfListUpdate
();
},
setDoneForAll
:
function
(
done
){
for
(
var
i
in
_list
){
_list
[
i
].
done
=
done
;
}
this
.
notifyOfListUpdate
();
},
removeAllDone
:
function
(){
for
(
var
i
=
_list
.
length
-
1
,
n
=
0
;
i
>=
n
;
i
--
){
if
(
_list
[
i
].
done
){
_list
.
splice
(
i
,
1
);
}
}
this
.
notifyOfListUpdate
();
},
getNumTotal
:
function
(){
return
_list
.
length
;
},
getNumActive
:
function
(){
var
count
=
0
;
for
(
var
i
in
_list
){
if
(
!
_list
[
i
].
done
){
count
++
;
}
}
return
count
;
}
return
-
1
;
},
notifyOfListUpdate
:
function
()
{
var
list
=
this
.
getList
();
this
.
system
.
notify
(
'
TodosModel:todosListUpdated
'
,
list
);
},
setList
:
function
(
list
)
{
_list
=
list
||
[];
this
.
system
.
notify
(
'
TodosModel:todosListUpdated
'
,
list
);
},
getList
:
function
()
{
return
_list
;
},
add
:
function
(
vo
)
{
_list
.
push
(
vo
);
this
.
notifyOfListUpdate
();
},
toggleDone
:
function
(
id
)
{
var
todo
=
this
.
getTodo
(
id
);
todo
.
completed
=
!
todo
.
completed
;
this
.
notifyOfListUpdate
();
},
setTitle
:
function
(
id
,
title
)
{
this
.
getTodo
(
id
).
title
=
title
;
this
.
notifyOfListUpdate
();
},
remove
:
function
(
id
)
{
_list
.
splice
(
this
.
getIndex
(
id
),
1
);
this
.
notifyOfListUpdate
();
},
setDoneForAll
:
function
(
completed
)
{
var
i
;
for
(
i
in
_list
)
{
_list
[
i
].
completed
=
completed
;
}
this
.
notifyOfListUpdate
();
},
removeAllDone
:
function
()
{
var
i
,
n
=
0
;
for
(
i
=
_list
.
length
-
1
;
i
>=
n
;
i
--
)
{
if
(
_list
[
i
].
completed
)
{
_list
.
splice
(
i
,
1
);
}
}
this
.
notifyOfListUpdate
();
},
getNumTotal
:
function
()
{
return
_list
.
length
;
},
getNumActive
:
function
()
{
var
count
=
0
,
i
;
for
(
i
in
_list
)
{
if
(
!
_list
[
i
].
completed
)
{
count
++
;
}
}
return
count
;
}
}
}
}
}
}(
dijondemo
)
);
\ No newline at end of file
labs/architecture-examples/dijon/js/services/LocalStorageService.js
View file @
7d7de006
...
...
@@ -3,18 +3,18 @@
* Date: 03/02/12
* Time: 13:27
*/
(
function
(
ns
)
{
dijondemo
.
services
.
LocalStorageService
=
function
()
{
return
{
system
:
undefined
,
//inject
store
:
function
(
data
)
{
return
localStorage
.
setItem
(
'
todo-jquery
'
,
JSON
.
stringify
(
data
)
);
},
retrieve
:
function
()
{
var
data
=
localStorage
.
getItem
(
'
todo-jquery
'
);
var
output
=
(
data
&&
JSON
.
parse
(
data
)
)
||
[];
this
.
system
.
notify
(
'
StorageService:retrieveCompleted
'
,
output
);
}
}
}
(
function
(
ns
)
{
dijondemo
.
services
.
LocalStorageService
=
function
()
{
return
{
system
:
undefined
,
//inject
store
:
function
(
data
)
{
return
localStorage
.
setItem
(
'
todos-dijon
'
,
JSON
.
stringify
(
data
)
);
},
retrieve
:
function
()
{
var
data
=
localStorage
.
getItem
(
'
todos-dijon
'
),
output
=
(
data
&&
JSON
.
parse
(
data
)
)
||
[];
this
.
system
.
notify
(
'
StorageService:retrieveCompleted
'
,
output
);
}
}
}
}(
dijondemo
)
)
\ No newline at end of file
labs/architecture-examples/dijon/js/utils/Utils.js
View file @
7d7de006
...
...
@@ -3,12 +3,15 @@
* Date: 03/02/12
* Time: 14:34
*/
(
function
(
ns
){
ns
.
utils
.
Utils
=
{
// https://gist.github.com/1308368
uuid
:
function
(
a
,
b
){
for
(
b
=
a
=
''
;
a
++<
36
;
b
+=
a
*
51
&
52
?(
a
^
15
?
8
^
Math
.
random
()
*
(
a
^
20
?
16
:
4
):
4
).
toString
(
16
):
'
_
'
);
return
b
},
pluralize
:
function
(
count
,
word
)
{
return
count
===
1
?
word
:
word
+
'
s
'
;
}
};
(
function
(
ns
)
{
ns
.
utils
.
Utils
=
{
// https://gist.github.com/1308368
uuid
:
function
(
a
,
b
)
{
for
(
b
=
a
=
''
;
a
++
<
36
;
b
+=
a
*
51
&
52
?
(
a
^
15
?
8
^
Math
.
random
()
*
(
a
^
20
?
16
:
4
)
:
4
).
toString
(
16
)
:
'
_
'
);
return
b
},
pluralize
:
function
(
count
,
word
)
{
return
count
===
1
?
word
:
word
+
'
s
'
;
}
};
}(
dijondemo
)
);
\ No newline at end of file
labs/architecture-examples/dijon/js/views/FooterView.js
View file @
7d7de006
...
...
@@ -3,37 +3,40 @@
* Date: 03/02/12
* Time: 14:20
*/
(
function
(
ns
){
ns
.
views
.
FooterView
=
function
(){
var
$count
=
$
(
'
#todo-count
'
);
var
$clearBtn
=
$
(
'
#clear-completed
'
);
var
$footer
=
$
(
'
#todoapp
'
).
find
(
'
footer
'
);
return
{
system
:
undefined
,
//inject
pluralizeUtil
:
undefined
,
//inject,
setup
:
function
(){
var
self
=
this
;
$clearBtn
.
on
(
'
click
'
,
function
()
{
self
.
system
.
notify
(
'
TodoListView:removeAllDoneTodos
'
);
}
);
(
function
(
ns
)
{
ns
.
views
.
FooterView
=
function
()
{
var
$count
=
$
(
'
#todo-count
'
),
$clearBtn
=
$
(
'
#clear-completed
'
),
$footer
=
$
(
'
#todoapp
'
).
find
(
'
footer
'
);
},
render
:
function
(){
this
.
system
.
notify
(
'
FooterView:retrieveTodoCounts
'
);
},
updateCounts
:
function
(
numTodosTotal
,
numTodosActive
){
var
numTodosCompleted
=
numTodosTotal
-
numTodosActive
;
var
countTitle
=
'
<b>
'
+
numTodosActive
+
'
</b>
'
+
this
.
pluralizeUtil
.
pluralize
(
numTodosActive
,
'
item
'
)
+
'
left
'
;
var
clearTitle
=
'
Clear
'
+
numTodosCompleted
+
'
completed
'
+
this
.
pluralizeUtil
.
pluralize
(
numTodosCompleted
,
'
item
'
);
// Only show the footer when there are at least one todo.
$footer
.
toggle
(
!!
numTodosTotal
);
return
{
system
:
undefined
,
//inject
pluralizeUtil
:
undefined
,
//inject,
todosModel
:
undefined
,
//inject
setup
:
function
()
{
var
self
=
this
;
$clearBtn
.
on
(
'
click
'
,
function
()
{
self
.
system
.
notify
(
'
TodoListView:removeAllDoneTodos
'
);
}
);
// Active todo count
$count
.
html
(
countTitle
);
},
render
:
function
()
{
// Toggle clear button and update title
$clearBtn
.
text
(
clearTitle
).
toggle
(
!!
numTodosCompleted
);
}
}
}
this
.
renderCounts
(
this
.
todosModel
.
getNumTotal
(),
this
.
todosModel
.
getNumActive
()
);
},
renderCounts
:
function
(
numTodosTotal
,
numTodosActive
)
{
var
numTodosCompleted
=
numTodosTotal
-
numTodosActive
,
countTitle
=
'
<b>
'
+
numTodosActive
+
'
</b>
'
+
this
.
pluralizeUtil
.
pluralize
(
numTodosActive
,
'
item
'
)
+
'
left
'
,
clearTitle
=
'
Clear completed (
'
+
numTodosCompleted
+
'
)
'
;
// Only show the footer when there are at least one todo.
$footer
.
toggle
(
!!
numTodosTotal
);
// Active todo count
$count
.
html
(
countTitle
);
// Toggle clear button and update title
$clearBtn
.
text
(
clearTitle
).
toggle
(
!!
numTodosCompleted
);
}
}
}
}(
dijondemo
)
);
\ No newline at end of file
labs/architecture-examples/dijon/js/views/TodoFormView.js
View file @
7d7de006
...
...
@@ -3,37 +3,33 @@
* Date: 03/02/12
* Time: 13:38
*/
(
function
(
ns
){
ns
.
views
.
TodoFormView
=
function
(){
var
$newTodo
=
$
(
'
#new-todo
'
);
return
{
system
:
undefined
,
//inject
enterKey
:
undefined
,
//inject
uuidUtil
:
undefined
,
//inject
setup
:
function
(){
var
self
=
this
;
$newTodo
.
on
(
'
keyup
'
,
function
(
e
)
{
if
(
e
.
which
!==
self
.
enterKey
)
{
return
;
}
var
$input
=
$
(
this
);
var
inputVal
=
$input
.
val
();
if
(
!
inputVal
)
{
return
;
}
(
function
(
ns
)
{
ns
.
views
.
TodoFormView
=
function
()
{
var
$newTodo
=
$
(
'
#new-todo
'
);
return
{
system
:
undefined
,
//inject
enterKey
:
undefined
,
//inject
uuidUtil
:
undefined
,
//inject
setup
:
function
()
{
var
self
=
this
;
$newTodo
.
on
(
'
keyup
'
,
function
(
e
)
{
var
$input
=
$
(
this
),
val
=
$
.
trim
(
$input
.
val
()
);
if
(
e
.
which
!==
self
.
enterKey
||
!
val
)
{
return
;
}
self
.
system
.
notify
(
'
TodoFormView:addTodo
'
,
{
title
:
val
,
id
:
self
.
uuidUtil
.
uuid
(),
completed
:
false
}
);
self
.
system
.
notify
(
'
TodoFormView:addTodo
'
,
{
title
:
inputVal
,
id
:
self
.
uuidUtil
.
uuid
(),
done
:
false
})
$input
.
val
(
''
);
}
);
},
render
:
function
()
{
$input
.
val
(
''
);
}
);
},
render
:
function
(){
}
}
}
}
}
}
}(
dijondemo
))
\ No newline at end of file
labs/architecture-examples/dijon/js/views/TodoListView.js
View file @
7d7de006
...
...
@@ -3,56 +3,62 @@
* Date: 03/02/12
* Time: 13:39
*/
(
function
(
ns
){
ns
.
views
.
TodoListView
=
function
(){
var
_template
=
Handlebars
.
compile
(
$
(
'
#todo-template
'
).
html
()
);
var
$toggleAll
=
$
(
'
#toggle-all
'
);
var
$todoList
=
$
(
'
#todo-list
'
);
var
$main
=
$
(
'
#main
'
);
var
$count
=
$
(
'
#todo-count
'
);
return
{
system
:
undefined
,
//inject
enterKey
:
undefined
,
setup
:
function
(){
var
self
=
this
;
$todoList
.
on
(
'
change
'
,
'
.toggle
'
,
function
()
{
var
id
=
$
(
this
).
closest
(
'
li
'
).
data
(
'
id
'
);
self
.
system
.
notify
(
'
TodoListView:toggleDoneOfTodo
'
,
id
);
}
);
$todoList
.
on
(
'
dblclick
'
,
'
.view
'
,
function
()
{
$
(
this
)
.
closest
(
'
li
'
)
.
addClass
(
'
editing
'
)
.
find
(
'
.edit
'
)
.
focus
();
}
);
$todoList
.
on
(
'
keypress
'
,
'
.edit
'
,
function
(
e
)
{
if
(
e
.
keyCode
===
self
.
enterKey
)
{
console
.
log
(
e
.
target
);
e
.
target
.
blur
();
}
}
);
$todoList
.
on
(
'
blur
'
,
'
.edit
'
,
function
()
{
var
id
=
$
(
this
).
closest
(
'
li
'
).
data
(
'
id
'
);
var
val
=
$
(
this
).
removeClass
(
'
editing
'
).
val
();
self
.
system
.
notify
(
'
TodoListView:setTitleOfTodo
'
,
id
,
val
);
}
);
$todoList
.
on
(
'
click
'
,
'
.destroy
'
,
function
()
{
var
id
=
$
(
this
).
closest
(
'
li
'
).
data
(
'
id
'
);
self
.
system
.
notify
(
'
TodoListView:removeTodo
'
,
id
);
}
);
(
function
(
ns
)
{
ns
.
views
.
TodoListView
=
function
()
{
var
_template
=
Handlebars
.
compile
(
$
(
'
#todo-template
'
).
html
()
);
var
$toggleAll
=
$
(
'
#toggle-all
'
);
var
$todoList
=
$
(
'
#todo-list
'
);
var
$main
=
$
(
'
#main
'
);
var
$count
=
$
(
'
#todo-count
'
);
return
{
system
:
undefined
,
//inject
enterKey
:
undefined
,
todosModel
:
undefined
,
//inject
setup
:
function
()
{
var
self
=
this
;
$todoList
.
on
(
'
change
'
,
'
.toggle
'
,
function
()
{
var
id
=
$
(
this
).
closest
(
'
li
'
).
data
(
'
id
'
);
self
.
system
.
notify
(
'
TodoListView:toggleDoneOfTodo
'
,
id
);
}
);
$todoList
.
on
(
'
dblclick
'
,
'
.view
'
,
function
()
{
$
(
this
)
.
closest
(
'
li
'
)
.
addClass
(
'
editing
'
)
.
find
(
'
.edit
'
)
.
focus
();
}
);
$todoList
.
on
(
'
keypress
'
,
'
.edit
'
,
function
(
e
)
{
if
(
e
.
keyCode
===
self
.
enterKey
)
{
e
.
target
.
blur
();
}
}
);
$todoList
.
on
(
'
blur
'
,
'
.edit
'
,
function
()
{
var
id
=
$
(
this
).
closest
(
'
li
'
).
data
(
'
id
'
),
val
=
$
.
trim
(
$
(
this
).
removeClass
(
'
editing
'
).
val
()
);
if
(
val
){
self
.
system
.
notify
(
'
TodoListView:setTitleOfTodo
'
,
id
,
val
);
}
else
{
self
.
system
.
notify
(
'
TodoListView:removeTodo
'
,
id
);
}
}
);
$todoList
.
on
(
'
click
'
,
'
.destroy
'
,
function
()
{
var
id
=
$
(
this
).
closest
(
'
li
'
).
data
(
'
id
'
);
self
.
system
.
notify
(
'
TodoListView:removeTodo
'
,
id
);
}
);
$toggleAll
.
on
(
'
change
'
,
function
()
{
var
isChecked
=
!!
$
(
this
).
attr
(
'
checked
'
);
self
.
system
.
notify
(
'
TodoListView:setDoneForAllTodos
'
,
isChecked
);
}
);
$toggleAll
.
on
(
'
change
'
,
function
()
{
var
isChecked
=
!!
$
(
this
).
attr
(
'
checked
'
);
self
.
system
.
notify
(
'
TodoListView:setDoneForAllTodos
'
,
isChecked
);
}
);
},
},
render
:
function
(
todosList
){
$todoList
.
html
(
_template
(
todosList
)
);
$main
.
toggle
(
!!
todosList
.
length
);
}
}
}
render
:
function
()
{
var
todoList
=
this
.
todosModel
.
getList
();
$todoList
.
html
(
_template
(
todoList
)
);
$main
.
toggle
(
!!
todoList
.
length
);
$toggleAll
.
prop
(
'
checked
'
,
!
this
.
todosModel
.
getNumActive
()
);
}
}
}
}(
dijondemo
))
\ No newline at end of file
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