deckrb 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +55 -20
- data/bin/deck +5 -10
- data/lib/deck.rb +1 -1
- data/lib/deck/noko.rb +15 -0
- data/lib/deck/rack_app.rb +61 -0
- data/lib/deck/slide.rb +50 -28
- data/lib/deck/{deck.rb → slide_deck.rb} +42 -41
- data/lib/deck/version.rb +1 -1
- data/spec/rack_app_spec.rb +177 -0
- data/spec/slide_deck_spec.rb +46 -0
- data/spec/slide_spec.rb +24 -21
- data/spec/spec_helper.rb +5 -0
- metadata +51 -81
- data/deck/GPL-license.txt +0 -278
- data/deck/MIT-license.txt +0 -21
- data/deck/README.md +0 -57
- data/deck/core/deck.core.css +0 -404
- data/deck/core/deck.core.html +0 -39
- data/deck/core/deck.core.js +0 -498
- data/deck/core/deck.core.scss +0 -447
- data/deck/extensions/goto/deck.goto.css +0 -41
- data/deck/extensions/goto/deck.goto.html +0 -7
- data/deck/extensions/goto/deck.goto.js +0 -134
- data/deck/extensions/goto/deck.goto.scss +0 -46
- data/deck/extensions/hash/deck.hash.css +0 -13
- data/deck/extensions/hash/deck.hash.html +0 -2
- data/deck/extensions/hash/deck.hash.js +0 -129
- data/deck/extensions/hash/deck.hash.scss +0 -15
- data/deck/extensions/menu/deck.menu.css +0 -47
- data/deck/extensions/menu/deck.menu.js +0 -187
- data/deck/extensions/menu/deck.menu.scss +0 -58
- data/deck/extensions/navigation/deck.navigation.css +0 -43
- data/deck/extensions/navigation/deck.navigation.html +0 -3
- data/deck/extensions/navigation/deck.navigation.js +0 -91
- data/deck/extensions/navigation/deck.navigation.scss +0 -56
- data/deck/extensions/scale/deck.scale.css +0 -16
- data/deck/extensions/scale/deck.scale.js +0 -155
- data/deck/extensions/scale/deck.scale.scss +0 -17
- data/deck/extensions/status/deck.status.css +0 -18
- data/deck/extensions/status/deck.status.html +0 -6
- data/deck/extensions/status/deck.status.js +0 -95
- data/deck/extensions/status/deck.status.scss +0 -22
- data/deck/extensions/theme-picker/deck.theme-picker.css +0 -55
- data/deck/extensions/theme-picker/deck.theme-picker.js +0 -13
- data/deck/introduction/index.html +0 -221
- data/deck/introduction/index.rb +0 -101
- data/deck/jquery-1.7.min.js +0 -4
- data/deck/modernizr.custom.js +0 -4
- data/deck/test/fixtures/complex.html +0 -24
- data/deck/test/fixtures/empty.html +0 -19
- data/deck/test/fixtures/iframe_simple.html +0 -10
- data/deck/test/fixtures/iframes.html +0 -32
- data/deck/test/fixtures/nesteds.html +0 -36
- data/deck/test/fixtures/standard.html +0 -42
- data/deck/test/index.html +0 -39
- data/deck/test/lib/jasmine-html.js +0 -190
- data/deck/test/lib/jasmine-jquery.js +0 -288
- data/deck/test/lib/jasmine.css +0 -166
- data/deck/test/lib/jasmine.js +0 -2477
- data/deck/test/settings.js +0 -3
- data/deck/test/spec.core.js +0 -434
- data/deck/test/spec.goto.js +0 -119
- data/deck/test/spec.hash.js +0 -81
- data/deck/test/spec.menu.js +0 -66
- data/deck/test/spec.navigation.js +0 -51
- data/deck/test/spec.scale.js +0 -57
- data/deck/test/spec.status.js +0 -58
- data/deck/themes/style/neon.css +0 -114
- data/deck/themes/style/neon.scss +0 -139
- data/deck/themes/style/swiss.css +0 -75
- data/deck/themes/style/swiss.scss +0 -91
- data/deck/themes/style/web-2.0.css +0 -205
- data/deck/themes/style/web-2.0.scss +0 -236
- data/deck/themes/transition/fade.css +0 -44
- data/deck/themes/transition/fade.scss +0 -70
- data/deck/themes/transition/horizontal-slide.css +0 -79
- data/deck/themes/transition/horizontal-slide.scss +0 -94
- data/deck/themes/transition/vertical-slide.css +0 -97
- data/deck/themes/transition/vertical-slide.scss +0 -116
- data/lib/deck/app.rb +0 -16
- data/spec/deck_spec.rb +0 -98
data/README.md
CHANGED
@@ -11,6 +11,13 @@
|
|
11
11
|
* Erector
|
12
12
|
* Markdown
|
13
13
|
* presentations can comprise several source files
|
14
|
+
* source files look good as source, built HTML, preview HTML, or as a deck doc
|
15
|
+
* slide directives look like comments when rendered into HTML (e.g. as <!SLIDE>)
|
16
|
+
* links to auxiliary files (e.g. `img src`) are resolved relative to the source file
|
17
|
+
* generated HTML is pretty-printed
|
18
|
+
* uses RedCarpet markdown extensions, including
|
19
|
+
* tables <http://michelf.com/projects/php-markdown/extra/#table>
|
20
|
+
* fenced code blocks <http://michelf.com/projects/php-markdown/extra/#fenced-code-blocks>
|
14
21
|
|
15
22
|
## Command-Line API (proposed)
|
16
23
|
|
@@ -18,7 +25,7 @@
|
|
18
25
|
|
19
26
|
* start a local Rack server (probably Sinatra) on port 4333
|
20
27
|
* http://localhost:4333/ serves the presentation in foo.md
|
21
|
-
* can
|
28
|
+
* can specify multiple source files in a row
|
22
29
|
|
23
30
|
`deck build foo.md`
|
24
31
|
|
@@ -29,35 +36,63 @@
|
|
29
36
|
|
30
37
|
`deck deploy` ???
|
31
38
|
|
32
|
-
* some way to build/rebuild a project that is deployable to
|
33
|
-
|
39
|
+
* some way to build/rebuild a project that is deployable to heroku
|
34
40
|
|
35
41
|
### Options
|
36
42
|
|
37
|
-
|
38
|
-
* --config deck.json
|
39
|
-
* --port portnum
|
40
|
-
* --theme themename
|
43
|
+
* none yet :-)
|
41
44
|
|
42
45
|
## Credits
|
43
46
|
|
44
|
-
* deck.js by Caleb at http://imakewebthings.com
|
45
|
-
* deck.rb by Alex Chaffee http://alexchaffee.com
|
46
|
-
* Steven! Ragnarök
|
47
|
+
* deck.js by Caleb at <http://imakewebthings.com>
|
48
|
+
* deck.rb by Alex Chaffee <http://alexchaffee.com>, with help from
|
49
|
+
* Steven! Ragnarök <http://nuclearsandwich.com>
|
50
|
+
|
51
|
+
### See Also
|
52
|
+
|
47
53
|
* showoff by Scott Chacon
|
54
|
+
* keydown by Davis Frank
|
55
|
+
|
56
|
+
## Bugs and Limitations
|
57
|
+
|
58
|
+
* auxiliary files are interleaved in URL path space, so overlapping file names might not resolve to the right file
|
59
|
+
* H1s are converted to H2s for compatibility with deck.js's CSS
|
60
|
+
* unless they're the only item on the slide, in which case they remain H1s
|
48
61
|
|
49
62
|
## TODO
|
50
63
|
|
51
|
-
*
|
52
|
-
* multiple files
|
53
|
-
* rack app
|
64
|
+
* config file
|
54
65
|
* config:
|
55
|
-
* show theme selector
|
56
|
-
* show page number/nav
|
66
|
+
* show/hide theme selector
|
67
|
+
* show/hide page number/nav
|
57
68
|
* choose deck extensions
|
58
|
-
*
|
59
|
-
*
|
69
|
+
* command-line tool can take a directory
|
70
|
+
* first pass: globs all *.md files in it
|
71
|
+
* command-line options:
|
72
|
+
* --output dir
|
73
|
+
* --config deck.json
|
74
|
+
* --port portnum
|
75
|
+
* --theme themename
|
76
|
+
* more slide file types
|
77
|
+
* html
|
78
|
+
* slim http://slim-lang.com/index.html
|
79
|
+
* haml
|
80
|
+
* tilt
|
60
81
|
* specify Redcarpet Markdown extensions
|
61
|
-
*
|
62
|
-
*
|
63
|
-
|
82
|
+
* option to render all JS and CSS inline, for a self-contained HTML doc
|
83
|
+
* and maybe images too, base64-encoded
|
84
|
+
* image scaling
|
85
|
+
* build and push into a gh-pages branch
|
86
|
+
* build and push into a heroku app
|
87
|
+
* find any lines that start with a <p>.(something) and turn them into <p class="something">
|
88
|
+
* see showoff.rb:189
|
89
|
+
* fix title tag (base it off of presentation name or something)
|
90
|
+
|
91
|
+
## TODO (community)
|
92
|
+
|
93
|
+
* submit theme-picker extension to deck.js
|
94
|
+
* add to deck.js wiki https://github.com/imakewebthings/deck.js/wiki
|
95
|
+
* announce on https://groups.google.com/forum/#!forum/webslideshow
|
96
|
+
* mix with keydown https://github.com/infews/keydown
|
97
|
+
* gh-pages documentation site
|
98
|
+
* integrate with slideshow https://github.com/geraldb/slideshow-deck.js
|
data/bin/deck
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
here = File.expand_path(File.dirname(__FILE__))
|
4
|
-
root = File.join(here, '..')
|
5
4
|
$: << File.join(here, '..', 'lib')
|
6
5
|
|
7
6
|
require "rack"
|
8
7
|
require "deck"
|
9
|
-
require "deck/
|
8
|
+
require "deck/rack_app"
|
10
9
|
|
11
10
|
command = ARGV.shift
|
12
11
|
|
@@ -26,7 +25,7 @@ when 'build'
|
|
26
25
|
end
|
27
26
|
|
28
27
|
File.open(output_path, "w") do |file|
|
29
|
-
deck =
|
28
|
+
deck = SlideDeck.new :slides => slides
|
30
29
|
# deck.to_pretty(:output => file) # todo: figure out why this doesn't work
|
31
30
|
file.write deck.to_pretty
|
32
31
|
end
|
@@ -36,14 +35,10 @@ when 'run'
|
|
36
35
|
# Fix Rack bug https://github.com/rack/rack/issues/301
|
37
36
|
require 'deck/rack_static_patch'
|
38
37
|
|
38
|
+
|
39
39
|
port = 4333 # todo: option
|
40
|
-
|
41
|
-
|
42
|
-
use Rack::ShowStatus
|
43
|
-
use Rack::Static, :urls => ["/deck"], :root => root
|
44
|
-
run Deck::App.new(Dir.pwd, ARGV)
|
45
|
-
end
|
46
|
-
Rack::Handler.default.run app, :Port => port
|
40
|
+
slide_files = ARGV
|
41
|
+
Rack::Handler.default.run Deck::RackApp.build(slide_files), :Port => port
|
47
42
|
|
48
43
|
else
|
49
44
|
puts "Unknown command '#{command}'"
|
data/lib/deck.rb
CHANGED
data/lib/deck/noko.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Deck
|
4
|
+
# Wrappers around Nokogiri's occasionally inscrutable API
|
5
|
+
module Noko
|
6
|
+
def noko_html nokogiri_node
|
7
|
+
nokogiri_node.serialize(:save_with => 0).chomp
|
8
|
+
end
|
9
|
+
|
10
|
+
def noko_doc html_snippet
|
11
|
+
html_doc = html_snippet =~ /<html/ ? html_snippet : "<html>#{html_snippet}</html>"
|
12
|
+
Nokogiri.parse(html_doc)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
here = File.expand_path File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'coderay'
|
4
|
+
require 'rack/codehighlighter'
|
5
|
+
|
6
|
+
module Deck
|
7
|
+
class RackApp
|
8
|
+
def self.app_root
|
9
|
+
here = File.dirname(__FILE__)
|
10
|
+
app_root = File.expand_path "#{here}/../.."
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.build slide_files
|
14
|
+
|
15
|
+
if const_defined?(:Thin)
|
16
|
+
if require "thin/logging"
|
17
|
+
Thin::Logging.debug = true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Rack::Builder.app do
|
22
|
+
use Rack::ShowExceptions
|
23
|
+
use Rack::ShowStatus
|
24
|
+
use Rack::Codehighlighter, :coderay,
|
25
|
+
:element => "pre>code",
|
26
|
+
:markdown => true,
|
27
|
+
:pattern => /\A[:@]{3}\s?(\w+)\s*(\n|
)/i
|
28
|
+
run ::Deck::RackApp.new(slide_files)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize slide_files
|
33
|
+
@slide_files = [slide_files].flatten
|
34
|
+
|
35
|
+
@file_servers =
|
36
|
+
[Rack::File.new("#{::Deck::RackApp.app_root}/public")] +
|
37
|
+
@slide_files.map do |slide_file|
|
38
|
+
Rack::File.new(File.dirname slide_file)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def call env
|
43
|
+
request = Rack::Request.new(env)
|
44
|
+
if request.path == "/"
|
45
|
+
slides = []
|
46
|
+
@slide_files.each do |file|
|
47
|
+
slides += Slide.from_file file
|
48
|
+
end
|
49
|
+
deck = SlideDeck.new :slides => slides
|
50
|
+
[200, {'Content-Type' => 'text/html'}, [deck.to_pretty]]
|
51
|
+
else
|
52
|
+
result = [404, {}, []]
|
53
|
+
@file_servers.each do |file_server|
|
54
|
+
result = file_server.call(env)
|
55
|
+
return result if result.first < 400
|
56
|
+
end
|
57
|
+
result
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/deck/slide.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# based on work by Alex and others in Showoff
|
2
2
|
require 'redcarpet'
|
3
|
-
|
3
|
+
require 'deck/noko'
|
4
4
|
|
5
5
|
module Deck
|
6
6
|
class Slide < Erector::Widget
|
7
7
|
|
8
|
+
include Deck::Noko
|
9
|
+
|
8
10
|
# todo: test this method
|
9
11
|
def self.from_file markdown_file
|
10
12
|
split File.read(markdown_file)
|
@@ -12,8 +14,10 @@ module Deck
|
|
12
14
|
|
13
15
|
# given a chunk of Markdown text, splits it into an array of Slide objects
|
14
16
|
def self.split content
|
15
|
-
unless content =~ /^\<?!SLIDE/m
|
16
|
-
content = content.
|
17
|
+
unless content =~ /^\<?!SLIDE/m # this only applies to files with no !SLIDEs at all, which is odd
|
18
|
+
content = content.
|
19
|
+
gsub(/^# /m, "<!SLIDE>\n# ").
|
20
|
+
gsub(/^(.*)\n(===+)/, "<!SLIDE>\n\\1\n\\2")
|
17
21
|
end
|
18
22
|
|
19
23
|
lines = content.split("\n")
|
@@ -24,7 +28,7 @@ module Deck
|
|
24
28
|
if line =~ /^<?!SLIDE(.*)>?/
|
25
29
|
slides << (slide = Slide.new(:classes => $1))
|
26
30
|
|
27
|
-
elsif line =~ /^# / and !slide.empty?
|
31
|
+
elsif (line =~ /^# / or lines.first =~ /^(===+)/) and !slide.empty?
|
28
32
|
# every H1 defines a new slide, unless there's a !SLIDE before it
|
29
33
|
slides << (slide = Slide.new)
|
30
34
|
slide << line
|
@@ -44,15 +48,15 @@ module Deck
|
|
44
48
|
attr_reader :classes, :markdown_text
|
45
49
|
|
46
50
|
needs :classes => nil, :markdown_text => nil, :slide_id => nil
|
47
|
-
|
48
|
-
|
51
|
+
|
52
|
+
|
49
53
|
def initialize options = {}
|
50
54
|
super options
|
51
|
-
|
55
|
+
|
52
56
|
@classes = process_classes
|
53
57
|
@markdown_text = ""
|
54
58
|
end
|
55
|
-
|
59
|
+
|
56
60
|
def process_classes
|
57
61
|
["slide"] + case @classes
|
58
62
|
when NilClass
|
@@ -64,7 +68,7 @@ module Deck
|
|
64
68
|
else
|
65
69
|
raise "can't deal with :classes => #{@classes.inspect}"
|
66
70
|
end
|
67
|
-
end
|
71
|
+
end
|
68
72
|
|
69
73
|
def markdown
|
70
74
|
@@markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML,
|
@@ -79,42 +83,60 @@ module Deck
|
|
79
83
|
:superscript => false
|
80
84
|
)
|
81
85
|
end
|
82
|
-
|
86
|
+
|
83
87
|
def <<(s)
|
84
88
|
@markdown_text << s
|
85
89
|
@markdown_text << "\n"
|
86
90
|
end
|
87
|
-
|
91
|
+
|
88
92
|
def empty?
|
89
93
|
@markdown_text.strip == ""
|
90
94
|
end
|
91
|
-
|
95
|
+
|
92
96
|
def slide_id
|
93
97
|
@slide_id ||= begin
|
94
98
|
lines = @markdown_text.split("\n")
|
95
99
|
raise "an empty slide has no id" if lines.empty?
|
96
|
-
lines.first.
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def header_only?
|
101
|
-
markdown_text.strip =~ /^# / and markdown_text.strip.split("\n").size == 1
|
102
|
-
end
|
103
|
-
|
104
|
-
def massaged_markdown_text
|
105
|
-
unless header_only?
|
106
|
-
"##{markdown_text.strip}"
|
107
|
-
else
|
108
|
-
markdown_text
|
100
|
+
lines.first.downcase.gsub(/[^\w\s]/, '').strip.gsub(/\s/, '_')
|
109
101
|
end
|
110
102
|
end
|
111
|
-
|
103
|
+
|
112
104
|
def content
|
113
105
|
section :class => @classes, :id => slide_id do
|
114
106
|
text "\n" # markdown HTML should be left-aligned, in case of PRE blocks and other quirks
|
115
|
-
html = markdown.render(
|
107
|
+
html = markdown.render(markdown_text)
|
108
|
+
html = munge(html)
|
116
109
|
rawtext html
|
117
|
-
end
|
110
|
+
end
|
118
111
|
end
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
# if there is an H1, change it to an H2, unless it's the only thing there
|
116
|
+
# TODO: or unless the slide class is whatever
|
117
|
+
def mutate_h1? doc
|
118
|
+
h1s = doc.css('h1') || []
|
119
|
+
if h1s.size == 0
|
120
|
+
false
|
121
|
+
else
|
122
|
+
stuff = doc.css('body>*')
|
123
|
+
if stuff.size == 1
|
124
|
+
false
|
125
|
+
else
|
126
|
+
true
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def munge html
|
132
|
+
doc = noko_doc(html)
|
133
|
+
if mutate_h1? doc
|
134
|
+
doc.css('h1').each {|node| node.node_name = "h2"}
|
135
|
+
doc.css('body').inner_html + "\n"
|
136
|
+
else
|
137
|
+
html
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
119
141
|
end
|
120
142
|
end
|
@@ -4,23 +4,23 @@ require 'redcarpet'
|
|
4
4
|
require "deck/slide"
|
5
5
|
|
6
6
|
module Deck
|
7
|
-
class
|
7
|
+
class SlideDeck < Erector::Widgets::Page
|
8
8
|
needs :title => "deck.rb presentation",
|
9
9
|
:description => nil,
|
10
10
|
:author => nil
|
11
|
-
|
11
|
+
|
12
12
|
needs :slides => nil
|
13
|
-
|
13
|
+
|
14
14
|
def page_title
|
15
15
|
@title
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
# todo: promote into Text
|
19
19
|
# todo: support numbers a la 'Ӓ'
|
20
20
|
def entity entity_id
|
21
21
|
raw("&#{entity_id};")
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
# left over from deck.js' introduction/index.html
|
25
25
|
|
26
26
|
# <!DOCTYPE html>
|
@@ -34,54 +34,55 @@ module Deck
|
|
34
34
|
link({:rel => "stylesheet", :href => src}.merge(attributes))
|
35
35
|
end
|
36
36
|
|
37
|
+
def extensions
|
38
|
+
@extensions || [
|
39
|
+
'goto',
|
40
|
+
'menu',
|
41
|
+
'navigation',
|
42
|
+
'status',
|
43
|
+
'hash',
|
44
|
+
'scale',
|
45
|
+
# 'theme-picker',
|
46
|
+
]
|
47
|
+
end
|
48
|
+
|
37
49
|
def head_content
|
38
50
|
super
|
39
51
|
meta 'charset' => 'utf-8'
|
40
52
|
meta 'http-equiv'=>"X-UA-Compatible", 'content'=>"IE=edge,chrome=1"
|
41
|
-
meta :name=>"viewport", :content=>"width=1024, user-scalable=no"
|
53
|
+
meta :name => "viewport", :content=> "width=1024, user-scalable=no"
|
42
54
|
meta :name => "description", :content=> @description if @description
|
43
55
|
meta :name => "author", :content=> @author if @author
|
44
56
|
|
57
|
+
stylesheet "coderay.css"
|
58
|
+
|
45
59
|
# <!-- Core and extension CSS files -->
|
46
|
-
stylesheet "deck/core/deck.core.css"
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
stylesheet "deck/extensions/status/deck.status.css"
|
52
|
-
stylesheet "deck/extensions/hash/deck.hash.css"
|
53
|
-
stylesheet "deck/extensions/scale/deck.scale.css"
|
54
|
-
|
55
|
-
stylesheet "deck/extensions/theme-picker/deck.theme-picker.css"
|
56
|
-
|
60
|
+
stylesheet "deck.js/core/deck.core.css"
|
61
|
+
extensions.each do |extension|
|
62
|
+
stylesheet "deck.js/extensions/#{extension}/deck.#{extension}.css"
|
63
|
+
end
|
64
|
+
|
57
65
|
# <!-- Theme CSS files (menu swaps these out) -->
|
58
|
-
stylesheet "deck/themes/style/
|
59
|
-
stylesheet "deck/themes/transition/horizontal-slide.css", :id => "transition-theme-link"
|
60
|
-
|
61
|
-
script :src=>"deck/modernizr.custom.js"
|
66
|
+
stylesheet "deck.js/themes/style/swiss.css", :id=>"style-theme-link"
|
62
67
|
end
|
63
68
|
|
64
69
|
def scripts
|
70
|
+
script :src => "deck.js/modernizr.custom.js"
|
71
|
+
|
65
72
|
# comment 'Grab CDN jQuery, with a protocol relative URL; fall back to local if offline'
|
66
73
|
# script :src => '//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.min.js'
|
67
|
-
script :src => '
|
68
|
-
|
69
|
-
comment 'Deck Core and extensions'
|
70
|
-
script :type => "text/javascript", :src => 'deck/core/deck.core.js'
|
74
|
+
script :src => 'deck.js/jquery-1.7.min.js'
|
71
75
|
|
72
|
-
|
73
|
-
script :type => "text/javascript", :src => 'deck/
|
74
|
-
script :type => "text/javascript", :src => 'deck/extensions/goto/deck.goto.js'
|
75
|
-
script :type => "text/javascript", :src => 'deck/extensions/status/deck.status.js'
|
76
|
-
script :type => "text/javascript", :src => 'deck/extensions/navigation/deck.navigation.js'
|
77
|
-
script :type => "text/javascript", :src => 'deck/extensions/scale/deck.scale.js'
|
76
|
+
comment 'Deck Core and extensions'
|
77
|
+
script :type => "text/javascript", :src => 'deck.js/core/deck.core.js'
|
78
78
|
|
79
|
+
extensions.each do |extension|
|
80
|
+
script :type => "text/javascript", :src => "deck.js/extensions/#{extension}/deck.#{extension}.js"
|
81
|
+
end
|
79
82
|
|
80
83
|
# fire up deck.js
|
81
84
|
script "$(function(){$.deck('.slide');});"
|
82
|
-
|
83
|
-
script :type => "text/javascript", :src => 'deck/extensions/theme-picker/deck.theme-picker.js'
|
84
|
-
|
85
|
+
|
85
86
|
end
|
86
87
|
|
87
88
|
def body_attributes
|
@@ -96,7 +97,7 @@ module Deck
|
|
96
97
|
permalink
|
97
98
|
scripts
|
98
99
|
end
|
99
|
-
|
100
|
+
|
100
101
|
def slide slide_id
|
101
102
|
# todo: use Slide object, but without markdown
|
102
103
|
# slide = Slide.new(:slide_id => slide_id)
|
@@ -104,7 +105,7 @@ module Deck
|
|
104
105
|
yield
|
105
106
|
end
|
106
107
|
end
|
107
|
-
|
108
|
+
|
108
109
|
def slides
|
109
110
|
if @slides
|
110
111
|
@slides.each do |slide|
|
@@ -114,14 +115,14 @@ module Deck
|
|
114
115
|
default_slide
|
115
116
|
end
|
116
117
|
end
|
117
|
-
|
118
|
+
|
118
119
|
def default_slide
|
119
120
|
slide 'readme' do
|
120
121
|
h2 "deck.rb"
|
121
122
|
ul {
|
122
123
|
li "based on deck.js"
|
123
124
|
li "create a subclass of Deck (see introduction.rb)"
|
124
|
-
li "run erector to build it"
|
125
|
+
li "run erector to build it"
|
125
126
|
}
|
126
127
|
pre "erector --to-html ./deck.rb # generates deck.html"
|
127
128
|
end
|
@@ -145,7 +146,7 @@ module Deck
|
|
145
146
|
end
|
146
147
|
end
|
147
148
|
end
|
148
|
-
|
149
|
+
|
149
150
|
def goto_slide
|
150
151
|
form :action => '.', :method => 'get', :class => 'goto-form' do
|
151
152
|
label :for => 'goto-slide' do
|
@@ -161,6 +162,6 @@ module Deck
|
|
161
162
|
def permalink
|
162
163
|
a "#", :href => '.', :title => 'Permalink to this slide', :class => 'deck-permalink'
|
163
164
|
end
|
164
|
-
|
165
|
+
|
165
166
|
end
|
166
|
-
end
|
167
|
+
end
|