keydown 0.7.1 → 0.9.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 (137) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +3 -0
  3. data/LICENSE +1 -1
  4. data/README.md +16 -15
  5. data/VERSION +1 -1
  6. data/keydown.gemspec +9 -6
  7. data/lib/keydown.rb +9 -22
  8. data/lib/keydown/html_helpers.rb +12 -0
  9. data/lib/keydown/{lib/slide.rb → slide.rb} +16 -19
  10. data/lib/keydown/{lib/slidedeck.rb → slidedeck.rb} +20 -5
  11. data/lib/keydown/tasks.rb +5 -0
  12. data/lib/keydown/tasks/base.rb +15 -0
  13. data/lib/keydown/tasks/generate.rb +5 -1
  14. data/lib/keydown/tasks/slides.rb +1 -1
  15. data/lib/version.rb +1 -1
  16. data/spec/lib/html_helpers_spec.rb +26 -0
  17. data/spec/lib/slide_spec.rb +29 -17
  18. data/spec/lib/slidedeck_spec.rb +41 -13
  19. data/spec/spec_helper.rb +2 -6
  20. data/spec/tasks/generate_spec.rb +41 -20
  21. data/spec/tasks/slides_spec.rb +83 -44
  22. data/templates/deck.js/code.html.haml +1 -0
  23. data/templates/deck.js/index.html.haml +54 -0
  24. data/templates/deck.js/slide.html.haml +6 -0
  25. data/templates/generate/css/%presentation_name%.css +12 -1
  26. data/templates/generate/deck.js/core/deck.core.css +394 -0
  27. data/templates/generate/deck.js/core/deck.core.js +461 -0
  28. data/templates/generate/deck.js/core/deck.core.scss +432 -0
  29. data/templates/generate/deck.js/extensions/codemirror/CONTRIBUTORS.txt +2 -0
  30. data/templates/generate/deck.js/extensions/codemirror/MIT-LICENSE.txt +21 -0
  31. data/templates/generate/deck.js/extensions/codemirror/README.md +120 -0
  32. data/templates/generate/deck.js/extensions/codemirror/VERSION.txt +1 -0
  33. data/templates/generate/deck.js/extensions/codemirror/codemirror.js +21 -0
  34. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.css +89 -0
  35. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.js +213 -0
  36. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.scss +107 -0
  37. data/templates/generate/deck.js/extensions/codemirror/mode/clike/clike.js +247 -0
  38. data/templates/generate/deck.js/extensions/codemirror/mode/clike/index.html +102 -0
  39. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/clojure.js +207 -0
  40. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/index.html +85 -0
  41. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/LICENSE +22 -0
  42. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/coffeescript.js +325 -0
  43. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/index.html +722 -0
  44. data/templates/generate/deck.js/extensions/codemirror/mode/css/css.js +124 -0
  45. data/templates/generate/deck.js/extensions/codemirror/mode/css/index.html +56 -0
  46. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.css +3 -0
  47. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.js +13 -0
  48. data/templates/generate/deck.js/extensions/codemirror/mode/diff/index.html +99 -0
  49. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/haskell.js +242 -0
  50. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/index.html +60 -0
  51. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/htmlmixed.js +79 -0
  52. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/index.html +52 -0
  53. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/index.html +78 -0
  54. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/javascript.js +348 -0
  55. data/templates/generate/deck.js/extensions/codemirror/mode/lua/index.html +72 -0
  56. data/templates/generate/deck.js/extensions/codemirror/mode/lua/lua.js +138 -0
  57. data/templates/generate/deck.js/extensions/codemirror/mode/php/index.html +49 -0
  58. data/templates/generate/deck.js/extensions/codemirror/mode/php/php.js +115 -0
  59. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/index.html +63 -0
  60. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/plsql.js +217 -0
  61. data/templates/generate/deck.js/extensions/codemirror/mode/python/LICENSE.txt +21 -0
  62. data/templates/generate/deck.js/extensions/codemirror/mode/python/index.html +123 -0
  63. data/templates/generate/deck.js/extensions/codemirror/mode/python/python.js +321 -0
  64. data/templates/generate/deck.js/extensions/codemirror/mode/r/LICENSE +24 -0
  65. data/templates/generate/deck.js/extensions/codemirror/mode/r/index.html +74 -0
  66. data/templates/generate/deck.js/extensions/codemirror/mode/r/r.js +141 -0
  67. data/templates/generate/deck.js/extensions/codemirror/mode/rst/index.html +526 -0
  68. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.css +75 -0
  69. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.js +333 -0
  70. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/LICENSE +24 -0
  71. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/index.html +172 -0
  72. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/ruby.js +195 -0
  73. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/index.html +65 -0
  74. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/scheme.js +202 -0
  75. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/index.html +56 -0
  76. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/smalltalk.js +122 -0
  77. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/index.html +41 -0
  78. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/sparql.js +143 -0
  79. data/templates/generate/deck.js/extensions/codemirror/mode/stex/index.html +96 -0
  80. data/templates/generate/deck.js/extensions/codemirror/mode/stex/stex.js +167 -0
  81. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/index.html +103 -0
  82. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/velocity.js +146 -0
  83. data/templates/generate/deck.js/extensions/codemirror/mode/xml/index.html +42 -0
  84. data/templates/generate/deck.js/extensions/codemirror/mode/xml/xml.js +231 -0
  85. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/index.html +60 -0
  86. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/xmlpure.js +481 -0
  87. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/index.html +68 -0
  88. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/yaml.js +95 -0
  89. data/templates/generate/deck.js/extensions/codemirror/themes/cobalt.css +17 -0
  90. data/templates/generate/deck.js/extensions/codemirror/themes/default.css +19 -0
  91. data/templates/generate/deck.js/extensions/codemirror/themes/elegant.css +9 -0
  92. data/templates/generate/deck.js/extensions/codemirror/themes/neat.css +8 -0
  93. data/templates/generate/deck.js/extensions/codemirror/themes/night.css +20 -0
  94. data/templates/generate/deck.js/extensions/goto/deck.goto.css +41 -0
  95. data/templates/generate/deck.js/extensions/goto/deck.goto.html +6 -0
  96. data/templates/generate/deck.js/extensions/goto/deck.goto.js +118 -0
  97. data/templates/generate/deck.js/extensions/goto/deck.goto.scss +46 -0
  98. data/templates/generate/deck.js/extensions/hash/deck.hash.css +13 -0
  99. data/templates/generate/deck.js/extensions/hash/deck.hash.html +2 -0
  100. data/templates/generate/deck.js/extensions/hash/deck.hash.js +125 -0
  101. data/templates/generate/deck.js/extensions/hash/deck.hash.scss +15 -0
  102. data/templates/generate/deck.js/extensions/menu/deck.menu.css +24 -0
  103. data/templates/generate/deck.js/extensions/menu/deck.menu.js +127 -0
  104. data/templates/generate/deck.js/extensions/menu/deck.menu.scss +29 -0
  105. data/templates/generate/deck.js/extensions/navigation/deck.navigation.css +43 -0
  106. data/templates/generate/deck.js/extensions/navigation/deck.navigation.html +3 -0
  107. data/templates/generate/deck.js/extensions/navigation/deck.navigation.js +83 -0
  108. data/templates/generate/deck.js/extensions/navigation/deck.navigation.scss +56 -0
  109. data/templates/generate/deck.js/extensions/scale/deck.scale.css +16 -0
  110. data/templates/generate/deck.js/extensions/scale/deck.scale.js +155 -0
  111. data/templates/generate/deck.js/extensions/scale/deck.scale.scss +17 -0
  112. data/templates/generate/deck.js/extensions/status/deck.status.css +14 -0
  113. data/templates/generate/deck.js/extensions/status/deck.status.html +6 -0
  114. data/templates/generate/deck.js/extensions/status/deck.status.js +42 -0
  115. data/templates/generate/deck.js/extensions/status/deck.status.scss +16 -0
  116. data/templates/generate/deck.js/support/jquery.1.6.4.min.js +4 -0
  117. data/templates/generate/deck.js/support/modernizr.custom.js +4 -0
  118. data/templates/generate/deck.js/themes/style/neon.css +114 -0
  119. data/templates/generate/deck.js/themes/style/neon.scss +139 -0
  120. data/templates/generate/deck.js/themes/style/swiss.css +75 -0
  121. data/templates/generate/deck.js/themes/style/swiss.scss +91 -0
  122. data/templates/generate/deck.js/themes/style/web-2.0.css +187 -0
  123. data/templates/generate/deck.js/themes/style/web-2.0.scss +214 -0
  124. data/templates/generate/deck.js/themes/transition/fade.css +44 -0
  125. data/templates/generate/deck.js/themes/transition/fade.scss +70 -0
  126. data/templates/generate/deck.js/themes/transition/horizontal-slide.css +79 -0
  127. data/templates/generate/deck.js/themes/transition/horizontal-slide.scss +94 -0
  128. data/templates/generate/deck.js/themes/transition/vertical-slide.css +97 -0
  129. data/templates/generate/deck.js/themes/transition/vertical-slide.scss +116 -0
  130. data/templates/keydown.css.erb +27 -23
  131. metadata +171 -32
  132. data/Gemfile.lock +0 -41
  133. data/templates/generate/css/rocks.css +0 -392
  134. data/templates/generate/css/syntax_highlighting.css +0 -135
  135. data/templates/generate/js/rocks.js +0 -419
  136. data/templates/rocks/index.rhtml +0 -132
  137. data/templates/rocks/slide.rhtml +0 -10
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Keydown::SlideDeck do
4
4
 
