showoff 0.17.0 → 0.17.1
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 +5 -1
- data/lib/showoff/version.rb +1 -1
- data/lib/showoff_utils.rb +10 -9
- data/public/css/presenter.css +9 -14
- data/public/css/showoff.css +54 -59
- data/public/js/presenter.js +0 -4
- data/public/js/showoff.js +27 -3
- data/views/header.erb +1 -0
- data/views/help.erb +79 -78
- data/views/presenter.erb +0 -1
- metadata +2 -3
- data/public/css/menu.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b65ae2cdb55992dc61f317faf924fd93cdefd594
|
4
|
+
data.tar.gz: f4331abee28540e37e8362c52ffe87c705405f07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f74cea3ee9a73a8b9240bcd7d11d909766ce6ecb38ec8fc57cea3ff1a57f803b5475b2afa0121685230154ae51c64751cb3d80972eddd71fd2d901ba58640efc
|
7
|
+
data.tar.gz: 938c693644cd33d34b9945131cc6c607d32fa6f162f03f4ce4a166e9eb37532fcf0d6074b9da0e254124ed5ee1a9351d3697312fd667118077eab74a652ad0be
|
data/lib/showoff.rb
CHANGED
@@ -521,6 +521,8 @@ class ShowOff < Sinatra::Application
|
|
521
521
|
|
522
522
|
# Process links
|
523
523
|
doc.css('a').each do |link|
|
524
|
+
next unless link.include? 'href'
|
525
|
+
next unless link.include? 'class'
|
524
526
|
next if link['href'].start_with? '#'
|
525
527
|
next if link['class'].split.include? 'processed' rescue nil
|
526
528
|
|
@@ -1016,7 +1018,7 @@ class ShowOff < Sinatra::Application
|
|
1016
1018
|
data << process_markdown(path, section, File.read(filename), opts)
|
1017
1019
|
rescue Errno::ENOENT => e
|
1018
1020
|
@logger.error e.message
|
1019
|
-
data << process_markdown(path, section, "!SLIDE\n# Missing File!\n## #{
|
1021
|
+
data << process_markdown(path, section, "!SLIDE\n# Missing File!\n## #{filename}", opts)
|
1020
1022
|
end
|
1021
1023
|
end
|
1022
1024
|
|
@@ -1766,6 +1768,8 @@ class ShowOff < Sinatra::Application
|
|
1766
1768
|
end
|
1767
1769
|
rescue NoMethodError => e
|
1768
1770
|
@logger.warn "Invalid object #{what} requested."
|
1771
|
+
@logger.warn e.message
|
1772
|
+
@logger.debug e.backtrace.join("\n")
|
1769
1773
|
raise Sinatra::NotFound
|
1770
1774
|
end
|
1771
1775
|
end
|
data/lib/showoff/version.rb
CHANGED
data/lib/showoff_utils.rb
CHANGED
@@ -441,17 +441,12 @@ class ShowOffUtils
|
|
441
441
|
# each entry in sections can be:
|
442
442
|
# - "filename.md"
|
443
443
|
# - { "section": "filename.md" }
|
444
|
+
# - { "section": "directory" }
|
444
445
|
# - { "section": [ "array.md, "of.md, "files.md"] }
|
445
446
|
# - { "include": "sections.json" }
|
446
447
|
sections = {}
|
447
448
|
data.map do |entry|
|
448
|
-
if entry.is_a? String
|
449
|
-
if File.directory? entry
|
450
|
-
next Dir.glob("#{entry}/**/*.md").sort
|
451
|
-
else
|
452
|
-
next entry
|
453
|
-
end
|
454
|
-
end
|
449
|
+
next entry if entry.is_a? String
|
455
450
|
next nil unless entry.is_a? Hash
|
456
451
|
next entry['section'] if entry.include? 'section'
|
457
452
|
|
@@ -476,9 +471,15 @@ class ShowOffUtils
|
|
476
471
|
# We do this in two passes simply because most of it was already done
|
477
472
|
# and I don't want to waste time on legacy functionality.
|
478
473
|
path = File.dirname(filename)
|
479
|
-
|
480
474
|
sections[path] ||= []
|
481
|
-
|
475
|
+
|
476
|
+
if File.directory? filename
|
477
|
+
Dir.glob("#{filename}/**/*.md").sort.each do |slidefile|
|
478
|
+
sections[path] << slidefile
|
479
|
+
end
|
480
|
+
else
|
481
|
+
sections[path] << filename
|
482
|
+
end
|
482
483
|
end
|
483
484
|
sections
|
484
485
|
end
|
data/public/css/presenter.css
CHANGED
@@ -617,21 +617,22 @@ a.controls {
|
|
617
617
|
}
|
618
618
|
|
619
619
|
/* hide some elements when the screen is too small */
|
620
|
-
@media screen and (max-width:
|
621
|
-
{
|
622
|
-
#topbar .fa {
|
620
|
+
@media screen and (max-width: 1024px) {
|
621
|
+
#links .fa {
|
623
622
|
display: none;
|
624
623
|
}
|
625
|
-
.desktop a {
|
626
|
-
margin-right: 0.25em;
|
627
|
-
}
|
628
624
|
}
|
629
625
|
|
626
|
+
@media screen and (max-width: 880px) {
|
627
|
+
#topbar #printSlides,
|
628
|
+
#topbar #statslink {
|
629
|
+
display: none;
|
630
|
+
}
|
631
|
+
}
|
630
632
|
|
631
633
|
/* iPhone */
|
632
634
|
/* Portrait */
|
633
|
-
@media screen and (max-width:
|
634
|
-
{
|
635
|
+
@media screen and (max-width: 640px) {
|
635
636
|
.no-mobile {
|
636
637
|
display: none;
|
637
638
|
}
|
@@ -686,15 +687,9 @@ a.controls {
|
|
686
687
|
display: inline;
|
687
688
|
}
|
688
689
|
|
689
|
-
#topbar {
|
690
|
-
background-image: url(menu.png);
|
691
|
-
background-position: left center;
|
692
|
-
background-repeat: no-repeat;
|
693
|
-
}
|
694
690
|
#sidebar {
|
695
691
|
display: block;
|
696
692
|
position: absolute;
|
697
|
-
top: 25px;
|
698
693
|
z-index: 99999;
|
699
694
|
height: 100%;
|
700
695
|
overflow: scroll;
|
data/public/css/showoff.css
CHANGED
@@ -135,6 +135,11 @@ pre code {
|
|
135
135
|
}
|
136
136
|
}
|
137
137
|
|
138
|
+
.ui-button:active {
|
139
|
+
border-color: #263238;
|
140
|
+
background-color: #263238;
|
141
|
+
}
|
142
|
+
|
138
143
|
/* plain (non-bullet) text */
|
139
144
|
.content > p,
|
140
145
|
.content > form > p {
|
@@ -284,64 +289,6 @@ img#disconnected {
|
|
284
289
|
display: none;
|
285
290
|
}
|
286
291
|
|
287
|
-
#help {
|
288
|
-
display: none;
|
289
|
-
position:absolute;
|
290
|
-
overflow: auto;
|
291
|
-
top: 5%;
|
292
|
-
left: 25%;
|
293
|
-
width: 50%;
|
294
|
-
max-height: 90%;
|
295
|
-
z-index: 2147483647;
|
296
|
-
padding: 0 16px 16px 16px;
|
297
|
-
border-radius: 4px;
|
298
|
-
-webkit-box-shadow:0 0 25px rgba(0,0,0,0.35);
|
299
|
-
-moz-box-shadow:0 0 25px rgba(0,0,0,0.35);
|
300
|
-
box-shadow:0 0 25px rgba(0,0,0,0.35);
|
301
|
-
background-color: #fff;
|
302
|
-
font-size: 0.75em;
|
303
|
-
}
|
304
|
-
|
305
|
-
#help div {
|
306
|
-
padding: 6px 0;
|
307
|
-
}
|
308
|
-
|
309
|
-
#help h1 {
|
310
|
-
border-bottom: 2px solid #ccc;
|
311
|
-
}
|
312
|
-
|
313
|
-
#help div + div {
|
314
|
-
border-top: 1px solid #eee;
|
315
|
-
}
|
316
|
-
|
317
|
-
#help .description,
|
318
|
-
#help .action,
|
319
|
-
#help .hotkeys {
|
320
|
-
display: inline-block;
|
321
|
-
vertical-align: middle;
|
322
|
-
}
|
323
|
-
|
324
|
-
#help .description {
|
325
|
-
width: 30%;
|
326
|
-
}
|
327
|
-
|
328
|
-
#help .action {
|
329
|
-
width: 15%;
|
330
|
-
color: gray;
|
331
|
-
}
|
332
|
-
|
333
|
-
#help .hotkeys {
|
334
|
-
width: 25%;
|
335
|
-
}
|
336
|
-
|
337
|
-
#help .hotkeys .key {
|
338
|
-
border: 1px solid #ccc;
|
339
|
-
background-color: #dfdfdf;
|
340
|
-
border-radius: 0.25em;
|
341
|
-
padding: 0.15em 0.5em;
|
342
|
-
margin: 0.25em;
|
343
|
-
}
|
344
|
-
|
345
292
|
/**********************************
|
346
293
|
*** Table styling ***
|
347
294
|
**********************************/
|
@@ -800,13 +747,21 @@ form .element {
|
|
800
747
|
/*****************
|
801
748
|
*** modals ***
|
802
749
|
*****************/
|
750
|
+
#help-modal {
|
751
|
+
font-size: .9em;
|
752
|
+
}
|
753
|
+
|
754
|
+
#help-modal .ui-dialog .ui-dialog-title {
|
755
|
+
font-size: 1em;
|
756
|
+
}
|
757
|
+
|
803
758
|
.ui-dialog.ui-widget-content {
|
804
759
|
border: none;
|
805
760
|
box-shadow:0 0 25px rgba(0,0,0,0.35);
|
806
761
|
}
|
807
762
|
|
808
763
|
.ui-dialog .links,
|
809
|
-
|
764
|
+
#settings-modal .description,
|
810
765
|
.ui-dialog select {
|
811
766
|
font-size: .75em;
|
812
767
|
}
|
@@ -835,6 +790,10 @@ form .element {
|
|
835
790
|
padding-left: 1em;
|
836
791
|
}
|
837
792
|
|
793
|
+
.ui-dialog .ui-button {
|
794
|
+
font-size: .8em;
|
795
|
+
}
|
796
|
+
|
838
797
|
.ui-dialog .links {
|
839
798
|
text-align: right;
|
840
799
|
}
|
@@ -853,6 +812,42 @@ form .element {
|
|
853
812
|
display: none;
|
854
813
|
}
|
855
814
|
|
815
|
+
#help div {
|
816
|
+
padding: 6px 0;
|
817
|
+
}
|
818
|
+
|
819
|
+
#help div + div {
|
820
|
+
border-top: 1px solid #eee;
|
821
|
+
}
|
822
|
+
|
823
|
+
#help .description,
|
824
|
+
#help .action,
|
825
|
+
#help .hotkeys {
|
826
|
+
display: inline-block;
|
827
|
+
vertical-align: middle;
|
828
|
+
}
|
829
|
+
|
830
|
+
#help .description {
|
831
|
+
width: 30%;
|
832
|
+
}
|
833
|
+
|
834
|
+
#help .action {
|
835
|
+
width: 15%;
|
836
|
+
color: gray;
|
837
|
+
}
|
838
|
+
|
839
|
+
#help .hotkeys {
|
840
|
+
width: 25%;
|
841
|
+
}
|
842
|
+
|
843
|
+
#help .hotkeys .key {
|
844
|
+
border: 1px solid #ccc;
|
845
|
+
background-color: #dfdfdf;
|
846
|
+
border-radius: 0.25em;
|
847
|
+
padding: 0.15em 0.5em;
|
848
|
+
margin: 0.25em;
|
849
|
+
}
|
850
|
+
|
856
851
|
/*****************
|
857
852
|
*** end modal ***
|
858
853
|
*****************/
|
data/public/js/presenter.js
CHANGED
@@ -79,10 +79,6 @@ $(document).ready(function(){
|
|
79
79
|
bind('swipeleft', presNextStep). // next
|
80
80
|
bind('swiperight', presPrevStep); // prev
|
81
81
|
|
82
|
-
$('#topbar #slideSource').click( function(e) {
|
83
|
-
$('#sidebar').toggle();
|
84
|
-
});
|
85
|
-
|
86
82
|
$('#topbar #update').click( function(e) {
|
87
83
|
e.preventDefault();
|
88
84
|
$.get("/getpage", function(data) {
|
data/public/js/showoff.js
CHANGED
@@ -91,6 +91,21 @@ function setupPreso(load_slides, prefix) {
|
|
91
91
|
// yes, this is a global
|
92
92
|
annotations = new Annotate();
|
93
93
|
|
94
|
+
$("#help-modal").dialog({
|
95
|
+
autoOpen: false,
|
96
|
+
dialogClass: "no-close",
|
97
|
+
draggable: false,
|
98
|
+
height: 640,
|
99
|
+
modal: true,
|
100
|
+
resizable: false,
|
101
|
+
width: 640,
|
102
|
+
buttons: {
|
103
|
+
Close: function() {
|
104
|
+
$( this ).dialog( "close" );
|
105
|
+
}
|
106
|
+
}
|
107
|
+
});
|
108
|
+
|
94
109
|
// wait until the presentation is loaded to hook up the previews.
|
95
110
|
$("body").bind("showoff:loaded", function (event) {
|
96
111
|
$('#navigation li a.navItem').hover(function() {
|
@@ -225,7 +240,15 @@ function zoom(presenter) {
|
|
225
240
|
}
|
226
241
|
|
227
242
|
// Calculate margins to center the thing *before* scaling
|
228
|
-
|
243
|
+
// On mobile, we'll top align, everywhere else vertical center it.
|
244
|
+
if(mobile()) {
|
245
|
+
// (center of slide to top) - (half of the zoomed slide)
|
246
|
+
//var hMargin = (hSlide/2 * newZoom) - (hSlide / 2);
|
247
|
+
var hMargin = (hSlide * newZoom - hSlide) / 2;
|
248
|
+
}
|
249
|
+
else {
|
250
|
+
var hMargin = (hBody - hSlide) /2;
|
251
|
+
}
|
229
252
|
var wMargin = (wBody - wSlide) /2;
|
230
253
|
|
231
254
|
preso.css("margin", hMargin + "px " + wMargin + "px");
|
@@ -1361,7 +1384,8 @@ function toggleFooter() {
|
|
1361
1384
|
}
|
1362
1385
|
|
1363
1386
|
function toggleHelp () {
|
1364
|
-
$(
|
1387
|
+
var help = $("#help-modal");
|
1388
|
+
help.dialog("isOpen") ? help.dialog("close") : help.dialog("open");
|
1365
1389
|
}
|
1366
1390
|
|
1367
1391
|
function toggleContents () {
|
@@ -1685,7 +1709,7 @@ function setupStats(data)
|
|
1685
1709
|
|
1686
1710
|
/* Is this a mobile device? */
|
1687
1711
|
function mobile() {
|
1688
|
-
return ( $(window).width() <=
|
1712
|
+
return ( $(window).width() <= 640 )
|
1689
1713
|
}
|
1690
1714
|
|
1691
1715
|
/* check browser support for one or more css properties */
|
data/views/header.erb
CHANGED
@@ -25,6 +25,7 @@
|
|
25
25
|
<script type="text/javascript" src="<%= @asset_path %>/js/zoomline-0.0.1.js"></script>
|
26
26
|
<script type="text/javascript" src="<%= @asset_path %>/js/highlight.pack-9.2.0.js"></script>
|
27
27
|
<script type="text/javascript" src="<%= @asset_path %>/js/mermaid-6.0.0-min.js"></script>
|
28
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery-ui-1.12.1.js"></script>
|
28
29
|
|
29
30
|
<script type="text/javascript" src="<%= @asset_path %>/js/coffee-script-1.1.3-pre.js"></script>
|
30
31
|
|
data/views/help.erb
CHANGED
@@ -1,84 +1,85 @@
|
|
1
|
-
<div id="help">
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
1
|
+
<div id="help-modal" title="Help">
|
2
|
+
<div id="help">
|
3
|
+
<div>
|
4
|
+
<span class="description">Move to the next slide.</span>
|
5
|
+
<span class="action">NEXT</span>
|
6
|
+
<span class="hotkeys"><%= mapped_keys('NEXT') %></span>
|
7
|
+
</div>
|
8
|
+
<div>
|
9
|
+
<span class="description">Move to the previous slide.</span>
|
10
|
+
<span class="action">PREV</span>
|
11
|
+
<span class="hotkeys"><%= mapped_keys('PREV') %></span>
|
12
|
+
</div>
|
13
|
+
<div>
|
14
|
+
<span class="description">Show the table of contents menu.</span>
|
15
|
+
<span class="action">CONTENTS</span>
|
16
|
+
<span class="hotkeys"><%= mapped_keys('CONTENTS') %></span>
|
17
|
+
</div>
|
18
|
+
<div>
|
19
|
+
<span class="description">Toggle follow mode.</span>
|
20
|
+
<span class="action">FOLLOW</span>
|
21
|
+
<span class="hotkeys"><%= mapped_keys('FOLLOW') %></span>
|
22
|
+
</div>
|
23
|
+
<div>
|
24
|
+
<span class="description">Show this help dialog.</span>
|
25
|
+
<span class="action">HELP</span>
|
26
|
+
<span class="hotkeys"><%= mapped_keys('HELP') %></span>
|
27
|
+
</div>
|
28
28
|
|
29
|
-
|
29
|
+
<hr />
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
31
|
+
<div>
|
32
|
+
<span class="description">Refresh slide content.</span>
|
33
|
+
<span class="action">REFRESH</span>
|
34
|
+
<span class="hotkeys"><%= mapped_keys('REFRESH') %></span>
|
35
|
+
</div>
|
36
|
+
<div>
|
37
|
+
<span class="description">Completely reload Showoff.</span>
|
38
|
+
<span class="action">RELOAD</span>
|
39
|
+
<span class="hotkeys"><%= mapped_keys('RELOAD') %></span>
|
40
|
+
</div>
|
41
|
+
<div>
|
42
|
+
<span class="description">Blank the screen.</span>
|
43
|
+
<span class="action">BLANK</span>
|
44
|
+
<span class="hotkeys"><%= mapped_keys('BLANK') %></span>
|
45
|
+
</div>
|
46
|
+
<div>
|
47
|
+
<span class="description">Toggle the display footer.</span>
|
48
|
+
<span class="action">FOOTER</span>
|
49
|
+
<span class="hotkeys"><%= mapped_keys('FOOTER') %></span>
|
50
|
+
</div>
|
51
|
+
<div>
|
52
|
+
<span class="description">Toggle notes display.</span>
|
53
|
+
<span class="action">NOTES</span>
|
54
|
+
<span class="hotkeys"><%= mapped_keys('NOTES') %></span>
|
55
|
+
</div>
|
56
|
+
<div>
|
57
|
+
<span class="description">Clear code execution results.</span>
|
58
|
+
<span class="action">CLEAR</span>
|
59
|
+
<span class="hotkeys"><%= mapped_keys('CLEAR') %></span>
|
60
|
+
</div>
|
61
|
+
<div>
|
62
|
+
<span class="description">Pause the presentation.</span>
|
63
|
+
<span class="action">PAUSE</span>
|
64
|
+
<span class="hotkeys"><%= mapped_keys('PAUSE') %></span>
|
65
|
+
</div>
|
66
|
+
<div>
|
67
|
+
<span class="description">Display slideshow of <tt>preshow</tt> images on a timer.</span>
|
68
|
+
<span class="action">PRESHOW</span>
|
69
|
+
<span class="hotkeys"><%= mapped_keys('PRESHOW') %></span>
|
70
|
+
</div>
|
71
|
+
<div>
|
72
|
+
<span class="description">Execute the first visible code block.</span>
|
73
|
+
<span class="action">EXECUTE</span>
|
74
|
+
<span class="hotkeys"><%= mapped_keys('EXECUTE') %></span>
|
75
|
+
</div>
|
76
76
|
|
77
|
-
|
77
|
+
<hr />
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
<div>
|
80
|
+
<span class="description">Show debugging information.</span>
|
81
|
+
<span class="action">DEBUG</span>
|
82
|
+
<span class="hotkeys"><%= mapped_keys('DEBUG') %></span>
|
83
|
+
</div>
|
83
84
|
</div>
|
84
85
|
</div>
|
data/views/presenter.erb
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
|
9
9
|
<script type="text/javascript" src="<%= @asset_path %>/js/TimeCircles-89ac5ae.js"></script>
|
10
10
|
<script type="text/javascript" src="<%= @asset_path %>/js/presenter.js?v=<%= SHOWOFF_VERSION %>"></script>
|
11
|
-
<script type="text/javascript" src="<%= @asset_path %>/js/jquery-ui-1.12.1.js"></script>
|
12
11
|
|
13
12
|
<script type="text/javascript">
|
14
13
|
editUrl = "<%= @edit %>";
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: showoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chacon
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-02
|
12
|
+
date: 2017-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -329,7 +329,6 @@ files:
|
|
329
329
|
- public/css/highlight/xcode.css
|
330
330
|
- public/css/highlight/zenburn.css
|
331
331
|
- public/css/jquery-ui-1.12.1.css
|
332
|
-
- public/css/menu.png
|
333
332
|
- public/css/mermaid-6.0.0.css
|
334
333
|
- public/css/onepage.css
|
335
334
|
- public/css/pace.png
|
data/public/css/menu.png
DELETED
Binary file
|