deckrb 0.4.2 → 0.5.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.
Files changed (69) hide show
  1. data/README.md +38 -10
  2. data/bin/deck +11 -4
  3. data/lib/deck/rack_app.rb +42 -22
  4. data/lib/deck/slide.rb +5 -4
  5. data/lib/deck/slide_deck.rb +142 -135
  6. data/lib/deck/version.rb +1 -1
  7. data/public/deck.js/GPL-license.txt +0 -0
  8. data/public/deck.js/MIT-license.txt +0 -0
  9. data/public/deck.js/README.md +10 -4
  10. data/public/deck.js/boilerplate.html +96 -0
  11. data/public/deck.js/core/deck.core.css +10 -7
  12. data/public/deck.js/core/deck.core.js +5 -5
  13. data/public/deck.js/core/deck.core.scss +10 -7
  14. data/public/deck.js/extensions/goto/deck.goto.css +0 -0
  15. data/public/deck.js/extensions/goto/deck.goto.html +0 -0
  16. data/public/deck.js/extensions/goto/deck.goto.js +0 -0
  17. data/public/deck.js/extensions/hash/deck.hash.css +0 -0
  18. data/public/deck.js/extensions/hash/deck.hash.html +0 -0
  19. data/public/deck.js/extensions/hash/deck.hash.js +16 -3
  20. data/public/deck.js/extensions/hash/deck.hash.scss +0 -0
  21. data/public/deck.js/extensions/menu/deck.menu.css +0 -0
  22. data/public/deck.js/extensions/menu/deck.menu.js +0 -0
  23. data/public/deck.js/extensions/navigation/deck.navigation.css +0 -0
  24. data/public/deck.js/extensions/navigation/deck.navigation.html +0 -0
  25. data/public/deck.js/extensions/navigation/deck.navigation.js +4 -3
  26. data/public/deck.js/extensions/scale/deck.scale.css +4 -1
  27. data/public/deck.js/extensions/scale/deck.scale.js +0 -0
  28. data/public/deck.js/extensions/scale/deck.scale.scss +5 -1
  29. data/public/deck.js/extensions/status/deck.status.css +0 -0
  30. data/public/deck.js/extensions/status/deck.status.html +0 -0
  31. data/public/deck.js/extensions/status/deck.status.js +0 -0
  32. data/public/deck.js/introduction/index.html +8 -2
  33. data/public/deck.js/jquery-1.7.2.min.js +4 -0
  34. data/public/deck.js/modernizr.custom.js +0 -0
  35. data/public/deck.js/test/fixtures/complex.html +0 -0
  36. data/public/deck.js/test/fixtures/empty.html +0 -0
  37. data/public/deck.js/test/fixtures/iframe_simple.html +0 -0
  38. data/public/deck.js/test/fixtures/iframes.html +0 -0
  39. data/public/deck.js/test/fixtures/nesteds.html +0 -0
  40. data/public/deck.js/test/fixtures/standard.html +0 -0
  41. data/public/deck.js/test/index.html +1 -1
  42. data/public/deck.js/test/spec.core.js +3 -1
  43. data/public/deck.js/test/spec.goto.js +0 -0
  44. data/public/deck.js/test/spec.hash.js +2 -2
  45. data/public/deck.js/test/spec.menu.js +0 -0
  46. data/public/deck.js/test/spec.navigation.js +4 -4
  47. data/public/deck.js/test/spec.scale.js +0 -0
  48. data/public/deck.js/test/spec.status.js +0 -0
  49. data/public/deck.js/themes/style/neon.css +7 -1
  50. data/public/deck.js/themes/style/neon.scss +11 -1
  51. data/public/deck.js/themes/style/swiss.css +7 -1
  52. data/public/deck.js/themes/style/swiss.scss +11 -1
  53. data/public/deck.js/themes/style/web-2.0.css +7 -1
  54. data/public/deck.js/themes/style/web-2.0.scss +11 -1
  55. data/public/deck.js/themes/transition/fade.css +0 -0
  56. data/public/deck.js/themes/transition/fade.scss +0 -0
  57. data/public/deck.js/themes/transition/horizontal-slide.css +0 -0
  58. data/public/deck.js/themes/transition/horizontal-slide.scss +0 -0
  59. data/public/deck.js/themes/transition/vertical-slide.css +0 -0
  60. data/public/deck.js/themes/transition/vertical-slide.scss +0 -0
  61. data/public/toc.css +60 -27
  62. data/spec/rack_app_spec.rb +45 -1
  63. data/spec/slide_deck_spec.rb +77 -43
  64. data/spec/slide_spec.rb +19 -0
  65. metadata +22 -8
  66. data/public/deck.js/core/deck.core.html +0 -39
  67. data/public/deck.js/extensions/theme-picker/deck.theme-picker.css +0 -55
  68. data/public/deck.js/extensions/theme-picker/deck.theme-picker.js +0 -13
  69. data/public/deck.js/jquery-1.7.min.js +0 -4
