slide_hero 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -0
- data/README.md +138 -63
- data/bin/slidehero +35 -9
- data/config.ru +1 -1
- data/lib/slide_hero/code.rb +4 -2
- data/lib/slide_hero/grouped_slides.rb +4 -3
- data/lib/slide_hero/image.rb +23 -0
- data/lib/slide_hero/media.rb +13 -0
- data/lib/slide_hero/note.rb +12 -0
- data/lib/slide_hero/presentation.rb +7 -2
- data/lib/slide_hero/slide.rb +15 -3
- data/lib/slide_hero/version.rb +1 -1
- data/lib/slide_hero/views/code.html.erb +2 -2
- data/lib/slide_hero/views/layout.html.erb +8 -1
- data/lib/slide_hero.rb +3 -0
- data/test/slide_hero/code_spec.rb +24 -3
- data/test/slide_hero/dsl_spec.rb +13 -2
- data/test/slide_hero/grouped_slides_spec.rb +18 -0
- data/test/slide_hero/image_spec.rb +15 -0
- data/test/slide_hero/media_spec.rb +27 -0
- data/test/slide_hero/note_spec.rb +10 -0
- data/test/slide_hero/presentation_spec.rb +22 -0
- data/test/slide_hero/slide_spec.rb +36 -4
- data/test/slide_hero_spec.rb +3 -0
- metadata +16 -5
- /data/test/fixtures/{testclass.rb → code/testclass.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7412ed3f8e771683d9a861f4873cb426323f25b0
|
4
|
+
data.tar.gz: 70c8c9d3dadbfa3ebc399e18394c377948acbd00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3ae4ec73cefdd4ca4154adfcc75032148f46ddcc5f7f150d6976beb48656f7f56ef7b3737fc8b9b002315cb1d6337ded401ef1878fd7c761ed2094f7434412d
|
7
|
+
data.tar.gz: fcd6928a0f84a85223d3c14bc381bcf1b1c4e897e96dd9c970f13a154f5aa0728014a4cc102f7e6e0672ce2aab4c1f3c6bcf99fa1c0c5b453174bc5efcaccea3
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
slide_hero
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,9 @@ Requires Ruby 2.0.0
|
|
9
9
|
|
10
10
|
Add this line to your application's Gemfile:
|
11
11
|
|
12
|
-
|
12
|
+
```ruby
|
13
|
+
gem 'slide_hero'
|
14
|
+
```
|
13
15
|
|
14
16
|
And then execute:
|
15
17
|
|
@@ -48,107 +50,180 @@ The DSL for SlideHero was created to add expressibility to creating slides.
|
|
48
50
|
|
49
51
|
**presentation**
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
53
|
+
```ruby
|
54
|
+
presentation "My Presentation" do
|
55
|
+
|
56
|
+
end
|
57
|
+
```
|
55
58
|
|
56
59
|
`#presentation` indicates the beginning of a presentation. You can have one of these per file. The String passed is used as the title for the presentation.
|
57
60
|
|
58
61
|
**slide**
|
59
62
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
63
|
+
```ruby
|
64
|
+
presentation "My Presentation" do
|
65
|
+
slide "A slide" do
|
66
|
+
#…
|
67
|
+
end
|
68
|
+
end
|
69
|
+
```
|
65
70
|
|
66
71
|
`#slide` is used to create a new slide. The string is the headline of the slide. `#slide` can take an optional argument of `headline_size:`. Valid options are :small, :medium, :large. These create h3, h2, and h1 elements respectively.
|
67
72
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
73
|
+
```ruby
|
74
|
+
presentation "My Presentation" do
|
75
|
+
slide "A slide", headline_size: :small do
|
76
|
+
#…
|
77
|
+
end
|
78
|
+
end
|
79
|
+
```
|
80
|
+
|
74
81
|
`#slide` can have transitions applied as well. Valid transitions are: :cube, :page, :concave, :zoom, :linear, :fade, :none, and :default
|
75
82
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
83
|
+
```ruby
|
84
|
+
presentation "My Presentation" do
|
85
|
+
slide "A slide", transition: :slide do
|
86
|
+
#…
|
87
|
+
end
|
88
|
+
end
|
89
|
+
```
|
90
|
+
**defaults**
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
presentation "My Presentation" do
|
94
|
+
defaults headline_size: :medium, transition: :fade
|
95
|
+
|
96
|
+
slide "A slide" do
|
97
|
+
#…
|
98
|
+
end
|
99
|
+
|
100
|
+
slide "Some slides override", headline_size: :large do
|
101
|
+
#…#…
|
102
|
+
end
|
103
|
+
end
|
104
|
+
```
|
105
|
+
|
106
|
+
You can set slide defaults for `headline_size` or `transition` by using `#defaults`. A slide default applies to all slides unless an individual slide overrides it.
|
107
|
+
|
82
108
|
**points**
|
83
109
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
110
|
+
```ruby
|
111
|
+
presentation "My Presentation" do
|
112
|
+
slide "A slide" do
|
113
|
+
point "An interesting Point"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
```
|
89
117
|
|
90
118
|
`#point` adds p tag wrapped text to your presentation
|
91
119
|
|
92
120
|
**grouped_slides**
|
93
121
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
end
|
122
|
+
```ruby
|
123
|
+
presentation "My Presentation" do
|
124
|
+
grouped_slides do
|
125
|
+
slide "Slide 1" do
|
126
|
+
end
|
127
|
+
slide "Slide 2" do
|
101
128
|
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
```
|
102
132
|
|
103
133
|
`#grouped_slides` lets you nest slides. In reveal, this translates into vertical slides.
|
104
134
|
|
105
135
|
**lists**
|
106
136
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
point "An even more interesting point about nargles"
|
114
|
-
end
|
115
|
-
end
|
116
|
-
slide "Slide 2" do
|
117
|
-
list(:ordered) do
|
118
|
-
point "I should go first"
|
119
|
-
point "I'm ok going second"
|
120
|
-
end
|
121
|
-
end
|
137
|
+
```ruby
|
138
|
+
presentation "My Presentation" do
|
139
|
+
slide "Slide 1" do
|
140
|
+
list do
|
141
|
+
point "An interesting point about monkeys"
|
142
|
+
point "An even more interesting point about nargles"
|
122
143
|
end
|
144
|
+
end
|
145
|
+
slide "Slide 2" do
|
146
|
+
list(:ordered) do
|
147
|
+
point "I should go first"
|
148
|
+
point "I'm ok going second"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
```
|
123
153
|
|
124
154
|
`#list` must be nested in a slide. It takes an optional argument of :ordered to
|
125
155
|
create an ordered list. List items are added by the `#point` method.
|
126
156
|
|
127
157
|
**code**
|
128
158
|
|
159
|
+
```ruby
|
160
|
+
presentation "My Presentation" do
|
161
|
+
slide "A slide" do
|
162
|
+
code(:ruby) do
|
163
|
+
"working_code.rb"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
```
|
168
|
+
|
169
|
+
`#code` must be nested in a slide. It loads any code file in the same directory as the file.
|
170
|
+
The language passed as an argument will be embedded in the markup.
|
171
|
+
code must be in the `code` folder. An optional second argument of a base location can be passed into the code method. Your folder must also have a `code` folder.
|
172
|
+
All supported languages can be found on the [Highlight.js Page](http://softwaremaniacs.org/media/soft/highlight/test.html)
|
173
|
+
|
174
|
+
**note**
|
175
|
+
|
176
|
+
```ruby
|
177
|
+
presentation "My Presentation" do
|
178
|
+
slide "A slide" do
|
179
|
+
note "Remind them to shower"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
```
|
183
|
+
|
184
|
+
`#note` must be nested in a slide. These will show up on speaker's notes.
|
185
|
+
|
186
|
+
**image**
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
presentation "My Presentation" do
|
190
|
+
slide "A slide" do
|
191
|
+
image "chunky_bacon.png"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
```
|
195
|
+
`#image` must be nested in a slide. All images in the images folder will be ported over on compilation. Use the name of the image, with out the 'images' subfolder
|
196
|
+
In this example, it will load an image named 'chunky_bacon.png in the images folder.
|
197
|
+
|
198
|
+
**media**
|
199
|
+
|
129
200
|
presentation "My Presentation" do
|
130
|
-
slide "A slide" do
|
131
|
-
|
132
|
-
|
133
|
-
|
201
|
+
slide "A slide with video" do
|
202
|
+
media "video.mp4", type: video
|
203
|
+
end
|
204
|
+
|
205
|
+
slide "A slide with video" do
|
206
|
+
media "audio.mp3", type: audio
|
134
207
|
end
|
135
208
|
end
|
136
209
|
|
137
|
-
`#
|
210
|
+
`#media` must be nested in a slide. This will create an auto playing video or audio element on the slide. Files must be in the audio or video directory.
|
138
211
|
|
139
212
|
#### Animation
|
140
213
|
|
141
214
|
Animation for points are supported.
|
142
215
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
216
|
+
```ruby
|
217
|
+
#…
|
218
|
+
slide do
|
219
|
+
point "My point", animation: "grow"
|
220
|
+
list do
|
221
|
+
point "My", animation: "step"
|
222
|
+
point "Staggered", animation: "step"
|
223
|
+
point "List", animation: "step"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
```
|
152
227
|
|
153
228
|
Supported animations are: step, grow, shrink, roll-in, fade-out, highlight-red, highlight-green, and highlight-blue
|
154
229
|
|
data/bin/slidehero
CHANGED
@@ -10,26 +10,52 @@ class PresentationGenerator < Thor
|
|
10
10
|
def new(name)
|
11
11
|
@name = name
|
12
12
|
template 'templates/new_presentation.tt', "#{name}/presentation.rb"
|
13
|
+
['/images', '/audio', '/video', '/code']. each do |media|
|
14
|
+
empty_directory "#{name}/#{media}"
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
desc "compile PRESENTATION_NAME (defaults to presentation.rb", "Compile presentation"
|
16
|
-
def compile(name = 'presentation.rb')
|
17
|
-
directory 'vendor/reveal.js',
|
18
|
-
|
19
|
+
def compile(name = 'presentation.rb', folder="presentation")
|
20
|
+
directory 'vendor/reveal.js', folder
|
21
|
+
move_slide_files(name, folder)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "move_slide_files NAME DEST_FOLDER", "Only move the user generated files"
|
25
|
+
def move_slide_files(name, folder)
|
26
|
+
['/images', '/audio', '/video', '/code']. each do |media|
|
27
|
+
FileUtils.cp_r(File.dirname(File.realdirpath(name)) + media, "#{folder}")
|
28
|
+
end
|
29
|
+
|
30
|
+
File.open("#{folder}/index.html", 'w+') do |f|
|
19
31
|
f.puts eval(File.read(name), SlideHero.get_binding)
|
20
32
|
end
|
21
33
|
end
|
22
34
|
|
23
35
|
desc "serve FILENAME", "starts a server running your presentation on port 9292"
|
24
36
|
def serve(name = 'presentation.rb')
|
25
|
-
|
26
|
-
File.open('.tmp/index.html', 'w+') do |f|
|
27
|
-
f.puts eval(File.read(name), SlideHero.get_binding)
|
28
|
-
end
|
37
|
+
compile(name, '.tmp')
|
29
38
|
puts "Go checkout your awesome presentation at http://localhost:9292!"
|
30
|
-
|
31
|
-
|
39
|
+
|
40
|
+
rackupPid = Process.spawn("rackup #{Gem.loaded_specs['slide_hero'].full_gem_path}/config.ru")
|
41
|
+
|
42
|
+
last_update = Time.now
|
43
|
+
loop do
|
44
|
+
if File.mtime(name) > last_update
|
45
|
+
puts "File change noted!"
|
46
|
+
puts "Recompiling"
|
47
|
+
move_slide_files(name, '.tmp')
|
48
|
+
last_update = File.mtime(name)
|
49
|
+
end
|
50
|
+
sleep 1
|
51
|
+
end
|
52
|
+
|
53
|
+
rescue Exception => e
|
54
|
+
puts e
|
55
|
+
Process.kill(9, rackupPid) rescue Errno::ESRCH
|
32
56
|
remove_dir '.tmp'
|
57
|
+
puts "GOING DOWN!"
|
58
|
+
exit 0
|
33
59
|
end
|
34
60
|
end
|
35
61
|
|
data/config.ru
CHANGED
data/lib/slide_hero/code.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
module SlideHero
|
2
2
|
class Code
|
3
|
-
|
3
|
+
attr_reader :language, :source, :location
|
4
|
+
def initialize(language, code_path=Dir.pwd, &code_file)
|
4
5
|
@language = language
|
5
|
-
@
|
6
|
+
@location = "#{code_path}/code/#{code_file.call}"
|
7
|
+
@source = File.read(location)
|
6
8
|
rescue Errno::ENOENT
|
7
9
|
abort "#{Dir.pwd}/#{code_file.call} not found"
|
8
10
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module SlideHero
|
2
2
|
class GroupedSlides
|
3
|
-
def initialize(&block)
|
3
|
+
def initialize(slide_defaults={}, &block)
|
4
|
+
@slide_defaults = slide_defaults
|
4
5
|
instance_eval(&block)
|
5
6
|
end
|
6
7
|
|
@@ -10,8 +11,8 @@ module SlideHero
|
|
10
11
|
'lib/slide_hero/views/grouped_slides.html.erb')).render(self)
|
11
12
|
end
|
12
13
|
|
13
|
-
def slide(headline, &block)
|
14
|
-
slides << Slide.new(headline, &block).compile
|
14
|
+
def slide(headline, **kwargs, &block)
|
15
|
+
slides << Slide.new(headline, @slide_defaults.merge(**kwargs), &block).compile
|
15
16
|
end
|
16
17
|
|
17
18
|
def slides
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SlideHero
|
2
|
+
class Image
|
3
|
+
attr_reader :location, :alt_text, :width, :height
|
4
|
+
def initialize(location, alt_text="", width:nil, height:nil)
|
5
|
+
@location = location
|
6
|
+
@alt_text = alt_text
|
7
|
+
@width = width
|
8
|
+
@height = height
|
9
|
+
end
|
10
|
+
|
11
|
+
def compile
|
12
|
+
%{<img#{width_attribute}#{height_attribute} src="images/#{location}" alt="#{alt_text}">}
|
13
|
+
end
|
14
|
+
|
15
|
+
def height_attribute
|
16
|
+
%{ height="#{height}"} if height
|
17
|
+
end
|
18
|
+
|
19
|
+
def width_attribute
|
20
|
+
%{ width="#{width}"} if width
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -5,6 +5,7 @@ module SlideHero
|
|
5
5
|
attr_reader :title
|
6
6
|
def initialize(title, &block)
|
7
7
|
@title = title
|
8
|
+
@slide_defaults = {}
|
8
9
|
instance_eval(&block)
|
9
10
|
end
|
10
11
|
|
@@ -17,12 +18,16 @@ module SlideHero
|
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
21
|
+
def defaults(args)
|
22
|
+
@slide_defaults = args
|
23
|
+
end
|
24
|
+
|
20
25
|
def slide(title, **kwargs, &slide_block)
|
21
|
-
slides << Slide.new(title, **kwargs, &slide_block).compile
|
26
|
+
slides << Slide.new(title, @slide_defaults.merge(**kwargs), &slide_block).compile
|
22
27
|
end
|
23
28
|
|
24
29
|
def grouped_slides(&block)
|
25
|
-
slides << GroupedSlides.new(&block).compile
|
30
|
+
slides << GroupedSlides.new(@slide_defaults, &block).compile
|
26
31
|
end
|
27
32
|
|
28
33
|
def collected_slides
|
data/lib/slide_hero/slide.rb
CHANGED
@@ -16,21 +16,33 @@ module SlideHero
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def point(text, animation: nil)
|
19
|
-
points << Point.new(text, animation:
|
19
|
+
points << Point.new(text, animation: animation).compile
|
20
20
|
end
|
21
21
|
|
22
22
|
def list(style=:unordered, &block)
|
23
23
|
points << List.new(style, &block).compile
|
24
24
|
end
|
25
25
|
|
26
|
-
def code(
|
27
|
-
points << Code.new(
|
26
|
+
def code(*args, &code)
|
27
|
+
points << Code.new(*args, &code).compile
|
28
28
|
end
|
29
29
|
|
30
30
|
def points
|
31
31
|
@points ||= []
|
32
32
|
end
|
33
33
|
|
34
|
+
def note(text)
|
35
|
+
points << Note.new(text).compile
|
36
|
+
end
|
37
|
+
|
38
|
+
def image(*args, **kwargs)
|
39
|
+
points << Image.new(*args, **kwargs).compile
|
40
|
+
end
|
41
|
+
|
42
|
+
def media(*args, **kwargs)
|
43
|
+
points << Media.new(*args, **kwargs).compile
|
44
|
+
end
|
45
|
+
|
34
46
|
private
|
35
47
|
def size_to_markup
|
36
48
|
{
|
data/lib/slide_hero/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
<pre><code data-trim>
|
2
|
-
<%=
|
1
|
+
<pre><code data-trim class="<%= language %>">
|
2
|
+
<%= source %>
|
3
3
|
</code></pre>
|
@@ -37,6 +37,11 @@
|
|
37
37
|
|
38
38
|
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
|
39
39
|
transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/fade/none
|
40
|
+
leap: {
|
41
|
+
naturalSwipe : true, // Invert swipe gestures
|
42
|
+
pointerOpacity : 0.5, // Set pointer opacity to 0.5
|
43
|
+
pointerColor : '#d80000' // Red pointer
|
44
|
+
},
|
40
45
|
|
41
46
|
// Optional libraries used to extend on reveal.js
|
42
47
|
dependencies: [
|
@@ -45,7 +50,9 @@
|
|
45
50
|
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
46
51
|
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
|
47
52
|
{ src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
|
48
|
-
{ src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
|
53
|
+
{ src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },
|
54
|
+
{ src: 'plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } },
|
55
|
+
{ src: 'plugin/leap/leap.js', async: true }
|
49
56
|
]
|
50
57
|
});
|
51
58
|
|
data/lib/slide_hero.rb
CHANGED
@@ -6,6 +6,9 @@ require_relative "slide_hero/list_point"
|
|
6
6
|
require_relative "slide_hero/grouped_slides"
|
7
7
|
require_relative "slide_hero/code"
|
8
8
|
require_relative "slide_hero/presentation"
|
9
|
+
require_relative "slide_hero/note"
|
10
|
+
require_relative "slide_hero/image"
|
11
|
+
require_relative "slide_hero/media"
|
9
12
|
require_relative "slide_hero/dsl"
|
10
13
|
|
11
14
|
module SlideHero
|
@@ -2,12 +2,32 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
module SlideHero
|
4
4
|
describe Code do
|
5
|
+
it "takes an optional base path of where to look for files" do
|
6
|
+
code = Code.new(:ruby, File.join(Dir.pwd,"test","fixtures")) do
|
7
|
+
"testclass.rb"
|
8
|
+
end
|
9
|
+
code.location.must_equal(File.join(Dir.pwd,"test","fixtures","code", "testclass.rb"))
|
10
|
+
end
|
11
|
+
it "exposes language from initialization value" do
|
12
|
+
code = Code.new(:ruby, File.join(Dir.pwd,"test","fixtures")) do
|
13
|
+
"testclass.rb"
|
14
|
+
end
|
15
|
+
code.language.must_equal :ruby
|
16
|
+
end
|
17
|
+
|
18
|
+
it "exposes source from initialization value" do
|
19
|
+
code = Code.new(:ruby, File.join(Dir.pwd,"test","fixtures")) do
|
20
|
+
"testclass.rb"
|
21
|
+
end
|
22
|
+
code.source.must_include "class Working"
|
23
|
+
end
|
24
|
+
|
5
25
|
it "formats code properly" do
|
6
|
-
code = Code.new(:ruby) do
|
7
|
-
"
|
26
|
+
code = Code.new(:ruby, File.join(Dir.pwd,"test","fixtures")) do
|
27
|
+
"testclass.rb"
|
8
28
|
end
|
9
29
|
|
10
|
-
code.compile.strip.must_equal '<pre><code data-trim>
|
30
|
+
code.compile.strip.must_equal '<pre><code data-trim class="ruby">
|
11
31
|
class Working
|
12
32
|
def some_method
|
13
33
|
"woot!"
|
@@ -25,5 +45,6 @@ end
|
|
25
45
|
end
|
26
46
|
end.must_raise SystemExit
|
27
47
|
end
|
48
|
+
|
28
49
|
end
|
29
50
|
end
|
data/test/slide_hero/dsl_spec.rb
CHANGED
@@ -15,13 +15,24 @@ module SlideHero
|
|
15
15
|
it "passes code properly" do
|
16
16
|
pres = presentation "Code" do
|
17
17
|
slide "Code test" do
|
18
|
-
code(:ruby) do
|
19
|
-
"
|
18
|
+
code(:ruby, File.join(Dir.pwd,"test","fixtures")) do
|
19
|
+
"testclass.rb"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
pres.must_include "class Working"
|
25
25
|
end
|
26
|
+
it "handles defaults properly" do
|
27
|
+
pres = presentation "Defaults" do
|
28
|
+
defaults headline_size: :medium
|
29
|
+
slide "Outer Slide"
|
30
|
+
grouped_slides do
|
31
|
+
slide "Inner Slide"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
pres.must_include "<h2>Outer Slide</h2>"
|
35
|
+
pres.must_include "<h2>Inner Slide</h2>"
|
36
|
+
end
|
26
37
|
end
|
27
38
|
end
|
@@ -24,6 +24,24 @@ module SlideHero
|
|
24
24
|
"</section>" +
|
25
25
|
"</section>"
|
26
26
|
end
|
27
|
+
|
28
|
+
it "takes all arguments slide handles" do
|
29
|
+
grouped_slides = GroupedSlides.new do
|
30
|
+
slide "Title", headline_size: :medium, transition: :zoom do
|
31
|
+
point "Made one"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
grouped_slides.compile.must_include "transition"
|
36
|
+
grouped_slides.compile.must_include "h2"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "can have defaults passed in" do
|
41
|
+
grouped_slides = GroupedSlides.new(headline_size: :medium) do
|
42
|
+
slide "Title"
|
43
|
+
end
|
44
|
+
grouped_slides.compile.must_include "<h2>Title</h2>"
|
27
45
|
end
|
28
46
|
end
|
29
47
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
module SlideHero
|
4
|
+
describe Image do
|
5
|
+
it "takes an image path and renders appropriate markup" do
|
6
|
+
image = Image.new("cornify.gif", "Unicorn", width: 280, height: 326)
|
7
|
+
image.compile.must_equal %{<img width="280" height="326" src="images/cornify.gif" alt="Unicorn">}
|
8
|
+
end
|
9
|
+
|
10
|
+
it "doesn't require all fields" do
|
11
|
+
image = Image.new("cornify.gif")
|
12
|
+
image.compile.must_equal %{<img src="images/cornify.gif" alt="">}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
module SlideHero
|
4
|
+
describe Media do
|
5
|
+
describe "initialization" do
|
6
|
+
it "is initialized with a url" do
|
7
|
+
media = Media.new("http://www.youtube.com/watch?v=dQw4w9WgXcQ", type: :video)
|
8
|
+
media.url.must_equal "http://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
9
|
+
media.type.must_equal :video
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "video type" do
|
14
|
+
it "compiles to html fragment" do
|
15
|
+
media = Media.new("file.mp4", type: :video)
|
16
|
+
media.compile.must_equal %{<video data-autoplay src="video/file.mp4"></video>}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "audio type" do
|
21
|
+
it "compiles to html fragment" do
|
22
|
+
media = Media.new("audio.mp3", type: :audio)
|
23
|
+
media.compile.must_equal %{<audio data-autoplay src="audio/audio.mp3"></audio>}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -23,6 +23,17 @@ module SlideHero
|
|
23
23
|
pres.slides.count.must_equal 1
|
24
24
|
end
|
25
25
|
|
26
|
+
it "adds defaults to slides" do
|
27
|
+
pres = Presentation.new("slides with defaults") do
|
28
|
+
defaults headline_size: :small
|
29
|
+
|
30
|
+
slide "My slide" do
|
31
|
+
point "an amazing point"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
pres.slides.first.must_include "h3"
|
35
|
+
end
|
36
|
+
|
26
37
|
it "takes all of slide's options" do
|
27
38
|
pres = Presentation.new("slides") do
|
28
39
|
slide("My slide", headline_size: :small, transition: :default) do
|
@@ -32,6 +43,17 @@ module SlideHero
|
|
32
43
|
pres.slides.count.must_equal 1
|
33
44
|
end
|
34
45
|
|
46
|
+
it "overrides slide's defaults" do
|
47
|
+
pres = Presentation.new("slides") do
|
48
|
+
defaults headline_size: :medium
|
49
|
+
|
50
|
+
slide("My slide", headline_size: :small, transition: :default) do
|
51
|
+
point "Bananas are tastey"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
pres.slides.first.must_include "h3"
|
55
|
+
end
|
56
|
+
|
35
57
|
it "takes grouped_slides" do
|
36
58
|
pres = Presentation.new("slides") do
|
37
59
|
grouped_slides do
|
@@ -84,7 +84,7 @@ module SlideHero
|
|
84
84
|
|
85
85
|
assert_dom_match slide.compile, "<section data-transition=\"default\">"+
|
86
86
|
"<h1>Animation</h1>" +
|
87
|
-
"<p>I'm animated!</p>" +
|
87
|
+
"<p class=\"fragment \">I'm animated!</p>" +
|
88
88
|
"</section>"
|
89
89
|
|
90
90
|
end
|
@@ -126,14 +126,14 @@ module SlideHero
|
|
126
126
|
describe "#code" do
|
127
127
|
it "embeds code in a slide" do
|
128
128
|
slide = Slide.new "Code" do
|
129
|
-
code(:ruby) do
|
130
|
-
"
|
129
|
+
code(:ruby, File.join(Dir.pwd,"test","fixtures")) do
|
130
|
+
"testclass.rb"
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
134
|
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
135
135
|
"<h1>Code</h1>" +
|
136
|
-
"<pre><code data-trim>
|
136
|
+
"<pre><code data-trim class=\"ruby\">
|
137
137
|
class Working
|
138
138
|
def some_method
|
139
139
|
\"woot!\"
|
@@ -143,5 +143,37 @@ end
|
|
143
143
|
</code></pre></section>"
|
144
144
|
end
|
145
145
|
end
|
146
|
+
|
147
|
+
describe "#note" do
|
148
|
+
it "returns a formatted note" do
|
149
|
+
slide = Slide.new "Note" do
|
150
|
+
note "Don't forget to bring a towel"
|
151
|
+
end
|
152
|
+
assert_dom_match slide.compile, "<section data-transition=\"default\">" +
|
153
|
+
"<h1>Note</h1>" +
|
154
|
+
"<aside class=\"notes\">Don't forget to bring a towel</aside>" +
|
155
|
+
"</section>"
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "#image" do
|
160
|
+
it "returns a formatted Image" do
|
161
|
+
slide = Slide.new "Image" do
|
162
|
+
image("cornify.gif", "Unicorn", width: 280, height: 326)
|
163
|
+
end
|
164
|
+
|
165
|
+
slide.compile.must_include %{<img width="280" height="326" src="images/cornify.gif" alt="Unicorn">}
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "#media" do
|
170
|
+
it "returns a formatted media element" do
|
171
|
+
slide = Slide.new "Video" do
|
172
|
+
media "video.mp4", type: :video
|
173
|
+
end
|
174
|
+
|
175
|
+
slide.compile.must_include %{<video data-autoplay src="video/video.mp4"></video>}
|
176
|
+
end
|
177
|
+
end
|
146
178
|
end
|
147
179
|
end
|
data/test/slide_hero_spec.rb
CHANGED
@@ -7,6 +7,9 @@ require_relative 'slide_hero/grouped_slides_spec'
|
|
7
7
|
require_relative 'slide_hero/code_spec'
|
8
8
|
require_relative 'slide_hero/presentation_spec'
|
9
9
|
require_relative 'slide_hero/dsl_spec'
|
10
|
+
require_relative 'slide_hero/note_spec'
|
11
|
+
require_relative 'slide_hero/image_spec'
|
12
|
+
require_relative 'slide_hero/media_spec'
|
10
13
|
|
11
14
|
describe ::SlideHero do
|
12
15
|
it "has a version" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slide_hero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Nunez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tilt
|
@@ -131,6 +131,8 @@ extensions: []
|
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
133
|
- .gitignore
|
134
|
+
- .ruby-gemset
|
135
|
+
- .ruby-version
|
134
136
|
- .travis.yml
|
135
137
|
- Gemfile
|
136
138
|
- Guardfile
|
@@ -143,8 +145,11 @@ files:
|
|
143
145
|
- lib/slide_hero/code.rb
|
144
146
|
- lib/slide_hero/dsl.rb
|
145
147
|
- lib/slide_hero/grouped_slides.rb
|
148
|
+
- lib/slide_hero/image.rb
|
146
149
|
- lib/slide_hero/list.rb
|
147
150
|
- lib/slide_hero/list_point.rb
|
151
|
+
- lib/slide_hero/media.rb
|
152
|
+
- lib/slide_hero/note.rb
|
148
153
|
- lib/slide_hero/point.rb
|
149
154
|
- lib/slide_hero/presentation.rb
|
150
155
|
- lib/slide_hero/slide.rb
|
@@ -160,13 +165,16 @@ files:
|
|
160
165
|
- lib/slide_hero/views/unordered_list.html.erb
|
161
166
|
- slide_hero.gemspec
|
162
167
|
- templates/new_presentation.tt
|
163
|
-
- test/fixtures/testclass.rb
|
168
|
+
- test/fixtures/code/testclass.rb
|
164
169
|
- test/minitest_helper.rb
|
165
170
|
- test/slide_hero/code_spec.rb
|
166
171
|
- test/slide_hero/dsl_spec.rb
|
167
172
|
- test/slide_hero/grouped_slides_spec.rb
|
173
|
+
- test/slide_hero/image_spec.rb
|
168
174
|
- test/slide_hero/list_point_spec.rb
|
169
175
|
- test/slide_hero/list_spec.rb
|
176
|
+
- test/slide_hero/media_spec.rb
|
177
|
+
- test/slide_hero/note_spec.rb
|
170
178
|
- test/slide_hero/point_spec.rb
|
171
179
|
- test/slide_hero/presentation_spec.rb
|
172
180
|
- test/slide_hero/slide_spec.rb
|
@@ -259,18 +267,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
267
|
version: '0'
|
260
268
|
requirements: []
|
261
269
|
rubyforge_project:
|
262
|
-
rubygems_version: 2.1.
|
270
|
+
rubygems_version: 2.1.10
|
263
271
|
signing_key:
|
264
272
|
specification_version: 4
|
265
273
|
summary: Used for creating slide decks backed by reveal.js
|
266
274
|
test_files:
|
267
|
-
- test/fixtures/testclass.rb
|
275
|
+
- test/fixtures/code/testclass.rb
|
268
276
|
- test/minitest_helper.rb
|
269
277
|
- test/slide_hero/code_spec.rb
|
270
278
|
- test/slide_hero/dsl_spec.rb
|
271
279
|
- test/slide_hero/grouped_slides_spec.rb
|
280
|
+
- test/slide_hero/image_spec.rb
|
272
281
|
- test/slide_hero/list_point_spec.rb
|
273
282
|
- test/slide_hero/list_spec.rb
|
283
|
+
- test/slide_hero/media_spec.rb
|
284
|
+
- test/slide_hero/note_spec.rb
|
274
285
|
- test/slide_hero/point_spec.rb
|
275
286
|
- test/slide_hero/presentation_spec.rb
|
276
287
|
- test/slide_hero/slide_spec.rb
|
File without changes
|