Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
PUBLIC
/
surfer-okd
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 16ad753a
authored
Feb 07, 2017
by
Johannes Zellner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove unused js files
1 parent
e628921a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
0 additions
and
2377 deletions
frontend/js/bootstrap.js
frontend/js/npm.js
frontend/js/bootstrap.js
deleted
100644 → 0
View file @
e628921
/*!
* Bootstrap v3.3.6 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under the MIT license
*/
if
(
typeof
jQuery
===
'undefined'
)
{
throw
new
Error
(
'Bootstrap\'s JavaScript requires jQuery'
)
}
+
function
(
$
)
{
'use strict'
;
var
version
=
$
.
fn
.
jquery
.
split
(
' '
)[
0
].
split
(
'.'
)
if
((
version
[
0
]
<
2
&&
version
[
1
]
<
9
)
||
(
version
[
0
]
==
1
&&
version
[
1
]
==
9
&&
version
[
2
]
<
1
)
||
(
version
[
0
]
>
2
))
{
throw
new
Error
(
'Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3'
)
}
}(
jQuery
);
/* ========================================================================
* Bootstrap: transition.js v3.3.6
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
function
transitionEnd
()
{
var
el
=
document
.
createElement
(
'bootstrap'
)
var
transEndEventNames
=
{
WebkitTransition
:
'webkitTransitionEnd'
,
MozTransition
:
'transitionend'
,
OTransition
:
'oTransitionEnd otransitionend'
,
transition
:
'transitionend'
}
for
(
var
name
in
transEndEventNames
)
{
if
(
el
.
style
[
name
]
!==
undefined
)
{
return
{
end
:
transEndEventNames
[
name
]
}
}
}
return
false
// explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
$
.
fn
.
emulateTransitionEnd
=
function
(
duration
)
{
var
called
=
false
var
$el
=
this
$
(
this
).
one
(
'bsTransitionEnd'
,
function
()
{
called
=
true
})
var
callback
=
function
()
{
if
(
!
called
)
$
(
$el
).
trigger
(
$
.
support
.
transition
.
end
)
}
setTimeout
(
callback
,
duration
)
return
this
}
$
(
function
()
{
$
.
support
.
transition
=
transitionEnd
()
if
(
!
$
.
support
.
transition
)
return
$
.
event
.
special
.
bsTransitionEnd
=
{
bindType
:
$
.
support
.
transition
.
end
,
delegateType
:
$
.
support
.
transition
.
end
,
handle
:
function
(
e
)
{
if
(
$
(
e
.
target
).
is
(
this
))
return
e
.
handleObj
.
handler
.
apply
(
this
,
arguments
)
}
}
})
}(
jQuery
);
/* ========================================================================
* Bootstrap: alert.js v3.3.6
* http://getbootstrap.com/javascript/#alerts
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// ALERT CLASS DEFINITION
// ======================
var
dismiss
=
'[data-dismiss="alert"]'
var
Alert
=
function
(
el
)
{
$
(
el
).
on
(
'click'
,
dismiss
,
this
.
close
)
}
Alert
.
VERSION
=
'3.3.6'
Alert
.
TRANSITION_DURATION
=
150
Alert
.
prototype
.
close
=
function
(
e
)
{
var
$this
=
$
(
this
)
var
selector
=
$this
.
attr
(
'data-target'
)
if
(
!
selector
)
{
selector
=
$this
.
attr
(
'href'
)
selector
=
selector
&&
selector
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
''
)
// strip for ie7
}
var
$parent
=
$
(
selector
)
if
(
e
)
e
.
preventDefault
()
if
(
!
$parent
.
length
)
{
$parent
=
$this
.
closest
(
'.alert'
)
}
$parent
.
trigger
(
e
=
$
.
Event
(
'close.bs.alert'
))
if
(
e
.
isDefaultPrevented
())
return
$parent
.
removeClass
(
'in'
)
function
removeElement
()
{
// detach from parent, fire event then clean up data
$parent
.
detach
().
trigger
(
'closed.bs.alert'
).
remove
()
}
$
.
support
.
transition
&&
$parent
.
hasClass
(
'fade'
)
?
$parent
.
one
(
'bsTransitionEnd'
,
removeElement
)
.
emulateTransitionEnd
(
Alert
.
TRANSITION_DURATION
)
:
removeElement
()
}
// ALERT PLUGIN DEFINITION
// =======================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.alert'
)
if
(
!
data
)
$this
.
data
(
'bs.alert'
,
(
data
=
new
Alert
(
this
)))
if
(
typeof
option
==
'string'
)
data
[
option
].
call
(
$this
)
})
}
var
old
=
$
.
fn
.
alert
$
.
fn
.
alert
=
Plugin
$
.
fn
.
alert
.
Constructor
=
Alert
// ALERT NO CONFLICT
// =================
$
.
fn
.
alert
.
noConflict
=
function
()
{
$
.
fn
.
alert
=
old
return
this
}
// ALERT DATA-API
// ==============
$
(
document
).
on
(
'click.bs.alert.data-api'
,
dismiss
,
Alert
.
prototype
.
close
)
}(
jQuery
);
/* ========================================================================
* Bootstrap: button.js v3.3.6
* http://getbootstrap.com/javascript/#buttons
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// BUTTON PUBLIC CLASS DEFINITION
// ==============================
var
Button
=
function
(
element
,
options
)
{
this
.
$element
=
$
(
element
)
this
.
options
=
$
.
extend
({},
Button
.
DEFAULTS
,
options
)
this
.
isLoading
=
false
}
Button
.
VERSION
=
'3.3.6'
Button
.
DEFAULTS
=
{
loadingText
:
'loading...'
}
Button
.
prototype
.
setState
=
function
(
state
)
{
var
d
=
'disabled'
var
$el
=
this
.
$element
var
val
=
$el
.
is
(
'input'
)
?
'val'
:
'html'
var
data
=
$el
.
data
()
state
+=
'Text'
if
(
data
.
resetText
==
null
)
$el
.
data
(
'resetText'
,
$el
[
val
]())
// push to event loop to allow forms to submit
setTimeout
(
$
.
proxy
(
function
()
{
$el
[
val
](
data
[
state
]
==
null
?
this
.
options
[
state
]
:
data
[
state
])
if
(
state
==
'loadingText'
)
{
this
.
isLoading
=
true
$el
.
addClass
(
d
).
attr
(
d
,
d
)
}
else
if
(
this
.
isLoading
)
{
this
.
isLoading
=
false
$el
.
removeClass
(
d
).
removeAttr
(
d
)
}
},
this
),
0
)
}
Button
.
prototype
.
toggle
=
function
()
{
var
changed
=
true
var
$parent
=
this
.
$element
.
closest
(
'[data-toggle="buttons"]'
)
if
(
$parent
.
length
)
{
var
$input
=
this
.
$element
.
find
(
'input'
)
if
(
$input
.
prop
(
'type'
)
==
'radio'
)
{
if
(
$input
.
prop
(
'checked'
))
changed
=
false
$parent
.
find
(
'.active'
).
removeClass
(
'active'
)
this
.
$element
.
addClass
(
'active'
)
}
else
if
(
$input
.
prop
(
'type'
)
==
'checkbox'
)
{
if
((
$input
.
prop
(
'checked'
))
!==
this
.
$element
.
hasClass
(
'active'
))
changed
=
false
this
.
$element
.
toggleClass
(
'active'
)
}
$input
.
prop
(
'checked'
,
this
.
$element
.
hasClass
(
'active'
))
if
(
changed
)
$input
.
trigger
(
'change'
)
}
else
{
this
.
$element
.
attr
(
'aria-pressed'
,
!
this
.
$element
.
hasClass
(
'active'
))
this
.
$element
.
toggleClass
(
'active'
)
}
}
// BUTTON PLUGIN DEFINITION
// ========================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.button'
)
var
options
=
typeof
option
==
'object'
&&
option
if
(
!
data
)
$this
.
data
(
'bs.button'
,
(
data
=
new
Button
(
this
,
options
)))
if
(
option
==
'toggle'
)
data
.
toggle
()
else
if
(
option
)
data
.
setState
(
option
)
})
}
var
old
=
$
.
fn
.
button
$
.
fn
.
button
=
Plugin
$
.
fn
.
button
.
Constructor
=
Button
// BUTTON NO CONFLICT
// ==================
$
.
fn
.
button
.
noConflict
=
function
()
{
$
.
fn
.
button
=
old
return
this
}
// BUTTON DATA-API
// ===============
$
(
document
)
.
on
(
'click.bs.button.data-api'
,
'[data-toggle^="button"]'
,
function
(
e
)
{
var
$btn
=
$
(
e
.
target
)
if
(
!
$btn
.
hasClass
(
'btn'
))
$btn
=
$btn
.
closest
(
'.btn'
)
Plugin
.
call
(
$btn
,
'toggle'
)
if
(
!
(
$
(
e
.
target
).
is
(
'input[type="radio"]'
)
||
$
(
e
.
target
).
is
(
'input[type="checkbox"]'
)))
e
.
preventDefault
()
})
.
on
(
'focus.bs.button.data-api blur.bs.button.data-api'
,
'[data-toggle^="button"]'
,
function
(
e
)
{
$
(
e
.
target
).
closest
(
'.btn'
).
toggleClass
(
'focus'
,
/^focus
(
in
)?
$/
.
test
(
e
.
type
))
})
}(
jQuery
);
/* ========================================================================
* Bootstrap: carousel.js v3.3.6
* http://getbootstrap.com/javascript/#carousel
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// CAROUSEL CLASS DEFINITION
// =========================
var
Carousel
=
function
(
element
,
options
)
{
this
.
$element
=
$
(
element
)
this
.
$indicators
=
this
.
$element
.
find
(
'.carousel-indicators'
)
this
.
options
=
options
this
.
paused
=
null
this
.
sliding
=
null
this
.
interval
=
null
this
.
$active
=
null
this
.
$items
=
null
this
.
options
.
keyboard
&&
this
.
$element
.
on
(
'keydown.bs.carousel'
,
$
.
proxy
(
this
.
keydown
,
this
))
this
.
options
.
pause
==
'hover'
&&
!
(
'ontouchstart'
in
document
.
documentElement
)
&&
this
.
$element
.
on
(
'mouseenter.bs.carousel'
,
$
.
proxy
(
this
.
pause
,
this
))
.
on
(
'mouseleave.bs.carousel'
,
$
.
proxy
(
this
.
cycle
,
this
))
}
Carousel
.
VERSION
=
'3.3.6'
Carousel
.
TRANSITION_DURATION
=
600
Carousel
.
DEFAULTS
=
{
interval
:
5000
,
pause
:
'hover'
,
wrap
:
true
,
keyboard
:
true
}
Carousel
.
prototype
.
keydown
=
function
(
e
)
{
if
(
/input|textarea/i
.
test
(
e
.
target
.
tagName
))
return
switch
(
e
.
which
)
{
case
37
:
this
.
prev
();
break
case
39
:
this
.
next
();
break
default
:
return
}
e
.
preventDefault
()
}
Carousel
.
prototype
.
cycle
=
function
(
e
)
{
e
||
(
this
.
paused
=
false
)
this
.
interval
&&
clearInterval
(
this
.
interval
)
this
.
options
.
interval
&&
!
this
.
paused
&&
(
this
.
interval
=
setInterval
(
$
.
proxy
(
this
.
next
,
this
),
this
.
options
.
interval
))
return
this
}
Carousel
.
prototype
.
getItemIndex
=
function
(
item
)
{
this
.
$items
=
item
.
parent
().
children
(
'.item'
)
return
this
.
$items
.
index
(
item
||
this
.
$active
)
}
Carousel
.
prototype
.
getItemForDirection
=
function
(
direction
,
active
)
{
var
activeIndex
=
this
.
getItemIndex
(
active
)
var
willWrap
=
(
direction
==
'prev'
&&
activeIndex
===
0
)
||
(
direction
==
'next'
&&
activeIndex
==
(
this
.
$items
.
length
-
1
))
if
(
willWrap
&&
!
this
.
options
.
wrap
)
return
active
var
delta
=
direction
==
'prev'
?
-
1
:
1
var
itemIndex
=
(
activeIndex
+
delta
)
%
this
.
$items
.
length
return
this
.
$items
.
eq
(
itemIndex
)
}
Carousel
.
prototype
.
to
=
function
(
pos
)
{
var
that
=
this
var
activeIndex
=
this
.
getItemIndex
(
this
.
$active
=
this
.
$element
.
find
(
'.item.active'
))
if
(
pos
>
(
this
.
$items
.
length
-
1
)
||
pos
<
0
)
return
if
(
this
.
sliding
)
return
this
.
$element
.
one
(
'slid.bs.carousel'
,
function
()
{
that
.
to
(
pos
)
})
// yes, "slid"
if
(
activeIndex
==
pos
)
return
this
.
pause
().
cycle
()
return
this
.
slide
(
pos
>
activeIndex
?
'next'
:
'prev'
,
this
.
$items
.
eq
(
pos
))
}
Carousel
.
prototype
.
pause
=
function
(
e
)
{
e
||
(
this
.
paused
=
true
)
if
(
this
.
$element
.
find
(
'.next, .prev'
).
length
&&
$
.
support
.
transition
)
{
this
.
$element
.
trigger
(
$
.
support
.
transition
.
end
)
this
.
cycle
(
true
)
}
this
.
interval
=
clearInterval
(
this
.
interval
)
return
this
}
Carousel
.
prototype
.
next
=
function
()
{
if
(
this
.
sliding
)
return
return
this
.
slide
(
'next'
)
}
Carousel
.
prototype
.
prev
=
function
()
{
if
(
this
.
sliding
)
return
return
this
.
slide
(
'prev'
)
}
Carousel
.
prototype
.
slide
=
function
(
type
,
next
)
{
var
$active
=
this
.
$element
.
find
(
'.item.active'
)
var
$next
=
next
||
this
.
getItemForDirection
(
type
,
$active
)
var
isCycling
=
this
.
interval
var
direction
=
type
==
'next'
?
'left'
:
'right'
var
that
=
this
if
(
$next
.
hasClass
(
'active'
))
return
(
this
.
sliding
=
false
)
var
relatedTarget
=
$next
[
0
]
var
slideEvent
=
$
.
Event
(
'slide.bs.carousel'
,
{
relatedTarget
:
relatedTarget
,
direction
:
direction
})
this
.
$element
.
trigger
(
slideEvent
)
if
(
slideEvent
.
isDefaultPrevented
())
return
this
.
sliding
=
true
isCycling
&&
this
.
pause
()
if
(
this
.
$indicators
.
length
)
{
this
.
$indicators
.
find
(
'.active'
).
removeClass
(
'active'
)
var
$nextIndicator
=
$
(
this
.
$indicators
.
children
()[
this
.
getItemIndex
(
$next
)])
$nextIndicator
&&
$nextIndicator
.
addClass
(
'active'
)
}
var
slidEvent
=
$
.
Event
(
'slid.bs.carousel'
,
{
relatedTarget
:
relatedTarget
,
direction
:
direction
})
// yes, "slid"
if
(
$
.
support
.
transition
&&
this
.
$element
.
hasClass
(
'slide'
))
{
$next
.
addClass
(
type
)
$next
[
0
].
offsetWidth
// force reflow
$active
.
addClass
(
direction
)
$next
.
addClass
(
direction
)
$active
.
one
(
'bsTransitionEnd'
,
function
()
{
$next
.
removeClass
([
type
,
direction
].
join
(
' '
)).
addClass
(
'active'
)
$active
.
removeClass
([
'active'
,
direction
].
join
(
' '
))
that
.
sliding
=
false
setTimeout
(
function
()
{
that
.
$element
.
trigger
(
slidEvent
)
},
0
)
})
.
emulateTransitionEnd
(
Carousel
.
TRANSITION_DURATION
)
}
else
{
$active
.
removeClass
(
'active'
)
$next
.
addClass
(
'active'
)
this
.
sliding
=
false
this
.
$element
.
trigger
(
slidEvent
)
}
isCycling
&&
this
.
cycle
()
return
this
}
// CAROUSEL PLUGIN DEFINITION
// ==========================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.carousel'
)
var
options
=
$
.
extend
({},
Carousel
.
DEFAULTS
,
$this
.
data
(),
typeof
option
==
'object'
&&
option
)
var
action
=
typeof
option
==
'string'
?
option
:
options
.
slide
if
(
!
data
)
$this
.
data
(
'bs.carousel'
,
(
data
=
new
Carousel
(
this
,
options
)))
if
(
typeof
option
==
'number'
)
data
.
to
(
option
)
else
if
(
action
)
data
[
action
]()
else
if
(
options
.
interval
)
data
.
pause
().
cycle
()
})
}
var
old
=
$
.
fn
.
carousel
$
.
fn
.
carousel
=
Plugin
$
.
fn
.
carousel
.
Constructor
=
Carousel
// CAROUSEL NO CONFLICT
// ====================
$
.
fn
.
carousel
.
noConflict
=
function
()
{
$
.
fn
.
carousel
=
old
return
this
}
// CAROUSEL DATA-API
// =================
var
clickHandler
=
function
(
e
)
{
var
href
var
$this
=
$
(
this
)
var
$target
=
$
(
$this
.
attr
(
'data-target'
)
||
(
href
=
$this
.
attr
(
'href'
))
&&
href
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
''
))
// strip for ie7
if
(
!
$target
.
hasClass
(
'carousel'
))
return
var
options
=
$
.
extend
({},
$target
.
data
(),
$this
.
data
())
var
slideIndex
=
$this
.
attr
(
'data-slide-to'
)
if
(
slideIndex
)
options
.
interval
=
false
Plugin
.
call
(
$target
,
options
)
if
(
slideIndex
)
{
$target
.
data
(
'bs.carousel'
).
to
(
slideIndex
)
}
e
.
preventDefault
()
}
$
(
document
)
.
on
(
'click.bs.carousel.data-api'
,
'[data-slide]'
,
clickHandler
)
.
on
(
'click.bs.carousel.data-api'
,
'[data-slide-to]'
,
clickHandler
)
$
(
window
).
on
(
'load'
,
function
()
{
$
(
'[data-ride="carousel"]'
).
each
(
function
()
{
var
$carousel
=
$
(
this
)
Plugin
.
call
(
$carousel
,
$carousel
.
data
())
})
})
}(
jQuery
);
/* ========================================================================
* Bootstrap: collapse.js v3.3.6
* http://getbootstrap.com/javascript/#collapse
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// COLLAPSE PUBLIC CLASS DEFINITION
// ================================
var
Collapse
=
function
(
element
,
options
)
{
this
.
$element
=
$
(
element
)
this
.
options
=
$
.
extend
({},
Collapse
.
DEFAULTS
,
options
)
this
.
$trigger
=
$
(
'[data-toggle="collapse"][href="#'
+
element
.
id
+
'"],'
+
'[data-toggle="collapse"][data-target="#'
+
element
.
id
+
'"]'
)
this
.
transitioning
=
null
if
(
this
.
options
.
parent
)
{
this
.
$parent
=
this
.
getParent
()
}
else
{
this
.
addAriaAndCollapsedClass
(
this
.
$element
,
this
.
$trigger
)
}
if
(
this
.
options
.
toggle
)
this
.
toggle
()
}
Collapse
.
VERSION
=
'3.3.6'
Collapse
.
TRANSITION_DURATION
=
350
Collapse
.
DEFAULTS
=
{
toggle
:
true
}
Collapse
.
prototype
.
dimension
=
function
()
{
var
hasWidth
=
this
.
$element
.
hasClass
(
'width'
)
return
hasWidth
?
'width'
:
'height'
}
Collapse
.
prototype
.
show
=
function
()
{
if
(
this
.
transitioning
||
this
.
$element
.
hasClass
(
'in'
))
return
var
activesData
var
actives
=
this
.
$parent
&&
this
.
$parent
.
children
(
'.panel'
).
children
(
'.in, .collapsing'
)
if
(
actives
&&
actives
.
length
)
{
activesData
=
actives
.
data
(
'bs.collapse'
)
if
(
activesData
&&
activesData
.
transitioning
)
return
}
var
startEvent
=
$
.
Event
(
'show.bs.collapse'
)
this
.
$element
.
trigger
(
startEvent
)
if
(
startEvent
.
isDefaultPrevented
())
return
if
(
actives
&&
actives
.
length
)
{
Plugin
.
call
(
actives
,
'hide'
)
activesData
||
actives
.
data
(
'bs.collapse'
,
null
)
}
var
dimension
=
this
.
dimension
()
this
.
$element
.
removeClass
(
'collapse'
)
.
addClass
(
'collapsing'
)[
dimension
](
0
)
.
attr
(
'aria-expanded'
,
true
)
this
.
$trigger
.
removeClass
(
'collapsed'
)
.
attr
(
'aria-expanded'
,
true
)
this
.
transitioning
=
1
var
complete
=
function
()
{
this
.
$element
.
removeClass
(
'collapsing'
)
.
addClass
(
'collapse in'
)[
dimension
](
''
)
this
.
transitioning
=
0
this
.
$element
.
trigger
(
'shown.bs.collapse'
)
}
if
(
!
$
.
support
.
transition
)
return
complete
.
call
(
this
)
var
scrollSize
=
$
.
camelCase
([
'scroll'
,
dimension
].
join
(
'-'
))
this
.
$element
.
one
(
'bsTransitionEnd'
,
$
.
proxy
(
complete
,
this
))
.
emulateTransitionEnd
(
Collapse
.
TRANSITION_DURATION
)[
dimension
](
this
.
$element
[
0
][
scrollSize
])
}
Collapse
.
prototype
.
hide
=
function
()
{
if
(
this
.
transitioning
||
!
this
.
$element
.
hasClass
(
'in'
))
return
var
startEvent
=
$
.
Event
(
'hide.bs.collapse'
)
this
.
$element
.
trigger
(
startEvent
)
if
(
startEvent
.
isDefaultPrevented
())
return
var
dimension
=
this
.
dimension
()
this
.
$element
[
dimension
](
this
.
$element
[
dimension
]())[
0
].
offsetHeight
this
.
$element
.
addClass
(
'collapsing'
)
.
removeClass
(
'collapse in'
)
.
attr
(
'aria-expanded'
,
false
)
this
.
$trigger
.
addClass
(
'collapsed'
)
.
attr
(
'aria-expanded'
,
false
)
this
.
transitioning
=
1
var
complete
=
function
()
{
this
.
transitioning
=
0
this
.
$element
.
removeClass
(
'collapsing'
)
.
addClass
(
'collapse'
)
.
trigger
(
'hidden.bs.collapse'
)
}
if
(
!
$
.
support
.
transition
)
return
complete
.
call
(
this
)
this
.
$element
[
dimension
](
0
)
.
one
(
'bsTransitionEnd'
,
$
.
proxy
(
complete
,
this
))
.
emulateTransitionEnd
(
Collapse
.
TRANSITION_DURATION
)
}
Collapse
.
prototype
.
toggle
=
function
()
{
this
[
this
.
$element
.
hasClass
(
'in'
)
?
'hide'
:
'show'
]()
}
Collapse
.
prototype
.
getParent
=
function
()
{
return
$
(
this
.
options
.
parent
)
.
find
(
'[data-toggle="collapse"][data-parent="'
+
this
.
options
.
parent
+
'"]'
)
.
each
(
$
.
proxy
(
function
(
i
,
element
)
{
var
$element
=
$
(
element
)
this
.
addAriaAndCollapsedClass
(
getTargetFromTrigger
(
$element
),
$element
)
},
this
))
.
end
()
}
Collapse
.
prototype
.
addAriaAndCollapsedClass
=
function
(
$element
,
$trigger
)
{
var
isOpen
=
$element
.
hasClass
(
'in'
)
$element
.
attr
(
'aria-expanded'
,
isOpen
)
$trigger
.
toggleClass
(
'collapsed'
,
!
isOpen
)
.
attr
(
'aria-expanded'
,
isOpen
)
}
function
getTargetFromTrigger
(
$trigger
)
{
var
href
var
target
=
$trigger
.
attr
(
'data-target'
)
||
(
href
=
$trigger
.
attr
(
'href'
))
&&
href
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
''
)
// strip for ie7
return
$
(
target
)
}
// COLLAPSE PLUGIN DEFINITION
// ==========================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.collapse'
)
var
options
=
$
.
extend
({},
Collapse
.
DEFAULTS
,
$this
.
data
(),
typeof
option
==
'object'
&&
option
)
if
(
!
data
&&
options
.
toggle
&&
/show|hide/
.
test
(
option
))
options
.
toggle
=
false
if
(
!
data
)
$this
.
data
(
'bs.collapse'
,
(
data
=
new
Collapse
(
this
,
options
)))
if
(
typeof
option
==
'string'
)
data
[
option
]()
})
}
var
old
=
$
.
fn
.
collapse
$
.
fn
.
collapse
=
Plugin
$
.
fn
.
collapse
.
Constructor
=
Collapse
// COLLAPSE NO CONFLICT
// ====================
$
.
fn
.
collapse
.
noConflict
=
function
()
{
$
.
fn
.
collapse
=
old
return
this
}
// COLLAPSE DATA-API
// =================
$
(
document
).
on
(
'click.bs.collapse.data-api'
,
'[data-toggle="collapse"]'
,
function
(
e
)
{
var
$this
=
$
(
this
)
if
(
!
$this
.
attr
(
'data-target'
))
e
.
preventDefault
()
var
$target
=
getTargetFromTrigger
(
$this
)
var
data
=
$target
.
data
(
'bs.collapse'
)
var
option
=
data
?
'toggle'
:
$this
.
data
()
Plugin
.
call
(
$target
,
option
)
})
}(
jQuery
);
/* ========================================================================
* Bootstrap: dropdown.js v3.3.6
* http://getbootstrap.com/javascript/#dropdowns
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// DROPDOWN CLASS DEFINITION
// =========================
var
backdrop
=
'.dropdown-backdrop'
var
toggle
=
'[data-toggle="dropdown"]'
var
Dropdown
=
function
(
element
)
{
$
(
element
).
on
(
'click.bs.dropdown'
,
this
.
toggle
)
}
Dropdown
.
VERSION
=
'3.3.6'
function
getParent
(
$this
)
{
var
selector
=
$this
.
attr
(
'data-target'
)
if
(
!
selector
)
{
selector
=
$this
.
attr
(
'href'
)
selector
=
selector
&&
/#
[
A-Za-z
]
/
.
test
(
selector
)
&&
selector
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
''
)
// strip for ie7
}
var
$parent
=
selector
&&
$
(
selector
)
return
$parent
&&
$parent
.
length
?
$parent
:
$this
.
parent
()
}
function
clearMenus
(
e
)
{
if
(
e
&&
e
.
which
===
3
)
return
$
(
backdrop
).
remove
()
$
(
toggle
).
each
(
function
()
{
var
$this
=
$
(
this
)
var
$parent
=
getParent
(
$this
)
var
relatedTarget
=
{
relatedTarget
:
this
}
if
(
!
$parent
.
hasClass
(
'open'
))
return
if
(
e
&&
e
.
type
==
'click'
&&
/input|textarea/i
.
test
(
e
.
target
.
tagName
)
&&
$
.
contains
(
$parent
[
0
],
e
.
target
))
return
$parent
.
trigger
(
e
=
$
.
Event
(
'hide.bs.dropdown'
,
relatedTarget
))
if
(
e
.
isDefaultPrevented
())
return
$this
.
attr
(
'aria-expanded'
,
'false'
)
$parent
.
removeClass
(
'open'
).
trigger
(
$
.
Event
(
'hidden.bs.dropdown'
,
relatedTarget
))
})
}
Dropdown
.
prototype
.
toggle
=
function
(
e
)
{
var
$this
=
$
(
this
)
if
(
$this
.
is
(
'.disabled, :disabled'
))
return
var
$parent
=
getParent
(
$this
)
var
isActive
=
$parent
.
hasClass
(
'open'
)
clearMenus
()
if
(
!
isActive
)
{
if
(
'ontouchstart'
in
document
.
documentElement
&&
!
$parent
.
closest
(
'.navbar-nav'
).
length
)
{
// if mobile we use a backdrop because click events don't delegate
$
(
document
.
createElement
(
'div'
))
.
addClass
(
'dropdown-backdrop'
)
.
insertAfter
(
$
(
this
))
.
on
(
'click'
,
clearMenus
)
}
var
relatedTarget
=
{
relatedTarget
:
this
}
$parent
.
trigger
(
e
=
$
.
Event
(
'show.bs.dropdown'
,
relatedTarget
))
if
(
e
.
isDefaultPrevented
())
return
$this
.
trigger
(
'focus'
)
.
attr
(
'aria-expanded'
,
'true'
)
$parent
.
toggleClass
(
'open'
)
.
trigger
(
$
.
Event
(
'shown.bs.dropdown'
,
relatedTarget
))
}
return
false
}
Dropdown
.
prototype
.
keydown
=
function
(
e
)
{
if
(
!
/
(
38|40|27|32
)
/
.
test
(
e
.
which
)
||
/input|textarea/i
.
test
(
e
.
target
.
tagName
))
return
var
$this
=
$
(
this
)
e
.
preventDefault
()
e
.
stopPropagation
()
if
(
$this
.
is
(
'.disabled, :disabled'
))
return
var
$parent
=
getParent
(
$this
)
var
isActive
=
$parent
.
hasClass
(
'open'
)
if
(
!
isActive
&&
e
.
which
!=
27
||
isActive
&&
e
.
which
==
27
)
{
if
(
e
.
which
==
27
)
$parent
.
find
(
toggle
).
trigger
(
'focus'
)
return
$this
.
trigger
(
'click'
)
}
var
desc
=
' li:not(.disabled):visible a'
var
$items
=
$parent
.
find
(
'.dropdown-menu'
+
desc
)
if
(
!
$items
.
length
)
return
var
index
=
$items
.
index
(
e
.
target
)
if
(
e
.
which
==
38
&&
index
>
0
)
index
--
// up
if
(
e
.
which
==
40
&&
index
<
$items
.
length
-
1
)
index
++
// down
if
(
!~
index
)
index
=
0
$items
.
eq
(
index
).
trigger
(
'focus'
)
}
// DROPDOWN PLUGIN DEFINITION
// ==========================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.dropdown'
)
if
(
!
data
)
$this
.
data
(
'bs.dropdown'
,
(
data
=
new
Dropdown
(
this
)))
if
(
typeof
option
==
'string'
)
data
[
option
].
call
(
$this
)
})
}
var
old
=
$
.
fn
.
dropdown
$
.
fn
.
dropdown
=
Plugin
$
.
fn
.
dropdown
.
Constructor
=
Dropdown
// DROPDOWN NO CONFLICT
// ====================
$
.
fn
.
dropdown
.
noConflict
=
function
()
{
$
.
fn
.
dropdown
=
old
return
this
}
// APPLY TO STANDARD DROPDOWN ELEMENTS
// ===================================
$
(
document
)
.
on
(
'click.bs.dropdown.data-api'
,
clearMenus
)
.
on
(
'click.bs.dropdown.data-api'
,
'.dropdown form'
,
function
(
e
)
{
e
.
stopPropagation
()
})
.
on
(
'click.bs.dropdown.data-api'
,
toggle
,
Dropdown
.
prototype
.
toggle
)
.
on
(
'keydown.bs.dropdown.data-api'
,
toggle
,
Dropdown
.
prototype
.
keydown
)
.
on
(
'keydown.bs.dropdown.data-api'
,
'.dropdown-menu'
,
Dropdown
.
prototype
.
keydown
)
}(
jQuery
);
/* ========================================================================
* Bootstrap: modal.js v3.3.6
* http://getbootstrap.com/javascript/#modals
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// MODAL CLASS DEFINITION
// ======================
var
Modal
=
function
(
element
,
options
)
{
this
.
options
=
options
this
.
$body
=
$
(
document
.
body
)
this
.
$element
=
$
(
element
)
this
.
$dialog
=
this
.
$element
.
find
(
'.modal-dialog'
)
this
.
$backdrop
=
null
this
.
isShown
=
null
this
.
originalBodyPad
=
null
this
.
scrollbarWidth
=
0
this
.
ignoreBackdropClick
=
false
if
(
this
.
options
.
remote
)
{
this
.
$element
.
find
(
'.modal-content'
)
.
load
(
this
.
options
.
remote
,
$
.
proxy
(
function
()
{
this
.
$element
.
trigger
(
'loaded.bs.modal'
)
},
this
))
}
}
Modal
.
VERSION
=
'3.3.6'
Modal
.
TRANSITION_DURATION
=
300
Modal
.
BACKDROP_TRANSITION_DURATION
=
150
Modal
.
DEFAULTS
=
{
backdrop
:
true
,
keyboard
:
true
,
show
:
true
}
Modal
.
prototype
.
toggle
=
function
(
_relatedTarget
)
{
return
this
.
isShown
?
this
.
hide
()
:
this
.
show
(
_relatedTarget
)
}
Modal
.
prototype
.
show
=
function
(
_relatedTarget
)
{
var
that
=
this
var
e
=
$
.
Event
(
'show.bs.modal'
,
{
relatedTarget
:
_relatedTarget
})
this
.
$element
.
trigger
(
e
)
if
(
this
.
isShown
||
e
.
isDefaultPrevented
())
return
this
.
isShown
=
true
this
.
checkScrollbar
()
this
.
setScrollbar
()
this
.
$body
.
addClass
(
'modal-open'
)
this
.
escape
()
this
.
resize
()
this
.
$element
.
on
(
'click.dismiss.bs.modal'
,
'[data-dismiss="modal"]'
,
$
.
proxy
(
this
.
hide
,
this
))
this
.
$dialog
.
on
(
'mousedown.dismiss.bs.modal'
,
function
()
{
that
.
$element
.
one
(
'mouseup.dismiss.bs.modal'
,
function
(
e
)
{
if
(
$
(
e
.
target
).
is
(
that
.
$element
))
that
.
ignoreBackdropClick
=
true
})
})
this
.
backdrop
(
function
()
{
var
transition
=
$
.
support
.
transition
&&
that
.
$element
.
hasClass
(
'fade'
)
if
(
!
that
.
$element
.
parent
().
length
)
{
that
.
$element
.
appendTo
(
that
.
$body
)
// don't move modals dom position
}
that
.
$element
.
show
()
.
scrollTop
(
0
)
that
.
adjustDialog
()
if
(
transition
)
{
that
.
$element
[
0
].
offsetWidth
// force reflow
}
that
.
$element
.
addClass
(
'in'
)
that
.
enforceFocus
()
var
e
=
$
.
Event
(
'shown.bs.modal'
,
{
relatedTarget
:
_relatedTarget
})
transition
?
that
.
$dialog
// wait for modal to slide in
.
one
(
'bsTransitionEnd'
,
function
()
{
that
.
$element
.
trigger
(
'focus'
).
trigger
(
e
)
})
.
emulateTransitionEnd
(
Modal
.
TRANSITION_DURATION
)
:
that
.
$element
.
trigger
(
'focus'
).
trigger
(
e
)
})
}
Modal
.
prototype
.
hide
=
function
(
e
)
{
if
(
e
)
e
.
preventDefault
()
e
=
$
.
Event
(
'hide.bs.modal'
)
this
.
$element
.
trigger
(
e
)
if
(
!
this
.
isShown
||
e
.
isDefaultPrevented
())
return
this
.
isShown
=
false
this
.
escape
()
this
.
resize
()
$
(
document
).
off
(
'focusin.bs.modal'
)
this
.
$element
.
removeClass
(
'in'
)
.
off
(
'click.dismiss.bs.modal'
)
.
off
(
'mouseup.dismiss.bs.modal'
)
this
.
$dialog
.
off
(
'mousedown.dismiss.bs.modal'
)
$
.
support
.
transition
&&
this
.
$element
.
hasClass
(
'fade'
)
?
this
.
$element
.
one
(
'bsTransitionEnd'
,
$
.
proxy
(
this
.
hideModal
,
this
))
.
emulateTransitionEnd
(
Modal
.
TRANSITION_DURATION
)
:
this
.
hideModal
()
}
Modal
.
prototype
.
enforceFocus
=
function
()
{
$
(
document
)
.
off
(
'focusin.bs.modal'
)
// guard against infinite focus loop
.
on
(
'focusin.bs.modal'
,
$
.
proxy
(
function
(
e
)
{
if
(
this
.
$element
[
0
]
!==
e
.
target
&&
!
this
.
$element
.
has
(
e
.
target
).
length
)
{
this
.
$element
.
trigger
(
'focus'
)
}
},
this
))
}
Modal
.
prototype
.
escape
=
function
()
{
if
(
this
.
isShown
&&
this
.
options
.
keyboard
)
{
this
.
$element
.
on
(
'keydown.dismiss.bs.modal'
,
$
.
proxy
(
function
(
e
)
{
e
.
which
==
27
&&
this
.
hide
()
},
this
))
}
else
if
(
!
this
.
isShown
)
{
this
.
$element
.
off
(
'keydown.dismiss.bs.modal'
)
}
}
Modal
.
prototype
.
resize
=
function
()
{
if
(
this
.
isShown
)
{
$
(
window
).
on
(
'resize.bs.modal'
,
$
.
proxy
(
this
.
handleUpdate
,
this
))
}
else
{
$
(
window
).
off
(
'resize.bs.modal'
)
}
}
Modal
.
prototype
.
hideModal
=
function
()
{
var
that
=
this
this
.
$element
.
hide
()
this
.
backdrop
(
function
()
{
that
.
$body
.
removeClass
(
'modal-open'
)
that
.
resetAdjustments
()
that
.
resetScrollbar
()
that
.
$element
.
trigger
(
'hidden.bs.modal'
)
})
}
Modal
.
prototype
.
removeBackdrop
=
function
()
{
this
.
$backdrop
&&
this
.
$backdrop
.
remove
()
this
.
$backdrop
=
null
}
Modal
.
prototype
.
backdrop
=
function
(
callback
)
{
var
that
=
this
var
animate
=
this
.
$element
.
hasClass
(
'fade'
)
?
'fade'
:
''
if
(
this
.
isShown
&&
this
.
options
.
backdrop
)
{
var
doAnimate
=
$
.
support
.
transition
&&
animate
this
.
$backdrop
=
$
(
document
.
createElement
(
'div'
))
.
addClass
(
'modal-backdrop '
+
animate
)
.
appendTo
(
this
.
$body
)
this
.
$element
.
on
(
'click.dismiss.bs.modal'
,
$
.
proxy
(
function
(
e
)
{
if
(
this
.
ignoreBackdropClick
)
{
this
.
ignoreBackdropClick
=
false
return
}
if
(
e
.
target
!==
e
.
currentTarget
)
return
this
.
options
.
backdrop
==
'static'
?
this
.
$element
[
0
].
focus
()
:
this
.
hide
()
},
this
))
if
(
doAnimate
)
this
.
$backdrop
[
0
].
offsetWidth
// force reflow
this
.
$backdrop
.
addClass
(
'in'
)
if
(
!
callback
)
return
doAnimate
?
this
.
$backdrop
.
one
(
'bsTransitionEnd'
,
callback
)
.
emulateTransitionEnd
(
Modal
.
BACKDROP_TRANSITION_DURATION
)
:
callback
()
}
else
if
(
!
this
.
isShown
&&
this
.
$backdrop
)
{
this
.
$backdrop
.
removeClass
(
'in'
)
var
callbackRemove
=
function
()
{
that
.
removeBackdrop
()
callback
&&
callback
()
}
$
.
support
.
transition
&&
this
.
$element
.
hasClass
(
'fade'
)
?
this
.
$backdrop
.
one
(
'bsTransitionEnd'
,
callbackRemove
)
.
emulateTransitionEnd
(
Modal
.
BACKDROP_TRANSITION_DURATION
)
:
callbackRemove
()
}
else
if
(
callback
)
{
callback
()
}
}
// these following methods are used to handle overflowing modals
Modal
.
prototype
.
handleUpdate
=
function
()
{
this
.
adjustDialog
()
}
Modal
.
prototype
.
adjustDialog
=
function
()
{
var
modalIsOverflowing
=
this
.
$element
[
0
].
scrollHeight
>
document
.
documentElement
.
clientHeight
this
.
$element
.
css
({
paddingLeft
:
!
this
.
bodyIsOverflowing
&&
modalIsOverflowing
?
this
.
scrollbarWidth
:
''
,
paddingRight
:
this
.
bodyIsOverflowing
&&
!
modalIsOverflowing
?
this
.
scrollbarWidth
:
''
})
}
Modal
.
prototype
.
resetAdjustments
=
function
()
{
this
.
$element
.
css
({
paddingLeft
:
''
,
paddingRight
:
''
})
}
Modal
.
prototype
.
checkScrollbar
=
function
()
{
var
fullWindowWidth
=
window
.
innerWidth
if
(
!
fullWindowWidth
)
{
// workaround for missing window.innerWidth in IE8
var
documentElementRect
=
document
.
documentElement
.
getBoundingClientRect
()
fullWindowWidth
=
documentElementRect
.
right
-
Math
.
abs
(
documentElementRect
.
left
)
}
this
.
bodyIsOverflowing
=
document
.
body
.
clientWidth
<
fullWindowWidth
this
.
scrollbarWidth
=
this
.
measureScrollbar
()
}
Modal
.
prototype
.
setScrollbar
=
function
()
{
var
bodyPad
=
parseInt
((
this
.
$body
.
css
(
'padding-right'
)
||
0
),
10
)
this
.
originalBodyPad
=
document
.
body
.
style
.
paddingRight
||
''
if
(
this
.
bodyIsOverflowing
)
this
.
$body
.
css
(
'padding-right'
,
bodyPad
+
this
.
scrollbarWidth
)
}
Modal
.
prototype
.
resetScrollbar
=
function
()
{
this
.
$body
.
css
(
'padding-right'
,
this
.
originalBodyPad
)
}
Modal
.
prototype
.
measureScrollbar
=
function
()
{
// thx walsh
var
scrollDiv
=
document
.
createElement
(
'div'
)
scrollDiv
.
className
=
'modal-scrollbar-measure'
this
.
$body
.
append
(
scrollDiv
)
var
scrollbarWidth
=
scrollDiv
.
offsetWidth
-
scrollDiv
.
clientWidth
this
.
$body
[
0
].
removeChild
(
scrollDiv
)
return
scrollbarWidth
}
// MODAL PLUGIN DEFINITION
// =======================
function
Plugin
(
option
,
_relatedTarget
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.modal'
)
var
options
=
$
.
extend
({},
Modal
.
DEFAULTS
,
$this
.
data
(),
typeof
option
==
'object'
&&
option
)
if
(
!
data
)
$this
.
data
(
'bs.modal'
,
(
data
=
new
Modal
(
this
,
options
)))
if
(
typeof
option
==
'string'
)
data
[
option
](
_relatedTarget
)
else
if
(
options
.
show
)
data
.
show
(
_relatedTarget
)
})
}
var
old
=
$
.
fn
.
modal
$
.
fn
.
modal
=
Plugin
$
.
fn
.
modal
.
Constructor
=
Modal
// MODAL NO CONFLICT
// =================
$
.
fn
.
modal
.
noConflict
=
function
()
{
$
.
fn
.
modal
=
old
return
this
}
// MODAL DATA-API
// ==============
$
(
document
).
on
(
'click.bs.modal.data-api'
,
'[data-toggle="modal"]'
,
function
(
e
)
{
var
$this
=
$
(
this
)
var
href
=
$this
.
attr
(
'href'
)
var
$target
=
$
(
$this
.
attr
(
'data-target'
)
||
(
href
&&
href
.
replace
(
/.*
(?=
#
[^\s]
+$
)
/
,
''
)))
// strip for ie7
var
option
=
$target
.
data
(
'bs.modal'
)
?
'toggle'
:
$
.
extend
({
remote
:
!
/#/
.
test
(
href
)
&&
href
},
$target
.
data
(),
$this
.
data
())
if
(
$this
.
is
(
'a'
))
e
.
preventDefault
()
$target
.
one
(
'show.bs.modal'
,
function
(
showEvent
)
{
if
(
showEvent
.
isDefaultPrevented
())
return
// only register focus restorer if modal will actually get shown
$target
.
one
(
'hidden.bs.modal'
,
function
()
{
$this
.
is
(
':visible'
)
&&
$this
.
trigger
(
'focus'
)
})
})
Plugin
.
call
(
$target
,
option
,
this
)
})
}(
jQuery
);
/* ========================================================================
* Bootstrap: tooltip.js v3.3.6
* http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// TOOLTIP PUBLIC CLASS DEFINITION
// ===============================
var
Tooltip
=
function
(
element
,
options
)
{
this
.
type
=
null
this
.
options
=
null
this
.
enabled
=
null
this
.
timeout
=
null
this
.
hoverState
=
null
this
.
$element
=
null
this
.
inState
=
null
this
.
init
(
'tooltip'
,
element
,
options
)
}
Tooltip
.
VERSION
=
'3.3.6'
Tooltip
.
TRANSITION_DURATION
=
150
Tooltip
.
DEFAULTS
=
{
animation
:
true
,
placement
:
'top'
,
selector
:
false
,
template
:
'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
,
trigger
:
'hover focus'
,
title
:
''
,
delay
:
0
,
html
:
false
,
container
:
false
,
viewport
:
{
selector
:
'body'
,
padding
:
0
}
}
Tooltip
.
prototype
.
init
=
function
(
type
,
element
,
options
)
{
this
.
enabled
=
true
this
.
type
=
type
this
.
$element
=
$
(
element
)
this
.
options
=
this
.
getOptions
(
options
)
this
.
$viewport
=
this
.
options
.
viewport
&&
$
(
$
.
isFunction
(
this
.
options
.
viewport
)
?
this
.
options
.
viewport
.
call
(
this
,
this
.
$element
)
:
(
this
.
options
.
viewport
.
selector
||
this
.
options
.
viewport
))
this
.
inState
=
{
click
:
false
,
hover
:
false
,
focus
:
false
}
if
(
this
.
$element
[
0
]
instanceof
document
.
constructor
&&
!
this
.
options
.
selector
)
{
throw
new
Error
(
'`selector` option must be specified when initializing '
+
this
.
type
+
' on the window.document object!'
)
}
var
triggers
=
this
.
options
.
trigger
.
split
(
' '
)
for
(
var
i
=
triggers
.
length
;
i
--
;)
{
var
trigger
=
triggers
[
i
]
if
(
trigger
==
'click'
)
{
this
.
$element
.
on
(
'click.'
+
this
.
type
,
this
.
options
.
selector
,
$
.
proxy
(
this
.
toggle
,
this
))
}
else
if
(
trigger
!=
'manual'
)
{
var
eventIn
=
trigger
==
'hover'
?
'mouseenter'
:
'focusin'
var
eventOut
=
trigger
==
'hover'
?
'mouseleave'
:
'focusout'
this
.
$element
.
on
(
eventIn
+
'.'
+
this
.
type
,
this
.
options
.
selector
,
$
.
proxy
(
this
.
enter
,
this
))
this
.
$element
.
on
(
eventOut
+
'.'
+
this
.
type
,
this
.
options
.
selector
,
$
.
proxy
(
this
.
leave
,
this
))
}
}
this
.
options
.
selector
?
(
this
.
_options
=
$
.
extend
({},
this
.
options
,
{
trigger
:
'manual'
,
selector
:
''
}))
:
this
.
fixTitle
()
}
Tooltip
.
prototype
.
getDefaults
=
function
()
{
return
Tooltip
.
DEFAULTS
}
Tooltip
.
prototype
.
getOptions
=
function
(
options
)
{
options
=
$
.
extend
({},
this
.
getDefaults
(),
this
.
$element
.
data
(),
options
)
if
(
options
.
delay
&&
typeof
options
.
delay
==
'number'
)
{
options
.
delay
=
{
show
:
options
.
delay
,
hide
:
options
.
delay
}
}
return
options
}
Tooltip
.
prototype
.
getDelegateOptions
=
function
()
{
var
options
=
{}
var
defaults
=
this
.
getDefaults
()
this
.
_options
&&
$
.
each
(
this
.
_options
,
function
(
key
,
value
)
{
if
(
defaults
[
key
]
!=
value
)
options
[
key
]
=
value
})
return
options
}
Tooltip
.
prototype
.
enter
=
function
(
obj
)
{
var
self
=
obj
instanceof
this
.
constructor
?
obj
:
$
(
obj
.
currentTarget
).
data
(
'bs.'
+
this
.
type
)
if
(
!
self
)
{
self
=
new
this
.
constructor
(
obj
.
currentTarget
,
this
.
getDelegateOptions
())
$
(
obj
.
currentTarget
).
data
(
'bs.'
+
this
.
type
,
self
)
}
if
(
obj
instanceof
$
.
Event
)
{
self
.
inState
[
obj
.
type
==
'focusin'
?
'focus'
:
'hover'
]
=
true
}
if
(
self
.
tip
().
hasClass
(
'in'
)
||
self
.
hoverState
==
'in'
)
{
self
.
hoverState
=
'in'
return
}
clearTimeout
(
self
.
timeout
)
self
.
hoverState
=
'in'
if
(
!
self
.
options
.
delay
||
!
self
.
options
.
delay
.
show
)
return
self
.
show
()
self
.
timeout
=
setTimeout
(
function
()
{
if
(
self
.
hoverState
==
'in'
)
self
.
show
()
},
self
.
options
.
delay
.
show
)
}
Tooltip
.
prototype
.
isInStateTrue
=
function
()
{
for
(
var
key
in
this
.
inState
)
{
if
(
this
.
inState
[
key
])
return
true
}
return
false
}
Tooltip
.
prototype
.
leave
=
function
(
obj
)
{
var
self
=
obj
instanceof
this
.
constructor
?
obj
:
$
(
obj
.
currentTarget
).
data
(
'bs.'
+
this
.
type
)
if
(
!
self
)
{
self
=
new
this
.
constructor
(
obj
.
currentTarget
,
this
.
getDelegateOptions
())
$
(
obj
.
currentTarget
).
data
(
'bs.'
+
this
.
type
,
self
)
}
if
(
obj
instanceof
$
.
Event
)
{
self
.
inState
[
obj
.
type
==
'focusout'
?
'focus'
:
'hover'
]
=
false
}
if
(
self
.
isInStateTrue
())
return
clearTimeout
(
self
.
timeout
)
self
.
hoverState
=
'out'
if
(
!
self
.
options
.
delay
||
!
self
.
options
.
delay
.
hide
)
return
self
.
hide
()
self
.
timeout
=
setTimeout
(
function
()
{
if
(
self
.
hoverState
==
'out'
)
self
.
hide
()
},
self
.
options
.
delay
.
hide
)
}
Tooltip
.
prototype
.
show
=
function
()
{
var
e
=
$
.
Event
(
'show.bs.'
+
this
.
type
)
if
(
this
.
hasContent
()
&&
this
.
enabled
)
{
this
.
$element
.
trigger
(
e
)
var
inDom
=
$
.
contains
(
this
.
$element
[
0
].
ownerDocument
.
documentElement
,
this
.
$element
[
0
])
if
(
e
.
isDefaultPrevented
()
||
!
inDom
)
return
var
that
=
this
var
$tip
=
this
.
tip
()
var
tipId
=
this
.
getUID
(
this
.
type
)
this
.
setContent
()
$tip
.
attr
(
'id'
,
tipId
)
this
.
$element
.
attr
(
'aria-describedby'
,
tipId
)
if
(
this
.
options
.
animation
)
$tip
.
addClass
(
'fade'
)
var
placement
=
typeof
this
.
options
.
placement
==
'function'
?
this
.
options
.
placement
.
call
(
this
,
$tip
[
0
],
this
.
$element
[
0
])
:
this
.
options
.
placement
var
autoToken
=
/
\s?
auto
?\s?
/i
var
autoPlace
=
autoToken
.
test
(
placement
)
if
(
autoPlace
)
placement
=
placement
.
replace
(
autoToken
,
''
)
||
'top'
$tip
.
detach
()
.
css
({
top
:
0
,
left
:
0
,
display
:
'block'
})
.
addClass
(
placement
)
.
data
(
'bs.'
+
this
.
type
,
this
)
this
.
options
.
container
?
$tip
.
appendTo
(
this
.
options
.
container
)
:
$tip
.
insertAfter
(
this
.
$element
)
this
.
$element
.
trigger
(
'inserted.bs.'
+
this
.
type
)
var
pos
=
this
.
getPosition
()
var
actualWidth
=
$tip
[
0
].
offsetWidth
var
actualHeight
=
$tip
[
0
].
offsetHeight
if
(
autoPlace
)
{
var
orgPlacement
=
placement
var
viewportDim
=
this
.
getPosition
(
this
.
$viewport
)
placement
=
placement
==
'bottom'
&&
pos
.
bottom
+
actualHeight
>
viewportDim
.
bottom
?
'top'
:
placement
==
'top'
&&
pos
.
top
-
actualHeight
<
viewportDim
.
top
?
'bottom'
:
placement
==
'right'
&&
pos
.
right
+
actualWidth
>
viewportDim
.
width
?
'left'
:
placement
==
'left'
&&
pos
.
left
-
actualWidth
<
viewportDim
.
left
?
'right'
:
placement
$tip
.
removeClass
(
orgPlacement
)
.
addClass
(
placement
)
}
var
calculatedOffset
=
this
.
getCalculatedOffset
(
placement
,
pos
,
actualWidth
,
actualHeight
)
this
.
applyPlacement
(
calculatedOffset
,
placement
)
var
complete
=
function
()
{
var
prevHoverState
=
that
.
hoverState
that
.
$element
.
trigger
(
'shown.bs.'
+
that
.
type
)
that
.
hoverState
=
null
if
(
prevHoverState
==
'out'
)
that
.
leave
(
that
)
}
$
.
support
.
transition
&&
this
.
$tip
.
hasClass
(
'fade'
)
?
$tip
.
one
(
'bsTransitionEnd'
,
complete
)
.
emulateTransitionEnd
(
Tooltip
.
TRANSITION_DURATION
)
:
complete
()
}
}
Tooltip
.
prototype
.
applyPlacement
=
function
(
offset
,
placement
)
{
var
$tip
=
this
.
tip
()
var
width
=
$tip
[
0
].
offsetWidth
var
height
=
$tip
[
0
].
offsetHeight
// manually read margins because getBoundingClientRect includes difference
var
marginTop
=
parseInt
(
$tip
.
css
(
'margin-top'
),
10
)
var
marginLeft
=
parseInt
(
$tip
.
css
(
'margin-left'
),
10
)
// we must check for NaN for ie 8/9
if
(
isNaN
(
marginTop
))
marginTop
=
0
if
(
isNaN
(
marginLeft
))
marginLeft
=
0
offset
.
top
+=
marginTop
offset
.
left
+=
marginLeft
// $.fn.offset doesn't round pixel values
// so we use setOffset directly with our own function B-0
$
.
offset
.
setOffset
(
$tip
[
0
],
$
.
extend
({
using
:
function
(
props
)
{
$tip
.
css
({
top
:
Math
.
round
(
props
.
top
),
left
:
Math
.
round
(
props
.
left
)
})
}
},
offset
),
0
)
$tip
.
addClass
(
'in'
)
// check to see if placing tip in new offset caused the tip to resize itself
var
actualWidth
=
$tip
[
0
].
offsetWidth
var
actualHeight
=
$tip
[
0
].
offsetHeight
if
(
placement
==
'top'
&&
actualHeight
!=
height
)
{
offset
.
top
=
offset
.
top
+
height
-
actualHeight
}
var
delta
=
this
.
getViewportAdjustedDelta
(
placement
,
offset
,
actualWidth
,
actualHeight
)
if
(
delta
.
left
)
offset
.
left
+=
delta
.
left
else
offset
.
top
+=
delta
.
top
var
isVertical
=
/top|bottom/
.
test
(
placement
)
var
arrowDelta
=
isVertical
?
delta
.
left
*
2
-
width
+
actualWidth
:
delta
.
top
*
2
-
height
+
actualHeight
var
arrowOffsetPosition
=
isVertical
?
'offsetWidth'
:
'offsetHeight'
$tip
.
offset
(
offset
)
this
.
replaceArrow
(
arrowDelta
,
$tip
[
0
][
arrowOffsetPosition
],
isVertical
)
}
Tooltip
.
prototype
.
replaceArrow
=
function
(
delta
,
dimension
,
isVertical
)
{
this
.
arrow
()
.
css
(
isVertical
?
'left'
:
'top'
,
50
*
(
1
-
delta
/
dimension
)
+
'%'
)
.
css
(
isVertical
?
'top'
:
'left'
,
''
)
}
Tooltip
.
prototype
.
setContent
=
function
()
{
var
$tip
=
this
.
tip
()
var
title
=
this
.
getTitle
()
$tip
.
find
(
'.tooltip-inner'
)[
this
.
options
.
html
?
'html'
:
'text'
](
title
)
$tip
.
removeClass
(
'fade in top bottom left right'
)
}
Tooltip
.
prototype
.
hide
=
function
(
callback
)
{
var
that
=
this
var
$tip
=
$
(
this
.
$tip
)
var
e
=
$
.
Event
(
'hide.bs.'
+
this
.
type
)
function
complete
()
{
if
(
that
.
hoverState
!=
'in'
)
$tip
.
detach
()
that
.
$element
.
removeAttr
(
'aria-describedby'
)
.
trigger
(
'hidden.bs.'
+
that
.
type
)
callback
&&
callback
()
}
this
.
$element
.
trigger
(
e
)
if
(
e
.
isDefaultPrevented
())
return
$tip
.
removeClass
(
'in'
)
$
.
support
.
transition
&&
$tip
.
hasClass
(
'fade'
)
?
$tip
.
one
(
'bsTransitionEnd'
,
complete
)
.
emulateTransitionEnd
(
Tooltip
.
TRANSITION_DURATION
)
:
complete
()
this
.
hoverState
=
null
return
this
}
Tooltip
.
prototype
.
fixTitle
=
function
()
{
var
$e
=
this
.
$element
if
(
$e
.
attr
(
'title'
)
||
typeof
$e
.
attr
(
'data-original-title'
)
!=
'string'
)
{
$e
.
attr
(
'data-original-title'
,
$e
.
attr
(
'title'
)
||
''
).
attr
(
'title'
,
''
)
}
}
Tooltip
.
prototype
.
hasContent
=
function
()
{
return
this
.
getTitle
()
}
Tooltip
.
prototype
.
getPosition
=
function
(
$element
)
{
$element
=
$element
||
this
.
$element
var
el
=
$element
[
0
]
var
isBody
=
el
.
tagName
==
'BODY'
var
elRect
=
el
.
getBoundingClientRect
()
if
(
elRect
.
width
==
null
)
{
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
elRect
=
$
.
extend
({},
elRect
,
{
width
:
elRect
.
right
-
elRect
.
left
,
height
:
elRect
.
bottom
-
elRect
.
top
})
}
var
elOffset
=
isBody
?
{
top
:
0
,
left
:
0
}
:
$element
.
offset
()
var
scroll
=
{
scroll
:
isBody
?
document
.
documentElement
.
scrollTop
||
document
.
body
.
scrollTop
:
$element
.
scrollTop
()
}
var
outerDims
=
isBody
?
{
width
:
$
(
window
).
width
(),
height
:
$
(
window
).
height
()
}
:
null
return
$
.
extend
({},
elRect
,
scroll
,
outerDims
,
elOffset
)
}
Tooltip
.
prototype
.
getCalculatedOffset
=
function
(
placement
,
pos
,
actualWidth
,
actualHeight
)
{
return
placement
==
'bottom'
?
{
top
:
pos
.
top
+
pos
.
height
,
left
:
pos
.
left
+
pos
.
width
/
2
-
actualWidth
/
2
}
:
placement
==
'top'
?
{
top
:
pos
.
top
-
actualHeight
,
left
:
pos
.
left
+
pos
.
width
/
2
-
actualWidth
/
2
}
:
placement
==
'left'
?
{
top
:
pos
.
top
+
pos
.
height
/
2
-
actualHeight
/
2
,
left
:
pos
.
left
-
actualWidth
}
:
/* placement == 'right' */
{
top
:
pos
.
top
+
pos
.
height
/
2
-
actualHeight
/
2
,
left
:
pos
.
left
+
pos
.
width
}
}
Tooltip
.
prototype
.
getViewportAdjustedDelta
=
function
(
placement
,
pos
,
actualWidth
,
actualHeight
)
{
var
delta
=
{
top
:
0
,
left
:
0
}
if
(
!
this
.
$viewport
)
return
delta
var
viewportPadding
=
this
.
options
.
viewport
&&
this
.
options
.
viewport
.
padding
||
0
var
viewportDimensions
=
this
.
getPosition
(
this
.
$viewport
)
if
(
/right|left/
.
test
(
placement
))
{
var
topEdgeOffset
=
pos
.
top
-
viewportPadding
-
viewportDimensions
.
scroll
var
bottomEdgeOffset
=
pos
.
top
+
viewportPadding
-
viewportDimensions
.
scroll
+
actualHeight
if
(
topEdgeOffset
<
viewportDimensions
.
top
)
{
// top overflow
delta
.
top
=
viewportDimensions
.
top
-
topEdgeOffset
}
else
if
(
bottomEdgeOffset
>
viewportDimensions
.
top
+
viewportDimensions
.
height
)
{
// bottom overflow
delta
.
top
=
viewportDimensions
.
top
+
viewportDimensions
.
height
-
bottomEdgeOffset
}
}
else
{
var
leftEdgeOffset
=
pos
.
left
-
viewportPadding
var
rightEdgeOffset
=
pos
.
left
+
viewportPadding
+
actualWidth
if
(
leftEdgeOffset
<
viewportDimensions
.
left
)
{
// left overflow
delta
.
left
=
viewportDimensions
.
left
-
leftEdgeOffset
}
else
if
(
rightEdgeOffset
>
viewportDimensions
.
right
)
{
// right overflow
delta
.
left
=
viewportDimensions
.
left
+
viewportDimensions
.
width
-
rightEdgeOffset
}
}
return
delta
}
Tooltip
.
prototype
.
getTitle
=
function
()
{
var
title
var
$e
=
this
.
$element
var
o
=
this
.
options
title
=
$e
.
attr
(
'data-original-title'
)
||
(
typeof
o
.
title
==
'function'
?
o
.
title
.
call
(
$e
[
0
])
:
o
.
title
)
return
title
}
Tooltip
.
prototype
.
getUID
=
function
(
prefix
)
{
do
prefix
+=
~~
(
Math
.
random
()
*
1000000
)
while
(
document
.
getElementById
(
prefix
))
return
prefix
}
Tooltip
.
prototype
.
tip
=
function
()
{
if
(
!
this
.
$tip
)
{
this
.
$tip
=
$
(
this
.
options
.
template
)
if
(
this
.
$tip
.
length
!=
1
)
{
throw
new
Error
(
this
.
type
+
' `template` option must consist of exactly 1 top-level element!'
)
}
}
return
this
.
$tip
}
Tooltip
.
prototype
.
arrow
=
function
()
{
return
(
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
'.tooltip-arrow'
))
}
Tooltip
.
prototype
.
enable
=
function
()
{
this
.
enabled
=
true
}
Tooltip
.
prototype
.
disable
=
function
()
{
this
.
enabled
=
false
}
Tooltip
.
prototype
.
toggleEnabled
=
function
()
{
this
.
enabled
=
!
this
.
enabled
}
Tooltip
.
prototype
.
toggle
=
function
(
e
)
{
var
self
=
this
if
(
e
)
{
self
=
$
(
e
.
currentTarget
).
data
(
'bs.'
+
this
.
type
)
if
(
!
self
)
{
self
=
new
this
.
constructor
(
e
.
currentTarget
,
this
.
getDelegateOptions
())
$
(
e
.
currentTarget
).
data
(
'bs.'
+
this
.
type
,
self
)
}
}
if
(
e
)
{
self
.
inState
.
click
=
!
self
.
inState
.
click
if
(
self
.
isInStateTrue
())
self
.
enter
(
self
)
else
self
.
leave
(
self
)
}
else
{
self
.
tip
().
hasClass
(
'in'
)
?
self
.
leave
(
self
)
:
self
.
enter
(
self
)
}
}
Tooltip
.
prototype
.
destroy
=
function
()
{
var
that
=
this
clearTimeout
(
this
.
timeout
)
this
.
hide
(
function
()
{
that
.
$element
.
off
(
'.'
+
that
.
type
).
removeData
(
'bs.'
+
that
.
type
)
if
(
that
.
$tip
)
{
that
.
$tip
.
detach
()
}
that
.
$tip
=
null
that
.
$arrow
=
null
that
.
$viewport
=
null
})
}
// TOOLTIP PLUGIN DEFINITION
// =========================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.tooltip'
)
var
options
=
typeof
option
==
'object'
&&
option
if
(
!
data
&&
/destroy|hide/
.
test
(
option
))
return
if
(
!
data
)
$this
.
data
(
'bs.tooltip'
,
(
data
=
new
Tooltip
(
this
,
options
)))
if
(
typeof
option
==
'string'
)
data
[
option
]()
})
}
var
old
=
$
.
fn
.
tooltip
$
.
fn
.
tooltip
=
Plugin
$
.
fn
.
tooltip
.
Constructor
=
Tooltip
// TOOLTIP NO CONFLICT
// ===================
$
.
fn
.
tooltip
.
noConflict
=
function
()
{
$
.
fn
.
tooltip
=
old
return
this
}
}(
jQuery
);
/* ========================================================================
* Bootstrap: popover.js v3.3.6
* http://getbootstrap.com/javascript/#popovers
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// POPOVER PUBLIC CLASS DEFINITION
// ===============================
var
Popover
=
function
(
element
,
options
)
{
this
.
init
(
'popover'
,
element
,
options
)
}
if
(
!
$
.
fn
.
tooltip
)
throw
new
Error
(
'Popover requires tooltip.js'
)
Popover
.
VERSION
=
'3.3.6'
Popover
.
DEFAULTS
=
$
.
extend
({},
$
.
fn
.
tooltip
.
Constructor
.
DEFAULTS
,
{
placement
:
'right'
,
trigger
:
'click'
,
content
:
''
,
template
:
'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
})
// NOTE: POPOVER EXTENDS tooltip.js
// ================================
Popover
.
prototype
=
$
.
extend
({},
$
.
fn
.
tooltip
.
Constructor
.
prototype
)
Popover
.
prototype
.
constructor
=
Popover
Popover
.
prototype
.
getDefaults
=
function
()
{
return
Popover
.
DEFAULTS
}
Popover
.
prototype
.
setContent
=
function
()
{
var
$tip
=
this
.
tip
()
var
title
=
this
.
getTitle
()
var
content
=
this
.
getContent
()
$tip
.
find
(
'.popover-title'
)[
this
.
options
.
html
?
'html'
:
'text'
](
title
)
$tip
.
find
(
'.popover-content'
).
children
().
detach
().
end
()[
// we use append for html objects to maintain js events
this
.
options
.
html
?
(
typeof
content
==
'string'
?
'html'
:
'append'
)
:
'text'
](
content
)
$tip
.
removeClass
(
'fade top bottom left right in'
)
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
// this manually by checking the contents.
if
(
!
$tip
.
find
(
'.popover-title'
).
html
())
$tip
.
find
(
'.popover-title'
).
hide
()
}
Popover
.
prototype
.
hasContent
=
function
()
{
return
this
.
getTitle
()
||
this
.
getContent
()
}
Popover
.
prototype
.
getContent
=
function
()
{
var
$e
=
this
.
$element
var
o
=
this
.
options
return
$e
.
attr
(
'data-content'
)
||
(
typeof
o
.
content
==
'function'
?
o
.
content
.
call
(
$e
[
0
])
:
o
.
content
)
}
Popover
.
prototype
.
arrow
=
function
()
{
return
(
this
.
$arrow
=
this
.
$arrow
||
this
.
tip
().
find
(
'.arrow'
))
}
// POPOVER PLUGIN DEFINITION
// =========================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.popover'
)
var
options
=
typeof
option
==
'object'
&&
option
if
(
!
data
&&
/destroy|hide/
.
test
(
option
))
return
if
(
!
data
)
$this
.
data
(
'bs.popover'
,
(
data
=
new
Popover
(
this
,
options
)))
if
(
typeof
option
==
'string'
)
data
[
option
]()
})
}
var
old
=
$
.
fn
.
popover
$
.
fn
.
popover
=
Plugin
$
.
fn
.
popover
.
Constructor
=
Popover
// POPOVER NO CONFLICT
// ===================
$
.
fn
.
popover
.
noConflict
=
function
()
{
$
.
fn
.
popover
=
old
return
this
}
}(
jQuery
);
/* ========================================================================
* Bootstrap: scrollspy.js v3.3.6
* http://getbootstrap.com/javascript/#scrollspy
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// SCROLLSPY CLASS DEFINITION
// ==========================
function
ScrollSpy
(
element
,
options
)
{
this
.
$body
=
$
(
document
.
body
)
this
.
$scrollElement
=
$
(
element
).
is
(
document
.
body
)
?
$
(
window
)
:
$
(
element
)
this
.
options
=
$
.
extend
({},
ScrollSpy
.
DEFAULTS
,
options
)
this
.
selector
=
(
this
.
options
.
target
||
''
)
+
' .nav li > a'
this
.
offsets
=
[]
this
.
targets
=
[]
this
.
activeTarget
=
null
this
.
scrollHeight
=
0
this
.
$scrollElement
.
on
(
'scroll.bs.scrollspy'
,
$
.
proxy
(
this
.
process
,
this
))
this
.
refresh
()
this
.
process
()
}
ScrollSpy
.
VERSION
=
'3.3.6'
ScrollSpy
.
DEFAULTS
=
{
offset
:
10
}
ScrollSpy
.
prototype
.
getScrollHeight
=
function
()
{
return
this
.
$scrollElement
[
0
].
scrollHeight
||
Math
.
max
(
this
.
$body
[
0
].
scrollHeight
,
document
.
documentElement
.
scrollHeight
)
}
ScrollSpy
.
prototype
.
refresh
=
function
()
{
var
that
=
this
var
offsetMethod
=
'offset'
var
offsetBase
=
0
this
.
offsets
=
[]
this
.
targets
=
[]
this
.
scrollHeight
=
this
.
getScrollHeight
()
if
(
!
$
.
isWindow
(
this
.
$scrollElement
[
0
]))
{
offsetMethod
=
'position'
offsetBase
=
this
.
$scrollElement
.
scrollTop
()
}
this
.
$body
.
find
(
this
.
selector
)
.
map
(
function
()
{
var
$el
=
$
(
this
)
var
href
=
$el
.
data
(
'target'
)
||
$el
.
attr
(
'href'
)
var
$href
=
/^#./
.
test
(
href
)
&&
$
(
href
)
return
(
$href
&&
$href
.
length
&&
$href
.
is
(
':visible'
)
&&
[[
$href
[
offsetMethod
]().
top
+
offsetBase
,
href
]])
||
null
})
.
sort
(
function
(
a
,
b
)
{
return
a
[
0
]
-
b
[
0
]
})
.
each
(
function
()
{
that
.
offsets
.
push
(
this
[
0
])
that
.
targets
.
push
(
this
[
1
])
})
}
ScrollSpy
.
prototype
.
process
=
function
()
{
var
scrollTop
=
this
.
$scrollElement
.
scrollTop
()
+
this
.
options
.
offset
var
scrollHeight
=
this
.
getScrollHeight
()
var
maxScroll
=
this
.
options
.
offset
+
scrollHeight
-
this
.
$scrollElement
.
height
()
var
offsets
=
this
.
offsets
var
targets
=
this
.
targets
var
activeTarget
=
this
.
activeTarget
var
i
if
(
this
.
scrollHeight
!=
scrollHeight
)
{
this
.
refresh
()
}
if
(
scrollTop
>=
maxScroll
)
{
return
activeTarget
!=
(
i
=
targets
[
targets
.
length
-
1
])
&&
this
.
activate
(
i
)
}
if
(
activeTarget
&&
scrollTop
<
offsets
[
0
])
{
this
.
activeTarget
=
null
return
this
.
clear
()
}
for
(
i
=
offsets
.
length
;
i
--
;)
{
activeTarget
!=
targets
[
i
]
&&
scrollTop
>=
offsets
[
i
]
&&
(
offsets
[
i
+
1
]
===
undefined
||
scrollTop
<
offsets
[
i
+
1
])
&&
this
.
activate
(
targets
[
i
])
}
}
ScrollSpy
.
prototype
.
activate
=
function
(
target
)
{
this
.
activeTarget
=
target
this
.
clear
()
var
selector
=
this
.
selector
+
'[data-target="'
+
target
+
'"],'
+
this
.
selector
+
'[href="'
+
target
+
'"]'
var
active
=
$
(
selector
)
.
parents
(
'li'
)
.
addClass
(
'active'
)
if
(
active
.
parent
(
'.dropdown-menu'
).
length
)
{
active
=
active
.
closest
(
'li.dropdown'
)
.
addClass
(
'active'
)
}
active
.
trigger
(
'activate.bs.scrollspy'
)
}
ScrollSpy
.
prototype
.
clear
=
function
()
{
$
(
this
.
selector
)
.
parentsUntil
(
this
.
options
.
target
,
'.active'
)
.
removeClass
(
'active'
)
}
// SCROLLSPY PLUGIN DEFINITION
// ===========================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.scrollspy'
)
var
options
=
typeof
option
==
'object'
&&
option
if
(
!
data
)
$this
.
data
(
'bs.scrollspy'
,
(
data
=
new
ScrollSpy
(
this
,
options
)))
if
(
typeof
option
==
'string'
)
data
[
option
]()
})
}
var
old
=
$
.
fn
.
scrollspy
$
.
fn
.
scrollspy
=
Plugin
$
.
fn
.
scrollspy
.
Constructor
=
ScrollSpy
// SCROLLSPY NO CONFLICT
// =====================
$
.
fn
.
scrollspy
.
noConflict
=
function
()
{
$
.
fn
.
scrollspy
=
old
return
this
}
// SCROLLSPY DATA-API
// ==================
$
(
window
).
on
(
'load.bs.scrollspy.data-api'
,
function
()
{
$
(
'[data-spy="scroll"]'
).
each
(
function
()
{
var
$spy
=
$
(
this
)
Plugin
.
call
(
$spy
,
$spy
.
data
())
})
})
}(
jQuery
);
/* ========================================================================
* Bootstrap: tab.js v3.3.6
* http://getbootstrap.com/javascript/#tabs
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// TAB CLASS DEFINITION
// ====================
var
Tab
=
function
(
element
)
{
// jscs:disable requireDollarBeforejQueryAssignment
this
.
element
=
$
(
element
)
// jscs:enable requireDollarBeforejQueryAssignment
}
Tab
.
VERSION
=
'3.3.6'
Tab
.
TRANSITION_DURATION
=
150
Tab
.
prototype
.
show
=
function
()
{
var
$this
=
this
.
element
var
$ul
=
$this
.
closest
(
'ul:not(.dropdown-menu)'
)
var
selector
=
$this
.
data
(
'target'
)
if
(
!
selector
)
{
selector
=
$this
.
attr
(
'href'
)
selector
=
selector
&&
selector
.
replace
(
/.*
(?=
#
[^\s]
*$
)
/
,
''
)
// strip for ie7
}
if
(
$this
.
parent
(
'li'
).
hasClass
(
'active'
))
return
var
$previous
=
$ul
.
find
(
'.active:last a'
)
var
hideEvent
=
$
.
Event
(
'hide.bs.tab'
,
{
relatedTarget
:
$this
[
0
]
})
var
showEvent
=
$
.
Event
(
'show.bs.tab'
,
{
relatedTarget
:
$previous
[
0
]
})
$previous
.
trigger
(
hideEvent
)
$this
.
trigger
(
showEvent
)
if
(
showEvent
.
isDefaultPrevented
()
||
hideEvent
.
isDefaultPrevented
())
return
var
$target
=
$
(
selector
)
this
.
activate
(
$this
.
closest
(
'li'
),
$ul
)
this
.
activate
(
$target
,
$target
.
parent
(),
function
()
{
$previous
.
trigger
({
type
:
'hidden.bs.tab'
,
relatedTarget
:
$this
[
0
]
})
$this
.
trigger
({
type
:
'shown.bs.tab'
,
relatedTarget
:
$previous
[
0
]
})
})
}
Tab
.
prototype
.
activate
=
function
(
element
,
container
,
callback
)
{
var
$active
=
container
.
find
(
'> .active'
)
var
transition
=
callback
&&
$
.
support
.
transition
&&
(
$active
.
length
&&
$active
.
hasClass
(
'fade'
)
||
!!
container
.
find
(
'> .fade'
).
length
)
function
next
()
{
$active
.
removeClass
(
'active'
)
.
find
(
'> .dropdown-menu > .active'
)
.
removeClass
(
'active'
)
.
end
()
.
find
(
'[data-toggle="tab"]'
)
.
attr
(
'aria-expanded'
,
false
)
element
.
addClass
(
'active'
)
.
find
(
'[data-toggle="tab"]'
)
.
attr
(
'aria-expanded'
,
true
)
if
(
transition
)
{
element
[
0
].
offsetWidth
// reflow for transition
element
.
addClass
(
'in'
)
}
else
{
element
.
removeClass
(
'fade'
)
}
if
(
element
.
parent
(
'.dropdown-menu'
).
length
)
{
element
.
closest
(
'li.dropdown'
)
.
addClass
(
'active'
)
.
end
()
.
find
(
'[data-toggle="tab"]'
)
.
attr
(
'aria-expanded'
,
true
)
}
callback
&&
callback
()
}
$active
.
length
&&
transition
?
$active
.
one
(
'bsTransitionEnd'
,
next
)
.
emulateTransitionEnd
(
Tab
.
TRANSITION_DURATION
)
:
next
()
$active
.
removeClass
(
'in'
)
}
// TAB PLUGIN DEFINITION
// =====================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.tab'
)
if
(
!
data
)
$this
.
data
(
'bs.tab'
,
(
data
=
new
Tab
(
this
)))
if
(
typeof
option
==
'string'
)
data
[
option
]()
})
}
var
old
=
$
.
fn
.
tab
$
.
fn
.
tab
=
Plugin
$
.
fn
.
tab
.
Constructor
=
Tab
// TAB NO CONFLICT
// ===============
$
.
fn
.
tab
.
noConflict
=
function
()
{
$
.
fn
.
tab
=
old
return
this
}
// TAB DATA-API
// ============
var
clickHandler
=
function
(
e
)
{
e
.
preventDefault
()
Plugin
.
call
(
$
(
this
),
'show'
)
}
$
(
document
)
.
on
(
'click.bs.tab.data-api'
,
'[data-toggle="tab"]'
,
clickHandler
)
.
on
(
'click.bs.tab.data-api'
,
'[data-toggle="pill"]'
,
clickHandler
)
}(
jQuery
);
/* ========================================================================
* Bootstrap: affix.js v3.3.6
* http://getbootstrap.com/javascript/#affix
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+
function
(
$
)
{
'use strict'
;
// AFFIX CLASS DEFINITION
// ======================
var
Affix
=
function
(
element
,
options
)
{
this
.
options
=
$
.
extend
({},
Affix
.
DEFAULTS
,
options
)
this
.
$target
=
$
(
this
.
options
.
target
)
.
on
(
'scroll.bs.affix.data-api'
,
$
.
proxy
(
this
.
checkPosition
,
this
))
.
on
(
'click.bs.affix.data-api'
,
$
.
proxy
(
this
.
checkPositionWithEventLoop
,
this
))
this
.
$element
=
$
(
element
)
this
.
affixed
=
null
this
.
unpin
=
null
this
.
pinnedOffset
=
null
this
.
checkPosition
()
}
Affix
.
VERSION
=
'3.3.6'
Affix
.
RESET
=
'affix affix-top affix-bottom'
Affix
.
DEFAULTS
=
{
offset
:
0
,
target
:
window
}
Affix
.
prototype
.
getState
=
function
(
scrollHeight
,
height
,
offsetTop
,
offsetBottom
)
{
var
scrollTop
=
this
.
$target
.
scrollTop
()
var
position
=
this
.
$element
.
offset
()
var
targetHeight
=
this
.
$target
.
height
()
if
(
offsetTop
!=
null
&&
this
.
affixed
==
'top'
)
return
scrollTop
<
offsetTop
?
'top'
:
false
if
(
this
.
affixed
==
'bottom'
)
{
if
(
offsetTop
!=
null
)
return
(
scrollTop
+
this
.
unpin
<=
position
.
top
)
?
false
:
'bottom'
return
(
scrollTop
+
targetHeight
<=
scrollHeight
-
offsetBottom
)
?
false
:
'bottom'
}
var
initializing
=
this
.
affixed
==
null
var
colliderTop
=
initializing
?
scrollTop
:
position
.
top
var
colliderHeight
=
initializing
?
targetHeight
:
height
if
(
offsetTop
!=
null
&&
scrollTop
<=
offsetTop
)
return
'top'
if
(
offsetBottom
!=
null
&&
(
colliderTop
+
colliderHeight
>=
scrollHeight
-
offsetBottom
))
return
'bottom'
return
false
}
Affix
.
prototype
.
getPinnedOffset
=
function
()
{
if
(
this
.
pinnedOffset
)
return
this
.
pinnedOffset
this
.
$element
.
removeClass
(
Affix
.
RESET
).
addClass
(
'affix'
)
var
scrollTop
=
this
.
$target
.
scrollTop
()
var
position
=
this
.
$element
.
offset
()
return
(
this
.
pinnedOffset
=
position
.
top
-
scrollTop
)
}
Affix
.
prototype
.
checkPositionWithEventLoop
=
function
()
{
setTimeout
(
$
.
proxy
(
this
.
checkPosition
,
this
),
1
)
}
Affix
.
prototype
.
checkPosition
=
function
()
{
if
(
!
this
.
$element
.
is
(
':visible'
))
return
var
height
=
this
.
$element
.
height
()
var
offset
=
this
.
options
.
offset
var
offsetTop
=
offset
.
top
var
offsetBottom
=
offset
.
bottom
var
scrollHeight
=
Math
.
max
(
$
(
document
).
height
(),
$
(
document
.
body
).
height
())
if
(
typeof
offset
!=
'object'
)
offsetBottom
=
offsetTop
=
offset
if
(
typeof
offsetTop
==
'function'
)
offsetTop
=
offset
.
top
(
this
.
$element
)
if
(
typeof
offsetBottom
==
'function'
)
offsetBottom
=
offset
.
bottom
(
this
.
$element
)
var
affix
=
this
.
getState
(
scrollHeight
,
height
,
offsetTop
,
offsetBottom
)
if
(
this
.
affixed
!=
affix
)
{
if
(
this
.
unpin
!=
null
)
this
.
$element
.
css
(
'top'
,
''
)
var
affixType
=
'affix'
+
(
affix
?
'-'
+
affix
:
''
)
var
e
=
$
.
Event
(
affixType
+
'.bs.affix'
)
this
.
$element
.
trigger
(
e
)
if
(
e
.
isDefaultPrevented
())
return
this
.
affixed
=
affix
this
.
unpin
=
affix
==
'bottom'
?
this
.
getPinnedOffset
()
:
null
this
.
$element
.
removeClass
(
Affix
.
RESET
)
.
addClass
(
affixType
)
.
trigger
(
affixType
.
replace
(
'affix'
,
'affixed'
)
+
'.bs.affix'
)
}
if
(
affix
==
'bottom'
)
{
this
.
$element
.
offset
({
top
:
scrollHeight
-
height
-
offsetBottom
})
}
}
// AFFIX PLUGIN DEFINITION
// =======================
function
Plugin
(
option
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
)
var
data
=
$this
.
data
(
'bs.affix'
)
var
options
=
typeof
option
==
'object'
&&
option
if
(
!
data
)
$this
.
data
(
'bs.affix'
,
(
data
=
new
Affix
(
this
,
options
)))
if
(
typeof
option
==
'string'
)
data
[
option
]()
})
}
var
old
=
$
.
fn
.
affix
$
.
fn
.
affix
=
Plugin
$
.
fn
.
affix
.
Constructor
=
Affix
// AFFIX NO CONFLICT
// =================
$
.
fn
.
affix
.
noConflict
=
function
()
{
$
.
fn
.
affix
=
old
return
this
}
// AFFIX DATA-API
// ==============
$
(
window
).
on
(
'load'
,
function
()
{
$
(
'[data-spy="affix"]'
).
each
(
function
()
{
var
$spy
=
$
(
this
)
var
data
=
$spy
.
data
()
data
.
offset
=
data
.
offset
||
{}
if
(
data
.
offsetBottom
!=
null
)
data
.
offset
.
bottom
=
data
.
offsetBottom
if
(
data
.
offsetTop
!=
null
)
data
.
offset
.
top
=
data
.
offsetTop
Plugin
.
call
(
$spy
,
data
)
})
})
}(
jQuery
);
frontend/js/npm.js
deleted
100644 → 0
View file @
e628921
// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
require
(
'../../js/transition.js'
)
require
(
'../../js/alert.js'
)
require
(
'../../js/button.js'
)
require
(
'../../js/carousel.js'
)
require
(
'../../js/collapse.js'
)
require
(
'../../js/dropdown.js'
)
require
(
'../../js/modal.js'
)
require
(
'../../js/tooltip.js'
)
require
(
'../../js/popover.js'
)
require
(
'../../js/scrollspy.js'
)
require
(
'../../js/tab.js'
)
require
(
'../../js/affix.js'
)
\ No newline at end of file
Write
Preview
Markdown
is supported
Attach a file
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 post a comment