showoff 0.12.0 → 0.12.1
Sign up to get free protection for your applications and to get access to all the features.
- 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,
|