showoff 0.6.0 → 0.7.0
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.
- data/Rakefile +20 -0
- data/bin/showoff +44 -1
- data/lib/showoff.rb +19 -13
- data/lib/showoff_utils.rb +4 -35
- data/public/css/960.css +653 -0
- data/public/css/presenter.css +66 -0
- data/public/js/presenter.js +129 -0
- data/public/js/showoff.js +19 -15
- data/views/header.erb +40 -0
- data/views/index.erb +1 -41
- data/views/presenter.erb +64 -0
- metadata +8 -4
- data/lib/princely.rb +0 -84
@@ -0,0 +1,66 @@
|
|
1
|
+
div.zoomed {
|
2
|
+
zoom: 50%;
|
3
|
+
-moz-transform: scale(50%);
|
4
|
+
}
|
5
|
+
|
6
|
+
#preso { margin-top: 20px; }
|
7
|
+
|
8
|
+
#main h2 {
|
9
|
+
text-align: left;
|
10
|
+
font-size: 1.5em;
|
11
|
+
}
|
12
|
+
|
13
|
+
#progress {
|
14
|
+
padding: 10px;
|
15
|
+
}
|
16
|
+
#slideSource {
|
17
|
+
padding: 10px;
|
18
|
+
background: #9d9;
|
19
|
+
}
|
20
|
+
|
21
|
+
#preview {
|
22
|
+
min-height: 430px;
|
23
|
+
background: #777;
|
24
|
+
}
|
25
|
+
|
26
|
+
#links {
|
27
|
+
background: #fff;
|
28
|
+
padding: 10px;
|
29
|
+
text-align: right;
|
30
|
+
}
|
31
|
+
#links a { color: #000; }
|
32
|
+
|
33
|
+
#slidemenu {
|
34
|
+
background: #fff;
|
35
|
+
padding: 10px;
|
36
|
+
}
|
37
|
+
#slidemenu ul li {
|
38
|
+
padding: 5px;
|
39
|
+
}
|
40
|
+
|
41
|
+
#sidebar { background: #ddd; }
|
42
|
+
|
43
|
+
#notes {
|
44
|
+
background: #ff9;
|
45
|
+
font-size: 1.5em;
|
46
|
+
min-height: 150px;
|
47
|
+
padding: 20px;
|
48
|
+
}
|
49
|
+
|
50
|
+
.menu {
|
51
|
+
height: 350px;
|
52
|
+
max-height: 350px;
|
53
|
+
overflow:auto;
|
54
|
+
}
|
55
|
+
|
56
|
+
.menu a {
|
57
|
+
display: block;
|
58
|
+
color: #000;
|
59
|
+
}
|
60
|
+
.menu > ul > li > ul {
|
61
|
+
padding-left: 20px;
|
62
|
+
}
|
63
|
+
.menu > ul > li > a {
|
64
|
+
padding: 10px;
|
65
|
+
background: #eee;
|
66
|
+
}
|
@@ -0,0 +1,129 @@
|
|
1
|
+
// presenter js
|
2
|
+
var w = null;
|
3
|
+
|
4
|
+
$(function(){
|
5
|
+
w = window.open('/');
|
6
|
+
// side menu accordian crap
|
7
|
+
$("#preso").bind("showoff:loaded", function (event) {
|
8
|
+
$(".menu > ul ul").hide()
|
9
|
+
$(".menu > ul a").click(function() {
|
10
|
+
if ($(this).next().is('ul')) {
|
11
|
+
$(this).next().toggle()
|
12
|
+
} else {
|
13
|
+
gotoSlide($(this).attr('rel'))
|
14
|
+
w.gotoSlide($(this).attr('rel'))
|
15
|
+
postSlide()
|
16
|
+
}
|
17
|
+
return false
|
18
|
+
}).next().hide()
|
19
|
+
})
|
20
|
+
});
|
21
|
+
|
22
|
+
function presPrevStep()
|
23
|
+
{
|
24
|
+
prevStep()
|
25
|
+
w.prevStep()
|
26
|
+
postSlide()
|
27
|
+
}
|
28
|
+
|
29
|
+
function presNextStep()
|
30
|
+
{
|
31
|
+
nextStep()
|
32
|
+
w.nextStep()
|
33
|
+
postSlide()
|
34
|
+
}
|
35
|
+
|
36
|
+
function postSlide()
|
37
|
+
{
|
38
|
+
if(currentSlide) {
|
39
|
+
var notes = w.getCurrentNotes()
|
40
|
+
var fileName = currentSlide.children().first().attr('ref')
|
41
|
+
$('#notes').text(notes)
|
42
|
+
$('#slideFile').text(fileName)
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
// See e.g. http://www.quirksmode.org/js/keys.html for keycodes
|
47
|
+
function keyDown(event)
|
48
|
+
{
|
49
|
+
var key = event.keyCode;
|
50
|
+
|
51
|
+
if (event.ctrlKey || event.altKey || event.metaKey)
|
52
|
+
return true;
|
53
|
+
|
54
|
+
debug('keyDown: ' + key)
|
55
|
+
|
56
|
+
if (key >= 48 && key <= 57) // 0 - 9
|
57
|
+
{
|
58
|
+
gotoSlidenum = gotoSlidenum * 10 + (key - 48);
|
59
|
+
return true;
|
60
|
+
}
|
61
|
+
|
62
|
+
if (key == 13) {
|
63
|
+
if (gotoSlidenum > 0) {
|
64
|
+
debug('go to ' + gotoSlidenum);
|
65
|
+
slidenum = gotoSlidenum - 1;
|
66
|
+
showSlide(true);
|
67
|
+
w.slidenum = gotoSlidenum - 1;
|
68
|
+
w.showSlide(true);
|
69
|
+
gotoSlidenum = 0;
|
70
|
+
} else {
|
71
|
+
debug('executeCode');
|
72
|
+
executeAnyCode();
|
73
|
+
w.executeAnyCode();
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
if (key == 16) // shift key
|
78
|
+
{
|
79
|
+
shiftKeyActive = true;
|
80
|
+
}
|
81
|
+
|
82
|
+
if (key == 32) // space bar
|
83
|
+
{
|
84
|
+
if (shiftKeyActive) {
|
85
|
+
presPrevStep()
|
86
|
+
} else {
|
87
|
+
presNextStep()
|
88
|
+
}
|
89
|
+
}
|
90
|
+
else if (key == 68) // 'd' for debug
|
91
|
+
{
|
92
|
+
debugMode = !debugMode
|
93
|
+
doDebugStuff()
|
94
|
+
}
|
95
|
+
else if (key == 37 || key == 33 || key == 38) // Left arrow, page up, or up arrow
|
96
|
+
{
|
97
|
+
presPrevStep()
|
98
|
+
}
|
99
|
+
else if (key == 39 || key == 34 || key == 40) // Right arrow, page down, or down arrow
|
100
|
+
{
|
101
|
+
presNextStep()
|
102
|
+
}
|
103
|
+
else if (key == 84 || key == 67) // T or C for table of contents
|
104
|
+
{
|
105
|
+
$('#navmenu').toggle().trigger('click')
|
106
|
+
}
|
107
|
+
else if (key == 90 || key == 191) // z or ? for help
|
108
|
+
{
|
109
|
+
$('#help').toggle()
|
110
|
+
}
|
111
|
+
else if (key == 66 || key == 70) // f for footer (also "b" which is what kensington remote "stop" button sends
|
112
|
+
{
|
113
|
+
toggleFooter()
|
114
|
+
}
|
115
|
+
else if (key == 78) // 'n' for notes
|
116
|
+
{
|
117
|
+
toggleNotes()
|
118
|
+
}
|
119
|
+
else if (key == 27) // esc
|
120
|
+
{
|
121
|
+
removeResults();
|
122
|
+
w.removeResults();
|
123
|
+
}
|
124
|
+
else if (key == 80) // 'p' for preshow
|
125
|
+
{
|
126
|
+
w.togglePreShow();
|
127
|
+
}
|
128
|
+
return true
|
129
|
+
}
|
data/public/js/showoff.js
CHANGED
@@ -309,6 +309,22 @@ function toggleNotes()
|
|
309
309
|
}
|
310
310
|
}
|
311
311
|
|
312
|
+
function executeAnyCode()
|
313
|
+
{
|
314
|
+
var $jsCode = $('.execute .sh_javascript code:visible')
|
315
|
+
if ($jsCode.length > 0) {
|
316
|
+
executeCode.call($jsCode);
|
317
|
+
}
|
318
|
+
var $rubyCode = $('.execute .sh_ruby code:visible')
|
319
|
+
if ($rubyCode.length > 0) {
|
320
|
+
executeRuby.call($rubyCode);
|
321
|
+
}
|
322
|
+
var $coffeeCode = $('.execute .sh_coffeescript code:visible')
|
323
|
+
if ($coffeeCode.length > 0) {
|
324
|
+
executeCoffee.call($coffeeCode);
|
325
|
+
}
|
326
|
+
}
|
327
|
+
|
312
328
|
function debug(data)
|
313
329
|
{
|
314
330
|
$('#debugInfo').text(data)
|
@@ -338,20 +354,8 @@ function keyDown(event)
|
|
338
354
|
gotoSlidenum = 0;
|
339
355
|
} else {
|
340
356
|
debug('executeCode');
|
341
|
-
|
342
|
-
if ($jsCode.length > 0) {
|
343
|
-
executeCode.call($jsCode);
|
344
|
-
}
|
345
|
-
var $rubyCode = $('.execute .sh_ruby code:visible')
|
346
|
-
if ($rubyCode.length > 0) {
|
347
|
-
executeRuby.call($rubyCode);
|
348
|
-
}
|
349
|
-
var $coffeeCode = $('.execute .sh_coffeescript code:visible')
|
350
|
-
if ($coffeeCode.length > 0) {
|
351
|
-
executeCoffee.call($coffeeCode);
|
352
|
-
}
|
357
|
+
executeAnyCode();
|
353
358
|
}
|
354
|
-
|
355
359
|
}
|
356
360
|
|
357
361
|
|
@@ -410,7 +414,7 @@ function keyDown(event)
|
|
410
414
|
}
|
411
415
|
else if (key == 80) // 'p' for preshow
|
412
416
|
{
|
413
|
-
|
417
|
+
togglePreShow();
|
414
418
|
}
|
415
419
|
return true
|
416
420
|
}
|
@@ -539,7 +543,7 @@ var preshow_images;
|
|
539
543
|
var preshow_imagesTotal = 0;
|
540
544
|
var preshow_des = null;
|
541
545
|
|
542
|
-
function
|
546
|
+
function togglePreShow() {
|
543
547
|
if(preshow_running) {
|
544
548
|
stopPreShow()
|
545
549
|
} else {
|
data/views/header.erb
ADDED
@@ -0,0 +1,40 @@
|
|
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
|
+
<script type="text/javascript" src="<%= @asset_path %>js/jquery-1.4.2.min.js"></script>
|
10
|
+
<script type="text/javascript" src="<%= @asset_path %>js/jquery.cycle.all.js"></script>
|
11
|
+
<script type="text/javascript" src="<%= @asset_path %>js/jquery-print.js"></script>
|
12
|
+
<script type="text/javascript" src="<%= @asset_path %>js/jquery.batchImageLoad.js"></script>
|
13
|
+
|
14
|
+
<script type="text/javascript" src="<%= @asset_path %>js/jquery.doubletap-0.1.js"></script>
|
15
|
+
|
16
|
+
<script type="text/javascript" src="<%= @asset_path %>js/fg.menu.js"></script>
|
17
|
+
<script type="text/javascript" src="<%= @asset_path %>js/showoff.js"></script>
|
18
|
+
<script type="text/javascript" src="<%= @asset_path %>js/jTypeWriter.js"> </script>
|
19
|
+
<script type="text/javascript" src="<%= @asset_path %>js/sh_main.min.js"></script>
|
20
|
+
<script type="text/javascript" src="<%= @asset_path %>js/core.js"></script>
|
21
|
+
<script type="text/javascript" src="<%= @asset_path %>js/showoffcore.js"></script>
|
22
|
+
<script type="text/javascript" src="<%= @asset_path %>js/coffee-script.js"></script>
|
23
|
+
|
24
|
+
<link type="text/css" href="<%= @asset_path %>css/fg.menu.css" media="screen" rel="stylesheet" />
|
25
|
+
<link type="text/css" href="<%= @asset_path %>css/theme/ui.all.css" media="screen" rel="stylesheet" />
|
26
|
+
<link type="text/css" href="<%= @asset_path %>css/sh_style.css" rel="stylesheet" >
|
27
|
+
|
28
|
+
<% css_files.each do |css_file| %>
|
29
|
+
<link rel="stylesheet" href="file/<%= css_file %>" type="text/css"/>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
<% js_files.each do |js_file| %>
|
33
|
+
<script type="text/javascript" src="file/<%= js_file %>"></script>
|
34
|
+
<% end %>
|
35
|
+
|
36
|
+
<script type="text/javascript">
|
37
|
+
$(function(){
|
38
|
+
setupPreso(<%= @slides.nil? ? "true" : "false"%>, '<%= @asset_path %>');
|
39
|
+
});
|
40
|
+
</script>
|
data/views/index.erb
CHANGED
@@ -3,51 +3,11 @@
|
|
3
3
|
|
4
4
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
5
|
<head>
|
6
|
-
|
7
|
-
<title><%= @title %></title>
|
8
|
-
|
9
|
-
<meta name="viewport" content="width=device-width"/>
|
10
|
-
|
11
|
-
<link rel="stylesheet" href="<%= @asset_path %>css/reset.css" type="text/css"/>
|
12
|
-
<link rel="stylesheet" href="<%= @asset_path %>css/showoff.css" type="text/css"/>
|
13
|
-
|
14
|
-
<script type="text/javascript" src="<%= @asset_path %>js/jquery-1.4.2.min.js"></script>
|
15
|
-
<script type="text/javascript" src="<%= @asset_path %>js/jquery.cycle.all.js"></script>
|
16
|
-
<script type="text/javascript" src="<%= @asset_path %>js/jquery-print.js"></script>
|
17
|
-
<script type="text/javascript" src="<%= @asset_path %>js/jquery.batchImageLoad.js"></script>
|
18
|
-
|
19
|
-
<script type="text/javascript" src="<%= @asset_path %>js/jquery.doubletap-0.1.js"></script>
|
20
|
-
|
21
|
-
<script type="text/javascript" src="<%= @asset_path %>js/fg.menu.js"></script>
|
22
|
-
<script type="text/javascript" src="<%= @asset_path %>js/showoff.js"></script>
|
23
|
-
<script type="text/javascript" src="<%= @asset_path %>js/jTypeWriter.js"> </script>
|
24
|
-
<script type="text/javascript" src="<%= @asset_path %>js/sh_main.min.js"></script>
|
25
|
-
<script type="text/javascript" src="<%= @asset_path %>js/core.js"></script>
|
26
|
-
<script type="text/javascript" src="<%= @asset_path %>js/showoffcore.js"></script>
|
27
|
-
<script type="text/javascript" src="<%= @asset_path %>js/coffee-script.js"></script>
|
28
|
-
|
29
|
-
<link type="text/css" href="<%= @asset_path %>css/fg.menu.css" media="screen" rel="stylesheet" />
|
30
|
-
<link type="text/css" href="<%= @asset_path %>css/theme/ui.all.css" media="screen" rel="stylesheet" />
|
31
|
-
<link type="text/css" href="<%= @asset_path %>css/sh_style.css" rel="stylesheet" >
|
32
|
-
|
33
|
-
<% css_files.each do |css_file| %>
|
34
|
-
<link rel="stylesheet" href="file/<%= css_file %>" type="text/css"/>
|
35
|
-
<% end %>
|
36
|
-
|
37
|
-
<% js_files.each do |js_file| %>
|
38
|
-
<script type="text/javascript" src="file/<%= js_file %>"></script>
|
39
|
-
<% end %>
|
40
|
-
|
41
|
-
<script type="text/javascript">
|
42
|
-
$(function(){
|
43
|
-
setupPreso(<%= @slides.nil? ? "true" : "false"%>, '<%= @asset_path %>');
|
44
|
-
});
|
45
|
-
</script>
|
6
|
+
<%= erb :header %>
|
46
7
|
</head>
|
47
8
|
|
48
9
|
<body>
|
49
10
|
|
50
|
-
|
51
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>
|
52
12
|
<div id="navigation" class="hidden"></div>
|
53
13
|
|
data/views/presenter.erb
ADDED
@@ -0,0 +1,64 @@
|
|
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 %>
|
7
|
+
<link rel="stylesheet" href="<%= @asset_path %>css/960.css" type="text/css"/>
|
8
|
+
<link rel="stylesheet" href="<%= @asset_path %>css/presenter.css" type="text/css"/>
|
9
|
+
<script type="text/javascript" src="<%= @asset_path %>js/presenter.js"></script>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body>
|
13
|
+
|
14
|
+
<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>
|
15
|
+
|
16
|
+
<div id="help">
|
17
|
+
<table>
|
18
|
+
<tr><td class="key">z, ?</td><td>toggle help (this)</td></tr>
|
19
|
+
<tr><td class="key">space, →</td><td>next slide</td></tr>
|
20
|
+
<tr><td class="key">shift-space, ←</td><td>previous slide</td></tr>
|
21
|
+
<tr><td class="key">d</td><td>toggle debug mode</td></tr>
|
22
|
+
<tr><td class="key">## <ret></td><td>go to slide #</td></tr>
|
23
|
+
<tr><td class="key">c, t</td><td>table of contents (vi)</td></tr>
|
24
|
+
<tr><td class="key">r</td><td>reload slides</td></tr>
|
25
|
+
<tr><td class="key">p</td><td>run preshow</td></tr>
|
26
|
+
</table>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div id="main" class="container_12">
|
30
|
+
<div id="topbar" class="grid_12">
|
31
|
+
<div id="links">
|
32
|
+
<a href="/pdf">Generate PDF</a>
|
33
|
+
|
34
|
+
<a href="/onepage">Single Page</a>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div class="clear"></div>
|
38
|
+
<div id="sidebar" class="grid_4">
|
39
|
+
<div id="progress">
|
40
|
+
Slide: <span id="slideInfo"></span>
|
41
|
+
</div>
|
42
|
+
<div id="slideSource">
|
43
|
+
Source: <span id="slideFile"></span>
|
44
|
+
</div>
|
45
|
+
<div id="debugInfo"></div>
|
46
|
+
<div id="slidemenu">
|
47
|
+
<div id="navigation" class="menu"></div>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<div id="preview" class="grid_8">
|
51
|
+
<div id="preso" class="zoomed">loading presentation...</div>
|
52
|
+
</div>
|
53
|
+
<div class="clear"></div>
|
54
|
+
<div id="bottom" class="grid_12">
|
55
|
+
<div id="notes"></div>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
|
59
|
+
<div id="slides" class="offscreen" <%= 'style="display:none;"' if @slides %>>
|
60
|
+
<%= @slides %>
|
61
|
+
</div>
|
62
|
+
|
63
|
+
</body>
|
64
|
+
</html>
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: showoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 7
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Scott Chacon
|
@@ -131,14 +131,17 @@ files:
|
|
131
131
|
- LICENSE
|
132
132
|
- bin/showoff
|
133
133
|
- lib/commandline_parser.rb
|
134
|
-
- lib/princely.rb
|
135
134
|
- lib/showoff.rb
|
136
135
|
- lib/showoff_utils.rb
|
136
|
+
- views/header.erb
|
137
137
|
- views/index.erb
|
138
138
|
- views/onepage.erb
|
139
|
+
- views/presenter.erb
|
140
|
+
- public/css/960.css
|
139
141
|
- public/css/fg.menu.css
|
140
142
|
- public/css/onepage.css
|
141
143
|
- public/css/pdf.css
|
144
|
+
- public/css/presenter.css
|
142
145
|
- public/css/reset.css
|
143
146
|
- public/css/sh_style.css
|
144
147
|
- public/css/showoff.css
|
@@ -183,6 +186,7 @@ files:
|
|
183
186
|
- public/js/jquery.ws-0.3pre.js
|
184
187
|
- public/js/jTypeWriter.js
|
185
188
|
- public/js/onepage.js
|
189
|
+
- public/js/presenter.js
|
186
190
|
- public/js/sh_lang/sh_bison.min.js
|
187
191
|
- public/js/sh_lang/sh_c.min.js
|
188
192
|
- public/js/sh_lang/sh_caml.min.js
|