Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
2
2015-12-uni-ffm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CmS
2015-12-uni-ffm
Commits
fecee266
Commit
fecee266
authored
11 years ago
by
Hakim El Hattab
Browse files
Options
Downloads
Patches
Plain Diff
start work on logic for fitting an element to remaining slide height #244 #490 #561
parent
2bed5833
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
js/reveal.js
+57
-0
57 additions, 0 deletions
js/reveal.js
js/reveal.min.js
+2
-2
2 additions, 2 deletions
js/reveal.min.js
with
59 additions
and
2 deletions
js/reveal.js
+
57
−
0
View file @
fecee266
...
...
@@ -722,6 +722,56 @@ var Reveal = (function(){
}
function
getComputedCSSProperty
(
element
,
prop
)
{
if
(
window
.
getComputedStyle
)
{
return
window
.
getComputedStyle
(
element
)[
prop
];
}
else
{
return
element
.
currentStyle
?
element
.
currentStyle
(
prop
)
:
element
.
style
[
prop
];
}
}
/**
* Returns the remaining height within the parent element
* of the target after taking out the height of all
* siblings.
*
* remaining height = [parent height] - [ siblings height]
*/
function
getRemainingHeight
(
element
)
{
var
height
=
0
;
if
(
element
)
{
var
parent
=
element
.
parentNode
;
var
siblings
=
parent
.
childNodes
;
height
=
config
.
height
;
// Remove the height of each sibling
toArray
(
siblings
).
forEach
(
function
(
sibling
)
{
if
(
typeof
sibling
.
offsetHeight
===
'
number
'
&&
sibling
!==
element
)
{
var
marginTop
=
parseInt
(
getComputedCSSProperty
(
sibling
,
'
margin-top
'
),
10
);
var
marginBottom
=
parseInt
(
getComputedCSSProperty
(
sibling
,
'
margin-bottom
'
),
10
);
console
.
log
(
marginTop
,
marginBottom
);
height
-=
sibling
.
offsetHeight
+
marginTop
+
marginBottom
;
}
}
);
}
return
height
;
}
/**
* Checks if this instance is being used to print a PDF.
*/
...
...
@@ -1017,6 +1067,13 @@ var Reveal = (function(){
updateProgress
();
// Handle sizing of elements with the 'remaining-height' class
toArray
(
dom
.
slides
.
querySelectorAll
(
'
section > .remaining-height
'
)
).
forEach
(
function
(
element
)
{
element
.
style
.
height
=
getRemainingHeight
(
element
)
+
'
px
'
;
}
);
}
}
...
...
This diff is collapsed.
Click to expand it.
js/reveal.min.js
+
2
−
2
View file @
fecee266
/*!
* reveal.js 2.5.0 (2013-08-1
5
, 0
8:53
)
* reveal.js 2.5.0 (2013-08-1
6
, 0
9:29
)
* http://lab.hakim.se/reveal-js
* MIT licensed
*
* Copyright (C) 2013 Hakim El Hattab, http://hakim.se
*/
var
Reveal
=
function
(){
"
use strict
"
;
function
e
(
e
){
return
t
(),
Rt
||
Ct
?(
window
.
addEventListener
(
"
load
"
,
x
,
!
1
),
d
(
zt
,
e
),
h
(),
n
(),
void
0
):(
document
.
body
.
setAttribute
(
"
class
"
,
"
no-transforms
"
),
void
0
)}
function
t
(){
Ct
=
"
WebkitPerspective
"
in
document
.
body
.
style
||
"
MozPerspective
"
in
document
.
body
.
style
||
"
msPerspective
"
in
document
.
body
.
style
||
"
OPerspective
"
in
document
.
body
.
style
||
"
perspective
"
in
document
.
body
.
style
,
Rt
=
"
WebkitTransform
"
in
document
.
body
.
style
||
"
MozTransform
"
in
document
.
body
.
style
||
"
msTransform
"
in
document
.
body
.
style
||
"
OTransform
"
in
document
.
body
.
style
||
"
transform
"
in
document
.
body
.
style
,
It
=
navigator
.
userAgent
.
match
(
/
(
iphone|ipod|android
)
/gi
)}
function
n
(){
function
e
(){
n
.
length
&&
head
.
js
.
apply
(
null
,
n
),
r
()}
for
(
var
t
=
[],
n
=
[],
o
=
0
,
a
=
zt
.
dependencies
.
length
;
a
>
o
;
o
++
){
var
i
=
zt
.
dependencies
[
o
];(
!
i
.
condition
||
i
.
condition
())
&&
(
i
.
async
?
n
.
push
(
i
.
src
):
t
.
push
(
i
.
src
),
"
function
"
==
typeof
i
.
callback
&&
head
.
ready
(
i
.
src
.
match
(
/
([\w\d
_
\-]
*
)\.?
js$|
[^\\\/]
*$/i
)[
0
],
i
.
callback
))}
t
.
length
?(
head
.
ready
(
e
),
head
.
js
.
apply
(
null
,
t
)):
e
()}
function
r
(){
a
(),
o
(),
c
(),
B
(),
setTimeout
(
function
(){
_t
.
slides
.
classList
.
remove
(
"
no-transition
"
),
Ut
=!
0
,
b
(
"
ready
"
,{
indexh
:
Mt
,
indexv
:
Pt
,
currentSlide
:
Nt
})},
1
)}
function
o
(){
var
e
=
f
(
document
.
querySelectorAll
(
Xt
));
e
.
forEach
(
function
(
e
){
var
t
=
f
(
e
.
querySelectorAll
(
"
section
"
));
t
.
forEach
(
function
(
e
,
t
){
t
>
0
&&
e
.
classList
.
add
(
"
future
"
)})})}
function
a
(){
_t
.
theme
=
document
.
querySelector
(
"
#theme
"
),
_t
.
wrapper
=
document
.
querySelector
(
"
.reveal
"
),
_t
.
slides
=
document
.
querySelector
(
"
.reveal .slides
"
),
_t
.
slides
.
classList
.
add
(
"
no-transition
"
),
_t
.
background
=
i
(
_t
.
wrapper
,
"
div
"
,
"
backgrounds
"
,
null
),
_t
.
progress
=
i
(
_t
.
wrapper
,
"
div
"
,
"
progress
"
,
"
<span></span>
"
),
_t
.
progressbar
=
_t
.
progress
.
querySelector
(
"
span
"
),
i
(
_t
.
wrapper
,
"
aside
"
,
"
controls
"
,
'
<div class="navigate-left"></div><div class="navigate-right"></div><div class="navigate-up"></div><div class="navigate-down"></div>
'
),
i
(
_t
.
wrapper
,
"
div
"
,
"
state-background
"
,
null
),
i
(
_t
.
wrapper
,
"
div
"
,
"
pause-overlay
"
,
null
),
zt
.
controls
&&
(
_t
.
controls
=
document
.
querySelector
(
"
.reveal .controls
"
),
_t
.
controlsLeft
=
f
(
document
.
querySelectorAll
(
"
.navigate-left
"
)),
_t
.
controlsRight
=
f
(
document
.
querySelectorAll
(
"
.navigate-right
"
)),
_t
.
controlsUp
=
f
(
document
.
querySelectorAll
(
"
.navigate-up
"
)),
_t
.
controlsDown
=
f
(
document
.
querySelectorAll
(
"
.navigate-down
"
)),
_t
.
controlsPrev
=
f
(
document
.
querySelectorAll
(
"
.navigate-prev
"
)),
_t
.
controlsNext
=
f
(
document
.
querySelectorAll
(
"
.navigate-next
"
)))}
function
i
(
e
,
t
,
n
,
r
){
var
o
=
e
.
querySelector
(
"
.
"
+
n
);
return
o
||
(
o
=
document
.
createElement
(
t
),
o
.
classList
.
add
(
n
),
null
!==
r
&&
(
o
.
innerHTML
=
r
),
e
.
appendChild
(
o
)),
o
}
function
s
(){
function
e
(
e
,
t
){
var
n
=
{
background
:
e
.
getAttribute
(
"
data-background
"
),
backgroundSize
:
e
.
getAttribute
(
"
data-background-size
"
),
backgroundImage
:
e
.
getAttribute
(
"
data-background-image
"
),
backgroundColor
:
e
.
getAttribute
(
"
data-background-color
"
),
backgroundRepeat
:
e
.
getAttribute
(
"
data-background-repeat
"
),
backgroundPosition
:
e
.
getAttribute
(
"
data-background-position
"
),
backgroundTransition
:
e
.
getAttribute
(
"
data-background-transition
"
)},
r
=
document
.
createElement
(
"
div
"
);
return
r
.
className
=
"
slide-background
"
,
n
.
background
&&
(
/^
(
http|file|
\/\/)
/gi
.
test
(
n
.
background
)
||
/
\.(
png|jpg|jpeg|gif|bmp
)
$/gi
.
test
(
n
.
background
)?
r
.
style
.
backgroundImage
=
"
url(
"
+
n
.
background
+
"
)
"
:
r
.
style
.
background
=
n
.
background
),
n
.
backgroundSize
&&
(
r
.
style
.
backgroundSize
=
n
.
backgroundSize
),
n
.
backgroundImage
&&
(
r
.
style
.
backgroundImage
=
'
url("
'
+
n
.
backgroundImage
+
'
")
'
),
n
.
backgroundColor
&&
(
r
.
style
.
backgroundColor
=
n
.
backgroundColor
),
n
.
backgroundRepeat
&&
(
r
.
style
.
backgroundRepeat
=
n
.
backgroundRepeat
),
n
.
backgroundPosition
&&
(
r
.
style
.
backgroundPosition
=
n
.
backgroundPosition
),
n
.
backgroundTransition
&&
r
.
setAttribute
(
"
data-background-transition
"
,
n
.
backgroundTransition
),
t
.
appendChild
(
r
),
r
}
m
()
&&
document
.
body
.
classList
.
add
(
"
print-pdf
"
),
_t
.
background
.
innerHTML
=
""
,
_t
.
background
.
classList
.
add
(
"
no-transition
"
),
f
(
document
.
querySelectorAll
(
Xt
)).
forEach
(
function
(
t
){
var
n
;
n
=
m
()?
e
(
t
,
t
):
e
(
t
,
_t
.
background
),
f
(
t
.
querySelectorAll
(
"
section
"
)).
forEach
(
function
(
t
){
m
()?
e
(
t
,
t
):
e
(
t
,
n
)})})}
function
c
(
e
){
if
(
_t
.
wrapper
.
classList
.
remove
(
zt
.
transition
),
"
object
"
==
typeof
e
&&
d
(
zt
,
e
),
Ct
===!
1
&&
(
zt
.
transition
=
"
linear
"
),
_t
.
wrapper
.
classList
.
add
(
zt
.
transition
),
_t
.
wrapper
.
setAttribute
(
"
data-transition-speed
"
,
zt
.
transitionSpeed
),
_t
.
wrapper
.
setAttribute
(
"
data-background-transition
"
,
zt
.
backgroundTransition
),
_t
.
controls
&&
(
_t
.
controls
.
style
.
display
=
zt
.
controls
&&
_t
.
controls
?
"
block
"
:
"
none
"
),
_t
.
progress
&&
(
_t
.
progress
.
style
.
display
=
zt
.
progress
&&
_t
.
progress
?
"
block
"
:
"
none
"
),
zt
.
rtl
?
_t
.
wrapper
.
classList
.
add
(
"
rtl
"
):
_t
.
wrapper
.
classList
.
remove
(
"
rtl
"
),
zt
.
center
?
_t
.
wrapper
.
classList
.
add
(
"
center
"
):
_t
.
wrapper
.
classList
.
remove
(
"
center
"
),
zt
.
mouseWheel
?(
document
.
addEventListener
(
"
DOMMouseScroll
"
,
ht
,
!
1
),
document
.
addEventListener
(
"
mousewheel
"
,
ht
,
!
1
)):(
document
.
removeEventListener
(
"
DOMMouseScroll
"
,
ht
,
!
1
),
document
.
removeEventListener
(
"
mousewheel
"
,
ht
,
!
1
)),
zt
.
rollingLinks
?
w
():
L
(),
zt
.
previewLinks
?
E
():(
k
(),
E
(
"
[data-preview-link]
"
)),
zt
.
theme
&&
_t
.
theme
){
var
t
=
_t
.
theme
.
getAttribute
(
"
href
"
),
n
=
/
[^\/]
*
?(?=\.
css
)
/
,
r
=
t
.
match
(
n
)[
0
];
zt
.
theme
!==
r
&&
(
t
=
t
.
replace
(
n
,
zt
.
theme
),
_t
.
theme
.
setAttribute
(
"
href
"
,
t
))}
U
()}
function
l
(){
Bt
=!
0
,
window
.
addEventListener
(
"
hashchange
"
,
At
,
!
1
),
window
.
addEventListener
(
"
resize
"
,
qt
,
!
1
),
zt
.
touch
&&
(
_t
.
wrapper
.
addEventListener
(
"
touchstart
"
,
dt
,
!
1
),
_t
.
wrapper
.
addEventListener
(
"
touchmove
"
,
ft
,
!
1
),
_t
.
wrapper
.
addEventListener
(
"
touchend
"
,
vt
,
!
1
),
window
.
navigator
.
msPointerEnabled
&&
(
_t
.
wrapper
.
addEventListener
(
"
MSPointerDown
"
,
pt
,
!
1
),
_t
.
wrapper
.
addEventListener
(
"
MSPointerMove
"
,
gt
,
!
1
),
_t
.
wrapper
.
addEventListener
(
"
MSPointerUp
"
,
mt
,
!
1
))),
zt
.
keyboard
&&
document
.
addEventListener
(
"
keydown
"
,
ut
,
!
1
),
zt
.
progress
&&
_t
.
progress
&&
_t
.
progress
.
addEventListener
(
"
click
"
,
yt
,
!
1
),
zt
.
controls
&&
_t
.
controls
&&
[
"
touchstart
"
,
"
click
"
].
forEach
(
function
(
e
){
_t
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
bt
,
!
1
)}),
_t
.
controlsRight
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
wt
,
!
1
)}),
_t
.
controlsUp
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
Lt
,
!
1
)}),
_t
.
controlsDown
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
Et
,
!
1
)}),
_t
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
kt
,
!
1
)}),
_t
.
controlsNext
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
St
,
!
1
)})})}
function
u
(){
Bt
=!
1
,
document
.
removeEventListener
(
"
keydown
"
,
ut
,
!
1
),
window
.
removeEventListener
(
"
hashchange
"
,
At
,
!
1
),
window
.
removeEventListener
(
"
resize
"
,
qt
,
!
1
),
_t
.
wrapper
.
removeEventListener
(
"
touchstart
"
,
dt
,
!
1
),
_t
.
wrapper
.
removeEventListener
(
"
touchmove
"
,
ft
,
!
1
),
_t
.
wrapper
.
removeEventListener
(
"
touchend
"
,
vt
,
!
1
),
window
.
navigator
.
msPointerEnabled
&&
(
_t
.
wrapper
.
removeEventListener
(
"
MSPointerDown
"
,
pt
,
!
1
),
_t
.
wrapper
.
removeEventListener
(
"
MSPointerMove
"
,
gt
,
!
1
),
_t
.
wrapper
.
removeEventListener
(
"
MSPointerUp
"
,
mt
,
!
1
)),
zt
.
progress
&&
_t
.
progress
&&
_t
.
progress
.
removeEventListener
(
"
click
"
,
yt
,
!
1
),
zt
.
controls
&&
_t
.
controls
&&
[
"
touchstart
"
,
"
click
"
].
forEach
(
function
(
e
){
_t
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
bt
,
!
1
)}),
_t
.
controlsRight
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
wt
,
!
1
)}),
_t
.
controlsUp
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
Lt
,
!
1
)}),
_t
.
controlsDown
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
Et
,
!
1
)}),
_t
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
kt
,
!
1
)}),
_t
.
controlsNext
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
St
,
!
1
)})})}
function
d
(
e
,
t
){
for
(
var
n
in
t
)
e
[
n
]
=
t
[
n
]}
function
f
(
e
){
return
Array
.
prototype
.
slice
.
call
(
e
)}
function
v
(
e
,
t
){
var
n
=
e
.
x
-
t
.
x
,
r
=
e
.
y
-
t
.
y
;
return
Math
.
sqrt
(
n
*
n
+
r
*
r
)}
function
p
(
e
,
t
){
e
.
style
.
WebkitTransform
=
t
,
e
.
style
.
MozTransform
=
t
,
e
.
style
.
msTransform
=
t
,
e
.
style
.
OTransform
=
t
,
e
.
style
.
transform
=
t
}
function
g
(
e
){
var
t
=
0
;
if
(
e
){
var
n
=
0
;
f
(
e
.
childNodes
).
forEach
(
function
(
e
){
"
number
"
==
typeof
e
.
offsetTop
&&
e
.
style
&&
(
"
absolute
"
===
e
.
style
.
position
&&
(
n
+=
1
),
t
=
Math
.
max
(
t
,
e
.
offsetTop
+
e
.
offsetHeight
))}),
0
===
n
&&
(
t
=
e
.
offsetHeight
)}
return
t
}
function
m
(){
return
/print-pdf/gi
.
test
(
window
.
location
.
search
)}
function
h
(){
/iphone|ipod|android/gi
.
test
(
navigator
.
userAgent
)
&&!
/crios/gi
.
test
(
navigator
.
userAgent
)
&&
(
window
.
addEventListener
(
"
load
"
,
y
,
!
1
),
window
.
addEventListener
(
"
orientationchange
"
,
y
,
!
1
))}
function
y
(){
0
===
window
.
orientation
?(
document
.
documentElement
.
style
.
overflow
=
"
scroll
"
,
document
.
body
.
style
.
height
=
"
120%
"
):(
document
.
documentElement
.
style
.
overflow
=
""
,
document
.
body
.
style
.
height
=
"
100%
"
),
setTimeout
(
function
(){
window
.
scrollTo
(
0
,
1
)},
10
)}
function
b
(
e
,
t
){
var
n
=
document
.
createEvent
(
"
HTMLEvents
"
,
1
,
2
);
n
.
initEvent
(
e
,
!
0
,
!
0
),
d
(
n
,
t
),
_t
.
wrapper
.
dispatchEvent
(
n
)}
function
w
(){
if
(
Ct
&&!
(
"
msPerspective
"
in
document
.
body
.
style
))
for
(
var
e
=
document
.
querySelectorAll
(
Yt
+
"
a:not(.image)
"
),
t
=
0
,
n
=
e
.
length
;
n
>
t
;
t
++
){
var
r
=
e
[
t
];
if
(
!
(
!
r
.
textContent
||
r
.
querySelector
(
"
*
"
)
||
r
.
className
&&
r
.
classList
.
contains
(
r
,
"
roll
"
))){
var
o
=
document
.
createElement
(
"
span
"
);
o
.
setAttribute
(
"
data-title
"
,
r
.
text
),
o
.
innerHTML
=
r
.
innerHTML
,
r
.
classList
.
add
(
"
roll
"
),
r
.
innerHTML
=
""
,
r
.
appendChild
(
o
)}}}
function
L
(){
for
(
var
e
=
document
.
querySelectorAll
(
Yt
+
"
a.roll
"
),
t
=
0
,
n
=
e
.
length
;
n
>
t
;
t
++
){
var
r
=
e
[
t
],
o
=
r
.
querySelector
(
"
span
"
);
o
&&
(
r
.
classList
.
remove
(
"
roll
"
),
r
.
innerHTML
=
o
.
innerHTML
)}}
function
E
(
e
){
var
t
=
f
(
document
.
querySelectorAll
(
e
?
e
:
"
a
"
));
t
.
forEach
(
function
(
e
){
/^
(
http|www
)
/gi
.
test
(
e
.
getAttribute
(
"
href
"
))
&&
e
.
addEventListener
(
"
click
"
,
Tt
,
!
1
)})}
function
k
(){
var
e
=
f
(
document
.
querySelectorAll
(
"
a
"
));
e
.
forEach
(
function
(
e
){
/^
(
http|www
)
/gi
.
test
(
e
.
getAttribute
(
"
href
"
))
&&
e
.
removeEventListener
(
"
click
"
,
Tt
,
!
1
)})}
function
S
(
e
){
A
(),
_t
.
preview
=
document
.
createElement
(
"
div
"
),
_t
.
preview
.
classList
.
add
(
"
preview-link-overlay
"
),
_t
.
wrapper
.
appendChild
(
_t
.
preview
),
_t
.
preview
.
innerHTML
=
[
"
<header>
"
,
'
<a class="close" href="#"><span class="icon"></span></a>
'
,
'
<a class="external" href="
'
+
e
+
'
" target="_blank"><span class="icon"></span></a>
'
,
"
</header>
"
,
'
<div class="spinner"></div>
'
,
'
<div class="viewport">
'
,
'
<iframe src="
'
+
e
+
'
"></iframe>
'
,
"
</div>
"
].
join
(
""
),
_t
.
preview
.
querySelector
(
"
iframe
"
).
addEventListener
(
"
load
"
,
function
(){
_t
.
preview
.
classList
.
add
(
"
loaded
"
)},
!
1
),
_t
.
preview
.
querySelector
(
"
.close
"
).
addEventListener
(
"
click
"
,
function
(
e
){
A
(),
e
.
preventDefault
()},
!
1
),
_t
.
preview
.
querySelector
(
"
.external
"
).
addEventListener
(
"
click
"
,
function
(){
A
()},
!
1
),
setTimeout
(
function
(){
_t
.
preview
.
classList
.
add
(
"
visible
"
)},
1
)}
function
A
(){
_t
.
preview
&&
(
_t
.
preview
.
setAttribute
(
"
src
"
,
""
),
_t
.
preview
.
parentNode
.
removeChild
(
_t
.
preview
),
_t
.
preview
=
null
)}
function
q
(
e
){
var
t
=
f
(
e
);
return
t
.
forEach
(
function
(
e
,
t
){
e
.
hasAttribute
(
"
data-fragment-index
"
)
||
e
.
setAttribute
(
"
data-fragment-index
"
,
t
)}),
t
.
sort
(
function
(
e
,
t
){
return
e
.
getAttribute
(
"
data-fragment-index
"
)
-
t
.
getAttribute
(
"
data-fragment-index
"
)}),
t
}
function
x
(){
if
(
_t
.
wrapper
&&!
m
()){
var
e
=
_t
.
wrapper
.
offsetWidth
,
t
=
_t
.
wrapper
.
offsetHeight
;
e
-=
t
*
zt
.
margin
,
t
-=
t
*
zt
.
margin
;
var
n
=
zt
.
width
,
r
=
zt
.
height
;
"
string
"
==
typeof
n
&&
/%$/
.
test
(
n
)
&&
(
n
=
parseInt
(
n
,
10
)
/
100
*
e
),
"
string
"
==
typeof
r
&&
/%$/
.
test
(
r
)
&&
(
r
=
parseInt
(
r
,
10
)
/
100
*
t
),
_t
.
slides
.
style
.
width
=
n
+
"
px
"
,
_t
.
slides
.
style
.
height
=
r
+
"
px
"
,
Ft
=
Math
.
min
(
e
/
n
,
t
/
r
),
Ft
=
Math
.
max
(
Ft
,
zt
.
minScale
),
Ft
=
Math
.
min
(
Ft
,
zt
.
maxScale
),
void
0
===
_t
.
slides
.
style
.
zoom
||
navigator
.
userAgent
.
match
(
/
(
iphone|ipod|ipad|android
)
/gi
)?
p
(
_t
.
slides
,
"
translate(-50%, -50%) scale(
"
+
Ft
+
"
) translate(50%, 50%)
"
):
_t
.
slides
.
style
.
zoom
=
Ft
;
for
(
var
o
=
f
(
document
.
querySelectorAll
(
Yt
)),
a
=
0
,
i
=
o
.
length
;
i
>
a
;
a
++
){
var
s
=
o
[
a
];
"
none
"
!==
s
.
style
.
display
&&
(
s
.
style
.
top
=
zt
.
center
?
s
.
classList
.
contains
(
"
stack
"
)?
0
:
Math
.
max
(
-
(
g
(
s
)
/
2
)
-
20
,
-
r
/
2
)
+
"
px
"
:
""
)}
F
()}}
function
T
(
e
,
t
){
"
object
"
==
typeof
e
&&
"
function
"
==
typeof
e
.
setAttribute
&&
e
.
setAttribute
(
"
data-previous-indexv
"
,
t
||
0
)}
function
M
(
e
){
if
(
"
object
"
==
typeof
e
&&
"
function
"
==
typeof
e
.
setAttribute
&&
e
.
classList
.
contains
(
"
stack
"
)){
var
t
=
e
.
hasAttribute
(
"
data-start-indexv
"
)?
"
data-start-indexv
"
:
"
data-previous-indexv
"
;
return
parseInt
(
e
.
getAttribute
(
t
)
||
0
,
10
)}
return
0
}
function
P
(){
if
(
zt
.
overview
){
rt
();
var
e
=
_t
.
wrapper
.
classList
.
contains
(
"
overview
"
),
t
=
400
>
window
.
innerWidth
?
1
e3
:
2500
;
_t
.
wrapper
.
classList
.
add
(
"
overview
"
),
_t
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
),
clearTimeout
(
Zt
),
clearTimeout
(
Qt
),
Zt
=
setTimeout
(
function
(){
for
(
var
n
=
document
.
querySelectorAll
(
Xt
),
r
=
0
,
o
=
n
.
length
;
o
>
r
;
r
++
){
var
a
=
n
[
r
],
i
=
zt
.
rtl
?
-
105
:
105
;
if
(
a
.
setAttribute
(
"
data-index-h
"
,
r
),
p
(
a
,
"
translateZ(-
"
+
t
+
"
px) translate(
"
+
(
r
-
Mt
)
*
i
+
"
%, 0%)
"
),
a
.
classList
.
contains
(
"
stack
"
))
for
(
var
s
=
a
.
querySelectorAll
(
"
section
"
),
c
=
0
,
l
=
s
.
length
;
l
>
c
;
c
++
){
var
u
=
r
===
Mt
?
Pt
:
M
(
a
),
d
=
s
[
c
];
d
.
setAttribute
(
"
data-index-h
"
,
r
),
d
.
setAttribute
(
"
data-index-v
"
,
c
),
p
(
d
,
"
translate(0%,
"
+
105
*
(
c
-
u
)
+
"
%)
"
),
d
.
addEventListener
(
"
click
"
,
xt
,
!
0
)}
else
a
.
addEventListener
(
"
click
"
,
xt
,
!
0
)}
j
(),
x
(),
e
||
b
(
"
overviewshown
"
,{
indexh
:
Mt
,
indexv
:
Pt
,
currentSlide
:
Nt
})},
10
)}}
function
D
(){
if
(
zt
.
overview
){
clearTimeout
(
Zt
),
clearTimeout
(
Qt
),
_t
.
wrapper
.
classList
.
remove
(
"
overview
"
),
_t
.
wrapper
.
classList
.
add
(
"
exit-overview
"
),
Qt
=
setTimeout
(
function
(){
_t
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
)},
10
);
for
(
var
e
=
f
(
document
.
querySelectorAll
(
Yt
)),
t
=
0
,
n
=
e
.
length
;
n
>
t
;
t
++
){
var
r
=
e
[
t
];
r
.
style
.
display
=
""
,
p
(
r
,
""
),
r
.
removeEventListener
(
"
click
"
,
xt
,
!
0
)}
z
(
Mt
,
Pt
),
nt
(),
b
(
"
overviewhidden
"
,{
indexh
:
Mt
,
indexv
:
Pt
,
currentSlide
:
Nt
})}}
function
N
(
e
){
"
boolean
"
==
typeof
e
?
e
?
P
():
D
():
C
()?
D
():
P
()}
function
C
(){
return
_t
.
wrapper
.
classList
.
contains
(
"
overview
"
)}
function
R
(
e
){
return
e
=
e
?
e
:
Nt
,
e
&&!!
e
.
parentNode
.
nodeName
.
match
(
/section/i
)}
function
I
(){
var
e
=
document
.
body
,
t
=
e
.
requestFullScreen
||
e
.
webkitRequestFullscreen
||
e
.
webkitRequestFullScreen
||
e
.
mozRequestFullScreen
||
e
.
msRequestFullScreen
;
t
&&
t
.
apply
(
e
)}
function
Y
(){
var
e
=
_t
.
wrapper
.
classList
.
contains
(
"
paused
"
);
rt
(),
_t
.
wrapper
.
classList
.
add
(
"
paused
"
),
e
===!
1
&&
b
(
"
paused
"
)}
function
X
(){
var
e
=
_t
.
wrapper
.
classList
.
contains
(
"
paused
"
);
_t
.
wrapper
.
classList
.
remove
(
"
paused
"
),
nt
(),
e
&&
b
(
"
resumed
"
)}
function
H
(){
O
()?
X
():
Y
()}
function
O
(){
return
_t
.
wrapper
.
classList
.
contains
(
"
paused
"
)}
function
z
(
e
,
t
,
n
,
r
){
Dt
=
Nt
;
var
o
=
document
.
querySelectorAll
(
Xt
);
void
0
===
t
&&
(
t
=
M
(
o
[
e
])),
Dt
&&
Dt
.
parentNode
&&
Dt
.
parentNode
.
classList
.
contains
(
"
stack
"
)
&&
T
(
Dt
.
parentNode
,
Pt
);
var
a
=
jt
.
concat
();
jt
.
length
=
0
;
var
i
=
Mt
,
s
=
Pt
;
Mt
=
W
(
Xt
,
void
0
===
e
?
Mt
:
e
),
Pt
=
W
(
Ht
,
void
0
===
t
?
Pt
:
t
),
j
(),
x
();
e
:
for
(
var
c
=
0
,
l
=
jt
.
length
;
l
>
c
;
c
++
){
for
(
var
u
=
0
;
a
.
length
>
u
;
u
++
)
if
(
a
[
u
]
===
jt
[
c
]){
a
.
splice
(
u
,
1
);
continue
e
}
document
.
documentElement
.
classList
.
add
(
jt
[
c
]),
b
(
jt
[
c
])}
for
(;
a
.
length
;)
document
.
documentElement
.
classList
.
remove
(
a
.
pop
());
C
()
&&
P
();
var
d
=
o
[
Mt
],
v
=
d
.
querySelectorAll
(
"
section
"
);
if
(
Nt
=
v
[
Pt
]
||
d
,
n
!==
void
0
){
var
p
=
q
(
Nt
.
querySelectorAll
(
"
.fragment
"
));
f
(
p
).
forEach
(
function
(
e
,
t
){
n
>
t
?
e
.
classList
.
add
(
"
visible
"
):
e
.
classList
.
remove
(
"
visible
"
)})}
var
g
=
Mt
!==
i
||
Pt
!==
s
;
g
?
b
(
"
slidechanged
"
,{
indexh
:
Mt
,
indexv
:
Pt
,
previousSlide
:
Dt
,
currentSlide
:
Nt
,
origin
:
r
}):
Dt
=
null
,
Dt
&&
(
Dt
.
classList
.
remove
(
"
present
"
),
document
.
querySelector
(
Ot
).
classList
.
contains
(
"
present
"
)
&&
setTimeout
(
function
(){
var
e
,
t
=
f
(
document
.
querySelectorAll
(
Xt
+
"
.stack
"
));
for
(
e
in
t
)
t
[
e
]
&&
T
(
t
[
e
],
0
)},
0
)),
g
&&
(
Q
(
Dt
),
Z
(
Nt
)),
_
(),
F
(),
K
(),
G
()}
function
U
(){
u
(),
l
(),
x
(),
Wt
=
zt
.
autoSlide
,
nt
(),
s
(),
_
(),
F
(),
K
()}
function
W
(
e
,
t
){
var
n
=
f
(
document
.
querySelectorAll
(
e
)),
r
=
n
.
length
;
if
(
r
){
zt
.
loop
&&
(
t
%=
r
,
0
>
t
&&
(
t
=
r
+
t
)),
t
=
Math
.
max
(
Math
.
min
(
t
,
r
-
1
),
0
);
for
(
var
o
=
0
;
r
>
o
;
o
++
){
var
a
=
n
[
o
],
i
=
zt
.
rtl
&&!
R
(
a
);
if
(
a
.
classList
.
remove
(
"
past
"
),
a
.
classList
.
remove
(
"
present
"
),
a
.
classList
.
remove
(
"
future
"
),
a
.
setAttribute
(
"
hidden
"
,
""
),
t
>
o
)
a
.
classList
.
add
(
i
?
"
future
"
:
"
past
"
);
else
if
(
o
>
t
){
a
.
classList
.
add
(
i
?
"
past
"
:
"
future
"
);
for
(
var
s
=
f
(
a
.
querySelectorAll
(
"
.fragment.visible
"
));
s
.
length
;)
s
.
pop
().
classList
.
remove
(
"
visible
"
)}
a
.
querySelector
(
"
section
"
)
&&
a
.
classList
.
add
(
"
stack
"
)}
n
[
t
].
classList
.
add
(
"
present
"
),
n
[
t
].
removeAttribute
(
"
hidden
"
);
var
c
=
n
[
t
].
getAttribute
(
"
data-state
"
);
c
&&
(
jt
=
jt
.
concat
(
c
.
split
(
"
"
)));
var
l
=
n
[
t
].
getAttribute
(
"
data-autoslide
"
);
Wt
=
l
?
parseInt
(
l
,
10
):
zt
.
autoSlide
,
nt
()}
else
t
=
0
;
return
t
}
function
j
(){
var
e
,
t
,
n
=
f
(
document
.
querySelectorAll
(
Xt
)),
r
=
n
.
length
;
if
(
r
){
var
o
=
C
()?
10
:
zt
.
viewDistance
;
It
&&
(
o
=
C
()?
6
:
1
);
for
(
var
a
=
0
;
r
>
a
;
a
++
){
var
i
=
n
[
a
],
s
=
f
(
i
.
querySelectorAll
(
"
section
"
)),
c
=
s
.
length
;
if
(
e
=
Math
.
abs
((
Mt
-
a
)
%
(
r
-
o
))
||
0
,
c
){
i
.
style
.
display
=
"
block
"
;
for
(
var
l
=
M
(
i
),
u
=
0
;
c
>
u
;
u
++
){
var
d
=
s
[
u
];
t
=
a
===
Mt
?
Math
.
abs
(
Pt
-
u
):
Math
.
abs
(
u
-
l
),
d
.
style
.
display
=
e
+
t
>
o
?
"
none
"
:
"
block
"
}}
else
i
.
style
.
display
=
e
>
o
?
"
none
"
:
"
block
"
}}}
function
F
(){
if
(
zt
.
progress
&&
_t
.
progress
){
var
e
=
f
(
document
.
querySelectorAll
(
Xt
)),
t
=
document
.
querySelectorAll
(
Yt
+
"
:not(.stack)
"
).
length
,
n
=
0
;
e
:
for
(
var
r
=
0
;
e
.
length
>
r
;
r
++
){
for
(
var
o
=
e
[
r
],
a
=
f
(
o
.
querySelectorAll
(
"
section
"
)),
i
=
0
;
a
.
length
>
i
;
i
++
){
if
(
a
[
i
].
classList
.
contains
(
"
present
"
))
break
e
;
n
++
}
if
(
o
.
classList
.
contains
(
"
present
"
))
break
;
o
.
classList
.
contains
(
"
stack
"
)
===!
1
&&
n
++
}
_t
.
progressbar
.
style
.
width
=
n
/
(
t
-
1
)
*
window
.
innerWidth
+
"
px
"
}}
function
_
(){
if
(
zt
.
controls
&&
_t
.
controls
){
var
e
=
$
(),
t
=
V
();
_t
.
controlsLeft
.
concat
(
_t
.
controlsRight
).
concat
(
_t
.
controlsUp
).
concat
(
_t
.
controlsDown
).
concat
(
_t
.
controlsPrev
).
concat
(
_t
.
controlsNext
).
forEach
(
function
(
e
){
e
.
classList
.
remove
(
"
enabled
"
),
e
.
classList
.
remove
(
"
fragmented
"
)}),
e
.
left
&&
_t
.
controlsLeft
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
right
&&
_t
.
controlsRight
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
up
&&
_t
.
controlsUp
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
down
&&
_t
.
controlsDown
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
left
||
e
.
up
)
&&
_t
.
controlsPrev
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
right
||
e
.
down
)
&&
_t
.
controlsNext
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
Nt
&&
(
t
.
prev
&&
_t
.
controlsPrev
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
t
.
next
&&
_t
.
controlsNext
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
R
(
Nt
)?(
t
.
prev
&&
_t
.
controlsUp
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
t
.
next
&&
_t
.
controlsDown
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)})):(
t
.
prev
&&
_t
.
controlsLeft
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
t
.
next
&&
_t
.
controlsRight
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)})))}}
function
K
(){
f
(
_t
.
background
.
childNodes
).
forEach
(
function
(
e
,
t
){
var
n
=
zt
.
rtl
?
"
future
"
:
"
past
"
,
r
=
zt
.
rtl
?
"
past
"
:
"
future
"
;
e
.
className
=
"
slide-background
"
+
(
Mt
>
t
?
n
:
t
>
Mt
?
r
:
"
present
"
),
f
(
e
.
childNodes
).
forEach
(
function
(
e
,
t
){
e
.
className
=
"
slide-background
"
+
(
Pt
>
t
?
"
past
"
:
t
>
Pt
?
"
future
"
:
"
present
"
)})}),
setTimeout
(
function
(){
_t
.
background
.
classList
.
remove
(
"
no-transition
"
)},
1
)}
function
$
(){
var
e
=
document
.
querySelectorAll
(
Xt
),
t
=
document
.
querySelectorAll
(
Ht
),
n
=
{
left
:
Mt
>
0
||
zt
.
loop
,
right
:
e
.
length
-
1
>
Mt
||
zt
.
loop
,
up
:
Pt
>
0
,
down
:
t
.
length
-
1
>
Pt
};
if
(
zt
.
rtl
){
var
r
=
n
.
left
;
n
.
left
=
n
.
right
,
n
.
right
=
r
}
return
n
}
function
V
(){
if
(
Nt
&&
zt
.
fragments
){
var
e
=
Nt
.
querySelectorAll
(
"
.fragment
"
),
t
=
Nt
.
querySelectorAll
(
"
.fragment:not(.visible)
"
);
return
{
prev
:
e
.
length
-
t
.
length
>
0
,
next
:
!!
t
.
length
}}
return
{
prev
:
!
1
,
next
:
!
1
}}
function
Z
(
e
){
e
&&
(
f
(
e
.
querySelectorAll
(
"
video, audio
"
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-autoplay
"
)
&&
e
.
play
()}),
f
(
e
.
querySelectorAll
(
'
iframe[src*="youtube.com/embed/"]
'
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-autoplay
"
)
&&
e
.
contentWindow
.
postMessage
(
'
{"event":"command","func":"playVideo","args":""}
'
,
"
*
"
)}))}
function
Q
(
e
){
e
&&
(
f
(
e
.
querySelectorAll
(
"
video, audio
"
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-ignore
"
)
||
e
.
pause
()}),
f
(
e
.
querySelectorAll
(
'
iframe[src*="youtube.com/embed/"]
'
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-ignore
"
)
||
"
function
"
!=
typeof
e
.
contentWindow
.
postMessage
||
e
.
contentWindow
.
postMessage
(
'
{"event":"command","func":"pauseVideo","args":""}
'
,
"
*
"
)}))}
function
B
(){
var
e
=
window
.
location
.
hash
,
t
=
e
.
slice
(
2
).
split
(
"
/
"
),
n
=
e
.
replace
(
/#|
\/
/gi
,
""
);
if
(
isNaN
(
parseInt
(
t
[
0
],
10
))
&&
n
.
length
){
var
r
=
document
.
querySelector
(
"
#
"
+
n
);
if
(
r
){
var
o
=
Reveal
.
getIndices
(
r
);
z
(
o
.
h
,
o
.
v
)}
else
z
(
Mt
||
0
,
Pt
||
0
)}
else
{
var
a
=
parseInt
(
t
[
0
],
10
)
||
0
,
i
=
parseInt
(
t
[
1
],
10
)
||
0
;(
a
!==
Mt
||
i
!==
Pt
)
&&
z
(
a
,
i
)}}
function
G
(
e
){
if
(
zt
.
history
)
if
(
clearTimeout
(
Vt
),
"
number
"
==
typeof
e
)
Vt
=
setTimeout
(
G
,
e
);
else
{
var
t
=
"
/
"
;
Nt
&&
"
string
"
==
typeof
Nt
.
getAttribute
(
"
id
"
)?
t
=
"
/
"
+
Nt
.
getAttribute
(
"
id
"
):((
Mt
>
0
||
Pt
>
0
)
&&
(
t
+=
Mt
),
Pt
>
0
&&
(
t
+=
"
/
"
+
Pt
)),
window
.
location
.
hash
=
t
}}
function
J
(
e
){
var
t
,
n
=
Mt
,
r
=
Pt
;
if
(
e
){
var
o
=
R
(
e
),
a
=
o
?
e
.
parentNode
:
e
,
i
=
f
(
document
.
querySelectorAll
(
Xt
));
n
=
Math
.
max
(
i
.
indexOf
(
a
),
0
),
o
&&
(
r
=
Math
.
max
(
f
(
e
.
parentNode
.
querySelectorAll
(
"
section
"
)).
indexOf
(
e
),
0
))}
if
(
!
e
&&
Nt
){
var
s
=
Nt
.
querySelectorAll
(
"
.fragment
"
).
length
>
0
;
if
(
s
){
var
c
=
Nt
.
querySelectorAll
(
"
.fragment.visible
"
);
t
=
c
.
length
}}
return
{
h
:
n
,
v
:
r
,
f
:
t
}}
function
et
(){
if
(
Nt
&&
zt
.
fragments
){
var
e
=
q
(
Nt
.
querySelectorAll
(
"
.fragment:not(.visible)
"
));
if
(
e
.
length
){
var
t
=
e
[
0
].
getAttribute
(
"
data-fragment-index
"
);
return
e
=
Nt
.
querySelectorAll
(
'
.fragment[data-fragment-index="
'
+
t
+
'
"]
'
),
f
(
e
).
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
visible
"
)}),
b
(
"
fragmentshown
"
,{
fragment
:
e
[
0
],
fragments
:
e
}),
_
(),
!
0
}}
return
!
1
}
function
tt
(){
if
(
Nt
&&
zt
.
fragments
){
var
e
=
q
(
Nt
.
querySelectorAll
(
"
.fragment.visible
"
));
if
(
e
.
length
){
var
t
=
e
[
e
.
length
-
1
].
getAttribute
(
"
data-fragment-index
"
);
return
e
=
Nt
.
querySelectorAll
(
'
.fragment[data-fragment-index="
'
+
t
+
'
"]
'
),
f
(
e
).
forEach
(
function
(
e
){
e
.
classList
.
remove
(
"
visible
"
)}),
b
(
"
fragmenthidden
"
,{
fragment
:
e
[
0
],
fragments
:
e
}),
_
(),
!
0
}}
return
!
1
}
function
nt
(){
clearTimeout
(
$t
),
!
Wt
||
O
()
||
C
()
||
(
$t
=
setTimeout
(
lt
,
Wt
))}
function
rt
(){
clearTimeout
(
$t
)}
function
ot
(){
zt
.
rtl
?(
C
()
||
et
()
===!
1
)
&&
$
().
left
&&
z
(
Mt
+
1
):(
C
()
||
tt
()
===!
1
)
&&
$
().
left
&&
z
(
Mt
-
1
)}
function
at
(){
zt
.
rtl
?(
C
()
||
tt
()
===!
1
)
&&
$
().
right
&&
z
(
Mt
-
1
):(
C
()
||
et
()
===!
1
)
&&
$
().
right
&&
z
(
Mt
+
1
)}
function
it
(){(
C
()
||
tt
()
===!
1
)
&&
$
().
up
&&
z
(
Mt
,
Pt
-
1
)}
function
st
(){(
C
()
||
et
()
===!
1
)
&&
$
().
down
&&
z
(
Mt
,
Pt
+
1
)}
function
ct
(){
if
(
tt
()
===!
1
)
if
(
$
().
up
)
it
();
else
{
var
e
=
document
.
querySelector
(
Xt
+
"
.past:nth-child(
"
+
Mt
+
"
)
"
);
if
(
e
){
var
t
=
e
.
querySelectorAll
(
"
section
"
).
length
-
1
||
void
0
,
n
=
Mt
-
1
;
z
(
n
,
t
)}}}
function
lt
(){
et
()
===!
1
&&
(
$
().
down
?
st
():
at
()),
nt
()}
function
ut
(
e
){
document
.
activeElement
;
var
t
=!
(
!
document
.
activeElement
||!
document
.
activeElement
.
type
&&!
document
.
activeElement
.
href
&&
"
inherit
"
===
document
.
activeElement
.
contentEditable
);
if
(
!
(
t
||
e
.
shiftKey
&&
32
!==
e
.
keyCode
||
e
.
altKey
||
e
.
ctrlKey
||
e
.
metaKey
)){
if
(
O
()
&&-
1
===
[
66
,
190
,
191
].
indexOf
(
e
.
keyCode
))
return
!
1
;
var
n
=!
1
;
if
(
"
object
"
==
typeof
zt
.
keyboard
)
for
(
var
r
in
zt
.
keyboard
)
if
(
parseInt
(
r
,
10
)
===
e
.
keyCode
){
var
o
=
zt
.
keyboard
[
r
];
"
function
"
==
typeof
o
?
o
.
apply
(
null
,[
e
]):
"
string
"
==
typeof
o
&&
"
function
"
==
typeof
Reveal
[
o
]
&&
Reveal
[
o
].
call
(),
n
=!
0
}
if
(
n
===!
1
)
switch
(
n
=!
0
,
e
.
keyCode
){
case
80
:
case
33
:
ct
();
break
;
case
78
:
case
34
:
lt
();
break
;
case
72
:
case
37
:
ot
();
break
;
case
76
:
case
39
:
at
();
break
;
case
75
:
case
38
:
it
();
break
;
case
74
:
case
40
:
st
();
break
;
case
36
:
z
(
0
);
break
;
case
35
:
z
(
Number
.
MAX_VALUE
);
break
;
case
32
:
C
()?
D
():
e
.
shiftKey
?
ct
():
lt
();
break
;
case
13
:
C
()?
D
():
n
=!
1
;
break
;
case
66
:
case
190
:
case
191
:
H
();
break
;
case
70
:
I
();
break
;
default
:
n
=!
1
}
n
?
e
.
preventDefault
():
27
!==
e
.
keyCode
&&
79
!==
e
.
keyCode
||!
Ct
||
(
N
(),
e
.
preventDefault
()),
nt
()}}
function
dt
(
e
){
Gt
.
startX
=
e
.
touches
[
0
].
clientX
,
Gt
.
startY
=
e
.
touches
[
0
].
clientY
,
Gt
.
startCount
=
e
.
touches
.
length
,
2
===
e
.
touches
.
length
&&
zt
.
overview
&&
(
Gt
.
startSpan
=
v
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
Gt
.
startX
,
y
:
Gt
.
startY
}))}
function
ft
(
e
){
if
(
Gt
.
captured
)
navigator
.
userAgent
.
match
(
/android/gi
)
&&
e
.
preventDefault
();
else
{
var
t
=
e
.
touches
[
0
].
clientX
,
n
=
e
.
touches
[
0
].
clientY
;
if
(
2
===
e
.
touches
.
length
&&
2
===
Gt
.
startCount
&&
zt
.
overview
){
var
r
=
v
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
Gt
.
startX
,
y
:
Gt
.
startY
});
Math
.
abs
(
Gt
.
startSpan
-
r
)
>
Gt
.
threshold
&&
(
Gt
.
captured
=!
0
,
Gt
.
startSpan
>
r
?
P
():
D
()),
e
.
preventDefault
()}
else
if
(
1
===
e
.
touches
.
length
&&
2
!==
Gt
.
startCount
){
var
o
=
t
-
Gt
.
startX
,
a
=
n
-
Gt
.
startY
;
o
>
Gt
.
threshold
&&
Math
.
abs
(
o
)
>
Math
.
abs
(
a
)?(
Gt
.
captured
=!
0
,
ot
()):
-
Gt
.
threshold
>
o
&&
Math
.
abs
(
o
)
>
Math
.
abs
(
a
)?(
Gt
.
captured
=!
0
,
at
()):
a
>
Gt
.
threshold
?(
Gt
.
captured
=!
0
,
it
()):
-
Gt
.
threshold
>
a
&&
(
Gt
.
captured
=!
0
,
st
()),
zt
.
embedded
?(
Gt
.
captured
||
R
(
Nt
))
&&
e
.
preventDefault
():
e
.
preventDefault
()}}}
function
vt
(){
Gt
.
captured
=!
1
}
function
pt
(
e
){
e
.
pointerType
===
e
.
MSPOINTER_TYPE_TOUCH
&&
(
e
.
touches
=
[{
clientX
:
e
.
clientX
,
clientY
:
e
.
clientY
}],
dt
(
e
))}
function
gt
(
e
){
e
.
pointerType
===
e
.
MSPOINTER_TYPE_TOUCH
&&
(
e
.
touches
=
[{
clientX
:
e
.
clientX
,
clientY
:
e
.
clientY
}],
ft
(
e
))}
function
mt
(
e
){
e
.
pointerType
===
e
.
MSPOINTER_TYPE_TOUCH
&&
(
e
.
touches
=
[{
clientX
:
e
.
clientX
,
clientY
:
e
.
clientY
}],
vt
(
e
))}
function
ht
(
e
){
if
(
Date
.
now
()
-
Kt
>
600
){
Kt
=
Date
.
now
();
var
t
=
e
.
detail
||-
e
.
wheelDelta
;
t
>
0
?
lt
():
ct
()}}
function
yt
(
e
){
e
.
preventDefault
();
var
t
=
f
(
document
.
querySelectorAll
(
Xt
)).
length
,
n
=
Math
.
floor
(
e
.
clientX
/
_t
.
wrapper
.
offsetWidth
*
t
);
z
(
n
)}
function
bt
(
e
){
e
.
preventDefault
(),
ot
()}
function
wt
(
e
){
e
.
preventDefault
(),
at
()}
function
Lt
(
e
){
e
.
preventDefault
(),
it
()}
function
Et
(
e
){
e
.
preventDefault
(),
st
()}
function
kt
(
e
){
e
.
preventDefault
(),
ct
()}
function
St
(
e
){
e
.
preventDefault
(),
lt
()}
function
At
(){
B
()}
function
qt
(){
x
()}
function
xt
(
e
){
if
(
Bt
&&
C
()){
e
.
preventDefault
();
for
(
var
t
=
e
.
target
;
t
&&!
t
.
nodeName
.
match
(
/section/gi
);)
t
=
t
.
parentNode
;
if
(
t
&&!
t
.
classList
.
contains
(
"
disabled
"
)
&&
(
D
(),
t
.
nodeName
.
match
(
/section/gi
))){
var
n
=
parseInt
(
t
.
getAttribute
(
"
data-index-h
"
),
10
),
r
=
parseInt
(
t
.
getAttribute
(
"
data-index-v
"
),
10
);
z
(
n
,
r
)}}}
function
Tt
(
e
){
var
t
=
e
.
target
.
getAttribute
(
"
href
"
);
t
&&
(
S
(
t
),
e
.
preventDefault
())}
var
Mt
,
Pt
,
Dt
,
Nt
,
Ct
,
Rt
,
It
,
Yt
=
"
.reveal .slides section
"
,
Xt
=
"
.reveal .slides>section
"
,
Ht
=
"
.reveal .slides>section.present>section
"
,
Ot
=
"
.reveal .slides>section:first-child
"
,
zt
=
{
width
:
960
,
height
:
700
,
margin
:.
1
,
minScale
:.
2
,
maxScale
:
1
,
controls
:
!
0
,
progress
:
!
0
,
history
:
!
1
,
keyboard
:
!
0
,
overview
:
!
0
,
center
:
!
0
,
touch
:
!
0
,
loop
:
!
1
,
rtl
:
!
1
,
fragments
:
!
0
,
embedded
:
!
1
,
autoSlide
:
0
,
mouseWheel
:
!
1
,
rollingLinks
:
!
1
,
previewLinks
:
!
1
,
theme
:
null
,
transition
:
"
default
"
,
transitionSpeed
:
"
default
"
,
backgroundTransition
:
"
default
"
,
viewDistance
:
3
,
dependencies
:[]},
Ut
=!
1
,
Wt
=
0
,
jt
=
[],
Ft
=
1
,
_t
=
{},
Kt
=
0
,
$t
=
0
,
Vt
=
0
,
Zt
=
0
,
Qt
=
0
,
Bt
=!
1
,
Gt
=
{
startX
:
0
,
startY
:
0
,
startSpan
:
0
,
startCount
:
0
,
captured
:
!
1
,
threshold
:
40
};
return
{
initialize
:
e
,
configure
:
c
,
sync
:
U
,
slide
:
z
,
left
:
ot
,
right
:
at
,
up
:
it
,
down
:
st
,
prev
:
ct
,
next
:
lt
,
prevFragment
:
tt
,
nextFragment
:
et
,
navigateTo
:
z
,
navigateLeft
:
ot
,
navigateRight
:
at
,
navigateUp
:
it
,
navigateDown
:
st
,
navigatePrev
:
ct
,
navigateNext
:
lt
,
layout
:
x
,
availableRoutes
:
$
,
availableFragments
:
V
,
toggleOverview
:
N
,
togglePause
:
H
,
isOverview
:
C
,
isPaused
:
O
,
addEventListeners
:
l
,
removeEventListeners
:
u
,
getIndices
:
J
,
getSlide
:
function
(
e
,
t
){
var
n
=
document
.
querySelectorAll
(
Xt
)[
e
],
r
=
n
&&
n
.
querySelectorAll
(
"
section
"
);
return
t
!==
void
0
?
r
?
r
[
t
]:
void
0
:
n
},
getPreviousSlide
:
function
(){
return
Dt
},
getCurrentSlide
:
function
(){
return
Nt
},
getScale
:
function
(){
return
Ft
},
getConfig
:
function
(){
return
zt
},
getQueryHash
:
function
(){
var
e
=
{};
return
location
.
search
.
replace
(
/
[
A-Z0-9
]
+
?
=
(\w
*
)
/gi
,
function
(
t
){
e
[
t
.
split
(
"
=
"
).
shift
()]
=
t
.
split
(
"
=
"
).
pop
()}),
e
},
isFirstSlide
:
function
(){
return
null
==
document
.
querySelector
(
Yt
+
"
.past
"
)?
!
0
:
!
1
},
isLastSlide
:
function
(){
return
Nt
&&
Nt
.
classList
.
contains
(
"
.stack
"
)?
null
==
Nt
.
querySelector
(
Yt
+
"
.future
"
)?
!
0
:
!
1
:
null
==
document
.
querySelector
(
Yt
+
"
.future
"
)?
!
0
:
!
1
},
isReady
:
function
(){
return
Ut
},
addEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
_t
.
wrapper
||
document
.
querySelector
(
"
.reveal
"
)).
addEventListener
(
e
,
t
,
n
)},
removeEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
_t
.
wrapper
||
document
.
querySelector
(
"
.reveal
"
)).
removeEventListener
(
e
,
t
,
n
)}}}();
\ No newline at end of file
var
Reveal
=
function
(){
"
use strict
"
;
function
e
(
e
){
return
t
(),
Ht
||
It
?(
window
.
addEventListener
(
"
load
"
,
M
,
!
1
),
d
(
Wt
,
e
),
b
(),
n
(),
void
0
):(
document
.
body
.
setAttribute
(
"
class
"
,
"
no-transforms
"
),
void
0
)}
function
t
(){
It
=
"
WebkitPerspective
"
in
document
.
body
.
style
||
"
MozPerspective
"
in
document
.
body
.
style
||
"
msPerspective
"
in
document
.
body
.
style
||
"
OPerspective
"
in
document
.
body
.
style
||
"
perspective
"
in
document
.
body
.
style
,
Ht
=
"
WebkitTransform
"
in
document
.
body
.
style
||
"
MozTransform
"
in
document
.
body
.
style
||
"
msTransform
"
in
document
.
body
.
style
||
"
OTransform
"
in
document
.
body
.
style
||
"
transform
"
in
document
.
body
.
style
,
Yt
=
navigator
.
userAgent
.
match
(
/
(
iphone|ipod|android
)
/gi
)}
function
n
(){
function
e
(){
n
.
length
&&
head
.
js
.
apply
(
null
,
n
),
r
()}
for
(
var
t
=
[],
n
=
[],
o
=
0
,
a
=
Wt
.
dependencies
.
length
;
a
>
o
;
o
++
){
var
i
=
Wt
.
dependencies
[
o
];(
!
i
.
condition
||
i
.
condition
())
&&
(
i
.
async
?
n
.
push
(
i
.
src
):
t
.
push
(
i
.
src
),
"
function
"
==
typeof
i
.
callback
&&
head
.
ready
(
i
.
src
.
match
(
/
([\w\d
_
\-]
*
)\.?
js$|
[^\\\/]
*$/i
)[
0
],
i
.
callback
))}
t
.
length
?(
head
.
ready
(
e
),
head
.
js
.
apply
(
null
,
t
)):
e
()}
function
r
(){
a
(),
o
(),
c
(),
J
(),
setTimeout
(
function
(){
$t
.
slides
.
classList
.
remove
(
"
no-transition
"
),
jt
=!
0
,
L
(
"
ready
"
,{
indexh
:
Pt
,
indexv
:
Dt
,
currentSlide
:
Rt
})},
1
)}
function
o
(){
var
e
=
f
(
document
.
querySelectorAll
(
Ot
));
e
.
forEach
(
function
(
e
){
var
t
=
f
(
e
.
querySelectorAll
(
"
section
"
));
t
.
forEach
(
function
(
e
,
t
){
t
>
0
&&
e
.
classList
.
add
(
"
future
"
)})})}
function
a
(){
$t
.
theme
=
document
.
querySelector
(
"
#theme
"
),
$t
.
wrapper
=
document
.
querySelector
(
"
.reveal
"
),
$t
.
slides
=
document
.
querySelector
(
"
.reveal .slides
"
),
$t
.
slides
.
classList
.
add
(
"
no-transition
"
),
$t
.
background
=
i
(
$t
.
wrapper
,
"
div
"
,
"
backgrounds
"
,
null
),
$t
.
progress
=
i
(
$t
.
wrapper
,
"
div
"
,
"
progress
"
,
"
<span></span>
"
),
$t
.
progressbar
=
$t
.
progress
.
querySelector
(
"
span
"
),
i
(
$t
.
wrapper
,
"
aside
"
,
"
controls
"
,
'
<div class="navigate-left"></div><div class="navigate-right"></div><div class="navigate-up"></div><div class="navigate-down"></div>
'
),
i
(
$t
.
wrapper
,
"
div
"
,
"
state-background
"
,
null
),
i
(
$t
.
wrapper
,
"
div
"
,
"
pause-overlay
"
,
null
),
Wt
.
controls
&&
(
$t
.
controls
=
document
.
querySelector
(
"
.reveal .controls
"
),
$t
.
controlsLeft
=
f
(
document
.
querySelectorAll
(
"
.navigate-left
"
)),
$t
.
controlsRight
=
f
(
document
.
querySelectorAll
(
"
.navigate-right
"
)),
$t
.
controlsUp
=
f
(
document
.
querySelectorAll
(
"
.navigate-up
"
)),
$t
.
controlsDown
=
f
(
document
.
querySelectorAll
(
"
.navigate-down
"
)),
$t
.
controlsPrev
=
f
(
document
.
querySelectorAll
(
"
.navigate-prev
"
)),
$t
.
controlsNext
=
f
(
document
.
querySelectorAll
(
"
.navigate-next
"
)))}
function
i
(
e
,
t
,
n
,
r
){
var
o
=
e
.
querySelector
(
"
.
"
+
n
);
return
o
||
(
o
=
document
.
createElement
(
t
),
o
.
classList
.
add
(
n
),
null
!==
r
&&
(
o
.
innerHTML
=
r
),
e
.
appendChild
(
o
)),
o
}
function
s
(){
function
e
(
e
,
t
){
var
n
=
{
background
:
e
.
getAttribute
(
"
data-background
"
),
backgroundSize
:
e
.
getAttribute
(
"
data-background-size
"
),
backgroundImage
:
e
.
getAttribute
(
"
data-background-image
"
),
backgroundColor
:
e
.
getAttribute
(
"
data-background-color
"
),
backgroundRepeat
:
e
.
getAttribute
(
"
data-background-repeat
"
),
backgroundPosition
:
e
.
getAttribute
(
"
data-background-position
"
),
backgroundTransition
:
e
.
getAttribute
(
"
data-background-transition
"
)},
r
=
document
.
createElement
(
"
div
"
);
return
r
.
className
=
"
slide-background
"
,
n
.
background
&&
(
/^
(
http|file|
\/\/)
/gi
.
test
(
n
.
background
)
||
/
\.(
png|jpg|jpeg|gif|bmp
)
$/gi
.
test
(
n
.
background
)?
r
.
style
.
backgroundImage
=
"
url(
"
+
n
.
background
+
"
)
"
:
r
.
style
.
background
=
n
.
background
),
n
.
backgroundSize
&&
(
r
.
style
.
backgroundSize
=
n
.
backgroundSize
),
n
.
backgroundImage
&&
(
r
.
style
.
backgroundImage
=
'
url("
'
+
n
.
backgroundImage
+
'
")
'
),
n
.
backgroundColor
&&
(
r
.
style
.
backgroundColor
=
n
.
backgroundColor
),
n
.
backgroundRepeat
&&
(
r
.
style
.
backgroundRepeat
=
n
.
backgroundRepeat
),
n
.
backgroundPosition
&&
(
r
.
style
.
backgroundPosition
=
n
.
backgroundPosition
),
n
.
backgroundTransition
&&
r
.
setAttribute
(
"
data-background-transition
"
,
n
.
backgroundTransition
),
t
.
appendChild
(
r
),
r
}
y
()
&&
document
.
body
.
classList
.
add
(
"
print-pdf
"
),
$t
.
background
.
innerHTML
=
""
,
$t
.
background
.
classList
.
add
(
"
no-transition
"
),
f
(
document
.
querySelectorAll
(
Ot
)).
forEach
(
function
(
t
){
var
n
;
n
=
y
()?
e
(
t
,
t
):
e
(
t
,
$t
.
background
),
f
(
t
.
querySelectorAll
(
"
section
"
)).
forEach
(
function
(
t
){
y
()?
e
(
t
,
t
):
e
(
t
,
n
)})})}
function
c
(
e
){
if
(
$t
.
wrapper
.
classList
.
remove
(
Wt
.
transition
),
"
object
"
==
typeof
e
&&
d
(
Wt
,
e
),
It
===!
1
&&
(
Wt
.
transition
=
"
linear
"
),
$t
.
wrapper
.
classList
.
add
(
Wt
.
transition
),
$t
.
wrapper
.
setAttribute
(
"
data-transition-speed
"
,
Wt
.
transitionSpeed
),
$t
.
wrapper
.
setAttribute
(
"
data-background-transition
"
,
Wt
.
backgroundTransition
),
$t
.
controls
&&
(
$t
.
controls
.
style
.
display
=
Wt
.
controls
&&
$t
.
controls
?
"
block
"
:
"
none
"
),
$t
.
progress
&&
(
$t
.
progress
.
style
.
display
=
Wt
.
progress
&&
$t
.
progress
?
"
block
"
:
"
none
"
),
Wt
.
rtl
?
$t
.
wrapper
.
classList
.
add
(
"
rtl
"
):
$t
.
wrapper
.
classList
.
remove
(
"
rtl
"
),
Wt
.
center
?
$t
.
wrapper
.
classList
.
add
(
"
center
"
):
$t
.
wrapper
.
classList
.
remove
(
"
center
"
),
Wt
.
mouseWheel
?(
document
.
addEventListener
(
"
DOMMouseScroll
"
,
bt
,
!
1
),
document
.
addEventListener
(
"
mousewheel
"
,
bt
,
!
1
)):(
document
.
removeEventListener
(
"
DOMMouseScroll
"
,
bt
,
!
1
),
document
.
removeEventListener
(
"
mousewheel
"
,
bt
,
!
1
)),
Wt
.
rollingLinks
?
E
():
k
(),
Wt
.
previewLinks
?
S
():(
A
(),
S
(
"
[data-preview-link]
"
)),
Wt
.
theme
&&
$t
.
theme
){
var
t
=
$t
.
theme
.
getAttribute
(
"
href
"
),
n
=
/
[^\/]
*
?(?=\.
css
)
/
,
r
=
t
.
match
(
n
)[
0
];
Wt
.
theme
!==
r
&&
(
t
=
t
.
replace
(
n
,
Wt
.
theme
),
$t
.
theme
.
setAttribute
(
"
href
"
,
t
))}
j
()}
function
l
(){
Jt
=!
0
,
window
.
addEventListener
(
"
hashchange
"
,
xt
,
!
1
),
window
.
addEventListener
(
"
resize
"
,
Tt
,
!
1
),
Wt
.
touch
&&
(
$t
.
wrapper
.
addEventListener
(
"
touchstart
"
,
vt
,
!
1
),
$t
.
wrapper
.
addEventListener
(
"
touchmove
"
,
pt
,
!
1
),
$t
.
wrapper
.
addEventListener
(
"
touchend
"
,
gt
,
!
1
),
window
.
navigator
.
msPointerEnabled
&&
(
$t
.
wrapper
.
addEventListener
(
"
MSPointerDown
"
,
mt
,
!
1
),
$t
.
wrapper
.
addEventListener
(
"
MSPointerMove
"
,
ht
,
!
1
),
$t
.
wrapper
.
addEventListener
(
"
MSPointerUp
"
,
yt
,
!
1
))),
Wt
.
keyboard
&&
document
.
addEventListener
(
"
keydown
"
,
ft
,
!
1
),
Wt
.
progress
&&
$t
.
progress
&&
$t
.
progress
.
addEventListener
(
"
click
"
,
wt
,
!
1
),
Wt
.
controls
&&
$t
.
controls
&&
[
"
touchstart
"
,
"
click
"
].
forEach
(
function
(
e
){
$t
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
Lt
,
!
1
)}),
$t
.
controlsRight
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
Et
,
!
1
)}),
$t
.
controlsUp
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
kt
,
!
1
)}),
$t
.
controlsDown
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
St
,
!
1
)}),
$t
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
At
,
!
1
)}),
$t
.
controlsNext
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
qt
,
!
1
)})})}
function
u
(){
Jt
=!
1
,
document
.
removeEventListener
(
"
keydown
"
,
ft
,
!
1
),
window
.
removeEventListener
(
"
hashchange
"
,
xt
,
!
1
),
window
.
removeEventListener
(
"
resize
"
,
Tt
,
!
1
),
$t
.
wrapper
.
removeEventListener
(
"
touchstart
"
,
vt
,
!
1
),
$t
.
wrapper
.
removeEventListener
(
"
touchmove
"
,
pt
,
!
1
),
$t
.
wrapper
.
removeEventListener
(
"
touchend
"
,
gt
,
!
1
),
window
.
navigator
.
msPointerEnabled
&&
(
$t
.
wrapper
.
removeEventListener
(
"
MSPointerDown
"
,
mt
,
!
1
),
$t
.
wrapper
.
removeEventListener
(
"
MSPointerMove
"
,
ht
,
!
1
),
$t
.
wrapper
.
removeEventListener
(
"
MSPointerUp
"
,
yt
,
!
1
)),
Wt
.
progress
&&
$t
.
progress
&&
$t
.
progress
.
removeEventListener
(
"
click
"
,
wt
,
!
1
),
Wt
.
controls
&&
$t
.
controls
&&
[
"
touchstart
"
,
"
click
"
].
forEach
(
function
(
e
){
$t
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
Lt
,
!
1
)}),
$t
.
controlsRight
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
Et
,
!
1
)}),
$t
.
controlsUp
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
kt
,
!
1
)}),
$t
.
controlsDown
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
St
,
!
1
)}),
$t
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
At
,
!
1
)}),
$t
.
controlsNext
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
qt
,
!
1
)})})}
function
d
(
e
,
t
){
for
(
var
n
in
t
)
e
[
n
]
=
t
[
n
]}
function
f
(
e
){
return
Array
.
prototype
.
slice
.
call
(
e
)}
function
v
(
e
,
t
){
var
n
=
e
.
x
-
t
.
x
,
r
=
e
.
y
-
t
.
y
;
return
Math
.
sqrt
(
n
*
n
+
r
*
r
)}
function
p
(
e
,
t
){
e
.
style
.
WebkitTransform
=
t
,
e
.
style
.
MozTransform
=
t
,
e
.
style
.
msTransform
=
t
,
e
.
style
.
OTransform
=
t
,
e
.
style
.
transform
=
t
}
function
g
(
e
){
var
t
=
0
;
if
(
e
){
var
n
=
0
;
f
(
e
.
childNodes
).
forEach
(
function
(
e
){
"
number
"
==
typeof
e
.
offsetTop
&&
e
.
style
&&
(
"
absolute
"
===
e
.
style
.
position
&&
(
n
+=
1
),
t
=
Math
.
max
(
t
,
e
.
offsetTop
+
e
.
offsetHeight
))}),
0
===
n
&&
(
t
=
e
.
offsetHeight
)}
return
t
}
function
m
(
e
,
t
){
return
window
.
getComputedStyle
?
window
.
getComputedStyle
(
e
)[
t
]:
e
.
currentStyle
?
e
.
currentStyle
(
t
):
e
.
style
[
t
]}
function
h
(
e
){
var
t
=
0
;
if
(
e
){
var
n
=
e
.
parentNode
,
r
=
n
.
childNodes
;
t
=
Wt
.
height
,
f
(
r
).
forEach
(
function
(
n
){
if
(
"
number
"
==
typeof
n
.
offsetHeight
&&
n
!==
e
){
var
r
=
parseInt
(
m
(
n
,
"
margin-top
"
),
10
),
o
=
parseInt
(
m
(
n
,
"
margin-bottom
"
),
10
);
console
.
log
(
r
,
o
),
t
-=
n
.
offsetHeight
+
r
+
o
}})}
return
t
}
function
y
(){
return
/print-pdf/gi
.
test
(
window
.
location
.
search
)}
function
b
(){
/iphone|ipod|android/gi
.
test
(
navigator
.
userAgent
)
&&!
/crios/gi
.
test
(
navigator
.
userAgent
)
&&
(
window
.
addEventListener
(
"
load
"
,
w
,
!
1
),
window
.
addEventListener
(
"
orientationchange
"
,
w
,
!
1
))}
function
w
(){
0
===
window
.
orientation
?(
document
.
documentElement
.
style
.
overflow
=
"
scroll
"
,
document
.
body
.
style
.
height
=
"
120%
"
):(
document
.
documentElement
.
style
.
overflow
=
""
,
document
.
body
.
style
.
height
=
"
100%
"
),
setTimeout
(
function
(){
window
.
scrollTo
(
0
,
1
)},
10
)}
function
L
(
e
,
t
){
var
n
=
document
.
createEvent
(
"
HTMLEvents
"
,
1
,
2
);
n
.
initEvent
(
e
,
!
0
,
!
0
),
d
(
n
,
t
),
$t
.
wrapper
.
dispatchEvent
(
n
)}
function
E
(){
if
(
It
&&!
(
"
msPerspective
"
in
document
.
body
.
style
))
for
(
var
e
=
document
.
querySelectorAll
(
Xt
+
"
a:not(.image)
"
),
t
=
0
,
n
=
e
.
length
;
n
>
t
;
t
++
){
var
r
=
e
[
t
];
if
(
!
(
!
r
.
textContent
||
r
.
querySelector
(
"
*
"
)
||
r
.
className
&&
r
.
classList
.
contains
(
r
,
"
roll
"
))){
var
o
=
document
.
createElement
(
"
span
"
);
o
.
setAttribute
(
"
data-title
"
,
r
.
text
),
o
.
innerHTML
=
r
.
innerHTML
,
r
.
classList
.
add
(
"
roll
"
),
r
.
innerHTML
=
""
,
r
.
appendChild
(
o
)}}}
function
k
(){
for
(
var
e
=
document
.
querySelectorAll
(
Xt
+
"
a.roll
"
),
t
=
0
,
n
=
e
.
length
;
n
>
t
;
t
++
){
var
r
=
e
[
t
],
o
=
r
.
querySelector
(
"
span
"
);
o
&&
(
r
.
classList
.
remove
(
"
roll
"
),
r
.
innerHTML
=
o
.
innerHTML
)}}
function
S
(
e
){
var
t
=
f
(
document
.
querySelectorAll
(
e
?
e
:
"
a
"
));
t
.
forEach
(
function
(
e
){
/^
(
http|www
)
/gi
.
test
(
e
.
getAttribute
(
"
href
"
))
&&
e
.
addEventListener
(
"
click
"
,
Nt
,
!
1
)})}
function
A
(){
var
e
=
f
(
document
.
querySelectorAll
(
"
a
"
));
e
.
forEach
(
function
(
e
){
/^
(
http|www
)
/gi
.
test
(
e
.
getAttribute
(
"
href
"
))
&&
e
.
removeEventListener
(
"
click
"
,
Nt
,
!
1
)})}
function
q
(
e
){
x
(),
$t
.
preview
=
document
.
createElement
(
"
div
"
),
$t
.
preview
.
classList
.
add
(
"
preview-link-overlay
"
),
$t
.
wrapper
.
appendChild
(
$t
.
preview
),
$t
.
preview
.
innerHTML
=
[
"
<header>
"
,
'
<a class="close" href="#"><span class="icon"></span></a>
'
,
'
<a class="external" href="
'
+
e
+
'
" target="_blank"><span class="icon"></span></a>
'
,
"
</header>
"
,
'
<div class="spinner"></div>
'
,
'
<div class="viewport">
'
,
'
<iframe src="
'
+
e
+
'
"></iframe>
'
,
"
</div>
"
].
join
(
""
),
$t
.
preview
.
querySelector
(
"
iframe
"
).
addEventListener
(
"
load
"
,
function
(){
$t
.
preview
.
classList
.
add
(
"
loaded
"
)},
!
1
),
$t
.
preview
.
querySelector
(
"
.close
"
).
addEventListener
(
"
click
"
,
function
(
e
){
x
(),
e
.
preventDefault
()},
!
1
),
$t
.
preview
.
querySelector
(
"
.external
"
).
addEventListener
(
"
click
"
,
function
(){
x
()},
!
1
),
setTimeout
(
function
(){
$t
.
preview
.
classList
.
add
(
"
visible
"
)},
1
)}
function
x
(){
$t
.
preview
&&
(
$t
.
preview
.
setAttribute
(
"
src
"
,
""
),
$t
.
preview
.
parentNode
.
removeChild
(
$t
.
preview
),
$t
.
preview
=
null
)}
function
T
(
e
){
var
t
=
f
(
e
);
return
t
.
forEach
(
function
(
e
,
t
){
e
.
hasAttribute
(
"
data-fragment-index
"
)
||
e
.
setAttribute
(
"
data-fragment-index
"
,
t
)}),
t
.
sort
(
function
(
e
,
t
){
return
e
.
getAttribute
(
"
data-fragment-index
"
)
-
t
.
getAttribute
(
"
data-fragment-index
"
)}),
t
}
function
M
(){
if
(
$t
.
wrapper
&&!
y
()){
var
e
=
$t
.
wrapper
.
offsetWidth
,
t
=
$t
.
wrapper
.
offsetHeight
;
e
-=
t
*
Wt
.
margin
,
t
-=
t
*
Wt
.
margin
;
var
n
=
Wt
.
width
,
r
=
Wt
.
height
;
"
string
"
==
typeof
n
&&
/%$/
.
test
(
n
)
&&
(
n
=
parseInt
(
n
,
10
)
/
100
*
e
),
"
string
"
==
typeof
r
&&
/%$/
.
test
(
r
)
&&
(
r
=
parseInt
(
r
,
10
)
/
100
*
t
),
$t
.
slides
.
style
.
width
=
n
+
"
px
"
,
$t
.
slides
.
style
.
height
=
r
+
"
px
"
,
Kt
=
Math
.
min
(
e
/
n
,
t
/
r
),
Kt
=
Math
.
max
(
Kt
,
Wt
.
minScale
),
Kt
=
Math
.
min
(
Kt
,
Wt
.
maxScale
),
void
0
===
$t
.
slides
.
style
.
zoom
||
navigator
.
userAgent
.
match
(
/
(
iphone|ipod|ipad|android
)
/gi
)?
p
(
$t
.
slides
,
"
translate(-50%, -50%) scale(
"
+
Kt
+
"
) translate(50%, 50%)
"
):
$t
.
slides
.
style
.
zoom
=
Kt
;
for
(
var
o
=
f
(
document
.
querySelectorAll
(
Xt
)),
a
=
0
,
i
=
o
.
length
;
i
>
a
;
a
++
){
var
s
=
o
[
a
];
"
none
"
!==
s
.
style
.
display
&&
(
s
.
style
.
top
=
Wt
.
center
?
s
.
classList
.
contains
(
"
stack
"
)?
0
:
Math
.
max
(
-
(
g
(
s
)
/
2
)
-
20
,
-
r
/
2
)
+
"
px
"
:
""
)}
K
(),
f
(
$t
.
slides
.
querySelectorAll
(
"
section > .remaining-height
"
)).
forEach
(
function
(
e
){
e
.
style
.
height
=
h
(
e
)
+
"
px
"
})}}
function
N
(
e
,
t
){
"
object
"
==
typeof
e
&&
"
function
"
==
typeof
e
.
setAttribute
&&
e
.
setAttribute
(
"
data-previous-indexv
"
,
t
||
0
)}
function
P
(
e
){
if
(
"
object
"
==
typeof
e
&&
"
function
"
==
typeof
e
.
setAttribute
&&
e
.
classList
.
contains
(
"
stack
"
)){
var
t
=
e
.
hasAttribute
(
"
data-start-indexv
"
)?
"
data-start-indexv
"
:
"
data-previous-indexv
"
;
return
parseInt
(
e
.
getAttribute
(
t
)
||
0
,
10
)}
return
0
}
function
D
(){
if
(
Wt
.
overview
){
at
();
var
e
=
$t
.
wrapper
.
classList
.
contains
(
"
overview
"
),
t
=
400
>
window
.
innerWidth
?
1
e3
:
2500
;
$t
.
wrapper
.
classList
.
add
(
"
overview
"
),
$t
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
),
clearTimeout
(
Bt
),
clearTimeout
(
Gt
),
Bt
=
setTimeout
(
function
(){
for
(
var
n
=
document
.
querySelectorAll
(
Ot
),
r
=
0
,
o
=
n
.
length
;
o
>
r
;
r
++
){
var
a
=
n
[
r
],
i
=
Wt
.
rtl
?
-
105
:
105
;
if
(
a
.
setAttribute
(
"
data-index-h
"
,
r
),
p
(
a
,
"
translateZ(-
"
+
t
+
"
px) translate(
"
+
(
r
-
Pt
)
*
i
+
"
%, 0%)
"
),
a
.
classList
.
contains
(
"
stack
"
))
for
(
var
s
=
a
.
querySelectorAll
(
"
section
"
),
c
=
0
,
l
=
s
.
length
;
l
>
c
;
c
++
){
var
u
=
r
===
Pt
?
Dt
:
P
(
a
),
d
=
s
[
c
];
d
.
setAttribute
(
"
data-index-h
"
,
r
),
d
.
setAttribute
(
"
data-index-v
"
,
c
),
p
(
d
,
"
translate(0%,
"
+
105
*
(
c
-
u
)
+
"
%)
"
),
d
.
addEventListener
(
"
click
"
,
Mt
,
!
0
)}
else
a
.
addEventListener
(
"
click
"
,
Mt
,
!
0
)}
_
(),
M
(),
e
||
L
(
"
overviewshown
"
,{
indexh
:
Pt
,
indexv
:
Dt
,
currentSlide
:
Rt
})},
10
)}}
function
C
(){
if
(
Wt
.
overview
){
clearTimeout
(
Bt
),
clearTimeout
(
Gt
),
$t
.
wrapper
.
classList
.
remove
(
"
overview
"
),
$t
.
wrapper
.
classList
.
add
(
"
exit-overview
"
),
Gt
=
setTimeout
(
function
(){
$t
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
)},
10
);
for
(
var
e
=
f
(
document
.
querySelectorAll
(
Xt
)),
t
=
0
,
n
=
e
.
length
;
n
>
t
;
t
++
){
var
r
=
e
[
t
];
r
.
style
.
display
=
""
,
p
(
r
,
""
),
r
.
removeEventListener
(
"
click
"
,
Mt
,
!
0
)}
W
(
Pt
,
Dt
),
ot
(),
L
(
"
overviewhidden
"
,{
indexh
:
Pt
,
indexv
:
Dt
,
currentSlide
:
Rt
})}}
function
R
(
e
){
"
boolean
"
==
typeof
e
?
e
?
D
():
C
():
I
()?
C
():
D
()}
function
I
(){
return
$t
.
wrapper
.
classList
.
contains
(
"
overview
"
)}
function
H
(
e
){
return
e
=
e
?
e
:
Rt
,
e
&&!!
e
.
parentNode
.
nodeName
.
match
(
/section/i
)}
function
Y
(){
var
e
=
document
.
body
,
t
=
e
.
requestFullScreen
||
e
.
webkitRequestFullscreen
||
e
.
webkitRequestFullScreen
||
e
.
mozRequestFullScreen
||
e
.
msRequestFullScreen
;
t
&&
t
.
apply
(
e
)}
function
X
(){
var
e
=
$t
.
wrapper
.
classList
.
contains
(
"
paused
"
);
at
(),
$t
.
wrapper
.
classList
.
add
(
"
paused
"
),
e
===!
1
&&
L
(
"
paused
"
)}
function
O
(){
var
e
=
$t
.
wrapper
.
classList
.
contains
(
"
paused
"
);
$t
.
wrapper
.
classList
.
remove
(
"
paused
"
),
ot
(),
e
&&
L
(
"
resumed
"
)}
function
z
(){
U
()?
O
():
X
()}
function
U
(){
return
$t
.
wrapper
.
classList
.
contains
(
"
paused
"
)}
function
W
(
e
,
t
,
n
,
r
){
Ct
=
Rt
;
var
o
=
document
.
querySelectorAll
(
Ot
);
void
0
===
t
&&
(
t
=
P
(
o
[
e
])),
Ct
&&
Ct
.
parentNode
&&
Ct
.
parentNode
.
classList
.
contains
(
"
stack
"
)
&&
N
(
Ct
.
parentNode
,
Dt
);
var
a
=
_t
.
concat
();
_t
.
length
=
0
;
var
i
=
Pt
,
s
=
Dt
;
Pt
=
F
(
Ot
,
void
0
===
e
?
Pt
:
e
),
Dt
=
F
(
zt
,
void
0
===
t
?
Dt
:
t
),
_
(),
M
();
e
:
for
(
var
c
=
0
,
l
=
_t
.
length
;
l
>
c
;
c
++
){
for
(
var
u
=
0
;
a
.
length
>
u
;
u
++
)
if
(
a
[
u
]
===
_t
[
c
]){
a
.
splice
(
u
,
1
);
continue
e
}
document
.
documentElement
.
classList
.
add
(
_t
[
c
]),
L
(
_t
[
c
])}
for
(;
a
.
length
;)
document
.
documentElement
.
classList
.
remove
(
a
.
pop
());
I
()
&&
D
();
var
d
=
o
[
Pt
],
v
=
d
.
querySelectorAll
(
"
section
"
);
if
(
Rt
=
v
[
Dt
]
||
d
,
n
!==
void
0
){
var
p
=
T
(
Rt
.
querySelectorAll
(
"
.fragment
"
));
f
(
p
).
forEach
(
function
(
e
,
t
){
n
>
t
?
e
.
classList
.
add
(
"
visible
"
):
e
.
classList
.
remove
(
"
visible
"
)})}
var
g
=
Pt
!==
i
||
Dt
!==
s
;
g
?
L
(
"
slidechanged
"
,{
indexh
:
Pt
,
indexv
:
Dt
,
previousSlide
:
Ct
,
currentSlide
:
Rt
,
origin
:
r
}):
Ct
=
null
,
Ct
&&
(
Ct
.
classList
.
remove
(
"
present
"
),
document
.
querySelector
(
Ut
).
classList
.
contains
(
"
present
"
)
&&
setTimeout
(
function
(){
var
e
,
t
=
f
(
document
.
querySelectorAll
(
Ot
+
"
.stack
"
));
for
(
e
in
t
)
t
[
e
]
&&
N
(
t
[
e
],
0
)},
0
)),
g
&&
(
G
(
Ct
),
B
(
Rt
)),
$
(),
K
(),
V
(),
et
()}
function
j
(){
u
(),
l
(),
M
(),
Ft
=
Wt
.
autoSlide
,
ot
(),
s
(),
$
(),
K
(),
V
()}
function
F
(
e
,
t
){
var
n
=
f
(
document
.
querySelectorAll
(
e
)),
r
=
n
.
length
;
if
(
r
){
Wt
.
loop
&&
(
t
%=
r
,
0
>
t
&&
(
t
=
r
+
t
)),
t
=
Math
.
max
(
Math
.
min
(
t
,
r
-
1
),
0
);
for
(
var
o
=
0
;
r
>
o
;
o
++
){
var
a
=
n
[
o
],
i
=
Wt
.
rtl
&&!
H
(
a
);
if
(
a
.
classList
.
remove
(
"
past
"
),
a
.
classList
.
remove
(
"
present
"
),
a
.
classList
.
remove
(
"
future
"
),
a
.
setAttribute
(
"
hidden
"
,
""
),
t
>
o
)
a
.
classList
.
add
(
i
?
"
future
"
:
"
past
"
);
else
if
(
o
>
t
){
a
.
classList
.
add
(
i
?
"
past
"
:
"
future
"
);
for
(
var
s
=
f
(
a
.
querySelectorAll
(
"
.fragment.visible
"
));
s
.
length
;)
s
.
pop
().
classList
.
remove
(
"
visible
"
)}
a
.
querySelector
(
"
section
"
)
&&
a
.
classList
.
add
(
"
stack
"
)}
n
[
t
].
classList
.
add
(
"
present
"
),
n
[
t
].
removeAttribute
(
"
hidden
"
);
var
c
=
n
[
t
].
getAttribute
(
"
data-state
"
);
c
&&
(
_t
=
_t
.
concat
(
c
.
split
(
"
"
)));
var
l
=
n
[
t
].
getAttribute
(
"
data-autoslide
"
);
Ft
=
l
?
parseInt
(
l
,
10
):
Wt
.
autoSlide
,
ot
()}
else
t
=
0
;
return
t
}
function
_
(){
var
e
,
t
,
n
=
f
(
document
.
querySelectorAll
(
Ot
)),
r
=
n
.
length
;
if
(
r
){
var
o
=
I
()?
10
:
Wt
.
viewDistance
;
Yt
&&
(
o
=
I
()?
6
:
1
);
for
(
var
a
=
0
;
r
>
a
;
a
++
){
var
i
=
n
[
a
],
s
=
f
(
i
.
querySelectorAll
(
"
section
"
)),
c
=
s
.
length
;
if
(
e
=
Math
.
abs
((
Pt
-
a
)
%
(
r
-
o
))
||
0
,
c
){
i
.
style
.
display
=
"
block
"
;
for
(
var
l
=
P
(
i
),
u
=
0
;
c
>
u
;
u
++
){
var
d
=
s
[
u
];
t
=
a
===
Pt
?
Math
.
abs
(
Dt
-
u
):
Math
.
abs
(
u
-
l
),
d
.
style
.
display
=
e
+
t
>
o
?
"
none
"
:
"
block
"
}}
else
i
.
style
.
display
=
e
>
o
?
"
none
"
:
"
block
"
}}}
function
K
(){
if
(
Wt
.
progress
&&
$t
.
progress
){
var
e
=
f
(
document
.
querySelectorAll
(
Ot
)),
t
=
document
.
querySelectorAll
(
Xt
+
"
:not(.stack)
"
).
length
,
n
=
0
;
e
:
for
(
var
r
=
0
;
e
.
length
>
r
;
r
++
){
for
(
var
o
=
e
[
r
],
a
=
f
(
o
.
querySelectorAll
(
"
section
"
)),
i
=
0
;
a
.
length
>
i
;
i
++
){
if
(
a
[
i
].
classList
.
contains
(
"
present
"
))
break
e
;
n
++
}
if
(
o
.
classList
.
contains
(
"
present
"
))
break
;
o
.
classList
.
contains
(
"
stack
"
)
===!
1
&&
n
++
}
$t
.
progressbar
.
style
.
width
=
n
/
(
t
-
1
)
*
window
.
innerWidth
+
"
px
"
}}
function
$
(){
if
(
Wt
.
controls
&&
$t
.
controls
){
var
e
=
Z
(),
t
=
Q
();
$t
.
controlsLeft
.
concat
(
$t
.
controlsRight
).
concat
(
$t
.
controlsUp
).
concat
(
$t
.
controlsDown
).
concat
(
$t
.
controlsPrev
).
concat
(
$t
.
controlsNext
).
forEach
(
function
(
e
){
e
.
classList
.
remove
(
"
enabled
"
),
e
.
classList
.
remove
(
"
fragmented
"
)}),
e
.
left
&&
$t
.
controlsLeft
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
right
&&
$t
.
controlsRight
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
up
&&
$t
.
controlsUp
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
down
&&
$t
.
controlsDown
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
left
||
e
.
up
)
&&
$t
.
controlsPrev
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
right
||
e
.
down
)
&&
$t
.
controlsNext
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
Rt
&&
(
t
.
prev
&&
$t
.
controlsPrev
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
t
.
next
&&
$t
.
controlsNext
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
H
(
Rt
)?(
t
.
prev
&&
$t
.
controlsUp
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
t
.
next
&&
$t
.
controlsDown
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)})):(
t
.
prev
&&
$t
.
controlsLeft
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)}),
t
.
next
&&
$t
.
controlsRight
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
fragmented
"
,
"
enabled
"
)})))}}
function
V
(){
f
(
$t
.
background
.
childNodes
).
forEach
(
function
(
e
,
t
){
var
n
=
Wt
.
rtl
?
"
future
"
:
"
past
"
,
r
=
Wt
.
rtl
?
"
past
"
:
"
future
"
;
e
.
className
=
"
slide-background
"
+
(
Pt
>
t
?
n
:
t
>
Pt
?
r
:
"
present
"
),
f
(
e
.
childNodes
).
forEach
(
function
(
e
,
t
){
e
.
className
=
"
slide-background
"
+
(
Dt
>
t
?
"
past
"
:
t
>
Dt
?
"
future
"
:
"
present
"
)})}),
setTimeout
(
function
(){
$t
.
background
.
classList
.
remove
(
"
no-transition
"
)},
1
)}
function
Z
(){
var
e
=
document
.
querySelectorAll
(
Ot
),
t
=
document
.
querySelectorAll
(
zt
),
n
=
{
left
:
Pt
>
0
||
Wt
.
loop
,
right
:
e
.
length
-
1
>
Pt
||
Wt
.
loop
,
up
:
Dt
>
0
,
down
:
t
.
length
-
1
>
Dt
};
if
(
Wt
.
rtl
){
var
r
=
n
.
left
;
n
.
left
=
n
.
right
,
n
.
right
=
r
}
return
n
}
function
Q
(){
if
(
Rt
&&
Wt
.
fragments
){
var
e
=
Rt
.
querySelectorAll
(
"
.fragment
"
),
t
=
Rt
.
querySelectorAll
(
"
.fragment:not(.visible)
"
);
return
{
prev
:
e
.
length
-
t
.
length
>
0
,
next
:
!!
t
.
length
}}
return
{
prev
:
!
1
,
next
:
!
1
}}
function
B
(
e
){
e
&&
(
f
(
e
.
querySelectorAll
(
"
video, audio
"
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-autoplay
"
)
&&
e
.
play
()}),
f
(
e
.
querySelectorAll
(
'
iframe[src*="youtube.com/embed/"]
'
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-autoplay
"
)
&&
e
.
contentWindow
.
postMessage
(
'
{"event":"command","func":"playVideo","args":""}
'
,
"
*
"
)}))}
function
G
(
e
){
e
&&
(
f
(
e
.
querySelectorAll
(
"
video, audio
"
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-ignore
"
)
||
e
.
pause
()}),
f
(
e
.
querySelectorAll
(
'
iframe[src*="youtube.com/embed/"]
'
)).
forEach
(
function
(
e
){
e
.
hasAttribute
(
"
data-ignore
"
)
||
"
function
"
!=
typeof
e
.
contentWindow
.
postMessage
||
e
.
contentWindow
.
postMessage
(
'
{"event":"command","func":"pauseVideo","args":""}
'
,
"
*
"
)}))}
function
J
(){
var
e
=
window
.
location
.
hash
,
t
=
e
.
slice
(
2
).
split
(
"
/
"
),
n
=
e
.
replace
(
/#|
\/
/gi
,
""
);
if
(
isNaN
(
parseInt
(
t
[
0
],
10
))
&&
n
.
length
){
var
r
=
document
.
querySelector
(
"
#
"
+
n
);
if
(
r
){
var
o
=
Reveal
.
getIndices
(
r
);
W
(
o
.
h
,
o
.
v
)}
else
W
(
Pt
||
0
,
Dt
||
0
)}
else
{
var
a
=
parseInt
(
t
[
0
],
10
)
||
0
,
i
=
parseInt
(
t
[
1
],
10
)
||
0
;(
a
!==
Pt
||
i
!==
Dt
)
&&
W
(
a
,
i
)}}
function
et
(
e
){
if
(
Wt
.
history
)
if
(
clearTimeout
(
Qt
),
"
number
"
==
typeof
e
)
Qt
=
setTimeout
(
et
,
e
);
else
{
var
t
=
"
/
"
;
Rt
&&
"
string
"
==
typeof
Rt
.
getAttribute
(
"
id
"
)?
t
=
"
/
"
+
Rt
.
getAttribute
(
"
id
"
):((
Pt
>
0
||
Dt
>
0
)
&&
(
t
+=
Pt
),
Dt
>
0
&&
(
t
+=
"
/
"
+
Dt
)),
window
.
location
.
hash
=
t
}}
function
tt
(
e
){
var
t
,
n
=
Pt
,
r
=
Dt
;
if
(
e
){
var
o
=
H
(
e
),
a
=
o
?
e
.
parentNode
:
e
,
i
=
f
(
document
.
querySelectorAll
(
Ot
));
n
=
Math
.
max
(
i
.
indexOf
(
a
),
0
),
o
&&
(
r
=
Math
.
max
(
f
(
e
.
parentNode
.
querySelectorAll
(
"
section
"
)).
indexOf
(
e
),
0
))}
if
(
!
e
&&
Rt
){
var
s
=
Rt
.
querySelectorAll
(
"
.fragment
"
).
length
>
0
;
if
(
s
){
var
c
=
Rt
.
querySelectorAll
(
"
.fragment.visible
"
);
t
=
c
.
length
}}
return
{
h
:
n
,
v
:
r
,
f
:
t
}}
function
nt
(){
if
(
Rt
&&
Wt
.
fragments
){
var
e
=
T
(
Rt
.
querySelectorAll
(
"
.fragment:not(.visible)
"
));
if
(
e
.
length
){
var
t
=
e
[
0
].
getAttribute
(
"
data-fragment-index
"
);
return
e
=
Rt
.
querySelectorAll
(
'
.fragment[data-fragment-index="
'
+
t
+
'
"]
'
),
f
(
e
).
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
visible
"
)}),
L
(
"
fragmentshown
"
,{
fragment
:
e
[
0
],
fragments
:
e
}),
$
(),
!
0
}}
return
!
1
}
function
rt
(){
if
(
Rt
&&
Wt
.
fragments
){
var
e
=
T
(
Rt
.
querySelectorAll
(
"
.fragment.visible
"
));
if
(
e
.
length
){
var
t
=
e
[
e
.
length
-
1
].
getAttribute
(
"
data-fragment-index
"
);
return
e
=
Rt
.
querySelectorAll
(
'
.fragment[data-fragment-index="
'
+
t
+
'
"]
'
),
f
(
e
).
forEach
(
function
(
e
){
e
.
classList
.
remove
(
"
visible
"
)}),
L
(
"
fragmenthidden
"
,{
fragment
:
e
[
0
],
fragments
:
e
}),
$
(),
!
0
}}
return
!
1
}
function
ot
(){
clearTimeout
(
Zt
),
!
Ft
||
U
()
||
I
()
||
(
Zt
=
setTimeout
(
dt
,
Ft
))}
function
at
(){
clearTimeout
(
Zt
)}
function
it
(){
Wt
.
rtl
?(
I
()
||
nt
()
===!
1
)
&&
Z
().
left
&&
W
(
Pt
+
1
):(
I
()
||
rt
()
===!
1
)
&&
Z
().
left
&&
W
(
Pt
-
1
)}
function
st
(){
Wt
.
rtl
?(
I
()
||
rt
()
===!
1
)
&&
Z
().
right
&&
W
(
Pt
-
1
):(
I
()
||
nt
()
===!
1
)
&&
Z
().
right
&&
W
(
Pt
+
1
)}
function
ct
(){(
I
()
||
rt
()
===!
1
)
&&
Z
().
up
&&
W
(
Pt
,
Dt
-
1
)}
function
lt
(){(
I
()
||
nt
()
===!
1
)
&&
Z
().
down
&&
W
(
Pt
,
Dt
+
1
)}
function
ut
(){
if
(
rt
()
===!
1
)
if
(
Z
().
up
)
ct
();
else
{
var
e
=
document
.
querySelector
(
Ot
+
"
.past:nth-child(
"
+
Pt
+
"
)
"
);
if
(
e
){
var
t
=
e
.
querySelectorAll
(
"
section
"
).
length
-
1
||
void
0
,
n
=
Pt
-
1
;
W
(
n
,
t
)}}}
function
dt
(){
nt
()
===!
1
&&
(
Z
().
down
?
lt
():
st
()),
ot
()}
function
ft
(
e
){
document
.
activeElement
;
var
t
=!
(
!
document
.
activeElement
||!
document
.
activeElement
.
type
&&!
document
.
activeElement
.
href
&&
"
inherit
"
===
document
.
activeElement
.
contentEditable
);
if
(
!
(
t
||
e
.
shiftKey
&&
32
!==
e
.
keyCode
||
e
.
altKey
||
e
.
ctrlKey
||
e
.
metaKey
)){
if
(
U
()
&&-
1
===
[
66
,
190
,
191
].
indexOf
(
e
.
keyCode
))
return
!
1
;
var
n
=!
1
;
if
(
"
object
"
==
typeof
Wt
.
keyboard
)
for
(
var
r
in
Wt
.
keyboard
)
if
(
parseInt
(
r
,
10
)
===
e
.
keyCode
){
var
o
=
Wt
.
keyboard
[
r
];
"
function
"
==
typeof
o
?
o
.
apply
(
null
,[
e
]):
"
string
"
==
typeof
o
&&
"
function
"
==
typeof
Reveal
[
o
]
&&
Reveal
[
o
].
call
(),
n
=!
0
}
if
(
n
===!
1
)
switch
(
n
=!
0
,
e
.
keyCode
){
case
80
:
case
33
:
ut
();
break
;
case
78
:
case
34
:
dt
();
break
;
case
72
:
case
37
:
it
();
break
;
case
76
:
case
39
:
st
();
break
;
case
75
:
case
38
:
ct
();
break
;
case
74
:
case
40
:
lt
();
break
;
case
36
:
W
(
0
);
break
;
case
35
:
W
(
Number
.
MAX_VALUE
);
break
;
case
32
:
I
()?
C
():
e
.
shiftKey
?
ut
():
dt
();
break
;
case
13
:
I
()?
C
():
n
=!
1
;
break
;
case
66
:
case
190
:
case
191
:
z
();
break
;
case
70
:
Y
();
break
;
default
:
n
=!
1
}
n
?
e
.
preventDefault
():
27
!==
e
.
keyCode
&&
79
!==
e
.
keyCode
||!
It
||
(
R
(),
e
.
preventDefault
()),
ot
()}}
function
vt
(
e
){
en
.
startX
=
e
.
touches
[
0
].
clientX
,
en
.
startY
=
e
.
touches
[
0
].
clientY
,
en
.
startCount
=
e
.
touches
.
length
,
2
===
e
.
touches
.
length
&&
Wt
.
overview
&&
(
en
.
startSpan
=
v
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
en
.
startX
,
y
:
en
.
startY
}))}
function
pt
(
e
){
if
(
en
.
captured
)
navigator
.
userAgent
.
match
(
/android/gi
)
&&
e
.
preventDefault
();
else
{
var
t
=
e
.
touches
[
0
].
clientX
,
n
=
e
.
touches
[
0
].
clientY
;
if
(
2
===
e
.
touches
.
length
&&
2
===
en
.
startCount
&&
Wt
.
overview
){
var
r
=
v
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
en
.
startX
,
y
:
en
.
startY
});
Math
.
abs
(
en
.
startSpan
-
r
)
>
en
.
threshold
&&
(
en
.
captured
=!
0
,
en
.
startSpan
>
r
?
D
():
C
()),
e
.
preventDefault
()}
else
if
(
1
===
e
.
touches
.
length
&&
2
!==
en
.
startCount
){
var
o
=
t
-
en
.
startX
,
a
=
n
-
en
.
startY
;
o
>
en
.
threshold
&&
Math
.
abs
(
o
)
>
Math
.
abs
(
a
)?(
en
.
captured
=!
0
,
it
()):
-
en
.
threshold
>
o
&&
Math
.
abs
(
o
)
>
Math
.
abs
(
a
)?(
en
.
captured
=!
0
,
st
()):
a
>
en
.
threshold
?(
en
.
captured
=!
0
,
ct
()):
-
en
.
threshold
>
a
&&
(
en
.
captured
=!
0
,
lt
()),
Wt
.
embedded
?(
en
.
captured
||
H
(
Rt
))
&&
e
.
preventDefault
():
e
.
preventDefault
()}}}
function
gt
(){
en
.
captured
=!
1
}
function
mt
(
e
){
e
.
pointerType
===
e
.
MSPOINTER_TYPE_TOUCH
&&
(
e
.
touches
=
[{
clientX
:
e
.
clientX
,
clientY
:
e
.
clientY
}],
vt
(
e
))}
function
ht
(
e
){
e
.
pointerType
===
e
.
MSPOINTER_TYPE_TOUCH
&&
(
e
.
touches
=
[{
clientX
:
e
.
clientX
,
clientY
:
e
.
clientY
}],
pt
(
e
))}
function
yt
(
e
){
e
.
pointerType
===
e
.
MSPOINTER_TYPE_TOUCH
&&
(
e
.
touches
=
[{
clientX
:
e
.
clientX
,
clientY
:
e
.
clientY
}],
gt
(
e
))}
function
bt
(
e
){
if
(
Date
.
now
()
-
Vt
>
600
){
Vt
=
Date
.
now
();
var
t
=
e
.
detail
||-
e
.
wheelDelta
;
t
>
0
?
dt
():
ut
()}}
function
wt
(
e
){
e
.
preventDefault
();
var
t
=
f
(
document
.
querySelectorAll
(
Ot
)).
length
,
n
=
Math
.
floor
(
e
.
clientX
/
$t
.
wrapper
.
offsetWidth
*
t
);
W
(
n
)}
function
Lt
(
e
){
e
.
preventDefault
(),
it
()}
function
Et
(
e
){
e
.
preventDefault
(),
st
()}
function
kt
(
e
){
e
.
preventDefault
(),
ct
()}
function
St
(
e
){
e
.
preventDefault
(),
lt
()}
function
At
(
e
){
e
.
preventDefault
(),
ut
()}
function
qt
(
e
){
e
.
preventDefault
(),
dt
()}
function
xt
(){
J
()}
function
Tt
(){
M
()}
function
Mt
(
e
){
if
(
Jt
&&
I
()){
e
.
preventDefault
();
for
(
var
t
=
e
.
target
;
t
&&!
t
.
nodeName
.
match
(
/section/gi
);)
t
=
t
.
parentNode
;
if
(
t
&&!
t
.
classList
.
contains
(
"
disabled
"
)
&&
(
C
(),
t
.
nodeName
.
match
(
/section/gi
))){
var
n
=
parseInt
(
t
.
getAttribute
(
"
data-index-h
"
),
10
),
r
=
parseInt
(
t
.
getAttribute
(
"
data-index-v
"
),
10
);
W
(
n
,
r
)}}}
function
Nt
(
e
){
var
t
=
e
.
target
.
getAttribute
(
"
href
"
);
t
&&
(
q
(
t
),
e
.
preventDefault
())}
var
Pt
,
Dt
,
Ct
,
Rt
,
It
,
Ht
,
Yt
,
Xt
=
"
.reveal .slides section
"
,
Ot
=
"
.reveal .slides>section
"
,
zt
=
"
.reveal .slides>section.present>section
"
,
Ut
=
"
.reveal .slides>section:first-child
"
,
Wt
=
{
width
:
960
,
height
:
700
,
margin
:.
1
,
minScale
:.
2
,
maxScale
:
1
,
controls
:
!
0
,
progress
:
!
0
,
history
:
!
1
,
keyboard
:
!
0
,
overview
:
!
0
,
center
:
!
0
,
touch
:
!
0
,
loop
:
!
1
,
rtl
:
!
1
,
fragments
:
!
0
,
embedded
:
!
1
,
autoSlide
:
0
,
mouseWheel
:
!
1
,
rollingLinks
:
!
1
,
previewLinks
:
!
1
,
theme
:
null
,
transition
:
"
default
"
,
transitionSpeed
:
"
default
"
,
backgroundTransition
:
"
default
"
,
viewDistance
:
3
,
dependencies
:[]},
jt
=!
1
,
Ft
=
0
,
_t
=
[],
Kt
=
1
,
$t
=
{},
Vt
=
0
,
Zt
=
0
,
Qt
=
0
,
Bt
=
0
,
Gt
=
0
,
Jt
=!
1
,
en
=
{
startX
:
0
,
startY
:
0
,
startSpan
:
0
,
startCount
:
0
,
captured
:
!
1
,
threshold
:
40
};
return
{
initialize
:
e
,
configure
:
c
,
sync
:
j
,
slide
:
W
,
left
:
it
,
right
:
st
,
up
:
ct
,
down
:
lt
,
prev
:
ut
,
next
:
dt
,
prevFragment
:
rt
,
nextFragment
:
nt
,
navigateTo
:
W
,
navigateLeft
:
it
,
navigateRight
:
st
,
navigateUp
:
ct
,
navigateDown
:
lt
,
navigatePrev
:
ut
,
navigateNext
:
dt
,
layout
:
M
,
availableRoutes
:
Z
,
availableFragments
:
Q
,
toggleOverview
:
R
,
togglePause
:
z
,
isOverview
:
I
,
isPaused
:
U
,
addEventListeners
:
l
,
removeEventListeners
:
u
,
getIndices
:
tt
,
getSlide
:
function
(
e
,
t
){
var
n
=
document
.
querySelectorAll
(
Ot
)[
e
],
r
=
n
&&
n
.
querySelectorAll
(
"
section
"
);
return
t
!==
void
0
?
r
?
r
[
t
]:
void
0
:
n
},
getPreviousSlide
:
function
(){
return
Ct
},
getCurrentSlide
:
function
(){
return
Rt
},
getScale
:
function
(){
return
Kt
},
getConfig
:
function
(){
return
Wt
},
getQueryHash
:
function
(){
var
e
=
{};
return
location
.
search
.
replace
(
/
[
A-Z0-9
]
+
?
=
(\w
*
)
/gi
,
function
(
t
){
e
[
t
.
split
(
"
=
"
).
shift
()]
=
t
.
split
(
"
=
"
).
pop
()}),
e
},
isFirstSlide
:
function
(){
return
null
==
document
.
querySelector
(
Xt
+
"
.past
"
)?
!
0
:
!
1
},
isLastSlide
:
function
(){
return
Rt
&&
Rt
.
classList
.
contains
(
"
.stack
"
)?
null
==
Rt
.
querySelector
(
Xt
+
"
.future
"
)?
!
0
:
!
1
:
null
==
document
.
querySelector
(
Xt
+
"
.future
"
)?
!
0
:
!
1
},
isReady
:
function
(){
return
jt
},
addEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
$t
.
wrapper
||
document
.
querySelector
(
"
.reveal
"
)).
addEventListener
(
e
,
t
,
n
)},
removeEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
$t
.
wrapper
||
document
.
querySelector
(
"
.reveal
"
)).
removeEventListener
(
e
,
t
,
n
)}}}();
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment