showoff 0.9.7 → 0.9.7.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 +4 -2
- data/lib/showoff/version.rb +1 -1
- data/public/css/presenter.css +4 -0
- data/public/js/presenter.js +39 -22
- data/public/js/sh_lang/sh_puppet.js +1 -1
- data/public/js/sh_lang/sh_puppet.min.js +1 -1
- data/views/presenter.erb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 756658ffcc3440e126ed64c256a82ed7f188d1e0
|
4
|
+
data.tar.gz: 6558c0816fe2ee1c4bfe1b18bf228b70f708a87e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fe546cdf496d75232a11593820ef1070c66f4089598aaf9c9679d2f593446e0b47df3e6b08815180d21edac570e4f9e517ce28bb27277d26d8520d757eab551
|
7
|
+
data.tar.gz: f6d1c58f94860d0f31982f91f3a64687fd80709a93f982a0c32a925a1189ecdf0ca6cfb773acb16495191d061e21f84762df78a0171efeb3769e13135a0cd6da
|
data/lib/showoff.rb
CHANGED
@@ -682,7 +682,9 @@ class ShowOff < Sinatra::Application
|
|
682
682
|
@all = Hash.new
|
683
683
|
@@counter.each do |slide, stats|
|
684
684
|
@all[slide] = 0
|
685
|
-
stats.map
|
685
|
+
stats.map do |host, visits|
|
686
|
+
visits.each { |entry| @all[slide] += entry['elapsed'].to_f }
|
687
|
+
end
|
686
688
|
end
|
687
689
|
|
688
690
|
# most and least five viewed slides
|
@@ -902,7 +904,7 @@ class ShowOff < Sinatra::Application
|
|
902
904
|
# a bucket of slideviews for this address
|
903
905
|
@@counter[slide][remote] ||= Array.new
|
904
906
|
# and add this slide viewing to the bucket
|
905
|
-
@@counter[slide][remote] << {
|
907
|
+
@@counter[slide][remote] << { 'elapsed' => time, 'timestamp' => Time.now.to_i, 'presenter' => @@current[:name] }
|
906
908
|
|
907
909
|
when 'position'
|
908
910
|
ws.send( { 'current' => @@current[:number] }.to_json ) unless @@cookie.nil?
|
data/lib/showoff/version.rb
CHANGED
data/public/css/presenter.css
CHANGED
data/public/js/presenter.js
CHANGED
@@ -4,9 +4,11 @@ var slaveWindow = null;
|
|
4
4
|
var paceData = [];
|
5
5
|
|
6
6
|
$(document).ready(function(){
|
7
|
-
//
|
8
|
-
|
9
|
-
|
7
|
+
// set up the presenter modes
|
8
|
+
mode = { track: false, follow: true, update: true, slave: false };
|
9
|
+
|
10
|
+
// attempt to open another window for the presentation if the mode defaults
|
11
|
+
// to enabling this. It does not by default, so this is likely a no-op.
|
10
12
|
openSlave();
|
11
13
|
|
12
14
|
// the presenter window doesn't need the reload on resize bit
|
@@ -60,9 +62,6 @@ $(document).ready(function(){
|
|
60
62
|
bind('swipeleft', presNextStep). // next
|
61
63
|
bind('swiperight', presPrevStep); // prev
|
62
64
|
|
63
|
-
// set up the presenter modes
|
64
|
-
mode = { track: false, follow: true, update: true };
|
65
|
-
|
66
65
|
$('#remoteToggle').change( toggleFollower );
|
67
66
|
$('#followerToggle').change( toggleUpdater );
|
68
67
|
|
@@ -110,28 +109,46 @@ function reportIssue() {
|
|
110
109
|
window.open(link);
|
111
110
|
}
|
112
111
|
|
112
|
+
function toggleSlave() {
|
113
|
+
mode.slave = !mode.slave;
|
114
|
+
openSlave();
|
115
|
+
}
|
116
|
+
|
113
117
|
function openSlave()
|
114
118
|
{
|
115
|
-
|
116
|
-
|
117
|
-
|
119
|
+
if (mode.slave) {
|
120
|
+
try {
|
121
|
+
if(slaveWindow == null || typeof(slaveWindow) == 'undefined' || slaveWindow.closed){
|
122
|
+
slaveWindow = window.open('/' + window.location.hash, 'toolbar');
|
123
|
+
}
|
124
|
+
else if(slaveWindow.location.hash != window.location.hash) {
|
125
|
+
// maybe we need to reset content?
|
126
|
+
slaveWindow.location.href = '/' + window.location.hash;
|
127
|
+
}
|
128
|
+
|
129
|
+
// maintain the pointer back to the parent.
|
130
|
+
slaveWindow.presenterView = window;
|
131
|
+
slaveWindow.mode = { track: false, slave: true, follow: false };
|
132
|
+
|
133
|
+
$('#slaveWindow').addClass('enabled');
|
118
134
|
}
|
119
|
-
|
120
|
-
|
121
|
-
slaveWindow.location.href = '/' + window.location.hash;
|
135
|
+
catch(e) {
|
136
|
+
console.log('Failed to open or connect slave window. Popup blocker?');
|
122
137
|
}
|
123
138
|
|
124
|
-
//
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
catch(e) {
|
129
|
-
console.log('Failed to open or connect slave window. Popup blocker?');
|
139
|
+
// Set up a maintenance loop to keep the connection between windows. I wish there were a cleaner way to do this.
|
140
|
+
if (typeof maintainSlave == 'undefined') {
|
141
|
+
maintainSlave = setInterval(openSlave, 1000);
|
142
|
+
}
|
130
143
|
}
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
144
|
+
else {
|
145
|
+
try {
|
146
|
+
slaveWindow && slaveWindow.close();
|
147
|
+
$('#slaveWindow').removeClass('enabled');
|
148
|
+
}
|
149
|
+
catch (e) {
|
150
|
+
console.log('Slave window failed to close properly.');
|
151
|
+
}
|
135
152
|
}
|
136
153
|
}
|
137
154
|
|
data/views/presenter.erb
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
<% end %>
|
39
39
|
<a id="stats" href="/stats" target="_showoffchild">Viewing Statistics</a>
|
40
40
|
<a id="downloads" href="/download" target="_showoffchild">Downloads</a>
|
41
|
-
<a id="slaveWindow" href="javascript:
|
41
|
+
<a id="slaveWindow" href="javascript:toggleSlave();" title="Enable the slave window.">Enable Slave Window</a>
|
42
42
|
<a id="generatePDF" href="/pdf" title="Call out to wkhtmltopdf to generate a PDF.">Generate PDF</a>
|
43
43
|
<a id="onePage" href="/onepage" title="Load the single page view. Useful for printing.">Single Page</a>
|
44
44
|
</span>
|
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.9.7
|
4
|
+
version: 0.9.7.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:
|
11
|
+
date: 2014-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|