@@ -15,12 +15,11 @@ describe Keydown::SlideDeck do
15
15
  end
16
16
  end
17
17
 
18
-
19
18
  before :each do
20
19
  module Keydown
21
20
  class Tasks
22
21
  def self.template_dir
23
- File.join(Keydown::Tasks.source_root, 'templates', 'rocks')
22
+ File.join(Keydown::Tasks.source_root, 'templates', 'deck.js')
24
23
  end
25
24
  end
26
25
  end
@@ -69,16 +68,20 @@ and this
69
68
  end
70
69
 
71
70
  it "should generate the correct number of slides" do
72
- @doc.css('div.slide').length.should == 4
71
+ @doc.css('section.slide').length.should == 3
73
72
  end
74
73
 
75
74
  it "should set the CSS classnames of each slide" do
76
- slides = @doc.css('div.slide section')
75
+ slides_content = @doc.css('section.slide div')
76
+
77
+ first_slide = slides_content[0]
78
+ first_slide['class'].should be_nil
79
+
80
+ second_slide = slides_content[1]
81
+ second_slide['class'].should == 'foo'
77
82
 
78
- slides[0]['class'].should == 'middle' # config/start slide
79
- slides[1]['class'].should == nil
80
- slides[2]['class'].should == 'foo'
81
- slides[3]['class'].should == 'foo bar'
83
+ third_slide = slides_content[2]
84
+ third_slide['class'].should == 'foo bar'
82
85
  end
