slide_hero 0.0.2
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/Guardfile +28 -0
- data/LICENSE.txt +22 -0
- data/README.md +161 -0
- data/Rakefile +9 -0
- data/bin/slidehero +37 -0
- data/config.ru +14 -0
- data/lib/slide_hero/code.rb +16 -0
- data/lib/slide_hero/dsl.rb +10 -0
- data/lib/slide_hero/grouped_slides.rb +21 -0
- data/lib/slide_hero/list.rb +29 -0
- data/lib/slide_hero/list_point.rb +26 -0
- data/lib/slide_hero/point.rb +27 -0
- data/lib/slide_hero/presentation.rb +36 -0
- data/lib/slide_hero/slide.rb +47 -0
- data/lib/slide_hero/version.rb +3 -0
- data/lib/slide_hero/views/_footer.html.erb +0 -0
- data/lib/slide_hero/views/_header.html.erb +0 -0
- data/lib/slide_hero/views/code.html.erb +3 -0
- data/lib/slide_hero/views/empty.html +12 -0
- data/lib/slide_hero/views/grouped_slides.html.erb +5 -0
- data/lib/slide_hero/views/layout.html.erb +54 -0
- data/lib/slide_hero/views/ordered_list.html.erb +5 -0
- data/lib/slide_hero/views/slide.html.erb +6 -0
- data/lib/slide_hero/views/unordered_list.html.erb +5 -0
- data/lib/slide_hero.rb +15 -0
- data/slide_hero.gemspec +29 -0
- data/templates/new_presentation.tt +11 -0
- data/test/fixtures/testclass.rb +5 -0
- data/test/minitest_helper.rb +18 -0
- data/test/slide_hero/code_spec.rb +29 -0
- data/test/slide_hero/dsl_spec.rb +27 -0
- data/test/slide_hero/grouped_slides_spec.rb +29 -0
- data/test/slide_hero/list_point_spec.rb +34 -0
- data/test/slide_hero/list_spec.rb +49 -0
- data/test/slide_hero/point_spec.rb +25 -0
- data/test/slide_hero/presentation_spec.rb +56 -0
- data/test/slide_hero/slide_spec.rb +147 -0
- data/test/slide_hero_spec.rb +15 -0
- data/vendor/reveal.js/.gitignore +6 -0
- data/vendor/reveal.js/.travis.yml +5 -0
- data/vendor/reveal.js/Gruntfile.js +132 -0
- data/vendor/reveal.js/LICENSE +19 -0
- data/vendor/reveal.js/README.md +798 -0
- data/vendor/reveal.js/css/print/paper.css +176 -0
- data/vendor/reveal.js/css/print/pdf.css +190 -0
- data/vendor/reveal.js/css/reveal.css +1649 -0
- data/vendor/reveal.js/css/reveal.min.css +7 -0
- data/vendor/reveal.js/css/theme/README.md +23 -0
- data/vendor/reveal.js/css/theme/beige.css +142 -0
- data/vendor/reveal.js/css/theme/default.css +142 -0
- data/vendor/reveal.js/css/theme/moon.css +142 -0
- data/vendor/reveal.js/css/theme/night.css +130 -0
- data/vendor/reveal.js/css/theme/serif.css +132 -0
- data/vendor/reveal.js/css/theme/simple.css +132 -0
- data/vendor/reveal.js/css/theme/sky.css +139 -0
- data/vendor/reveal.js/css/theme/solarized.css +142 -0
- data/vendor/reveal.js/css/theme/source/beige.scss +50 -0
- data/vendor/reveal.js/css/theme/source/default.scss +42 -0
- data/vendor/reveal.js/css/theme/source/moon.scss +68 -0
- data/vendor/reveal.js/css/theme/source/night.scss +35 -0
- data/vendor/reveal.js/css/theme/source/serif.scss +35 -0
- data/vendor/reveal.js/css/theme/source/simple.scss +38 -0
- data/vendor/reveal.js/css/theme/source/sky.scss +46 -0
- data/vendor/reveal.js/css/theme/source/solarized.scss +74 -0
- data/vendor/reveal.js/css/theme/template/mixins.scss +29 -0
- data/vendor/reveal.js/css/theme/template/settings.scss +34 -0
- data/vendor/reveal.js/css/theme/template/theme.scss +163 -0
- data/vendor/reveal.js/examples/assets/image1.png +0 -0
- data/vendor/reveal.js/examples/assets/image2.png +0 -0
- data/vendor/reveal.js/examples/barebones.html +42 -0
- data/vendor/reveal.js/examples/embedded-media.html +49 -0
- data/vendor/reveal.js/examples/math.html +185 -0
- data/vendor/reveal.js/examples/slide-backgrounds.html +101 -0
- data/vendor/reveal.js/js/reveal.js +2788 -0
- data/vendor/reveal.js/js/reveal.min.js +8 -0
- data/vendor/reveal.js/lib/css/zenburn.css +115 -0
- data/vendor/reveal.js/lib/font/league_gothic-webfont.eot +0 -0
- data/vendor/reveal.js/lib/font/league_gothic-webfont.svg +230 -0
- data/vendor/reveal.js/lib/font/league_gothic-webfont.ttf +0 -0
- data/vendor/reveal.js/lib/font/league_gothic-webfont.woff +0 -0
- data/vendor/reveal.js/lib/font/league_gothic_license +2 -0
- data/vendor/reveal.js/lib/js/classList.js +2 -0
- data/vendor/reveal.js/lib/js/head.min.js +8 -0
- data/vendor/reveal.js/lib/js/html5shiv.js +7 -0
- data/vendor/reveal.js/package.json +45 -0
- data/vendor/reveal.js/plugin/highlight/highlight.js +31 -0
- data/vendor/reveal.js/plugin/leap/leap.js +157 -0
- data/vendor/reveal.js/plugin/markdown/example.html +98 -0
- data/vendor/reveal.js/plugin/markdown/example.md +31 -0
- data/vendor/reveal.js/plugin/markdown/markdown.js +220 -0
- data/vendor/reveal.js/plugin/markdown/marked.js +37 -0
- data/vendor/reveal.js/plugin/math/math.js +64 -0
- data/vendor/reveal.js/plugin/multiplex/client.js +13 -0
- data/vendor/reveal.js/plugin/multiplex/index.js +56 -0
- data/vendor/reveal.js/plugin/multiplex/master.js +50 -0
- data/vendor/reveal.js/plugin/notes/notes.html +259 -0
- data/vendor/reveal.js/plugin/notes/notes.js +78 -0
- data/vendor/reveal.js/plugin/notes-server/client.js +57 -0
- data/vendor/reveal.js/plugin/notes-server/index.js +59 -0
- data/vendor/reveal.js/plugin/notes-server/notes.html +142 -0
- data/vendor/reveal.js/plugin/postmessage/example.html +39 -0
- data/vendor/reveal.js/plugin/postmessage/postmessage.js +42 -0
- data/vendor/reveal.js/plugin/print-pdf/print-pdf.js +44 -0
- data/vendor/reveal.js/plugin/remotes/remotes.js +39 -0
- data/vendor/reveal.js/plugin/search/search.js +196 -0
- data/vendor/reveal.js/plugin/zoom-js/zoom.js +256 -0
- metadata +277 -0
data/slide_hero.gemspec
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'slide_hero/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "slide_hero"
|
|
8
|
+
spec.version = SlideHero::VERSION
|
|
9
|
+
spec.authors = ["Steven Nunez"]
|
|
10
|
+
spec.email = ["steven.nunez@gmail.com"]
|
|
11
|
+
spec.description = %q{Used for creating slide decks backed by reveal.js}
|
|
12
|
+
spec.summary = %q{Used for creating slide decks backed by reveal.js}
|
|
13
|
+
spec.homepage = ""
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files`.split($/)
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_dependency "tilt", "~> 1.4.1"
|
|
22
|
+
spec.add_dependency "thor", "~> 0.18.1"
|
|
23
|
+
spec.add_dependency "rack", "~> 1.5.2"
|
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
|
25
|
+
spec.add_development_dependency "rake"
|
|
26
|
+
spec.add_development_dependency "minitest"
|
|
27
|
+
spec.add_development_dependency "guard"
|
|
28
|
+
spec.add_development_dependency "guard-minitest"
|
|
29
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
2
|
+
require 'slide_hero'
|
|
3
|
+
|
|
4
|
+
require 'minitest/autorun'
|
|
5
|
+
require 'minitest/spec'
|
|
6
|
+
def assert_dom_match(expected, actual)
|
|
7
|
+
dom_clean(actual).must_equal(
|
|
8
|
+
dom_clean(expected))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def assert_dom_includes(expected, actual)
|
|
12
|
+
dom_clean(actual).must_include(
|
|
13
|
+
dom_clean(expected))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def dom_clean(html)
|
|
17
|
+
html.gsub!(/>\s*</, '><').strip
|
|
18
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
|
|
3
|
+
module SlideHero
|
|
4
|
+
describe Code do
|
|
5
|
+
it "formats code properly" do
|
|
6
|
+
code = Code.new(:ruby) do
|
|
7
|
+
"test/fixtures/testclass.rb"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
code.compile.strip.must_equal '<pre><code data-trim>
|
|
11
|
+
class Working
|
|
12
|
+
def some_method
|
|
13
|
+
"woot!"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
</code></pre>'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "exits if file is not found" do
|
|
21
|
+
|
|
22
|
+
lambda do
|
|
23
|
+
code = Code.new(:ruby) do
|
|
24
|
+
"dont_exists.rb"
|
|
25
|
+
end
|
|
26
|
+
end.must_raise SystemExit
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
|
|
3
|
+
module SlideHero
|
|
4
|
+
describe DSL do
|
|
5
|
+
include SlideHero::DSL
|
|
6
|
+
it "creates a presentation object at root object" do
|
|
7
|
+
pres = presentation "I like turtles" do
|
|
8
|
+
slide "Turtles are cool" do
|
|
9
|
+
point "Not as cool as fezzes"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
pres.must_include "Turtles are cool"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "passes code properly" do
|
|
16
|
+
pres = presentation "Code" do
|
|
17
|
+
slide "Code test" do
|
|
18
|
+
code(:ruby) do
|
|
19
|
+
"test/fixtures/testclass.rb"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
pres.must_include "class Working"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
|
|
3
|
+
module SlideHero
|
|
4
|
+
describe GroupedSlides do
|
|
5
|
+
describe "nesting slides" do
|
|
6
|
+
it "groups sections" do
|
|
7
|
+
grouped_slides = GroupedSlides.new do
|
|
8
|
+
slide "banana" do
|
|
9
|
+
point "High in potassium"
|
|
10
|
+
end
|
|
11
|
+
slide "apple" do
|
|
12
|
+
point "Good if you hate doctors"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
assert_dom_match grouped_slides.compile, "<section>" +
|
|
17
|
+
"<section data-transition=\"default\">" +
|
|
18
|
+
"<h1>banana</h1>" +
|
|
19
|
+
"<p>High in potassium</p>" +
|
|
20
|
+
"</section>" +
|
|
21
|
+
"<section data-transition=\"default\">" +
|
|
22
|
+
"<h1>apple</h1>" +
|
|
23
|
+
"<p>Good if you hate doctors</p>" +
|
|
24
|
+
"</section>" +
|
|
25
|
+
"</section>"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
|
|
3
|
+
module SlideHero
|
|
4
|
+
describe ListPoint do
|
|
5
|
+
it "takes text and an animation on initialization" do
|
|
6
|
+
list_point = ListPoint.new("point!", animation: nil)
|
|
7
|
+
list_point.text.must_equal "point!"
|
|
8
|
+
list_point.animation.must_equal nil
|
|
9
|
+
list_point.animation_class.must_equal nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "#animation_class" do
|
|
13
|
+
it "applies fragement if animation is true" do
|
|
14
|
+
list_point = ListPoint.new("foo", animation: true)
|
|
15
|
+
list_point.animation_class.must_equal " class=\"fragment \""
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "only applies simple animation if value not supported" do
|
|
19
|
+
list_point = ListPoint.new("foo", animation: "banana")
|
|
20
|
+
list_point.animation_class.must_equal " class=\"fragment \""
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "applies extra classes for supported animations" do
|
|
24
|
+
supported_animations = %w{grow shrink roll-in fade-out
|
|
25
|
+
highlight-red highlight-green highlight-blue}
|
|
26
|
+
|
|
27
|
+
supported_animations.each do |animation|
|
|
28
|
+
list_point = ListPoint.new("foo", animation: animation)
|
|
29
|
+
list_point.animation_class.must_equal " class=\"fragment #{animation}\""
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
|
|
3
|
+
module SlideHero
|
|
4
|
+
describe List do
|
|
5
|
+
it "takes a block of items to list" do
|
|
6
|
+
list = List.new do
|
|
7
|
+
point "A thing"
|
|
8
|
+
point "another"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
assert_dom_match(list.compile, '<ul><li>A thing</li><li>another</li></ul>')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "returns an ordered list" do
|
|
15
|
+
list = List.new(:ordered) do
|
|
16
|
+
point "A thing"
|
|
17
|
+
point "another"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
assert_dom_match(list.compile, '<ol><li>A thing</li><li>another</li></ol>')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "supports animations" do
|
|
24
|
+
list = List.new do
|
|
25
|
+
point "animated!", animation: true
|
|
26
|
+
end
|
|
27
|
+
assert_dom_match(list.compile, '<ul>' +
|
|
28
|
+
'<li class="fragment ">' +
|
|
29
|
+
'animated!' +
|
|
30
|
+
'</li>' +
|
|
31
|
+
'</ul>')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "supports specific animations" do
|
|
35
|
+
supported_animations = %w{grow shrink roll-in fade-out
|
|
36
|
+
highlight-red highlight-green highlight-blue}
|
|
37
|
+
supported_animations.each do |animation|
|
|
38
|
+
list = List.new do
|
|
39
|
+
point "all the animations!", animation: animation
|
|
40
|
+
end
|
|
41
|
+
assert_dom_match list.compile, '<ul>' +
|
|
42
|
+
"<li class=\"fragment #{animation}\">" +
|
|
43
|
+
'all the animations!' +
|
|
44
|
+
'</li>' +
|
|
45
|
+
'</ul>'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
module SlideHero
|
|
3
|
+
describe Point do
|
|
4
|
+
it "wraps it's text in p tags" do
|
|
5
|
+
point = Point.new("I'm a tiger")
|
|
6
|
+
point.compile.must_equal "<p>I'm a tiger</p>"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "supports animations" do
|
|
10
|
+
point = Point.new("Animation", animation: true)
|
|
11
|
+
point.compile.must_equal '<p class="fragment ">Animation</p>'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "supports specific animations" do
|
|
15
|
+
supported_animations = %w{grow shrink roll-in fade-out
|
|
16
|
+
highlight-red highlight-green highlight-blue}
|
|
17
|
+
supported_animations.each do |animation|
|
|
18
|
+
point = Point.new("Animation", animation: animation)
|
|
19
|
+
point.compile.must_equal "<p class=\"fragment #{animation}\">" +
|
|
20
|
+
"Animation" +
|
|
21
|
+
"</p>"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
|
|
3
|
+
module SlideHero
|
|
4
|
+
describe Presentation do
|
|
5
|
+
it "takes a title" do
|
|
6
|
+
pres = Presentation.new("Grow gills in 8 days") do
|
|
7
|
+
end
|
|
8
|
+
pres.title.must_equal "Grow gills in 8 days"
|
|
9
|
+
pres.compile.must_include "<title>Grow gills in 8 days</title>"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "compiles to an empty entire presentation" do
|
|
13
|
+
pres = Presentation.new("My Pres") {}
|
|
14
|
+
pres.compile.must_include "<div class=\"slides\">"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "takes slides" do
|
|
18
|
+
pres = Presentation.new("slides") do
|
|
19
|
+
slide "My slide" do
|
|
20
|
+
point "Bananas are tastey"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
pres.slides.count.must_equal 1
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "takes all of slide's options" do
|
|
27
|
+
pres = Presentation.new("slides") do
|
|
28
|
+
slide("My slide", headline_size: :small, transition: :default) do
|
|
29
|
+
point "Bananas are tastey"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
pres.slides.count.must_equal 1
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "takes grouped_slides" do
|
|
36
|
+
pres = Presentation.new("slides") do
|
|
37
|
+
grouped_slides do
|
|
38
|
+
slide "My slide" do
|
|
39
|
+
point "Bananas are tastey"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
pres.slides.count.must_equal 1
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "nests slides in presentation" do
|
|
47
|
+
pres = Presentation.new("New stuff") do
|
|
48
|
+
slide "Nesting!" do
|
|
49
|
+
point "Woot!"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
assert_dom_includes("<section data-transition=\"default\"><h1>Nesting!</h1><p>Woot!</p></section>", pres.compile)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
|
|
3
|
+
module SlideHero
|
|
4
|
+
describe Slide do
|
|
5
|
+
describe "initialization" do
|
|
6
|
+
it "is initialized with a title" do
|
|
7
|
+
slide = Slide.new("Badgers learn knitting")
|
|
8
|
+
slide.headline.must_equal "Badgers learn knitting"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "can take an optional side directive" do
|
|
12
|
+
slide = Slide.new("Badgers learn knitting", headline_size: :large)
|
|
13
|
+
slide.headline_size.must_equal :large
|
|
14
|
+
|
|
15
|
+
slide = Slide.new("Snacks lead to revolution in food care", headline_size: :medium)
|
|
16
|
+
slide.headline_size.must_equal :medium
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "compilation" do
|
|
21
|
+
it "outputs object to html" do
|
|
22
|
+
slide = Slide.new("To Markup!")
|
|
23
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
24
|
+
"<h1>To Markup!</h1> " +
|
|
25
|
+
"</section>"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "respects headline size" do
|
|
29
|
+
slide = Slide.new("To Markup!", headline_size: :medium)
|
|
30
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
31
|
+
"<h2>To Markup!</h2>" +
|
|
32
|
+
"</section>"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "takes transitions" do
|
|
36
|
+
slide = Slide.new("transitions", transition: :zoom) do
|
|
37
|
+
end
|
|
38
|
+
assert_dom_match slide.compile, '<section data-transition="zoom">' +
|
|
39
|
+
'<h1>transitions</h1>' +
|
|
40
|
+
'</section>'
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "#point syntax" do
|
|
45
|
+
it "embeds text in p tags by default" do
|
|
46
|
+
slide = Slide.new "Embedding" do
|
|
47
|
+
point "I'm embedded!"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
51
|
+
"<h1>Embedding</h1>" +
|
|
52
|
+
"<p>I'm embedded!</p>" +
|
|
53
|
+
"</section>"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "embeds raw html" do
|
|
57
|
+
slide = Slide.new "Embedding" do
|
|
58
|
+
point "<small>I'm embedded!</small>"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
62
|
+
"<h1>Embedding</h1>" +
|
|
63
|
+
"<p><small>I'm embedded!</small></p>" +
|
|
64
|
+
"</section>"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "embeds multiple points" do
|
|
68
|
+
slide = Slide.new "Embedding" do
|
|
69
|
+
point "I'm embedded!"
|
|
70
|
+
point "Me too!"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
74
|
+
"<h1>Embedding</h1>" +
|
|
75
|
+
"<p>I'm embedded!</p>" +
|
|
76
|
+
"<p>Me too!</p>" +
|
|
77
|
+
"</section>"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "animates points" do
|
|
81
|
+
slide = Slide.new "Animation" do
|
|
82
|
+
point "I'm animated!", animation: true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">"+
|
|
86
|
+
"<h1>Animation</h1>" +
|
|
87
|
+
"<p>I'm animated!</p>" +
|
|
88
|
+
"</section>"
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe "#list" do
|
|
94
|
+
it "creates bullets from a block" do
|
|
95
|
+
slide = Slide.new "Lists" do
|
|
96
|
+
list do
|
|
97
|
+
point "Bullet Points"
|
|
98
|
+
point "Another Point"
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
102
|
+
"<h1>Lists</h1>" +
|
|
103
|
+
"<ul>" +
|
|
104
|
+
"<li>Bullet Points</li>" +
|
|
105
|
+
"<li>Another Point</li>" +
|
|
106
|
+
"</ul>" +
|
|
107
|
+
"</section>"
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it "creates ordered lists from a block" do
|
|
111
|
+
slide = Slide.new "Lists" do
|
|
112
|
+
list(:ordered) do
|
|
113
|
+
point "Ordered!"
|
|
114
|
+
point "Also ordered!"
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
118
|
+
"<h1>Lists</h1>" +
|
|
119
|
+
"<ol>" +
|
|
120
|
+
"<li>Ordered!</li>" +
|
|
121
|
+
"<li>Also ordered!</li>" +
|
|
122
|
+
"</ol>" +
|
|
123
|
+
"</section>"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
describe "#code" do
|
|
127
|
+
it "embeds code in a slide" do
|
|
128
|
+
slide = Slide.new "Code" do
|
|
129
|
+
code(:ruby) do
|
|
130
|
+
"test/fixtures/testclass.rb"
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
|
135
|
+
"<h1>Code</h1>" +
|
|
136
|
+
"<pre><code data-trim>
|
|
137
|
+
class Working
|
|
138
|
+
def some_method
|
|
139
|
+
\"woot!\"
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
</code></pre></section>"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'minitest_helper'
|
|
2
|
+
require_relative 'slide_hero/slide_spec'
|
|
3
|
+
require_relative 'slide_hero/point_spec'
|
|
4
|
+
require_relative 'slide_hero/list_spec'
|
|
5
|
+
require_relative 'slide_hero/list_point_spec'
|
|
6
|
+
require_relative 'slide_hero/grouped_slides_spec'
|
|
7
|
+
require_relative 'slide_hero/code_spec'
|
|
8
|
+
require_relative 'slide_hero/presentation_spec'
|
|
9
|
+
require_relative 'slide_hero/dsl_spec'
|
|
10
|
+
|
|
11
|
+
describe ::SlideHero do
|
|
12
|
+
it "has a version" do
|
|
13
|
+
::SlideHero::VERSION.wont_be_nil
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/* global module:false */
|
|
2
|
+
module.exports = function(grunt) {
|
|
3
|
+
|
|
4
|
+
// Project configuration
|
|
5
|
+
grunt.initConfig({
|
|
6
|
+
pkg: grunt.file.readJSON('package.json'),
|
|
7
|
+
meta: {
|
|
8
|
+
banner:
|
|
9
|
+
'/*!\n' +
|
|
10
|
+
' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
|
|
11
|
+
' * http://lab.hakim.se/reveal-js\n' +
|
|
12
|
+
' * MIT licensed\n' +
|
|
13
|
+
' *\n' +
|
|
14
|
+
' * Copyright (C) 2013 Hakim El Hattab, http://hakim.se\n' +
|
|
15
|
+
' */'
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
// Tests will be added soon
|
|
19
|
+
qunit: {
|
|
20
|
+
files: [ 'test/**/*.html' ]
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
uglify: {
|
|
24
|
+
options: {
|
|
25
|
+
banner: '<%= meta.banner %>\n'
|
|
26
|
+
},
|
|
27
|
+
build: {
|
|
28
|
+
src: 'js/reveal.js',
|
|
29
|
+
dest: 'js/reveal.min.js'
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
cssmin: {
|
|
34
|
+
compress: {
|
|
35
|
+
files: {
|
|
36
|
+
'css/reveal.min.css': [ 'css/reveal.css' ]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
sass: {
|
|
42
|
+
main: {
|
|
43
|
+
files: {
|
|
44
|
+
'css/theme/default.css': 'css/theme/source/default.scss',
|
|
45
|
+
'css/theme/beige.css': 'css/theme/source/beige.scss',
|
|
46
|
+
'css/theme/night.css': 'css/theme/source/night.scss',
|
|
47
|
+
'css/theme/serif.css': 'css/theme/source/serif.scss',
|
|
48
|
+
'css/theme/simple.css': 'css/theme/source/simple.scss',
|
|
49
|
+
'css/theme/sky.css': 'css/theme/source/sky.scss',
|
|
50
|
+
'css/theme/moon.css': 'css/theme/source/moon.scss',
|
|
51
|
+
'css/theme/solarized.css': 'css/theme/source/solarized.scss'
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
jshint: {
|
|
57
|
+
options: {
|
|
58
|
+
curly: false,
|
|
59
|
+
eqeqeq: true,
|
|
60
|
+
immed: true,
|
|
61
|
+
latedef: true,
|
|
62
|
+
newcap: true,
|
|
63
|
+
noarg: true,
|
|
64
|
+
sub: true,
|
|
65
|
+
undef: true,
|
|
66
|
+
eqnull: true,
|
|
67
|
+
browser: true,
|
|
68
|
+
expr: true,
|
|
69
|
+
globals: {
|
|
70
|
+
head: false,
|
|
71
|
+
module: false,
|
|
72
|
+
console: false
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
files: [ 'Gruntfile.js', 'js/reveal.js' ]
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
connect: {
|
|
79
|
+
server: {
|
|
80
|
+
options: {
|
|
81
|
+
port: 8000,
|
|
82
|
+
base: '.'
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
zip: {
|
|
88
|
+
'reveal-js-presentation.zip': [
|
|
89
|
+
'index.html',
|
|
90
|
+
'css/**',
|
|
91
|
+
'js/**',
|
|
92
|
+
'lib/**',
|
|
93
|
+
'images/**',
|
|
94
|
+
'plugin/**'
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
watch: {
|
|
99
|
+
main: {
|
|
100
|
+
files: [ 'Gruntfile.js', 'js/reveal.js', 'css/reveal.css' ],
|
|
101
|
+
tasks: 'default'
|
|
102
|
+
},
|
|
103
|
+
theme: {
|
|
104
|
+
files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ],
|
|
105
|
+
tasks: 'themes'
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Dependencies
|
|
112
|
+
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
|
|
113
|
+
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
|
|
114
|
+
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
|
|
115
|
+
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
|
116
|
+
grunt.loadNpmTasks( 'grunt-contrib-sass' );
|
|
117
|
+
grunt.loadNpmTasks( 'grunt-contrib-connect' );
|
|
118
|
+
grunt.loadNpmTasks( 'grunt-zip' );
|
|
119
|
+
|
|
120
|
+
// Default task
|
|
121
|
+
grunt.registerTask( 'default', [ 'jshint', 'cssmin', 'uglify' ] );
|
|
122
|
+
|
|
123
|
+
// Theme task
|
|
124
|
+
grunt.registerTask( 'themes', [ 'sass' ] );
|
|
125
|
+
|
|
126
|
+
// Package presentation to archive
|
|
127
|
+
grunt.registerTask( 'package', [ 'default', 'zip' ] );
|
|
128
|
+
|
|
129
|
+
// Serve presentation locally
|
|
130
|
+
grunt.registerTask( 'serve', [ 'connect', 'watch' ] );
|
|
131
|
+
|
|
132
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (C) 2013 Hakim El Hattab, http://hakim.se
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
|
11
|
+
all copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
+
THE SOFTWARE.
|