data/README.md CHANGED
@@ -54,7 +54,8 @@ and you'll get a web server running on `http://localhost:4333` serving up a slid
54
54
  * links to image files are resolved relative to the source file -- no more broken images in markdown previews, and no need to put all your images in a separate directory!
55
55
  * add CSS classes to slides inside the slide directive - - e.g. `<!SLIDE center>` gives `<section class="slide center">`
56
56
  * generated HTML is pretty-printed for easier "view source"
57
- * uses deck.js' "swiss" theme and several extensions, including `goto`, `menu`, `navigation`, `status`, `hash`, and `scale`
57
+ * uses deck.js' "swiss" and "horizontal-slide" themes (configurable)
58
+ * uses several deck.js extensions, including `goto`, `menu`, `navigation`, `status`, `hash`, and `scale`
58
59
  * uses RedCarpet markdown extensions, including
59
60
  * tables <http://michelf.com/projects/php-markdown/extra/#table>
60
61
  * fenced code blocks <http://michelf.com/projects/php-markdown/extra/#fenced-code-blocks>
@@ -63,8 +64,9 @@ and you'll get a web server running on `http://localhost:4333` serving up a slid
63
64
  * code syntax highlighting using Coderay
64
65
  * specify language at the top of the block using either ::: or @@@
65
66
  * e.g. `@@@ ruby`
66
- * there's a simple table of contents (click the [toc] link on lower left to toggle)
67
+ * there's a simple table of contents (click the [contents] link on lower left to toggle)
67
68
  * this is currently very primitive and should be redone and/or integrated into deck.js
69
+ * lines beginning with `.notes ` are skipped
68
70
 
69
71
  ## Command-Line API
70
72
 
@@ -77,10 +79,30 @@ and you'll get a web server running on `http://localhost:4333` serving up a slid
77
79
 
78
80
  ### Options
79
81
 
80
- --port, -p <i>: Specify alternate port (default: 4333)
81
- --build, -b: Build an HTML file instead of launching a server (WARNING: not very useful yet)
82
- --version, -v: Print version and exit
83
- --help, -h: Show this message
82
+ --port, -p <i>: Specify alternate port (default: 4333)
83
+ --build, -b: Build an HTML file instead of launching a server (WARNING: not very useful yet)
84
+ --style, -s <s>: Specify the style theme from deck.js/themes/style/ (default: swiss)
85
+ --transition, -t <s>: Specify the transition theme from deck.js/themes/transition/ (default: horizontal-slide)
86
+ --version, -v: Print version and exit
87
+ --help, -h: Show this message
88
+
89
+ ## Themes
90
+
91
+ `deck.js` has several themes for styling and animating your presentation.
92
+ You can select these from the command line or from a `showoff.json` file with the `style` and `transition` options.
93
+ Currently the following themes are available:
94
+
95
+ ### Style Themes
96
+
97
+ * neon
98
+ * swiss
99
+ * web-2.0
100
+
101
+ ### Transition Themes
102
+
103
+ * fade
104
+ * horizontal-slide
105
+ * vertical-slide
84
106
 
85
107
  ## Deploying to Heroku
86
108
 
@@ -101,20 +123,24 @@ and a `Gemfile` like this:
101
123
 