83
86
  end
84
87
  end
@@ -98,6 +101,8 @@ and this
98
101
 
99
102
  # Is Brought to You By
100
103
 
104
+ }}} images/ping.png::cprsize
105
+
101
106
  !NOTE
102
107
 
103
108
  and this
@@ -105,6 +110,9 @@ and this
105
110
  !SLIDE foo bar
106
111
 
107
112
  # The Letter Q
113
+
114
+ }}} images/poke.png::cprsize::flickr::http://flickr.com/1234
115
+
108
116
  SLIDES
109
117
 
110
118
  @deck = Keydown::SlideDeck.new(@slides_text)
@@ -116,18 +124,38 @@ and this
116
124
  before(:each) do
117
125
  @html = @deck.to_html
118
126
  @doc = Nokogiri(@html)
119
- @slide_with_background = @doc.css('div.slide')[1]
127
+ @first_slide = @doc.css('section.slide')[0]
128
+ @second_slide = @doc.css('section.slide')[1]
129
+ @third_slide = @doc.css('section.slide')[2]
120
130
  end
121
131
 
122
132
  it "should add the full-bleed background CSS classname to any slide that specifies a background" do
123
- @slide_with_background['class'].split(' ').should include('full-background')
133
+ @first_slide['class'].split(' ').should include('full-background')
134
+ @second_slide['class'].split(' ').should include('full-background')
135
+ @third_slide['class'].split(' ').should include('full-background')
124
136
  end
