reveal-ck 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/README.md +13 -0
- data/bin/reveal-ck +23 -8
- data/lib/reveal-ck.rb +6 -0
- data/lib/reveal-ck/build_task.rb +14 -0
- data/lib/reveal-ck/builder.rb +21 -0
- data/lib/reveal-ck/config.rb +43 -0
- data/lib/reveal-ck/file_slicer.rb +19 -17
- data/lib/reveal-ck/file_splicer.rb +30 -28
- data/lib/reveal-ck/file_string_replacer.rb +17 -0
- data/lib/reveal-ck/haml_processor.rb +17 -15
- data/lib/reveal-ck/presentation_builder.rb +69 -0
- data/lib/reveal-ck/slide_builder.rb +66 -0
- data/lib/reveal-ck/version.rb +1 -1
- data/rakelib/cucumber.rake +14 -1
- data/reveal.js/Gruntfile.js +132 -0
- data/reveal.js/LICENSE +1 -1
- data/reveal.js/README.md +362 -50
- data/reveal.js/css/print/paper.css +14 -14
- data/reveal.js/css/print/pdf.css +60 -30
- data/reveal.js/css/reveal.css +444 -149
- data/reveal.js/css/reveal.min.css +2 -2
- data/reveal.js/css/theme/README.md +8 -10
- data/reveal.js/css/theme/beige.css +24 -45
- data/reveal.js/css/theme/default.css +24 -45
- data/reveal.js/css/theme/moon.css +142 -0
- data/reveal.js/css/theme/night.css +24 -44
- data/reveal.js/css/theme/serif.css +27 -45
- data/reveal.js/css/theme/simple.css +25 -45
- data/reveal.js/css/theme/sky.css +26 -43
- data/reveal.js/css/theme/solarized.css +142 -0
- data/reveal.js/css/theme/source/beige.scss +2 -2
- data/reveal.js/css/theme/source/default.scss +2 -2
- data/reveal.js/css/theme/source/moon.scss +68 -0
- data/reveal.js/css/theme/source/night.scss +4 -4
- data/reveal.js/css/theme/source/serif.scss +8 -6
- data/reveal.js/css/theme/source/simple.scss +5 -5
- data/reveal.js/css/theme/source/sky.scss +9 -4
- data/reveal.js/css/theme/source/solarized.scss +74 -0
- data/reveal.js/css/theme/template/settings.scss +2 -2
- data/reveal.js/examples/assets/image1.png +0 -0
- data/reveal.js/examples/assets/image2.png +0 -0
- data/reveal.js/examples/barebones.html +42 -0
- data/reveal.js/examples/embedded-media.html +49 -0
- data/reveal.js/examples/slide-backgrounds.html +101 -0
- data/reveal.js/index.html +63 -56
- data/reveal.js/js/reveal.js +997 -216
- data/reveal.js/js/reveal.min.js +3 -3
- data/reveal.js/package.json +43 -29
- data/reveal.js/plugin/highlight/highlight.js +28 -6
- data/reveal.js/plugin/markdown/example.html +97 -0
- data/reveal.js/plugin/markdown/example.md +29 -0
- data/reveal.js/plugin/markdown/markdown.js +164 -11
- data/reveal.js/plugin/markdown/marked.js +37 -0
- data/reveal.js/plugin/multiplex/client.js +13 -0
- data/reveal.js/plugin/multiplex/index.js +56 -0
- data/reveal.js/plugin/multiplex/master.js +50 -0
- data/reveal.js/plugin/notes-server/index.js +1 -0
- data/reveal.js/plugin/notes-server/notes.html +8 -5
- data/reveal.js/plugin/notes/notes.html +133 -44
- data/reveal.js/plugin/notes/notes.js +3 -1
- data/reveal.js/plugin/print-pdf/print-pdf.js +8 -3
- data/reveal.js/plugin/remotes/remotes.js +13 -4
- data/reveal.js/plugin/search/search.js +196 -0
- data/reveal.js/plugin/zoom-js/zoom.js +26 -21
- data/spec/data/config/config.toml +6 -0
- data/spec/data/string_replacer/after_replace +4 -0
- data/spec/data/string_replacer/before_replace +4 -0
- data/spec/lib/reveal-ck/config_spec.rb +50 -0
- data/spec/lib/reveal-ck/file_slicer_spec.rb +29 -27
- data/spec/lib/reveal-ck/file_splicer_spec.rb +28 -26
- data/spec/lib/reveal-ck/file_string_replacer_spec.rb +32 -0
- data/spec/lib/reveal-ck/haml_processor_spec.rb +28 -26
- metadata +82 -27
- data/rakelib/presentation.rake +0 -41
- data/rakelib/reveal.rake +0 -15
- data/reveal.js/css/shaders/tile-flip.fs +0 -64
- data/reveal.js/css/shaders/tile-flip.vs +0 -141
- data/reveal.js/grunt.js +0 -84
- data/reveal.js/plugin/markdown/showdown.js +0 -62
@@ -5,7 +5,9 @@
|
|
5
5
|
var RevealNotes = (function() {
|
6
6
|
|
7
7
|
function openNotes() {
|
8
|
-
var
|
8
|
+
var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
|
9
|
+
jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
|
10
|
+
var notesPopup = window.open( jsFileLocation + 'notes.html', 'reveal.js - Notes', 'width=1120,height=850' );
|
9
11
|
|
10
12
|
// Fires when slide is changed
|
11
13
|
Reveal.addEventListener( 'slidechanged', function( event ) {
|
@@ -11,8 +11,13 @@
|
|
11
11
|
var page = new WebPage();
|
12
12
|
var system = require( 'system' );
|
13
13
|
|
14
|
+
page.viewportSize = {
|
15
|
+
width: 1024,
|
16
|
+
height: 768
|
17
|
+
};
|
18
|
+
|
14
19
|
page.paperSize = {
|
15
|
-
format: '
|
20
|
+
format: 'letter',
|
16
21
|
orientation: 'landscape',
|
17
22
|
margin: {
|
18
23
|
left: '0',
|
@@ -21,7 +26,6 @@ page.paperSize = {
|
|
21
26
|
bottom: '0'
|
22
27
|
}
|
23
28
|
};
|
24
|
-
page.zoomFactor = 1.5;
|
25
29
|
|
26
30
|
var revealFile = system.args[1] || 'index.html?print-pdf';
|
27
31
|
var slideFile = system.args[2] || 'slides.pdf';
|
@@ -36,4 +40,5 @@ page.open( revealFile, function( status ) {
|
|
36
40
|
console.log( 'Printed succesfully' );
|
37
41
|
page.render( slideFile );
|
38
42
|
phantom.exit();
|
39
|
-
} );
|
43
|
+
} );
|
44
|
+
|
@@ -13,16 +13,25 @@
|
|
13
13
|
return ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch;
|
14
14
|
})();
|
15
15
|
|
16
|
-
|
16
|
+
/**
|
17
|
+
* Detects if notes are enable and the current page is opened inside an /iframe
|
18
|
+
* this prevents loading Remotes.io several times
|
19
|
+
*/
|
20
|
+
var remotesAndIsNotes = (function(){
|
21
|
+
return !(window.RevealNotes && self == top);
|
22
|
+
})();
|
23
|
+
|
24
|
+
if(!hasTouch && !remotesAndIsNotes){
|
17
25
|
head.ready( 'remotes.ne.min.js', function() {
|
18
26
|
new Remotes("preview")
|
19
27
|
.on("swipe-left", function(e){ Reveal.right(); })
|
20
28
|
.on("swipe-right", function(e){ Reveal.left(); })
|
21
29
|
.on("swipe-up", function(e){ Reveal.down(); })
|
22
30
|
.on("swipe-down", function(e){ Reveal.up(); })
|
23
|
-
.on("tap", function(e){
|
24
|
-
|
25
|
-
})
|
31
|
+
.on("tap", function(e){ Reveal.next(); })
|
32
|
+
.on("zoom-out", function(e){ Reveal.toggleOverview(true); })
|
33
|
+
.on("zoom-in", function(e){ Reveal.toggleOverview(false); })
|
34
|
+
;
|
26
35
|
} );
|
27
36
|
|
28
37
|
head.js('https://raw.github.com/Remotes/Remotes/master/dist/remotes.ne.min.js');
|
@@ -0,0 +1,196 @@
|
|
1
|
+
/*
|
2
|
+
* Handles finding a text string anywhere in the slides and showing the next occurrence to the user
|
3
|
+
* by navigatating to that slide and highlighting it.
|
4
|
+
*
|
5
|
+
* By Jon Snyder <snyder.jon@gmail.com>, February 2013
|
6
|
+
*/
|
7
|
+
|
8
|
+
var RevealSearch = (function() {
|
9
|
+
|
10
|
+
var matchedSlides;
|
11
|
+
var currentMatchedIndex;
|
12
|
+
var searchboxDirty;
|
13
|
+
var myHilitor;
|
14
|
+
|
15
|
+
// Original JavaScript code by Chirp Internet: www.chirp.com.au
|
16
|
+
// Please acknowledge use of this code by including this header.
|
17
|
+
// 2/2013 jon: modified regex to display any match, not restricted to word boundaries.
|
18
|
+
|
19
|
+
function Hilitor(id, tag)
|
20
|
+
{
|
21
|
+
|
22
|
+
var targetNode = document.getElementById(id) || document.body;
|
23
|
+
var hiliteTag = tag || "EM";
|
24
|
+
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM|SPAN)$");
|
25
|
+
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
|
26
|
+
var wordColor = [];
|
27
|
+
var colorIdx = 0;
|
28
|
+
var matchRegex = "";
|
29
|
+
var matchingSlides = [];
|
30
|
+
|
31
|
+
this.setRegex = function(input)
|
32
|
+
{
|
33
|
+
input = input.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w'-]+/g, "|");
|
34
|
+
matchRegex = new RegExp("(" + input + ")","i");
|
35
|
+
}
|
36
|
+
|
37
|
+
this.getRegex = function()
|
38
|
+
{
|
39
|
+
return matchRegex.toString().replace(/^\/\\b\(|\)\\b\/i$/g, "").replace(/\|/g, " ");
|
40
|
+
}
|
41
|
+
|
42
|
+
// recursively apply word highlighting
|
43
|
+
this.hiliteWords = function(node)
|
44
|
+
{
|
45
|
+
if(node == undefined || !node) return;
|
46
|
+
if(!matchRegex) return;
|
47
|
+
if(skipTags.test(node.nodeName)) return;
|
48
|
+
|
49
|
+
if(node.hasChildNodes()) {
|
50
|
+
for(var i=0; i < node.childNodes.length; i++)
|
51
|
+
this.hiliteWords(node.childNodes[i]);
|
52
|
+
}
|
53
|
+
if(node.nodeType == 3) { // NODE_TEXT
|
54
|
+
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
|
55
|
+
//find the slide's section element and save it in our list of matching slides
|
56
|
+
var secnode = node.parentNode;
|
57
|
+
while (secnode.nodeName != 'SECTION') {
|
58
|
+
secnode = secnode.parentNode;
|
59
|
+
}
|
60
|
+
|
61
|
+
var slideIndex = Reveal.getIndices(secnode);
|
62
|
+
var slidelen = matchingSlides.length;
|
63
|
+
var alreadyAdded = false;
|
64
|
+
for (var i=0; i < slidelen; i++) {
|
65
|
+
if ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {
|
66
|
+
alreadyAdded = true;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
if (! alreadyAdded) {
|
70
|
+
matchingSlides.push(slideIndex);
|
71
|
+
}
|
72
|
+
|
73
|
+
if(!wordColor[regs[0].toLowerCase()]) {
|
74
|
+
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
|
75
|
+
}
|
76
|
+
|
77
|
+
var match = document.createElement(hiliteTag);
|
78
|
+
match.appendChild(document.createTextNode(regs[0]));
|
79
|
+
match.style.backgroundColor = wordColor[regs[0].toLowerCase()];
|
80
|
+
match.style.fontStyle = "inherit";
|
81
|
+
match.style.color = "#000";
|
82
|
+
|
83
|
+
var after = node.splitText(regs.index);
|
84
|
+
after.nodeValue = after.nodeValue.substring(regs[0].length);
|
85
|
+
node.parentNode.insertBefore(match, after);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
};
|
89
|
+
|
90
|
+
// remove highlighting
|
91
|
+
this.remove = function()
|
92
|
+
{
|
93
|
+
var arr = document.getElementsByTagName(hiliteTag);
|
94
|
+
while(arr.length && (el = arr[0])) {
|
95
|
+
el.parentNode.replaceChild(el.firstChild, el);
|
96
|
+
}
|
97
|
+
};
|
98
|
+
|
99
|
+
// start highlighting at target node
|
100
|
+
this.apply = function(input)
|
101
|
+
{
|
102
|
+
if(input == undefined || !input) return;
|
103
|
+
this.remove();
|
104
|
+
this.setRegex(input);
|
105
|
+
this.hiliteWords(targetNode);
|
106
|
+
return matchingSlides;
|
107
|
+
};
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
function openSearch() {
|
112
|
+
//ensure the search term input dialog is visible and has focus:
|
113
|
+
var inputbox = document.getElementById("searchinput");
|
114
|
+
inputbox.style.display = "inline";
|
115
|
+
inputbox.focus();
|
116
|
+
inputbox.select();
|
117
|
+
}
|
118
|
+
|
119
|
+
function toggleSearch() {
|
120
|
+
var inputbox = document.getElementById("searchinput");
|
121
|
+
if (inputbox.style.display !== "inline") {
|
122
|
+
openSearch();
|
123
|
+
}
|
124
|
+
else {
|
125
|
+
inputbox.style.display = "none";
|
126
|
+
myHilitor.remove();
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
130
|
+
function doSearch() {
|
131
|
+
//if there's been a change in the search term, perform a new search:
|
132
|
+
if (searchboxDirty) {
|
133
|
+
var searchstring = document.getElementById("searchinput").value;
|
134
|
+
|
135
|
+
//find the keyword amongst the slides
|
136
|
+
myHilitor = new Hilitor("slidecontent");
|
137
|
+
matchedSlides = myHilitor.apply(searchstring);
|
138
|
+
currentMatchedIndex = 0;
|
139
|
+
}
|
140
|
+
|
141
|
+
//navigate to the next slide that has the keyword, wrapping to the first if necessary
|
142
|
+
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
|
143
|
+
currentMatchedIndex = 0;
|
144
|
+
}
|
145
|
+
if (matchedSlides.length > currentMatchedIndex) {
|
146
|
+
Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
|
147
|
+
currentMatchedIndex++;
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
var dom = {};
|
152
|
+
dom.wrapper = document.querySelector( '.reveal' );
|
153
|
+
|
154
|
+
if( !dom.wrapper.querySelector( '.searchbox' ) ) {
|
155
|
+
var searchElement = document.createElement( 'div' );
|
156
|
+
searchElement.id = "searchinputdiv";
|
157
|
+
searchElement.classList.add( 'searchdiv' );
|
158
|
+
searchElement.style.position = 'absolute';
|
159
|
+
searchElement.style.top = '10px';
|
160
|
+
searchElement.style.left = '10px';
|
161
|
+
//embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
|
162
|
+
searchElement.innerHTML = '<span><input type="search" id="searchinput" class="searchinput" style="vertical-align: top;"/><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJiSURBVHjatFZNaxNBGH5md+Mmu92NVdKDRipSAyqCghgQD4L4cRe86UUtAQ+eFCxoa4/25EXBFi8eBE+eRPoDhB6KgiiixdAPCEkx2pjvTXadd9yNsflwuyUDD/O+u8PzzDPvzOwyx3EwyCZhwG3gAkp7MnpjgbopjsltcD4gjuXZZKeAR348MYLYTm3LzOs/y3j3JTfZxgXWXmTuwPHIc4VmoOmv5IrI53+AO2DdHLjkDWQ3GoEEVFXtXQOvkSnPWcyUceviLhwbDYv8/XIVj97kse7TodLvZXxYxrPUHkQ1ufXs3FEdybEIxucySOesoNvUgWU1cP3MkCBfTFdw9fGaAMVmRELq7LBw2Q3/FaAxxWIRpw+ZIr/7IouPqzUBiqmdHAv7EuhRAwf1er2Vy4x1jW3b2d5Jfvu5IPp7l2LYbcgCFFNb+FoJ7oBqEAqFMPNqFcmEgVMJDfMT+1tvN0pNjERlMS6QA5pFOKxiKVPFhakPeL3It+WGJUDxt2wFR+JhzI7v5ctkd8DXOZAkCYYxhO+lKm4+Xfqz/rIixBuNBl7eOYzkQQNzqX249mRl6zUgEcYkaJrGhUwBinVdh6IouPzwE6/DL5w4oLkH8y981aDf+uq6hlKpJESiUdNfDZi7/ehG9K6KfiA3pml0PLcsq+cSMTj2NL9ukc4UOmz7AZ3+crkC4mHujFvXNaMFB3bEr8xPS6p5O+jXxq4VZtaen7/PwzrntjcLUE0iHPS1Ud1cdiEJl/8WivZk0wXd7zWOMkeF8s0CcAmkNrC2nvXZDbbbN73ccYnZoH9bfgswAFzAe9/h3dbKAAAAAElFTkSuQmCC" id="searchbutton" class="searchicon" style="vertical-align: top; margin-top: -1px;"/></span>';
|
163
|
+
dom.wrapper.appendChild( searchElement );
|
164
|
+
}
|
165
|
+
|
166
|
+
document.getElementById("searchbutton").addEventListener( 'click', function(event) {
|
167
|
+
doSearch();
|
168
|
+
}, false );
|
169
|
+
|
170
|
+
document.getElementById("searchinput").addEventListener( 'keyup', function( event ) {
|
171
|
+
switch (event.keyCode) {
|
172
|
+
case 13:
|
173
|
+
event.preventDefault();
|
174
|
+
doSearch();
|
175
|
+
searchboxDirty = false;
|
176
|
+
break;
|
177
|
+
default:
|
178
|
+
searchboxDirty = true;
|
179
|
+
}
|
180
|
+
}, false );
|
181
|
+
|
182
|
+
// Open the search when the 's' key is hit (yes, this conflicts with the notes plugin, disabling for now)
|
183
|
+
/*
|
184
|
+
document.addEventListener( 'keydown', function( event ) {
|
185
|
+
// Disregard the event if the target is editable or a
|
186
|
+
// modifier is present
|
187
|
+
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
|
188
|
+
|
189
|
+
if( event.keyCode === 83 ) {
|
190
|
+
event.preventDefault();
|
191
|
+
openSearch();
|
192
|
+
}
|
193
|
+
}, false );
|
194
|
+
*/
|
195
|
+
return { open: openSearch };
|
196
|
+
})();
|
@@ -1,29 +1,34 @@
|
|
1
1
|
// Custom reveal.js integration
|
2
2
|
(function(){
|
3
|
-
|
4
|
-
|
3
|
+
var isEnabled = true;
|
4
|
+
|
5
|
+
document.querySelector( '.reveal' ).addEventListener( 'mousedown', function( event ) {
|
6
|
+
if( event.altKey && isEnabled ) {
|
5
7
|
event.preventDefault();
|
6
8
|
zoom.to({ element: event.target, pan: false });
|
7
9
|
}
|
8
10
|
} );
|
11
|
+
|
12
|
+
Reveal.addEventListener( 'overviewshown', function() { isEnabled = false; } );
|
13
|
+
Reveal.addEventListener( 'overviewhidden', function() { isEnabled = true; } );
|
9
14
|
})();
|
10
15
|
|
11
16
|
/*!
|
12
17
|
* zoom.js 0.2 (modified version for use with reveal.js)
|
13
18
|
* http://lab.hakim.se/zoom-js
|
14
19
|
* MIT licensed
|
15
|
-
*
|
20
|
+
*
|
16
21
|
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
|
17
22
|
*/
|
18
23
|
var zoom = (function(){
|
19
24
|
|
20
25
|
// The current zoom level (scale)
|
21
26
|
var level = 1;
|
22
|
-
|
27
|
+
|
23
28
|
// The current mouse position, used for panning
|
24
29
|
var mouseX = 0,
|
25
30
|
mouseY = 0;
|
26
|
-
|
31
|
+
|
27
32
|
// Timeout before pan is activated
|
28
33
|
var panEngageTimeout = -1,
|
29
34
|
panUpdateInterval = -1;
|
@@ -36,7 +41,7 @@ var zoom = (function(){
|
|
36
41
|
'msTransform' in document.body.style ||
|
37
42
|
'OTransform' in document.body.style ||
|
38
43
|
'transform' in document.body.style;
|
39
|
-
|
44
|
+
|
40
45
|
if( supportsTransforms ) {
|
41
46
|
// The easing that will be applied when we zoom in/out
|
42
47
|
document.body.style.transition = 'transform 0.8s ease';
|
@@ -45,7 +50,7 @@ var zoom = (function(){
|
|
45
50
|
document.body.style.MozTransition = '-moz-transform 0.8s ease';
|
46
51
|
document.body.style.WebkitTransition = '-webkit-transform 0.8s ease';
|
47
52
|
}
|
48
|
-
|
53
|
+
|
49
54
|
// Zoom out if the user hits escape
|
50
55
|
document.addEventListener( 'keyup', function( event ) {
|
51
56
|
if( level !== 1 && event.keyCode === 27 ) {
|
@@ -62,21 +67,21 @@ var zoom = (function(){
|
|
62
67
|
}, false );
|
63
68
|
|
64
69
|
/**
|
65
|
-
* Applies the CSS required to zoom in, prioritizes use of CSS3
|
70
|
+
* Applies the CSS required to zoom in, prioritizes use of CSS3
|
66
71
|
* transforms but falls back on zoom for IE.
|
67
|
-
*
|
68
|
-
* @param {Number} pageOffsetX
|
69
|
-
* @param {Number} pageOffsetY
|
70
|
-
* @param {Number} elementOffsetX
|
71
|
-
* @param {Number} elementOffsetY
|
72
|
-
* @param {Number} scale
|
72
|
+
*
|
73
|
+
* @param {Number} pageOffsetX
|
74
|
+
* @param {Number} pageOffsetY
|
75
|
+
* @param {Number} elementOffsetX
|
76
|
+
* @param {Number} elementOffsetY
|
77
|
+
* @param {Number} scale
|
73
78
|
*/
|
74
79
|
function magnify( pageOffsetX, pageOffsetY, elementOffsetX, elementOffsetY, scale ) {
|
75
80
|
|
76
81
|
if( supportsTransforms ) {
|
77
82
|
var origin = pageOffsetX +'px '+ pageOffsetY +'px',
|
78
83
|
transform = 'translate('+ -elementOffsetX +'px,'+ -elementOffsetY +'px) scale('+ scale +')';
|
79
|
-
|
84
|
+
|
80
85
|
document.body.style.transformOrigin = origin;
|
81
86
|
document.body.style.OTransformOrigin = origin;
|
82
87
|
document.body.style.msTransformOrigin = origin;
|
@@ -121,7 +126,7 @@ var zoom = (function(){
|
|
121
126
|
}
|
122
127
|
|
123
128
|
/**
|
124
|
-
* Pan the document when the mosue cursor approaches the edges
|
129
|
+
* Pan the document when the mosue cursor approaches the edges
|
125
130
|
* of the window.
|
126
131
|
*/
|
127
132
|
function pan() {
|
@@ -129,7 +134,7 @@ var zoom = (function(){
|
|
129
134
|
rangeX = window.innerWidth * range,
|
130
135
|
rangeY = window.innerHeight * range,
|
131
136
|
scrollOffset = getScrollOffset();
|
132
|
-
|
137
|
+
|
133
138
|
// Up
|
134
139
|
if( mouseY < rangeY ) {
|
135
140
|
window.scroll( scrollOffset.x, scrollOffset.y - ( 1 - ( mouseY / rangeY ) ) * ( 14 / level ) );
|
@@ -159,7 +164,7 @@ var zoom = (function(){
|
|
159
164
|
return {
|
160
165
|
/**
|
161
166
|
* Zooms in on either a rectangle or HTML element.
|
162
|
-
*
|
167
|
+
*
|
163
168
|
* @param {Object} options
|
164
169
|
* - element: HTML element to zoom in on
|
165
170
|
* OR
|
@@ -232,7 +237,7 @@ var zoom = (function(){
|
|
232
237
|
if( currentOptions && currentOptions.element ) {
|
233
238
|
scrollOffset.x -= ( window.innerWidth - ( currentOptions.width * currentOptions.scale ) ) / 2;
|
234
239
|
}
|
235
|
-
|
240
|
+
|
236
241
|
magnify( scrollOffset.x, scrollOffset.y, 0, 0, 1 );
|
237
242
|
|
238
243
|
level = 1;
|
@@ -241,11 +246,11 @@ var zoom = (function(){
|
|
241
246
|
// Alias
|
242
247
|
magnify: function( options ) { this.to( options ) },
|
243
248
|
reset: function() { this.out() },
|
244
|
-
|
249
|
+
|
245
250
|
zoomLevel: function() {
|
246
251
|
return level;
|
247
252
|
}
|
248
253
|
}
|
249
|
-
|
254
|
+
|
250
255
|
})();
|
251
256
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RevealCK
|
4
|
+
describe Config do
|
5
|
+
|
6
|
+
context 'when no config is supplied' do
|
7
|
+
|
8
|
+
let :config do
|
9
|
+
Config.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it '#title defaults to "Slides"' do
|
13
|
+
config.title.should == "Slides"
|
14
|
+
end
|
15
|
+
|
16
|
+
it '#author defaults to "Hakim El Hattab"' do
|
17
|
+
config.author.should == "Hakim El Hattab"
|
18
|
+
end
|
19
|
+
|
20
|
+
it '#theme defaults to "default"' do
|
21
|
+
config.theme.should == "default"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when a config is supplied' do
|
27
|
+
|
28
|
+
let :config_file do
|
29
|
+
File.join 'spec', 'data', 'config', 'config.toml'
|
30
|
+
end
|
31
|
+
|
32
|
+
let :config do
|
33
|
+
Config.new config_file: config_file
|
34
|
+
end
|
35
|
+
|
36
|
+
it '#title comes from the config file' do
|
37
|
+
expect(config.title).to eq "The Never Sea Slides"
|
38
|
+
end
|
39
|
+
|
40
|
+
it '#author comes from the config file' do
|
41
|
+
expect(config.author).to eq "Captain Hook"
|
42
|
+
end
|
43
|
+
|
44
|
+
it '#theme comes from the config file' do
|
45
|
+
config.theme.should == "night"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|