102
124
  Then deploy to Heroku as usual (e.g. `heroku apps:create`).
103
125
 
104
- (Note that Deck::RackApp can accept either a filename or an array of filenames.)
126
+ Note that `Deck::RackApp.build` can accept either a filename or an array of filenames.
127
+ It also accepts options, e.g.
128
+
129
+ run Deck::RackApp.build('slides.md', transition: 'fade')
130
+
105
131
 
106
132
  ## Known Issues (Bugs and Limitations)
107
133
 
108
134
  * If you're running Webrick, you may not be able to kill the server with Ctrl-C. This is apparently due to a bug in recent versions of Webrick.
109
135
  * Workaround: `gem install thin` -- if thin is installed, deck will use it instead of webrick
110
- * auxiliary files (e.g. images) are interleaved in URL path space, so overlapping file names might not resolve to the right file
136
+ * Auxiliary files (e.g. images) are interleaved in URL path space, so overlapping file names might not resolve to the right file.
111
137
  * todo: rewrite internal links to files and serve them relative to current dir, not slide dir
112
138
  * H1s (which split slides) are converted to H2s for compatibility with deck.js's CSS themes
113
139
  * unless they're the only item on the slide, in which case they remain H1s
114
- * we use RedCarpet to process markdown, which doesn't work exactly the same as RDiscount... for example:
140
+ * We use RedCarpet to process markdown, which doesn't work exactly the same as RDiscount... for example:
115
141
  * indented code blocks under a bullet point may need to be indented more
116
142
  * code blocks must be separated from the previous text by a newline
117
- * slide scaling isn't perfect; sometimes either resizing or reloading will improve the layout
143
+ * Slide scaling isn't perfect; sometimes either resizing or reloading will improve the layout.
118
144
 
119
145
  Report bugs on <http://github.com/alexch/deck.rb/issues>
120
146
 
@@ -123,6 +149,8 @@ Report bugs on <http://github.com/alexch/deck.rb/issues>
123
149
  * deck.js by Caleb at <http://imakewebthings.com>
124
150
  * deck.rb by Alex Chaffee <http://alexchaffee.com>, with help from
125
151
  * Steven! Ragnarök <http://nuclearsandwich.com>
152
+ * David Doolin <http://dool.in>
153
+ * and other awesome patchers
126
154
 
127
155
  ### See Also
128
156
 
data/bin/deck CHANGED
@@ -8,6 +8,7 @@ require "rack"
8
8
  require "deck"
9
9
  require "deck/rack_app"
10
10
  require "deck/version"
11
+ require "thin" # i hate webrick
11
12
 
12
13
  options = Trollop.options do
13
14
  version "deck v#{Deck::VERSION}"
@@ -16,9 +17,11 @@ options = Trollop.options do
16
17
  banner "(see http://github.com/alexch/deck.rb README for more help)"
17
18
  opt :port, "Specify alternate port", :default => 4333
18
19
  opt :build, "Build an HTML file instead of launching a server (WARNING: not very useful yet)"
20
+ opt :style, "Specify the style theme from deck.js/themes/style/", default: "swiss"
21
+ opt :transition, "Specify the transition theme from deck.js/themes/transition/", default: "horizontal-slide"
19
22
  end
20
23
 
21
- if options[:build]
24
+ if options.delete(:build)
22
25
  slides = []
23
26
  output_path = nil
24
27
  output_dir = "." # for now, since deck.js is relative to the project root
@@ -31,14 +34,18 @@ if options[:build]
31
34
  end
32
35
 
33
36
  File.open(output_path, "w") do |file|
34
- deck = Deck::SlideDeck.new :slides => slides
37
+ deck = Deck::SlideDeck.new :slides => slides #todo: pass theme options
35
38
  # deck.to_pretty(:output => file) # todo: figure out why this doesn't work
36
39
  file.write deck.to_pretty
37
40
  end
38
41
 
39
42
  else
40
43
 
41
- port = options[:port]
44
+ port = options.delete(:port)
42
45
  slide_files = ARGV