125
137
 
126
138
  it "should add a custom classname to a slide that specifies a background" do
127
- @slide_with_background['class'].split(' ').should include('my_background')
139
+ @first_slide['class'].split(' ').should include('my_background')
140
+ @second_slide['class'].split(' ').should include('ping')
141
+ @third_slide['class'].split(' ').should include('poke')
142
+ end
143
+
144
+ it "should add an attribution element only to slides that requested it" do
145
+ @first_slide.css('.attribution').length.should == 0
146
+ @second_slide.css('.attribution').length.should == 1
147
+ @third_slide.css('.attribution').length.should == 1
128
148
  end
129
- end
130
149
 
150
+ it "should add attribution content to slides that requested it" do
151
+ @second_slide.css('a')[0].text.should match('cprsize')
152
+ @third_slide.css('a')[0].text.should match('cprsize')
153
+ end
131
154
 
155
+ it "should add an attribution link if provided" do
156
+ @second_slide.css('a')[0]['href'].should be_nil
157
+ @third_slide.css('a')[0]['href'].should match(/^http:/)
158
+ end
159
+ end
132
160
  end
133
161
  end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,8 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'rubygems'
4
1
  require 'keydown'
5
- require 'rspec'
6
- require 'pp'
7
-
8
2
  require 'nokogiri'
3
+
9
4
  require 'tmpdir'
5
+ require 'pp'
10
6
 
11
7
  def capture_output
12
8
  output = StringIO.new
@@ -1,10 +1,18 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Keydown do
4
+
5
+ let :tmp_dir do
6
+ "#{Dir.tmpdir}/keydown"
7
+ end
8
+
9
+ let :project_dir do
10
+ "#{tmp_dir}/sample"
11
+ end
12
+
4
13
  before :each do
5
- @tmp_dir = "#{Dir.tmpdir}/keydown"
6
- FileUtils.rm_r @tmp_dir if File.exists?(@tmp_dir)
7
- FileUtils.mkdir_p @tmp_dir
14
+ FileUtils.rm_r tmp_dir if File.exists?(tmp_dir)
15
+ FileUtils.mkdir_p tmp_dir
8
16
 
9
17
  @thor = Thor.new
10
18
  end
@@ -12,38 +20,51 @@ describe Keydown do
12
20
  describe "generate command" do
13
21
  before :each do
14
22
  capture_output do
15
- Dir.chdir @tmp_dir do
23
+ Dir.chdir tmp_dir do
16
24
  @thor.invoke Keydown::Tasks, ["generate", "sample"]
17
25
  end
18
26
  end
19
27
  end
20
28
 
21
29
  it "should generate a directory for the presentation" do
22
- Dir.chdir "#{@tmp_dir}" do
23
- File.directory?('sample').should be_true
24
- end
30
+ File.directory?(project_dir).should be_true
25
31
  end
26
32
 
27
33
  it "should generate a sample Markdown file" do
