Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
officejs
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
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
officejs
Commits
8b5ed49a
Commit
8b5ed49a
authored
Oct 25, 2013
by
Thibaut Frain
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added bootstrap wysiwyg editor
parent
db32744f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
433 additions
and
0 deletions
+433
-0
src/css/bootstrap-responsive.min.css
src/css/bootstrap-responsive.min.css
+9
-0
src/gadget/bootstrap-wysiwyg.html
src/gadget/bootstrap-wysiwyg.html
+90
-0
src/js/gadget_bootstrap_wysiwyg.js
src/js/gadget_bootstrap_wysiwyg.js
+28
-0
src/lib/bootstrap-wysiwyg.js
src/lib/bootstrap-wysiwyg.js
+200
-0
src/lib/bootstrap.min.js
src/lib/bootstrap.min.js
+6
-0
src/lib/jquery.hotkeys.js
src/lib/jquery.hotkeys.js
+100
-0
No files found.
src/css/bootstrap-responsive.min.css
0 → 100644
View file @
8b5ed49a
/*!
* Bootstrap Responsive v2.3.2
*
* Copyright 2013 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world by @mdo and @fat.
*/
.clearfix
{
*
zoom
:
1
}
.clearfix
:before
,
.clearfix
:after
{
display
:
table
;
line-height
:
0
;
content
:
""
}
.clearfix
:after
{
clear
:
both
}
.hide-text
{
font
:
0
/
0
a
;
color
:
transparent
;
text-shadow
:
none
;
background-color
:
transparent
;
border
:
0
}
.input-block-level
{
display
:
block
;
width
:
100%
;
min-height
:
30px
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
@-ms-viewport
{
width
:
device-width
}
.hidden
{
display
:
none
;
visibility
:
hidden
}
.visible-phone
{
display
:
none
!important
}
.visible-tablet
{
display
:
none
!important
}
.hidden-desktop
{
display
:
none
!important
}
.visible-desktop
{
display
:
inherit
!important
}
@media
(
min-width
:
768px
)
and
(
max-width
:
979px
){
.hidden-desktop
{
display
:
inherit
!important
}
.visible-desktop
{
display
:
none
!important
}
.visible-tablet
{
display
:
inherit
!important
}
.hidden-tablet
{
display
:
none
!important
}}
@media
(
max-width
:
767px
){
.hidden-desktop
{
display
:
inherit
!important
}
.visible-desktop
{
display
:
none
!important
}
.visible-phone
{
display
:
inherit
!important
}
.hidden-phone
{
display
:
none
!important
}}
.visible-print
{
display
:
none
!important
}
@media
print
{
.visible-print
{
display
:
inherit
!important
}
.hidden-print
{
display
:
none
!important
}}
@media
(
min-width
:
1200px
){
.row
{
margin-left
:
-30px
;
*
zoom
:
1
}
.row
:before
,
.row
:after
{
display
:
table
;
line-height
:
0
;
content
:
""
}
.row
:after
{
clear
:
both
}
[
class
*=
"span"
]
{
float
:
left
;
min-height
:
1px
;
margin-left
:
30px
}
.container
,
.navbar-static-top
.container
,
.navbar-fixed-top
.container
,
.navbar-fixed-bottom
.container
{
width
:
1170px
}
.span12
{
width
:
1170px
}
.span11
{
width
:
1070px
}
.span10
{
width
:
970px
}
.span9
{
width
:
870px
}
.span8
{
width
:
770px
}
.span7
{
width
:
670px
}
.span6
{
width
:
570px
}
.span5
{
width
:
470px
}
.span4
{
width
:
370px
}
.span3
{
width
:
270px
}
.span2
{
width
:
170px
}
.span1
{
width
:
70px
}
.offset12
{
margin-left
:
1230px
}
.offset11
{
margin-left
:
1130px
}
.offset10
{
margin-left
:
1030px
}
.offset9
{
margin-left
:
930px
}
.offset8
{
margin-left
:
830px
}
.offset7
{
margin-left
:
730px
}
.offset6
{
margin-left
:
630px
}
.offset5
{
margin-left
:
530px
}
.offset4
{
margin-left
:
430px
}
.offset3
{
margin-left
:
330px
}
.offset2
{
margin-left
:
230px
}
.offset1
{
margin-left
:
130px
}
.row-fluid
{
width
:
100%
;
*
zoom
:
1
}
.row-fluid
:before
,
.row-fluid
:after
{
display
:
table
;
line-height
:
0
;
content
:
""
}
.row-fluid
:after
{
clear
:
both
}
.row-fluid
[
class
*=
"span"
]
{
display
:
block
;
float
:
left
;
width
:
100%
;
min-height
:
30px
;
margin-left
:
2.564102564102564%
;
*
margin-left
:
2.5109110747408616%
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
.row-fluid
[
class
*=
"span"
]
:first-child
{
margin-left
:
0
}
.row-fluid
.controls-row
[
class
*=
"span"
]+[
class
*=
"span"
]
{
margin-left
:
2.564102564102564%
}
.row-fluid
.span12
{
width
:
100%
;
*
width
:
99.94680851063829%
}
.row-fluid
.span11
{
width
:
91.45299145299145%
;
*
width
:
91.39979996362975%
}
.row-fluid
.span10
{
width
:
82.90598290598291%
;
*
width
:
82.8527914166212%
}
.row-fluid
.span9
{
width
:
74.35897435897436%
;
*
width
:
74.30578286961266%
}
.row-fluid
.span8
{
width
:
65.81196581196582%
;
*
width
:
65.75877432260411%
}
.row-fluid
.span7
{
width
:
57.26495726495726%
;
*
width
:
57.21176577559556%
}
.row-fluid
.span6
{
width
:
48.717948717948715%
;
*
width
:
48.664757228587014%
}
.row-fluid
.span5
{
width
:
40.17094017094017%
;
*
width
:
40.11774868157847%
}
.row-fluid
.span4
{
width
:
31.623931623931625%
;
*
width
:
31.570740134569924%
}
.row-fluid
.span3
{
width
:
23.076923076923077%
;
*
width
:
23.023731587561375%
}
.row-fluid
.span2
{
width
:
14.52991452991453%
;
*
width
:
14.476723040552828%
}
.row-fluid
.span1
{
width
:
5.982905982905983%
;
*
width
:
5.929714493544281%
}
.row-fluid
.offset12
{
margin-left
:
105.12820512820512%
;
*
margin-left
:
105.02182214948171%
}
.row-fluid
.offset12
:first-child
{
margin-left
:
102.56410256410257%
;
*
margin-left
:
102.45771958537915%
}
.row-fluid
.offset11
{
margin-left
:
96.58119658119658%
;
*
margin-left
:
96.47481360247316%
}
.row-fluid
.offset11
:first-child
{
margin-left
:
94.01709401709402%
;
*
margin-left
:
93.91071103837061%
}
.row-fluid
.offset10
{
margin-left
:
88.03418803418803%
;
*
margin-left
:
87.92780505546462%
}
.row-fluid
.offset10
:first-child
{
margin-left
:
85.47008547008548%
;
*
margin-left
:
85.36370249136206%
}
.row-fluid
.offset9
{
margin-left
:
79.48717948717949%
;
*
margin-left
:
79.38079650845607%
}
.row-fluid
.offset9
:first-child
{
margin-left
:
76.92307692307693%
;
*
margin-left
:
76.81669394435352%
}
.row-fluid
.offset8
{
margin-left
:
70.94017094017094%
;
*
margin-left
:
70.83378796144753%
}
.row-fluid
.offset8
:first-child
{
margin-left
:
68.37606837606839%
;
*
margin-left
:
68.26968539734497%
}
.row-fluid
.offset7
{
margin-left
:
62.393162393162385%
;
*
margin-left
:
62.28677941443899%
}
.row-fluid
.offset7
:first-child
{
margin-left
:
59.82905982905982%
;
*
margin-left
:
59.72267685033642%
}
.row-fluid
.offset6
{
margin-left
:
53.84615384615384%
;
*
margin-left
:
53.739770867430444%
}
.row-fluid
.offset6
:first-child
{
margin-left
:
51.28205128205128%
;
*
margin-left
:
51.175668303327875%
}
.row-fluid
.offset5
{
margin-left
:
45.299145299145295%
;
*
margin-left
:
45.1927623204219%
}
.row-fluid
.offset5
:first-child
{
margin-left
:
42.73504273504273%
;
*
margin-left
:
42.62865975631933%
}
.row-fluid
.offset4
{
margin-left
:
36.75213675213675%
;
*
margin-left
:
36.645753773413354%
}
.row-fluid
.offset4
:first-child
{
margin-left
:
34.18803418803419%
;
*
margin-left
:
34.081651209310785%
}
.row-fluid
.offset3
{
margin-left
:
28.205128205128204%
;
*
margin-left
:
28.0987452264048%
}
.row-fluid
.offset3
:first-child
{
margin-left
:
25.641025641025642%
;
*
margin-left
:
25.53464266230224%
}
.row-fluid
.offset2
{
margin-left
:
19.65811965811966%
;
*
margin-left
:
19.551736679396257%
}
.row-fluid
.offset2
:first-child
{
margin-left
:
17.094017094017094%
;
*
margin-left
:
16.98763411529369%
}
.row-fluid
.offset1
{
margin-left
:
11.11111111111111%
;
*
margin-left
:
11.004728132387708%
}
.row-fluid
.offset1
:first-child
{
margin-left
:
8.547008547008547%
;
*
margin-left
:
8.440625568285142%
}
input
,
textarea
,
.uneditable-input
{
margin-left
:
0
}
.controls-row
[
class
*=
"span"
]+[
class
*=
"span"
]
{
margin-left
:
30px
}
input
.span12
,
textarea
.span12
,
.uneditable-input.span12
{
width
:
1156px
}
input
.span11
,
textarea
.span11
,
.uneditable-input.span11
{
width
:
1056px
}
input
.span10
,
textarea
.span10
,
.uneditable-input.span10
{
width
:
956px
}
input
.span9
,
textarea
.span9
,
.uneditable-input.span9
{
width
:
856px
}
input
.span8
,
textarea
.span8
,
.uneditable-input.span8
{
width
:
756px
}
input
.span7
,
textarea
.span7
,
.uneditable-input.span7
{
width
:
656px
}
input
.span6
,
textarea
.span6
,
.uneditable-input.span6
{
width
:
556px
}
input
.span5
,
textarea
.span5
,
.uneditable-input.span5
{
width
:
456px
}
input
.span4
,
textarea
.span4
,
.uneditable-input.span4
{
width
:
356px
}
input
.span3
,
textarea
.span3
,
.uneditable-input.span3
{
width
:
256px
}
input
.span2
,
textarea
.span2
,
.uneditable-input.span2
{
width
:
156px
}
input
.span1
,
textarea
.span1
,
.uneditable-input.span1
{
width
:
56px
}
.thumbnails
{
margin-left
:
-30px
}
.thumbnails
>
li
{
margin-left
:
30px
}
.row-fluid
.thumbnails
{
margin-left
:
0
}}
@media
(
min-width
:
768px
)
and
(
max-width
:
979px
){
.row
{
margin-left
:
-20px
;
*
zoom
:
1
}
.row
:before
,
.row
:after
{
display
:
table
;
line-height
:
0
;
content
:
""
}
.row
:after
{
clear
:
both
}
[
class
*=
"span"
]
{
float
:
left
;
min-height
:
1px
;
margin-left
:
20px
}
.container
,
.navbar-static-top
.container
,
.navbar-fixed-top
.container
,
.navbar-fixed-bottom
.container
{
width
:
724px
}
.span12
{
width
:
724px
}
.span11
{
width
:
662px
}
.span10
{
width
:
600px
}
.span9
{
width
:
538px
}
.span8
{
width
:
476px
}
.span7
{
width
:
414px
}
.span6
{
width
:
352px
}
.span5
{
width
:
290px
}
.span4
{
width
:
228px
}
.span3
{
width
:
166px
}
.span2
{
width
:
104px
}
.span1
{
width
:
42px
}
.offset12
{
margin-left
:
764px
}
.offset11
{
margin-left
:
702px
}
.offset10
{
margin-left
:
640px
}
.offset9
{
margin-left
:
578px
}
.offset8
{
margin-left
:
516px
}
.offset7
{
margin-left
:
454px
}
.offset6
{
margin-left
:
392px
}
.offset5
{
margin-left
:
330px
}
.offset4
{
margin-left
:
268px
}
.offset3
{
margin-left
:
206px
}
.offset2
{
margin-left
:
144px
}
.offset1
{
margin-left
:
82px
}
.row-fluid
{
width
:
100%
;
*
zoom
:
1
}
.row-fluid
:before
,
.row-fluid
:after
{
display
:
table
;
line-height
:
0
;
content
:
""
}
.row-fluid
:after
{
clear
:
both
}
.row-fluid
[
class
*=
"span"
]
{
display
:
block
;
float
:
left
;
width
:
100%
;
min-height
:
30px
;
margin-left
:
2.7624309392265194%
;
*
margin-left
:
2.709239449864817%
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
.row-fluid
[
class
*=
"span"
]
:first-child
{
margin-left
:
0
}
.row-fluid
.controls-row
[
class
*=
"span"
]+[
class
*=
"span"
]
{
margin-left
:
2.7624309392265194%
}
.row-fluid
.span12
{
width
:
100%
;
*
width
:
99.94680851063829%
}
.row-fluid
.span11
{
width
:
91.43646408839778%
;
*
width
:
91.38327259903608%
}
.row-fluid
.span10
{
width
:
82.87292817679558%
;
*
width
:
82.81973668743387%
}
.row-fluid
.span9
{
width
:
74.30939226519337%
;
*
width
:
74.25620077583166%
}
.row-fluid
.span8
{
width
:
65.74585635359117%
;
*
width
:
65.69266486422946%
}
.row-fluid
.span7
{
width
:
57.18232044198895%
;
*
width
:
57.12912895262725%
}
.row-fluid
.span6
{
width
:
48.61878453038674%
;
*
width
:
48.56559304102504%
}
.row-fluid
.span5
{
width
:
40.05524861878453%
;
*
width
:
40.00205712942283%
}
.row-fluid
.span4
{
width
:
31.491712707182323%
;
*
width
:
31.43852121782062%
}
.row-fluid
.span3
{
width
:
22.92817679558011%
;
*
width
:
22.87498530621841%
}
.row-fluid
.span2
{
width
:
14.3646408839779%
;
*
width
:
14.311449394616199%
}
.row-fluid
.span1
{
width
:
5.801104972375691%
;
*
width
:
5.747913483013988%
}
.row-fluid
.offset12
{
margin-left
:
105.52486187845304%
;
*
margin-left
:
105.41847889972962%
}
.row-fluid
.offset12
:first-child
{
margin-left
:
102.76243093922652%
;
*
margin-left
:
102.6560479605031%
}
.row-fluid
.offset11
{
margin-left
:
96.96132596685082%
;
*
margin-left
:
96.8549429881274%
}
.row-fluid
.offset11
:first-child
{
margin-left
:
94.1988950276243%
;
*
margin-left
:
94.09251204890089%
}
.row-fluid
.offset10
{
margin-left
:
88.39779005524862%
;
*
margin-left
:
88.2914070765252%
}
.row-fluid
.offset10
:first-child
{
margin-left
:
85.6353591160221%
;
*
margin-left
:
85.52897613729868%
}
.row-fluid
.offset9
{
margin-left
:
79.8342541436464%
;
*
margin-left
:
79.72787116492299%
}
.row-fluid
.offset9
:first-child
{
margin-left
:
77.07182320441989%
;
*
margin-left
:
76.96544022569647%
}
.row-fluid
.offset8
{
margin-left
:
71.2707182320442%
;
*
margin-left
:
71.16433525332079%
}
.row-fluid
.offset8
:first-child
{
margin-left
:
68.50828729281768%
;
*
margin-left
:
68.40190431409427%
}
.row-fluid
.offset7
{
margin-left
:
62.70718232044199%
;
*
margin-left
:
62.600799341718584%
}
.row-fluid
.offset7
:first-child
{
margin-left
:
59.94475138121547%
;
*
margin-left
:
59.838368402492065%
}
.row-fluid
.offset6
{
margin-left
:
54.14364640883978%
;
*
margin-left
:
54.037263430116376%
}
.row-fluid
.offset6
:first-child
{
margin-left
:
51.38121546961326%
;
*
margin-left
:
51.27483249088986%
}
.row-fluid
.offset5
{
margin-left
:
45.58011049723757%
;
*
margin-left
:
45.47372751851417%
}
.row-fluid
.offset5
:first-child
{
margin-left
:
42.81767955801105%
;
*
margin-left
:
42.71129657928765%
}
.row-fluid
.offset4
{
margin-left
:
37.01657458563536%
;
*
margin-left
:
36.91019160691196%
}
.row-fluid
.offset4
:first-child
{
margin-left
:
34.25414364640884%
;
*
margin-left
:
34.14776066768544%
}
.row-fluid
.offset3
{
margin-left
:
28.45303867403315%
;
*
margin-left
:
28.346655695309746%
}
.row-fluid
.offset3
:first-child
{
margin-left
:
25.69060773480663%
;
*
margin-left
:
25.584224756083227%
}
.row-fluid
.offset2
{
margin-left
:
19.88950276243094%
;
*
margin-left
:
19.783119783707537%
}
.row-fluid
.offset2
:first-child
{
margin-left
:
17.12707182320442%
;
*
margin-left
:
17.02068884448102%
}
.row-fluid
.offset1
{
margin-left
:
11.32596685082873%
;
*
margin-left
:
11.219583872105325%
}
.row-fluid
.offset1
:first-child
{
margin-left
:
8.56353591160221%
;
*
margin-left
:
8.457152932878806%
}
input
,
textarea
,
.uneditable-input
{
margin-left
:
0
}
.controls-row
[
class
*=
"span"
]+[
class
*=
"span"
]
{
margin-left
:
20px
}
input
.span12
,
textarea
.span12
,
.uneditable-input.span12
{
width
:
710px
}
input
.span11
,
textarea
.span11
,
.uneditable-input.span11
{
width
:
648px
}
input
.span10
,
textarea
.span10
,
.uneditable-input.span10
{
width
:
586px
}
input
.span9
,
textarea
.span9
,
.uneditable-input.span9
{
width
:
524px
}
input
.span8
,
textarea
.span8
,
.uneditable-input.span8
{
width
:
462px
}
input
.span7
,
textarea
.span7
,
.uneditable-input.span7
{
width
:
400px
}
input
.span6
,
textarea
.span6
,
.uneditable-input.span6
{
width
:
338px
}
input
.span5
,
textarea
.span5
,
.uneditable-input.span5
{
width
:
276px
}
input
.span4
,
textarea
.span4
,
.uneditable-input.span4
{
width
:
214px
}
input
.span3
,
textarea
.span3
,
.uneditable-input.span3
{
width
:
152px
}
input
.span2
,
textarea
.span2
,
.uneditable-input.span2
{
width
:
90px
}
input
.span1
,
textarea
.span1
,
.uneditable-input.span1
{
width
:
28px
}}
@media
(
max-width
:
767px
){
body
{
padding-right
:
20px
;
padding-left
:
20px
}
.navbar-fixed-top
,
.navbar-fixed-bottom
,
.navbar-static-top
{
margin-right
:
-20px
;
margin-left
:
-20px
}
.container-fluid
{
padding
:
0
}
.dl-horizontal
dt
{
float
:
none
;
width
:
auto
;
clear
:
none
;
text-align
:
left
}
.dl-horizontal
dd
{
margin-left
:
0
}
.container
{
width
:
auto
}
.row-fluid
{
width
:
100%
}
.row
,
.thumbnails
{
margin-left
:
0
}
.thumbnails
>
li
{
float
:
none
;
margin-left
:
0
}
[
class
*=
"span"
],
.uneditable-input
[
class
*=
"span"
],
.row-fluid
[
class
*=
"span"
]
{
display
:
block
;
float
:
none
;
width
:
100%
;
margin-left
:
0
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
.span12
,
.row-fluid
.span12
{
width
:
100%
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
.row-fluid
[
class
*=
"offset"
]
:first-child
{
margin-left
:
0
}
.input-large
,
.input-xlarge
,
.input-xxlarge
,
input
[
class
*=
"span"
],
select
[
class
*=
"span"
],
textarea
[
class
*=
"span"
],
.uneditable-input
{
display
:
block
;
width
:
100%
;
min-height
:
30px
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
.input-prepend
input
,
.input-append
input
,
.input-prepend
input
[
class
*=
"span"
],
.input-append
input
[
class
*=
"span"
]
{
display
:
inline-block
;
width
:
auto
}
.controls-row
[
class
*=
"span"
]+[
class
*=
"span"
]
{
margin-left
:
0
}
.modal
{
position
:
fixed
;
top
:
20px
;
right
:
20px
;
left
:
20px
;
width
:
auto
;
margin
:
0
}
.modal.fade
{
top
:
-100px
}
.modal.fade.in
{
top
:
20px
}}
@media
(
max-width
:
480px
){
.nav-collapse
{
-webkit-transform
:
translate3d
(
0
,
0
,
0
)}
.page-header
h1
small
{
display
:
block
;
line-height
:
20px
}
input
[
type
=
"checkbox"
],
input
[
type
=
"radio"
]
{
border
:
1px
solid
#ccc
}
.form-horizontal
.control-label
{
float
:
none
;
width
:
auto
;
padding-top
:
0
;
text-align
:
left
}
.form-horizontal
.controls
{
margin-left
:
0
}
.form-horizontal
.control-list
{
padding-top
:
0
}
.form-horizontal
.form-actions
{
padding-right
:
10px
;
padding-left
:
10px
}
.media
.pull-left
,
.media
.pull-right
{
display
:
block
;
float
:
none
;
margin-bottom
:
10px
}
.media-object
{
margin-right
:
0
;
margin-left
:
0
}
.modal
{
top
:
10px
;
right
:
10px
;
left
:
10px
}
.modal-header
.close
{
padding
:
10px
;
margin
:
-10px
}
.carousel-caption
{
position
:
static
}}
@media
(
max-width
:
979px
){
body
{
padding-top
:
0
}
.navbar-fixed-top
,
.navbar-fixed-bottom
{
position
:
static
}
.navbar-fixed-top
{
margin-bottom
:
20px
}
.navbar-fixed-bottom
{
margin-top
:
20px
}
.navbar-fixed-top
.navbar-inner
,
.navbar-fixed-bottom
.navbar-inner
{
padding
:
5px
}
.navbar
.container
{
width
:
auto
;
padding
:
0
}
.navbar
.brand
{
padding-right
:
10px
;
padding-left
:
10px
;
margin
:
0
0
0
-5px
}
.nav-collapse
{
clear
:
both
}
.nav-collapse
.nav
{
float
:
none
;
margin
:
0
0
10px
}
.nav-collapse
.nav
>
li
{
float
:
none
}
.nav-collapse
.nav
>
li
>
a
{
margin-bottom
:
2px
}
.nav-collapse
.nav
>
.divider-vertical
{
display
:
none
}
.nav-collapse
.nav
.nav-header
{
color
:
#777
;
text-shadow
:
none
}
.nav-collapse
.nav
>
li
>
a
,
.nav-collapse
.dropdown-menu
a
{
padding
:
9px
15px
;
font-weight
:
bold
;
color
:
#777
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
}
.nav-collapse
.btn
{
padding
:
4px
10px
4px
;
font-weight
:
normal
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
.nav-collapse
.dropdown-menu
li
+
li
a
{
margin-bottom
:
2px
}
.nav-collapse
.nav
>
li
>
a
:hover
,
.nav-collapse
.nav
>
li
>
a
:focus
,
.nav-collapse
.dropdown-menu
a
:hover
,
.nav-collapse
.dropdown-menu
a
:focus
{
background-color
:
#f2f2f2
}
.navbar-inverse
.nav-collapse
.nav
>
li
>
a
,
.navbar-inverse
.nav-collapse
.dropdown-menu
a
{
color
:
#999
}
.navbar-inverse
.nav-collapse
.nav
>
li
>
a
:hover
,
.navbar-inverse
.nav-collapse
.nav
>
li
>
a
:focus
,
.navbar-inverse
.nav-collapse
.dropdown-menu
a
:hover
,
.navbar-inverse
.nav-collapse
.dropdown-menu
a
:focus
{
background-color
:
#111
}
.nav-collapse.in
.btn-group
{
padding
:
0
;
margin-top
:
5px
}
.nav-collapse
.dropdown-menu
{
position
:
static
;
top
:
auto
;
left
:
auto
;
display
:
none
;
float
:
none
;
max-width
:
none
;
padding
:
0
;
margin
:
0
15px
;
background-color
:
transparent
;
border
:
0
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
;
-webkit-box-shadow
:
none
;
-moz-box-shadow
:
none
;
box-shadow
:
none
}
.nav-collapse
.open
>
.dropdown-menu
{
display
:
block
}
.nav-collapse
.dropdown-menu
:before
,
.nav-collapse
.dropdown-menu
:after
{
display
:
none
}
.nav-collapse
.dropdown-menu
.divider
{
display
:
none
}
.nav-collapse
.nav
>
li
>
.dropdown-menu
:before
,
.nav-collapse
.nav
>
li
>
.dropdown-menu
:after
{
display
:
none
}
.nav-collapse
.navbar-form
,
.nav-collapse
.navbar-search
{
float
:
none
;
padding
:
10px
15px
;
margin
:
10px
0
;
border-top
:
1px
solid
#f2f2f2
;
border-bottom
:
1px
solid
#f2f2f2
;
-webkit-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
);
-moz-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
);
box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
)}
.navbar-inverse
.nav-collapse
.navbar-form
,
.navbar-inverse
.nav-collapse
.navbar-search
{
border-top-color
:
#111
;
border-bottom-color
:
#111
}
.navbar
.nav-collapse
.nav.pull-right
{
float
:
none
;
margin-left
:
0
}
.nav-collapse
,
.nav-collapse.collapse
{
height
:
0
;
overflow
:
hidden
}
.navbar
.btn-navbar
{
display
:
block
}
.navbar-static
.navbar-inner
{
padding-right
:
10px
;
padding-left
:
10px
}}
@media
(
min-width
:
980px
){
.nav-collapse.collapse
{
height
:
auto
!important
;
overflow
:
visible
!important
}}
src/gadget/bootstrap-wysiwyg.html
0 → 100644
View file @
8b5ed49a
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"utf-8"
>
<title>
title
</title>
<link
rel=
"stylesheet"
href=
"http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.no-icons.min.css"
>
<link
rel=
"stylesheet"
href=
"../css/bootstrap-responsive.min.css"
>
<link
rel=
"stylesheet"
href=
"http://netdna.bootstrapcdn.com/font-awesome/3.0.2/css/font-awesome.css"
>
<script
src=
"../lib/jquery.js"
></script>
<script
src=
"../lib/jquery.hotkeys.js"
></script>
<script
src=
"../lib/bootstrap.min.js"
></script>
<script
src=
"../lib/bootstrap-wysiwyg.js"
></script>
<script
src=
"../lib/jschannel.js"
></script>
<script
src=
"../lib/renderjs.js"
></script>
<script
src=
"../js/gadget_bootstrap_wysiwyg.js"
></script>
</head>
<body>
<div
class=
"btn-toolbar"
data-role=
"editor-toolbar"
data-target=
"#editor"
>
<div
class=
"btn-group"
>
<a
class=
"btn dropdown-toggle"
data-toggle=
"dropdown"
title=
"Font"
><i
class=
"icon-font"
></i><b
class=
"caret"
></b></a>
<ul
class=
"dropdown-menu"
>
</ul>
</div>
<div
class=
"btn-group"
>
<a
class=
"btn dropdown-toggle"
data-toggle=
"dropdown"
title=
"Font Size"
><i
class=
"icon-text-height"
></i>
<b
class=
"caret"
></b></a>
<ul
class=
"dropdown-menu"
>
<li><a
data-edit=
"fontSize 5"
><font
size=
"5"
>
Huge
</font></a></li>
<li><a
data-edit=
"fontSize 3"
><font
size=
"3"
>
Normal
</font></a></li>
<li><a
data-edit=
"fontSize 1"
><font
size=
"1"
>
Small
</font></a></li>
</ul>
</div>
<div
class=
"btn-group"
>
<a
class=
"btn"
data-edit=
"bold"
title=
"Bold (Ctrl/Cmd+B)"
><i
class=
"icon-bold"
></i></a>
<a
class=
"btn"
data-edit=
"italic"
title=
"Italic (Ctrl/Cmd+I)"
><i
class=
"icon-italic"
></i></a>
<a
class=
"btn"
data-edit=
"strikethrough"
title=
"Strikethrough"
><i
class=
"icon-strikethrough"
></i></a>
<a
class=
"btn"
data-edit=
"underline"
title=
"Underline (Ctrl/Cmd+U)"
><i
class=
"icon-underline"
></i></a>
</div>
<div
class=
"btn-group"
>
<a
class=
"btn"
data-edit=
"insertunorderedlist"
title=
"Bullet list"
><i
class=
"icon-list-ul"
></i></a>
<a
class=
"btn"
data-edit=
"insertorderedlist"
title=
"Number list"
><i
class=
"icon-list-ol"
></i></a>
<a
class=
"btn"
data-edit=
"outdent"
title=
"Reduce indent (Shift+Tab)"
><i
class=
"icon-indent-left"
></i></a>
<a
class=
"btn"
data-edit=
"indent"
title=
"Indent (Tab)"
><i
class=
"icon-indent-right"
></i></a>
</div>
<div
class=
"btn-group"
>
<a
class=
"btn"
data-edit=
"justifyleft"
title=
"Align Left (Ctrl/Cmd+L)"
><i
class=
"icon-align-left"
></i></a>
<a
class=
"btn"
data-edit=
"justifycenter"
title=
"Center (Ctrl/Cmd+E)"
><i
class=
"icon-align-center"
></i></a>
<a
class=
"btn"
data-edit=
"justifyright"
title=
"Align Right (Ctrl/Cmd+R)"
><i
class=
"icon-align-right"
></i></a>
<a
class=
"btn"
data-edit=
"justifyfull"
title=
"Justify (Ctrl/Cmd+J)"
><i
class=
"icon-align-justify"
></i></a>
</div>
<div
class=
"btn-group"
>
<a
class=
"btn dropdown-toggle"
data-toggle=
"dropdown"
title=
"Hyperlink"
><i
class=
"icon-link"
></i></a>
<div
class=
"dropdown-menu input-append"
>
<input
class=
"span2"
placeholder=
"URL"
type=
"text"
data-edit=
"createLink"
/>
<button
class=
"btn"
type=
"button"
>
Add
</button>
</div>
<a
class=
"btn"
data-edit=
"unlink"
title=
"Remove Hyperlink"
><i
class=
"icon-cut"
></i></a>
</div>
<div
class=
"btn-group"
>
<a
class=
"btn"
title=
"Insert picture (or just drag & drop)"
id=
"pictureBtn"
><i
class=
"icon-picture"
></i></a>
<input
type=
"file"
data-role=
"magic-overlay"
data-target=
"#pictureBtn"
data-edit=
"insertImage"
/>
</div>
<div
class=
"btn-group"
>
<a
class=
"btn"
data-edit=
"undo"
title=
"Undo (Ctrl/Cmd+Z)"
><i
class=
"icon-undo"
></i></a>
<a
class=
"btn"
data-edit=
"redo"
title=
"Redo (Ctrl/Cmd+Y)"
><i
class=
"icon-repeat"
></i></a>
</div>
</div>
<div
id=
"editor"
style=
"
max-height: 600px;
height: 600px;
background-color: white;
border-collapse: separate;
border: 1px solid rgb(204, 204, 204);
padding: 4px;
box-sizing: content-box;
-webkit-box-shadow: rgba(0, 0, 0, 0.0745098) 0px 1px 1px 0px inset;
box-shadow: rgba(0, 0, 0, 0.0745098) 0px 1px 1px 0px inset;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
border-top-left-radius: 3px;
overflow: scroll;
outline: none;"
></div>
</body>
</html>
src/js/gadget_bootstrap_wysiwyg.js
0 → 100644
View file @
8b5ed49a
/*global window, jQuery, rJS*/
"
use strict
"
;
(
function
(
window
,
$
,
rJS
)
{
function
init
()
{
this
.
editor
=
$
(
'
#editor
'
);
this
.
editor
.
wysiwyg
();
}
rJS
(
window
).
declareMethod
(
'
getContent
'
,
function
()
{
return
rJS
(
this
).
editor
.
html
();
})
.
declareMethod
(
'
setContent
'
,
function
(
content
)
{
console
.
log
(
'
setcontent:
'
+
content
);
rJS
(
this
).
editor
.
html
(
content
);
})
.
declareMethod
(
'
clearContent
'
,
function
()
{
rJS
(
this
).
editor
.
html
(
''
);
})
.
ready
(
function
()
{
init
.
apply
(
rJS
(
this
));
});
}(
window
,
jQuery
,
rJS
));
src/lib/bootstrap-wysiwyg.js
0 → 100644
View file @
8b5ed49a
/* http://github.com/mindmup/bootstrap-wysiwyg */
/*global jQuery, $, FileReader*/
/*jslint browser:true*/
(
function
(
$
)
{
'
use strict
'
;
var
readFileIntoDataUrl
=
function
(
fileInfo
)
{
var
loader
=
$
.
Deferred
(),
fReader
=
new
FileReader
();
fReader
.
onload
=
function
(
e
)
{
loader
.
resolve
(
e
.
target
.
result
);
};
fReader
.
onerror
=
loader
.
reject
;
fReader
.
onprogress
=
loader
.
notify
;
fReader
.
readAsDataURL
(
fileInfo
);
return
loader
.
promise
();
};
$
.
fn
.
cleanHtml
=
function
()
{
var
html
=
$
(
this
).
html
();
return
html
&&
html
.
replace
(
/
(
<br>|
\s
|<div><br><
\/
div>|
)
*$/
,
''
);
};
$
.
fn
.
wysiwyg
=
function
(
userOptions
)
{
var
editor
=
this
,
selectedRange
,
options
,
toolbarBtnSelector
,
updateToolbar
=
function
()
{
if
(
options
.
activeToolbarClass
)
{
$
(
options
.
toolbarSelector
).
find
(
toolbarBtnSelector
).
each
(
function
()
{
var
command
=
$
(
this
).
data
(
options
.
commandRole
);
if
(
document
.
queryCommandState
(
command
))
{
$
(
this
).
addClass
(
options
.
activeToolbarClass
);
}
else
{
$
(
this
).
removeClass
(
options
.
activeToolbarClass
);
}
});
}
},
execCommand
=
function
(
commandWithArgs
,
valueArg
)
{
var
commandArr
=
commandWithArgs
.
split
(
'
'
),
command
=
commandArr
.
shift
(),
args
=
commandArr
.
join
(
'
'
)
+
(
valueArg
||
''
);
document
.
execCommand
(
command
,
0
,
args
);
updateToolbar
();
},
bindHotkeys
=
function
(
hotKeys
)
{
$
.
each
(
hotKeys
,
function
(
hotkey
,
command
)
{
editor
.
keydown
(
hotkey
,
function
(
e
)
{
if
(
editor
.
attr
(
'
contenteditable
'
)
&&
editor
.
is
(
'
:visible
'
))
{
e
.
preventDefault
();
e
.
stopPropagation
();
execCommand
(
command
);
}
}).
keyup
(
hotkey
,
function
(
e
)
{
if
(
editor
.
attr
(
'
contenteditable
'
)
&&
editor
.
is
(
'
:visible
'
))
{
e
.
preventDefault
();
e
.
stopPropagation
();
}
});
});
},
getCurrentRange
=
function
()
{
var
sel
=
window
.
getSelection
();
if
(
sel
.
getRangeAt
&&
sel
.
rangeCount
)
{
return
sel
.
getRangeAt
(
0
);
}
},
saveSelection
=
function
()
{
selectedRange
=
getCurrentRange
();
},
restoreSelection
=
function
()
{
var
selection
=
window
.
getSelection
();
if
(
selectedRange
)
{
try
{
selection
.
removeAllRanges
();
}
catch
(
ex
)
{
document
.
body
.
createTextRange
().
select
();
document
.
selection
.
empty
();
}
selection
.
addRange
(
selectedRange
);
}
},
insertFiles
=
function
(
files
)
{
editor
.
focus
();
$
.
each
(
files
,
function
(
idx
,
fileInfo
)
{
if
(
/^image
\/
/
.
test
(
fileInfo
.
type
))
{
$
.
when
(
readFileIntoDataUrl
(
fileInfo
)).
done
(
function
(
dataUrl
)
{
execCommand
(
'
insertimage
'
,
dataUrl
);
}).
fail
(
function
(
e
)
{
options
.
fileUploadError
(
"
file-reader
"
,
e
);
});
}
else
{
options
.
fileUploadError
(
"
unsupported-file-type
"
,
fileInfo
.
type
);
}
});
},
markSelection
=
function
(
input
,
color
)
{
restoreSelection
();
if
(
document
.
queryCommandSupported
(
'
hiliteColor
'
))
{
document
.
execCommand
(
'
hiliteColor
'
,
0
,
color
||
'
transparent
'
);
}
saveSelection
();
input
.
data
(
options
.
selectionMarker
,
color
);
},
bindToolbar
=
function
(
toolbar
,
options
)
{
toolbar
.
find
(
toolbarBtnSelector
).
click
(
function
()
{
restoreSelection
();
editor
.
focus
();
execCommand
(
$
(
this
).
data
(
options
.
commandRole
));
saveSelection
();
});
toolbar
.
find
(
'
[data-toggle=dropdown]
'
).
click
(
restoreSelection
);
toolbar
.
find
(
'
input[type=text][data-
'
+
options
.
commandRole
+
'
]
'
).
on
(
'
webkitspeechchange change
'
,
function
()
{
var
newValue
=
this
.
value
;
/* ugly but prevents fake double-calls due to selection restoration */
this
.
value
=
''
;
restoreSelection
();
if
(
newValue
)
{
editor
.
focus
();
execCommand
(
$
(
this
).
data
(
options
.
commandRole
),
newValue
);
}
saveSelection
();
}).
on
(
'
focus
'
,
function
()
{
var
input
=
$
(
this
);
if
(
!
input
.
data
(
options
.
selectionMarker
))
{
markSelection
(
input
,
options
.
selectionColor
);
input
.
focus
();
}
}).
on
(
'
blur
'
,
function
()
{
var
input
=
$
(
this
);
if
(
input
.
data
(
options
.
selectionMarker
))
{
markSelection
(
input
,
false
);
}
});
toolbar
.
find
(
'
input[type=file][data-
'
+
options
.
commandRole
+
'
]
'
).
change
(
function
()
{
restoreSelection
();
if
(
this
.
type
===
'
file
'
&&
this
.
files
&&
this
.
files
.
length
>
0
)
{
insertFiles
(
this
.
files
);
}
saveSelection
();
this
.
value
=
''
;
});
},
initFileDrops
=
function
()
{
editor
.
on
(
'
dragenter dragover
'
,
false
)
.
on
(
'
drop
'
,
function
(
e
)
{
var
dataTransfer
=
e
.
originalEvent
.
dataTransfer
;
e
.
stopPropagation
();
e
.
preventDefault
();
if
(
dataTransfer
&&
dataTransfer
.
files
&&
dataTransfer
.
files
.
length
>
0
)
{
insertFiles
(
dataTransfer
.
files
);
}
});
};
options
=
$
.
extend
({},
$
.
fn
.
wysiwyg
.
defaults
,
userOptions
);
toolbarBtnSelector
=
'
a[data-
'
+
options
.
commandRole
+
'
],button[data-
'
+
options
.
commandRole
+
'
],input[type=button][data-
'
+
options
.
commandRole
+
'
]
'
;
bindHotkeys
(
options
.
hotKeys
);
if
(
options
.
dragAndDropImages
)
{
initFileDrops
();
}
bindToolbar
(
$
(
options
.
toolbarSelector
),
options
);
editor
.
attr
(
'
contenteditable
'
,
true
)
.
on
(
'
mouseup keyup mouseout
'
,
function
()
{
saveSelection
();
updateToolbar
();
});
$
(
window
).
bind
(
'
touchend
'
,
function
(
e
)
{
var
isInside
=
(
editor
.
is
(
e
.
target
)
||
editor
.
has
(
e
.
target
).
length
>
0
),
currentRange
=
getCurrentRange
(),
clear
=
currentRange
&&
(
currentRange
.
startContainer
===
currentRange
.
endContainer
&&
currentRange
.
startOffset
===
currentRange
.
endOffset
);
if
(
!
clear
||
isInside
)
{
saveSelection
();
updateToolbar
();
}
});
return
this
;
};
$
.
fn
.
wysiwyg
.
defaults
=
{
hotKeys
:
{
'
ctrl+b meta+b
'
:
'
bold
'
,
'
ctrl+i meta+i
'
:
'
italic
'
,
'
ctrl+u meta+u
'
:
'
underline
'
,
'
ctrl+z meta+z
'
:
'
undo
'
,
'
ctrl+y meta+y meta+shift+z
'
:
'
redo
'
,
'
ctrl+l meta+l
'
:
'
justifyleft
'
,
'
ctrl+r meta+r
'
:
'
justifyright
'
,
'
ctrl+e meta+e
'
:
'
justifycenter
'
,
'
ctrl+j meta+j
'
:
'
justifyfull
'
,
'
shift+tab
'
:
'
outdent
'
,
'
tab
'
:
'
indent
'
},
toolbarSelector
:
'
[data-role=editor-toolbar]
'
,
commandRole
:
'
edit
'
,
activeToolbarClass
:
'
btn-info
'
,
selectionMarker
:
'
edit-focus-marker
'
,
selectionColor
:
'
darkgrey
'
,
dragAndDropImages
:
true
,
fileUploadError
:
function
(
reason
,
detail
)
{
console
.
log
(
"
File upload error
"
,
reason
,
detail
);
}
};
}(
window
.
jQuery
));
src/lib/bootstrap.min.js
0 → 100644
View file @
8b5ed49a
/*!
* Bootstrap.js by @fat & @mdo
* Copyright 2013 Twitter, Inc.
* http://www.apache.org/licenses/LICENSE-2.0.txt
*/
!
function
(
e
){
"
use strict
"
;
e
(
function
(){
e
.
support
.
transition
=
function
(){
var
e
=
function
(){
var
e
=
document
.
createElement
(
"
bootstrap
"
),
t
=
{
WebkitTransition
:
"
webkitTransitionEnd
"
,
MozTransition
:
"
transitionend
"
,
OTransition
:
"
oTransitionEnd otransitionend
"
,
transition
:
"
transitionend
"
},
n
;
for
(
n
in
t
)
if
(
e
.
style
[
n
]
!==
undefined
)
return
t
[
n
]}();
return
e
&&
{
end
:
e
}}()})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
'
[data-dismiss="alert"]
'
,
n
=
function
(
n
){
e
(
n
).
on
(
"
click
"
,
t
,
this
.
close
)};
n
.
prototype
.
close
=
function
(
t
){
function
s
(){
i
.
trigger
(
"
closed
"
).
remove
()}
var
n
=
e
(
this
),
r
=
n
.
attr
(
"
data-target
"
),
i
;
r
||
(
r
=
n
.
attr
(
"
href
"
),
r
=
r
&&
r
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
""
)),
i
=
e
(
r
),
t
&&
t
.
preventDefault
(),
i
.
length
||
(
i
=
n
.
hasClass
(
"
alert
"
)?
n
:
n
.
parent
()),
i
.
trigger
(
t
=
e
.
Event
(
"
close
"
));
if
(
t
.
isDefaultPrevented
())
return
;
i
.
removeClass
(
"
in
"
),
e
.
support
.
transition
&&
i
.
hasClass
(
"
fade
"
)?
i
.
on
(
e
.
support
.
transition
.
end
,
s
):
s
()};
var
r
=
e
.
fn
.
alert
;
e
.
fn
.
alert
=
function
(
t
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
alert
"
);
i
||
r
.
data
(
"
alert
"
,
i
=
new
n
(
this
)),
typeof
t
==
"
string
"
&&
i
[
t
].
call
(
r
)})},
e
.
fn
.
alert
.
Constructor
=
n
,
e
.
fn
.
alert
.
noConflict
=
function
(){
return
e
.
fn
.
alert
=
r
,
this
},
e
(
document
).
on
(
"
click.alert.data-api
"
,
t
,
n
.
prototype
.
close
)}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
t
,
n
){
this
.
$element
=
e
(
t
),
this
.
options
=
e
.
extend
({},
e
.
fn
.
button
.
defaults
,
n
)};
t
.
prototype
.
setState
=
function
(
e
){
var
t
=
"
disabled
"
,
n
=
this
.
$element
,
r
=
n
.
data
(),
i
=
n
.
is
(
"
input
"
)?
"
val
"
:
"
html
"
;
e
+=
"
Text
"
,
r
.
resetText
||
n
.
data
(
"
resetText
"
,
n
[
i
]()),
n
[
i
](
r
[
e
]
||
this
.
options
[
e
]),
setTimeout
(
function
(){
e
==
"
loadingText
"
?
n
.
addClass
(
t
).
attr
(
t
,
t
):
n
.
removeClass
(
t
).
removeAttr
(
t
)},
0
)},
t
.
prototype
.
toggle
=
function
(){
var
e
=
this
.
$element
.
closest
(
'
[data-toggle="buttons-radio"]
'
);
e
&&
e
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
this
.
$element
.
toggleClass
(
"
active
"
)};
var
n
=
e
.
fn
.
button
;
e
.
fn
.
button
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
button
"
),
s
=
typeof
n
==
"
object
"
&&
n
;
i
||
r
.
data
(
"
button
"
,
i
=
new
t
(
this
,
s
)),
n
==
"
toggle
"
?
i
.
toggle
():
n
&&
i
.
setState
(
n
)})},
e
.
fn
.
button
.
defaults
=
{
loadingText
:
"
loading...
"
},
e
.
fn
.
button
.
Constructor
=
t
,
e
.
fn
.
button
.
noConflict
=
function
(){
return
e
.
fn
.
button
=
n
,
this
},
e
(
document
).
on
(
"
click.button.data-api
"
,
"
[data-toggle^=button]
"
,
function
(
t
){
var
n
=
e
(
t
.
target
);
n
.
hasClass
(
"
btn
"
)
||
(
n
=
n
.
closest
(
"
.btn
"
)),
n
.
button
(
"
toggle
"
)})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
t
,
n
){
this
.
$element
=
e
(
t
),
this
.
$indicators
=
this
.
$element
.
find
(
"
.carousel-indicators
"
),
this
.
options
=
n
,
this
.
options
.
pause
==
"
hover
"
&&
this
.
$element
.
on
(
"
mouseenter
"
,
e
.
proxy
(
this
.
pause
,
this
)).
on
(
"
mouseleave
"
,
e
.
proxy
(
this
.
cycle
,
this
))};
t
.
prototype
=
{
cycle
:
function
(
t
){
return
t
||
(
this
.
paused
=!
1
),
this
.
interval
&&
clearInterval
(
this
.
interval
),
this
.
options
.
interval
&&!
this
.
paused
&&
(
this
.
interval
=
setInterval
(
e
.
proxy
(
this
.
next
,
this
),
this
.
options
.
interval
)),
this
},
getActiveIndex
:
function
(){
return
this
.
$active
=
this
.
$element
.
find
(
"
.item.active
"
),
this
.
$items
=
this
.
$active
.
parent
().
children
(),
this
.
$items
.
index
(
this
.
$active
)},
to
:
function
(
t
){
var
n
=
this
.
getActiveIndex
(),
r
=
this
;
if
(
t
>
this
.
$items
.
length
-
1
||
t
<
0
)
return
;
return
this
.
sliding
?
this
.
$element
.
one
(
"
slid
"
,
function
(){
r
.
to
(
t
)}):
n
==
t
?
this
.
pause
().
cycle
():
this
.
slide
(
t
>
n
?
"
next
"
:
"
prev
"
,
e
(
this
.
$items
[
t
]))},
pause
:
function
(
t
){
return
t
||
(
this
.
paused
=!
0
),
this
.
$element
.
find
(
"
.next, .prev
"
).
length
&&
e
.
support
.
transition
.
end
&&
(
this
.
$element
.
trigger
(
e
.
support
.
transition
.
end
),
this
.
cycle
(
!
0
)),
clearInterval
(
this
.
interval
),
this
.
interval
=
null
,
this
},
next
:
function
(){
if
(
this
.
sliding
)
return
;
return
this
.
slide
(
"
next
"
)},
prev
:
function
(){
if
(
this
.
sliding
)
return
;
return
this
.
slide
(
"
prev
"
)},
slide
:
function
(
t
,
n
){
var
r
=
this
.
$element
.
find
(
"
.item.active
"
),
i
=
n
||
r
[
t
](),
s
=
this
.
interval
,
o
=
t
==
"
next
"
?
"
left
"
:
"
right
"
,
u
=
t
==
"
next
"
?
"
first
"
:
"
last
"
,
a
=
this
,
f
;
this
.
sliding
=!
0
,
s
&&
this
.
pause
(),
i
=
i
.
length
?
i
:
this
.
$element
.
find
(
"
.item
"
)[
u
](),
f
=
e
.
Event
(
"
slide
"
,{
relatedTarget
:
i
[
0
],
direction
:
o
});
if
(
i
.
hasClass
(
"
active
"
))
return
;
this
.
$indicators
.
length
&&
(
this
.
$indicators
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
this
.
$element
.
one
(
"
slid
"
,
function
(){
var
t
=
e
(
a
.
$indicators
.
children
()[
a
.
getActiveIndex
()]);
t
&&
t
.
addClass
(
"
active
"
)}));
if
(
e
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
slide
"
)){
this
.
$element
.
trigger
(
f
);
if
(
f
.
isDefaultPrevented
())
return
;
i
.
addClass
(
t
),
i
[
0
].
offsetWidth
,
r
.
addClass
(
o
),
i
.
addClass
(
o
),
this
.
$element
.
one
(
e
.
support
.
transition
.
end
,
function
(){
i
.
removeClass
([
t
,
o
].
join
(
"
"
)).
addClass
(
"
active
"
),
r
.
removeClass
([
"
active
"
,
o
].
join
(
"
"
)),
a
.
sliding
=!
1
,
setTimeout
(
function
(){
a
.
$element
.
trigger
(
"
slid
"
)},
0
)})}
else
{
this
.
$element
.
trigger
(
f
);
if
(
f
.
isDefaultPrevented
())
return
;
r
.
removeClass
(
"
active
"
),
i
.
addClass
(
"
active
"
),
this
.
sliding
=!
1
,
this
.
$element
.
trigger
(
"
slid
"
)}
return
s
&&
this
.
cycle
(),
this
}};
var
n
=
e
.
fn
.
carousel
;
e
.
fn
.
carousel
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
carousel
"
),
s
=
e
.
extend
({},
e
.
fn
.
carousel
.
defaults
,
typeof
n
==
"
object
"
&&
n
),
o
=
typeof
n
==
"
string
"
?
n
:
s
.
slide
;
i
||
r
.
data
(
"
carousel
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
number
"
?
i
.
to
(
n
):
o
?
i
[
o
]():
s
.
interval
&&
i
.
pause
().
cycle
()})},
e
.
fn
.
carousel
.
defaults
=
{
interval
:
5
e3
,
pause
:
"
hover
"
},
e
.
fn
.
carousel
.
Constructor
=
t
,
e
.
fn
.
carousel
.
noConflict
=
function
(){
return
e
.
fn
.
carousel
=
n
,
this
},
e
(
document
).
on
(
"
click.carousel.data-api
"
,
"
[data-slide], [data-slide-to]
"
,
function
(
t
){
var
n
=
e
(
this
),
r
,
i
=
e
(
n
.
attr
(
"
data-target
"
)
||
(
r
=
n
.
attr
(
"
href
"
))
&&
r
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
)),
s
=
e
.
extend
({},
i
.
data
(),
n
.
data
()),
o
;
i
.
carousel
(
s
),(
o
=
n
.
attr
(
"
data-slide-to
"
))
&&
i
.
data
(
"
carousel
"
).
pause
().
to
(
o
).
cycle
(),
t
.
preventDefault
()})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
t
,
n
){
this
.
$element
=
e
(
t
),
this
.
options
=
e
.
extend
({},
e
.
fn
.
collapse
.
defaults
,
n
),
this
.
options
.
parent
&&
(
this
.
$parent
=
e
(
this
.
options
.
parent
)),
this
.
options
.
toggle
&&
this
.
toggle
()};
t
.
prototype
=
{
constructor
:
t
,
dimension
:
function
(){
var
e
=
this
.
$element
.
hasClass
(
"
width
"
);
return
e
?
"
width
"
:
"
height
"
},
show
:
function
(){
var
t
,
n
,
r
,
i
;
if
(
this
.
transitioning
||
this
.
$element
.
hasClass
(
"
in
"
))
return
;
t
=
this
.
dimension
(),
n
=
e
.
camelCase
([
"
scroll
"
,
t
].
join
(
"
-
"
)),
r
=
this
.
$parent
&&
this
.
$parent
.
find
(
"
> .accordion-group > .in
"
);
if
(
r
&&
r
.
length
){
i
=
r
.
data
(
"
collapse
"
);
if
(
i
&&
i
.
transitioning
)
return
;
r
.
collapse
(
"
hide
"
),
i
||
r
.
data
(
"
collapse
"
,
null
)}
this
.
$element
[
t
](
0
),
this
.
transition
(
"
addClass
"
,
e
.
Event
(
"
show
"
),
"
shown
"
),
e
.
support
.
transition
&&
this
.
$element
[
t
](
this
.
$element
[
0
][
n
])},
hide
:
function
(){
var
t
;
if
(
this
.
transitioning
||!
this
.
$element
.
hasClass
(
"
in
"
))
return
;
t
=
this
.
dimension
(),
this
.
reset
(
this
.
$element
[
t
]()),
this
.
transition
(
"
removeClass
"
,
e
.
Event
(
"
hide
"
),
"
hidden
"
),
this
.
$element
[
t
](
0
)},
reset
:
function
(
e
){
var
t
=
this
.
dimension
();
return
this
.
$element
.
removeClass
(
"
collapse
"
)[
t
](
e
||
"
auto
"
)[
0
].
offsetWidth
,
this
.
$element
[
e
!==
null
?
"
addClass
"
:
"
removeClass
"
](
"
collapse
"
),
this
},
transition
:
function
(
t
,
n
,
r
){
var
i
=
this
,
s
=
function
(){
n
.
type
==
"
show
"
&&
i
.
reset
(),
i
.
transitioning
=
0
,
i
.
$element
.
trigger
(
r
)};
this
.
$element
.
trigger
(
n
);
if
(
n
.
isDefaultPrevented
())
return
;
this
.
transitioning
=
1
,
this
.
$element
[
t
](
"
in
"
),
e
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
collapse
"
)?
this
.
$element
.
one
(
e
.
support
.
transition
.
end
,
s
):
s
()},
toggle
:
function
(){
this
[
this
.
$element
.
hasClass
(
"
in
"
)?
"
hide
"
:
"
show
"
]()}};
var
n
=
e
.
fn
.
collapse
;
e
.
fn
.
collapse
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
collapse
"
),
s
=
e
.
extend
({},
e
.
fn
.
collapse
.
defaults
,
r
.
data
(),
typeof
n
==
"
object
"
&&
n
);
i
||
r
.
data
(
"
collapse
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
string
"
&&
i
[
n
]()})},
e
.
fn
.
collapse
.
defaults
=
{
toggle
:
!
0
},
e
.
fn
.
collapse
.
Constructor
=
t
,
e
.
fn
.
collapse
.
noConflict
=
function
(){
return
e
.
fn
.
collapse
=
n
,
this
},
e
(
document
).
on
(
"
click.collapse.data-api
"
,
"
[data-toggle=collapse]
"
,
function
(
t
){
var
n
=
e
(
this
),
r
,
i
=
n
.
attr
(
"
data-target
"
)
||
t
.
preventDefault
()
||
(
r
=
n
.
attr
(
"
href
"
))
&&
r
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
),
s
=
e
(
i
).
data
(
"
collapse
"
)?
"
toggle
"
:
n
.
data
();
n
[
e
(
i
).
hasClass
(
"
in
"
)?
"
addClass
"
:
"
removeClass
"
](
"
collapsed
"
),
e
(
i
).
collapse
(
s
)})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
function
r
(){
e
(
"
.dropdown-backdrop
"
).
remove
(),
e
(
t
).
each
(
function
(){
i
(
e
(
this
)).
removeClass
(
"
open
"
)})}
function
i
(
t
){
var
n
=
t
.
attr
(
"
data-target
"
),
r
;
n
||
(
n
=
t
.
attr
(
"
href
"
),
n
=
n
&&
/#/
.
test
(
n
)
&&
n
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
""
)),
r
=
n
&&
e
(
n
);
if
(
!
r
||!
r
.
length
)
r
=
t
.
parent
();
return
r
}
var
t
=
"
[data-toggle=dropdown]
"
,
n
=
function
(
t
){
var
n
=
e
(
t
).
on
(
"
click.dropdown.data-api
"
,
this
.
toggle
);
e
(
"
html
"
).
on
(
"
click.dropdown.data-api
"
,
function
(){
n
.
parent
().
removeClass
(
"
open
"
)})};
n
.
prototype
=
{
constructor
:
n
,
toggle
:
function
(
t
){
var
n
=
e
(
this
),
s
,
o
;
if
(
n
.
is
(
"
.disabled, :disabled
"
))
return
;
return
s
=
i
(
n
),
o
=
s
.
hasClass
(
"
open
"
),
r
(),
o
||
(
"
ontouchstart
"
in
document
.
documentElement
&&
e
(
'
<div class="dropdown-backdrop"/>
'
).
insertBefore
(
e
(
this
)).
on
(
"
click
"
,
r
),
s
.
toggleClass
(
"
open
"
)),
n
.
focus
(),
!
1
},
keydown
:
function
(
n
){
var
r
,
s
,
o
,
u
,
a
,
f
;
if
(
!
/
(
38|40|27
)
/
.
test
(
n
.
keyCode
))
return
;
r
=
e
(
this
),
n
.
preventDefault
(),
n
.
stopPropagation
();
if
(
r
.
is
(
"
.disabled, :disabled
"
))
return
;
u
=
i
(
r
),
a
=
u
.
hasClass
(
"
open
"
);
if
(
!
a
||
a
&&
n
.
keyCode
==
27
)
return
n
.
which
==
27
&&
u
.
find
(
t
).
focus
(),
r
.
click
();
s
=
e
(
"
[role=menu] li:not(.divider):visible a
"
,
u
);
if
(
!
s
.
length
)
return
;
f
=
s
.
index
(
s
.
filter
(
"
:focus
"
)),
n
.
keyCode
==
38
&&
f
>
0
&&
f
--
,
n
.
keyCode
==
40
&&
f
<
s
.
length
-
1
&&
f
++
,
~
f
||
(
f
=
0
),
s
.
eq
(
f
).
focus
()}};
var
s
=
e
.
fn
.
dropdown
;
e
.
fn
.
dropdown
=
function
(
t
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
dropdown
"
);
i
||
r
.
data
(
"
dropdown
"
,
i
=
new
n
(
this
)),
typeof
t
==
"
string
"
&&
i
[
t
].
call
(
r
)})},
e
.
fn
.
dropdown
.
Constructor
=
n
,
e
.
fn
.
dropdown
.
noConflict
=
function
(){
return
e
.
fn
.
dropdown
=
s
,
this
},
e
(
document
).
on
(
"
click.dropdown.data-api
"
,
r
).
on
(
"
click.dropdown.data-api
"
,
"
.dropdown form
"
,
function
(
e
){
e
.
stopPropagation
()}).
on
(
"
click.dropdown.data-api
"
,
t
,
n
.
prototype
.
toggle
).
on
(
"
keydown.dropdown.data-api
"
,
t
+
"
, [role=menu]
"
,
n
.
prototype
.
keydown
)}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
t
,
n
){
this
.
options
=
n
,
this
.
$element
=
e
(
t
).
delegate
(
'
[data-dismiss="modal"]
'
,
"
click.dismiss.modal
"
,
e
.
proxy
(
this
.
hide
,
this
)),
this
.
options
.
remote
&&
this
.
$element
.
find
(
"
.modal-body
"
).
load
(
this
.
options
.
remote
)};
t
.
prototype
=
{
constructor
:
t
,
toggle
:
function
(){
return
this
[
this
.
isShown
?
"
hide
"
:
"
show
"
]()},
show
:
function
(){
var
t
=
this
,
n
=
e
.
Event
(
"
show
"
);
this
.
$element
.
trigger
(
n
);
if
(
this
.
isShown
||
n
.
isDefaultPrevented
())
return
;
this
.
isShown
=!
0
,
this
.
escape
(),
this
.
backdrop
(
function
(){
var
n
=
e
.
support
.
transition
&&
t
.
$element
.
hasClass
(
"
fade
"
);
t
.
$element
.
parent
().
length
||
t
.
$element
.
appendTo
(
document
.
body
),
t
.
$element
.
show
(),
n
&&
t
.
$element
[
0
].
offsetWidth
,
t
.
$element
.
addClass
(
"
in
"
).
attr
(
"
aria-hidden
"
,
!
1
),
t
.
enforceFocus
(),
n
?
t
.
$element
.
one
(
e
.
support
.
transition
.
end
,
function
(){
t
.
$element
.
focus
().
trigger
(
"
shown
"
)}):
t
.
$element
.
focus
().
trigger
(
"
shown
"
)})},
hide
:
function
(
t
){
t
&&
t
.
preventDefault
();
var
n
=
this
;
t
=
e
.
Event
(
"
hide
"
),
this
.
$element
.
trigger
(
t
);
if
(
!
this
.
isShown
||
t
.
isDefaultPrevented
())
return
;
this
.
isShown
=!
1
,
this
.
escape
(),
e
(
document
).
off
(
"
focusin.modal
"
),
this
.
$element
.
removeClass
(
"
in
"
).
attr
(
"
aria-hidden
"
,
!
0
),
e
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
fade
"
)?
this
.
hideWithTransition
():
this
.
hideModal
()},
enforceFocus
:
function
(){
var
t
=
this
;
e
(
document
).
on
(
"
focusin.modal
"
,
function
(
e
){
t
.
$element
[
0
]
!==
e
.
target
&&!
t
.
$element
.
has
(
e
.
target
).
length
&&
t
.
$element
.
focus
()})},
escape
:
function
(){
var
e
=
this
;
this
.
isShown
&&
this
.
options
.
keyboard
?
this
.
$element
.
on
(
"
keyup.dismiss.modal
"
,
function
(
t
){
t
.
which
==
27
&&
e
.
hide
()}):
this
.
isShown
||
this
.
$element
.
off
(
"
keyup.dismiss.modal
"
)},
hideWithTransition
:
function
(){
var
t
=
this
,
n
=
setTimeout
(
function
(){
t
.
$element
.
off
(
e
.
support
.
transition
.
end
),
t
.
hideModal
()},
500
);
this
.
$element
.
one
(
e
.
support
.
transition
.
end
,
function
(){
clearTimeout
(
n
),
t
.
hideModal
()})},
hideModal
:
function
(){
var
e
=
this
;
this
.
$element
.
hide
(),
this
.
backdrop
(
function
(){
e
.
removeBackdrop
(),
e
.
$element
.
trigger
(
"
hidden
"
)})},
removeBackdrop
:
function
(){
this
.
$backdrop
&&
this
.
$backdrop
.
remove
(),
this
.
$backdrop
=
null
},
backdrop
:
function
(
t
){
var
n
=
this
,
r
=
this
.
$element
.
hasClass
(
"
fade
"
)?
"
fade
"
:
""
;
if
(
this
.
isShown
&&
this
.
options
.
backdrop
){
var
i
=
e
.
support
.
transition
&&
r
;
this
.
$backdrop
=
e
(
'
<div class="modal-backdrop
'
+
r
+
'
" />
'
).
appendTo
(
document
.
body
),
this
.
$backdrop
.
click
(
this
.
options
.
backdrop
==
"
static
"
?
e
.
proxy
(
this
.
$element
[
0
].
focus
,
this
.
$element
[
0
]):
e
.
proxy
(
this
.
hide
,
this
)),
i
&&
this
.
$backdrop
[
0
].
offsetWidth
,
this
.
$backdrop
.
addClass
(
"
in
"
);
if
(
!
t
)
return
;
i
?
this
.
$backdrop
.
one
(
e
.
support
.
transition
.
end
,
t
):
t
()}
else
!
this
.
isShown
&&
this
.
$backdrop
?(
this
.
$backdrop
.
removeClass
(
"
in
"
),
e
.
support
.
transition
&&
this
.
$element
.
hasClass
(
"
fade
"
)?
this
.
$backdrop
.
one
(
e
.
support
.
transition
.
end
,
t
):
t
()):
t
&&
t
()}};
var
n
=
e
.
fn
.
modal
;
e
.
fn
.
modal
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
modal
"
),
s
=
e
.
extend
({},
e
.
fn
.
modal
.
defaults
,
r
.
data
(),
typeof
n
==
"
object
"
&&
n
);
i
||
r
.
data
(
"
modal
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
string
"
?
i
[
n
]():
s
.
show
&&
i
.
show
()})},
e
.
fn
.
modal
.
defaults
=
{
backdrop
:
!
0
,
keyboard
:
!
0
,
show
:
!
0
},
e
.
fn
.
modal
.
Constructor
=
t
,
e
.
fn
.
modal
.
noConflict
=
function
(){
return
e
.
fn
.
modal
=
n
,
this
},
e
(
document
).
on
(
"
click.modal.data-api
"
,
'
[data-toggle="modal"]
'
,
function
(
t
){
var
n
=
e
(
this
),
r
=
n
.
attr
(
"
href
"
),
i
=
e
(
n
.
attr
(
"
data-target
"
)
||
r
&&
r
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
)),
s
=
i
.
data
(
"
modal
"
)?
"
toggle
"
:
e
.
extend
({
remote
:
!
/#/
.
test
(
r
)
&&
r
},
i
.
data
(),
n
.
data
());
t
.
preventDefault
(),
i
.
modal
(
s
).
one
(
"
hide
"
,
function
(){
n
.
focus
()})})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
e
,
t
){
this
.
init
(
"
tooltip
"
,
e
,
t
)};
t
.
prototype
=
{
constructor
:
t
,
init
:
function
(
t
,
n
,
r
){
var
i
,
s
,
o
,
u
,
a
;
this
.
type
=
t
,
this
.
$element
=
e
(
n
),
this
.
options
=
this
.
getOptions
(
r
),
this
.
enabled
=!
0
,
o
=
this
.
options
.
trigger
.
split
(
"
"
);
for
(
a
=
o
.
length
;
a
--
;)
u
=
o
[
a
],
u
==
"
click
"
?
this
.
$element
.
on
(
"
click.
"
+
this
.
type
,
this
.
options
.
selector
,
e
.
proxy
(
this
.
toggle
,
this
)):
u
!=
"
manual
"
&&
(
i
=
u
==
"
hover
"
?
"
mouseenter
"
:
"
focus
"
,
s
=
u
==
"
hover
"
?
"
mouseleave
"
:
"
blur
"
,
this
.
$element
.
on
(
i
+
"
.
"
+
this
.
type
,
this
.
options
.
selector
,
e
.
proxy
(
this
.
enter
,
this
)),
this
.
$element
.
on
(
s
+
"
.
"
+
this
.
type
,
this
.
options
.
selector
,
e
.
proxy
(
this
.
leave
,
this
)));
this
.
options
.
selector
?
this
.
_options
=
e
.
extend
({},
this
.
options
,{
trigger
:
"
manual
"
,
selector
:
""
}):
this
.
fixTitle
()},
getOptions
:
function
(
t
){
return
t
=
e
.
extend
({},
e
.
fn
[
this
.
type
].
defaults
,
this
.
$element
.
data
(),
t
),
t
.
delay
&&
typeof
t
.
delay
==
"
number
"
&&
(
t
.
delay
=
{
show
:
t
.
delay
,
hide
:
t
.
delay
}),
t
},
enter
:
function
(
t
){
var
n
=
e
.
fn
[
this
.
type
].
defaults
,
r
=
{},
i
;
this
.
_options
&&
e
.
each
(
this
.
_options
,
function
(
e
,
t
){
n
[
e
]
!=
t
&&
(
r
[
e
]
=
t
)},
this
),
i
=
e
(
t
.
currentTarget
)[
this
.
type
](
r
).
data
(
this
.
type
);
if
(
!
i
.
options
.
delay
||!
i
.
options
.
delay
.
show
)
return
i
.
show
();
clearTimeout
(
this
.
timeout
),
i
.
hoverState
=
"
in
"
,
this
.
timeout
=
setTimeout
(
function
(){
i
.
hoverState
==
"
in
"
&&
i
.
show
()},
i
.
options
.
delay
.
show
)},
leave
:
function
(
t
){
var
n
=
e
(
t
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
);
this
.
timeout
&&
clearTimeout
(
this
.
timeout
);
if
(
!
n
.
options
.
delay
||!
n
.
options
.
delay
.
hide
)
return
n
.
hide
();
n
.
hoverState
=
"
out
"
,
this
.
timeout
=
setTimeout
(
function
(){
n
.
hoverState
==
"
out
"
&&
n
.
hide
()},
n
.
options
.
delay
.
hide
)},
show
:
function
(){
var
t
,
n
,
r
,
i
,
s
,
o
,
u
=
e
.
Event
(
"
show
"
);
if
(
this
.
hasContent
()
&&
this
.
enabled
){
this
.
$element
.
trigger
(
u
);
if
(
u
.
isDefaultPrevented
())
return
;
t
=
this
.
tip
(),
this
.
setContent
(),
this
.
options
.
animation
&&
t
.
addClass
(
"
fade
"
),
s
=
typeof
this
.
options
.
placement
==
"
function
"
?
this
.
options
.
placement
.
call
(
this
,
t
[
0
],
this
.
$element
[
0
]):
this
.
options
.
placement
,
t
.
detach
().
css
({
top
:
0
,
left
:
0
,
display
:
"
block
"
}),
this
.
options
.
container
?
t
.
appendTo
(
this
.
options
.
container
):
t
.
insertAfter
(
this
.
$element
),
n
=
this
.
getPosition
(),
r
=
t
[
0
].
offsetWidth
,
i
=
t
[
0
].
offsetHeight
;
switch
(
s
){
case
"
bottom
"
:
o
=
{
top
:
n
.
top
+
n
.
height
,
left
:
n
.
left
+
n
.
width
/
2
-
r
/
2
};
break
;
case
"
top
"
:
o
=
{
top
:
n
.
top
-
i
,
left
:
n
.
left
+
n
.
width
/
2
-
r
/
2
};
break
;
case
"
left
"
:
o
=
{
top
:
n
.
top
+
n
.
height
/
2
-
i
/
2
,
left
:
n
.
left
-
r
};
break
;
case
"
right
"
:
o
=
{
top
:
n
.
top
+
n
.
height
/
2
-
i
/
2
,
left
:
n
.
left
+
n
.
width
}}
this
.
applyPlacement
(
o
,
s
),
this
.
$element
.
trigger
(
"
shown
"
)}},
applyPlacement
:
function
(
e
,
t
){
var
n
=
this
.
tip
(),
r
=
n
[
0
].
offsetWidth
,
i
=
n
[
0
].
offsetHeight
,
s
,
o
,
u
,
a
;
n
.
offset
(
e
).
addClass
(
t
).
addClass
(
"
in
"
),
s
=
n
[
0
].
offsetWidth
,
o
=
n
[
0
].
offsetHeight
,
t
==
"
top
"
&&
o
!=
i
&&
(
e
.
top
=
e
.
top
+
i
-
o
,
a
=!
0
),
t
==
"
bottom
"
||
t
==
"
top
"
?(
u
=
0
,
e
.
left
<
0
&&
(
u
=
e
.
left
*-
2
,
e
.
left
=
0
,
n
.
offset
(
e
),
s
=
n
[
0
].
offsetWidth
,
o
=
n
[
0
].
offsetHeight
),
this
.
replaceArrow
(
u
-
r
+
s
,
s
,
"
left
"
)):
this
.
replaceArrow
(
o
-
i
,
o
,
"
top
"
),
a
&&
n
.
offset
(
e
)},
replaceArrow
:
function
(
e
,
t
,
n
){
this
.
arrow
().
css
(
n
,
e
?
50
*
(
1
-
e
/
t
)
+
"
%
"
:
""
)},
setContent
:
function
(){
var
e
=
this
.
tip
(),
t
=
this
.
getTitle
();
e
.
find
(
"
.tooltip-inner
"
)[
this
.
options
.
html
?
"
html
"
:
"
text
"
](
t
),
e
.
removeClass
(
"
fade in top bottom left right
"
)},
hide
:
function
(){
function
i
(){
var
t
=
setTimeout
(
function
(){
n
.
off
(
e
.
support
.
transition
.
end
).
detach
()},
500
);
n
.
one
(
e
.
support
.
transition
.
end
,
function
(){
clearTimeout
(
t
),
n
.
detach
()})}
var
t
=
this
,
n
=
this
.
tip
(),
r
=
e
.
Event
(
"
hide
"
);
this
.
$element
.
trigger
(
r
);
if
(
r
.
isDefaultPrevented
())
return
;
return
n
.
removeClass
(
"
in
"
),
e
.
support
.
transition
&&
this
.
$tip
.
hasClass
(
"
fade
"
)?
i
():
n
.
detach
(),
this
.
$element
.
trigger
(
"
hidden
"
),
this
},
fixTitle
:
function
(){
var
e
=
this
.
$element
;(
e
.
attr
(
"
title
"
)
||
typeof
e
.
attr
(
"
data-original-title
"
)
!=
"
string
"
)
&&
e
.
attr
(
"
data-original-title
"
,
e
.
attr
(
"
title
"
)
||
""
).
attr
(
"
title
"
,
""
)},
hasContent
:
function
(){
return
this
.
getTitle
()},
getPosition
:
function
(){
var
t
=
this
.
$element
[
0
];
return
e
.
extend
({},
typeof
t
.
getBoundingClientRect
==
"
function
"
?
t
.
getBoundingClientRect
():{
width
:
t
.
offsetWidth
,
height
:
t
.
offsetHeight
},
this
.
$element
.
offset
())},
getTitle
:
function
(){
var
e
,
t
=
this
.
$element
,
n
=
this
.
options
;
return
e
=
t
.
attr
(
"
data-original-title
"
)
||
(
typeof
n
.
title
==
"
function
"
?
n
.
title
.
call
(
t
[
0
]):
n
.
title
),
e
},
tip
:
function
(){
return
this
.
$tip
=
this
.
$tip
||
e
(
this
.
options
.
template
)},
arrow
:
function
(){
return
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
"
.tooltip-arrow
"
)},
validate
:
function
(){
this
.
$element
[
0
].
parentNode
||
(
this
.
hide
(),
this
.
$element
=
null
,
this
.
options
=
null
)},
enable
:
function
(){
this
.
enabled
=!
0
},
disable
:
function
(){
this
.
enabled
=!
1
},
toggleEnabled
:
function
(){
this
.
enabled
=!
this
.
enabled
},
toggle
:
function
(
t
){
var
n
=
t
?
e
(
t
.
currentTarget
)[
this
.
type
](
this
.
_options
).
data
(
this
.
type
):
this
;
n
.
tip
().
hasClass
(
"
in
"
)?
n
.
hide
():
n
.
show
()},
destroy
:
function
(){
this
.
hide
().
$element
.
off
(
"
.
"
+
this
.
type
).
removeData
(
this
.
type
)}};
var
n
=
e
.
fn
.
tooltip
;
e
.
fn
.
tooltip
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
tooltip
"
),
s
=
typeof
n
==
"
object
"
&&
n
;
i
||
r
.
data
(
"
tooltip
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
string
"
&&
i
[
n
]()})},
e
.
fn
.
tooltip
.
Constructor
=
t
,
e
.
fn
.
tooltip
.
defaults
=
{
animation
:
!
0
,
placement
:
"
top
"
,
selector
:
!
1
,
template
:
'
<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>
'
,
trigger
:
"
hover focus
"
,
title
:
""
,
delay
:
0
,
html
:
!
1
,
container
:
!
1
},
e
.
fn
.
tooltip
.
noConflict
=
function
(){
return
e
.
fn
.
tooltip
=
n
,
this
}}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
e
,
t
){
this
.
init
(
"
popover
"
,
e
,
t
)};
t
.
prototype
=
e
.
extend
({},
e
.
fn
.
tooltip
.
Constructor
.
prototype
,{
constructor
:
t
,
setContent
:
function
(){
var
e
=
this
.
tip
(),
t
=
this
.
getTitle
(),
n
=
this
.
getContent
();
e
.
find
(
"
.popover-title
"
)[
this
.
options
.
html
?
"
html
"
:
"
text
"
](
t
),
e
.
find
(
"
.popover-content
"
)[
this
.
options
.
html
?
"
html
"
:
"
text
"
](
n
),
e
.
removeClass
(
"
fade top bottom left right in
"
)},
hasContent
:
function
(){
return
this
.
getTitle
()
||
this
.
getContent
()},
getContent
:
function
(){
var
e
,
t
=
this
.
$element
,
n
=
this
.
options
;
return
e
=
(
typeof
n
.
content
==
"
function
"
?
n
.
content
.
call
(
t
[
0
]):
n
.
content
)
||
t
.
attr
(
"
data-content
"
),
e
},
tip
:
function
(){
return
this
.
$tip
||
(
this
.
$tip
=
e
(
this
.
options
.
template
)),
this
.
$tip
},
destroy
:
function
(){
this
.
hide
().
$element
.
off
(
"
.
"
+
this
.
type
).
removeData
(
this
.
type
)}});
var
n
=
e
.
fn
.
popover
;
e
.
fn
.
popover
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
popover
"
),
s
=
typeof
n
==
"
object
"
&&
n
;
i
||
r
.
data
(
"
popover
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
string
"
&&
i
[
n
]()})},
e
.
fn
.
popover
.
Constructor
=
t
,
e
.
fn
.
popover
.
defaults
=
e
.
extend
({},
e
.
fn
.
tooltip
.
defaults
,{
placement
:
"
right
"
,
trigger
:
"
click
"
,
content
:
""
,
template
:
'
<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>
'
}),
e
.
fn
.
popover
.
noConflict
=
function
(){
return
e
.
fn
.
popover
=
n
,
this
}}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
function
t
(
t
,
n
){
var
r
=
e
.
proxy
(
this
.
process
,
this
),
i
=
e
(
t
).
is
(
"
body
"
)?
e
(
window
):
e
(
t
),
s
;
this
.
options
=
e
.
extend
({},
e
.
fn
.
scrollspy
.
defaults
,
n
),
this
.
$scrollElement
=
i
.
on
(
"
scroll.scroll-spy.data-api
"
,
r
),
this
.
selector
=
(
this
.
options
.
target
||
(
s
=
e
(
t
).
attr
(
"
href
"
))
&&
s
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
""
)
||
""
)
+
"
.nav li > a
"
,
this
.
$body
=
e
(
"
body
"
),
this
.
refresh
(),
this
.
process
()}
t
.
prototype
=
{
constructor
:
t
,
refresh
:
function
(){
var
t
=
this
,
n
;
this
.
offsets
=
e
([]),
this
.
targets
=
e
([]),
n
=
this
.
$body
.
find
(
this
.
selector
).
map
(
function
(){
var
n
=
e
(
this
),
r
=
n
.
data
(
"
target
"
)
||
n
.
attr
(
"
href
"
),
i
=
/^#
\w
/
.
test
(
r
)
&&
e
(
r
);
return
i
&&
i
.
length
&&
[[
i
.
position
().
top
+
(
!
e
.
isWindow
(
t
.
$scrollElement
.
get
(
0
))
&&
t
.
$scrollElement
.
scrollTop
()),
r
]]
||
null
}).
sort
(
function
(
e
,
t
){
return
e
[
0
]
-
t
[
0
]}).
each
(
function
(){
t
.
offsets
.
push
(
this
[
0
]),
t
.
targets
.
push
(
this
[
1
])})},
process
:
function
(){
var
e
=
this
.
$scrollElement
.
scrollTop
()
+
this
.
options
.
offset
,
t
=
this
.
$scrollElement
[
0
].
scrollHeight
||
this
.
$body
[
0
].
scrollHeight
,
n
=
t
-
this
.
$scrollElement
.
height
(),
r
=
this
.
offsets
,
i
=
this
.
targets
,
s
=
this
.
activeTarget
,
o
;
if
(
e
>=
n
)
return
s
!=
(
o
=
i
.
last
()[
0
])
&&
this
.
activate
(
o
);
for
(
o
=
r
.
length
;
o
--
;)
s
!=
i
[
o
]
&&
e
>=
r
[
o
]
&&
(
!
r
[
o
+
1
]
||
e
<=
r
[
o
+
1
])
&&
this
.
activate
(
i
[
o
])},
activate
:
function
(
t
){
var
n
,
r
;
this
.
activeTarget
=
t
,
e
(
this
.
selector
).
parent
(
"
.active
"
).
removeClass
(
"
active
"
),
r
=
this
.
selector
+
'
[data-target="
'
+
t
+
'
"],
'
+
this
.
selector
+
'
[href="
'
+
t
+
'
"]
'
,
n
=
e
(
r
).
parent
(
"
li
"
).
addClass
(
"
active
"
),
n
.
parent
(
"
.dropdown-menu
"
).
length
&&
(
n
=
n
.
closest
(
"
li.dropdown
"
).
addClass
(
"
active
"
)),
n
.
trigger
(
"
activate
"
)}};
var
n
=
e
.
fn
.
scrollspy
;
e
.
fn
.
scrollspy
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
scrollspy
"
),
s
=
typeof
n
==
"
object
"
&&
n
;
i
||
r
.
data
(
"
scrollspy
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
string
"
&&
i
[
n
]()})},
e
.
fn
.
scrollspy
.
Constructor
=
t
,
e
.
fn
.
scrollspy
.
defaults
=
{
offset
:
10
},
e
.
fn
.
scrollspy
.
noConflict
=
function
(){
return
e
.
fn
.
scrollspy
=
n
,
this
},
e
(
window
).
on
(
"
load
"
,
function
(){
e
(
'
[data-spy="scroll"]
'
).
each
(
function
(){
var
t
=
e
(
this
);
t
.
scrollspy
(
t
.
data
())})})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
t
){
this
.
element
=
e
(
t
)};
t
.
prototype
=
{
constructor
:
t
,
show
:
function
(){
var
t
=
this
.
element
,
n
=
t
.
closest
(
"
ul:not(.dropdown-menu)
"
),
r
=
t
.
attr
(
"
data-target
"
),
i
,
s
,
o
;
r
||
(
r
=
t
.
attr
(
"
href
"
),
r
=
r
&&
r
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
""
));
if
(
t
.
parent
(
"
li
"
).
hasClass
(
"
active
"
))
return
;
i
=
n
.
find
(
"
.active:last a
"
)[
0
],
o
=
e
.
Event
(
"
show
"
,{
relatedTarget
:
i
}),
t
.
trigger
(
o
);
if
(
o
.
isDefaultPrevented
())
return
;
s
=
e
(
r
),
this
.
activate
(
t
.
parent
(
"
li
"
),
n
),
this
.
activate
(
s
,
s
.
parent
(),
function
(){
t
.
trigger
({
type
:
"
shown
"
,
relatedTarget
:
i
})})},
activate
:
function
(
t
,
n
,
r
){
function
o
(){
i
.
removeClass
(
"
active
"
).
find
(
"
> .dropdown-menu > .active
"
).
removeClass
(
"
active
"
),
t
.
addClass
(
"
active
"
),
s
?(
t
[
0
].
offsetWidth
,
t
.
addClass
(
"
in
"
)):
t
.
removeClass
(
"
fade
"
),
t
.
parent
(
"
.dropdown-menu
"
)
&&
t
.
closest
(
"
li.dropdown
"
).
addClass
(
"
active
"
),
r
&&
r
()}
var
i
=
n
.
find
(
"
> .active
"
),
s
=
r
&&
e
.
support
.
transition
&&
i
.
hasClass
(
"
fade
"
);
s
?
i
.
one
(
e
.
support
.
transition
.
end
,
o
):
o
(),
i
.
removeClass
(
"
in
"
)}};
var
n
=
e
.
fn
.
tab
;
e
.
fn
.
tab
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
tab
"
);
i
||
r
.
data
(
"
tab
"
,
i
=
new
t
(
this
)),
typeof
n
==
"
string
"
&&
i
[
n
]()})},
e
.
fn
.
tab
.
Constructor
=
t
,
e
.
fn
.
tab
.
noConflict
=
function
(){
return
e
.
fn
.
tab
=
n
,
this
},
e
(
document
).
on
(
"
click.tab.data-api
"
,
'
[data-toggle="tab"], [data-toggle="pill"]
'
,
function
(
t
){
t
.
preventDefault
(),
e
(
this
).
tab
(
"
show
"
)})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
t
,
n
){
this
.
$element
=
e
(
t
),
this
.
options
=
e
.
extend
({},
e
.
fn
.
typeahead
.
defaults
,
n
),
this
.
matcher
=
this
.
options
.
matcher
||
this
.
matcher
,
this
.
sorter
=
this
.
options
.
sorter
||
this
.
sorter
,
this
.
highlighter
=
this
.
options
.
highlighter
||
this
.
highlighter
,
this
.
updater
=
this
.
options
.
updater
||
this
.
updater
,
this
.
source
=
this
.
options
.
source
,
this
.
$menu
=
e
(
this
.
options
.
menu
),
this
.
shown
=!
1
,
this
.
listen
()};
t
.
prototype
=
{
constructor
:
t
,
select
:
function
(){
var
e
=
this
.
$menu
.
find
(
"
.active
"
).
attr
(
"
data-value
"
);
return
this
.
$element
.
val
(
this
.
updater
(
e
)).
change
(),
this
.
hide
()},
updater
:
function
(
e
){
return
e
},
show
:
function
(){
var
t
=
e
.
extend
({},
this
.
$element
.
position
(),{
height
:
this
.
$element
[
0
].
offsetHeight
});
return
this
.
$menu
.
insertAfter
(
this
.
$element
).
css
({
top
:
t
.
top
+
t
.
height
,
left
:
t
.
left
}).
show
(),
this
.
shown
=!
0
,
this
},
hide
:
function
(){
return
this
.
$menu
.
hide
(),
this
.
shown
=!
1
,
this
},
lookup
:
function
(
t
){
var
n
;
return
this
.
query
=
this
.
$element
.
val
(),
!
this
.
query
||
this
.
query
.
length
<
this
.
options
.
minLength
?
this
.
shown
?
this
.
hide
():
this
:(
n
=
e
.
isFunction
(
this
.
source
)?
this
.
source
(
this
.
query
,
e
.
proxy
(
this
.
process
,
this
)):
this
.
source
,
n
?
this
.
process
(
n
):
this
)},
process
:
function
(
t
){
var
n
=
this
;
return
t
=
e
.
grep
(
t
,
function
(
e
){
return
n
.
matcher
(
e
)}),
t
=
this
.
sorter
(
t
),
t
.
length
?
this
.
render
(
t
.
slice
(
0
,
this
.
options
.
items
)).
show
():
this
.
shown
?
this
.
hide
():
this
},
matcher
:
function
(
e
){
return
~
e
.
toLowerCase
().
indexOf
(
this
.
query
.
toLowerCase
())},
sorter
:
function
(
e
){
var
t
=
[],
n
=
[],
r
=
[],
i
;
while
(
i
=
e
.
shift
())
i
.
toLowerCase
().
indexOf
(
this
.
query
.
toLowerCase
())?
~
i
.
indexOf
(
this
.
query
)?
n
.
push
(
i
):
r
.
push
(
i
):
t
.
push
(
i
);
return
t
.
concat
(
n
,
r
)},
highlighter
:
function
(
e
){
var
t
=
this
.
query
.
replace
(
/
[\-\[\]
{}()*+?.,
\\\^
$|#
\s]
/g
,
"
\\
$&
"
);
return
e
.
replace
(
new
RegExp
(
"
(
"
+
t
+
"
)
"
,
"
ig
"
),
function
(
e
,
t
){
return
"
<strong>
"
+
t
+
"
</strong>
"
})},
render
:
function
(
t
){
var
n
=
this
;
return
t
=
e
(
t
).
map
(
function
(
t
,
r
){
return
t
=
e
(
n
.
options
.
item
).
attr
(
"
data-value
"
,
r
),
t
.
find
(
"
a
"
).
html
(
n
.
highlighter
(
r
)),
t
[
0
]}),
t
.
first
().
addClass
(
"
active
"
),
this
.
$menu
.
html
(
t
),
this
},
next
:
function
(
t
){
var
n
=
this
.
$menu
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
r
=
n
.
next
();
r
.
length
||
(
r
=
e
(
this
.
$menu
.
find
(
"
li
"
)[
0
])),
r
.
addClass
(
"
active
"
)},
prev
:
function
(
e
){
var
t
=
this
.
$menu
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
n
=
t
.
prev
();
n
.
length
||
(
n
=
this
.
$menu
.
find
(
"
li
"
).
last
()),
n
.
addClass
(
"
active
"
)},
listen
:
function
(){
this
.
$element
.
on
(
"
focus
"
,
e
.
proxy
(
this
.
focus
,
this
)).
on
(
"
blur
"
,
e
.
proxy
(
this
.
blur
,
this
)).
on
(
"
keypress
"
,
e
.
proxy
(
this
.
keypress
,
this
)).
on
(
"
keyup
"
,
e
.
proxy
(
this
.
keyup
,
this
)),
this
.
eventSupported
(
"
keydown
"
)
&&
this
.
$element
.
on
(
"
keydown
"
,
e
.
proxy
(
this
.
keydown
,
this
)),
this
.
$menu
.
on
(
"
click
"
,
e
.
proxy
(
this
.
click
,
this
)).
on
(
"
mouseenter
"
,
"
li
"
,
e
.
proxy
(
this
.
mouseenter
,
this
)).
on
(
"
mouseleave
"
,
"
li
"
,
e
.
proxy
(
this
.
mouseleave
,
this
))},
eventSupported
:
function
(
e
){
var
t
=
e
in
this
.
$element
;
return
t
||
(
this
.
$element
.
setAttribute
(
e
,
"
return;
"
),
t
=
typeof
this
.
$element
[
e
]
==
"
function
"
),
t
},
move
:
function
(
e
){
if
(
!
this
.
shown
)
return
;
switch
(
e
.
keyCode
){
case
9
:
case
13
:
case
27
:
e
.
preventDefault
();
break
;
case
38
:
e
.
preventDefault
(),
this
.
prev
();
break
;
case
40
:
e
.
preventDefault
(),
this
.
next
()}
e
.
stopPropagation
()},
keydown
:
function
(
t
){
this
.
suppressKeyPressRepeat
=~
e
.
inArray
(
t
.
keyCode
,[
40
,
38
,
9
,
13
,
27
]),
this
.
move
(
t
)},
keypress
:
function
(
e
){
if
(
this
.
suppressKeyPressRepeat
)
return
;
this
.
move
(
e
)},
keyup
:
function
(
e
){
switch
(
e
.
keyCode
){
case
40
:
case
38
:
case
16
:
case
17
:
case
18
:
break
;
case
9
:
case
13
:
if
(
!
this
.
shown
)
return
;
this
.
select
();
break
;
case
27
:
if
(
!
this
.
shown
)
return
;
this
.
hide
();
break
;
default
:
this
.
lookup
()}
e
.
stopPropagation
(),
e
.
preventDefault
()},
focus
:
function
(
e
){
this
.
focused
=!
0
},
blur
:
function
(
e
){
this
.
focused
=!
1
,
!
this
.
mousedover
&&
this
.
shown
&&
this
.
hide
()},
click
:
function
(
e
){
e
.
stopPropagation
(),
e
.
preventDefault
(),
this
.
select
(),
this
.
$element
.
focus
()},
mouseenter
:
function
(
t
){
this
.
mousedover
=!
0
,
this
.
$menu
.
find
(
"
.active
"
).
removeClass
(
"
active
"
),
e
(
t
.
currentTarget
).
addClass
(
"
active
"
)},
mouseleave
:
function
(
e
){
this
.
mousedover
=!
1
,
!
this
.
focused
&&
this
.
shown
&&
this
.
hide
()}};
var
n
=
e
.
fn
.
typeahead
;
e
.
fn
.
typeahead
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
typeahead
"
),
s
=
typeof
n
==
"
object
"
&&
n
;
i
||
r
.
data
(
"
typeahead
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
string
"
&&
i
[
n
]()})},
e
.
fn
.
typeahead
.
defaults
=
{
source
:[],
items
:
8
,
menu
:
'
<ul class="typeahead dropdown-menu"></ul>
'
,
item
:
'
<li><a href="#"></a></li>
'
,
minLength
:
1
},
e
.
fn
.
typeahead
.
Constructor
=
t
,
e
.
fn
.
typeahead
.
noConflict
=
function
(){
return
e
.
fn
.
typeahead
=
n
,
this
},
e
(
document
).
on
(
"
focus.typeahead.data-api
"
,
'
[data-provide="typeahead"]
'
,
function
(
t
){
var
n
=
e
(
this
);
if
(
n
.
data
(
"
typeahead
"
))
return
;
n
.
typeahead
(
n
.
data
())})}(
window
.
jQuery
),
!
function
(
e
){
"
use strict
"
;
var
t
=
function
(
t
,
n
){
this
.
options
=
e
.
extend
({},
e
.
fn
.
affix
.
defaults
,
n
),
this
.
$window
=
e
(
window
).
on
(
"
scroll.affix.data-api
"
,
e
.
proxy
(
this
.
checkPosition
,
this
)).
on
(
"
click.affix.data-api
"
,
e
.
proxy
(
function
(){
setTimeout
(
e
.
proxy
(
this
.
checkPosition
,
this
),
1
)},
this
)),
this
.
$element
=
e
(
t
),
this
.
checkPosition
()};
t
.
prototype
.
checkPosition
=
function
(){
if
(
!
this
.
$element
.
is
(
"
:visible
"
))
return
;
var
t
=
e
(
document
).
height
(),
n
=
this
.
$window
.
scrollTop
(),
r
=
this
.
$element
.
offset
(),
i
=
this
.
options
.
offset
,
s
=
i
.
bottom
,
o
=
i
.
top
,
u
=
"
affix affix-top affix-bottom
"
,
a
;
typeof
i
!=
"
object
"
&&
(
s
=
o
=
i
),
typeof
o
==
"
function
"
&&
(
o
=
i
.
top
()),
typeof
s
==
"
function
"
&&
(
s
=
i
.
bottom
()),
a
=
this
.
unpin
!=
null
&&
n
+
this
.
unpin
<=
r
.
top
?
!
1
:
s
!=
null
&&
r
.
top
+
this
.
$element
.
height
()
>=
t
-
s
?
"
bottom
"
:
o
!=
null
&&
n
<=
o
?
"
top
"
:
!
1
;
if
(
this
.
affixed
===
a
)
return
;
this
.
affixed
=
a
,
this
.
unpin
=
a
==
"
bottom
"
?
r
.
top
-
n
:
null
,
this
.
$element
.
removeClass
(
u
).
addClass
(
"
affix
"
+
(
a
?
"
-
"
+
a
:
""
))};
var
n
=
e
.
fn
.
affix
;
e
.
fn
.
affix
=
function
(
n
){
return
this
.
each
(
function
(){
var
r
=
e
(
this
),
i
=
r
.
data
(
"
affix
"
),
s
=
typeof
n
==
"
object
"
&&
n
;
i
||
r
.
data
(
"
affix
"
,
i
=
new
t
(
this
,
s
)),
typeof
n
==
"
string
"
&&
i
[
n
]()})},
e
.
fn
.
affix
.
Constructor
=
t
,
e
.
fn
.
affix
.
defaults
=
{
offset
:
0
},
e
.
fn
.
affix
.
noConflict
=
function
(){
return
e
.
fn
.
affix
=
n
,
this
},
e
(
window
).
on
(
"
load
"
,
function
(){
e
(
'
[data-spy="affix"]
'
).
each
(
function
(){
var
t
=
e
(
this
),
n
=
t
.
data
();
n
.
offset
=
n
.
offset
||
{},
n
.
offsetBottom
&&
(
n
.
offset
.
bottom
=
n
.
offsetBottom
),
n
.
offsetTop
&&
(
n
.
offset
.
top
=
n
.
offsetTop
),
t
.
affix
(
n
)})})}(
window
.
jQuery
);
\ No newline at end of file
src/lib/jquery.hotkeys.js
0 → 100644
View file @
8b5ed49a
/*
* jQuery Hotkeys Plugin
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Based upon the plugin by Tzury Bar Yochay:
* http://github.com/tzuryby/hotkeys
*
* Original idea by:
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
*/
(
function
(
jQuery
){
jQuery
.
hotkeys
=
{
version
:
"
0.8
"
,
specialKeys
:
{
8
:
"
backspace
"
,
9
:
"
tab
"
,
13
:
"
return
"
,
16
:
"
shift
"
,
17
:
"
ctrl
"
,
18
:
"
alt
"
,
19
:
"
pause
"
,
20
:
"
capslock
"
,
27
:
"
esc
"
,
32
:
"
space
"
,
33
:
"
pageup
"
,
34
:
"
pagedown
"
,
35
:
"
end
"
,
36
:
"
home
"
,
37
:
"
left
"
,
38
:
"
up
"
,
39
:
"
right
"
,
40
:
"
down
"
,
45
:
"
insert
"
,
46
:
"
del
"
,
96
:
"
0
"
,
97
:
"
1
"
,
98
:
"
2
"
,
99
:
"
3
"
,
100
:
"
4
"
,
101
:
"
5
"
,
102
:
"
6
"
,
103
:
"
7
"
,
104
:
"
8
"
,
105
:
"
9
"
,
106
:
"
*
"
,
107
:
"
+
"
,
109
:
"
-
"
,
110
:
"
.
"
,
111
:
"
/
"
,
112
:
"
f1
"
,
113
:
"
f2
"
,
114
:
"
f3
"
,
115
:
"
f4
"
,
116
:
"
f5
"
,
117
:
"
f6
"
,
118
:
"
f7
"
,
119
:
"
f8
"
,
120
:
"
f9
"
,
121
:
"
f10
"
,
122
:
"
f11
"
,
123
:
"
f12
"
,
144
:
"
numlock
"
,
145
:
"
scroll
"
,
191
:
"
/
"
,
224
:
"
meta
"
},
shiftNums
:
{
"
`
"
:
"
~
"
,
"
1
"
:
"
!
"
,
"
2
"
:
"
@
"
,
"
3
"
:
"
#
"
,
"
4
"
:
"
$
"
,
"
5
"
:
"
%
"
,
"
6
"
:
"
^
"
,
"
7
"
:
"
&
"
,
"
8
"
:
"
*
"
,
"
9
"
:
"
(
"
,
"
0
"
:
"
)
"
,
"
-
"
:
"
_
"
,
"
=
"
:
"
+
"
,
"
;
"
:
"
:
"
,
"
'
"
:
"
\"
"
,
"
,
"
:
"
<
"
,
"
.
"
:
"
>
"
,
"
/
"
:
"
?
"
,
"
\\
"
:
"
|
"
}
};
function
keyHandler
(
handleObj
)
{
// Only care when a possible input has been specified
if
(
typeof
handleObj
.
data
!==
"
string
"
)
{
return
;
}
var
origHandler
=
handleObj
.
handler
,
keys
=
handleObj
.
data
.
toLowerCase
().
split
(
"
"
),
textAcceptingInputTypes
=
[
"
text
"
,
"
password
"
,
"
number
"
,
"
email
"
,
"
url
"
,
"
range
"
,
"
date
"
,
"
month
"
,
"
week
"
,
"
time
"
,
"
datetime
"
,
"
datetime-local
"
,
"
search
"
,
"
color
"
];
handleObj
.
handler
=
function
(
event
)
{
// Don't fire in text-accepting inputs that we didn't directly bind to
if
(
this
!==
event
.
target
&&
(
/textarea|select/i
.
test
(
event
.
target
.
nodeName
)
||
jQuery
.
inArray
(
event
.
target
.
type
,
textAcceptingInputTypes
)
>
-
1
)
)
{
return
;
}
// Keypress represents characters, not special keys
var
special
=
event
.
type
!==
"
keypress
"
&&
jQuery
.
hotkeys
.
specialKeys
[
event
.
which
],
character
=
String
.
fromCharCode
(
event
.
which
).
toLowerCase
(),
key
,
modif
=
""
,
possible
=
{};
// check combinations (alt|ctrl|shift+anything)
if
(
event
.
altKey
&&
special
!==
"
alt
"
)
{
modif
+=
"
alt+
"
;
}
if
(
event
.
ctrlKey
&&
special
!==
"
ctrl
"
)
{
modif
+=
"
ctrl+
"
;
}
// TODO: Need to make sure this works consistently across platforms
if
(
event
.
metaKey
&&
!
event
.
ctrlKey
&&
special
!==
"
meta
"
)
{
modif
+=
"
meta+
"
;
}
if
(
event
.
shiftKey
&&
special
!==
"
shift
"
)
{
modif
+=
"
shift+
"
;
}
if
(
special
)
{
possible
[
modif
+
special
]
=
true
;
}
else
{
possible
[
modif
+
character
]
=
true
;
possible
[
modif
+
jQuery
.
hotkeys
.
shiftNums
[
character
]
]
=
true
;
// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
if
(
modif
===
"
shift+
"
)
{
possible
[
jQuery
.
hotkeys
.
shiftNums
[
character
]
]
=
true
;
}
}
for
(
var
i
=
0
,
l
=
keys
.
length
;
i
<
l
;
i
++
)
{
if
(
possible
[
keys
[
i
]
]
)
{
return
origHandler
.
apply
(
this
,
arguments
);
}
}
};
}
jQuery
.
each
([
"
keydown
"
,
"
keyup
"
,
"
keypress
"
],
function
()
{
jQuery
.
event
.
special
[
this
]
=
{
add
:
keyHandler
};
});
})(
jQuery
);
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