showoff 0.19.4 → 0.20.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 +5 -5
- data/Rakefile +24 -12
- data/bin/showoff +47 -24
- data/lib/keymap.rb +19 -5
- data/lib/showoff.rb +96 -44
- data/lib/showoff/compiler.rb +106 -0
- data/lib/showoff/compiler/downloads.rb +91 -0
- data/lib/showoff/compiler/fixups.rb +142 -0
- data/lib/showoff/compiler/form.rb +236 -0
- data/lib/showoff/compiler/glossary.rb +164 -0
- data/lib/showoff/compiler/i18n.rb +24 -0
- data/lib/showoff/compiler/notes.rb +73 -0
- data/lib/showoff/compiler/table_of_contents.rb +51 -0
- data/lib/showoff/compiler/variables.rb +71 -0
- data/lib/showoff/config.rb +218 -0
- data/lib/showoff/locale.rb +132 -0
- data/lib/showoff/logger.rb +15 -0
- data/lib/showoff/monkeypatches.rb +28 -0
- data/lib/showoff/presentation.rb +181 -0
- data/lib/showoff/presentation/section.rb +70 -0
- data/lib/showoff/presentation/slide.rb +113 -0
- data/lib/showoff/state.rb +89 -0
- data/lib/showoff/version.rb +2 -2
- data/lib/showoff_ng.rb +99 -0
- data/lib/showoff_utils.rb +27 -21
- data/public/css/font-awesome-5.6.1/css/all.min.css +5 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.eot +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.svg +1260 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.ttf +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.woff +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.woff2 +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.eot +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.svg +471 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.ttf +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.woff +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.woff2 +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.eot +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.svg +2760 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.ttf +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.woff +0 -0
- data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.woff2 +0 -0
- data/public/css/presenter.css +1 -0
- data/public/css/showoff.css +42 -10
- data/public/js/highlight.pack-9.15.10.js +22614 -0
- data/public/js/highlightjs-line-numbers.min.js +1 -0
- data/public/js/presenter.js +13 -11
- data/public/js/showoff.js +39 -31
- data/views/download.erb +2 -2
- data/views/header.erb +27 -26
- data/views/header_mini.erb +8 -8
- data/views/index.erb +56 -56
- data/views/onepage.erb +10 -16
- data/views/presenter.erb +124 -123
- data/views/slide.erb +29 -0
- data/views/stats.erb +1 -1
- metadata +113 -100
- data/locales/id.yml +0 -2
- data/public/css/font-awesome-4.4.0/css/font-awesome.min.css +0 -4
- data/public/css/font-awesome-4.4.0/fonts/FontAwesome.otf +0 -0
- data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.eot +0 -0
- data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.svg +0 -640
- data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.ttf +0 -0
- data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.woff +0 -0
- data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.woff2 +0 -0
- data/public/js/highlight.pack-9.2.0.js +0 -15448
@@ -0,0 +1 @@
|
|
1
|
+
!function(n,e){"use strict";function t(){var n=e.createElement("style");n.type="text/css",n.innerHTML=u(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[f,m,j]),e.getElementsByTagName("head")[0].appendChild(n)}function r(t){"interactive"===e.readyState||"complete"===e.readyState?l(t):n.addEventListener("DOMContentLoaded",function(){l(t)})}function l(t){try{var r=e.querySelectorAll("code.hljs");for(var l in r)r.hasOwnProperty(l)&&i(r[l],t)}catch(o){n.console.error("LineNumbers error: ",o)}}function i(n,e){if("object"==typeof n){e=e||{singleLine:!1};var t=e.singleLine?0:1;h(function(){s(n),n.innerHTML=o(n.innerHTML,t)})}}function o(n,e){var t=c(n);if(""===t[t.length-1].trim()&&t.pop(),t.length>e){for(var r="",l=0,i=t.length;l<i;l++)r+=u('<tr><td class="{0}"><div class="{1} {2}" {3}="{5}"></div></td><td class="{4}"><div class="{1}">{6}</div></td></tr>',[p,v,m,j,g,l+1,t[l].length>0?t[l]:" "]);return u('<table class="{0}">{1}</table>',[f,r])}return n}function s(n){var e=n.childNodes;for(var t in e)if(e.hasOwnProperty(t)){var r=e[t];d(r.textContent)>0&&(r.childNodes.length>0?s(r):a(r.parentNode))}}function a(n){var e=n.className;if(/hljs-/.test(e)){for(var t=c(n.innerHTML),r=0,l="";r<t.length;r++){var i=t[r].length>0?t[r]:" ";l+=u('<span class="{0}">{1}</span>\n',[e,i])}n.innerHTML=l.trim()}}function c(n){return 0===n.length?[]:n.split(L)}function d(n){return(n.trim().match(L)||[]).length}function h(e){n.setTimeout(e,0)}function u(n,e){return n.replace(/\{(\d+)\}/g,function(n,t){return e[t]?e[t]:n})}var f="hljs-ln",v="hljs-ln-line",g="hljs-ln-code",p="hljs-ln-numbers",m="hljs-ln-n",j="data-line-number",L=/\r\n|\r|\n/g;n.hljs?(n.hljs.initLineNumbersOnLoad=r,n.hljs.lineNumbersBlock=i,t()):n.console.error("highlight.js not detected!")}(window,document);
|
data/public/js/presenter.js
CHANGED
@@ -36,15 +36,15 @@ $(document).ready(function(){
|
|
36
36
|
$("#notes-wrapper .fa-minus").click( function() {
|
37
37
|
notesFontSize('decrease');
|
38
38
|
});
|
39
|
-
$("#notes-wrapper .fa-
|
39
|
+
$("#notes-wrapper .fa-circle").click( function() {
|
40
40
|
notesFontSize('reset');
|
41
41
|
});
|
42
42
|
$("#notes-wrapper .fa-plus").click( function() {
|
43
43
|
notesFontSize('increase');
|
44
44
|
});
|
45
45
|
|
46
|
-
$('#statslink').click(function(e) { presenterPopupToggle('
|
47
|
-
$('#downloadslink').click(function(e) { presenterPopupToggle('
|
46
|
+
$('#statslink').click(function(e) { presenterPopupToggle('stats', e); });
|
47
|
+
$('#downloadslink').click(function(e) { presenterPopupToggle('download', e); });
|
48
48
|
|
49
49
|
$('#layoutSelector').change(function(e) { chooseLayout(e.target.value); });
|
50
50
|
chooseLayout(null);
|
@@ -82,7 +82,7 @@ $(document).ready(function(){
|
|
82
82
|
|
83
83
|
$('#topbar #update').click( function(e) {
|
84
84
|
e.preventDefault();
|
85
|
-
$.get("
|
85
|
+
$.get("getpage", function(data) {
|
86
86
|
gotoSlide(data);
|
87
87
|
});
|
88
88
|
});
|
@@ -154,7 +154,7 @@ $(document).ready(function(){
|
|
154
154
|
setInterval(function() { updatePace() }, 1000);
|
155
155
|
|
156
156
|
setInterval(function() {
|
157
|
-
$.getJSON("
|
157
|
+
$.getJSON("stats_data", function( json ) {
|
158
158
|
var percent = json['stray_p'];
|
159
159
|
if(percent > 25) {
|
160
160
|
$('#topbar #statslink').addClass('warning');
|
@@ -250,7 +250,7 @@ function editSlide() {
|
|
250
250
|
// call the edit endpoint to open up a local file editor
|
251
251
|
function openEditor() {
|
252
252
|
var slide = $("span#slideFile").text().replace(/:\d+$/, '');
|
253
|
-
var link = '
|
253
|
+
var link = 'edit/' + slide + ".md";
|
254
254
|
$.get(link);
|
255
255
|
}
|
256
256
|
|
@@ -277,11 +277,11 @@ function openSlave()
|
|
277
277
|
{
|
278
278
|
try {
|
279
279
|
if(windowIsClosed(slaveWindow)){
|
280
|
-
slaveWindow = window.open('
|
280
|
+
slaveWindow = window.open('./' + window.location.hash, 'toolbar');
|
281
281
|
}
|
282
282
|
else if(slaveWindow.location.hash != window.location.hash) {
|
283
283
|
// maybe we need to reset content?
|
284
|
-
slaveWindow.location.href = '
|
284
|
+
slaveWindow.location.href = './' + window.location.hash;
|
285
285
|
}
|
286
286
|
|
287
287
|
// give the window time to load before poking at it
|
@@ -451,7 +451,7 @@ function blankStyledWindow(title, dimensions, classes, resizable) {
|
|
451
451
|
// them into elements again in the context of the other document.
|
452
452
|
// Because IE.
|
453
453
|
|
454
|
-
$(newWindow.document.head).append('<base href="' +
|
454
|
+
$(newWindow.document.head).append('<base href="' + location.origin + location.root + '"/>');
|
455
455
|
$('link[rel="stylesheet"]').each(function() {
|
456
456
|
var href = $(this).attr('href');
|
457
457
|
var style = '<link rel="stylesheet" type="text/css" href="' + href + '">'
|
@@ -508,8 +508,10 @@ function printDialog() {
|
|
508
508
|
function printSlides(section)
|
509
509
|
{
|
510
510
|
try {
|
511
|
-
var printWindow = window.open('
|
512
|
-
printWindow.
|
511
|
+
var printWindow = window.open('print/'+section);
|
512
|
+
$(printWindow).on('load', function(){
|
513
|
+
printWindow.window.print();
|
514
|
+
});
|
513
515
|
}
|
514
516
|
catch(e) {
|
515
517
|
console.log('Failed to open print window. Popup blocker?');
|
data/public/js/showoff.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
/*
|
1
|
+
/* Showoff JS Logic */
|
2
2
|
|
3
|
-
var
|
3
|
+
var Showoff = {};
|
4
4
|
|
5
5
|
var preso_started = false
|
6
6
|
var slidenum = 0
|
7
|
-
var presenterSlideNum =
|
7
|
+
var presenterSlideNum = null
|
8
8
|
var slideTotal = 0
|
9
9
|
var slides
|
10
10
|
var currentSlide
|
@@ -22,11 +22,13 @@ var section = 'handouts'; // default to showing handout notes for display view
|
|
22
22
|
var slideStartTime = new Date().getTime()
|
23
23
|
var activityIncomplete = false; // slides won't advance when this is on
|
24
24
|
|
25
|
-
var loadSlidesBool
|
26
|
-
var loadSlidesPrefix
|
25
|
+
var loadSlidesBool;
|
27
26
|
|
28
27
|
var mode = { track: true, follow: true };
|
29
28
|
|
29
|
+
// Make sure we have a sane value here
|
30
|
+
location.root = location.root || location.pathname;
|
31
|
+
|
30
32
|
// global variable to register tours with
|
31
33
|
var tours = {};
|
32
34
|
var menuTourRunning = false;
|
@@ -52,7 +54,7 @@ document.cookie.split(';').forEach( function(item) {
|
|
52
54
|
|
53
55
|
$(document).on('click', 'code.execute', executeCode);
|
54
56
|
|
55
|
-
function setupPreso(load_slides
|
57
|
+
function setupPreso(load_slides) {
|
56
58
|
if (preso_started) {
|
57
59
|
alert("already started");
|
58
60
|
return;
|
@@ -73,8 +75,7 @@ function setupPreso(load_slides, prefix) {
|
|
73
75
|
|
74
76
|
// Load slides fetches images
|
75
77
|
loadSlidesBool = load_slides;
|
76
|
-
|
77
|
-
loadSlides(loadSlidesBool, loadSlidesPrefix);
|
78
|
+
loadSlides(loadSlidesBool);
|
78
79
|
|
79
80
|
setupSideMenu();
|
80
81
|
|
@@ -177,8 +178,8 @@ function setupPreso(load_slides, prefix) {
|
|
177
178
|
|
178
179
|
}
|
179
180
|
|
180
|
-
function loadSlides(load_slides,
|
181
|
-
var url =
|
181
|
+
function loadSlides(load_slides, reload, hard) {
|
182
|
+
var url = "slides";
|
182
183
|
if (reload) {
|
183
184
|
url += "?cache=clear";
|
184
185
|
}
|
@@ -192,18 +193,18 @@ function loadSlides(load_slides, prefix, reload, hard) {
|
|
192
193
|
}
|
193
194
|
else {
|
194
195
|
$("#slides img").batchImageLoad({
|
195
|
-
loadingCompleteCallback: initializePresentation(
|
196
|
+
loadingCompleteCallback: initializePresentation()
|
196
197
|
});
|
197
198
|
}
|
198
199
|
})
|
199
200
|
} else {
|
200
201
|
$("#slides img").batchImageLoad({
|
201
|
-
loadingCompleteCallback: initializePresentation(
|
202
|
+
loadingCompleteCallback: initializePresentation()
|
202
203
|
})
|
203
204
|
}
|
204
205
|
}
|
205
206
|
|
206
|
-
function initializePresentation(
|
207
|
+
function initializePresentation() {
|
207
208
|
// unhide for height to work in static mode
|
208
209
|
$("#slides").show();
|
209
210
|
|
@@ -241,6 +242,10 @@ function initializePresentation(prefix) {
|
|
241
242
|
// then add focus on any lines marked
|
242
243
|
highlightLines(block);
|
243
244
|
|
245
|
+
if($(block).hasClass('numbers')) {
|
246
|
+
hljs.lineNumbersBlock(block);
|
247
|
+
}
|
248
|
+
|
244
249
|
} catch(e) {
|
245
250
|
console.log('Syntax highlighting failed on ' + $(this).closest('div.slide').attr('id'));
|
246
251
|
console.log('Syntax highlighting failed for ' + $(this).attr('class'));
|
@@ -399,7 +404,7 @@ function setupSideMenu() {
|
|
399
404
|
|
400
405
|
$('#fileDownloads').click(function() {
|
401
406
|
closeMenu();
|
402
|
-
window.open('
|
407
|
+
window.open('download');
|
403
408
|
})
|
404
409
|
|
405
410
|
$("#paceSlower").click(function() {
|
@@ -670,12 +675,12 @@ function showTour(name, record) {
|
|
670
675
|
if(record) {
|
671
676
|
clientTours.push(name);
|
672
677
|
document.cookieHash['tours'] = clientTours;
|
673
|
-
document.cookie = "tours="+JSON.stringify(clientTours);
|
678
|
+
document.cookie = "tours="+JSON.stringify(clientTours)+"; max-age=31536000; path=/;";
|
674
679
|
}
|
675
680
|
|
676
681
|
// this keeps track of the version of the presenter tour we've seen
|
677
682
|
if(name == 'showoff:presenter:auto') {
|
678
|
-
document.cookie = "tourVersion="+tourVersion;
|
683
|
+
document.cookie = "tourVersion="+tourVersion+"; max-age=31536000; path=/;";
|
679
684
|
document.cookieHash['tourVersion'] = tourVersion;
|
680
685
|
|
681
686
|
// we don't need this anymore; let's save a byte or three
|
@@ -721,11 +726,13 @@ function showTour(name, record) {
|
|
721
726
|
// get the value of an option=value class applied to a slide
|
722
727
|
function getSlideOption(option) {
|
723
728
|
var classes = currentSlide.attr('class').split(' ');
|
724
|
-
var match = classes.find(function(item){
|
725
|
-
return (item.indexOf(option+'=') == 0);
|
726
|
-
});
|
727
729
|
|
728
|
-
|
730
|
+
for (var i=0; i < classes.length; i++) {
|
731
|
+
var item = classes[i].split('=');
|
732
|
+
if(item.length == 2 && item[0] == option) {
|
733
|
+
return item[1]
|
734
|
+
}
|
735
|
+
}
|
729
736
|
}
|
730
737
|
|
731
738
|
function checkSlideParameter() {
|
@@ -1257,7 +1264,8 @@ function renderForm(form) {
|
|
1257
1264
|
function connectControlChannel() {
|
1258
1265
|
if (interactive) {
|
1259
1266
|
protocol = (location.protocol === 'https:') ? 'wss://' : 'ws://';
|
1260
|
-
|
1267
|
+
path = (location.root + '/control').replace('//', '/').replace('/presenter','');;
|
1268
|
+
ws = new WebSocket(protocol + location.host + path);
|
1261
1269
|
ws.onopen = function() { connected(); };
|
1262
1270
|
ws.onclose = function() { disconnected(); }
|
1263
1271
|
ws.onmessage = function(m) { parseMessage(m.data); };
|
@@ -1792,7 +1800,7 @@ function reloadSlides (hard) {
|
|
1792
1800
|
}
|
1793
1801
|
|
1794
1802
|
if (confirm(message)) {
|
1795
|
-
loadSlides(loadSlidesBool,
|
1803
|
+
loadSlides(loadSlidesBool, true, hard);
|
1796
1804
|
}
|
1797
1805
|
}
|
1798
1806
|
|
@@ -1839,14 +1847,14 @@ var removeResults = function() {
|
|
1839
1847
|
try { slaveWindow.removeResults() } catch (e) {};
|
1840
1848
|
};
|
1841
1849
|
|
1842
|
-
var
|
1850
|
+
var displayHUD = function(text) {
|
1843
1851
|
removeResults();
|
1844
1852
|
var _results = $('<div>').addClass('results').html('<pre>' + String(text).substring(0, 1500) + '</pre>');
|
1845
1853
|
$('body').append(_results);
|
1846
1854
|
_results.click(removeResults);
|
1847
1855
|
|
1848
1856
|
// if we're a presenter, mirror this on the display window
|
1849
|
-
try { slaveWindow.
|
1857
|
+
try { slaveWindow.displayHUD(text) } catch (e) {};
|
1850
1858
|
};
|
1851
1859
|
|
1852
1860
|
// Execute the first visible executable code block
|
@@ -1902,7 +1910,7 @@ function executeLocalCode(lang, codeDiv) {
|
|
1902
1910
|
catch(e) {
|
1903
1911
|
result = e.message;
|
1904
1912
|
};
|
1905
|
-
if (result != null)
|
1913
|
+
if (result != null) displayHUD(result);
|
1906
1914
|
}
|
1907
1915
|
|
1908
1916
|
// request the server to execute a code block by path and index
|
@@ -1912,8 +1920,8 @@ function executeRemoteCode(lang, codeDiv) {
|
|
1912
1920
|
var path = slide.attr('ref');
|
1913
1921
|
|
1914
1922
|
setExecutionSignal(true, codeDiv);
|
1915
|
-
$.get('
|
1916
|
-
if (result != null)
|
1923
|
+
$.get('execute/'+lang, {path: path, index: index}, function(result) {
|
1924
|
+
if (result != null) displayHUD(result);
|
1917
1925
|
setExecutionSignal(false, codeDiv);
|
1918
1926
|
});
|
1919
1927
|
}
|
@@ -1990,11 +1998,11 @@ function setupPreShow(seconds) {
|
|
1990
1998
|
$.each(data, function(i, n) {
|
1991
1999
|
if(n == "preshow.json") {
|
1992
2000
|
// has a descriptions file
|
1993
|
-
$.getJSON("
|
2001
|
+
$.getJSON("file/_preshow/preshow.json", false, function(data) {
|
1994
2002
|
preshow_des = data;
|
1995
2003
|
})
|
1996
2004
|
} else {
|
1997
|
-
$('#preshow').append('<img ref="' + n + '" src="
|
2005
|
+
$('#preshow').append('<img ref="' + n + '" src="file/_preshow/' + n + '" class="preshow" />');
|
1998
2006
|
}
|
1999
2007
|
})
|
2000
2008
|
preshow_images = $('#preshow > img');
|
@@ -2059,7 +2067,7 @@ function stopPreShow() {
|
|
2059
2067
|
$('#tips').remove();
|
2060
2068
|
$('#preshow_timer').remove();
|
2061
2069
|
|
2062
|
-
loadSlides(loadSlidesBool
|
2070
|
+
loadSlides(loadSlidesBool);
|
2063
2071
|
}
|
2064
2072
|
|
2065
2073
|
function nextPreShowImage() {
|
@@ -2112,7 +2120,7 @@ function setupStats(data)
|
|
2112
2120
|
}
|
2113
2121
|
});
|
2114
2122
|
|
2115
|
-
var location = window.location.pathname == '
|
2123
|
+
var location = window.location.pathname == 'presenter' ? '#' : '/#';
|
2116
2124
|
var viewers = data['viewers'];
|
2117
2125
|
if (viewers) {
|
2118
2126
|
if (viewers.length == 1 && viewers[0][3] == 'current') {
|
data/views/download.erb
CHANGED
@@ -14,10 +14,10 @@
|
|
14
14
|
<% enabled, title, files = value %>
|
15
15
|
<% if enabled %>
|
16
16
|
<%if key != -999 %>
|
17
|
-
<% path = '
|
17
|
+
<% path = 'file/_files' %>
|
18
18
|
<h4>Slide <%= key %> <small>(<%= title %>)</small></h4>
|
19
19
|
<% else %>
|
20
|
-
<% path = '
|
20
|
+
<% path = 'file/_files/share' %>
|
21
21
|
<% end %>
|
22
22
|
<ul>
|
23
23
|
<% files.each do |file| %>
|
data/views/header.erb
CHANGED
@@ -7,47 +7,48 @@
|
|
7
7
|
<link rel="icon" href="<%= @favicon %>"/>
|
8
8
|
<% end %>
|
9
9
|
|
10
|
-
<link rel="stylesheet" type="text/css" href="
|
11
|
-
<link rel="stylesheet" type="text/css" href="
|
12
|
-
<link rel="stylesheet" type="text/css" href="
|
13
|
-
<link rel="stylesheet" type="text/css" href="
|
14
|
-
<link rel="stylesheet" type="text/css" href="
|
15
|
-
<link rel="stylesheet" type="text/css" href="
|
16
|
-
<link rel="stylesheet" type="text/css" href="
|
10
|
+
<link rel="stylesheet" type="text/css" href="css/highlight/<%= @highlightStyle %>.css" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="css/mermaid-6.0.0.css" />
|
12
|
+
<link rel="stylesheet" type="text/css" href="css/font-awesome-5.6.1/css/all.min.css">
|
13
|
+
<link rel="stylesheet" type="text/css" href="css/introjs-2.5.local.css">
|
14
|
+
<link rel="stylesheet" type="text/css" href="css/jquery-ui-1.12.1.css">
|
15
|
+
<link rel="stylesheet" type="text/css" href="css/showoff.css?v=<%= SHOWOFF_VERSION %>" />
|
16
|
+
<link rel="stylesheet" type="text/css" href="css/zoomline-0.0.1.css">
|
17
17
|
|
18
|
-
<script type="text/javascript" src="
|
19
|
-
<script type="text/javascript" src="
|
18
|
+
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
|
19
|
+
<script type="text/javascript" src="js/jquery-ui-1.12.1.js"></script>
|
20
20
|
|
21
|
-
<script type="text/javascript" src="
|
22
|
-
<script type="text/javascript" src="
|
23
|
-
<script type="text/javascript" src="
|
24
|
-
<script type="text/javascript" src="
|
25
|
-
<script type="text/javascript" src="
|
26
|
-
<script type="text/javascript" src="
|
27
|
-
<script type="text/javascript" src="
|
28
|
-
<script type="text/javascript" src="
|
29
|
-
<script type="text/javascript" src="
|
30
|
-
<script type="text/javascript" src="
|
21
|
+
<script type="text/javascript" src="js/jquery.cycle.all-2.8.0.js"></script>
|
22
|
+
<script type="text/javascript" src="js/jquery.batchImageLoad-1.0.0.js"></script>
|
23
|
+
<script type="text/javascript" src="js/jquery.parsequery.min-6a20f83.js"></script>
|
24
|
+
<script type="text/javascript" src="js/jquery.doubletap-4ff02c5.js"></script>
|
25
|
+
<script type="text/javascript" src="js/highlight.pack-9.15.10.js"></script>
|
26
|
+
<script type="text/javascript" src="js/highlightjs-line-numbers.min.js"></script>
|
27
|
+
<script type="text/javascript" src="js/jTypeWriter-1.1.js"></script>
|
28
|
+
<script type="text/javascript" src="js/bigtext-0.1.8.js"></script>
|
29
|
+
<script type="text/javascript" src="js/zoomline-0.0.1.js"></script>
|
30
|
+
<script type="text/javascript" src="js/simpleStrings-0.0.1.js"></script>
|
31
|
+
<script type="text/javascript" src="js/mermaid-6.0.0-min.js"></script>
|
31
32
|
|
32
33
|
<!-- waiting on https://github.com/usablica/intro.js/pull/727 -->
|
33
|
-
<script type="text/javascript" src="
|
34
|
+
<script type="text/javascript" src="js/intro-2.5.local.js"></script>
|
34
35
|
|
35
|
-
<script type="text/javascript" src="
|
36
|
+
<script type="text/javascript" src="js/coffee-script-1.1.3-pre.js"></script>
|
36
37
|
|
37
|
-
<script type="text/javascript" src="
|
38
|
-
<script type="text/javascript" src="
|
38
|
+
<script type="text/javascript" src="js/annotations.js?v=<%= SHOWOFF_VERSION %>"></script>
|
39
|
+
<script type="text/javascript" src="js/showoff.js?v=<%= SHOWOFF_VERSION %>"></script>
|
39
40
|
|
40
41
|
<% css_files.each do |css_file| %>
|
41
|
-
<link rel="stylesheet" href="<%=
|
42
|
+
<link rel="stylesheet" type="text/css" href="<%= css_file %>" />
|
42
43
|
<% end %>
|
43
44
|
|
44
45
|
<% js_files.each do |js_file| %>
|
45
|
-
<script type="text/javascript" src="<%=
|
46
|
+
<script type="text/javascript" src="<%= js_file %>"></script>
|
46
47
|
<% end %>
|
47
48
|
|
48
49
|
<script type="text/javascript">
|
49
50
|
$(function(){
|
50
|
-
setupPreso(<%= @slides.nil? ? "true" : "false"
|
51
|
+
setupPreso(<%= @slides.nil? ? "true" : "false"%>);
|
51
52
|
});
|
52
53
|
|
53
54
|
editUrl = "<%= @edit %>";
|
data/views/header_mini.erb
CHANGED
@@ -7,19 +7,19 @@
|
|
7
7
|
<link rel="icon" href="<%= @favicon %>"/>
|
8
8
|
<% end %>
|
9
9
|
|
10
|
-
<link rel="stylesheet" type="text/css" href="
|
11
|
-
<link rel="stylesheet" type="text/css" href="
|
12
|
-
<link rel="stylesheet" type="text/css" href="
|
10
|
+
<link rel="stylesheet" type="text/css" href="css/showoff.css?v=<%= SHOWOFF_VERSION %>" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="css/font-awesome-4.4.0/css/font-awesome.min.css">
|
12
|
+
<link rel="stylesheet" type="text/css" href="css/zoomline-0.0.1.css">
|
13
13
|
|
14
|
-
<script type="text/javascript" src="
|
15
|
-
<script type="text/javascript" src="
|
14
|
+
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
|
15
|
+
<script type="text/javascript" src="js/zoomline-0.0.1.js"></script>
|
16
16
|
|
17
|
-
<script type="text/javascript" src="
|
17
|
+
<script type="text/javascript" src="js/showoff.js?v=<%= SHOWOFF_VERSION %>"></script>
|
18
18
|
|
19
19
|
<% css_files.each do |css_file| %>
|
20
|
-
<link rel="stylesheet" href="<%=
|
20
|
+
<link rel="stylesheet" type="text/css" href="<%= css_file %>" />
|
21
21
|
<% end %>
|
22
22
|
|
23
23
|
<% js_files.each do |js_file| %>
|
24
|
-
<script type="text/javascript" src="<%=
|
24
|
+
<script type="text/javascript" src="<%= js_file %>"></script>
|
25
25
|
<% end %>
|
data/views/index.erb
CHANGED
@@ -3,60 +3,6 @@
|
|
3
3
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
4
|
<head>
|
5
5
|
<%= erb :header %>
|
6
|
-
|
7
|
-
<script type="text/javascript">
|
8
|
-
// We want the audience members to see automatic tours. We can assume that they won't be
|
9
|
-
// using many server domains like the presenter might.
|
10
|
-
var autoTour = true;
|
11
|
-
|
12
|
-
$( document ).ready(function() {
|
13
|
-
if(presenter && !window.opener) {
|
14
|
-
alert('This is an audience view designed for interactivity. If you are placing this window on a projector, you should use the Display View instead.');
|
15
|
-
}
|
16
|
-
|
17
|
-
tours['showoff:activity'] = [
|
18
|
-
{
|
19
|
-
element: ".currentSlide .activityToggle",
|
20
|
-
intro: I18n.t('tour.activity.complete')
|
21
|
-
}
|
22
|
-
];
|
23
|
-
|
24
|
-
tours['showoff:form'] = [
|
25
|
-
{
|
26
|
-
element: ".currentSlide input.save",
|
27
|
-
intro: I18n.t('tour.form.save')
|
28
|
-
}
|
29
|
-
];
|
30
|
-
|
31
|
-
tours['showoff:menu'] = [
|
32
|
-
{
|
33
|
-
element: "#hamburger",
|
34
|
-
intro: I18n.t('tour.menu.start')
|
35
|
-
},
|
36
|
-
{
|
37
|
-
element: "#navToggle",
|
38
|
-
intro: I18n.t('tour.menu.navigation')
|
39
|
-
},
|
40
|
-
{
|
41
|
-
element: "#fileDownloads",
|
42
|
-
intro: I18n.t('tour.menu.download')
|
43
|
-
},
|
44
|
-
{
|
45
|
-
element: "#paceFaster",
|
46
|
-
intro: I18n.t('tour.menu.pace')
|
47
|
-
},
|
48
|
-
{
|
49
|
-
element: "#questionToggle",
|
50
|
-
intro: I18n.t('tour.menu.questions')
|
51
|
-
},
|
52
|
-
{
|
53
|
-
element: "#feedbackToggle",
|
54
|
-
intro: I18n.t('tour.menu.feedback')
|
55
|
-
}
|
56
|
-
].filter(function(item) { return (document.querySelector(item['element'])) });
|
57
|
-
// display tips for only the enabled features
|
58
|
-
});
|
59
|
-
</script>
|
60
6
|
</head>
|
61
7
|
|
62
8
|
<body>
|
@@ -66,7 +12,7 @@
|
|
66
12
|
<div id="sidebarWrapper">
|
67
13
|
<div id="navigationHover"></div>
|
68
14
|
<div id="feedbackSidebar" class="sideMenu">
|
69
|
-
<img id="disconnected" src="
|
15
|
+
<img id="disconnected" src="css/disconnected.png">
|
70
16
|
<h3><%= I18n.t('menu.title') %></h3>
|
71
17
|
<div id="navToggle" class="buttonWrapper"><i class=" fa fa-bookmark"></i> <%= I18n.t('menu.table_of_contents') %></div>
|
72
18
|
<div id="navigation" class="submenu"></div>
|
@@ -162,7 +108,7 @@
|
|
162
108
|
<span id="debugInfo" class="container"></span>
|
163
109
|
<span id="notesInfo" class="container"></span>
|
164
110
|
<span id="slideFilename" class="container"></span>
|
165
|
-
<img id="disconnected" src="
|
111
|
+
<img id="disconnected" src="css/disconnected.png" />
|
166
112
|
</footer>
|
167
113
|
|
168
114
|
<div id="slides" class="offscreen" <%= 'style="display:none;"' if @slides %>>
|
@@ -175,5 +121,59 @@
|
|
175
121
|
<%= @pause_msg %>
|
176
122
|
</div>
|
177
123
|
|
124
|
+
<script defer type="text/javascript">
|
125
|
+
// We want the audience members to see automatic tours. We can assume that they won't be
|
126
|
+
// using many server domains like the presenter might.
|
127
|
+
var autoTour = true;
|
128
|
+
|
129
|
+
$( document ).ready(function() {
|
130
|
+
if(presenter && !window.opener) {
|
131
|
+
alert('This is an audience view designed for interactivity. If you are placing this window on a projector, you should use the Display View instead.');
|
132
|
+
}
|
133
|
+
|
134
|
+
tours['showoff:activity'] = [
|
135
|
+
{
|
136
|
+
element: ".currentSlide .activityToggle",
|
137
|
+
intro: I18n.t('tour.activity.complete')
|
138
|
+
}
|
139
|
+
];
|
140
|
+
|
141
|
+
tours['showoff:form'] = [
|
142
|
+
{
|
143
|
+
element: ".currentSlide input.save",
|
144
|
+
intro: I18n.t('tour.form.save')
|
145
|
+
}
|
146
|
+
];
|
147
|
+
|
148
|
+
tours['showoff:menu'] = [
|
149
|
+
{
|
150
|
+
element: "#hamburger",
|
151
|
+
intro: I18n.t('tour.menu.start')
|
152
|
+
},
|
153
|
+
{
|
154
|
+
element: "#navToggle",
|
155
|
+
intro: I18n.t('tour.menu.navigation')
|
156
|
+
},
|
157
|
+
{
|
158
|
+
element: "#fileDownloads",
|
159
|
+
intro: I18n.t('tour.menu.download')
|
160
|
+
},
|
161
|
+
{
|
162
|
+
element: "#paceFaster",
|
163
|
+
intro: I18n.t('tour.menu.pace')
|
164
|
+
},
|
165
|
+
{
|
166
|
+
element: "#questionToggle",
|
167
|
+
intro: I18n.t('tour.menu.questions')
|
168
|
+
},
|
169
|
+
{
|
170
|
+
element: "#feedbackToggle",
|
171
|
+
intro: I18n.t('tour.menu.feedback')
|
172
|
+
}
|
173
|
+
].filter(function(item) { return (document.querySelector(item['element'])) });
|
174
|
+
// display tips for only the enabled features
|
175
|
+
});
|
176
|
+
</script>
|
177
|
+
|
178
178
|
</body>
|
179
179
|
</html>
|