28
- Dir.chdir "#{@tmp_dir}/sample" do
29
- File.exist?("slides.md").should be_true
30
- end
34
+ File.exist?("#{project_dir}/slides.md").should be_true
31
35
  end
32
36
 
33
37
  it "should create the support directories for the presentation" do
34
- Dir.chdir "#{@tmp_dir}/sample" do
35
- File.directory?("css").should be_true
36
- File.directory?("images").should be_true
37
- File.directory?("js").should be_true
38
- end
38
+ File.directory?("#{project_dir}/css").should be_true
39
+ File.directory?("#{project_dir}/images").should be_true
40
+ File.directory?("#{project_dir}/js").should be_true
41
+ end
42
+
43
+ it "should copy the deck.js core files" do
44
+ File.exist?("#{project_dir}/deck.js/core/deck.core.css").should be_true
45
+ File.exist?("#{project_dir}/deck.js/core/deck.core.js").should be_true
46
+ end
47
+
48
+ it "should copy deck.js's support files" do
49
+ File.exist?("#{project_dir}/deck.js/support/jquery.1.6.4.min.js").should be_true
50
+ File.exist?("#{project_dir}/deck.js/support/modernizr.custom.js").should be_true
51
+ end
52
+
53
+ it "should copy the deck.js extensions" do
54
+ File.directory?("#{project_dir}/deck.js/extensions").should be_true
55
+
56
+ extensions = Dir.glob("#{project_dir}/deck.js/extensions/*")
57
+ extensions.length.should > 1
58
+ extensions.should include("#{project_dir}/deck.js/extensions/codemirror")
39
59
  end
40
60
 
41
- it "should copy the HTML5 Rocks default CSS file" do
42
- File.exist?("#{@tmp_dir}/sample/css/rocks.css").should be_true
61
+ it "should copy default theme files for deck.js" do
62
+ File.exist?("#{project_dir}/css/horizontal-slide.css").should be_true
63
+ File.exist?("#{project_dir}/css/swiss.css").should be_true
43
64
  end
44
65
 
45
- it "should copy the HTML5 Rocks default JS file" do
46
- File.exist?("#{@tmp_dir}/sample/js/rocks.js").should be_true
66
+ it "should copy default them files for codemirror.js" do
67
+ File.exist?("#{project_dir}/css/default.css").should be_true
47
68
  end
48
69
 
49
70
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe Keydown, "`slides`" do
4
4
 
@@ -13,30 +13,35 @@ describe Keydown, "`slides`" do
13
13
  end
14
14
 
15
15
  it "should generate the correct number of slides" do
16
- @doc.css('div.slide').length.should == 4
16
+ @doc.css('section.slide').length.should == 3
17
17
  end
18
18
 
19
- it "should include the HTML5 Rocks CSS only once" do
20
- @doc.css('link[@href="css/rocks.css"]').length.should == 1
21
- end
19
+ end
22
20
 
23
- it "should include the HTML5 Rocks JavaScript only once" do
24
- @doc.css('script[@src="js/rocks.js"]').length.should == 1
25
- end
21
+ let :tmp_dir do
22
+ "#{Dir.tmpdir}/keydown_test"
23
+ end
26
24
 
25
+ let :project_dir do
26
+ "#{tmp_dir}/test"
27
27
  end
28
28
 
29
29
  before :each do
30
- @tmp_dir = "#{Dir.tmpdir}/keydown_test"
31
- FileUtils.rm_r @tmp_dir if File.exists?(@tmp_dir)
32
- FileUtils.mkdir_p @tmp_dir
30
+ FileUtils.rm_r tmp_dir if File.exists?(tmp_dir)
31
+ FileUtils.mkdir_p tmp_dir
33
32
 
34
33
  @thor = Thor.new
34
+
35
+ Dir.chdir tmp_dir do
36
+ capture_output do
37
+ @thor.invoke Keydown::Tasks, ["generate", "test"]
38
+ end
39
+ end
35
40
  end
