showoff 0.16.0 → 0.16.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 +11 -4
- data/lib/showoff/version.rb +1 -1
- data/public/css/presenter.css +13 -2
- data/public/css/showoff.css +2 -1
- data/public/css/zoomline-0.0.1.css +66 -0
- data/public/js/presenter.js +4 -1
- data/public/js/showoff.js +1 -1
- data/public/js/zoomline-0.0.1.js +108 -0
- data/public/zoomline-0.0.1.html +2085 -0
- data/views/header.erb +0 -1
- data/views/presenter.erb +1 -3
- data/views/stats copy.erb +70 -0
- metadata +6 -3
- data/public/js/jquery-print.js +0 -110
data/views/header.erb
CHANGED
@@ -15,7 +15,6 @@
|
|
15
15
|
<script type="text/javascript" src="<%= @asset_path %>/js/jquery-2.1.4.min.js"></script>
|
16
16
|
|
17
17
|
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.cycle.all-2.8.0.js"></script>
|
18
|
-
<script type="text/javascript" src="<%= @asset_path %>/js/jquery-print.js"></script>
|
19
18
|
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.batchImageLoad-1.0.0.js"></script>
|
20
19
|
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.parsequery.min-6a20f83.js"></script>
|
21
20
|
<script type="text/javascript" src="<%= @asset_path %>/js/jquery.doubletap-4ff02c5.js"></script>
|
data/views/presenter.erb
CHANGED
@@ -122,9 +122,7 @@
|
|
122
122
|
</div>
|
123
123
|
|
124
124
|
<div id="statusbar">
|
125
|
-
<
|
126
|
-
Slide: <span id="slideInfo"></span>
|
127
|
-
</span>
|
125
|
+
<div id="progress" class="no-mobile"><span class="label">Slide: <span id="slideInfo"></span></span></div>
|
128
126
|
<div id="debugInfo"></div>
|
129
127
|
|
130
128
|
<div class="controls">
|
@@ -0,0 +1,70 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<%= erb :header_mini %>
|
6
|
+
|
7
|
+
<script type="text/javascript">
|
8
|
+
$(document).ready(function(){ setupStats(); });
|
9
|
+
</script>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body id="stats">
|
13
|
+
<div id="wrapper">
|
14
|
+
<h1>Viewing Statistics</h1>
|
15
|
+
|
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>
|
30
|
+
|
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>
|
45
|
+
|
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>
|
61
|
+
</div>
|
62
|
+
<% end %>
|
63
|
+
</div>
|
64
|
+
<% end %>
|
65
|
+
</div>
|
66
|
+
<% end %>
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
</body>
|
70
|
+
</html>
|
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.16.
|
4
|
+
version: 0.16.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-01-
|
12
|
+
date: 2017-01-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- views/index.erb
|
199
199
|
- views/onepage.erb
|
200
200
|
- views/presenter.erb
|
201
|
+
- views/stats copy.erb
|
201
202
|
- views/stats.erb
|
202
203
|
- public/css/TimeCircles-89ac5ae.css
|
203
204
|
- public/css/disconnected-large.png
|
@@ -327,6 +328,7 @@ files:
|
|
327
328
|
- public/css/titlebar/powershell-controls.png
|
328
329
|
- public/css/titlebar/powershell.png
|
329
330
|
- public/css/titlebar/right.png
|
331
|
+
- public/css/zoomline-0.0.1.css
|
330
332
|
- public/favicon.ico
|
331
333
|
- public/js/TimeCircles-89ac5ae.js
|
332
334
|
- public/js/annotations.js
|
@@ -335,7 +337,6 @@ files:
|
|
335
337
|
- public/js/highlight.pack-9.2.0.js
|
336
338
|
- public/js/jTypeWriter-1.1.js
|
337
339
|
- public/js/jquery-2.1.4.min.js
|
338
|
-
- public/js/jquery-print.js
|
339
340
|
- public/js/jquery-ui-1.12.1.js
|
340
341
|
- public/js/jquery.batchImageLoad-1.0.0.js
|
341
342
|
- public/js/jquery.cycle.all-2.8.0.js
|
@@ -344,7 +345,9 @@ files:
|
|
344
345
|
- public/js/mermaid-6.0.0-min.js
|
345
346
|
- public/js/presenter.js
|
346
347
|
- public/js/showoff.js
|
348
|
+
- public/js/zoomline-0.0.1.js
|
347
349
|
- public/unsupported.html
|
350
|
+
- public/zoomline-0.0.1.html
|
348
351
|
homepage: https://puppetlabs.github.io/showoff
|
349
352
|
licenses:
|
350
353
|
- MIT
|
data/public/js/jquery-print.js
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
/* https://github.com/smparkes/jquery.print/blob/master/src/jquery.print.js */
|
2
|
-
(function($) {
|
3
|
-
|
4
|
-
function print_array(obj, opts) {
|
5
|
-
var result = [];
|
6
|
-
for (var i = 0; i < Math.min(opts.max_array, obj.length); i++)
|
7
|
-
result.push($.print(obj[i], $.extend({}, opts, { max_array: 3, max_string: 40 })));
|
8
|
-
|
9
|
-
if (obj.length > opts.max_array)
|
10
|
-
result.push((obj.length - opts.max_array) + ' more...');
|
11
|
-
if (result.length == 0) return "[]"
|
12
|
-
return "[ " + result.join(", ") + " ]";
|
13
|
-
}
|
14
|
-
|
15
|
-
function print_element(obj) {
|
16
|
-
if (obj.nodeType == 1) {
|
17
|
-
var result = [];
|
18
|
-
var properties = [ 'className', 'id' ];
|
19
|
-
var extra = {
|
20
|
-
'input': ['type', 'name', 'value'],
|
21
|
-
'a': ['href', 'target'],
|
22
|
-
'form': ['method', 'action'],
|
23
|
-
'script': ['src'],
|
24
|
-
'link': ['href'],
|
25
|
-
'img': ['src']
|
26
|
-
};
|
27
|
-
|
28
|
-
$.each(properties.concat(extra[obj.tagName.toLowerCase()] || []), function(){
|
29
|
-
if (obj[this])
|
30
|
-
result.push(' ' + this.replace('className', 'class') + "=" + $.print(obj[this]))
|
31
|
-
});
|
32
|
-
return "<" + obj.tagName.toLowerCase()
|
33
|
-
+ result.join('') + ">";
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
function print_object(obj, opts) {
|
38
|
-
var seen = opts.seen || [ obj ];
|
39
|
-
|
40
|
-
var result = [], key, value;
|
41
|
-
for (var k in obj) {
|
42
|
-
if (obj.hasOwnProperty(k) && $.inArray(obj[k], seen) < 0) {
|
43
|
-
seen.push(obj[k]);
|
44
|
-
value = $.print(obj[k], $.extend({}, opts, { max_array: 6, max_string: 40, seen: seen }));
|
45
|
-
} else
|
46
|
-
value = "...";
|
47
|
-
result.push(k + ": " + value);
|
48
|
-
}
|
49
|
-
if (result.length == 0) return "{}";
|
50
|
-
return "{ " + result.join(", ") + " }";
|
51
|
-
}
|
52
|
-
|
53
|
-
function print_string(value, opts) {
|
54
|
-
var character_substitutions = {
|
55
|
-
'\b': '\\b',
|
56
|
-
'\t': '\\t',
|
57
|
-
'\n': '\\n',
|
58
|
-
'\f': '\\f',
|
59
|
-
'\r': '\\r',
|
60
|
-
'"' : '\\"',
|
61
|
-
'\\': '\\\\'
|
62
|
-
};
|
63
|
-
var r = /["\\\x00-\x1f\x7f-\x9f]/g;
|
64
|
-
|
65
|
-
var str = r.test(value)
|
66
|
-
? value.replace(r, function (a) {
|
67
|
-
var c = character_substitutions[a];
|
68
|
-
if (c) return c;
|
69
|
-
c = a.charCodeAt();
|
70
|
-
return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
|
71
|
-
})
|
72
|
-
: value ;
|
73
|
-
if (str.length > opts.max_string)
|
74
|
-
return str.slice(0, opts.max_string + 1) + '..."';
|
75
|
-
else
|
76
|
-
return str;
|
77
|
-
}
|
78
|
-
|
79
|
-
$.print = function(obj, options) {
|
80
|
-
var opts = $.extend({}, { max_array: 10, max_string: 100 }, options);
|
81
|
-
|
82
|
-
if (typeof obj == 'undefined')
|
83
|
-
return "undefined";
|
84
|
-
else if (typeof obj == 'boolean')
|
85
|
-
return obj.toString();
|
86
|
-
else if (typeof obj == 'number')
|
87
|
-
return obj.toString();
|
88
|
-
else if (!obj)
|
89
|
-
return "null";
|
90
|
-
else if (typeof obj == 'string')
|
91
|
-
return print_string(obj, opts);
|
92
|
-
else if (obj instanceof RegExp)
|
93
|
-
return obj.toString();
|
94
|
-
else if (obj instanceof Array || obj.callee || obj.item)
|
95
|
-
return print_array(obj, opts);
|
96
|
-
else if (typeof obj == 'function' || obj instanceof Function)
|
97
|
-
return obj.toString().match(/^([^)]*\))/)[1];
|
98
|
-
else if (obj.nodeType)
|
99
|
-
return print_element(obj);
|
100
|
-
else if (obj instanceof jQuery)
|
101
|
-
return "$(" + $.print(obj.get()) + ")";
|
102
|
-
else if (obj instanceof Error)
|
103
|
-
return print_object(obj, $.extend({}, options, { max_string: 200 }));
|
104
|
-
else if (obj instanceof Object)
|
105
|
-
return print_object(obj, opts);
|
106
|
-
else
|
107
|
-
return obj.toString().replace(/\n\s*/g, '');
|
108
|
-
}
|
109
|
-
|
110
|
-
})(jQuery);
|