43
- Rack::Handler.default.run Deck::RackApp.build(slide_files), :Port => port
46
+ options = {
47
+ style: options[:style],
48
+ transition: options[:transition],
49
+ }
50
+ Rack::Handler.default.run Deck::RackApp.build(slide_files, options), :Port => port
44
51
  end
data/lib/deck/rack_app.rb CHANGED
@@ -1,5 +1,3 @@
1
- here = File.expand_path File.dirname(__FILE__)
2
-
3
1
  require 'json'
4
2
  require 'coderay'
5
3
  require 'rack/codehighlighter'
@@ -16,12 +14,8 @@ module Deck
16
14
  Rack::File.new("#{app_root}/public")
17
15
  end
18
16
 
19
- def self.build slide_files
20
- if const_defined?(:Thin)
21
- if require "thin/logging"
22
- Thin::Logging.debug = true
23
- end
24
- end
17
+ def self.build slide_files, options = {}
18
+ enable_thin_logging()
25
19
 
26
20
  Rack::Builder.app do
27
21
  use Rack::ShowExceptions
@@ -30,25 +24,24 @@ module Deck
30
24
  :element => "pre>code",
31
25
  :markdown => true,
32
26
  :pattern => /\A[:@]{3}\s?(\w+)\s*(\n|&#x000A;)/i
33
- run ::Deck::RackApp.new(slide_files)
27
+ run ::Deck::RackApp.new(slide_files, options)
28
+ end
29
+ end
30
+
31
+ def self.enable_thin_logging
32
+ if const_defined?(:Thin)
33
+ if require "thin/logging"
34
+ Thin::Logging.debug = true
35
+ end
34
36
  end
35
37
  end
36
38
 
37
- def initialize slide_files
39
+ def initialize slide_files, options = {}
40
+ @options = options
38
41
  @slide_files = [slide_files].flatten.map do |slide_file|
39
42
  case slide_file
40
43
  when /\/?showoff(.*)\.json$/
41
- json_file_dir = File.expand_path(File.dirname(slide_file))
42
- json_file = slide_file
43
- config = JSON.parse(File.read(json_file))
44
- config['sections'].map do |markdown_file|
45
- if markdown_file =~ /^# / # you can use literal markdown instead of a file name
46
- s = Slide.split(markdown_file)
47
- s
48
- else
49
- File.new(json_file_dir + '/' + markdown_file)
50
- end
51
- end
44
+ parse_showoff_json(slide_file)
52
45
  else
53
46
  File.new(slide_file)
54
47
  end
@@ -63,6 +56,33 @@ module Deck
63
56
  end
64
57
  end
65
58
 
59
+ def parse_showoff_json(slide_file)
60
+ json_file_dir = File.expand_path(File.dirname(slide_file))
61
+ json_file = slide_file
62
+ config = JSON.parse(File.read(json_file))
63
+ extract_options(config)
64
+ extract_slides(config, json_file_dir)
65
+ end
66
+
67
+ def extract_slides(config, json_file_dir)
68
+ config['sections'].map do |markdown_file|
69
+ if markdown_file =~ /^# / # you can use literal markdown instead of a file name
70
+ s = Slide.split(markdown_file)
71
+ s
72
+ else
73
+ File.new(json_file_dir + '/' + markdown_file)
74
+ end
75
+ end
76
+ end
77
+
78
+ def extract_options(config)
79
+ ["style", "transition"].each do |key|
80
+ if config[key] and !@options[key.to_sym]
81
+ @options[key.to_sym] = config[key]
82
+ end
83
+ end
84
+ end
85
+
66
86
  def call env
67
87
  request = Rack::Request.new(env)
68
88
  if request.path == "/"
@@ -78,7 +98,7 @@ module Deck
78
98
  end
79
99
 
80
100
  def deck
81
- SlideDeck.new :slides => slides
101
+ SlideDeck.new({:slides => slides}.merge(@options))
82
102
  end
83
103
 
84
104
  def slides
data/lib/deck/slide.rb CHANGED
@@ -35,6 +35,9 @@ module Deck
35
35
  slides << (slide = Slide.new)
36
36
  slide << line
37
37
 
38
+ elsif line =~ /^\.notes/
39
+ # don't include notes
40
+
38
41
  else
39
42
  slide << line
40
43
  end
@@ -107,16 +110,14 @@ module Deck
107
110
  end
108
111
 
109
112
  def title
110
- lines = @markdown_text.split("\n")
113
+ lines = @markdown_text.strip.split("\n")
111
114
  raise "an empty slide has no id" if lines.empty?
112
115
  lines.first.gsub(/^[#=]*/, '').strip
113
116
  end
114
117
 
115
118
  def slide_id
116
119
  @slide_id ||= begin
117
- lines = @markdown_text.split("\n")
118
- raise "an empty slide has no id" if lines.empty?
119
- lines.first.downcase.gsub(/[^\w\s]/, '').strip.gsub(/\s/, '_')
120
+ title.downcase.gsub(/[^\w\s]/, '').strip.gsub(/\s/, '_')
120
121
  end
121
122
  end
122
123
 
@@ -4,31 +4,34 @@ require 'redcarpet'
4
4
  require "deck/slide"
5
5
 
6
6
  module Deck
7
- class SlideDeck < Erector::Widgets::Page
8
- needs :title => "deck.rb presentation",
9
- :description => nil,
10
- :author => nil
11
- needs :extensions => [
12
- 'goto',
13
- 'menu',
14
- 'navigation',
15
- 'status',
16
- 'hash',
17
- 'scale',
18
- # 'theme-picker',
7
+ class SlideDeck < Erector::Widgets::Page
8
+ needs :title => "deck.rb presentation",
9
+ :description => nil,
10
+ :author => nil
11
+ needs :extensions => [
12
+ 'goto',
13
+ 'menu',
14
+ 'navigation',
15
+ 'status',
16
+ 'hash',
17
+ 'scale',
19
18
  ]
20
- needs :slides => nil
21
- attr_reader :extensions
19
+ needs :slides => nil
22
20
 
23
- def page_title
24
- @title
25
- end
21
+ needs :style => "swiss"
22
+ needs :transition => "horizontal-slide"
26
23
 
27
- # todo: promote into Text
28
- # todo: support numbers a la '&#1234;'
29
- def entity entity_id
30
- raw("&#{entity_id};")
31
- end
24
+ attr_reader :extensions
25
+
26
+ def page_title
27
+ @title
28
+ end
29
+
30
+ # todo: promote into Text
31
+ # todo: support numbers a la '&#1234;'
32
+ def entity entity_id
33
+ raw("&#{entity_id};")
34
+ end
32
35
 
33
36
  # left over from deck.js' introduction/index.html
34
37
 
@@ -38,155 +41,159 @@ module Deck
38
41
  # <!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
39
42
  # <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
40
43
 
41
- # todo: promote into Page
42
- def stylesheet src, attributes = {}
43
- link({:rel => "stylesheet", :href => src}.merge(attributes))
44
- end
45
-
46
- def public_asset path
47
- "/#{path}"
48
- end
49
-
50
- def head_content
51
- super
52
- meta 'charset' => 'utf-8'
53
- meta 'http-equiv'=>"X-UA-Compatible", 'content'=>"IE=edge,chrome=1"
54
- meta :name => "viewport", :content=> "width=1024, user-scalable=no"
55
- meta :name => "description", :content=> @description if @description
56
- meta :name => "author", :content=> @author if @author
44
+ # todo: promote into Page
45
+ def stylesheet src, attributes = {}
46
+ link({:rel => "stylesheet", :href => src}.merge(attributes))
47
+ end
57
48
 
58
- # <!-- Core and extension CSS files -->
59
- stylesheet public_asset("deck.js/core/deck.core.css")
60
- extensions.each do |extension|
61
- stylesheet public_asset("deck.js/extensions/#{extension}/deck.#{extension}.css")
49
+ def public_asset path
50
+ "/#{path}"
62
51
  end
63
52
 
64
- # <!-- Theme CSS files (menu swaps these out) -->
65
- stylesheet public_asset("deck.js/themes/style/swiss.css"), :id=>"style-theme-link"
53
+ def head_content
54
+ super
55
+ meta 'charset' => 'utf-8'
56
+ meta 'http-equiv' => "X-UA-Compatible", 'content' => "IE=edge,chrome=1"
57
+ meta :name => "viewport", :content => "width=1024, user-scalable=no"
58
+ meta :name => "description", :content => @description if @description
59
+ meta :name => "author", :content => @author if @author
60
+
61
+ # <!-- Core and extension CSS files -->
62
+ stylesheet public_asset("deck.js/core/deck.core.css")
63
+ extensions.each do |extension|
64
+ stylesheet public_asset("deck.js/extensions/#{extension}/deck.#{extension}.css")
65
+ end
66
66
 
67
- stylesheet public_asset("coderay.css")
68
- stylesheet public_asset("tables.css")
69
- stylesheet public_asset("toc.css")
70
- end
67
+ # <!-- Theme CSS files -->
68
+ stylesheet public_asset("deck.js/themes/style/#{@style}.css"), :id => "style-theme-link"
69
+ stylesheet public_asset("deck.js/themes/transition/#{@transition}.css"), :id => "transition-theme-link"
70
+
71
+ stylesheet public_asset("coderay.css")
72
+ stylesheet public_asset("tables.css")
73
+ stylesheet public_asset("toc.css")
74
+ end
71
75
 
72
- def scripts
73
- script :src => public_asset("deck.js/modernizr.custom.js")
76
+ def scripts
77
+ script :src => public_asset("deck.js/modernizr.custom.js")
74
78
 
75
- # comment 'Grab CDN jQuery, with a protocol relative URL; fall back to local if offline'
76
- # script :src => '//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.min.js'
77
- script :src => public_asset('deck.js/jquery-1.7.min.js')
79
+ # comment 'Grab CDN jQuery, with a protocol relative URL; fall back to local if offline'
80
+ # script :src => '//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js'
81
+ script :src => public_asset('deck.js/jquery-1.7.2.min.js')
78
82
 
79
- jquery <<-JAVASCRIPT
83
+ jquery <<-JAVASCRIPT
80
84
  $('.slide_toc .toggle').click(function(){
81
- $('.slide_toc ul').toggle();
85
+ $('.slide_toc .table').toggle();
82
86
  });
83
- JAVASCRIPT
87
+ JAVASCRIPT
84
88
 
85
- comment 'Deck Core and extensions'
86
- script :type => "text/javascript", :src => public_asset('deck.js/core/deck.core.js')
89
+ comment 'Deck Core and extensions'
90
+ script :type => "text/javascript", :src => public_asset('deck.js/core/deck.core.js')
87
91
 
88
- extensions.each do |extension|
89
- script :type => "text/javascript", :src => public_asset("deck.js/extensions/#{extension}/deck.#{extension}.js")
90
- end
92
+ extensions.each do |extension|
93
+ script :type => "text/javascript", :src => public_asset("deck.js/extensions/#{extension}/deck.#{extension}.js")
94
+ end
91
95
 
92
- # fire up deck.js
93
- script "$(function(){$.deck('.slide');});"
96
+ # fire up deck.js
97
+ script "$(function(){$.deck('.slide');});"
94
98
 
95
- end
96
-
97
- def body_attributes
98
- {:class=>"deck-container"}
99
- end
99
+ end
100
100
 
101
- def body_content
102
- slides
103
- slide_navigation
104
- toc
105
- deck_status
106
- goto_slide
107
- permalink
108
- scripts
109
- end
101
+ def body_attributes
102
+ {:class => "deck-container"}
103
+ end
110
104
 
111
- def slide slide_id
112
- # todo: use Slide object, but without markdown
113
- # slide = Slide.new(:slide_id => slide_id)
114
- section.slide :id => slide_id do
115
- yield
105
+ def body_content
106
+ slides
107
+ slide_navigation
108
+ toc
109
+ deck_status
110
+ goto_slide
111
+ permalink
112
+ scripts
116
113
  end
117
- end
118
114
 
119
- def slides
120
- if @slides
121
- @slides.each do |slide|
122
- widget slide
115
+ def slide slide_id
116
+ # todo: use Slide object, but without markdown
117
+ # slide = Slide.new(:slide_id => slide_id)
118
+ section.slide :id => slide_id do
119
+ yield
123
120
  end
124
- else
125
- default_slide
126
121
  end
127
- end
128
122
 
129
- def default_slide
130
- slide 'readme' do
131
- h2 "deck.rb"
132
- ul {
133
- li "based on deck.js"
134
- li "create a subclass of Deck (see introduction.rb)"
135
- li "run erector to build it"
136
- }
137
- pre "erector --to-html ./deck.rb # generates deck.html"
123
+ def slides
124
+ if @slides
125
+ @slides.each do |slide|
126
+ widget slide
127
+ end
128
+ else
129
+ default_slide
130
+ end
138
131
  end
139
- end
140
132
 
141
- def slide_navigation
142
- a :href => '#', :class => 'deck-prev-link', :title => 'Previous' do
143
- character 8592
133
+ def default_slide
134
+ slide 'readme' do
135
+ h2 "deck.rb"
136
+ ul {
137
+ li "based on deck.js"
138
+ li "create a subclass of Deck (see introduction.rb)"
139
+ li "run erector to build it"
140
+ }
141
+ pre "erector --to-html ./deck.rb # generates deck.html"
142
+ end
144
143
  end
145
- a :href => '#', :class => 'deck-next-link', :title => 'Next' do
146
- character 8594
144
+
145
+ def slide_navigation
146
+ a :href => '#', :class => 'deck-prev-link', :title => 'Previous' do
147
+ character 8592
148
+ end
149
+ a :href => '#', :class => 'deck-next-link', :title => 'Next' do
150
+ character 8594
151
+ end
147
152
  end
148
- end
149
153
 
150
- def toc
151
- div.slide_toc do
152
- div.toggle "[toc]"
153
- ul do
154
- if @slides
155
- @slides.each do |slide|
156
- li do
157
- a slide.title, :href => "##{slide.slide_id}"
154
+ def toc
155
+ div.slide_toc do
156
+ div.toggle "[contents]"
157
+ div.table do
158
+ h2 @title
159
+ ul do
160
+ if @slides
161
+ @slides.each do |slide|
162
+ li do
163
+ a slide.title, :href => "##{slide.slide_id}"
164
+ end
165
+ end
158
166
  end
159
167
  end
160
168
  end
161
169
  end
162
170
  end
163
- end
164
171
 
165
- def deck_status
166
- p :class => 'deck-status' do
167
- span :class => 'deck-status-current' do
168
- end
169
- text '/'
170
- span :class => 'deck-status-total' do
172
+ def deck_status
173
+ p :class => 'deck-status' do
174
+ span :class => 'deck-status-current' do
175
+ end
176
+ text '/'
177
+ span :class => 'deck-status-total' do
178
+ end
171
179
  end
172
180
  end
173
- end
174
181
 
175
- def goto_slide
176
- form :action => '.', :method => 'get', :class => 'goto-form' do
177
- label :for => 'goto-slide' do
178
- text 'Go to slide:'
179
- end
180
- input :type => 'text', :name => 'slidenum', :id => 'goto-slide', :list => 'goto-datalist'
181
- datalist :id => 'goto-datalist' do
182
+ def goto_slide
183
+ form :action => '.', :method => 'get', :class => 'goto-form' do
184
+ label :for => 'goto-slide' do
185
+ text 'Go to slide:'
186
+ end
187
+ input :type => 'text', :name => 'slidenum', :id => 'goto-slide', :list => 'goto-datalist'
188
+ datalist :id => 'goto-datalist' do
182
189
  end
183
- input :type => 'submit', :value => 'Go'
190
+ input :type => 'submit', :value => 'Go'
191
+ end
184
192
  end
185
- end
186
193
 
187
- def permalink
188
- a "#", :href => '.', :title => 'Permalink to this slide', :class => 'deck-permalink'
189
- end
194
+ def permalink
195
+ a "#", :href => '.', :title => 'Permalink to this slide', :class => 'deck-permalink'
196
+ end
190
197
 
191
- end
198
+ end
192
199
  end