showoff 0.11.2 → 0.12.0
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 +4 -4
- data/bin/showoff +9 -0
- data/lib/showoff.rb +28 -19
- data/lib/showoff/version.rb +1 -1
- data/public/css/highlight/agate.css +22 -51
- data/public/css/highlight/androidstudio.css +25 -12
- data/public/css/highlight/arduino-light.css +88 -0
- data/public/css/highlight/arta.css +24 -89
- data/public/css/highlight/ascetic.css +19 -26
- data/public/css/highlight/atelier-cave-dark.css +83 -0
- data/public/css/highlight/atelier-cave-light.css +85 -0
- data/public/css/highlight/atelier-cave.dark.css +26 -56
- data/public/css/highlight/atelier-cave.light.css +27 -55
- data/public/css/highlight/atelier-dune-dark.css +69 -0
- data/public/css/highlight/atelier-dune-light.css +69 -0
- data/public/css/highlight/atelier-dune.dark.css +22 -47
- data/public/css/highlight/atelier-dune.light.css +22 -47
- data/public/css/highlight/atelier-estuary-dark.css +84 -0
- data/public/css/highlight/atelier-estuary-light.css +84 -0
- data/public/css/highlight/atelier-estuary.dark.css +26 -55
- data/public/css/highlight/atelier-estuary.light.css +26 -55
- data/public/css/highlight/atelier-forest-dark.css +69 -0
- data/public/css/highlight/atelier-forest-light.css +69 -0
- data/public/css/highlight/atelier-forest.dark.css +22 -47
- data/public/css/highlight/atelier-forest.light.css +22 -47
- data/public/css/highlight/atelier-heath-dark.css +69 -0
- data/public/css/highlight/atelier-heath-light.css +69 -0
- data/public/css/highlight/atelier-heath.dark.css +22 -47
- data/public/css/highlight/atelier-heath.light.css +22 -47
- data/public/css/highlight/atelier-lakeside-dark.css +69 -0
- data/public/css/highlight/atelier-lakeside-light.css +69 -0
- data/public/css/highlight/atelier-lakeside.dark.css +22 -47
- data/public/css/highlight/atelier-lakeside.light.css +22 -47
- data/public/css/highlight/atelier-plateau-dark.css +84 -0
- data/public/css/highlight/atelier-plateau-light.css +84 -0
- data/public/css/highlight/atelier-plateau.dark.css +26 -55
- data/public/css/highlight/atelier-plateau.light.css +26 -55
- data/public/css/highlight/atelier-savanna-dark.css +84 -0
- data/public/css/highlight/atelier-savanna-light.css +84 -0
- data/public/css/highlight/atelier-savanna.dark.css +26 -55
- data/public/css/highlight/atelier-savanna.light.css +26 -55
- data/public/css/highlight/atelier-seaside-dark.css +69 -0
- data/public/css/highlight/atelier-seaside-light.css +69 -0
- data/public/css/highlight/atelier-seaside.dark.css +22 -47
- data/public/css/highlight/atelier-seaside.light.css +22 -47
- data/public/css/highlight/atelier-sulphurpool-dark.css +69 -0
- data/public/css/highlight/atelier-sulphurpool-light.css +69 -0
- data/public/css/highlight/atelier-sulphurpool.dark.css +22 -47
- data/public/css/highlight/atelier-sulphurpool.light.css +22 -47
- data/public/css/highlight/brown-paper.css +64 -0
- data/public/css/highlight/brown-papersq.png +0 -0
- data/public/css/highlight/brown_paper.css +21 -60
- data/public/css/highlight/codepen-embed.css +22 -59
- data/public/css/highlight/color-brewer.css +19 -113
- data/public/css/highlight/dark.css +18 -58
- data/public/css/highlight/darkula.css +20 -98
- data/public/css/highlight/default.css +67 -123
- data/public/css/highlight/docco.css +22 -59
- data/public/css/highlight/dracula.css +76 -0
- data/public/css/highlight/far.css +25 -64
- data/public/css/highlight/foundation.css +21 -68
- data/public/css/highlight/github-gist.css +25 -165
- data/public/css/highlight/github.css +23 -47
- data/public/css/highlight/googlecode.css +29 -84
- data/public/css/highlight/grayscale.css +101 -0
- data/public/css/highlight/gruvbox-dark.css +108 -0
- data/public/css/highlight/gruvbox-light.css +108 -0
- data/public/css/highlight/hopscotch.css +83 -0
- data/public/css/highlight/hybrid.css +16 -78
- data/public/css/highlight/idea.css +23 -48
- data/public/css/highlight/ir-black.css +73 -0
- data/public/css/highlight/ir_black.css +24 -57
- data/public/css/highlight/kimbie.dark.css +24 -47
- data/public/css/highlight/kimbie.light.css +24 -47
- data/public/css/highlight/magula.css +17 -67
- data/public/css/highlight/mono-blue.css +22 -31
- data/public/css/highlight/monokai-sublime.css +83 -0
- data/public/css/highlight/monokai.css +19 -75
- data/public/css/highlight/monokai_sublime.css +20 -91
- data/public/css/highlight/obsidian.css +25 -89
- data/public/css/highlight/paraiso-dark.css +72 -0
- data/public/css/highlight/paraiso-light.css +72 -0
- data/public/css/highlight/paraiso.dark.css +23 -47
- data/public/css/highlight/paraiso.light.css +23 -47
- data/public/css/highlight/pojoaque.css +28 -51
- data/public/css/highlight/qtcreator_dark.css +83 -0
- data/public/css/highlight/qtcreator_light.css +83 -0
- data/public/css/highlight/railscasts.css +32 -110
- data/public/css/highlight/rainbow.css +33 -55
- data/public/css/highlight/school-book.css +72 -0
- data/public/css/highlight/school-book.png +0 -0
- data/public/css/highlight/school_book.css +24 -63
- data/public/css/highlight/solarized-dark.css +84 -0
- data/public/css/highlight/solarized-light.css +84 -0
- data/public/css/highlight/solarized_dark.css +29 -52
- data/public/css/highlight/solarized_light.css +29 -52
- data/public/css/highlight/sunburst.css +28 -87
- data/public/css/highlight/tomorrow-night-blue.css +24 -45
- data/public/css/highlight/tomorrow-night-bright.css +24 -45
- data/public/css/highlight/tomorrow-night-eighties.css +24 -45
- data/public/css/highlight/tomorrow-night.css +24 -45
- data/public/css/highlight/tomorrow.css +24 -45
- data/public/css/highlight/vs.css +32 -56
- data/public/css/highlight/xcode.css +28 -89
- data/public/css/highlight/zenburn.css +26 -64
- data/public/css/presenter.css +78 -157
- data/public/css/showoff.css +368 -398
- data/public/js/highlight.pack.js +6423 -1791
- data/public/js/jquery.cycle.all.js +0 -29
- data/public/js/presenter.js +26 -67
- data/public/js/showoff.js +175 -152
- data/views/header.erb +0 -4
- data/views/header_mini.erb +0 -2
- data/views/index.erb +58 -48
- data/views/onepage.erb +4 -4
- data/views/presenter.erb +17 -15
- metadata +59 -45
- data/public/css/fast.png +0 -0
- data/public/css/fg.menu.css +0 -114
- data/public/css/grippy-close.png +0 -0
- data/public/css/grippy.png +0 -0
- data/public/css/new_window-a.png +0 -0
- data/public/css/new_window-b.png +0 -0
- data/public/css/new_window-c.png +0 -0
- data/public/css/popdown.png +0 -0
- data/public/css/popout.png +0 -0
- data/public/css/slow.png +0 -0
- data/public/css/spinner.gif +0 -0
- data/public/css/theme/images/ui-bg_diagonals-small_100_f0efea_40x40.png +0 -0
- data/public/css/theme/images/ui-bg_flat_35_f0f0f0_40x100.png +0 -0
- data/public/css/theme/images/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
- data/public/css/theme/images/ui-bg_glow-ball_25_2e2e28_600x600.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_100_f0efea_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_25_327E04_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_25_5A9D1A_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_inset-soft_22_3b3b35_1x100.png +0 -0
- data/public/css/theme/images/ui-icons_808080_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_8DC262_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_e7e6e4_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_eeeeee_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/css/theme/ui.accordion.css +0 -9
- data/public/css/theme/ui.all.css +0 -2
- data/public/css/theme/ui.base.css +0 -9
- data/public/css/theme/ui.core.css +0 -37
- data/public/css/theme/ui.datepicker.css +0 -62
- data/public/css/theme/ui.dialog.css +0 -13
- data/public/css/theme/ui.progressbar.css +0 -4
- data/public/css/theme/ui.resizable.css +0 -13
- data/public/css/theme/ui.slider.css +0 -17
- data/public/css/theme/ui.tabs.css +0 -9
- data/public/css/theme/ui.theme.css +0 -245
- data/public/js/fg.menu.js +0 -645
|
@@ -221,10 +221,6 @@ function buildOptions($cont, $slides, els, options, o) {
|
|
|
221
221
|
|
|
222
222
|
saveOriginalOpts(opts);
|
|
223
223
|
|
|
224
|
-
// clearType corrections
|
|
225
|
-
if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
|
|
226
|
-
clearTypeFix($slides);
|
|
227
|
-
|
|
228
224
|
// container requires non-static position so that slides can be position within
|
|
229
225
|
if ($cont.css('position') == 'static')
|
|
230
226
|
$cont.css('position', 'relative');
|
|
@@ -462,9 +458,6 @@ function exposeAddSlide(opts, els) {
|
|
|
462
458
|
opts.nextSlide++;
|
|
463
459
|
}
|
|
464
460
|
|
|
465
|
-
if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
|
|
466
|
-
clearTypeFix($s);
|
|
467
|
-
|
|
468
461
|
if (opts.fit && opts.width)
|
|
469
462
|
$s.width(opts.width);
|
|
470
463
|
if (opts.fit && opts.height && opts.height != 'auto')
|
|
@@ -736,28 +729,6 @@ $.fn.cycle.hopsFromLast = function(opts, fwd) {
|
|
|
736
729
|
return hops;
|
|
737
730
|
};
|
|
738
731
|
|
|
739
|
-
// fix clearType problems in ie6 by setting an explicit bg color
|
|
740
|
-
// (otherwise text slides look horrible during a fade transition)
|
|
741
|
-
function clearTypeFix($slides) {
|
|
742
|
-
function hex(s) {
|
|
743
|
-
s = parseInt(s).toString(16);
|
|
744
|
-
return s.length < 2 ? '0'+s : s;
|
|
745
|
-
};
|
|
746
|
-
function getBg(e) {
|
|
747
|
-
for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
|
|
748
|
-
var v = $.css(e,'background-color');
|
|
749
|
-
if (v.indexOf('rgb') >= 0 ) {
|
|
750
|
-
var rgb = v.match(/\d+/g);
|
|
751
|
-
return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
|
|
752
|
-
}
|
|
753
|
-
if (v && v != 'transparent')
|
|
754
|
-
return v;
|
|
755
|
-
}
|
|
756
|
-
return '#ffffff';
|
|
757
|
-
};
|
|
758
|
-
$slides.each(function() { $(this).css('background-color', getBg(this)); });
|
|
759
|
-
};
|
|
760
|
-
|
|
761
732
|
// reset common props before the next transition
|
|
762
733
|
$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
|
|
763
734
|
$(opts.elements).not(curr).hide();
|
data/public/js/presenter.js
CHANGED
|
@@ -16,22 +16,6 @@ $(document).ready(function(){
|
|
|
16
16
|
// the presenter window doesn't need the reload on resize bit
|
|
17
17
|
$(window).unbind('resize');
|
|
18
18
|
|
|
19
|
-
// side menu accordian crap
|
|
20
|
-
$("#preso").bind("showoff:loaded", function (event) {
|
|
21
|
-
$(".menu > ul ul").hide()
|
|
22
|
-
$(".menu > ul a").click(function() {
|
|
23
|
-
if ($(this).next().is('ul')) {
|
|
24
|
-
$(this).next().toggle()
|
|
25
|
-
} else {
|
|
26
|
-
gotoSlide($(this).attr('rel'));
|
|
27
|
-
try { slaveWindow.gotoSlide($(this).attr('rel'), false) } catch (e) {}
|
|
28
|
-
postSlide();
|
|
29
|
-
update();
|
|
30
|
-
}
|
|
31
|
-
return false;
|
|
32
|
-
}).next().hide();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
19
|
$("#minStop").hide();
|
|
36
20
|
$("#startTimer").click(function() { toggleTimer() });
|
|
37
21
|
$("#stopTimer").click(function() { toggleTimer() });
|
|
@@ -90,7 +74,7 @@ function presenterPopupToggle(page, event) {
|
|
|
90
74
|
$.get(page, function(data) {
|
|
91
75
|
var link = $('<a>'),
|
|
92
76
|
content = $('<div>');
|
|
93
|
-
|
|
77
|
+
|
|
94
78
|
link.attr({
|
|
95
79
|
href: page,
|
|
96
80
|
target: '_new'
|
|
@@ -98,15 +82,15 @@ function presenterPopupToggle(page, event) {
|
|
|
98
82
|
link.text('Open in a new page...');
|
|
99
83
|
|
|
100
84
|
content.attr('id', page.substring(1, page.length));
|
|
101
|
-
content.append(link);
|
|
85
|
+
content.append(link);
|
|
102
86
|
content.append($(data).find('#wrapper').html());
|
|
103
87
|
popup.append(content);
|
|
104
|
-
|
|
88
|
+
|
|
105
89
|
setupStats(); // this function is in showoff.js because /stats does not load presenter.js
|
|
106
|
-
|
|
90
|
+
|
|
107
91
|
$('body').append(popup);
|
|
108
|
-
popup.slideDown(200); // #presenterPopup is display: none by default
|
|
109
|
-
});
|
|
92
|
+
popup.slideDown(200); // #presenterPopup is display: none by default
|
|
93
|
+
});
|
|
110
94
|
}
|
|
111
95
|
}
|
|
112
96
|
|
|
@@ -208,11 +192,6 @@ function openNext()
|
|
|
208
192
|
catch(e) {
|
|
209
193
|
console.log('Failed to open or connect next window. Popup blocker?');
|
|
210
194
|
}
|
|
211
|
-
|
|
212
|
-
// Set up a maintenance loop to keep the connection between windows. I wish there were a cleaner way to do this.
|
|
213
|
-
//if (typeof maintainNext == 'undefined') {
|
|
214
|
-
// maintainNext = setInterval(openNext, 1000);
|
|
215
|
-
//}
|
|
216
195
|
}
|
|
217
196
|
else {
|
|
218
197
|
try {
|
|
@@ -255,6 +234,17 @@ function openNotes()
|
|
|
255
234
|
}
|
|
256
235
|
}
|
|
257
236
|
|
|
237
|
+
function printSlides()
|
|
238
|
+
{
|
|
239
|
+
try {
|
|
240
|
+
var printWindow = window.open('/print');
|
|
241
|
+
printWindow.window.print();
|
|
242
|
+
}
|
|
243
|
+
catch(e) {
|
|
244
|
+
console.log('Failed to open print window. Popup blocker?');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
258
248
|
function askQuestion(question) {
|
|
259
249
|
$("#questions ul").prepend($('<li/>').text(question));
|
|
260
250
|
|
|
@@ -297,37 +287,15 @@ function updatePace() {
|
|
|
297
287
|
var position = Math.max(Math.min(sum, 90), 10); // between 10 and 90
|
|
298
288
|
$("#paceMarker").css({ left: position+"%" });
|
|
299
289
|
|
|
300
|
-
if(position > 75) {
|
|
290
|
+
if(position > 75) {
|
|
301
291
|
$("#paceFast").show();
|
|
302
|
-
} else {
|
|
292
|
+
} else {
|
|
303
293
|
$("#paceFast").hide();
|
|
304
294
|
}
|
|
305
|
-
if(position < 25) {
|
|
306
|
-
$("#paceSlow").show();
|
|
307
|
-
} else {
|
|
308
|
-
$("#paceSlow").hide();
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
function zoom()
|
|
313
|
-
{
|
|
314
|
-
if(window.innerWidth <= 480) {
|
|
315
|
-
$(".zoomed").css("zoom", 0.32);
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
var hSlide = parseFloat($("#preso").height());
|
|
319
|
-
var wSlide = parseFloat($("#preso").width());
|
|
320
|
-
var hPreview = parseFloat($("#preview").height());
|
|
321
|
-
var wPreview = parseFloat($("#preview").width());
|
|
322
|
-
var factor = parseFloat($("#zoomer").val());
|
|
323
|
-
|
|
324
|
-
newZoom = factor * Math.min(hPreview/hSlide, wPreview/wSlide) - 0.04;
|
|
325
|
-
|
|
326
|
-
$(".zoomed").css("zoom", newZoom);
|
|
327
|
-
$(".zoomed").css("-ms-zoom", newZoom);
|
|
328
|
-
$(".zoomed").css("-webkit-zoom", newZoom);
|
|
329
|
-
$(".zoomed").css("-moz-transform", "scale("+newZoom+")");
|
|
330
|
-
$(".zoomed").css("-moz-transform-origin", "left top");
|
|
295
|
+
if(position < 25) {
|
|
296
|
+
$("#paceSlow").show();
|
|
297
|
+
} else {
|
|
298
|
+
$("#paceSlow").hide();
|
|
331
299
|
}
|
|
332
300
|
}
|
|
333
301
|
|
|
@@ -337,6 +305,9 @@ gotoSlide = function (slideNum)
|
|
|
337
305
|
{
|
|
338
306
|
origGotoSlide.call(this, slideNum)
|
|
339
307
|
try { slaveWindow.gotoSlide(slideNum, false) } catch (e) {}
|
|
308
|
+
if ( !mobile() ) {
|
|
309
|
+
$("#navigation li li").get(slidenum).scrollIntoView();
|
|
310
|
+
}
|
|
340
311
|
postSlide()
|
|
341
312
|
}
|
|
342
313
|
|
|
@@ -392,11 +363,6 @@ function presPrevStep()
|
|
|
392
363
|
|
|
393
364
|
function presNextStep()
|
|
394
365
|
{
|
|
395
|
-
/* // I don't know what the point of this bit was, but it's not needed.
|
|
396
|
-
// read the variables set by our spawner
|
|
397
|
-
incrCurr = slaveWindow.incrCurr
|
|
398
|
-
incrSteps = slaveWindow.incrSteps
|
|
399
|
-
*/
|
|
400
366
|
nextStep();
|
|
401
367
|
try { slaveWindow.nextStep(false) } catch (e) {};
|
|
402
368
|
try { nextWindow.gotoSlide(nextSlideNum()) } catch (e) {};
|
|
@@ -589,10 +555,3 @@ function toggleUpdater()
|
|
|
589
555
|
mode.update = $("#followerToggle").attr("checked");
|
|
590
556
|
update();
|
|
591
557
|
}
|
|
592
|
-
|
|
593
|
-
/*
|
|
594
|
-
// redefine defaultMode
|
|
595
|
-
defaultMode = function() {
|
|
596
|
-
return mobile() ? modeState.follow : modeState.passive;
|
|
597
|
-
}
|
|
598
|
-
*/
|
data/public/js/showoff.js
CHANGED
|
@@ -46,6 +46,7 @@ function setupPreso(load_slides, prefix) {
|
|
|
46
46
|
loadSlides(loadSlidesBool, loadSlidesPrefix)
|
|
47
47
|
|
|
48
48
|
loadKeyDictionaries();
|
|
49
|
+
setupSideMenu();
|
|
49
50
|
|
|
50
51
|
doDebugStuff()
|
|
51
52
|
|
|
@@ -62,44 +63,18 @@ function setupPreso(load_slides, prefix) {
|
|
|
62
63
|
|
|
63
64
|
// make sure that the next view doesn't bugger things on the first load
|
|
64
65
|
if(query.next == 'true') {
|
|
65
|
-
$('#preso').addClass('zoomed');
|
|
66
66
|
mode.next = true;
|
|
67
|
-
zoom();
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
// Make sure the slides always look right.
|
|
71
70
|
// Better would be dynamic calculations, but this is enough for now.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
$("#feedbackWrapper").hover(
|
|
75
|
-
function() {
|
|
76
|
-
$('#feedbackSidebar').show();
|
|
77
|
-
toggleKeybinding();
|
|
78
|
-
},
|
|
79
|
-
function() {
|
|
80
|
-
$('#feedbackSidebar').hide();
|
|
81
|
-
toggleKeybinding();
|
|
82
|
-
}
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
$("#paceSlower").click(function() { sendPace('slower'); });
|
|
86
|
-
$("#paceFaster").click(function() { sendPace('faster'); });
|
|
87
|
-
$("#askQuestion").click(function() { askQuestion( $("textarea#question").val()) });
|
|
88
|
-
$("#sendFeedback").click(function() {
|
|
89
|
-
sendFeedback($( "input:radio[name=rating]:checked" ).val(), $("textarea#feedback").val())
|
|
90
|
-
});
|
|
91
|
-
$("#editSlide").click(function() { editSlide(); });
|
|
71
|
+
zoom();
|
|
72
|
+
$(window).resize(function() {zoom();});
|
|
92
73
|
|
|
93
74
|
// Open up our control socket
|
|
94
75
|
if(mode.track) {
|
|
95
76
|
connectControlChannel();
|
|
96
77
|
}
|
|
97
|
-
/*
|
|
98
|
-
ws = new WebSocket('ws://' + location.host + '/control');
|
|
99
|
-
ws.onopen = function() { connected(); };
|
|
100
|
-
ws.onclose = function() { disconnected(); }
|
|
101
|
-
ws.onmessage = function(m) { parseMessage(m.data); };
|
|
102
|
-
*/
|
|
103
78
|
}
|
|
104
79
|
|
|
105
80
|
function loadSlides(load_slides, prefix, reload) {
|
|
@@ -130,7 +105,7 @@ function loadKeyDictionaries () {
|
|
|
130
105
|
|
|
131
106
|
function initializePresentation(prefix) {
|
|
132
107
|
// unhide for height to work in static mode
|
|
133
|
-
|
|
108
|
+
$("#slides").show();
|
|
134
109
|
|
|
135
110
|
//copy into presentation area
|
|
136
111
|
$("#preso").empty()
|
|
@@ -197,47 +172,155 @@ function initializePresentation(prefix) {
|
|
|
197
172
|
$("#preso").trigger("showoff:loaded");
|
|
198
173
|
}
|
|
199
174
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
175
|
+
function zoom() {
|
|
176
|
+
var preso = $("#preso");
|
|
177
|
+
var hSlide = parseFloat(preso.height());
|
|
178
|
+
var wSlide = parseFloat(preso.width());
|
|
179
|
+
var hBody = parseFloat(preso.parent().height());
|
|
180
|
+
var wBody = parseFloat(preso.parent().width());
|
|
181
|
+
|
|
182
|
+
var newZoom = Math.min(hBody/hSlide, wBody/wSlide);
|
|
183
|
+
// Because Firefox's transform doesn't scale up very well
|
|
184
|
+
newZoom = newZoom > 1 ? 1 : newZoom - .04;
|
|
185
|
+
|
|
186
|
+
preso.css("zoom", newZoom);
|
|
187
|
+
preso.css("-ms-zoom", newZoom);
|
|
188
|
+
preso.css("-webkit-zoom", newZoom);
|
|
189
|
+
// Firefox doesn't support zoom
|
|
190
|
+
// Don't use standard transform to avoid modifying Chrome
|
|
191
|
+
preso.css("-moz-transform", "scale(" + newZoom + ")");
|
|
192
|
+
preso.css("-moz-transform-origin", "0 0 0");
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function setupSideMenu() {
|
|
196
|
+
$("#hamburger").click(function() {
|
|
197
|
+
$('#feedbackSidebar, #sidebarExit').toggle();
|
|
198
|
+
toggleKeybinding();
|
|
199
|
+
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
$("#navToggle").click(function() {
|
|
203
|
+
$("#navigation").toggle();
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
$('#fileDownloads').click(function() {
|
|
207
|
+
closeMenu();
|
|
208
|
+
window.open('/download');
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
$("#paceSlower").click(function() {
|
|
212
|
+
sendPace('slower');
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
$("#paceFaster").click(function() {
|
|
216
|
+
sendPace('faster');
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
$('#questionToggle').click(function() {
|
|
220
|
+
$('#questionSubmenu').toggle();
|
|
221
|
+
});
|
|
222
|
+
$("#askQuestion").click(function() {
|
|
223
|
+
askQuestion( $("#question").val());
|
|
224
|
+
feedback_response(this, "Sending...");
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
$('#feedbackToggle').click(function() {
|
|
228
|
+
$('#feedbackSubmenu').toggle();
|
|
229
|
+
});
|
|
230
|
+
$("#sendFeedback").click(function() {
|
|
231
|
+
sendFeedback($( "input:radio[name=rating]:checked" ).val(), $("#feedback").val());
|
|
232
|
+
feedback_response(this, "Sending...");
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
$("#editSlide").click(function() {
|
|
236
|
+
editSlide();
|
|
237
|
+
closeMenu();
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
$('#closeMenu, #sidebarExit').click(function() {
|
|
241
|
+
closeMenu();
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
function closeMenu() {
|
|
245
|
+
$('#feedbackSidebar, #sidebarExit').hide();
|
|
246
|
+
toggleKeybinding('on');
|
|
205
247
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
var
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
$(".zoomed").css("-ms-zoom", newZoom);
|
|
216
|
-
$(".zoomed").css("-webkit-zoom", newZoom);
|
|
217
|
-
$(".zoomed").css("-moz-transform", "scale("+newZoom+")");
|
|
218
|
-
$(".zoomed").css("-moz-transform-origin", "left top");
|
|
248
|
+
|
|
249
|
+
function feedback_response(elem, response) {
|
|
250
|
+
var originalText = $(elem).text();
|
|
251
|
+
$(elem).text(response);
|
|
252
|
+
window.setTimeout(function() {
|
|
253
|
+
$(elem).parent().hide();
|
|
254
|
+
closeMenu();
|
|
255
|
+
$(elem).text(originalText);
|
|
256
|
+
}, 1000);
|
|
219
257
|
}
|
|
220
258
|
}
|
|
221
259
|
|
|
222
260
|
function setupMenu() {
|
|
223
|
-
|
|
261
|
+
var nav = $("<ul>"),
|
|
262
|
+
currentSection = '',
|
|
263
|
+
sectionUL = '';
|
|
264
|
+
|
|
265
|
+
slides.each(function(s, slide){
|
|
266
|
+
var slidePath = $(slide)
|
|
267
|
+
.find(".content")
|
|
268
|
+
.attr('ref')
|
|
269
|
+
.split('/')
|
|
270
|
+
.shift();
|
|
271
|
+
var headers = $(slide).children("h1, h2");
|
|
272
|
+
var slideTitle = '';
|
|
273
|
+
|
|
274
|
+
if (currentSection !== slidePath) {
|
|
275
|
+
currentSection = slidePath;
|
|
276
|
+
var newSection = $("<li>");
|
|
277
|
+
var icon = $('<i>')
|
|
278
|
+
.addClass('fa fa-angle-down');
|
|
279
|
+
var sectionLink = $("<a>")
|
|
280
|
+
.addClass('navSection')
|
|
281
|
+
.attr('href', '#')
|
|
282
|
+
.text(slidePath)
|
|
283
|
+
.append(icon)
|
|
284
|
+
.click(function() {
|
|
285
|
+
$(this).next().toggle();
|
|
286
|
+
return false;
|
|
287
|
+
});
|
|
288
|
+
sectionUL = $("<ul>");
|
|
289
|
+
newSection.append(sectionLink, sectionUL);
|
|
290
|
+
nav.append(newSection);
|
|
291
|
+
}
|
|
224
292
|
|
|
225
|
-
|
|
226
|
-
|
|
293
|
+
if (headers.length > 0) {
|
|
294
|
+
slideTitle = headers.first().text();
|
|
295
|
+
} else {
|
|
296
|
+
slideTitle = $(slide)
|
|
297
|
+
.find(".content")
|
|
298
|
+
.text()
|
|
299
|
+
.substr(0, 20);
|
|
300
|
+
}
|
|
227
301
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
302
|
+
var navLink = $("<a>")
|
|
303
|
+
.addClass('navItem')
|
|
304
|
+
.attr('rel', s)
|
|
305
|
+
.attr('href', '#')
|
|
306
|
+
.text((s + 1) + ". " + slideTitle)
|
|
307
|
+
.click(function() {
|
|
308
|
+
gotoSlide(s);
|
|
309
|
+
if (typeof slaveWindow !== 'undefined' && slaveWindow !== null) {
|
|
310
|
+
slaveWindow.gotoSlide(s, false);
|
|
311
|
+
postSlide();
|
|
312
|
+
update();
|
|
313
|
+
}
|
|
314
|
+
return false;
|
|
315
|
+
});
|
|
316
|
+
var navItem = $("<li>").append(navLink);
|
|
235
317
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
318
|
+
sectionUL.append(navItem);
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
// can't use .children.replaceWith() because this starts out empty...
|
|
322
|
+
$("#navigation").empty();
|
|
323
|
+
$("#navigation").append(nav);
|
|
241
324
|
}
|
|
242
325
|
|
|
243
326
|
function checkSlideParameter() {
|
|
@@ -369,21 +452,15 @@ function showSlide(back_step, updatepv) {
|
|
|
369
452
|
|
|
370
453
|
}
|
|
371
454
|
|
|
372
|
-
// Update
|
|
373
|
-
$(
|
|
374
|
-
|
|
375
|
-
$(".menu > ul > li > ul ").hide(); //Collapse nav
|
|
376
|
-
$(".menu > ul > li > ul > li").removeClass('highlighted');
|
|
377
|
-
$(this).addClass('highlighted'); //Highlight current menu item
|
|
378
|
-
$(this).parent().show(); //Show nav block containing current slide
|
|
455
|
+
// Update nav
|
|
456
|
+
$('.highlighted').removeClass('highlighted');
|
|
457
|
+
$('#navigation ul ul').hide();
|
|
379
458
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
}
|
|
384
|
-
});
|
|
459
|
+
var active = $(".navItem").get(slidenum);
|
|
460
|
+
$(active).parent().addClass('highlighted');
|
|
461
|
+
$(active).parent().parent().show();
|
|
385
462
|
|
|
386
|
-
|
|
463
|
+
return ret;
|
|
387
464
|
}
|
|
388
465
|
|
|
389
466
|
function getSlideProgress()
|
|
@@ -506,12 +583,12 @@ function renderForm(form) {
|
|
|
506
583
|
var action = form.attr("action");
|
|
507
584
|
$.getJSON(action, function( data ) {
|
|
508
585
|
//console.log(data);
|
|
509
|
-
form.children('
|
|
586
|
+
form.children('.element').each(function() {
|
|
510
587
|
var key = $(this).attr('data-name');
|
|
511
588
|
|
|
512
589
|
// add a counter label if we haven't already
|
|
513
|
-
if( $(this).
|
|
514
|
-
$(this).
|
|
590
|
+
if( $(this).next('.count').length === 0 ) {
|
|
591
|
+
$(this).after($('<h1>').addClass('count'));
|
|
515
592
|
}
|
|
516
593
|
|
|
517
594
|
$(this).find('ul > li > *').each(function() {
|
|
@@ -522,8 +599,6 @@ function renderForm(form) {
|
|
|
522
599
|
});
|
|
523
600
|
|
|
524
601
|
// replace all input widgets with spans for the bar chart
|
|
525
|
-
var max = 5;
|
|
526
|
-
var style = 0;
|
|
527
602
|
$(this).children(':input').each(function() {
|
|
528
603
|
switch( $(this).attr('type') ) {
|
|
529
604
|
case 'text':
|
|
@@ -537,16 +612,21 @@ function renderForm(form) {
|
|
|
537
612
|
case 'radio':
|
|
538
613
|
case 'checkbox':
|
|
539
614
|
// Just render these directly and migrate the label to inside the span
|
|
540
|
-
var value = $(this).attr('value');
|
|
541
615
|
var label = $(this).next('label');
|
|
542
|
-
var classes = $(this).attr('class');
|
|
543
616
|
var text = label.text();
|
|
617
|
+
var classes = $(this).attr('class');
|
|
544
618
|
|
|
545
619
|
if(text.match(/^-+$/)) {
|
|
546
620
|
$(this).remove();
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
|
|
621
|
+
} else {
|
|
622
|
+
var resultDiv = $('<div>')
|
|
623
|
+
.addClass('item')
|
|
624
|
+
.attr('data-value', $(this).attr('value'))
|
|
625
|
+
.text(text);
|
|
626
|
+
if (classes) {
|
|
627
|
+
resultDiv.addClass(classes);
|
|
628
|
+
}
|
|
629
|
+
$(this).replaceWith(resultDiv);
|
|
550
630
|
}
|
|
551
631
|
label.remove();
|
|
552
632
|
break;
|
|
@@ -554,26 +634,26 @@ function renderForm(form) {
|
|
|
554
634
|
default:
|
|
555
635
|
// select doesn't have a type attribute... yay html
|
|
556
636
|
// poke inside to get options, then render each as a span and replace the select
|
|
557
|
-
parent = $(this).parent();
|
|
637
|
+
var parent = $(this).parent();
|
|
558
638
|
|
|
559
639
|
$(this).children('option').each(function() {
|
|
560
|
-
var value = $(this).val();
|
|
561
640
|
var text = $(this).text();
|
|
562
641
|
var classes = $(this).attr('class');
|
|
563
642
|
|
|
564
643
|
if(! text.match(/^-+$/)) {
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
644
|
+
var resultDiv = $('<div>')
|
|
645
|
+
.addClass('item')
|
|
646
|
+
.attr('data-value', $(this).val())
|
|
647
|
+
.text(text);
|
|
648
|
+
if (classes) {
|
|
649
|
+
resultDiv.addClass(classes);
|
|
650
|
+
}
|
|
651
|
+
parent.append(resultDiv);
|
|
569
652
|
}
|
|
570
653
|
});
|
|
571
654
|
$(this).remove();
|
|
572
655
|
break;
|
|
573
656
|
}
|
|
574
|
-
|
|
575
|
-
// loop style counter
|
|
576
|
-
style++; style %= max;
|
|
577
657
|
});
|
|
578
658
|
|
|
579
659
|
// only start counting and sizing bars if we actually have usable data
|
|
@@ -592,7 +672,7 @@ function renderForm(form) {
|
|
|
592
672
|
});
|
|
593
673
|
|
|
594
674
|
// insert the total into the counter label
|
|
595
|
-
$(this).
|
|
675
|
+
$(this).next('.count').each(function() {
|
|
596
676
|
$(this).text(total);
|
|
597
677
|
});
|
|
598
678
|
|
|
@@ -956,51 +1036,6 @@ function swipeRight() {
|
|
|
956
1036
|
prevStep();
|
|
957
1037
|
}
|
|
958
1038
|
|
|
959
|
-
function ListMenu(s)
|
|
960
|
-
{
|
|
961
|
-
this.slide = s
|
|
962
|
-
this.typeName = 'ListMenu'
|
|
963
|
-
this.itemLength = 0;
|
|
964
|
-
this.items = new Array();
|
|
965
|
-
this.addItem = function (key, text, slide) {
|
|
966
|
-
if (key.length > 1) {
|
|
967
|
-
thisKey = key.shift()
|
|
968
|
-
if (!this.items[thisKey]) {
|
|
969
|
-
this.items[thisKey] = new ListMenu(slide)
|
|
970
|
-
}
|
|
971
|
-
this.items[thisKey].addItem(key, text, slide)
|
|
972
|
-
} else {
|
|
973
|
-
thisKey = key.shift()
|
|
974
|
-
this.items[thisKey] = new ListMenuItem(text, slide)
|
|
975
|
-
}
|
|
976
|
-
}
|
|
977
|
-
this.getList = function() {
|
|
978
|
-
var newMenu = $("<ul>")
|
|
979
|
-
for(var i in this.items) {
|
|
980
|
-
var item = this.items[i]
|
|
981
|
-
var domItem = $("<li>")
|
|
982
|
-
if (item.typeName == 'ListMenu') {
|
|
983
|
-
choice = $("<a rel=\"" + (item.slide - 1) + "\" href=\"#\">" + i + "</a>")
|
|
984
|
-
domItem.append(choice)
|
|
985
|
-
domItem.append(item.getList())
|
|
986
|
-
}
|
|
987
|
-
if (item.typeName == 'ListMenuItem') {
|
|
988
|
-
choice = $("<a rel=\"" + (item.slide - 1) + "\" href=\"#\">" + item.slide + '. ' + item.textName + "</a>")
|
|
989
|
-
domItem.append(choice)
|
|
990
|
-
}
|
|
991
|
-
newMenu.append(domItem)
|
|
992
|
-
}
|
|
993
|
-
return newMenu
|
|
994
|
-
}
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
function ListMenuItem(t, s)
|
|
998
|
-
{
|
|
999
|
-
this.typeName = "ListMenuItem"
|
|
1000
|
-
this.slide = s
|
|
1001
|
-
this.textName = t
|
|
1002
|
-
}
|
|
1003
|
-
|
|
1004
1039
|
var removeResults = function() {
|
|
1005
1040
|
$('.results').remove();
|
|
1006
1041
|
|
|
@@ -1052,7 +1087,6 @@ function executeCode() {
|
|
|
1052
1087
|
// any code that can be run directly in the browser
|
|
1053
1088
|
function executeLocalCode(lang, codeDiv) {
|
|
1054
1089
|
var result = null;
|
|
1055
|
-
var codeDiv = $(this);
|
|
1056
1090
|
|
|
1057
1091
|
setExecutionSignal(true, codeDiv);
|
|
1058
1092
|
setTimeout(function() { setExecutionSignal(false, codeDiv);}, 1000 );
|
|
@@ -1271,16 +1305,5 @@ function setupStats()
|
|
|
1271
1305
|
|
|
1272
1306
|
/* Is this a mobile device? */
|
|
1273
1307
|
function mobile() {
|
|
1274
|
-
/*
|
|
1275
|
-
return ( navigator.userAgent.match(/Android/i)
|
|
1276
|
-
|| navigator.userAgent.match(/webOS/i)
|
|
1277
|
-
|| navigator.userAgent.match(/iPhone/i)
|
|
1278
|
-
|| navigator.userAgent.match(/iPad/i)
|
|
1279
|
-
|| navigator.userAgent.match(/iPod/i)
|
|
1280
|
-
|| navigator.userAgent.match(/BlackBerry/i)
|
|
1281
|
-
|| navigator.userAgent.match(/Windows Phone/i)
|
|
1282
|
-
);
|
|
1283
|
-
*/
|
|
1284
|
-
|
|
1285
1308
|
return ( $(window).width() <= 480 )
|
|
1286
1309
|
}
|