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.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/Rakefile +24 -12
  3. data/bin/showoff +47 -24
  4. data/lib/keymap.rb +19 -5
  5. data/lib/showoff.rb +96 -44
  6. data/lib/showoff/compiler.rb +106 -0
  7. data/lib/showoff/compiler/downloads.rb +91 -0
  8. data/lib/showoff/compiler/fixups.rb +142 -0
  9. data/lib/showoff/compiler/form.rb +236 -0
  10. data/lib/showoff/compiler/glossary.rb +164 -0
  11. data/lib/showoff/compiler/i18n.rb +24 -0
  12. data/lib/showoff/compiler/notes.rb +73 -0
  13. data/lib/showoff/compiler/table_of_contents.rb +51 -0
  14. data/lib/showoff/compiler/variables.rb +71 -0
  15. data/lib/showoff/config.rb +218 -0
  16. data/lib/showoff/locale.rb +132 -0
  17. data/lib/showoff/logger.rb +15 -0
  18. data/lib/showoff/monkeypatches.rb +28 -0
  19. data/lib/showoff/presentation.rb +181 -0
  20. data/lib/showoff/presentation/section.rb +70 -0
  21. data/lib/showoff/presentation/slide.rb +113 -0
  22. data/lib/showoff/state.rb +89 -0
  23. data/lib/showoff/version.rb +2 -2
  24. data/lib/showoff_ng.rb +99 -0
  25. data/lib/showoff_utils.rb +27 -21
  26. data/public/css/font-awesome-5.6.1/css/all.min.css +5 -0
  27. data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.eot +0 -0
  28. data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.svg +1260 -0
  29. data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.ttf +0 -0
  30. data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.woff +0 -0
  31. data/public/css/font-awesome-5.6.1/webfonts/fa-brands-400.woff2 +0 -0
  32. data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.eot +0 -0
  33. data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.svg +471 -0
  34. data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.ttf +0 -0
  35. data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.woff +0 -0
  36. data/public/css/font-awesome-5.6.1/webfonts/fa-regular-400.woff2 +0 -0
  37. data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.eot +0 -0
  38. data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.svg +2760 -0
  39. data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.ttf +0 -0
  40. data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.woff +0 -0
  41. data/public/css/font-awesome-5.6.1/webfonts/fa-solid-900.woff2 +0 -0
  42. data/public/css/presenter.css +1 -0
  43. data/public/css/showoff.css +42 -10
  44. data/public/js/highlight.pack-9.15.10.js +22614 -0
  45. data/public/js/highlightjs-line-numbers.min.js +1 -0
  46. data/public/js/presenter.js +13 -11
  47. data/public/js/showoff.js +39 -31
  48. data/views/download.erb +2 -2
  49. data/views/header.erb +27 -26
  50. data/views/header_mini.erb +8 -8
  51. data/views/index.erb +56 -56
  52. data/views/onepage.erb +10 -16
  53. data/views/presenter.erb +124 -123
  54. data/views/slide.erb +29 -0
  55. data/views/stats.erb +1 -1
  56. metadata +113 -100
  57. data/locales/id.yml +0 -2
  58. data/public/css/font-awesome-4.4.0/css/font-awesome.min.css +0 -4
  59. data/public/css/font-awesome-4.4.0/fonts/FontAwesome.otf +0 -0
  60. data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.eot +0 -0
  61. data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.svg +0 -640
  62. data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.ttf +0 -0
  63. data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.woff +0 -0
  64. data/public/css/font-awesome-4.4.0/fonts/fontawesome-webfont.woff2 +0 -0
  65. 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);
@@ -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-dot-circle-o").click( function() {
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('/stats', e); });
47
- $('#downloadslink').click(function(e) { presenterPopupToggle('/download', e); });
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("/getpage", function(data) {
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("/stats_data", function( json ) {
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 = '/edit/' + slide + ".md";
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('/' + window.location.hash, 'toolbar');
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 = '/' + window.location.hash;
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="' + window.location.origin + '"/>');
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('/print/'+section);
512
- printWindow.window.print();
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
- /* ShowOff JS Logic */
1
+ /* Showoff JS Logic */
2
2
 
3
- var ShowOff = {};
3
+ var Showoff = {};
4
4
 
5
5
  var preso_started = false
6
6
  var slidenum = 0
7
- var presenterSlideNum = 0
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, prefix) {
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
- loadSlidesPrefix = prefix || '/';
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, prefix, reload, hard) {
181
- var url = loadSlidesPrefix + "slides";
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(prefix)
196
+ loadingCompleteCallback: initializePresentation()
196
197
  });
197
198
  }
198
199
  })
199
200
  } else {
200
201
  $("#slides img").batchImageLoad({
201
- loadingCompleteCallback: initializePresentation(prefix)
202
+ loadingCompleteCallback: initializePresentation()
202
203
  })
203
204
  }
