keydown 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.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +41 -0
- data/LICENSE +20 -0
- data/README.md +183 -0
- data/Rakefile +9 -0
- data/VERSION +1 -0
- data/bin/keydown +7 -0
- data/keydown.gemspec +27 -0
- data/lib/keydown/lib/slide.rb +125 -0
- data/lib/keydown/lib/slidedeck.rb +55 -0
- data/lib/keydown/tasks/generate.rb +12 -0
- data/lib/keydown/tasks/slides.rb +36 -0
- data/lib/keydown.rb +22 -0
- data/lib/version.rb +3 -0
- data/spec/fixtures/custom.css +5 -0
- data/spec/fixtures/custom.js +3 -0
- data/spec/fixtures/with_backgrounds.md +29 -0
- data/spec/fixtures/with_code.md +26 -0
- data/spec/fixtures/with_title.md +21 -0
- data/spec/fixtures/without_title.md +21 -0
- data/spec/lib/slide_spec.rb +365 -0
- data/spec/lib/slidedeck_spec.rb +133 -0
- data/spec/output/results.html +545 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/tasks/generate_spec.rb +50 -0
- data/spec/tasks/slides_spec.rb +171 -0
- data/templates/generate/%presentation_name%.md.tt +27 -0
- data/templates/generate/css/%presentation_name%.css +1 -0
- data/templates/generate/css/rocks.css +392 -0
- data/templates/generate/images/cc.large.png +0 -0
- data/templates/generate/images/flickr.png +0 -0
- data/templates/generate/js/%presentation_name%.js +1 -0
- data/templates/generate/js/rocks.js +415 -0
- data/templates/keydown.css.erb +104 -0
- data/templates/rocks/index.rhtml +125 -0
- data/templates/rocks/slide.rhtml +10 -0
- metadata +206 -0
data/.rspec
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use default@keydown
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
keydown (0.7.0)
|
5
|
+
rdiscount (>= 1.6.8)
|
6
|
+
thor (>= 0.14.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
chalofa_ruby-progressbar (0.0.9.1)
|
12
|
+
diff-lcs (1.1.2)
|
13
|
+
fuubar (0.0.4)
|
14
|
+
chalofa_ruby-progressbar (~> 0.0.9)
|
15
|
+
rspec (~> 2.0)
|
16
|
+
rspec-instafail (~> 0.1.4)
|
17
|
+
gem-release (0.0.16)
|
18
|
+
nokogiri (1.4.4)
|
19
|
+
rdiscount (1.6.8)
|
20
|
+
rspec (2.5.0)
|
21
|
+
rspec-core (~> 2.5.0)
|
22
|
+
rspec-expectations (~> 2.5.0)
|
23
|
+
rspec-mocks (~> 2.5.0)
|
24
|
+
rspec-core (2.5.1)
|
25
|
+
rspec-expectations (2.5.0)
|
26
|
+
diff-lcs (~> 1.1.2)
|
27
|
+
rspec-instafail (0.1.7)
|
28
|
+
rspec-mocks (2.5.0)
|
29
|
+
thor (0.14.6)
|
30
|
+
|
31
|
+
PLATFORMS
|
32
|
+
ruby
|
33
|
+
|
34
|
+
DEPENDENCIES
|
35
|
+
fuubar
|
36
|
+
gem-release
|
37
|
+
keydown!
|
38
|
+
nokogiri
|
39
|
+
rdiscount (>= 1.6.8)
|
40
|
+
rspec (>= 2.5.0)
|
41
|
+
thor (>= 0.14.0)
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Infews LLC
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
# KeyDown
|
2
|
+
|
3
|
+
KeyDown is another 'Presentation System in a single HTML page' inspired by [Showoff](http://github.com/dirnic/showoff/), [Slidedown](http://github.com/nakajima/slidedown),
|
4
|
+
[HTML5 Rocks](http://studio.html5rocks.com/#Deck), with a little [Presentation Zen](http://amzn.to/8X55H2) thrown in.
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
### Generate a Template
|
9
|
+
|
10
|
+
Get started by making a sample project:
|
11
|
+
|
12
|
+
$ keydown generate my_presentation
|
13
|
+
|
14
|
+
This will make:
|
15
|
+
|
16
|
+
| - my_presentation/
|
17
|
+
| - css/ - Keydown CSS and a file for you to customize
|
18
|
+
| - images/ - Some Keydown images, but also for you
|
19
|
+
| - js/ - Keydown JavaScript, and a file for you to customize
|
20
|
+
| - my_presentation.md
|
21
|
+
|
22
|
+
### Write your presentation in Markdown
|
23
|
+
|
24
|
+
Edit `my_presentation.md` and write your presentation as if it were going to be HTML (because it will be):
|
25
|
+
|
26
|
+
!SLIDE
|
27
|
+
|
28
|
+
# This is my talk
|
29
|
+
|
30
|
+
!SLIDE
|
31
|
+
|
32
|
+
## I hope you enjoy it
|
33
|
+
|
34
|
+
!SLIDE code
|
35
|
+
|
36
|
+
def foo
|
37
|
+
:bar
|
38
|
+
end
|
39
|
+
|
40
|
+
!NOTES
|
41
|
+
|
42
|
+
* make sure to explain the use of Ruby symbols
|
43
|
+
|
44
|
+
!SLIDE
|
45
|
+
|
46
|
+
Google is [here](http://google.com)
|
47
|
+
|
48
|
+
!SLIDE
|
49
|
+
|
50
|
+
# Questions?
|
51
|
+
|
52
|
+
`!NOTE` blocks will be ignored when generating the HTML.
|
53
|
+
|
54
|
+
### Generate the Deck
|
55
|
+
|
56
|
+
$ keydown slides my_presentation.md
|
57
|
+
|
58
|
+
..will generate `my_presentation.html`
|
59
|
+
|
60
|
+
### Present
|
61
|
+
|
62
|
+
Give your presentation! Open `my_presentation.html` in a browser and talk away:
|
63
|
+
|
64
|
+
* left, right arrows to navigate through slides
|
65
|
+
|
66
|
+
## Usage
|
67
|
+
|
68
|
+
### Presentation Title
|
69
|
+
|
70
|
+
An optional first `H1` before a `!SLIDE` is treated as the presentation title. It will be on the configuration page and set as the HTML `<title>`.
|
71
|
+
|
72
|
+
### Configuration Page & Navigation
|
73
|
+
|
74
|
+
The first page of a Keydown presentation is a configuration page that shows the presentation title, how to navigate the presentation, and some visual effect options.
|
75
|
+
|
76
|
+
### Slide classes
|
77
|
+
|
78
|
+
Any text that follows `!SLIDE` will be added to the slide as CSS classes.
|
79
|
+
|
80
|
+
!SLIDE dark
|
81
|
+
|
82
|
+
There are some built-in classes you can use:
|
83
|
+
|
84
|
+
* `middle` will center all the elements on the slide
|
85
|
+
* `bulleted` - by default, lists to not have bullets; use this class to add them back
|
86
|
+
* `dark` - by default, slides are light with dark fonts; this swaps a slide
|
87
|
+
|
88
|
+
You can define your own CSS classes (see below).
|
89
|
+
|
90
|
+
### Images
|
91
|
+
|
92
|
+
Your presentation will be generated in the same directory as your Markdown file. So URI references via relative paths
|
93
|
+
are fine. So feel free to use the local images directory (see the `generate` task above).
|
94
|
+
|
95
|
+
### Full Screen background images
|
96
|
+
|
97
|
+
Keydown supports slides with full screen background images, including attribution text.
|
98
|
+
|
99
|
+
!SLIDE
|
100
|
+
|
101
|
+
# This slide has a background image
|
102
|
+
|
103
|
+
}}} images/sunset.jpg
|
104
|
+
|
105
|
+
This slide will have `sunset.jpg` as a full-bleed background image. It's aspect ratio will be preserved.
|
106
|
+
|
107
|
+
If you wish to have attribution text, an icon (currently Flickr and Creative Commons graphics are supported via `flickr` and `cc` respectively), and link the text, separate the text with `::` like this:
|
108
|
+
|
109
|
+
|
110
|
+
!SLIDE
|
111
|
+
|
112
|
+
# This slide has a background image
|
113
|
+
|
114
|
+
}}} images/sunset.jpg::cprsize::flickr::http:://flickr.com/cprsize
|
115
|
+
|
116
|
+
### Syntax Highlighting
|
117
|
+
|
118
|
+
Code syntax highlighting is done via [Pygments](), which must be installed locally to work. All Pygments lexers are supported.
|
119
|
+
|
120
|
+
Mark your code by block escaping via `@@@` or ` ``` `
|
121
|
+
|
122
|
+
For Ruby:
|
123
|
+
|
124
|
+
@@@ ruby
|
125
|
+
def foo
|
126
|
+
:bar
|
127
|
+
end
|
128
|
+
@@@
|
129
|
+
|
130
|
+
For JavaScript
|
131
|
+
|
132
|
+
``` js
|
133
|
+
function foo() {
|
134
|
+
return 'bar';
|
135
|
+
}
|
136
|
+
```
|
137
|
+
|
138
|
+
For ERb:
|
139
|
+
|
140
|
+
@@@ rhtml
|
141
|
+
<%= @post.created_at.to_s(:fancy) %>
|
142
|
+
@@@
|
143
|
+
|
144
|
+
### Custom CSS
|
145
|
+
|
146
|
+
All css files in the `css` directory will be linked into your presentation HTML file.
|
147
|
+
|
148
|
+
### Custom JavaScript.
|
149
|
+
|
150
|
+
All JavaScript files in the `js` directory will be linked in your presentation HTML file.
|
151
|
+
|
152
|
+
## Requirements
|
153
|
+
|
154
|
+
### For Use
|
155
|
+
|
156
|
+
* Ruby and Rubygems
|
157
|
+
* [Pygments]() is required for code syntax highlighting
|
158
|
+
* Other dependent gems will be installed
|
159
|
+
|
160
|
+
### For Development
|
161
|
+
|
162
|
+
* RSpec
|
163
|
+
* Nokogiri
|
164
|
+
|
165
|
+
## Note on Patches/Pull Requests
|
166
|
+
|
167
|
+
* Fork the project.
|
168
|
+
* Make your feature addition or bug fix.
|
169
|
+
* Add tests for it. This is important so I don't break it in a future version unintentionally.
|
170
|
+
* Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
171
|
+
* Send me a pull request. Bonus points for topic branches.
|
172
|
+
|
173
|
+
## Thanks & Attribution
|
174
|
+
|
175
|
+
Thanks to:
|
176
|
+
|
177
|
+
* HTML5 Rocks guys for a great presentation template
|
178
|
+
* [@nakajima](http://twitter.com/nakajima) & [Slidedown]() for some parsing
|
179
|
+
* The various Github guys for Albino, Gollum, etc.
|
180
|
+
|
181
|
+
## Copyright
|
182
|
+
|
183
|
+
Copyright © Infews LLC. See LICENSE for details.
|
data/Rakefile
ADDED
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.6.0
|
data/bin/keydown
ADDED
data/keydown.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "keydown"
|
7
|
+
s.version = Keydown::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Davis W. Frank"]
|
10
|
+
s.email = ["dwfrank@infe.ws"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/keydown"
|
12
|
+
s.summary = %q{Yet another "Slides in HTML" generator}
|
13
|
+
s.description = %q{Bastard child of Slidedown, HTML5 Rocks, and organic fair trade Bolivian coffee}
|
14
|
+
|
15
|
+
s.add_dependency 'thor', '>= 0.14.0'
|
16
|
+
s.add_dependency 'rdiscount', '>= 1.6.8'
|
17
|
+
|
18
|
+
s.add_development_dependency "rspec", ">= 2.5.0"
|
19
|
+
s.add_development_dependency "fuubar"
|
20
|
+
s.add_development_dependency "nokogiri"
|
21
|
+
s.add_development_dependency "gem-release"
|
22
|
+
|
23
|
+
s.files = `git ls-files`.split("\n")
|
24
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'digest/sha1'
|
2
|
+
require 'albino'
|
3
|
+
|
4
|
+
module Keydown
|
5
|
+
class Slide
|
6
|
+
|
7
|
+
attr_reader :content
|
8
|
+
attr_reader :notes
|
9
|
+
attr_reader :background_image
|
10
|
+
|
11
|
+
def initialize(text, classnames = '')
|
12
|
+
@content = text
|
13
|
+
@notes = ''
|
14
|
+
@codemap = {}
|
15
|
+
@background_image = {}
|
16
|
+
|
17
|
+
@classnames = []
|
18
|
+
classnames.split(' ').inject(@classnames) do |css_classnames, name|
|
19
|
+
css_classnames << name
|
20
|
+
css_classnames
|
21
|
+
end
|
22
|
+
|
23
|
+
extract_notes!
|
24
|
+
extract_content!
|
25
|
+
extract_code!
|
26
|
+
extract_background_image!
|
27
|
+
pygmentize_code!
|
28
|
+
end
|
29
|
+
|
30
|
+
def classnames
|
31
|
+
@classnames.join(' ')
|
32
|
+
end
|
33
|
+
|
34
|
+
def container_classnames
|
35
|
+
@names ||= begin
|
36
|
+
names = ['slide']
|
37
|
+
|
38
|
+
unless @background_image.empty?
|
39
|
+
names << 'full-background'
|
40
|
+
names << @background_image[:classname]
|
41
|
+
end
|
42
|
+
|
43
|
+
names.join(' ')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def background_attribution_classnames
|
48
|
+
names = ['attribution']
|
49
|
+
|
50
|
+
names << if background_image[:attribution_text]
|
51
|
+
background_image[:service]
|
52
|
+
else
|
53
|
+
'hidden'
|
54
|
+
end
|
55
|
+
|
56
|
+
names.join(' ')
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_html
|
60
|
+
require 'erb'
|
61
|
+
require 'rdiscount'
|
62
|
+
|
63
|
+
html_content = RDiscount.new(@content).to_html
|
64
|
+
template = File.new(File.join(Tasks.template_dir, 'slide.rhtml'))
|
65
|
+
|
66
|
+
ERB.new(template.read).result(binding)
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def extract_notes!
|
72
|
+
@content.gsub!(/^!NOTE\s*(.*\n)$/m) do
|
73
|
+
@notes = $1.chomp
|
74
|
+
''
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def extract_content!
|
79
|
+
@content.gsub!(/^!NOTE(S)?\s*(.*\n)$/m, '')
|
80
|
+
end
|
81
|
+
|
82
|
+
def extract_code!
|
83
|
+
@content.gsub!(/^(```|@@@) ?(.+?)\r?\n(.+?)\r?\n(```|@@@)\r?$/m) do
|
84
|
+
id = Digest::SHA1.hexdigest($3)
|
85
|
+
@codemap[id] = {:lang => $2, :code => $3}
|
86
|
+
id
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def extract_background_image!
|
91
|
+
images = []
|
92
|
+
@content.gsub!(/^(\}\}\}) ?(.+?)(\r?\n)?$/m) do
|
93
|
+
images << $2
|
94
|
+
''
|
95
|
+
end
|
96
|
+
|
97
|
+
return unless images.first
|
98
|
+
|
99
|
+
split_line = images.first.split('::')
|
100
|
+
image_path = split_line[0]
|
101
|
+
|
102
|
+
@background_image = {:classname => image_path.match(/([\w-]+)\.?[\w]+$/)[1],
|
103
|
+
:path => image_path}
|
104
|
+
|
105
|
+
unless split_line[1].nil? || split_line[1].empty?
|
106
|
+
@background_image.merge!({:attribution_text => split_line[1],
|
107
|
+
:service => split_line[2],
|
108
|
+
:attribution_link => split_line[3]})
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def pygmentize_code!
|
113
|
+
@codemap.each do |id, spec|
|
114
|
+
lang = spec[:lang]
|
115
|
+
code = spec[:code]
|
116
|
+
if code.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ }
|
117
|
+
code.gsub!(/^( |\t)/m, '')
|
118
|
+
end
|
119
|
+
|
120
|
+
@content.gsub!(id, Albino.new(code, lang).colorize)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Keydown
|
2
|
+
class SlideDeck
|
3
|
+
|
4
|
+
attr_reader :title
|
5
|
+
attr_reader :slides
|
6
|
+
|
7
|
+
def initialize(text)
|
8
|
+
@title = ''
|
9
|
+
@slides = []
|
10
|
+
@text = text
|
11
|
+
|
12
|
+
set_title
|
13
|
+
extract_classnames!
|
14
|
+
build_slides
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_html
|
18
|
+
require 'erb'
|
19
|
+
|
20
|
+
css_files = ['css/keydown.css']
|
21
|
+
css_files += Dir.glob('css/*.css')
|
22
|
+
css_files.uniq!
|
23
|
+
css_files -= ['css/rocks.css']
|
24
|
+
js_files = Dir.glob('js/*.js') - ['js/rocks.js']
|
25
|
+
|
26
|
+
template = File.new(File.join(Tasks.template_dir, 'index.rhtml'))
|
27
|
+
ERB.new(template.read).result(binding)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def set_title
|
33
|
+
match_data = @text.match(/\A\s*#\s*(.*)$/)
|
34
|
+
|
35
|
+
@title = match_data[1] if match_data
|
36
|
+
end
|
37
|
+
|
38
|
+
def extract_classnames!
|
39
|
+
@classnames = []
|
40
|
+
@text.gsub!(/^!SLIDE\s*([\w\s\-]*)\n/m) do
|
41
|
+
@classnames << $1.chomp
|
42
|
+
"!SLIDE\n"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def build_slides
|
47
|
+
slides_text = @text.split(/!SLIDE/).reject { |s| s.empty? }
|
48
|
+
slides_text[1..-1].each_with_index do |slide_text, i|
|
49
|
+
slide_text.gsub(/\A(\n+)/, '').chomp!
|
50
|
+
@slides << Keydown::Slide.new(slide_text, @classnames[i])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Keydown
|
2
|
+
class Tasks < Thor
|
3
|
+
attr_reader :presentation_name
|
4
|
+
|
5
|
+
desc "generate NAME", "Make a directory & sample files for presentation NAME"
|
6
|
+
|
7
|
+
def generate(name)
|
8
|
+
@presentation_name = name
|
9
|
+
directory "templates/generate", name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Keydown
|
2
|
+
class Tasks < Thor
|
3
|
+
|
4
|
+
desc "slides FILE", "Convert a Keydown FILE into an HTML presentation"
|
5
|
+
|
6
|
+
def slides(file)
|
7
|
+
|
8
|
+
file += '.md' unless file.match(/\.md$/)
|
9
|
+
|
10
|
+
unless File.exist?(file)
|
11
|
+
say "#{file} not found. Please call with a KeyDown Markdown file: keydown slides my_file.md", :red
|
12
|
+
return
|
13
|
+
end
|
14
|
+
|
15
|
+
@@template_dir = File.join(Keydown::Tasks.source_root, 'templates', 'rocks')
|
16
|
+
|
17
|
+
say "Creating Keydown presentation from #{file}", :yellow
|
18
|
+
|
19
|
+
slide_deck = SlideDeck.new(File.new(file).read)
|
20
|
+
backgrounds = slide_deck.slides.collect do |slide|
|
21
|
+
slide.background_image unless slide.background_image.empty?
|
22
|
+
end.compact
|
23
|
+
|
24
|
+
css_template = File.new(File.join(Tasks.template_dir, '..', 'keydown.css.erb'))
|
25
|
+
create_file 'css/keydown.css', :force => true do
|
26
|
+
ERB.new(css_template.read).result(binding)
|
27
|
+
end
|
28
|
+
|
29
|
+
presentation = file.gsub('md', 'html')
|
30
|
+
|
31
|
+
create_file presentation, :force => true do
|
32
|
+
slide_deck.to_html
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/keydown.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Keydown
|
4
|
+
class Tasks < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
@@source_root = File.join(File.dirname(__FILE__), '..')
|
8
|
+
|
9
|
+
def self.source_root
|
10
|
+
@@source_root
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.template_dir
|
14
|
+
@@template_dir
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Dir["#{File.dirname(__FILE__)}/keydown/**/*.rb"].each do |file|
|
21
|
+
require file
|
22
|
+
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Kermit the Frog Says...
|
2
|
+
|
3
|
+
!SLIDE
|
4
|
+
|
5
|
+
# Presenation Zen
|
6
|
+
|
7
|
+
}}} images/one.png
|
8
|
+
|
9
|
+
!NOTE
|
10
|
+
|
11
|
+
I think this should be ignored
|
12
|
+
|
13
|
+
!SLIDE foo
|
14
|
+
|
15
|
+
# Makes for Awesome Decks
|
16
|
+
|
17
|
+
}}} images/two.png
|
18
|
+
|
19
|
+
!NOTE
|
20
|
+
|
21
|
+
and this
|
22
|
+
|
23
|
+
!SLIDE
|
24
|
+
|
25
|
+
# But sometimes you don't need them
|
26
|
+
|
27
|
+
!NOTE
|
28
|
+
|
29
|
+
and this
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Kermit the Frog Says...
|
2
|
+
|
3
|
+
!SLIDE
|
4
|
+
|
5
|
+
# This Presentation
|
6
|
+
|
7
|
+
!NOTE
|
8
|
+
|
9
|
+
I think this should be ignored
|
10
|
+
|
11
|
+
!SLIDE foo
|
12
|
+
|
13
|
+
# Is Brought to You by
|
14
|
+
@@@ ruby
|
15
|
+
def a_method(options)
|
16
|
+
{ :foo => 'bar }
|
17
|
+
end
|
18
|
+
@@@
|
19
|
+
|
20
|
+
!NOTE
|
21
|
+
|
22
|
+
and this
|
23
|
+
|
24
|
+
!SLIDE foo bar
|
25
|
+
|
26
|
+
# The Letter Q
|