showoff 0.12.0 → 0.12.1
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 +4 -4
- data/bin/showoff +28 -9
- data/lib/keymap.rb +145 -1
- data/lib/showoff.rb +184 -63
- data/lib/showoff/version.rb +1 -1
- data/lib/showoff_utils.rb +76 -39
- data/public/css/TimeCircles.css +42 -0
- data/public/css/presenter.css +161 -45
- data/public/css/showoff.css +185 -75
- data/public/favicon.ico +0 -0
- data/public/js/TimeCircles.js +984 -0
- data/public/js/presenter.js +147 -64
- data/public/js/showoff.js +224 -85
- data/views/download.erb +21 -24
- data/views/header.erb +5 -2
- data/views/index.erb +20 -10
- data/views/presenter.erb +19 -11
- data/views/stats.erb +47 -49
- metadata +28 -16
- data/public/css/close.png +0 -0
- data/public/css/run_code-dim.png +0 -0
- data/public/css/run_code.png +0 -0
- data/public/js/keyDictionary.json +0 -139
data/views/download.erb
CHANGED
@@ -6,30 +6,27 @@
|
|
6
6
|
</head>
|
7
7
|
|
8
8
|
<body id="download">
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
<% if key == -999 %>
|
22
|
-
<li><a href="/file/_files/share/<%= file %>"><%= title %>/<%= file %></a></li>
|
23
|
-
<% else %>
|
24
|
-
<li><a href="/file/_files/<%= file %>">Slide <%= key %>: <%= title %>/<%= file %></a></li>
|
25
|
-
<% end %>
|
26
|
-
<% end %>
|
27
|
-
<% end %>
|
28
|
-
<% end %>
|
9
|
+
<div id="wrapper"> <!-- wrapper needed for presenterPopupToggle() and $.get() -->
|
10
|
+
<h1>File Downloads</h1>
|
11
|
+
<% if @downloads %>
|
12
|
+
<%# [ enabled, slide name, [array, of, files] ] %>
|
13
|
+
<% @downloads.sort.map do |key, value| %>
|
14
|
+
<% enabled, title, files = value %>
|
15
|
+
<% if enabled %>
|
16
|
+
<%if key != -999 %>
|
17
|
+
<% path = '/file/_files' %>
|
18
|
+
<h4>Slide <%= key %> <small>(<%= title %>)</small></h4>
|
19
|
+
<% else %>
|
20
|
+
<% path = '/file/_files/share' %>
|
29
21
|
<% end %>
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
22
|
+
<ul>
|
23
|
+
<% files.each do |file| %>
|
24
|
+
<li><a href="<%= path %>/<%= file %>"><%= file %></a></li>
|
25
|
+
<% end %>
|
26
|
+
</ul>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
34
31
|
</body>
|
35
32
|
</html>
|
data/views/header.erb
CHANGED
@@ -39,7 +39,10 @@
|
|
39
39
|
setupPreso(<%= @slides.nil? ? "true" : "false"%>, '<%= @asset_path %>');
|
40
40
|
});
|
41
41
|
|
42
|
-
|
42
|
+
interactive = <%= @interactive %>;
|
43
|
+
|
44
|
+
keymap = <%= JSON.pretty_generate @keymap %>;
|
45
|
+
keycode_dictionary = <%= JSON.pretty_generate @keycode_dictionary %>;
|
46
|
+
keycode_shifted_keys = <%= JSON.pretty_generate @keycode_shifted_keys %>;
|
43
47
|
|
44
|
-
keymap = <%= JSON.pretty_generate @keymap %>;
|
45
48
|
</script>
|
data/views/index.erb
CHANGED
@@ -6,38 +6,43 @@
|
|
6
6
|
</head>
|
7
7
|
|
8
8
|
<body>
|
9
|
+
<div id="questionsIndicator"></div>
|
9
10
|
|
10
11
|
<i id="hamburger" class="fa fa-bars fa-2x"></i>
|
11
12
|
<div id="sidebarWrapper">
|
12
13
|
<div id="feedbackSidebar" class="sideMenu">
|
14
|
+
<img id="disconnected" src="/css/disconnected.png">
|
13
15
|
<h3>Showoff Menu</h3>
|
14
16
|
<div id="navToggle" class="buttonWrapper"><i class=" fa fa-bookmark"></i> Table of Contents</div>
|
15
17
|
<div id="navigation" class="submenu"></div>
|
18
|
+
<% if not @static then %>
|
16
19
|
<hr>
|
17
20
|
<div id="fileDownloads" class="buttonWrapper"><i class="fa fa-download"></i> Downloads</div>
|
21
|
+
<% end %>
|
18
22
|
<hr>
|
19
23
|
|
20
|
-
<% if @feedback then %>
|
24
|
+
<% if @feedback and not @static then %>
|
21
25
|
<p>The presenter should...</p>
|
22
|
-
<div id="paceSlower" class="buttonWrapper split">
|
26
|
+
<div id="paceSlower" class="buttonWrapper split interactive">
|
23
27
|
<i class="fa fa-minus"></i>
|
24
28
|
<br>Slow Down
|
25
29
|
</div>
|
26
|
-
<div id="paceFaster" class="buttonWrapper split">
|
30
|
+
<div id="paceFaster" class="buttonWrapper split interactive">
|
27
31
|
<i class="fa fa-plus"></i>
|
28
32
|
<br>Speed Up
|
29
33
|
</div>
|
30
34
|
|
31
35
|
<hr>
|
32
|
-
<div id="questionToggle" class="buttonWrapper"><i class="fa fa-hand-stop-o"></i> Ask a Question</div>
|
36
|
+
<div id="questionToggle" class="buttonWrapper interactive"><i class="fa fa-hand-stop-o"></i> Ask a Question</div>
|
33
37
|
<div id="questionSubmenu" class="submenu">
|
34
38
|
<textarea id="question" placeholder="Ask a question..."></textarea>
|
35
|
-
<div id="askQuestion" class="buttonWrapper">Ask</div>
|
39
|
+
<div id="askQuestion" class="buttonWrapper interactive">Ask</div>
|
36
40
|
</div>
|
37
|
-
|
41
|
+
<ul id="askedQuestions"></ul>
|
42
|
+
|
38
43
|
<hr>
|
39
|
-
|
40
|
-
<div id="feedbackToggle" class="buttonWrapper"><i class="fa fa-envelope"></i> Send Feedback</div>
|
44
|
+
|
45
|
+
<div id="feedbackToggle" class="buttonWrapper interactive"><i class="fa fa-envelope"></i> Send Feedback</div>
|
41
46
|
<div id="feedbackSubmenu" class="submenu">
|
42
47
|
<p>This slide is...</p>
|
43
48
|
<small>
|
@@ -50,9 +55,9 @@
|
|
50
55
|
Awesome
|
51
56
|
</small>
|
52
57
|
<textarea id="feedback" placeholder="Why...?"></textarea>
|
53
|
-
<div id="sendFeedback" class="buttonWrapper">Send</div>
|
58
|
+
<div id="sendFeedback" class="buttonWrapper interactive">Send</div>
|
54
59
|
</div>
|
55
|
-
|
60
|
+
|
56
61
|
<% if @edit then %>
|
57
62
|
<hr>
|
58
63
|
<div id="editSlide" class="buttonWrapper">Edit Current Slide</div>
|
@@ -74,6 +79,8 @@
|
|
74
79
|
|
75
80
|
<div id="preso"><center>loading presentation...</center></div>
|
76
81
|
|
82
|
+
<div id="notes"></div>
|
83
|
+
|
77
84
|
<footer id="footer">
|
78
85
|
<span id="followMode"></span>
|
79
86
|
<span id="slideInfo"></span>
|
@@ -86,6 +93,9 @@
|
|
86
93
|
<div id="slides" class="offscreen" <%= 'style="display:none;"' if @slides %>>
|
87
94
|
<%= @slides %>
|
88
95
|
</div>
|
96
|
+
<div id="buttonNav">
|
97
|
+
<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>
|
98
|
+
</div>
|
89
99
|
<div id="pauseScreen">
|
90
100
|
<%= @pause_msg %>
|
91
101
|
</div>
|
data/views/presenter.erb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
<head>
|
5
5
|
<%= erb :header %>
|
6
6
|
<link rel="stylesheet" href="<%= @asset_path %>/css/presenter.css" type="text/css"/>
|
7
|
+
<link href="<%= @asset_path %>/css/TimeCircles.css" rel="stylesheet">
|
8
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/TimeCircles.js"></script>
|
7
9
|
<script type="text/javascript" src="<%= @asset_path %>/js/presenter.js"></script>
|
8
10
|
<script type="text/javascript">
|
9
11
|
editUrl = "<%= @edit %>";
|
@@ -17,20 +19,20 @@
|
|
17
19
|
<div id="main">
|
18
20
|
<div id="topbar">
|
19
21
|
<span id="slideSource">
|
20
|
-
Source
|
22
|
+
<label>Source:</label>
|
21
23
|
<% if @request.host == 'localhost' %>
|
22
24
|
<a href="javascript:openEditor();"><span id="slideFile"></span></a>
|
23
25
|
<% else %>
|
24
|
-
<span id="slideFile">
|
26
|
+
<span id="slideFile"></span>
|
25
27
|
<% end %>
|
26
28
|
</span>
|
27
29
|
<span id="links">
|
28
30
|
<span class="desktop">
|
29
31
|
<% if @edit %>
|
30
|
-
<a id="edit" href="javascript:editSlide();" title="Edit current slide in new window.">Edit Slide
|
32
|
+
<a id="edit" href="javascript:editSlide();" title="Edit current slide in new window.">Edit Slide <i class="fa fa-pencil-square-o"></i></a>
|
31
33
|
<% end %>
|
32
34
|
<% if @issues %>
|
33
|
-
<a id="report" href="javascript:reportIssue();" title="Report an issue with the current slide.">Report Issue With Slide
|
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>
|
34
36
|
<% end %>
|
35
37
|
<span>
|
36
38
|
<a id="statslink" href="">Viewing Statistics <i class="fa fa-chevron-down"></i></a>
|
@@ -42,8 +44,8 @@
|
|
42
44
|
<a id="notesWindow" href="javascript:toggleNotes();" title="Enable the popout notes window.">Notes Window <i class="fa fa-clone"></i></a>
|
43
45
|
</span>
|
44
46
|
<span>
|
45
|
-
<a id="printSlides" href="javascript:printSlides();" title="Print slides using a new window.">Print Slides
|
46
|
-
<a id="onePage" href="/" title="Switch to Display Window.">Switch Views
|
47
|
+
<a id="printSlides" href="javascript:printSlides();" title="Print slides using a new window.">Print Slides <i class="fa fa-print"></i></a>
|
48
|
+
<a id="onePage" href="/" title="Switch to Display Window.">Switch Views <i class="fa fa-exchange fa-rotate-90"></i></a>
|
47
49
|
</span>
|
48
50
|
</span>
|
49
51
|
<span class="mobile">
|
@@ -55,13 +57,14 @@
|
|
55
57
|
<div id="center">
|
56
58
|
<div id="sidebar">
|
57
59
|
<div id="timerSection">
|
58
|
-
|
60
|
+
<input type="button" id="pauseTimer" value="Pause" />
|
61
|
+
<input type="button" id="stopTimer" value="Cancel" />
|
62
|
+
<span id="timerLabel">Timer:</span>
|
59
63
|
<span id="minStart">
|
60
64
|
<input type="text" size="8" id="timerMinutes"/> min
|
61
|
-
<input type="button" id="startTimer" value="Start"
|
65
|
+
<input type="button" id="startTimer" value="Start" />
|
62
66
|
</span>
|
63
|
-
<
|
64
|
-
<span id="minStop"><input type="button" id="stopTimer" value="Stop"></span>
|
67
|
+
<div id="timerDisplay"></div>
|
65
68
|
</div>
|
66
69
|
<div id="feedbackPace">
|
67
70
|
<span id="paceSlow">Speed Up!</span>
|
@@ -91,9 +94,14 @@
|
|
91
94
|
</div>
|
92
95
|
|
93
96
|
<div id="bottom">
|
97
|
+
<div id="buttonNav">
|
98
|
+
<span id="buttonPrev"><label class="fa fa-chevron-left fa-lg"> Previous</label></span>
|
99
|
+
<span id="buttonNext"><label class="fa fa-chevron-right fa-lg">Next</label></span>
|
100
|
+
</div>
|
94
101
|
<div id="questions">
|
95
102
|
<h3>Audience Questions</h3>
|
96
|
-
<
|
103
|
+
<ol id="unanswered"></ol>
|
104
|
+
<ol id="answered"></ol>
|
97
105
|
</div>
|
98
106
|
<div id="notes"></div>
|
99
107
|
</div>
|
data/views/stats.erb
CHANGED
@@ -10,63 +10,61 @@
|
|
10
10
|
</head>
|
11
11
|
|
12
12
|
<body id="stats">
|
13
|
-
|
14
|
-
|
15
|
-
<h1>Viewing Statistics</h1>
|
13
|
+
<div id="wrapper">
|
14
|
+
<h1>Viewing Statistics</h1>
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
16
|
+
<div id="least">
|
17
|
+
<h3>Least viewed slides</h3>
|
18
|
+
<% if @least.size > 0 %>
|
19
|
+
<% max = @least.sort_by {|slide, time| -time}[0][1].to_f %>
|
20
|
+
<% timestr = (max > 3599) ? '%H:%M:%S' : '%M:%S' %>
|
21
|
+
<% @least.each do |slide, time| %>
|
22
|
+
<div class="row">
|
23
|
+
<span class="label"><%= slide %></span>
|
24
|
+
<div class="bar" style="width: <%= (time/max)*100 %>%;"> </div>
|
25
|
+
<div class="time"><%= Time.at(time).gmtime.strftime(timestr) %></div>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
31
|
+
<div id="most">
|
32
|
+
<h3>Most viewed slides</h3>
|
33
|
+
<% if @least.size > 0 %>
|
34
|
+
<% max = @most[0][1].to_f %>
|
35
|
+
<% timestr = (max > 3599) ? '%H:%M:%S' : '%M:%S' %>
|
36
|
+
<% @most.each do |slide, time| %>
|
37
|
+
<div class="row">
|
38
|
+
<span class="label"><%= slide %></span>
|
39
|
+
<div class="bar" style="width: <%= (time/max)*100 %>%;"> </div>
|
40
|
+
<div class="time"><%= Time.at(time).gmtime.strftime(timestr) %></div>
|
41
|
+
</div>
|
42
|
+
<% end %>
|
43
|
+
<% end %>
|
44
|
+
</div>
|
46
45
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
</div>
|
63
|
-
<% end %>
|
46
|
+
<div id="all">
|
47
|
+
<h3>All slides</h3>
|
48
|
+
<%# We reuse the max value calculated from the above step. %>
|
49
|
+
<% @all.sort.map do |slide, time| %>
|
50
|
+
<div class="row">
|
51
|
+
<span class="label"><%= slide %></span>
|
52
|
+
<div class="bar" style="width: <%= (time/max)*100 %>%;"> </div>
|
53
|
+
<div class="time"><%= Time.at(time).gmtime.strftime(timestr) %></div>
|
54
|
+
<% if @counter %>
|
55
|
+
<div class="detail">
|
56
|
+
<% @counter[slide].each do |host, count| %>
|
57
|
+
<div class="row">
|
58
|
+
<span class="label"><%= host %>:</span>
|
59
|
+
<div class="bar" style="width: <%= (count/max)*100 %>%;"> </div>
|
60
|
+
<div class="time"><%= Time.at(count).gmtime.strftime(timestr) %></div>
|
64
61
|
</div>
|
65
62
|
<% end %>
|
66
63
|
</div>
|
67
64
|
<% end %>
|
68
65
|
</div>
|
69
|
-
|
66
|
+
<% end %>
|
70
67
|
</div>
|
68
|
+
</div>
|
71
69
|
</body>
|
72
70
|
</html>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: showoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chacon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -25,33 +25,47 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: gli
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.3.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.3.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: tilt
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.0.3
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: parslet
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,7 +198,7 @@ files:
|
|
184
198
|
- views/onepage.erb
|
185
199
|
- views/presenter.erb
|
186
200
|
- views/stats.erb
|
187
|
-
- public/css/
|
201
|
+
- public/css/TimeCircles.css
|
188
202
|
- public/css/disconnected-large.png
|
189
203
|
- public/css/disconnected.png
|
190
204
|
- public/css/font-awesome-4.4.0/css/font-awesome.min.css
|
@@ -303,11 +317,10 @@ files:
|
|
303
317
|
- public/css/pace.png
|
304
318
|
- public/css/paceMarker.png
|
305
319
|
- public/css/presenter.css
|
306
|
-
- public/css/run_code-dim.png
|
307
|
-
- public/css/run_code.png
|
308
320
|
- public/css/showoff.css
|
309
321
|
- public/css/spinner_bar.gif
|
310
322
|
- public/favicon.ico
|
323
|
+
- public/js/TimeCircles.js
|
311
324
|
- public/js/coffee-script.js
|
312
325
|
- public/js/highlight.pack.js
|
313
326
|
- public/js/jTypeWriter.js
|
@@ -317,7 +330,6 @@ files:
|
|
317
330
|
- public/js/jquery.cycle.all.js
|
318
331
|
- public/js/jquery.doubletap-0.1.js
|
319
332
|
- public/js/jquery.parsequery.min.js
|
320
|
-
- public/js/keyDictionary.json
|
321
333
|
- public/js/presenter.js
|
322
334
|
- public/js/showoff.js
|
323
335
|
homepage: http://github.com/puppetlabs/showoff
|
@@ -326,7 +338,7 @@ metadata: {}
|
|
326
338
|
post_install_message: |2+
|
327
339
|
_________________________________________
|
328
340
|
/ Ahoy ahead! \
|
329
|
-
|
|
341
|
+
| Style changes in this release. |
|
330
342
|
| |
|
331
343
|
\ Please clear your browser cache. /
|
332
344
|
-----------------------------------------
|
@@ -341,9 +353,9 @@ post_install_message: |2+
|
|
341
353
|
means that if you've created your own custom styles, that you'll need to
|
342
354
|
refactor them. We do hope you find the new styles simpler and better looking.
|
343
355
|
|
344
|
-
|
345
|
-
|
346
|
-
|
356
|
+
RMagick will be completely removed in the next major release. Pleas migrate
|
357
|
+
away from it now. Browsers can autoscale images on demand pretty well now,
|
358
|
+
so you probably won't miss it much.
|
347
359
|
|
348
360
|
Showoff can optionally use the PDFKit gem to build PDF files using the
|
349
361
|
`showoff pdf` command. If you'd like your audience to download the PDF,
|