showoff 0.7.0 → 0.9.7
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 +7 -0
- data/README.rdoc +53 -475
- data/Rakefile +17 -18
- data/bin/showoff +29 -7
- data/lib/commandline_parser.rb +1 -1
- data/lib/showoff/version.rb +3 -0
- data/lib/showoff.rb +600 -91
- data/lib/showoff_utils.rb +110 -4
- data/public/css/disconnected-large.png +0 -0
- data/public/css/disconnected.png +0 -0
- data/public/css/fast.png +0 -0
- data/public/css/grippy-close.png +0 -0
- data/public/css/grippy.png +0 -0
- data/public/css/onepage.css +6 -0
- data/public/css/pace.png +0 -0
- data/public/css/paceMarker.png +0 -0
- data/public/css/presenter.css +333 -43
- data/public/css/sh_style.css +15 -0
- data/public/css/showoff.css +373 -48
- data/public/css/slow.png +0 -0
- data/public/css/spinner.gif +0 -0
- data/public/css/tipsy.css +26 -0
- data/public/favicon.ico +0 -0
- data/public/js/jquery.parsequery.min.js +2 -0
- data/public/js/jquery.tipsy.js +260 -0
- data/public/js/onepage.js +2 -3
- data/public/js/presenter.js +384 -33
- data/public/js/sh_lang/sh_gherkin.js +112 -0
- data/public/js/sh_lang/sh_gherkin.min.js +1 -0
- data/public/js/sh_lang/sh_ini.js +87 -0
- data/public/js/sh_lang/sh_ini.min.js +87 -0
- data/public/js/sh_lang/sh_puppet.js +182 -0
- data/public/js/sh_lang/sh_puppet.min.js +182 -0
- data/public/js/sh_lang/sh_puppet_output.js +22 -0
- data/public/js/sh_lang/sh_puppet_output.min.js +22 -0
- data/public/js/sh_lang/sh_shell.min.js +1 -0
- data/public/js/showoff.js +423 -51
- data/views/404.erb +19 -0
- data/views/download.erb +36 -0
- data/views/header.erb +35 -25
- data/views/header_mini.erb +22 -0
- data/views/index.erb +46 -1
- data/views/onepage.erb +35 -14
- data/views/presenter.erb +63 -21
- data/views/stats.erb +73 -0
- metadata +170 -131
- data/public/css/960.css +0 -653
- data/public/css/pdf.css +0 -12
data/views/download.erb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<%= erb :header_mini %>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body id="download">
|
10
|
+
|
11
|
+
<div id="preso">
|
12
|
+
<div id="wrapper">
|
13
|
+
<h1>File Downloads</h1>
|
14
|
+
|
15
|
+
<ul id="downloads">
|
16
|
+
<% if @downloads %>
|
17
|
+
<%# [ enabled, slide name, [array, of, files] ] %>
|
18
|
+
<% @downloads.sort.map do |key, value| %>
|
19
|
+
<% enabled, title, files = value %>
|
20
|
+
<% if enabled %>
|
21
|
+
<% files.each do |file| %>
|
22
|
+
<% if key == -999 %>
|
23
|
+
<li><a href="/file/_files/share/<%= file %>"><%= title %>/<%= file %></a></li>
|
24
|
+
<% else %>
|
25
|
+
<li><a href="/file/_files/<%= file %>">Slide <%= key %>: <%= title %>/<%= file %></a></li>
|
26
|
+
<% end %>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
29
|
+
<% end %>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
</ul>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
</body>
|
36
|
+
</html>
|
data/views/header.erb
CHANGED
@@ -1,36 +1,46 @@
|
|
1
1
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
2
2
|
<title><%= @title %></title>
|
3
3
|
|
4
|
-
<meta name="viewport" content="width=device-width"/>
|
5
|
-
|
6
|
-
<link rel="stylesheet" href="<%= @asset_path
|
7
|
-
|
8
|
-
|
9
|
-
<
|
10
|
-
<
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
<script type="text/javascript" src="<%= @asset_path
|
17
|
-
|
18
|
-
<script type="text/javascript" src="<%= @asset_path
|
19
|
-
<script type="text/javascript" src="<%= @asset_path
|
20
|
-
<script type="text/javascript" src="<%= @asset_path
|
21
|
-
<script type="text/javascript" src="<%= @asset_path
|
22
|
-
|
23
|
-
|
24
|
-
<
|
25
|
-
<
|
26
|
-
<
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
|
5
|
+
|
6
|
+
<link rel="stylesheet" href="<%= @asset_path %>/css/reset.css" type="text/css"/>
|
7
|
+
|
8
|
+
<link type="text/css" href="<%= @asset_path %>/css/fg.menu.css" media="screen" rel="stylesheet" />
|
9
|
+
<link type="text/css" href="<%= @asset_path %>/css/theme/ui.all.css" media="screen" rel="stylesheet" />
|
10
|
+
<link type="text/css" href="<%= @asset_path %>/css/sh_style.css" rel="stylesheet" />
|
11
|
+
<link type="text/css" href="<%= @asset_path %>/css/tipsy.css" rel="stylesheet" />
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="<%= @asset_path %>/css/showoff.css" type="text/css"/>
|
14
|
+
|
15
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery-1.4.2.min.js"></script>
|
16
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.cycle.all.js"></script>
|
17
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery-print.js"></script>
|
18
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.batchImageLoad.js"></script>
|
19
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.parsequery.min.js"></script>
|
20
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.doubletap-0.1.js"></script>
|
21
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.tipsy.js"></script>
|
22
|
+
|
23
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/fg.menu.js"></script>
|
24
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/showoff.js"></script>
|
25
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jTypeWriter.js"> </script>
|
26
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/sh_main.min.js"></script>
|
27
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/core.js"></script>
|
28
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/showoffcore.js"></script>
|
29
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/coffee-script.js"></script>
|
30
|
+
|
31
|
+
<% if @languages %>
|
32
|
+
<% @languages.each do |l| %>
|
33
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/<%= l %>"></script>
|
34
|
+
<% end %>
|
35
|
+
<% end %>
|
27
36
|
|
28
37
|
<% css_files.each do |css_file| %>
|
29
|
-
|
38
|
+
<% alternate = ShowOffUtils.default_style?(css_file) ? '' : 'alternate ' %>
|
39
|
+
<link rel="stylesheet" href="<%= @asset_path %>/file/<%= css_file %>" type="text/css"/>
|
30
40
|
<% end %>
|
31
41
|
|
32
42
|
<% js_files.each do |js_file| %>
|
33
|
-
<script type="text/javascript" src="file/<%= js_file %>"></script>
|
43
|
+
<script type="text/javascript" src="<%= @asset_path %>/file/<%= js_file %>"></script>
|
34
44
|
<% end %>
|
35
45
|
|
36
46
|
<script type="text/javascript">
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
2
|
+
<title><%= @title %></title>
|
3
|
+
|
4
|
+
<meta name="viewport" content="width=device-width"/>
|
5
|
+
|
6
|
+
<link rel="stylesheet" href="<%= @asset_path %>/css/reset.css" type="text/css"/>
|
7
|
+
<link rel="stylesheet" href="<%= @asset_path %>/css/showoff.css" type="text/css"/>
|
8
|
+
|
9
|
+
<link type="text/css" href="<%= @asset_path %>/css/fg.menu.css" media="screen" rel="stylesheet" />
|
10
|
+
<link type="text/css" href="<%= @asset_path %>/css/theme/ui.all.css" media="screen" rel="stylesheet" />
|
11
|
+
|
12
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/jquery-1.4.2.min.js"></script>
|
13
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/showoff.js"></script>
|
14
|
+
|
15
|
+
<% css_files.each do |css_file| %>
|
16
|
+
<% alternate = ShowOffUtils.default_style?(css_file) ? '' : 'alternate ' %>
|
17
|
+
<link rel="stylesheet" href="<%= @asset_path %>/file/<%= css_file %>" type="text/css"/>
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<% js_files.each do |js_file| %>
|
21
|
+
<script type="text/javascript" src="<%= @asset_path %>/file/<%= js_file %>"></script>
|
22
|
+
<% end %>
|
data/views/index.erb
CHANGED
@@ -10,6 +10,42 @@
|
|
10
10
|
|
11
11
|
<a tabindex="0" href="#search-engines" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all" id="navmenu"><span class="ui-icon ui-icon-triangle-1-s"></span>slides</a>
|
12
12
|
<div id="navigation" class="hidden"></div>
|
13
|
+
<a tabindex="1" href="#search-engines" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all" id="stylemenu"><span class="ui-icon ui-icon-triangle-1-s"></span>styles</a>
|
14
|
+
<div id="stylepicker" class="hidden"></div>
|
15
|
+
|
16
|
+
<% if @feedback then %>
|
17
|
+
<div id="feedbackWrapper">
|
18
|
+
<div id="feedbackSidebar">
|
19
|
+
<img id="feedbackActivity" src="css/spinner.gif" />
|
20
|
+
<h3>Live Interaction</h3>
|
21
|
+
<div class="row">
|
22
|
+
<h4>The presenter should...</h4>
|
23
|
+
<span class="buttonWrapper slower"><button id="paceSlower">Slow Down</button></span>
|
24
|
+
<span class="buttonWrapper faster"><button id="paceFaster">Speed Up</button></span>
|
25
|
+
</div>
|
26
|
+
<div class="row">
|
27
|
+
<textarea id="question"></textarea>
|
28
|
+
<button id="askQuestion">Ask a Question</button>
|
29
|
+
</div>
|
30
|
+
<hr />
|
31
|
+
<h3>Material Feedback</h3>
|
32
|
+
<div class="row">
|
33
|
+
<h4>This slide is...</h4>
|
34
|
+
Terrible
|
35
|
+
<input type="radio" name="rating" value="1"></input>
|
36
|
+
<input type="radio" name="rating" value="2"></input>
|
37
|
+
<input type="radio" name="rating" value="3"></input>
|
38
|
+
<input type="radio" name="rating" value="4"></input>
|
39
|
+
<input type="radio" name="rating" value="5"></input>
|
40
|
+
Awesome
|
41
|
+
<textarea id="feedback"></textarea>
|
42
|
+
<button id="sendFeedback">Send Feedback</button>
|
43
|
+
</div>
|
44
|
+
<div id="disclaimer">All features are anonymous</div>
|
45
|
+
</div>
|
46
|
+
<div id="feedbackHandle"></div>
|
47
|
+
</div>
|
48
|
+
<% end %>
|
13
49
|
|
14
50
|
<div id="help">
|
15
51
|
<table>
|
@@ -20,9 +56,12 @@
|
|
20
56
|
<tr><td class="key">## <ret></td><td>go to slide #</td></tr>
|
21
57
|
<tr><td class="key">c, t</td><td>table of contents (vi)</td></tr>
|
22
58
|
<tr><td class="key">f</td><td>toggle footer</td></tr>
|
59
|
+
<tr><td class="key">g</td><td>toggle follow</td></tr>
|
23
60
|
<tr><td class="key">r</td><td>reload slides</td></tr>
|
24
61
|
<tr><td class="key">n</td><td>toggle notes</td></tr>
|
25
62
|
<tr><td class="key">p</td><td>run preshow</td></tr>
|
63
|
+
<tr><td class="key">P</td><td>toggle pause</td></tr>
|
64
|
+
<tr><td class="key">s</td><td>choose style</td></tr>
|
26
65
|
</table>
|
27
66
|
</div>
|
28
67
|
|
@@ -31,16 +70,22 @@
|
|
31
70
|
<input type="submit" onClick="nextStep();" value="next"/>
|
32
71
|
</div>
|
33
72
|
|
34
|
-
<div id="preso">loading presentation...</div>
|
73
|
+
<div id="preso"><center>loading presentation...</center></div>
|
35
74
|
<div id="footer">
|
75
|
+
<span id="followMode"></span>
|
36
76
|
<span id="slideInfo"></span>
|
37
77
|
<span id="debugInfo"></span>
|
38
78
|
<span id="notesInfo"></span>
|
79
|
+
<span id="slideFilename"></span>
|
80
|
+
<img id="disconnected" src="/css/disconnected.png" />
|
39
81
|
</div>
|
40
82
|
|
41
83
|
<div id="slides" class="offscreen" <%= 'style="display:none;"' if @slides %>>
|
42
84
|
<%= @slides %>
|
43
85
|
</div>
|
86
|
+
<div id="pauseScreen">
|
87
|
+
<%= @pause_msg %>
|
88
|
+
</div>
|
44
89
|
|
45
90
|
</body>
|
46
91
|
</html>
|
data/views/onepage.erb
CHANGED
@@ -1,34 +1,55 @@
|
|
1
|
-
<!DOCTYPE
|
2
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
3
2
|
|
4
3
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
4
|
<head>
|
6
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
7
|
-
|
6
|
+
<title><%= @title %></title>
|
8
7
|
|
9
|
-
<% if @
|
10
|
-
|
11
|
-
|
12
|
-
<%= inline_css(
|
13
|
-
<% end %>
|
14
|
-
<%= inline_css(['reset.css', 'showoff.css', 'theme/ui.all.css', 'sh_style.css'], 'public/css') %>
|
15
|
-
<%= inline_css(css_files) %>
|
8
|
+
<% if @inline %>
|
9
|
+
|
10
|
+
<%= inline_css(['reset.css', 'showoff.css', 'theme/ui.all.css', 'sh_style.css', 'onepage.css'], 'public/css') %>
|
11
|
+
<%= inline_css(css_files) %>
|
16
12
|
|
17
|
-
<% if !@no_js %>
|
18
13
|
<%= inline_js(['jquery-1.4.2.min.js', 'jquery-print.js', 'showoff.js', 'onepage.js', 'sh_main.min.js', 'core.js', 'showoffcore.js'], 'public/js') %>
|
14
|
+
<%= inline_js(@languages, 'public/js') if @languages %>
|
15
|
+
<%= inline_js(js_files) %>
|
19
16
|
<script type="text/javascript">
|
20
17
|
$(document).ready(function() {
|
21
18
|
setupOnePage()
|
22
19
|
});
|
23
20
|
</script>
|
21
|
+
|
22
|
+
<% else %>
|
23
|
+
<% ['reset.css', 'showoff.css', 'theme/ui.all.css', 'sh_style.css', 'onepage.css'].each do |css_file| %>
|
24
|
+
<link rel="stylesheet" href="<%= @asset_path %>/css/<%= css_file %>" type="text/css"/>
|
25
|
+
<% end %>
|
26
|
+
<% css_files.each do |css_file| %>
|
27
|
+
<link rel="stylesheet" href="<%= @asset_path %>/file/<%= css_file %>" type="text/css"/>
|
28
|
+
<% end %>
|
29
|
+
|
30
|
+
<% ['jquery-1.4.2.min.js', 'jquery-print.js', 'showoff.js', 'onepage.js', 'sh_main.min.js', 'core.js', 'showoffcore.js'].each do |js_file| %>
|
31
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/<%= js_file %>"></script>
|
32
|
+
<% end %>
|
33
|
+
<% js_files.each do |js_file| %>
|
34
|
+
<script type="text/javascript" src="<%= @asset_path %>/file/<%= js_file %>"></script>
|
35
|
+
<% end %>
|
36
|
+
<% if @languages %>
|
37
|
+
<% @languages.each do |l| %>
|
38
|
+
<script type="text/javascript" src="<%= @asset_path %>/js<%= l %>"></script>
|
39
|
+
<% end %>
|
40
|
+
<% end %>
|
41
|
+
<script type="text/javascript">
|
42
|
+
$(document).ready(function() {
|
43
|
+
setupOnePage()
|
44
|
+
});
|
45
|
+
</script>
|
46
|
+
|
24
47
|
<% end %>
|
25
48
|
</head>
|
26
49
|
|
27
50
|
<body>
|
28
|
-
|
29
|
-
<div id="slides">
|
51
|
+
<div id="slides"<% if @wrapper_classes then %>class="<%= @wrapper_classes.join(' ') %>"<% end %> >
|
30
52
|
<%= @slides %>
|
31
53
|
</div>
|
32
|
-
|
33
54
|
</body>
|
34
55
|
</html>
|
data/views/presenter.erb
CHANGED
@@ -4,14 +4,13 @@
|
|
4
4
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
5
|
<head>
|
6
6
|
<%= erb :header %>
|
7
|
-
<link rel="stylesheet" href="<%= @asset_path
|
8
|
-
<
|
9
|
-
<script type="text/javascript" src="<%= @asset_path %>js/presenter.js"></script>
|
7
|
+
<link rel="stylesheet" href="<%= @asset_path %>/css/presenter.css" type="text/css"/>
|
8
|
+
<script type="text/javascript" src="<%= @asset_path %>/js/presenter.js"></script>
|
10
9
|
</head>
|
11
10
|
|
12
11
|
<body>
|
13
12
|
|
14
|
-
<
|
13
|
+
<span id="issueUrl"><%= @issues %></span>
|
15
14
|
|
16
15
|
<div id="help">
|
17
16
|
<table>
|
@@ -23,35 +22,78 @@
|
|
23
22
|
<tr><td class="key">c, t</td><td>table of contents (vi)</td></tr>
|
24
23
|
<tr><td class="key">r</td><td>reload slides</td></tr>
|
25
24
|
<tr><td class="key">p</td><td>run preshow</td></tr>
|
25
|
+
<tr><td class="key">s</td><td>choose style</td></tr>
|
26
26
|
</table>
|
27
27
|
</div>
|
28
28
|
|
29
29
|
<div id="main" class="container_12">
|
30
30
|
<div id="topbar" class="grid_12">
|
31
|
-
<div id="
|
32
|
-
<
|
33
|
-
|
34
|
-
<a href="/onepage">Single Page</a>
|
31
|
+
<div id="slideSource">
|
32
|
+
Source: <span id="slideFile"></span>
|
35
33
|
</div>
|
34
|
+
<span id="links">
|
35
|
+
<span class="desktop">
|
36
|
+
<% if @issues %>
|
37
|
+
<a id="report" href="javascript:reportIssue();" title="Report an issue with the current slide.">Report Issue With Slide</a>
|
38
|
+
<% end %>
|
39
|
+
<a id="stats" href="/stats" target="_showoffchild">Viewing Statistics</a>
|
40
|
+
<a id="downloads" href="/download" target="_showoffchild">Downloads</a>
|
41
|
+
<a id="slaveWindow" href="javascript:openSlave();" title="Open a slave window if your popup blocker prevented it.">Open Slave Window</a>
|
42
|
+
<a id="generatePDF" href="/pdf" title="Call out to wkhtmltopdf to generate a PDF.">Generate PDF</a>
|
43
|
+
<a id="onePage" href="/onepage" title="Load the single page view. Useful for printing.">Single Page</a>
|
44
|
+
</span>
|
45
|
+
<span class="mobile">
|
46
|
+
<a id="update" href="">Update</a>
|
47
|
+
</span>
|
48
|
+
</span>
|
36
49
|
</div>
|
37
|
-
|
38
|
-
<div id="
|
39
|
-
<div id="
|
40
|
-
|
50
|
+
|
51
|
+
<div id="center">
|
52
|
+
<div id="sidebar" class="grid_4">
|
53
|
+
<div id="timerSection">
|
54
|
+
Timer:
|
55
|
+
<span id="minStart">
|
56
|
+
<input type="text" size="8" id="timerMinutes"/> min
|
57
|
+
<input type="button" id="startTimer" value="Start">
|
58
|
+
</span>
|
59
|
+
<span id="timerInfo"></span>
|
60
|
+
<span id="minStop"><input type="button" id="stopTimer" value="Stop"></span>
|
61
|
+
</div>
|
62
|
+
<div id="feedbackPace">
|
63
|
+
<span id="paceSlow">Speed Up!</span>
|
64
|
+
<span id="paceFast">Slow Down!</span>
|
65
|
+
<img id="paceMarker" src="css/paceMarker.png" />
|
66
|
+
</div>
|
67
|
+
<div id="slidemenu">
|
68
|
+
<div id="navigation" class="menu"></div>
|
69
|
+
</div>
|
41
70
|
</div>
|
42
|
-
<div id="
|
43
|
-
|
71
|
+
<div id="preview" class="grid_8">
|
72
|
+
<img id="disconnected" src="/css/disconnected-large.png" />
|
73
|
+
<div id="preso" class="zoomed">loading presentation...</div>
|
44
74
|
</div>
|
45
|
-
<div id="
|
46
|
-
|
47
|
-
|
75
|
+
<div id="statusbar">
|
76
|
+
<span id="progress">
|
77
|
+
Slide: <span id="slideInfo"></span>
|
78
|
+
</span>
|
79
|
+
<div id="debugInfo"></div>
|
80
|
+
<input id="zoomer" type="range" min="0.5" max="1.5" step="0.01" onchange="javascript:zoom();" title="Alter the zoom level of the slide preview." />
|
81
|
+
<span id="enableRemote" title="Enables tracking of other presenters.">
|
82
|
+
<label for="remoteToggle">Enable Remote</label><input type="checkbox" id="remoteToggle" checked />
|
83
|
+
</span>
|
84
|
+
<span id="enableFollower" title="Send slide change notifications.">
|
85
|
+
<label for="followerToggle">Update Follower</label><input type="checkbox" id="followerToggle" checked />
|
86
|
+
</span>
|
48
87
|
</div>
|
49
88
|
</div>
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
<div class="clear"></div>
|
89
|
+
|
90
|
+
<div id="separator"></div>
|
91
|
+
|
54
92
|
<div id="bottom" class="grid_12">
|
93
|
+
<div id="questions">
|
94
|
+
<h3>Audience Questions</h3>
|
95
|
+
<ul></ul>
|
96
|
+
</div>
|
55
97
|
<div id="notes"></div>
|
56
98
|
</div>
|
57
99
|
</div>
|
data/views/stats.erb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<%= erb :header_mini %>
|
7
|
+
|
8
|
+
<script type="text/javascript">
|
9
|
+
$(document).ready(function(){ setupStats(); });
|
10
|
+
</script>
|
11
|
+
</head>
|
12
|
+
|
13
|
+
<body id="stats">
|
14
|
+
<div id="preso">
|
15
|
+
<div id="wrapper">
|
16
|
+
<h1>Viewing Statistics</h1>
|
17
|
+
|
18
|
+
<div id="least">
|
19
|
+
<h3>Least viewed slides</h3>
|
20
|
+
<% if @least.size > 0 %>
|
21
|
+
<% max = @least.sort_by {|slide, time| -time}[0][1].to_f %>
|
22
|
+
<% timestr = (max > 3599) ? '%H:%M:%S' : '%M:%S' %>
|
23
|
+
<% @least.each do |slide, time| %>
|
24
|
+
<div class="row">
|
25
|
+
<span class="label">Slide <%= slide %>:</span>
|
26
|
+
<div class="bar" style="width: <%= (time/max)*100 %>%;"> </div>
|
27
|
+
<div class="time"><%= Time.at(time).gmtime.strftime(timestr) %></div>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<div id="most">
|
34
|
+
<h3>Most viewed slides</h3>
|
35
|
+
<% if @least.size > 0 %>
|
36
|
+
<% max = @most[0][1].to_f %>
|
37
|
+
<% timestr = (max > 3599) ? '%H:%M:%S' : '%M:%S' %>
|
38
|
+
<% @most.each do |slide, time| %>
|
39
|
+
<div class="row">
|
40
|
+
<span class="label">Slide <%= slide %>:</span>
|
41
|
+
<div class="bar" style="width: <%= (time/max)*100 %>%;"> :</div>
|
42
|
+
<div class="time"><%= Time.at(time).gmtime.strftime(timestr) %></div>
|
43
|
+
</div>
|
44
|
+
<% end %>
|
45
|
+
<% end %>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<div id="all">
|
49
|
+
<h3>All slides</h3>
|
50
|
+
<%# We reuse the max value calculated from the above step. %>
|
51
|
+
<% @all.sort.map do |slide, time| %>
|
52
|
+
<div class="row">
|
53
|
+
<span class="label">Slide <%= slide %>:</span>
|
54
|
+
<div class="bar" style="width: <%= (time/max)*100 %>%;"> </div>
|
55
|
+
<div class="time"><%= Time.at(time).gmtime.strftime(timestr) %></div>
|
56
|
+
<% if @counter %>
|
57
|
+
<div class="detail">
|
58
|
+
<% @counter[slide].each do |host, count| %>
|
59
|
+
<div class="row">
|
60
|
+
<span class="label"><%= host %>:</span>
|
61
|
+
<div class="bar" style="width: <%= (count/max)*100 %>%;"> </div>
|
62
|
+
<div class="time"><%= Time.at(count).gmtime.strftime(timestr) %></div>
|
63
|
+
</div>
|
64
|
+
<% end %>
|
65
|
+
</div>
|
66
|
+
<% end %>
|
67
|
+
</div>
|
68
|
+
<% end %>
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
</body>
|
73
|
+
</html>
|