36
41
 
37
42
  describe "when file cannot be found" do
38
43
  before(:each) do
39
- Dir.chdir @tmp_dir do
44
+ Dir.chdir project_dir do
40
45
  @std_out = capture_output do
41
46
  @thor.invoke Keydown::Tasks, ["slides", "with_title.md"]
42
47
  end
@@ -48,7 +53,7 @@ describe Keydown, "`slides`" do
48
53
  end
49
54
 
50
55
  it "should not write out a file" do
51
- Dir.glob("#{@tmp_dir}/*.html").should be_empty
56
+ Dir.glob("#{tmp_dir}/*.html").should be_empty
52
57
  end
53
58
 
54
59
  end
@@ -56,13 +61,13 @@ describe Keydown, "`slides`" do
56
61
  describe "with defaults" do
57
62
 
58
63
  before :each do
59
- system "cp -r spec/fixtures/with_title.md #{@tmp_dir}"
64
+ system "cp -r spec/fixtures/with_title.md #{project_dir}"
60
65
  end
61
66
 
62
67
  describe "should generate an html file that" do
63
68
  before(:each) do
64
69
  capture_output do
65
- Dir.chdir @tmp_dir do
70
+ Dir.chdir project_dir do
66
71
  @thor.invoke Keydown::Tasks, ["slides", "with_title.md"]
67
72
  @file = File.new('with_title.html')
68
73
  @doc = Nokogiri(@file)
@@ -74,24 +79,64 @@ describe Keydown, "`slides`" do
74
79
 
75
80
  describe "should have one slide that" do
76
81
  before :each do
77
- @slide = @doc.css('section')[3]
82
+ @third_slide = @doc.css('section')[2].css('div')[0]
78
83
  end
79
84
 
80
85
  it "should have the correct css class(es)" do
81
- @slide['class'].should match /foo/
82
- @slide['class'].should match /bar/
86
+ @third_slide['class'].should match /foo/
87
+ @third_slide['class'].should match /bar/
83
88
  end
84
89
 
85
90
  it "should have the correct content" do
86
- @slide.css('h1').text.should match /The Letter Q/
91
+ @third_slide.css('h1').text.should match /The Letter Q/
92
+ end
93
+
94
+ it "should have the deck.js files" do
95
+ scripts = @doc.css('script').collect { |tag| tag['src'] }
96
+ scripts.should include('deck.js/support/modernizr.custom.js')
97
+ scripts.should include('deck.js/support/jquery.1.6.4.min.js')
98
+ scripts.should include('deck.js/core/deck.core.js')
87
99
  end
100
+
101
+ it "should have all of the extension js files" do
102
+ scripts = @doc.css('script').collect { |tag| tag['src'] }
103
+
104
+ scripts.should include('deck.js/extensions/codemirror/codemirror.js')
105
+ scripts.should include('deck.js/extensions/codemirror/deck.codemirror.js')
106
+ scripts.should include('deck.js/extensions/codemirror/mode/ruby/ruby.js') # assuming one means all, really
107
+ scripts.should include('deck.js/extensions/goto/deck.goto.js')
108
+ scripts.should include('deck.js/extensions/hash/deck.hash.js')
109
+ scripts.should include('deck.js/extensions/menu/deck.menu.js')
110
+ scripts.should include('deck.js/extensions/navigation/deck.navigation.js')
111
+ scripts.should include('deck.js/extensions/scale/deck.scale.js')
112
+ scripts.should include('deck.js/extensions/status/deck.status.js')
113
+ end
114
+
115
+ it "should have all of the extension top-level css files" do
116
+ stylesheets = @doc.css('link').collect {|tag| tag['href']}
117
+
118
+ stylesheets.should include('deck.js/extensions/codemirror/deck.codemirror.css')
119
+ stylesheets.should include('deck.js/extensions/goto/deck.goto.css')
120
+ stylesheets.should include('deck.js/extensions/hash/deck.hash.css')
121
+ stylesheets.should include('deck.js/extensions/menu/deck.menu.css')
122
+ stylesheets.should include('deck.js/extensions/navigation/deck.navigation.css')
123
+ stylesheets.should include('deck.js/extensions/scale/deck.scale.css')
124
+ stylesheets.should include('deck.js/extensions/status/deck.status.css')
125
+ end
126
+
127
+ it "should not include any of the extension sub-directory css files" do
128
+ stylesheets = @doc.css('link').collect {|tag| tag['href']}
129
+
130
+ stylesheets.should_not include('deck.js/extensions/codemirror/themes/cobalt.css')
131
+ end
132
+
88
133
  end