204
205
  }
205
206
 
206
- function initializePresentation(prefix) {
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('/download');
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
- return (match ? match.split('=')[1] : null);
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
- ws = new WebSocket(protocol + location.host + '/control');
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, loadSlidesPrefix, true, hard);
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 print = function(text) {
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.print(text) } catch (e) {};
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) print(result);
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('/execute/'+lang, {path: path, index: index}, function(result) {
1916
- if (result != null) print(result);
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("/file/_preshow/preshow.json", false, function(data) {
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="/file/_preshow/' + n + '"/>');
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, loadSlidesPrefix);
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 == '/presenter' ? '#' : '/#';
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 = '/file/_files' %>
17
+ <% path = 'file/_files' %>
18
18
  <h4>Slide <%= key %> <small>(<%= title %>)</small></h4>
19
19
  <% else %>
20
- <% path = '/file/_files/share' %>
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="<%= @asset_path %>/css/highlight/<%= @highlightStyle %>.css" />
11
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/mermaid-6.0.0.css" />
12
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/font-awesome-4.4.0/css/font-awesome.min.css">
13
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/introjs-2.5.local.css">
14
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/jquery-ui-1.12.1.css">
15
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/showoff.css?v=<%= SHOWOFF_VERSION %>" />
16
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/zoomline-0.0.1.css">
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="<%= @asset_path %>/js/jquery-2.1.4.min.js"></script>
19
- <script type="text/javascript" src="<%= @asset_path %>/js/jquery-ui-1.12.1.js"></script>
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="<%= @asset_path %>/js/jquery.cycle.all-2.8.0.js"></script>
22
- <script type="text/javascript" src="<%= @asset_path %>/js/jquery.batchImageLoad-1.0.0.js"></script>
23
- <script type="text/javascript" src="<%= @asset_path %>/js/jquery.parsequery.min-6a20f83.js"></script>
24
- <script type="text/javascript" src="<%= @asset_path %>/js/jquery.doubletap-4ff02c5.js"></script>
25
- <script type="text/javascript" src="<%= @asset_path %>/js/highlight.pack-9.2.0.js"></script>
26
- <script type="text/javascript" src="<%= @asset_path %>/js/jTypeWriter-1.1.js"></script>
27
- <script type="text/javascript" src="<%= @asset_path %>/js/bigtext-0.1.8.js"></script>
28
- <script type="text/javascript" src="<%= @asset_path %>/js/zoomline-0.0.1.js"></script>
29
- <script type="text/javascript" src="<%= @asset_path %>/js/simpleStrings-0.0.1.js"></script>
30
- <script type="text/javascript" src="<%= @asset_path %>/js/mermaid-6.0.0-min.js"></script>
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="<%= @asset_path %>/js/intro-2.5.local.js"></script>
34
+ <script type="text/javascript" src="js/intro-2.5.local.js"></script>
34
35
 
35
- <script type="text/javascript" src="<%= @asset_path %>/js/coffee-script-1.1.3-pre.js"></script>
36
+ <script type="text/javascript" src="js/coffee-script-1.1.3-pre.js"></script>
36
37
 
37
- <script type="text/javascript" src="<%= @asset_path %>/js/annotations.js?v=<%= SHOWOFF_VERSION %>"></script>
38
- <script type="text/javascript" src="<%= @asset_path %>/js/showoff.js?v=<%= SHOWOFF_VERSION %>"></script>
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="<%= @asset_path %>/file/<%= css_file %>" type="text/css"/>
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="<%= @asset_path %>/file/<%= js_file %>"></script>
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"%>, '<%= @asset_path %>');
51
+ setupPreso(<%= @slides.nil? ? "true" : "false"%>);
51
52
  });
52
53
 
53
54
  editUrl = "<%= @edit %>";
@@ -7,19 +7,19 @@
7
7
  <link rel="icon" href="<%= @favicon %>"/>
8
8
  <% end %>
9
9
 
10
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/showoff.css?v=<%= SHOWOFF_VERSION %>" />
11
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/font-awesome-4.4.0/css/font-awesome.min.css">
12
- <link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/zoomline-0.0.1.css">
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="<%= @asset_path %>/js/jquery-2.1.4.min.js"></script>
15
- <script type="text/javascript" src="<%= @asset_path %>/js/zoomline-0.0.1.js"></script>
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="<%= @asset_path %>/js/showoff.js?v=<%= SHOWOFF_VERSION %>"></script>
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="<%= @asset_path %>/file/<%= css_file %>" type="text/css"/>
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="<%= @asset_path %>/file/<%= js_file %>"></script>
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="<%= @asset_path %>/css/disconnected.png">
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="<%= @asset_path %>/css/disconnected.png" />
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>