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