89
134
  end
90
135
 
91
136
  describe "should add an .md extention if one isn't specified" do
92
137
  before(:each) do
93
138
  capture_output do
94
- Dir.chdir @tmp_dir do
139
+ Dir.chdir project_dir do
95
140
  @thor.invoke Keydown::Tasks, ["slides", "with_title"]
96
141
  @file = File.new('with_title.html')
97
142
  @doc = Nokogiri(@file)
@@ -108,13 +153,10 @@ describe Keydown, "`slides`" do
108
153
  before(:each) do
109
154
  capture_output do
110
155
 
111
- Dir.chdir @tmp_dir do
112
- @thor.invoke Keydown::Tasks, ["generate", "test"]
113
-
114
- Dir.chdir "test" do
115
- system "cp #{Keydown::Tasks.source_root}/spec/fixtures/with_title.md #{@tmp_dir}/test/with_title.md"
116
- system "cp #{Keydown::Tasks.source_root}/spec/fixtures/custom.css #{@tmp_dir}/test/css/custom.css"
117
- system "cp #{Keydown::Tasks.source_root}/spec/fixtures/custom.js #{@tmp_dir}/test/js/custom.js"
156
+ Dir.chdir project_dir do
157
+ system "cp #{Keydown::Tasks.source_root}/spec/fixtures/with_title.md #{project_dir}/with_title.md"
158
+ system "cp #{Keydown::Tasks.source_root}/spec/fixtures/custom.css #{project_dir}/css/custom.css"
159
+ system "cp #{Keydown::Tasks.source_root}/spec/fixtures/custom.js #{project_dir}/js/custom.js"
118
160
 
119
161
  @thor.invoke Keydown::Tasks, ["slides", "with_title.md"]
120
162
 
@@ -122,37 +164,35 @@ describe Keydown, "`slides`" do
122
164
  @doc = Nokogiri(@file)
123
165
  end
124
166
  end
125
- end
126
167
  end
127
168
 
128
169
  it_should_behave_like "generating a presentation file"
129
170
 
130
171
  it "should include any custom CSS file from the css directory" do
131
- @doc.css('link[@href="css/test.css"]').length.should == 1
132
- @doc.css('link[@href="css/custom.css"]').length.should == 1
172
+ stylesheets = @doc.css('link').collect {|tag| tag['href']}
173
+
174
+ stylesheets.should include('css/test.css')
175
+ stylesheets.should include('css/custom.css')
133
176
  end
134
177
 
135
178
  it "should include any custom JavaScript files from the js directory" do
136
- @doc.css('script[@src="js/test.js"]').length.should == 1
137
- @doc.css('script[@src="js/custom.js"]').length.should == 1
179
+ scripts = @doc.css('script').collect { |tag| tag['src'] }
180
+
181
+ scripts.should include('js/test.js')
182
+ scripts.should include('js/custom.js')
138
183
  end
139
184
  end
140
185
 
141
186
  describe "for a presentation that has background images" do
142
187
  before(:each) do
143
188
  capture_output do
