showoff 0.16.2 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/showoff.rb +27 -36
- data/lib/showoff/version.rb +1 -1
- data/lib/showoff_utils.rb +82 -52
- data/public/css/presenter.css +121 -159
- data/public/css/showoff.css +73 -13
- data/public/js/jquery-ui-1.12.1.js +2 -2
- data/public/js/presenter.js +80 -32
- data/public/js/showoff.js +8 -5
- data/views/header.erb +1 -0
- data/views/presenter.erb +130 -106
- metadata +14 -3
data/public/css/showoff.css
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
body
|
1
|
+
body,
|
2
|
+
.ui-widget,
|
3
|
+
.ui-widget input,
|
4
|
+
.ui-widget select,
|
5
|
+
.ui-widget textarea,
|
6
|
+
.ui-widget button {
|
2
7
|
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
|
3
8
|
color: #222;
|
4
9
|
}
|
@@ -520,20 +525,15 @@ img#disconnected {
|
|
520
525
|
display: none;
|
521
526
|
position: absolute;
|
522
527
|
overflow: hidden;
|
528
|
+
width: 640px;
|
529
|
+
height: 500px;
|
523
530
|
z-index: 99999;
|
524
|
-
|
525
|
-
height: 150px;
|
526
|
-
background-color: white;
|
527
|
-
border: 1px solid #4D4F53;
|
531
|
+
background-color: inherit;
|
528
532
|
margin: 0px;
|
529
|
-
|
530
|
-
|
533
|
+
box-shadow:0 0 25px rgba(0,0,0,0.35);
|
534
|
+
transform: scale(0.3);
|
535
|
+
transform-origin: 0 0;
|
531
536
|
}
|
532
|
-
#navigationHover .content {
|
533
|
-
width: 200%;
|
534
|
-
transform: scale(0.5);
|
535
|
-
transform-origin: 0 0;
|
536
|
-
}
|
537
537
|
|
538
538
|
#askedQuestions {
|
539
539
|
margin: 0;
|
@@ -600,7 +600,7 @@ pre.highlight code.language-console,
|
|
600
600
|
pre.highlight code.console {
|
601
601
|
background: #222;
|
602
602
|
background: url(titlebar/left.png) left top no-repeat, url(titlebar/right.png) right top no-repeat, url(titlebar/center.png) center top repeat-x #222;
|
603
|
-
color: #
|
603
|
+
color: #fff;
|
604
604
|
padding: 30px 0.5em 0.5em;
|
605
605
|
border: 1px solid #acacac;
|
606
606
|
border-radius: 6px;
|
@@ -797,6 +797,66 @@ form .element {
|
|
797
797
|
display: none;
|
798
798
|
}
|
799
799
|
|
800
|
+
/*****************
|
801
|
+
*** modals ***
|
802
|
+
*****************/
|
803
|
+
.ui-dialog.ui-widget-content {
|
804
|
+
border: none;
|
805
|
+
box-shadow:0 0 25px rgba(0,0,0,0.35);
|
806
|
+
}
|
807
|
+
|
808
|
+
.ui-dialog .links,
|
809
|
+
.ui-dialog .description,
|
810
|
+
.ui-dialog select {
|
811
|
+
font-size: .75em;
|
812
|
+
}
|
813
|
+
|
814
|
+
.ui-dialog .ui-dialog-buttonpane{
|
815
|
+
border: none;
|
816
|
+
padding: 0;
|
817
|
+
margin-top: 0;
|
818
|
+
}
|
819
|
+
|
820
|
+
.ui-dialog .ui-widget-header {
|
821
|
+
border: none;
|
822
|
+
background-color: transparent;
|
823
|
+
}
|
824
|
+
|
825
|
+
.ui-dialog .setting {
|
826
|
+
margin-bottom: 8px;
|
827
|
+
}
|
828
|
+
|
829
|
+
.ui-dialog .setting input {
|
830
|
+
margin-left: 1em;
|
831
|
+
}
|
832
|
+
|
833
|
+
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
|
834
|
+
float: none;
|
835
|
+
padding-left: 1em;
|
836
|
+
}
|
837
|
+
|
838
|
+
.ui-dialog .links {
|
839
|
+
text-align: right;
|
840
|
+
}
|
841
|
+
|
842
|
+
.ui-dialog p,
|
843
|
+
.ui-dialog select {
|
844
|
+
margin-left: 30px;
|
845
|
+
}
|
846
|
+
|
847
|
+
.ui-dialog p {
|
848
|
+
margin-top: .5em;
|
849
|
+
margin-bottom: .5em;
|
850
|
+
}
|
851
|
+
|
852
|
+
.no-close .ui-dialog-titlebar-close {
|
853
|
+
display: none;
|
854
|
+
}
|
855
|
+
|
856
|
+
/*****************
|
857
|
+
*** end modal ***
|
858
|
+
*****************/
|
859
|
+
|
800
860
|
/**********************************
|
801
861
|
*** supplemental materials ***
|
802
862
|
**********************************/
|
@@ -13466,7 +13466,7 @@ var widgetsProgressbar = $.widget( "ui.progressbar", {
|
|
13466
13466
|
|
13467
13467
|
this.valueDiv
|
13468
13468
|
.toggle( this.indeterminate || value > this.min )
|
13469
|
-
.width( percentage.toFixed(
|
13469
|
+
.width( percentage.toFixed( 1 ) + "%" );
|
13470
13470
|
|
13471
13471
|
this
|
13472
13472
|
._toggleClass( this.valueDiv, "ui-progressbar-complete", null,
|
@@ -18703,4 +18703,4 @@ var widgetsTooltip = $.ui.tooltip;
|
|
18703
18703
|
|
18704
18704
|
|
18705
18705
|
|
18706
|
-
}));
|
18706
|
+
}));
|
data/public/js/presenter.js
CHANGED
@@ -18,25 +18,57 @@ $(document).ready(function(){
|
|
18
18
|
// the presenter window doesn't need the reload on resize bit
|
19
19
|
$(window).unbind('resize');
|
20
20
|
|
21
|
-
$("#startTimer").click(function() { startTimer()
|
22
|
-
$("#pauseTimer").click(function() { toggleTimer()
|
23
|
-
$("#stopTimer").click(function()
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
$(
|
28
|
-
|
29
|
-
$(
|
30
|
-
|
21
|
+
$("#startTimer").click( function() { startTimer() });
|
22
|
+
$("#pauseTimer").click( function() { toggleTimer() });
|
23
|
+
$("#stopTimer").click( function() { stopTimer() });
|
24
|
+
$("#close-sidebar").click( function() { toggleSidebar() });
|
25
|
+
$("#edit").click( function() { editSlide() });
|
26
|
+
// browser security causes a click event to react differently than an actual user click. Even though they're the same damn thing.
|
27
|
+
// $("#report").click( function() { reportIssue() });
|
28
|
+
$("#slaveWindow").click( function() { toggleSlave() });
|
29
|
+
$("#printSlides").click( function() { printSlides() });
|
30
|
+
$("#settings").click( function() { $("#settings-modal").dialog("open"); });
|
31
|
+
$("#slideSource a").click( function() { openEditor() });
|
32
|
+
$("#notesToggle").click( function() { toggleNotes() });
|
33
|
+
$("#clearCookies").click( function() { clearCookies() });
|
34
|
+
$("#nextWinCancel").click( function() { chooseLayout('default') });
|
35
|
+
$("#openNextWindow").click(function() { openNext() });
|
36
|
+
|
37
|
+
$("#notes-wrapper .fa-minus").click( function() {
|
38
|
+
notesFontSize('decrease');
|
31
39
|
});
|
32
|
-
$(
|
33
|
-
|
40
|
+
$("#notes-wrapper .fa-dot-circle-o").click( function() {
|
41
|
+
notesFontSize('reset');
|
34
42
|
});
|
35
|
-
$(
|
36
|
-
|
43
|
+
$("#notes-wrapper .fa-plus").click( function() {
|
44
|
+
notesFontSize('increase');
|
37
45
|
});
|
46
|
+
|
47
|
+
$('#statslink').click(function(e) { presenterPopupToggle('/stats', e); });
|
48
|
+
$('#downloadslink').click(function(e) { presenterPopupToggle('/download', e); });
|
49
|
+
|
50
|
+
$('#layoutSelector').change(function(e) { chooseLayout(e.target.value); });
|
51
|
+
|
38
52
|
chooseLayout(null);
|
39
53
|
|
54
|
+
$("#settings-modal").dialog({
|
55
|
+
autoOpen: false,
|
56
|
+
dialogClass: "no-close",
|
57
|
+
draggable: false,
|
58
|
+
height: "auto",
|
59
|
+
modal: true,
|
60
|
+
resizable: false,
|
61
|
+
width: 400,
|
62
|
+
buttons: {
|
63
|
+
Close: function() {
|
64
|
+
$( this ).dialog( "close" );
|
65
|
+
}
|
66
|
+
}
|
67
|
+
});
|
68
|
+
|
69
|
+
$("#annotationsToggle").checkboxradio({
|
70
|
+
icon: false
|
71
|
+
});
|
40
72
|
|
41
73
|
// Bind events for mobile viewing
|
42
74
|
if( mobile() ) {
|
@@ -68,9 +100,6 @@ $(document).ready(function(){
|
|
68
100
|
document.cookie = "notes="+$('#notes').height();
|
69
101
|
});
|
70
102
|
|
71
|
-
// Turn the progress display into an actual progressbar
|
72
|
-
$('#progress').progressbar({max:100})
|
73
|
-
|
74
103
|
// restore the UI settings
|
75
104
|
var ui = document.cookieHash['ui'];
|
76
105
|
$('#notes').height(document.cookieHash['notes']);
|
@@ -146,7 +175,6 @@ $(document).ready(function(){
|
|
146
175
|
|
147
176
|
}, 30000);
|
148
177
|
|
149
|
-
|
150
178
|
// Tell the showoff server that we're a presenter
|
151
179
|
register();
|
152
180
|
|
@@ -165,6 +193,10 @@ $(document).ready(function(){
|
|
165
193
|
}
|
166
194
|
};
|
167
195
|
|
196
|
+
/* zoom slide to match preview size, then set up resize handler. */
|
197
|
+
zoom(true);
|
198
|
+
$(window).resize(function() { zoom(true); });
|
199
|
+
|
168
200
|
});
|
169
201
|
|
170
202
|
function presenterPopupToggle(page, event) {
|
@@ -356,6 +388,23 @@ function toggleNotes() {
|
|
356
388
|
zoom(true);
|
357
389
|
}
|
358
390
|
|
391
|
+
function notesFontSize(action) {
|
392
|
+
var current = parseInt($('#notes').css('font-size'));
|
393
|
+
switch (action) {
|
394
|
+
case 'increase':
|
395
|
+
$('#notes').css('font-size', current * 1.1);
|
396
|
+
break;
|
397
|
+
|
398
|
+
case 'decrease':
|
399
|
+
$('#notes').css('font-size', current * 0.9);
|
400
|
+
break;
|
401
|
+
|
402
|
+
case 'reset':
|
403
|
+
$('#notes').css('font-size', '');
|
404
|
+
break;
|
405
|
+
}
|
406
|
+
}
|
407
|
+
|
359
408
|
function blankStyledWindow(title, dimensions, classes, resizable) {
|
360
409
|
// yes, the explicit address is needed. Because Chrome.
|
361
410
|
var opts = "status=0,toolbar=0,location=0,menubar=0,"+dimensions;
|
@@ -579,21 +628,20 @@ function postSlide() {
|
|
579
628
|
$('#notes').html(notes);
|
580
629
|
|
581
630
|
var sections = getCurrentSections();
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
631
|
+
|
632
|
+
var ul = $('.section-selector').empty();
|
633
|
+
if(sections.size() > 0) {
|
634
|
+
sections.each( function (idx, value) {
|
635
|
+
var li = $('<li>').prependTo(ul);
|
586
636
|
var a = $('<a/>')
|
587
637
|
.text(value)
|
588
638
|
.attr('href','javascript:setCurrentSection("'+value+'");')
|
589
639
|
.appendTo(li);
|
590
640
|
|
591
|
-
if(section
|
641
|
+
if(section === value) {
|
592
642
|
li.addClass('selected');
|
593
643
|
}
|
594
644
|
});
|
595
|
-
|
596
|
-
$('#notes').prepend(ul);
|
597
645
|
}
|
598
646
|
|
599
647
|
var nextIndex = slidenum + 1;
|
@@ -613,7 +661,8 @@ function postSlide() {
|
|
613
661
|
|
614
662
|
var fileName = currentSlide.children('div').first().attr('ref');
|
615
663
|
$('#slideFile').text(fileName);
|
616
|
-
$('#progress').progressbar(
|
664
|
+
$('#progress').progressbar({ max: slideTotal })
|
665
|
+
.progressbar('value', slidenum);
|
617
666
|
|
618
667
|
$("#notes div.form.wrapper").each(function(e) {
|
619
668
|
renderFormInterval = renderFormWatcher($(this));
|
@@ -823,8 +872,7 @@ function toggleUpdater()
|
|
823
872
|
/********************
|
824
873
|
Annotations
|
825
874
|
********************/
|
826
|
-
function toggleAnnotations()
|
827
|
-
{
|
875
|
+
function toggleAnnotations() {
|
828
876
|
mode.annotations = $("#annotationsToggle").prop("checked");
|
829
877
|
|
830
878
|
if(mode.annotations) {
|
@@ -842,7 +890,7 @@ function toggleAnnotations()
|
|
842
890
|
}
|
843
891
|
|
844
892
|
function openNext() {
|
845
|
-
$("#nextWindowConfirmation").
|
893
|
+
$("#nextWindowConfirmation").hide();
|
846
894
|
try {
|
847
895
|
if(windowIsClosed(nextWindow)){
|
848
896
|
nextWindow = blankStyledWindow("Next Slide Preview", 'width=320,height=300', 'next');
|
@@ -857,7 +905,7 @@ function openNext() {
|
|
857
905
|
|
858
906
|
postSlide();
|
859
907
|
}, 500);
|
860
|
-
|
908
|
+
$("#settings-modal").dialog("close");
|
861
909
|
}
|
862
910
|
}
|
863
911
|
catch(e) {
|
@@ -876,7 +924,7 @@ function chooseLayout(layout)
|
|
876
924
|
|
877
925
|
// in case we're being called externally, make the UI match
|
878
926
|
$('#layoutSelector').val(layout);
|
879
|
-
$("#nextWindowConfirmation").
|
927
|
+
$("#nextWindowConfirmation").hide();
|
880
928
|
console.log("Setting layout to " + layout);
|
881
929
|
|
882
930
|
// change focus so we don't inadvertently change layout again by changing slides
|
@@ -930,7 +978,7 @@ function chooseLayout(layout)
|
|
930
978
|
break;
|
931
979
|
|
932
980
|
case 'floating':
|
933
|
-
$("#nextWindowConfirmation").
|
981
|
+
$("#nextWindowConfirmation").show();
|
934
982
|
break;
|
935
983
|
|
936
984
|
default:
|
data/public/js/showoff.js
CHANGED
@@ -362,11 +362,7 @@ function setupMenu() {
|
|
362
362
|
sectionUL = '';
|
363
363
|
|
364
364
|
slides.each(function(s, slide){
|
365
|
-
var slidePath = $(slide)
|
366
|
-
.find(".content")
|
367
|
-
.attr('ref')
|
368
|
-
.split('/')
|
369
|
-
.shift();
|
365
|
+
var slidePath = $(slide).attr('data-section');
|
370
366
|
var headers = $(slide).children("h1, h2");
|
371
367
|
var slideTitle = '';
|
372
368
|
var content;
|
@@ -438,6 +434,13 @@ function setupMenu() {
|
|
438
434
|
$("#navigation").append(nav);
|
439
435
|
}
|
440
436
|
|
437
|
+
// at some point this should get more sophisticated. Our needs are pretty minimal so far.
|
438
|
+
function clearCookies() {
|
439
|
+
document.cookie = "sidebar=;expires=Thu, 21 Sep 1979 00:00:01 UTC;";
|
440
|
+
document.cookie = "layout=;expires=Thu, 21 Sep 1979 00:00:01 UTC;";
|
441
|
+
document.cookie = "notes=;expires=Thu, 21 Sep 1979 00:00:01 UTC;";
|
442
|
+
}
|
443
|
+
|
441
444
|
function checkSlideParameter() {
|
442
445
|
if (slideParam = currentSlideFromParams()) {
|
443
446
|
slidenum = slideParam;
|
data/views/header.erb
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/highlight/<%= @highlightStyle %>.css" />
|
11
11
|
<link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/mermaid-6.0.0.css" />
|
12
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/jquery-ui-1.12.1.css">
|
13
14
|
<link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/showoff.css?v=<%= SHOWOFF_VERSION %>" />
|
14
15
|
<link rel="stylesheet" type="text/css" href="<%= @asset_path %>/css/zoomline-0.0.1.css">
|
15
16
|
|
data/views/presenter.erb
CHANGED
@@ -5,7 +5,6 @@
|
|
5
5
|
<%= erb :header %>
|
6
6
|
<link rel="stylesheet" href="<%= @asset_path %>/css/presenter.css?v=<%= SHOWOFF_VERSION %>" type="text/css"/>
|
7
7
|
<link href="<%= @asset_path %>/css/TimeCircles-89ac5ae.css" rel="stylesheet">
|
8
|
-
<link href="<%= @asset_path %>/css/jquery-ui-1.12.1.css" rel="stylesheet">
|
9
8
|
|
10
9
|
<script type="text/javascript" src="<%= @asset_path %>/js/TimeCircles-89ac5ae.js"></script>
|
11
10
|
<script type="text/javascript" src="<%= @asset_path %>/js/presenter.js?v=<%= SHOWOFF_VERSION %>"></script>
|
@@ -22,136 +21,161 @@
|
|
22
21
|
|
23
22
|
<div id="pagewrapper">
|
24
23
|
<div id="topbar">
|
25
|
-
<a id="close-sidebar" class="fa fa-bars" aria-hidden="true" href="
|
26
|
-
|
27
|
-
<label>Source:</label>
|
28
|
-
<% if @request.host == 'localhost' %>
|
29
|
-
<a href="javascript:openEditor();"><span id="slideFile"></span></a>
|
30
|
-
<% else %>
|
31
|
-
<span id="slideFile"></span>
|
32
|
-
<% end %>
|
33
|
-
</span>
|
24
|
+
<a id="close-sidebar" class="fa fa-bars fa-2x" aria-hidden="true" href="#"></a>
|
25
|
+
|
34
26
|
<span id="links">
|
35
27
|
<span class="desktop">
|
28
|
+
<label for="annotationsToggle" class="no-mobile">Annotations <i class="fa fa-pencil"></i></label>
|
29
|
+
<input type="checkbox" id="annotationsToggle" autocomplete="off" class="no-mobile" />
|
30
|
+
|
36
31
|
<% if @edit %>
|
37
|
-
<a id="edit" href="
|
32
|
+
<a id="edit" href="#" title="Edit current slide in new window.">Edit Slide <i class="fa fa-pencil-square-o"></i></a>
|
38
33
|
<% end %>
|
39
34
|
<% if @issues %>
|
40
35
|
<a id="report" href="javascript:reportIssue();" title="Report an issue with the current slide.">Report Issue With Slide <i class="fa fa-list-alt"></i></a>
|
41
36
|
<% end %>
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<
|
50
|
-
|
51
|
-
|
52
|
-
</span>
|
37
|
+
|
38
|
+
<a id="statslink" href="">Viewing Statistics <i class="fa fa-chevron-down"></i></a>
|
39
|
+
|
40
|
+
<a id="downloadslink" href="">Downloads <i class="fa fa-chevron-down"></i></a>
|
41
|
+
|
42
|
+
<a id="slaveWindow" href="#" title="Enable the display window.">Display Window <i class="fa fa-clone"></i></a>
|
43
|
+
|
44
|
+
<a id="printSlides" href="#" title="Print slides using a new window.">Print Slides <i class="fa fa-print"></i></a>
|
45
|
+
|
46
|
+
<a id="settings" href="#">Settings <i class="fa fa-cog"></i></a>
|
53
47
|
</span>
|
54
|
-
|
55
|
-
|
56
|
-
<option value="thumbs" title="Display thumbnail previews of the next and previous slides.">Thumbnails</option>
|
57
|
-
<option value="floating" title="Open the next slide as a floating window.">Floating</option>
|
58
|
-
<option value="beside" title="Display the next slide as a large preview in the main presenter view.">Side-by-Side</option>
|
59
|
-
</select>
|
48
|
+
|
49
|
+
|
60
50
|
<span class="mobile">
|
61
51
|
<a id="update" href="">Update</a>
|
62
52
|
</span>
|
63
53
|
</span>
|
64
54
|
</div>
|
65
|
-
<div id="nextWindowConfirmation">
|
66
|
-
<p>Browser security requires confirmation before opening a new window.</p>
|
67
|
-
<p><a href="javascript:chooseLayout('default');">cancel</a><input type="button" onClick="javascript:openNext();" value="Open Window" /></p>
|
68
|
-
</div>
|
69
|
-
|
70
|
-
<div id="main">
|
71
|
-
<div id="sidebar">
|
72
|
-
<div id="timerSection">
|
73
|
-
<input type="button" id="pauseTimer" value="Pause" />
|
74
|
-
<input type="button" id="stopTimer" value="Cancel" />
|
75
|
-
<span id="timerLabel">Timer:</span>
|
76
|
-
<span id="minStart">
|
77
|
-
<input type="text" size="8" id="timerMinutes"/> min
|
78
|
-
<input type="button" id="startTimer" value="Start" />
|
79
|
-
</span>
|
80
|
-
<div id="timerDisplay"></div>
|
81
|
-
</div>
|
82
|
-
<div id="feedbackPace">
|
83
|
-
<span id="paceSlow">Speed Up!</span>
|
84
|
-
<span id="paceFast">Slow Down!</span>
|
85
|
-
<img id="paceMarker" src="<%= @asset_path %>/css/paceMarker.png" />
|
86
|
-
</div>
|
87
|
-
<div id="navigation" class="submenu"></div>
|
88
|
-
<div id="navigationHover"></div>
|
89
|
-
<div id="questions">
|
90
|
-
<h3>Audience Questions</h3>
|
91
|
-
<ol id="unanswered"></ol>
|
92
|
-
<ol id="answered"></ol>
|
93
|
-
</div>
|
94
|
-
</div>
|
95
55
|
|
96
|
-
<div id="
|
97
|
-
<div id="
|
98
|
-
<div id="
|
99
|
-
<
|
100
|
-
<
|
101
|
-
<
|
102
|
-
<
|
56
|
+
<div id="main">
|
57
|
+
<div id="sidebar">
|
58
|
+
<div id="timerSection">
|
59
|
+
<input type="button" id="pauseTimer" value="Pause" />
|
60
|
+
<input type="button" id="stopTimer" value="Cancel" />
|
61
|
+
<span id="timerLabel">Timer:</span>
|
62
|
+
<span id="minStart">
|
63
|
+
<input type="text" size="8" id="timerMinutes"/> min
|
64
|
+
<input type="button" id="startTimer" value="Start" />
|
65
|
+
</span>
|
66
|
+
<div id="timerDisplay"></div>
|
103
67
|
</div>
|
104
|
-
<div id="
|
105
|
-
<
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
<i class="fa fa-square-o lines color4" aria-hidden="true"></i>
|
116
|
-
<label>Shapes</label>
|
117
|
-
<i class="fa fa-square shapes color1" aria-hidden="true"></i>
|
118
|
-
<i class="fa fa-square shapes color2" aria-hidden="true"></i>
|
119
|
-
<i class="fa fa-square shapes color3 active" aria-hidden="true"></i>
|
120
|
-
<i class="fa fa-square shapes color4" aria-hidden="true"></i>
|
68
|
+
<div id="feedbackPace">
|
69
|
+
<span id="paceSlow">Speed Up!</span>
|
70
|
+
<span id="paceFast">Slow Down!</span>
|
71
|
+
<img id="paceMarker" src="<%= @asset_path %>/css/paceMarker.png" />
|
72
|
+
</div>
|
73
|
+
<div id="navigation" class="submenu"></div>
|
74
|
+
<div id="navigationHover"></div>
|
75
|
+
<div id="questions">
|
76
|
+
<h3>Audience Questions</h3>
|
77
|
+
<ol id="unanswered"></ol>
|
78
|
+
<ol id="answered"></ol>
|
121
79
|
</div>
|
122
80
|
</div>
|
123
81
|
|
124
|
-
<div id="
|
125
|
-
<div id="
|
126
|
-
|
82
|
+
<div id="presenter">
|
83
|
+
<div id="frame">
|
84
|
+
<div id="preview">
|
85
|
+
<img id="disconnected" src="<%= @asset_path %>/css/disconnected-large.png" />
|
86
|
+
<div id="prevSlide" class="thumb"><div class="container"></div><h3 class="label">Previous</h3></div>
|
87
|
+
<div id="nextSlide" class="thumb"><div class="container"></div><h3 class="label">Next</h3></div>
|
88
|
+
<div id="preso">loading presentation...</div>
|
89
|
+
</div>
|
90
|
+
<div id="annotationToolbar">
|
91
|
+
<label>Tools</label>
|
92
|
+
<i class="fa fa-pencil tool default active" data-action="draw" aria-hidden="true"></i>
|
93
|
+
<i class="fa fa-arrow-right tool" data-action="rightArrow" aria-hidden="true"></i>
|
94
|
+
<i class="fa fa-arrow-left tool" data-action="leftArrow" aria-hidden="true"></i>
|
95
|
+
<i class="fa fa-bullseye tool" data-action="highlight" aria-hidden="true"></i>
|
96
|
+
<i class="fa fa-eraser tool" data-action="erase" aria-hidden="true"></i>
|
97
|
+
<label>Lines</label>
|
98
|
+
<i class="fa fa-square-o lines color1 active" aria-hidden="true"></i>
|
99
|
+
<i class="fa fa-square-o lines color2" aria-hidden="true"></i>
|
100
|
+
<i class="fa fa-square-o lines color3" aria-hidden="true"></i>
|
101
|
+
<i class="fa fa-square-o lines color4" aria-hidden="true"></i>
|
102
|
+
<label>Shapes</label>
|
103
|
+
<i class="fa fa-square shapes color1" aria-hidden="true"></i>
|
104
|
+
<i class="fa fa-square shapes color2" aria-hidden="true"></i>
|
105
|
+
<i class="fa fa-square shapes color3 active" aria-hidden="true"></i>
|
106
|
+
<i class="fa fa-square shapes color4" aria-hidden="true"></i>
|
107
|
+
</div>
|
108
|
+
</div>
|
127
109
|
|
128
|
-
<div
|
129
|
-
<span
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
110
|
+
<div id="statusbar">
|
111
|
+
<span class="label">Slide: <span id="slideInfo"></span></span>
|
112
|
+
<span id="debugInfo"></span>
|
113
|
+
<span id="slideSource">
|
114
|
+
<% if @request.host == 'localhost' %>
|
115
|
+
<a href="#"><span id="slideFile"></span></a>
|
116
|
+
<% else %>
|
117
|
+
<span id="slideFile"></span>
|
118
|
+
<% end %>
|
134
119
|
</span>
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
<i class="
|
120
|
+
</div>
|
121
|
+
<div id="progress" class="no-mobile"></div>
|
122
|
+
|
123
|
+
<div id="buttonNav">
|
124
|
+
<div id="buttonPrev"><i class="fa fa-chevron-left fa-lg"></i> Previous</div><div id="buttonNext">Next <i class="fa fa-chevron-right fa-lg"></i></div>
|
140
125
|
</div>
|
141
126
|
|
127
|
+
<div id="notes-wrapper">
|
128
|
+
<ul class="section-selector"></ul>
|
129
|
+
<div class="controls">
|
130
|
+
<a class="no-mobile fa fa-minus small" aria-hidden="true" href="#"></a>
|
131
|
+
<a class="no-mobile fa fa-dot-circle-o small" aria-hidden="true" href="#"></a>
|
132
|
+
<a class="no-mobile fa fa-plus small" aria-hidden="true" href="#"></a>
|
133
|
+
<span class="spacer"> </span>
|
134
|
+
<a id="notesToggle" class="no-mobile fa fa-external-link-square" aria-hidden="true" href="#"></a>
|
135
|
+
<span><i class="no-mobile fa fa-bars notes-grippy ui-resizable-handle ui-resizable-n" aria-hidden="true"></i></span>
|
136
|
+
</div>
|
137
|
+
<div id="notes"></div>
|
138
|
+
</div>
|
139
|
+
</div><!-- end presenter -->
|
140
|
+
</div><!-- end main -->
|
141
|
+
|
142
|
+
<div id="settings-modal" title="Settings">
|
143
|
+
<div id="enableFollower" class="setting" title="Send slide change notifications.">
|
144
|
+
<label for="followerToggle">Update Follower</label><input type="checkbox" id="followerToggle" autocomplete="off" checked />
|
145
|
+
<p class="description">
|
146
|
+
When this is enabled, the Showoff server will track your slide changes. Disable it to observe the presentation without inadvertently causing slide changes.
|
147
|
+
</p>
|
142
148
|
</div>
|
143
|
-
<div id="
|
144
|
-
<
|
149
|
+
<div id="enableRemote" class="setting" title="Enables tracking of other presenters.">
|
150
|
+
<label for="remoteToggle">Enable Remote</label><input type="checkbox" id="remoteToggle" autocomplete="off" checked />
|
151
|
+
<p class="description">
|
152
|
+
When this is enabled, you can load the presenter in another browser (typically on your mobile phone) to control the presentation.
|
153
|
+
</p>
|
154
|
+
</div>
|
155
|
+
<div class="setting">
|
156
|
+
<label>Layout</label><br>
|
157
|
+
<select id="layoutSelector" autocomplete="off">
|
158
|
+
<option value="default" selected>Default Layout</option>
|
159
|
+
<option value="thumbs" title="Display thumbnail previews of the next and previous slides.">Thumbnails</option>
|
160
|
+
<option value="floating" title="Open the next slide as a floating window.">Floating</option>
|
161
|
+
<option value="beside" title="Display the next slide as a large preview in the main presenter view.">Side-by-Side</option>
|
162
|
+
</select>
|
163
|
+
<div id="nextWindowConfirmation">
|
164
|
+
<p class="description">Browser security requires confirmation before opening a new window.</p>
|
165
|
+
<p>
|
166
|
+
<input id="openNextWindow" type="button" onClick="#" value="Open Window" />
|
167
|
+
<a id="nextWinCancel" href="#">cancel</a>
|
168
|
+
</p>
|
169
|
+
</div>
|
170
|
+
</div>
|
171
|
+
<div class="links">
|
172
|
+
<a id="clearCookies" href="#" title="Reset Showoff UI settings to default values.">Clear Showoff settings.</a>
|
145
173
|
</div>
|
146
|
-
|
147
|
-
<div id="notes"></div>
|
148
174
|
</div>
|
149
175
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
</div>
|
155
|
-
|
176
|
+
<div id="slides" class="offscreen" <%= 'style="display:none;"' if @slides %>>
|
177
|
+
<%= @slides %>
|
178
|
+
</div>
|
179
|
+
</div><!-- end pagewrapper -->
|
156
180
|
</body>
|
157
181
|
</html>
|