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
11fc906a
Commit
11fc906a
authored
12 years ago
by
Hakim El Hattab
Browse files
Options
Downloads
Patches
Plain Diff
helper method for retrieving slide based on index (closes #293)
parent
080fb3cd
No related branches found
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
+12
-0
12 additions, 0 deletions
js/reveal.js
js/reveal.min.js
+2
-2
2 additions, 2 deletions
js/reveal.min.js
with
14 additions
and
2 deletions
js/reveal.js
+
12
−
0
View file @
11fc906a
...
...
@@ -1829,6 +1829,18 @@ var Reveal = (function(){
// Returns the indices of the current, or specified, slide
getIndices
:
getIndices
,
// Returns the slide at the specified index, y is optional
getSlide
:
function
(
x
,
y
)
{
var
horizontalSlide
=
document
.
querySelectorAll
(
HORIZONTAL_SLIDES_SELECTOR
)[
x
];
var
verticalSlides
=
horizontalSlide
&&
horizontalSlide
.
querySelectorAll
(
'
section
'
);
if
(
typeof
y
!==
'
undefined
'
)
{
return
verticalSlides
?
verticalSlides
[
y
]
:
undefined
;
}
return
horizontalSlide
;
},
// Returns the previous slide element, may be null
getPreviousSlide
:
function
()
{
return
previousSlide
;
...
...
This diff is collapsed.
Click to expand it.
js/reveal.min.js
+
2
−
2
View file @
11fc906a
/*!
* reveal.js 2.3 (2013-02-03, 1
1:27
)
* reveal.js 2.3 (2013-02-03, 1
5:54
)
* http://lab.hakim.se/reveal-js
* MIT licensed
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
var
Reveal
=
function
(){
"
use strict
"
;
function
E
(
e
){
if
(
!
d
&&!
p
){
document
.
body
.
setAttribute
(
"
class
"
,
"
no-transforms
"
);
return
}
window
.
addEventListener
(
"
load
"
,
H
,
!
1
),
A
(
i
,
e
),
x
(),
T
()}
function
S
(){
h
.
theme
=
document
.
querySelector
(
"
#theme
"
),
h
.
wrapper
=
document
.
querySelector
(
"
.reveal
"
),
h
.
slides
=
document
.
querySelector
(
"
.reveal .slides
"
);
if
(
!
h
.
wrapper
.
querySelector
(
"
.progress
"
)
&&
i
.
progress
){
var
e
=
document
.
createElement
(
"
div
"
);
e
.
classList
.
add
(
"
progress
"
),
e
.
innerHTML
=
"
<span></span>
"
,
h
.
wrapper
.
appendChild
(
e
)}
if
(
!
h
.
wrapper
.
querySelector
(
"
.controls
"
)
&&
i
.
controls
){
var
t
=
document
.
createElement
(
"
aside
"
);
t
.
classList
.
add
(
"
controls
"
),
t
.
innerHTML
=
'
<div class="navigate-left"></div><div class="navigate-right"></div><div class="navigate-up"></div><div class="navigate-down"></div>
'
,
h
.
wrapper
.
appendChild
(
t
)}
if
(
!
h
.
wrapper
.
querySelector
(
"
.state-background
"
)){
var
n
=
document
.
createElement
(
"
div
"
);
n
.
classList
.
add
(
"
state-background
"
),
h
.
wrapper
.
appendChild
(
n
)}
if
(
!
h
.
wrapper
.
querySelector
(
"
.pause-overlay
"
)){
var
r
=
document
.
createElement
(
"
div
"
);
r
.
classList
.
add
(
"
pause-overlay
"
),
h
.
wrapper
.
appendChild
(
r
)}
h
.
progress
=
document
.
querySelector
(
"
.reveal .progress
"
),
h
.
progressbar
=
document
.
querySelector
(
"
.reveal .progress span
"
),
i
.
controls
&&
(
h
.
controls
=
document
.
querySelector
(
"
.reveal .controls
"
),
h
.
controlsLeft
=
O
(
document
.
querySelectorAll
(
"
.navigate-left
"
)),
h
.
controlsRight
=
O
(
document
.
querySelectorAll
(
"
.navigate-right
"
)),
h
.
controlsUp
=
O
(
document
.
querySelectorAll
(
"
.navigate-up
"
)),
h
.
controlsDown
=
O
(
document
.
querySelectorAll
(
"
.navigate-down
"
)),
h
.
controlsPrev
=
O
(
document
.
querySelectorAll
(
"
.navigate-prev
"
)),
h
.
controlsNext
=
O
(
document
.
querySelectorAll
(
"
.navigate-next
"
)))}
function
x
(){
/iphone|ipod|android/gi
.
test
(
navigator
.
userAgent
)
&&!
/crios/gi
.
test
(
navigator
.
userAgent
)
&&
(
window
.
addEventListener
(
"
load
"
,
_
,
!
1
),
window
.
addEventListener
(
"
orientationchange
"
,
_
,
!
1
))}
function
T
(){
function
o
(){
t
.
length
&&
head
.
js
.
apply
(
null
,
t
),
N
()}
var
e
=
[],
t
=
[];
for
(
var
n
=
0
,
r
=
i
.
dependencies
.
length
;
n
<
r
;
n
++
){
var
s
=
i
.
dependencies
[
n
];
if
(
!
s
.
condition
||
s
.
condition
())
s
.
async
?
t
.
push
(
s
.
src
):
e
.
push
(
s
.
src
),
typeof
s
.
callback
==
"
function
"
&&
head
.
ready
(
s
.
src
.
match
(
/
([\w\d
_
\-]
*
)\.?
js$|
[^\\\/]
*$/i
)[
0
],
s
.
callback
)}
e
.
length
?(
head
.
ready
(
o
),
head
.
js
.
apply
(
null
,
e
)):
o
()}
function
N
(){
S
(),
k
(),
C
(),
H
(),
Y
(),
rt
(),
setTimeout
(
function
(){
D
(
"
ready
"
,{
indexh
:
o
,
indexv
:
u
,
currentSlide
:
f
})},
1
)}
function
C
(){
p
===!
1
&&
(
i
.
transition
=
"
linear
"
),
i
.
controls
&&
h
.
controls
&&
(
h
.
controls
.
style
.
display
=
"
block
"
),
i
.
progress
&&
h
.
progress
&&
(
h
.
progress
.
style
.
display
=
"
block
"
),
i
.
transition
!==
"
default
"
&&
h
.
wrapper
.
classList
.
add
(
i
.
transition
),
i
.
rtl
&&
h
.
wrapper
.
classList
.
add
(
"
rtl
"
),
i
.
center
&&
h
.
wrapper
.
classList
.
add
(
"
center
"
),
i
.
mouseWheel
&&
(
document
.
addEventListener
(
"
DOMMouseScroll
"
,
dt
,
!
1
),
document
.
addEventListener
(
"
mousewheel
"
,
dt
,
!
1
)),
i
.
rollingLinks
&&
P
();
if
(
i
.
theme
&&
h
.
theme
){
var
e
=
h
.
theme
.
getAttribute
(
"
href
"
),
t
=
/
[^\/]
*
?(?=\.
css
)
/
,
n
=
e
.
match
(
t
)[
0
];
i
.
theme
!==
n
&&
(
e
=
e
.
replace
(
t
,
i
.
theme
),
h
.
theme
.
setAttribute
(
"
href
"
,
e
))}}
function
k
(){
window
.
addEventListener
(
"
hashchange
"
,
St
,
!
1
),
window
.
addEventListener
(
"
resize
"
,
xt
,
!
1
),
i
.
touch
&&
(
document
.
addEventListener
(
"
touchstart
"
,
ct
,
!
1
),
document
.
addEventListener
(
"
touchmove
"
,
ht
,
!
1
),
document
.
addEventListener
(
"
touchend
"
,
pt
,
!
1
)),
i
.
keyboard
&&
document
.
addEventListener
(
"
keydown
"
,
lt
,
!
1
),
i
.
progress
&&
h
.
progress
&&
h
.
progress
.
addEventListener
(
"
click
"
,
vt
,
!
1
);
if
(
i
.
controls
&&
h
.
controls
){
var
e
=
"
ontouchstart
"
in
window
?
"
touchstart
"
:
"
click
"
;
h
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
mt
,
!
1
)}),
h
.
controlsRight
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
gt
,
!
1
)}),
h
.
controlsUp
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
yt
,
!
1
)}),
h
.
controlsDown
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
bt
,
!
1
)}),
h
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
wt
,
!
1
)}),
h
.
controlsNext
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
Et
,
!
1
)})}}
function
L
(){
document
.
removeEventListener
(
"
keydown
"
,
lt
,
!
1
),
window
.
removeEventListener
(
"
hashchange
"
,
St
,
!
1
),
window
.
removeEventListener
(
"
resize
"
,
xt
,
!
1
),
i
.
touch
&&
(
document
.
removeEventListener
(
"
touchstart
"
,
ct
,
!
1
),
document
.
removeEventListener
(
"
touchmove
"
,
ht
,
!
1
),
document
.
removeEventListener
(
"
touchend
"
,
pt
,
!
1
)),
i
.
progress
&&
h
.
progress
&&
h
.
progress
.
removeEventListener
(
"
click
"
,
vt
,
!
1
);
if
(
i
.
controls
&&
h
.
controls
){
var
e
=
"
ontouchstart
"
in
window
?
"
touchstart
"
:
"
click
"
;
h
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
mt
,
!
1
)}),
h
.
controlsRight
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
gt
,
!
1
)}),
h
.
controlsUp
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
yt
,
!
1
)}),
h
.
controlsDown
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
bt
,
!
1
)}),
h
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
wt
,
!
1
)}),
h
.
controlsNext
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
Et
,
!
1
)})}}
function
A
(
e
,
t
){
for
(
var
n
in
t
)
e
[
n
]
=
t
[
n
]}
function
O
(
e
){
return
Array
.
prototype
.
slice
.
call
(
e
)}
function
M
(
e
,
t
){
var
n
=
e
.
x
-
t
.
x
,
r
=
e
.
y
-
t
.
y
;
return
Math
.
sqrt
(
n
*
n
+
r
*
r
)}
function
_
(){
window
.
orientation
===
0
?(
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
D
(
e
,
t
){
var
n
=
document
.
createEvent
(
"
HTMLEvents
"
,
1
,
2
);
n
.
initEvent
(
e
,
!
0
,
!
0
),
A
(
n
,
t
),
h
.
wrapper
.
dispatchEvent
(
n
)}
function
P
(){
if
(
p
&&!
(
"
msPerspective
"
in
document
.
body
.
style
)){
var
t
=
document
.
querySelectorAll
(
e
+
"
a:not(.image)
"
);
for
(
var
n
=
0
,
r
=
t
.
length
;
n
<
r
;
n
++
){
var
i
=
t
[
n
];
if
(
i
.
textContent
&&!
i
.
querySelector
(
"
*
"
)
&&
(
!
i
.
className
||!
i
.
classList
.
contains
(
i
,
"
roll
"
))){
var
s
=
document
.
createElement
(
"
span
"
);
s
.
setAttribute
(
"
data-title
"
,
i
.
text
),
s
.
innerHTML
=
i
.
innerHTML
,
i
.
classList
.
add
(
"
roll
"
),
i
.
innerHTML
=
""
,
i
.
appendChild
(
s
)}}}}
function
H
(){
var
t
=
h
.
wrapper
.
offsetWidth
,
n
=
h
.
wrapper
.
offsetHeight
;
t
-=
n
*
i
.
margin
,
n
-=
n
*
i
.
margin
;
var
r
=
i
.
width
,
s
=
i
.
height
;
typeof
r
==
"
string
"
&&
/%$/
.
test
(
r
)
&&
(
r
=
parseInt
(
r
,
10
)
/
100
*
t
),
typeof
s
==
"
string
"
&&
/%$/
.
test
(
s
)
&&
(
s
=
parseInt
(
s
,
10
)
/
100
*
n
),
h
.
slides
.
style
.
width
=
r
+
"
px
"
,
h
.
slides
.
style
.
height
=
s
+
"
px
"
,
c
=
Math
.
min
(
t
/
r
,
n
/
s
),
c
=
Math
.
max
(
c
,
i
.
minScale
),
c
=
Math
.
min
(
c
,
i
.
maxScale
);
if
(
typeof
h
.
slides
.
style
.
zoom
!=
"
undefined
"
&&!
navigator
.
userAgent
.
match
(
/
(
iphone|ipod|android
)
/gi
))
h
.
slides
.
style
.
zoom
=
c
;
else
{
var
o
=
"
translate(-50%, -50%) scale(
"
+
c
+
"
) translate(50%, 50%)
"
;
h
.
slides
.
style
.
WebkitTransform
=
o
,
h
.
slides
.
style
.
MozTransform
=
o
,
h
.
slides
.
style
.
msTransform
=
o
,
h
.
slides
.
style
.
OTransform
=
o
,
h
.
slides
.
style
.
transform
=
o
}
if
(
i
.
center
){
var
u
=
O
(
document
.
querySelectorAll
(
e
)),
a
=-
s
/
2
;
for
(
var
f
=
0
,
l
=
u
.
length
;
f
<
l
;
f
++
){
var
p
=
u
[
f
];
if
(
p
.
style
.
display
===
"
none
"
)
continue
;
p
.
classList
.
contains
(
"
stack
"
)?
p
.
style
.
top
=
0
:
p
.
style
.
top
=
Math
.
max
(
-
(
p
.
offsetHeight
/
2
)
-
20
,
a
)
+
"
px
"
}}}
function
B
(
e
,
t
){
e
&&
e
.
setAttribute
(
"
data-previous-indexv
"
,
t
||
0
)}
function
j
(
e
){
return
e
&&
e
.
classList
.
contains
(
"
stack
"
)?
parseInt
(
e
.
getAttribute
(
"
data-previous-indexv
"
)
||
0
,
10
):
0
}
function
F
(){
if
(
i
.
overview
){
var
e
=
h
.
wrapper
.
classList
.
contains
(
"
overview
"
);
h
.
wrapper
.
classList
.
add
(
"
overview
"
),
h
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
),
clearTimeout
(
y
),
clearTimeout
(
b
),
y
=
setTimeout
(
function
(){
var
n
=
document
.
querySelectorAll
(
t
);
for
(
var
r
=
0
,
i
=
n
.
length
;
r
<
i
;
r
++
){
var
s
=
n
[
r
],
a
=
"
translateZ(-2500px) translate(
"
+
(
r
-
o
)
*
105
+
"
%, 0%)
"
;
s
.
setAttribute
(
"
data-index-h
"
,
r
),
s
.
style
.
display
=
"
block
"
,
s
.
style
.
WebkitTransform
=
a
,
s
.
style
.
MozTransform
=
a
,
s
.
style
.
msTransform
=
a
,
s
.
style
.
OTransform
=
a
,
s
.
style
.
transform
=
a
;
if
(
s
.
classList
.
contains
(
"
stack
"
)){
var
l
=
s
.
querySelectorAll
(
"
section
"
);
for
(
var
c
=
0
,
h
=
l
.
length
;
c
<
h
;
c
++
){
var
p
=
r
===
o
?
u
:
j
(
s
),
d
=
l
[
c
],
v
=
"
translate(0%,
"
+
(
c
-
p
)
*
105
+
"
%)
"
;
d
.
setAttribute
(
"
data-index-h
"
,
r
),
d
.
setAttribute
(
"
data-index-v
"
,
c
),
d
.
style
.
display
=
"
block
"
,
d
.
style
.
WebkitTransform
=
v
,
d
.
style
.
MozTransform
=
v
,
d
.
style
.
msTransform
=
v
,
d
.
style
.
OTransform
=
v
,
d
.
style
.
transform
=
v
,
d
.
addEventListener
(
"
click
"
,
Tt
,
!
0
)}}
else
s
.
addEventListener
(
"
click
"
,
Tt
,
!
0
)}
H
(),
e
||
D
(
"
overviewshown
"
,{
indexh
:
o
,
indexv
:
u
,
currentSlide
:
f
})},
10
)}}
function
I
(){
if
(
i
.
overview
){
clearTimeout
(
y
),
clearTimeout
(
b
),
h
.
wrapper
.
classList
.
remove
(
"
overview
"
),
h
.
wrapper
.
classList
.
add
(
"
exit-overview
"
),
b
=
setTimeout
(
function
(){
h
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
)},
10
);
var
t
=
O
(
document
.
querySelectorAll
(
e
));
for
(
var
n
=
0
,
r
=
t
.
length
;
n
<
r
;
n
++
){
var
s
=
t
[
n
];
s
.
style
.
display
=
""
,
s
.
style
.
WebkitTransform
=
""
,
s
.
style
.
MozTransform
=
""
,
s
.
style
.
msTransform
=
""
,
s
.
style
.
OTransform
=
""
,
s
.
style
.
transform
=
""
,
s
.
removeEventListener
(
"
click
"
,
Tt
,
!
0
)}
$
(
o
,
u
),
D
(
"
overviewhidden
"
,{
indexh
:
o
,
indexv
:
u
,
currentSlide
:
f
})}}
function
q
(
e
){
typeof
e
==
"
boolean
"
?
e
?
F
():
I
():
R
()?
I
():
F
()}
function
R
(){
return
h
.
wrapper
.
classList
.
contains
(
"
overview
"
)}
function
U
(){
var
e
=
document
.
body
,
t
=
e
.
requestFullScreen
||
e
.
webkitRequestFullScreen
||
e
.
mozRequestFullScreen
||
e
.
msRequestFullScreen
;
t
&&
t
.
apply
(
e
)}
function
z
(){
h
.
wrapper
.
classList
.
add
(
"
paused
"
)}
function
W
(){
h
.
wrapper
.
classList
.
remove
(
"
paused
"
)}
function
X
(){
V
()?
W
():
z
()}
function
V
(){
return
h
.
wrapper
.
classList
.
contains
(
"
paused
"
)}
function
$
(
e
,
i
,
s
){
a
=
f
;
var
c
=
document
.
querySelectorAll
(
t
);
i
===
undefined
&&
(
i
=
j
(
c
[
e
])),
a
&&
a
.
parentNode
&&
a
.
parentNode
.
classList
.
contains
(
"
stack
"
)
&&
B
(
a
.
parentNode
,
u
);
var
h
=
l
.
concat
();
l
.
length
=
0
;
var
p
=
o
,
d
=
u
;
o
=
J
(
t
,
e
===
undefined
?
o
:
e
),
u
=
J
(
n
,
i
===
undefined
?
u
:
i
),
H
();
e
:
for
(
var
v
=
0
,
m
=
l
.
length
;
v
<
m
;
v
++
){
for
(
var
g
=
0
;
g
<
h
.
length
;
g
++
)
if
(
h
[
g
]
===
l
[
v
]){
h
.
splice
(
g
,
1
);
continue
e
}
document
.
documentElement
.
classList
.
add
(
l
[
v
]),
D
(
l
[
v
])}
while
(
h
.
length
)
document
.
documentElement
.
classList
.
remove
(
h
.
pop
());
R
()
&&
F
(),
Z
(
1500
);
var
y
=
c
[
o
],
b
=
y
.
querySelectorAll
(
"
section
"
);
f
=
b
[
u
]
||
y
;
if
(
typeof
s
!=
"
undefined
"
){
var
w
=
f
.
querySelectorAll
(
"
.fragment
"
);
O
(
w
).
forEach
(
function
(
e
,
t
){
t
<
s
?
e
.
classList
.
add
(
"
visible
"
):
e
.
classList
.
remove
(
"
visible
"
)})}
o
!==
p
||
u
!==
d
?
D
(
"
slidechanged
"
,{
indexh
:
o
,
indexv
:
u
,
previousSlide
:
a
,
currentSlide
:
f
}):
a
=
null
,
a
&&
(
a
.
classList
.
remove
(
"
present
"
),
document
.
querySelector
(
r
).
classList
.
contains
(
"
present
"
)
&&
setTimeout
(
function
(){
var
e
=
O
(
document
.
querySelectorAll
(
t
+
"
.stack
"
)),
n
;
for
(
n
in
e
)
e
[
n
]
&&
B
(
e
[
n
],
0
)},
0
)),
Q
(),
K
()}
function
J
(
e
,
t
){
var
n
=
O
(
document
.
querySelectorAll
(
e
)),
r
=
n
.
length
;
if
(
r
){
i
.
loop
&&
(
t
%=
r
,
t
<
0
&&
(
t
=
r
+
t
)),
t
=
Math
.
max
(
Math
.
min
(
t
,
r
-
1
),
0
);
for
(
var
o
=
0
;
o
<
r
;
o
++
){
var
u
=
n
[
o
];
if
(
R
()
===!
1
){
var
a
=
Math
.
abs
((
t
-
o
)
%
(
r
-
3
))
||
0
;
u
.
style
.
display
=
a
>
3
?
"
none
"
:
"
block
"
}
n
[
o
].
classList
.
remove
(
"
past
"
),
n
[
o
].
classList
.
remove
(
"
present
"
),
n
[
o
].
classList
.
remove
(
"
future
"
),
o
<
t
?
n
[
o
].
classList
.
add
(
"
past
"
):
o
>
t
&&
n
[
o
].
classList
.
add
(
"
future
"
),
u
.
querySelector
(
"
section
"
)
&&
n
[
o
].
classList
.
add
(
"
stack
"
)}
n
[
t
].
classList
.
add
(
"
present
"
);
var
f
=
n
[
t
].
getAttribute
(
"
data-state
"
);
f
&&
(
l
=
l
.
concat
(
f
.
split
(
"
"
)));
var
c
=
n
[
t
].
getAttribute
(
"
data-autoslide
"
);
c
?
s
=
parseInt
(
c
,
10
):
s
=
i
.
autoSlide
}
else
t
=
0
;
return
t
}
function
K
(){
if
(
i
.
progress
&&
h
.
progress
){
var
n
=
O
(
document
.
querySelectorAll
(
t
)),
r
=
document
.
querySelectorAll
(
e
+
"
:not(.stack)
"
).
length
,
s
=
0
;
e
:
for
(
var
o
=
0
;
o
<
n
.
length
;
o
++
){
var
u
=
n
[
o
],
a
=
O
(
u
.
querySelectorAll
(
"
section
"
));
for
(
var
f
=
0
;
f
<
a
.
length
;
f
++
){
if
(
a
[
f
].
classList
.
contains
(
"
present
"
))
break
e
;
s
++
}
if
(
u
.
classList
.
contains
(
"
present
"
))
break
;
u
.
classList
.
contains
(
"
stack
"
)
===!
1
&&
s
++
}
h
.
progressbar
.
style
.
width
=
s
/
(
r
-
1
)
*
window
.
innerWidth
+
"
px
"
}}
function
Q
(){
if
(
i
.
controls
&&
h
.
controls
){
var
e
=
G
();
h
.
controlsLeft
.
concat
(
h
.
controlsRight
).
concat
(
h
.
controlsUp
).
concat
(
h
.
controlsDown
).
concat
(
h
.
controlsPrev
).
concat
(
h
.
controlsNext
).
forEach
(
function
(
e
){
e
.
classList
.
remove
(
"
enabled
"
)}),
e
.
left
&&
h
.
controlsLeft
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
right
&&
h
.
controlsRight
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
up
&&
h
.
controlsUp
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
down
&&
h
.
controlsDown
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
left
||
e
.
up
)
&&
h
.
controlsPrev
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
right
||
e
.
down
)
&&
h
.
controlsNext
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)})}}
function
G
(){
var
e
=
document
.
querySelectorAll
(
t
),
r
=
document
.
querySelectorAll
(
n
);
return
{
left
:
o
>
0
,
right
:
o
<
e
.
length
-
1
,
up
:
u
>
0
,
down
:
u
<
r
.
length
-
1
}}
function
Y
(){
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
i
=
Reveal
.
getIndices
(
r
);
$
(
i
.
h
,
i
.
v
)}
else
$
(
o
,
u
)}
else
{
var
s
=
parseInt
(
t
[
0
],
10
)
||
0
,
a
=
parseInt
(
t
[
1
],
10
)
||
0
;
$
(
s
,
a
)}}
function
Z
(
e
){
if
(
i
.
history
){
clearTimeout
(
g
);
if
(
typeof
e
==
"
number
"
)
g
=
setTimeout
(
Z
,
e
);
else
{
var
t
=
"
/
"
;
if
(
f
&&
typeof
f
.
getAttribute
(
"
id
"
)
==
"
string
"
)
t
=
"
/
"
+
f
.
getAttribute
(
"
id
"
);
else
{
if
(
o
>
0
||
u
>
0
)
t
+=
o
;
u
>
0
&&
(
t
+=
"
/
"
+
u
)}
window
.
location
.
hash
=
t
}}}
function
et
(
e
){
var
n
=
o
,
r
=
u
;
if
(
e
){
var
i
=!!
e
.
parentNode
.
nodeName
.
match
(
/section/gi
),
s
=
i
?
e
.
parentNode
:
e
,
a
=
O
(
document
.
querySelectorAll
(
t
));
n
=
Math
.
max
(
a
.
indexOf
(
s
),
0
),
i
&&
(
r
=
Math
.
max
(
O
(
e
.
parentNode
.
querySelectorAll
(
"
section
"
)).
indexOf
(
e
),
0
))}
return
{
h
:
n
,
v
:
r
}}
function
tt
(){
if
(
document
.
querySelector
(
n
+
"
.present
"
)){
var
e
=
document
.
querySelectorAll
(
n
+
"
.present .fragment:not(.visible)
"
);
if
(
e
.
length
)
return
e
[
0
].
classList
.
add
(
"
visible
"
),
D
(
"
fragmentshown
"
,{
fragment
:
e
[
0
]}),
!
0
}
else
{
var
r
=
document
.
querySelectorAll
(
t
+
"
.present .fragment:not(.visible)
"
);
if
(
r
.
length
)
return
r
[
0
].
classList
.
add
(
"
visible
"
),
D
(
"
fragmentshown
"
,{
fragment
:
r
[
0
]}),
!
0
}
return
!
1
}
function
nt
(){
if
(
document
.
querySelector
(
n
+
"
.present
"
)){
var
e
=
document
.
querySelectorAll
(
n
+
"
.present .fragment.visible
"
);
if
(
e
.
length
)
return
e
[
e
.
length
-
1
].
classList
.
remove
(
"
visible
"
),
D
(
"
fragmenthidden
"
,{
fragment
:
e
[
e
.
length
-
1
]}),
!
0
}
else
{
var
r
=
document
.
querySelectorAll
(
t
+
"
.present .fragment.visible
"
);
if
(
r
.
length
)
return
r
[
r
.
length
-
1
].
classList
.
remove
(
"
visible
"
),
D
(
"
fragmenthidden
"
,{
fragment
:
r
[
r
.
length
-
1
]}),
!
0
}
return
!
1
}
function
rt
(){
clearTimeout
(
m
),
s
&&
(
m
=
setTimeout
(
ft
,
s
))}
function
it
(){(
G
().
left
&&
R
()
||
nt
()
===!
1
)
&&
$
(
o
-
1
)}
function
st
(){(
G
().
right
&&
R
()
||
tt
()
===!
1
)
&&
$
(
o
+
1
)}
function
ot
(){(
G
().
up
&&
R
()
||
nt
()
===!
1
)
&&
$
(
o
,
u
-
1
)}
function
ut
(){(
G
().
down
&&
R
()
||
tt
()
===!
1
)
&&
$
(
o
,
u
+
1
)}
function
at
(){
if
(
nt
()
===!
1
)
if
(
G
().
up
)
ot
();
else
{
var
e
=
document
.
querySelector
(
t
+
"
.past:nth-child(
"
+
o
+
"
)
"
);
e
&&
(
u
=
e
.
querySelectorAll
(
"
section
"
).
length
+
1
||
undefined
,
o
--
,
$
())}}
function
ft
(){
tt
()
===!
1
&&
(
G
().
down
?
ut
():
st
()),
rt
()}
function
lt
(
e
){
var
t
=
document
.
activeElement
,
n
=!
(
!
document
.
activeElement
||!
document
.
activeElement
.
type
&&!
document
.
activeElement
.
href
&&
document
.
activeElement
.
contentEditable
===
"
inherit
"
);
if
(
n
||
e
.
shiftKey
||
e
.
altKey
||
e
.
ctrlKey
||
e
.
metaKey
)
return
;
var
r
=!
0
;
if
(
V
()
&&
[
66
,
190
,
191
].
indexOf
(
e
.
keyCode
)
===-
1
)
return
!
1
;
switch
(
e
.
keyCode
){
case
80
:
case
33
:
at
();
break
;
case
78
:
case
34
:
ft
();
break
;
case
72
:
case
37
:
it
();
break
;
case
76
:
case
39
:
st
();
break
;
case
75
:
case
38
:
ot
();
break
;
case
74
:
case
40
:
ut
();
break
;
case
36
:
$
(
0
);
break
;
case
35
:
$
(
Number
.
MAX_VALUE
);
break
;
case
32
:
R
()?
I
():
ft
();
break
;
case
13
:
R
()?
I
():
r
=!
1
;
break
;
case
66
:
case
190
:
case
191
:
X
();
break
;
case
70
:
U
();
break
;
default
:
r
=!
1
}
r
?
e
.
preventDefault
():
e
.
keyCode
===
27
&&
p
&&
(
q
(),
e
.
preventDefault
()),
rt
()}
function
ct
(
e
){
w
.
startX
=
e
.
touches
[
0
].
clientX
,
w
.
startY
=
e
.
touches
[
0
].
clientY
,
w
.
startCount
=
e
.
touches
.
length
,
e
.
touches
.
length
===
2
&&
i
.
overview
&&
(
w
.
startSpan
=
M
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
w
.
startX
,
y
:
w
.
startY
}))}
function
ht
(
e
){
if
(
!
w
.
handled
){
var
t
=
e
.
touches
[
0
].
clientX
,
n
=
e
.
touches
[
0
].
clientY
;
if
(
e
.
touches
.
length
===
2
&&
w
.
startCount
===
2
&&
i
.
overview
){
var
r
=
M
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
w
.
startX
,
y
:
w
.
startY
});
Math
.
abs
(
w
.
startSpan
-
r
)
>
w
.
threshold
&&
(
w
.
handled
=!
0
,
r
<
w
.
startSpan
?
F
():
I
()),
e
.
preventDefault
()}
else
if
(
e
.
touches
.
length
===
1
&&
w
.
startCount
!==
2
){
var
s
=
t
-
w
.
startX
,
o
=
n
-
w
.
startY
;
s
>
w
.
threshold
&&
Math
.
abs
(
s
)
>
Math
.
abs
(
o
)?(
w
.
handled
=!
0
,
it
()):
s
<-
w
.
threshold
&&
Math
.
abs
(
s
)
>
Math
.
abs
(
o
)?(
w
.
handled
=!
0
,
st
()):
o
>
w
.
threshold
?(
w
.
handled
=!
0
,
ot
()):
o
<-
w
.
threshold
&&
(
w
.
handled
=!
0
,
ut
()),
e
.
preventDefault
()}}
else
navigator
.
userAgent
.
match
(
/android/gi
)
&&
e
.
preventDefault
()}
function
pt
(
e
){
w
.
handled
=!
1
}
function
dt
(
e
){
clearTimeout
(
v
),
v
=
setTimeout
(
function
(){
var
t
=
e
.
detail
||-
e
.
wheelDelta
;
t
>
0
?
ft
():
at
()},
100
)}
function
vt
(
e
){
e
.
preventDefault
();
var
n
=
O
(
document
.
querySelectorAll
(
t
)).
length
,
r
=
Math
.
floor
(
e
.
clientX
/
h
.
wrapper
.
offsetWidth
*
n
);
$
(
r
)}
function
mt
(
e
){
e
.
preventDefault
(),
it
()}
function
gt
(
e
){
e
.
preventDefault
(),
st
()}
function
yt
(
e
){
e
.
preventDefault
(),
ot
()}
function
bt
(
e
){
e
.
preventDefault
(),
ut
()}
function
wt
(
e
){
e
.
preventDefault
(),
at
()}
function
Et
(
e
){
e
.
preventDefault
(),
ft
()}
function
St
(
e
){
Y
()}
function
xt
(
e
){
H
()}
function
Tt
(
e
){
if
(
R
()){
e
.
preventDefault
(),
I
();
var
t
=
e
.
target
;
while
(
t
&&!
t
.
nodeName
.
match
(
/section/gi
))
t
=
t
.
parentNode
;
if
(
t
.
nodeName
.
match
(
/section/gi
)){
var
n
=
parseInt
(
t
.
getAttribute
(
"
data-index-h
"
),
10
),
r
=
parseInt
(
t
.
getAttribute
(
"
data-index-v
"
),
10
);
$
(
n
,
r
)}}}
var
e
=
"
.reveal .slides section
"
,
t
=
"
.reveal .slides>section
"
,
n
=
"
.reveal .slides>section.present>section
"
,
r
=
"
.reveal .slides>section:first-child
"
,
i
=
{
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
,
autoSlide
:
0
,
mouseWheel
:
!
1
,
rollingLinks
:
!
0
,
theme
:
null
,
transition
:
"
default
"
,
dependencies
:[]},
s
=
i
.
autoSlide
,
o
=
0
,
u
=
0
,
a
,
f
,
l
=
[],
c
=
1
,
h
=
{},
p
=
"
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
,
d
=
"
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
,
v
=
0
,
m
=
0
,
g
=
0
,
y
=
0
,
b
=
0
,
w
=
{
startX
:
0
,
startY
:
0
,
startSpan
:
0
,
startCount
:
0
,
handled
:
!
1
,
threshold
:
80
};
return
{
initialize
:
E
,
slide
:
$
,
left
:
it
,
right
:
st
,
up
:
ot
,
down
:
ut
,
prev
:
at
,
next
:
ft
,
prevFragment
:
nt
,
nextFragment
:
tt
,
navigateTo
:
$
,
navigateLeft
:
it
,
navigateRight
:
st
,
navigateUp
:
ot
,
navigateDown
:
ut
,
navigatePrev
:
at
,
navigateNext
:
ft
,
layout
:
H
,
toggleOverview
:
q
,
togglePause
:
X
,
addEventListeners
:
k
,
removeEventListeners
:
L
,
getIndices
:
et
,
getPreviousSlide
:
function
(){
return
a
},
getCurrentSlide
:
function
(){
return
f
},
getScale
:
function
(){
return
c
},
getQueryHash
:
function
(){
var
e
=
{};
return
location
.
search
.
replace
(
/
[
A-Z0-9
]
+
?
=
(\w
*
)
/gi
,
function
(
t
){
e
[
t
.
split
(
"
=
"
).
shift
()]
=
t
.
split
(
"
=
"
).
pop
()}),
e
},
addEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
h
.
wrapper
||
document
.
querySelector
(
"
.reveal
"
)).
addEventListener
(
e
,
t
,
n
)},
removeEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
h
.
wrapper
||
document
.
querySelector
(
"
.reveal
"
)).
removeEventListener
(
e
,
t
,
n
)}}}();
\ No newline at end of file
var
Reveal
=
function
(){
"
use strict
"
;
function
E
(
e
){
if
(
!
d
&&!
p
){
document
.
body
.
setAttribute
(
"
class
"
,
"
no-transforms
"
);
return
}
window
.
addEventListener
(
"
load
"
,
H
,
!
1
),
A
(
i
,
e
),
x
(),
T
()}
function
S
(){
h
.
theme
=
document
.
querySelector
(
"
#theme
"
),
h
.
wrapper
=
document
.
querySelector
(
"
.reveal
"
),
h
.
slides
=
document
.
querySelector
(
"
.reveal .slides
"
);
if
(
!
h
.
wrapper
.
querySelector
(
"
.progress
"
)
&&
i
.
progress
){
var
e
=
document
.
createElement
(
"
div
"
);
e
.
classList
.
add
(
"
progress
"
),
e
.
innerHTML
=
"
<span></span>
"
,
h
.
wrapper
.
appendChild
(
e
)}
if
(
!
h
.
wrapper
.
querySelector
(
"
.controls
"
)
&&
i
.
controls
){
var
t
=
document
.
createElement
(
"
aside
"
);
t
.
classList
.
add
(
"
controls
"
),
t
.
innerHTML
=
'
<div class="navigate-left"></div><div class="navigate-right"></div><div class="navigate-up"></div><div class="navigate-down"></div>
'
,
h
.
wrapper
.
appendChild
(
t
)}
if
(
!
h
.
wrapper
.
querySelector
(
"
.state-background
"
)){
var
n
=
document
.
createElement
(
"
div
"
);
n
.
classList
.
add
(
"
state-background
"
),
h
.
wrapper
.
appendChild
(
n
)}
if
(
!
h
.
wrapper
.
querySelector
(
"
.pause-overlay
"
)){
var
r
=
document
.
createElement
(
"
div
"
);
r
.
classList
.
add
(
"
pause-overlay
"
),
h
.
wrapper
.
appendChild
(
r
)}
h
.
progress
=
document
.
querySelector
(
"
.reveal .progress
"
),
h
.
progressbar
=
document
.
querySelector
(
"
.reveal .progress span
"
),
i
.
controls
&&
(
h
.
controls
=
document
.
querySelector
(
"
.reveal .controls
"
),
h
.
controlsLeft
=
O
(
document
.
querySelectorAll
(
"
.navigate-left
"
)),
h
.
controlsRight
=
O
(
document
.
querySelectorAll
(
"
.navigate-right
"
)),
h
.
controlsUp
=
O
(
document
.
querySelectorAll
(
"
.navigate-up
"
)),
h
.
controlsDown
=
O
(
document
.
querySelectorAll
(
"
.navigate-down
"
)),
h
.
controlsPrev
=
O
(
document
.
querySelectorAll
(
"
.navigate-prev
"
)),
h
.
controlsNext
=
O
(
document
.
querySelectorAll
(
"
.navigate-next
"
)))}
function
x
(){
/iphone|ipod|android/gi
.
test
(
navigator
.
userAgent
)
&&!
/crios/gi
.
test
(
navigator
.
userAgent
)
&&
(
window
.
addEventListener
(
"
load
"
,
_
,
!
1
),
window
.
addEventListener
(
"
orientationchange
"
,
_
,
!
1
))}
function
T
(){
function
o
(){
t
.
length
&&
head
.
js
.
apply
(
null
,
t
),
N
()}
var
e
=
[],
t
=
[];
for
(
var
n
=
0
,
r
=
i
.
dependencies
.
length
;
n
<
r
;
n
++
){
var
s
=
i
.
dependencies
[
n
];
if
(
!
s
.
condition
||
s
.
condition
())
s
.
async
?
t
.
push
(
s
.
src
):
e
.
push
(
s
.
src
),
typeof
s
.
callback
==
"
function
"
&&
head
.
ready
(
s
.
src
.
match
(
/
([\w\d
_
\-]
*
)\.?
js$|
[^\\\/]
*$/i
)[
0
],
s
.
callback
)}
e
.
length
?(
head
.
ready
(
o
),
head
.
js
.
apply
(
null
,
e
)):
o
()}
function
N
(){
S
(),
k
(),
C
(),
H
(),
Y
(),
rt
(),
setTimeout
(
function
(){
D
(
"
ready
"
,{
indexh
:
o
,
indexv
:
u
,
currentSlide
:
f
})},
1
)}
function
C
(){
p
===!
1
&&
(
i
.
transition
=
"
linear
"
),
i
.
controls
&&
h
.
controls
&&
(
h
.
controls
.
style
.
display
=
"
block
"
),
i
.
progress
&&
h
.
progress
&&
(
h
.
progress
.
style
.
display
=
"
block
"
),
i
.
transition
!==
"
default
"
&&
h
.
wrapper
.
classList
.
add
(
i
.
transition
),
i
.
rtl
&&
h
.
wrapper
.
classList
.
add
(
"
rtl
"
),
i
.
center
&&
h
.
wrapper
.
classList
.
add
(
"
center
"
),
i
.
mouseWheel
&&
(
document
.
addEventListener
(
"
DOMMouseScroll
"
,
dt
,
!
1
),
document
.
addEventListener
(
"
mousewheel
"
,
dt
,
!
1
)),
i
.
rollingLinks
&&
P
();
if
(
i
.
theme
&&
h
.
theme
){
var
e
=
h
.
theme
.
getAttribute
(
"
href
"
),
t
=
/
[^\/]
*
?(?=\.
css
)
/
,
n
=
e
.
match
(
t
)[
0
];
i
.
theme
!==
n
&&
(
e
=
e
.
replace
(
t
,
i
.
theme
),
h
.
theme
.
setAttribute
(
"
href
"
,
e
))}}
function
k
(){
window
.
addEventListener
(
"
hashchange
"
,
St
,
!
1
),
window
.
addEventListener
(
"
resize
"
,
xt
,
!
1
),
i
.
touch
&&
(
document
.
addEventListener
(
"
touchstart
"
,
ct
,
!
1
),
document
.
addEventListener
(
"
touchmove
"
,
ht
,
!
1
),
document
.
addEventListener
(
"
touchend
"
,
pt
,
!
1
)),
i
.
keyboard
&&
document
.
addEventListener
(
"
keydown
"
,
lt
,
!
1
),
i
.
progress
&&
h
.
progress
&&
h
.
progress
.
addEventListener
(
"
click
"
,
vt
,
!
1
);
if
(
i
.
controls
&&
h
.
controls
){
var
e
=
"
ontouchstart
"
in
window
?
"
touchstart
"
:
"
click
"
;
h
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
mt
,
!
1
)}),
h
.
controlsRight
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
gt
,
!
1
)}),
h
.
controlsUp
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
yt
,
!
1
)}),
h
.
controlsDown
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
bt
,
!
1
)}),
h
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
wt
,
!
1
)}),
h
.
controlsNext
.
forEach
(
function
(
t
){
t
.
addEventListener
(
e
,
Et
,
!
1
)})}}
function
L
(){
document
.
removeEventListener
(
"
keydown
"
,
lt
,
!
1
),
window
.
removeEventListener
(
"
hashchange
"
,
St
,
!
1
),
window
.
removeEventListener
(
"
resize
"
,
xt
,
!
1
),
i
.
touch
&&
(
document
.
removeEventListener
(
"
touchstart
"
,
ct
,
!
1
),
document
.
removeEventListener
(
"
touchmove
"
,
ht
,
!
1
),
document
.
removeEventListener
(
"
touchend
"
,
pt
,
!
1
)),
i
.
progress
&&
h
.
progress
&&
h
.
progress
.
removeEventListener
(
"
click
"
,
vt
,
!
1
);
if
(
i
.
controls
&&
h
.
controls
){
var
e
=
"
ontouchstart
"
in
window
?
"
touchstart
"
:
"
click
"
;
h
.
controlsLeft
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
mt
,
!
1
)}),
h
.
controlsRight
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
gt
,
!
1
)}),
h
.
controlsUp
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
yt
,
!
1
)}),
h
.
controlsDown
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
bt
,
!
1
)}),
h
.
controlsPrev
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
wt
,
!
1
)}),
h
.
controlsNext
.
forEach
(
function
(
t
){
t
.
removeEventListener
(
e
,
Et
,
!
1
)})}}
function
A
(
e
,
t
){
for
(
var
n
in
t
)
e
[
n
]
=
t
[
n
]}
function
O
(
e
){
return
Array
.
prototype
.
slice
.
call
(
e
)}
function
M
(
e
,
t
){
var
n
=
e
.
x
-
t
.
x
,
r
=
e
.
y
-
t
.
y
;
return
Math
.
sqrt
(
n
*
n
+
r
*
r
)}
function
_
(){
window
.
orientation
===
0
?(
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
D
(
e
,
t
){
var
n
=
document
.
createEvent
(
"
HTMLEvents
"
,
1
,
2
);
n
.
initEvent
(
e
,
!
0
,
!
0
),
A
(
n
,
t
),
h
.
wrapper
.
dispatchEvent
(
n
)}
function
P
(){
if
(
p
&&!
(
"
msPerspective
"
in
document
.
body
.
style
)){
var
t
=
document
.
querySelectorAll
(
e
+
"
a:not(.image)
"
);
for
(
var
n
=
0
,
r
=
t
.
length
;
n
<
r
;
n
++
){
var
i
=
t
[
n
];
if
(
i
.
textContent
&&!
i
.
querySelector
(
"
*
"
)
&&
(
!
i
.
className
||!
i
.
classList
.
contains
(
i
,
"
roll
"
))){
var
s
=
document
.
createElement
(
"
span
"
);
s
.
setAttribute
(
"
data-title
"
,
i
.
text
),
s
.
innerHTML
=
i
.
innerHTML
,
i
.
classList
.
add
(
"
roll
"
),
i
.
innerHTML
=
""
,
i
.
appendChild
(
s
)}}}}
function
H
(){
var
t
=
h
.
wrapper
.
offsetWidth
,
n
=
h
.
wrapper
.
offsetHeight
;
t
-=
n
*
i
.
margin
,
n
-=
n
*
i
.
margin
;
var
r
=
i
.
width
,
s
=
i
.
height
;
typeof
r
==
"
string
"
&&
/%$/
.
test
(
r
)
&&
(
r
=
parseInt
(
r
,
10
)
/
100
*
t
),
typeof
s
==
"
string
"
&&
/%$/
.
test
(
s
)
&&
(
s
=
parseInt
(
s
,
10
)
/
100
*
n
),
h
.
slides
.
style
.
width
=
r
+
"
px
"
,
h
.
slides
.
style
.
height
=
s
+
"
px
"
,
c
=
Math
.
min
(
t
/
r
,
n
/
s
),
c
=
Math
.
max
(
c
,
i
.
minScale
),
c
=
Math
.
min
(
c
,
i
.
maxScale
);
if
(
typeof
h
.
slides
.
style
.
zoom
!=
"
undefined
"
&&!
navigator
.
userAgent
.
match
(
/
(
iphone|ipod|android
)
/gi
))
h
.
slides
.
style
.
zoom
=
c
;
else
{
var
o
=
"
translate(-50%, -50%) scale(
"
+
c
+
"
) translate(50%, 50%)
"
;
h
.
slides
.
style
.
WebkitTransform
=
o
,
h
.
slides
.
style
.
MozTransform
=
o
,
h
.
slides
.
style
.
msTransform
=
o
,
h
.
slides
.
style
.
OTransform
=
o
,
h
.
slides
.
style
.
transform
=
o
}
if
(
i
.
center
){
var
u
=
O
(
document
.
querySelectorAll
(
e
)),
a
=-
s
/
2
;
for
(
var
f
=
0
,
l
=
u
.
length
;
f
<
l
;
f
++
){
var
p
=
u
[
f
];
if
(
p
.
style
.
display
===
"
none
"
)
continue
;
p
.
classList
.
contains
(
"
stack
"
)?
p
.
style
.
top
=
0
:
p
.
style
.
top
=
Math
.
max
(
-
(
p
.
offsetHeight
/
2
)
-
20
,
a
)
+
"
px
"
}}}
function
B
(
e
,
t
){
e
&&
e
.
setAttribute
(
"
data-previous-indexv
"
,
t
||
0
)}
function
j
(
e
){
return
e
&&
e
.
classList
.
contains
(
"
stack
"
)?
parseInt
(
e
.
getAttribute
(
"
data-previous-indexv
"
)
||
0
,
10
):
0
}
function
F
(){
if
(
i
.
overview
){
var
e
=
h
.
wrapper
.
classList
.
contains
(
"
overview
"
);
h
.
wrapper
.
classList
.
add
(
"
overview
"
),
h
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
),
clearTimeout
(
y
),
clearTimeout
(
b
),
y
=
setTimeout
(
function
(){
var
n
=
document
.
querySelectorAll
(
t
);
for
(
var
r
=
0
,
i
=
n
.
length
;
r
<
i
;
r
++
){
var
s
=
n
[
r
],
a
=
"
translateZ(-2500px) translate(
"
+
(
r
-
o
)
*
105
+
"
%, 0%)
"
;
s
.
setAttribute
(
"
data-index-h
"
,
r
),
s
.
style
.
display
=
"
block
"
,
s
.
style
.
WebkitTransform
=
a
,
s
.
style
.
MozTransform
=
a
,
s
.
style
.
msTransform
=
a
,
s
.
style
.
OTransform
=
a
,
s
.
style
.
transform
=
a
;
if
(
s
.
classList
.
contains
(
"
stack
"
)){
var
l
=
s
.
querySelectorAll
(
"
section
"
);
for
(
var
c
=
0
,
h
=
l
.
length
;
c
<
h
;
c
++
){
var
p
=
r
===
o
?
u
:
j
(
s
),
d
=
l
[
c
],
v
=
"
translate(0%,
"
+
(
c
-
p
)
*
105
+
"
%)
"
;
d
.
setAttribute
(
"
data-index-h
"
,
r
),
d
.
setAttribute
(
"
data-index-v
"
,
c
),
d
.
style
.
display
=
"
block
"
,
d
.
style
.
WebkitTransform
=
v
,
d
.
style
.
MozTransform
=
v
,
d
.
style
.
msTransform
=
v
,
d
.
style
.
OTransform
=
v
,
d
.
style
.
transform
=
v
,
d
.
addEventListener
(
"
click
"
,
Tt
,
!
0
)}}
else
s
.
addEventListener
(
"
click
"
,
Tt
,
!
0
)}
H
(),
e
||
D
(
"
overviewshown
"
,{
indexh
:
o
,
indexv
:
u
,
currentSlide
:
f
})},
10
)}}
function
I
(){
if
(
i
.
overview
){
clearTimeout
(
y
),
clearTimeout
(
b
),
h
.
wrapper
.
classList
.
remove
(
"
overview
"
),
h
.
wrapper
.
classList
.
add
(
"
exit-overview
"
),
b
=
setTimeout
(
function
(){
h
.
wrapper
.
classList
.
remove
(
"
exit-overview
"
)},
10
);
var
t
=
O
(
document
.
querySelectorAll
(
e
));
for
(
var
n
=
0
,
r
=
t
.
length
;
n
<
r
;
n
++
){
var
s
=
t
[
n
];
s
.
style
.
display
=
""
,
s
.
style
.
WebkitTransform
=
""
,
s
.
style
.
MozTransform
=
""
,
s
.
style
.
msTransform
=
""
,
s
.
style
.
OTransform
=
""
,
s
.
style
.
transform
=
""
,
s
.
removeEventListener
(
"
click
"
,
Tt
,
!
0
)}
$
(
o
,
u
),
D
(
"
overviewhidden
"
,{
indexh
:
o
,
indexv
:
u
,
currentSlide
:
f
})}}
function
q
(
e
){
typeof
e
==
"
boolean
"
?
e
?
F
():
I
():
R
()?
I
():
F
()}
function
R
(){
return
h
.
wrapper
.
classList
.
contains
(
"
overview
"
)}
function
U
(){
var
e
=
document
.
body
,
t
=
e
.
requestFullScreen
||
e
.
webkitRequestFullScreen
||
e
.
mozRequestFullScreen
||
e
.
msRequestFullScreen
;
t
&&
t
.
apply
(
e
)}
function
z
(){
h
.
wrapper
.
classList
.
add
(
"
paused
"
)}
function
W
(){
h
.
wrapper
.
classList
.
remove
(
"
paused
"
)}
function
X
(){
V
()?
W
():
z
()}
function
V
(){
return
h
.
wrapper
.
classList
.
contains
(
"
paused
"
)}
function
$
(
e
,
i
,
s
){
a
=
f
;
var
c
=
document
.
querySelectorAll
(
t
);
i
===
undefined
&&
(
i
=
j
(
c
[
e
])),
a
&&
a
.
parentNode
&&
a
.
parentNode
.
classList
.
contains
(
"
stack
"
)
&&
B
(
a
.
parentNode
,
u
);
var
h
=
l
.
concat
();
l
.
length
=
0
;
var
p
=
o
,
d
=
u
;
o
=
J
(
t
,
e
===
undefined
?
o
:
e
),
u
=
J
(
n
,
i
===
undefined
?
u
:
i
),
H
();
e
:
for
(
var
v
=
0
,
m
=
l
.
length
;
v
<
m
;
v
++
){
for
(
var
g
=
0
;
g
<
h
.
length
;
g
++
)
if
(
h
[
g
]
===
l
[
v
]){
h
.
splice
(
g
,
1
);
continue
e
}
document
.
documentElement
.
classList
.
add
(
l
[
v
]),
D
(
l
[
v
])}
while
(
h
.
length
)
document
.
documentElement
.
classList
.
remove
(
h
.
pop
());
R
()
&&
F
(),
Z
(
1500
);
var
y
=
c
[
o
],
b
=
y
.
querySelectorAll
(
"
section
"
);
f
=
b
[
u
]
||
y
;
if
(
typeof
s
!=
"
undefined
"
){
var
w
=
f
.
querySelectorAll
(
"
.fragment
"
);
O
(
w
).
forEach
(
function
(
e
,
t
){
t
<
s
?
e
.
classList
.
add
(
"
visible
"
):
e
.
classList
.
remove
(
"
visible
"
)})}
o
!==
p
||
u
!==
d
?
D
(
"
slidechanged
"
,{
indexh
:
o
,
indexv
:
u
,
previousSlide
:
a
,
currentSlide
:
f
}):
a
=
null
,
a
&&
(
a
.
classList
.
remove
(
"
present
"
),
document
.
querySelector
(
r
).
classList
.
contains
(
"
present
"
)
&&
setTimeout
(
function
(){
var
e
=
O
(
document
.
querySelectorAll
(
t
+
"
.stack
"
)),
n
;
for
(
n
in
e
)
e
[
n
]
&&
B
(
e
[
n
],
0
)},
0
)),
Q
(),
K
()}
function
J
(
e
,
t
){
var
n
=
O
(
document
.
querySelectorAll
(
e
)),
r
=
n
.
length
;
if
(
r
){
i
.
loop
&&
(
t
%=
r
,
t
<
0
&&
(
t
=
r
+
t
)),
t
=
Math
.
max
(
Math
.
min
(
t
,
r
-
1
),
0
);
for
(
var
o
=
0
;
o
<
r
;
o
++
){
var
u
=
n
[
o
];
if
(
R
()
===!
1
){
var
a
=
Math
.
abs
((
t
-
o
)
%
(
r
-
3
))
||
0
;
u
.
style
.
display
=
a
>
3
?
"
none
"
:
"
block
"
}
n
[
o
].
classList
.
remove
(
"
past
"
),
n
[
o
].
classList
.
remove
(
"
present
"
),
n
[
o
].
classList
.
remove
(
"
future
"
),
o
<
t
?
n
[
o
].
classList
.
add
(
"
past
"
):
o
>
t
&&
n
[
o
].
classList
.
add
(
"
future
"
),
u
.
querySelector
(
"
section
"
)
&&
n
[
o
].
classList
.
add
(
"
stack
"
)}
n
[
t
].
classList
.
add
(
"
present
"
);
var
f
=
n
[
t
].
getAttribute
(
"
data-state
"
);
f
&&
(
l
=
l
.
concat
(
f
.
split
(
"
"
)));
var
c
=
n
[
t
].
getAttribute
(
"
data-autoslide
"
);
c
?
s
=
parseInt
(
c
,
10
):
s
=
i
.
autoSlide
}
else
t
=
0
;
return
t
}
function
K
(){
if
(
i
.
progress
&&
h
.
progress
){
var
n
=
O
(
document
.
querySelectorAll
(
t
)),
r
=
document
.
querySelectorAll
(
e
+
"
:not(.stack)
"
).
length
,
s
=
0
;
e
:
for
(
var
o
=
0
;
o
<
n
.
length
;
o
++
){
var
u
=
n
[
o
],
a
=
O
(
u
.
querySelectorAll
(
"
section
"
));
for
(
var
f
=
0
;
f
<
a
.
length
;
f
++
){
if
(
a
[
f
].
classList
.
contains
(
"
present
"
))
break
e
;
s
++
}
if
(
u
.
classList
.
contains
(
"
present
"
))
break
;
u
.
classList
.
contains
(
"
stack
"
)
===!
1
&&
s
++
}
h
.
progressbar
.
style
.
width
=
s
/
(
r
-
1
)
*
window
.
innerWidth
+
"
px
"
}}
function
Q
(){
if
(
i
.
controls
&&
h
.
controls
){
var
e
=
G
();
h
.
controlsLeft
.
concat
(
h
.
controlsRight
).
concat
(
h
.
controlsUp
).
concat
(
h
.
controlsDown
).
concat
(
h
.
controlsPrev
).
concat
(
h
.
controlsNext
).
forEach
(
function
(
e
){
e
.
classList
.
remove
(
"
enabled
"
)}),
e
.
left
&&
h
.
controlsLeft
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
right
&&
h
.
controlsRight
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
up
&&
h
.
controlsUp
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),
e
.
down
&&
h
.
controlsDown
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
left
||
e
.
up
)
&&
h
.
controlsPrev
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)}),(
e
.
right
||
e
.
down
)
&&
h
.
controlsNext
.
forEach
(
function
(
e
){
e
.
classList
.
add
(
"
enabled
"
)})}}
function
G
(){
var
e
=
document
.
querySelectorAll
(
t
),
r
=
document
.
querySelectorAll
(
n
);
return
{
left
:
o
>
0
,
right
:
o
<
e
.
length
-
1
,
up
:
u
>
0
,
down
:
u
<
r
.
length
-
1
}}
function
Y
(){
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
i
=
Reveal
.
getIndices
(
r
);
$
(
i
.
h
,
i
.
v
)}
else
$
(
o
,
u
)}
else
{
var
s
=
parseInt
(
t
[
0
],
10
)
||
0
,
a
=
parseInt
(
t
[
1
],
10
)
||
0
;
$
(
s
,
a
)}}
function
Z
(
e
){
if
(
i
.
history
){
clearTimeout
(
g
);
if
(
typeof
e
==
"
number
"
)
g
=
setTimeout
(
Z
,
e
);
else
{
var
t
=
"
/
"
;
if
(
f
&&
typeof
f
.
getAttribute
(
"
id
"
)
==
"
string
"
)
t
=
"
/
"
+
f
.
getAttribute
(
"
id
"
);
else
{
if
(
o
>
0
||
u
>
0
)
t
+=
o
;
u
>
0
&&
(
t
+=
"
/
"
+
u
)}
window
.
location
.
hash
=
t
}}}
function
et
(
e
){
var
n
=
o
,
r
=
u
;
if
(
e
){
var
i
=!!
e
.
parentNode
.
nodeName
.
match
(
/section/gi
),
s
=
i
?
e
.
parentNode
:
e
,
a
=
O
(
document
.
querySelectorAll
(
t
));
n
=
Math
.
max
(
a
.
indexOf
(
s
),
0
),
i
&&
(
r
=
Math
.
max
(
O
(
e
.
parentNode
.
querySelectorAll
(
"
section
"
)).
indexOf
(
e
),
0
))}
return
{
h
:
n
,
v
:
r
}}
function
tt
(){
if
(
document
.
querySelector
(
n
+
"
.present
"
)){
var
e
=
document
.
querySelectorAll
(
n
+
"
.present .fragment:not(.visible)
"
);
if
(
e
.
length
)
return
e
[
0
].
classList
.
add
(
"
visible
"
),
D
(
"
fragmentshown
"
,{
fragment
:
e
[
0
]}),
!
0
}
else
{
var
r
=
document
.
querySelectorAll
(
t
+
"
.present .fragment:not(.visible)
"
);
if
(
r
.
length
)
return
r
[
0
].
classList
.
add
(
"
visible
"
),
D
(
"
fragmentshown
"
,{
fragment
:
r
[
0
]}),
!
0
}
return
!
1
}
function
nt
(){
if
(
document
.
querySelector
(
n
+
"
.present
"
)){
var
e
=
document
.
querySelectorAll
(
n
+
"
.present .fragment.visible
"
);
if
(
e
.
length
)
return
e
[
e
.
length
-
1
].
classList
.
remove
(
"
visible
"
),
D
(
"
fragmenthidden
"
,{
fragment
:
e
[
e
.
length
-
1
]}),
!
0
}
else
{
var
r
=
document
.
querySelectorAll
(
t
+
"
.present .fragment.visible
"
);
if
(
r
.
length
)
return
r
[
r
.
length
-
1
].
classList
.
remove
(
"
visible
"
),
D
(
"
fragmenthidden
"
,{
fragment
:
r
[
r
.
length
-
1
]}),
!
0
}
return
!
1
}
function
rt
(){
clearTimeout
(
m
),
s
&&
(
m
=
setTimeout
(
ft
,
s
))}
function
it
(){(
G
().
left
&&
R
()
||
nt
()
===!
1
)
&&
$
(
o
-
1
)}
function
st
(){(
G
().
right
&&
R
()
||
tt
()
===!
1
)
&&
$
(
o
+
1
)}
function
ot
(){(
G
().
up
&&
R
()
||
nt
()
===!
1
)
&&
$
(
o
,
u
-
1
)}
function
ut
(){(
G
().
down
&&
R
()
||
tt
()
===!
1
)
&&
$
(
o
,
u
+
1
)}
function
at
(){
if
(
nt
()
===!
1
)
if
(
G
().
up
)
ot
();
else
{
var
e
=
document
.
querySelector
(
t
+
"
.past:nth-child(
"
+
o
+
"
)
"
);
e
&&
(
u
=
e
.
querySelectorAll
(
"
section
"
).
length
+
1
||
undefined
,
o
--
,
$
())}}
function
ft
(){
tt
()
===!
1
&&
(
G
().
down
?
ut
():
st
()),
rt
()}
function
lt
(
e
){
var
t
=
document
.
activeElement
,
n
=!
(
!
document
.
activeElement
||!
document
.
activeElement
.
type
&&!
document
.
activeElement
.
href
&&
document
.
activeElement
.
contentEditable
===
"
inherit
"
);
if
(
n
||
e
.
shiftKey
||
e
.
altKey
||
e
.
ctrlKey
||
e
.
metaKey
)
return
;
var
r
=!
0
;
if
(
V
()
&&
[
66
,
190
,
191
].
indexOf
(
e
.
keyCode
)
===-
1
)
return
!
1
;
switch
(
e
.
keyCode
){
case
80
:
case
33
:
at
();
break
;
case
78
:
case
34
:
ft
();
break
;
case
72
:
case
37
:
it
();
break
;
case
76
:
case
39
:
st
();
break
;
case
75
:
case
38
:
ot
();
break
;
case
74
:
case
40
:
ut
();
break
;
case
36
:
$
(
0
);
break
;
case
35
:
$
(
Number
.
MAX_VALUE
);
break
;
case
32
:
R
()?
I
():
ft
();
break
;
case
13
:
R
()?
I
():
r
=!
1
;
break
;
case
66
:
case
190
:
case
191
:
X
();
break
;
case
70
:
U
();
break
;
default
:
r
=!
1
}
r
?
e
.
preventDefault
():
e
.
keyCode
===
27
&&
p
&&
(
q
(),
e
.
preventDefault
()),
rt
()}
function
ct
(
e
){
w
.
startX
=
e
.
touches
[
0
].
clientX
,
w
.
startY
=
e
.
touches
[
0
].
clientY
,
w
.
startCount
=
e
.
touches
.
length
,
e
.
touches
.
length
===
2
&&
i
.
overview
&&
(
w
.
startSpan
=
M
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
w
.
startX
,
y
:
w
.
startY
}))}
function
ht
(
e
){
if
(
!
w
.
handled
){
var
t
=
e
.
touches
[
0
].
clientX
,
n
=
e
.
touches
[
0
].
clientY
;
if
(
e
.
touches
.
length
===
2
&&
w
.
startCount
===
2
&&
i
.
overview
){
var
r
=
M
({
x
:
e
.
touches
[
1
].
clientX
,
y
:
e
.
touches
[
1
].
clientY
},{
x
:
w
.
startX
,
y
:
w
.
startY
});
Math
.
abs
(
w
.
startSpan
-
r
)
>
w
.
threshold
&&
(
w
.
handled
=!
0
,
r
<
w
.
startSpan
?
F
():
I
()),
e
.
preventDefault
()}
else
if
(
e
.
touches
.
length
===
1
&&
w
.
startCount
!==
2
){
var
s
=
t
-
w
.
startX
,
o
=
n
-
w
.
startY
;
s
>
w
.
threshold
&&
Math
.
abs
(
s
)
>
Math
.
abs
(
o
)?(
w
.
handled
=!
0
,
it
()):
s
<-
w
.
threshold
&&
Math
.
abs
(
s
)
>
Math
.
abs
(
o
)?(
w
.
handled
=!
0
,
st
()):
o
>
w
.
threshold
?(
w
.
handled
=!
0
,
ot
()):
o
<-
w
.
threshold
&&
(
w
.
handled
=!
0
,
ut
()),
e
.
preventDefault
()}}
else
navigator
.
userAgent
.
match
(
/android/gi
)
&&
e
.
preventDefault
()}
function
pt
(
e
){
w
.
handled
=!
1
}
function
dt
(
e
){
clearTimeout
(
v
),
v
=
setTimeout
(
function
(){
var
t
=
e
.
detail
||-
e
.
wheelDelta
;
t
>
0
?
ft
():
at
()},
100
)}
function
vt
(
e
){
e
.
preventDefault
();
var
n
=
O
(
document
.
querySelectorAll
(
t
)).
length
,
r
=
Math
.
floor
(
e
.
clientX
/
h
.
wrapper
.
offsetWidth
*
n
);
$
(
r
)}
function
mt
(
e
){
e
.
preventDefault
(),
it
()}
function
gt
(
e
){
e
.
preventDefault
(),
st
()}
function
yt
(
e
){
e
.
preventDefault
(),
ot
()}
function
bt
(
e
){
e
.
preventDefault
(),
ut
()}
function
wt
(
e
){
e
.
preventDefault
(),
at
()}
function
Et
(
e
){
e
.
preventDefault
(),
ft
()}
function
St
(
e
){
Y
()}
function
xt
(
e
){
H
()}
function
Tt
(
e
){
if
(
R
()){
e
.
preventDefault
(),
I
();
var
t
=
e
.
target
;
while
(
t
&&!
t
.
nodeName
.
match
(
/section/gi
))
t
=
t
.
parentNode
;
if
(
t
.
nodeName
.
match
(
/section/gi
)){
var
n
=
parseInt
(
t
.
getAttribute
(
"
data-index-h
"
),
10
),
r
=
parseInt
(
t
.
getAttribute
(
"
data-index-v
"
),
10
);
$
(
n
,
r
)}}}
var
e
=
"
.reveal .slides section
"
,
t
=
"
.reveal .slides>section
"
,
n
=
"
.reveal .slides>section.present>section
"
,
r
=
"
.reveal .slides>section:first-child
"
,
i
=
{
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
,
autoSlide
:
0
,
mouseWheel
:
!
1
,
rollingLinks
:
!
0
,
theme
:
null
,
transition
:
"
default
"
,
dependencies
:[]},
s
=
i
.
autoSlide
,
o
=
0
,
u
=
0
,
a
,
f
,
l
=
[],
c
=
1
,
h
=
{},
p
=
"
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
,
d
=
"
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
,
v
=
0
,
m
=
0
,
g
=
0
,
y
=
0
,
b
=
0
,
w
=
{
startX
:
0
,
startY
:
0
,
startSpan
:
0
,
startCount
:
0
,
handled
:
!
1
,
threshold
:
80
};
return
{
initialize
:
E
,
slide
:
$
,
left
:
it
,
right
:
st
,
up
:
ot
,
down
:
ut
,
prev
:
at
,
next
:
ft
,
prevFragment
:
nt
,
nextFragment
:
tt
,
navigateTo
:
$
,
navigateLeft
:
it
,
navigateRight
:
st
,
navigateUp
:
ot
,
navigateDown
:
ut
,
navigatePrev
:
at
,
navigateNext
:
ft
,
layout
:
H
,
toggleOverview
:
q
,
togglePause
:
X
,
addEventListeners
:
k
,
removeEventListeners
:
L
,
getIndices
:
et
,
getSlide
:
function
(
e
,
n
){
var
r
=
document
.
querySelectorAll
(
t
)[
e
],
i
=
r
&&
r
.
querySelectorAll
(
"
section
"
);
return
typeof
n
!=
"
undefined
"
?
i
?
i
[
n
]:
undefined
:
r
},
getPreviousSlide
:
function
(){
return
a
},
getCurrentSlide
:
function
(){
return
f
},
getScale
:
function
(){
return
c
},
getQueryHash
:
function
(){
var
e
=
{};
return
location
.
search
.
replace
(
/
[
A-Z0-9
]
+
?
=
(\w
*
)
/gi
,
function
(
t
){
e
[
t
.
split
(
"
=
"
).
shift
()]
=
t
.
split
(
"
=
"
).
pop
()}),
e
},
addEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
h
.
wrapper
||
document
.
querySelector
(
"
.reveal
"
)).
addEventListener
(
e
,
t
,
n
)},
removeEventListener
:
function
(
e
,
t
,
n
){
"
addEventListener
"
in
window
&&
(
h
.
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