189
+ Dir.chdir project_dir do
190
+ system "cp #{Keydown::Tasks.source_root}/spec/fixtures/with_backgrounds.md #{tmp_dir}/test/with_backgrounds.md"
144
191
 
145
- Dir.chdir @tmp_dir do
146
- @thor.invoke Keydown::Tasks, ["generate", "test"]
147
-
148
- Dir.chdir "test" do
149
- system "cp #{Keydown::Tasks.source_root}/spec/fixtures/with_backgrounds.md #{@tmp_dir}/test/with_backgrounds.md"
192
+ @thor.invoke Keydown::Tasks, ["slides", "with_backgrounds.md"]
150
193
 
151
- @thor.invoke Keydown::Tasks, ["slides", "with_backgrounds.md"]
152
-
153
- @file = File.new('with_backgrounds.html')
154
- @doc = Nokogiri(@file)
155
- end
194
+ @file = File.new('with_backgrounds.html')
195
+ @doc = Nokogiri(@file)
156
196
  end
157
197
  end
158
198
  end
@@ -160,12 +200,11 @@ describe Keydown, "`slides`" do
160
200
  it_should_behave_like "generating a presentation file"
161
201
 
162
202
  it "should add the keydown.css file (which has the backgrounds) to the css directory" do
163
- File.exist?("#{@tmp_dir}/test/css/keydown.css").should be_true
203
+ File.exist?("#{tmp_dir}/test/css/keydown.css").should be_true
164
204
  end
165
205
 
166
206
  it "should add the keydown.css file to the HTML file" do
167
207
  @doc.css('link[@href="css/keydown.css"]').length.should == 1
168
208
  end
169
-
170
209
  end
171
210
  end
@@ -0,0 +1 @@
1
+ %textarea{ :class => "code", :mode => language, :display => "none" }= code
@@ -0,0 +1,54 @@
1
+ !!! 5
2
+ %html
3
+ %head
4
+ %title= title
5
+ %meta{ :charset => "utf-8" }
6
+ %meta{ :name => "viewport", :content => "width=1024, user-scalable=no" }
7
+
8
+ / deck.js's core css
9
+ = stylesheet "deck.js/core/deck.core.css"
10
+
11
+ / deck.js extension CSS files
12
+ - extensions_css_files.each do |css_file|
13
+ = stylesheet css_file
14
+
15
+ / all css in the css dir: Keydown CSS, your custom CSS, and themes from deck.js
16
+ - css_files.each do |css_file|
17
+ = stylesheet css_file
18
+
19
+ / Modernizr (provided for legacy browsers)
20
+ = script "deck.js/support/modernizr.custom.js"
21
+
22
+ %body{ :class => 'keydown' }
23
+ %article.deck-container
24
+ - slides.each do |slide|
25
+ = slide.to_html
26
+
27
+ / deck.js navigation extension
28
+ %a{ :href => '#', :class => 'deck-prev-link', :title => 'Previous' } ←
29
+ %a{ :href => '#', :class => 'deck-next-link', :title => 'Next' } →
30
+
31
+ / deck.js hash extension
32
+ %a{ :href => '.', :class => 'deck-permalink', :title => 'Permalink to this slide' } #
33
+
34
+ / deck.js status extension
35
+ %p.deck-status
36
+ %span.deck-status-current
37
+ \/
38
+ %span.deck-status-total
39
+
40
+ / jQuery & deck.js
41
+ = script "deck.js/support/jquery.1.6.4.min.js"
42
+ = script "deck.js/core/deck.core.js"
43
+
44
+ / deck.js extension JS files
45
+ - extensions_js_files.each do |js_file|
46
+ = script js_file
47
+
48
+ / your custom JS here, including call to initialize deck.js-codemirror
49
+ - js_files.each do |js_file|
50
+ = script js_file
51
+
52
+ / Initialize the deck.
53
+ %script{:type => "text/javascript"}
54
+ $(function() { $.deck('.slide'); });