showoff 0.11.2 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|