reveal-ck 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +13 -0
  3. data/bin/reveal-ck +23 -8
  4. data/lib/reveal-ck.rb +6 -0
  5. data/lib/reveal-ck/build_task.rb +14 -0
  6. data/lib/reveal-ck/builder.rb +21 -0
  7. data/lib/reveal-ck/config.rb +43 -0
  8. data/lib/reveal-ck/file_slicer.rb +19 -17
  9. data/lib/reveal-ck/file_splicer.rb +30 -28
  10. data/lib/reveal-ck/file_string_replacer.rb +17 -0
  11. data/lib/reveal-ck/haml_processor.rb +17 -15
  12. data/lib/reveal-ck/presentation_builder.rb +69 -0
  13. data/lib/reveal-ck/slide_builder.rb +66 -0
  14. data/lib/reveal-ck/version.rb +1 -1
  15. data/rakelib/cucumber.rake +14 -1
  16. data/reveal.js/Gruntfile.js +132 -0
  17. data/reveal.js/LICENSE +1 -1
  18. data/reveal.js/README.md +362 -50
  19. data/reveal.js/css/print/paper.css +14 -14
  20. data/reveal.js/css/print/pdf.css +60 -30
  21. data/reveal.js/css/reveal.css +444 -149
  22. data/reveal.js/css/reveal.min.css +2 -2
  23. data/reveal.js/css/theme/README.md +8 -10
  24. data/reveal.js/css/theme/beige.css +24 -45
  25. data/reveal.js/css/theme/default.css +24 -45
  26. data/reveal.js/css/theme/moon.css +142 -0
  27. data/reveal.js/css/theme/night.css +24 -44
  28. data/reveal.js/css/theme/serif.css +27 -45
  29. data/reveal.js/css/theme/simple.css +25 -45
  30. data/reveal.js/css/theme/sky.css +26 -43
  31. data/reveal.js/css/theme/solarized.css +142 -0
  32. data/reveal.js/css/theme/source/beige.scss +2 -2
  33. data/reveal.js/css/theme/source/default.scss +2 -2
  34. data/reveal.js/css/theme/source/moon.scss +68 -0
  35. data/reveal.js/css/theme/source/night.scss +4 -4
  36. data/reveal.js/css/theme/source/serif.scss +8 -6
  37. data/reveal.js/css/theme/source/simple.scss +5 -5
  38. data/reveal.js/css/theme/source/sky.scss +9 -4
  39. data/reveal.js/css/theme/source/solarized.scss +74 -0
  40. data/reveal.js/css/theme/template/settings.scss +2 -2
  41. data/reveal.js/examples/assets/image1.png +0 -0
  42. data/reveal.js/examples/assets/image2.png +0 -0
  43. data/reveal.js/examples/barebones.html +42 -0
  44. data/reveal.js/examples/embedded-media.html +49 -0
  45. data/reveal.js/examples/slide-backgrounds.html +101 -0
  46. data/reveal.js/index.html +63 -56
  47. data/reveal.js/js/reveal.js +997 -216
  48. data/reveal.js/js/reveal.min.js +3 -3
  49. data/reveal.js/package.json +43 -29
  50. data/reveal.js/plugin/highlight/highlight.js +28 -6
  51. data/reveal.js/plugin/markdown/example.html +97 -0
  52. data/reveal.js/plugin/markdown/example.md +29 -0
  53. data/reveal.js/plugin/markdown/markdown.js +164 -11
  54. data/reveal.js/plugin/markdown/marked.js +37 -0
  55. data/reveal.js/plugin/multiplex/client.js +13 -0
  56. data/reveal.js/plugin/multiplex/index.js +56 -0
  57. data/reveal.js/plugin/multiplex/master.js +50 -0
  58. data/reveal.js/plugin/notes-server/index.js +1 -0
  59. data/reveal.js/plugin/notes-server/notes.html +8 -5
  60. data/reveal.js/plugin/notes/notes.html +133 -44
  61. data/reveal.js/plugin/notes/notes.js +3 -1
  62. data/reveal.js/plugin/print-pdf/print-pdf.js +8 -3
  63. data/reveal.js/plugin/remotes/remotes.js +13 -4
  64. data/reveal.js/plugin/search/search.js +196 -0
  65. data/reveal.js/plugin/zoom-js/zoom.js +26 -21
  66. data/spec/data/config/config.toml +6 -0
  67. data/spec/data/string_replacer/after_replace +4 -0
  68. data/spec/data/string_replacer/before_replace +4 -0
  69. data/spec/lib/reveal-ck/config_spec.rb +50 -0
  70. data/spec/lib/reveal-ck/file_slicer_spec.rb +29 -27
  71. data/spec/lib/reveal-ck/file_splicer_spec.rb +28 -26
  72. data/spec/lib/reveal-ck/file_string_replacer_spec.rb +32 -0
  73. data/spec/lib/reveal-ck/haml_processor_spec.rb +28 -26
  74. metadata +82 -27
  75. data/rakelib/presentation.rake +0 -41
  76. data/rakelib/reveal.rake +0 -15
  77. data/reveal.js/css/shaders/tile-flip.fs +0 -64
  78. data/reveal.js/css/shaders/tile-flip.vs +0 -141
  79. data/reveal.js/grunt.js +0 -84
  80. data/reveal.js/plugin/markdown/showdown.js +0 -62
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MGI0YmM5MmNlMTlmNTNmODg0MjY5YjQ4N2NlYjMwNTc4MmQ4ODE2YQ==
4
+ MWI3OTAwYjcxYTZlODc0NTI3NWQxNzU3OGJhMzlhMTdmZmZjYmVkYQ==
5
5
  data.tar.gz: !binary |-
6
- YjUwMjkzZWU5YzdmYzZmZGYxOWE3ZjRlZDQ4YTgzNTY3ZDQxNWRhZg==
6
+ ZDdhNDAyYWM1ODk2OWU5OTU3MWUyNDU1MjU3N2ZiYTQyOTI1M2I0Ng==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MTZjMTAyYTcyZjdlNzQxOTIxZGQ4YWYzMzk5MzZiYTUzMWUyYzUyOWE0MDQy
10
- ODFjODU1NGNjMzk0ZGFjMTk5ZjI3MWZkZTE0OTkxZjQ5NzE1ZTQzNzI5NDUy
11
- YWFiMTYxODlkNzAxYWY3NGM1YWRkNDlmMmVjYzZkNDRhNzBhZGQ=
9
+ ZGZkOGUxZTM3MTg4M2M5MWM5MTk2NDJmZmJkNThiZTVhNGEyODBkMTRmZDUw
10
+ ZjY1YzVkNTUwMGUyOTM5NGQzNTM4MWI1ZGNkNzVmZjYzYjVlYjM0ZDU5YTNi
11
+ NDUyYWU0NWQyMWJmYjhmZWNjNDA2NjYwMmY5OGVkODYxNmMyY2E=
12
12
  data.tar.gz: !binary |-
13
- OTQ3OGUzNWY1ZTAwYWM1M2NmN2NiMjc4ZTAxY2U1ZDRmMDhiODhkMmIzNzM5
14
- NmFkMzUzOGYyMjkyNzg3NjFiYThiYzg5MTNhZmQ0YmM0MGViYWNlMDM3ZmI5
15
- NDhkMDAyMTI2ZjdjMzMxYWIxZTZiMzZhZjRjNzg0YjM4YzdkZGE=
13
+ M2ZkOTIwM2UxNGNkMjBlNmUyYTFiOWVmYTM1NWI2NTUyMmU3ZDIzNWVkZDA2
14
+ NGIyOWQ0YWRjZWNiOTM0ZGQ1ZTU0MDQxNzgwZDA0OGI5NzgyZmI1YmZkOTE3
15
+ MDQ2N2RmYWRjYTBkYTBjNGZkMTRmMjI5OWRjZWIwMjUzMjBlMWE=
data/README.md CHANGED
@@ -151,3 +151,16 @@ features, and `rake` runs both `spec` and `cucumber`.
151
151
 
152
152
  This project is setup within Travis. Here is the
153
153
  [project page](https://travis-ci.org/jedcn/reveal-ck).
154
+
155
+ ### Updating the embedded reveal.js
156
+
157
+ If you've got things checked out, and submodules inited, then you can
158
+ updated the embedded reveal.js as follows:
159
+
160
+ * cd into reveal.js
161
+ * Run a `git fetch` and then merge/rebase/reset as is appropriate
162
+ * Run tests
163
+ * If the tests don't pass, you likely need to update how the
164
+ FileSplicer is invoked in the SliderBuilder. It's got hard-coded
165
+ begin/end line numbers for where the default reveal.js slides are
166
+ found. This commit is a good example of such a change: b29b050.
@@ -2,12 +2,6 @@
2
2
  require 'gli'
3
3
  require 'reveal-ck'
4
4
 
5
- # Setup rake and load needed parts of rakelib so that rake tasks can be
6
- # invoked programmatically
7
- require 'rake'
8
- rakelib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'rakelib'))
9
- load File.join(rakelib, 'presentation.rake')
10
-
11
5
  include GLI::App
12
6
 
13
7
  program_desc 'A reveal.js construction kit'
@@ -15,10 +9,31 @@ program_desc 'A reveal.js construction kit'
15
9
  version RevealCK::VERSION
16
10
 
17
11
  desc 'Generate reveal.js slides'
18
- arg_name 'Tranforms your slides.haml into a presentation'
19
12
  command :generate do |c|
20
13
  c.action do |global_options,options,args|
21
- Rake::Task['presentation'].invoke
14
+
15
+ require 'rake' # for FileList
16
+
17
+ revealjs_root = File.expand_path(File.join(File.dirname(__FILE__), '..', 'reveal.js'))
18
+ revealjs_files = FileList["#{revealjs_root}/**/*"]
19
+
20
+ image_files = FileList["images/**/*"]
21
+
22
+ output_dir = 'slides'
23
+
24
+ slides_haml = 'slides.haml'
25
+
26
+ config = RevealCK::Config.new config_file: 'config.toml'
27
+
28
+ builder = RevealCK::PresentationBuilder.new({
29
+ revealjs_files: revealjs_files,
30
+ image_files: image_files,
31
+ output_dir: output_dir,
32
+ slides_haml: slides_haml,
33
+ config: config
34
+ })
35
+ builder.build!
36
+
22
37
  end
23
38
  end
24
39
 
@@ -1,4 +1,10 @@
1
1
  require_relative 'reveal-ck/version'
2
+ require_relative 'reveal-ck/config'
3
+ require_relative 'reveal-ck/file_string_replacer'
2
4
  require_relative 'reveal-ck/file_slicer'
3
5
  require_relative 'reveal-ck/file_splicer'
4
6
  require_relative 'reveal-ck/haml_processor'
7
+ require_relative 'reveal-ck/build_task'
8
+ require_relative 'reveal-ck/builder'
9
+ require_relative 'reveal-ck/slide_builder'
10
+ require_relative 'reveal-ck/presentation_builder'
@@ -0,0 +1,14 @@
1
+ module RevealCK
2
+ class BuildTask
3
+
4
+ def initialize(args)
5
+ @description = args[:description]
6
+ @action = args[:action]
7
+ end
8
+
9
+ def go!
10
+ @action.call
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,21 @@
1
+ module RevealCK
2
+ class Builder
3
+
4
+ def register_tasks
5
+ raise "Subclasses must implement register_tasks"
6
+ end
7
+
8
+ def add_task(description, action)
9
+ @tasks << BuildTask.new({
10
+ description: description,
11
+ action: action
12
+ })
13
+ end
14
+
15
+ def build!
16
+ register_tasks unless @tasks
17
+ @tasks.each {|task| task.go!}
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,43 @@
1
+ require 'toml'
2
+
3
+ module RevealCK
4
+ class Config
5
+
6
+ def initialize(args={})
7
+ config_file = args[:config_file]
8
+ @config = load_config config_file
9
+ end
10
+
11
+ def title
12
+ @config["title"]
13
+ end
14
+
15
+ def author
16
+ @config["author"]
17
+ end
18
+
19
+ def theme
20
+ @config["presentation"]["theme"]
21
+ end
22
+
23
+ private
24
+
25
+ DEFAULTS = {
26
+ "title" => "Slides",
27
+ "author" => "Hakim El Hattab",
28
+ "presentation" => {
29
+ "theme" => "default"
30
+ }
31
+ }
32
+
33
+ def load_config(config_file)
34
+ config = DEFAULTS.dup
35
+ if config_file && File.exists?(config_file)
36
+ file_config = TOML.load_file config_file
37
+ config.merge! file_config
38
+ end
39
+ config
40
+ end
41
+
42
+ end
43
+ end
@@ -1,23 +1,25 @@
1
- class FileSlicer
1
+ module RevealCK
2
+ class FileSlicer
2
3
 
3
- def self.remove!(path, range)
4
- slice_file = if File.exists? path
5
- path
6
- else
7
- File.expand_path(File.join(Dir.pwd, path))
4
+ def self.remove!(path, range)
5
+ slice_file = if File.exists? path
6
+ path
7
+ else
8
+ File.expand_path(File.join(Dir.pwd, path))
9
+ end
10
+ lines = File.open(slice_file).readlines
11
+ slicer = FileSlicer.new lines
12
+ sliced_lines = slicer.remove range
13
+ File.open(slice_file, 'w') { |f| f << sliced_lines.join }
8
14
  end
9
- lines = File.open(slice_file).readlines
10
- slicer = FileSlicer.new lines
11
- sliced_lines = slicer.remove range
12
- File.open(slice_file, 'w') { |f| f << sliced_lines.join }
13
- end
14
15
 
15
- def initialize(lines)
16
- @lines = lines
17
- end
16
+ def initialize(lines)
17
+ @lines = lines
18
+ end
18
19
 
19
- def remove(range)
20
- @lines.select.with_index { |line, index| ! range.cover? index }
21
- end
20
+ def remove(range)
21
+ @lines.select.with_index { |line, index| ! range.cover? index }
22
+ end
22
23
 
24
+ end
23
25
  end
@@ -1,39 +1,41 @@
1
- class FileSplicer
1
+ module RevealCK
2
+ class FileSplicer
2
3
 
3
- def initialize(lines)
4
- @lines = lines
5
- end
4
+ def initialize(lines)
5
+ @lines = lines
6
+ end
6
7
 
7
- def insert(new_lines, opts)
8
- index = @lines.each.with_index do |line, i|
9
- break i + 1 if line.include? opts[:after]
8
+ def insert(new_lines, opts)
9
+ index = @lines.each.with_index do |line, i|
10
+ break i + 1 if line.include? opts[:after]
11
+ end
12
+ @lines.insert(index, new_lines).flatten
10
13
  end
11
- @lines.insert(index, new_lines).flatten
12
- end
13
14
 
14
- def self.insert!(to_insert, opts)
15
- to_insert_lines = readlines to_insert
16
- insert_into_file = find_file opts[:into]
17
- insert_into_lines = readlines insert_into_file
15
+ def self.insert!(to_insert, opts)
16
+ to_insert_lines = readlines to_insert
17
+ insert_into_file = find_file opts[:into]
18
+ insert_into_lines = readlines insert_into_file
18
19
 
19
- splicer = FileSplicer.new insert_into_lines
20
- spliced_lines = splicer.insert to_insert_lines, after: opts[:after]
21
- File.open(insert_into_file, 'w') { |f| f << spliced_lines.join }
22
- end
20
+ splicer = FileSplicer.new insert_into_lines
21
+ spliced_lines = splicer.insert to_insert_lines, after: opts[:after]
22
+ File.open(insert_into_file, 'w') { |f| f << spliced_lines.join }
23
+ end
23
24
 
24
- private
25
+ private
25
26
 
26
- def self.find_file(path)
27
- if File.exists? path
28
- path
29
- else
30
- File.expand_original(File.join(Dir.pwd, to_insert))
27
+ def self.find_file(path)
28
+ if File.exists? path
29
+ path
30
+ else
31
+ File.expand_original(File.join(Dir.pwd, to_insert))
32
+ end
31
33
  end
32
- end
33
34
 
34
- def self.readlines(path)
35
- file = find_file path
36
- File.open(file).readlines
37
- end
35
+ def self.readlines(path)
36
+ file = find_file path
37
+ File.open(file).readlines
38
+ end
38
39
 
40
+ end
39
41
  end
@@ -0,0 +1,17 @@
1
+ module RevealCK
2
+ class FileStringReplacer
3
+
4
+ def self.replace!(path, args)
5
+ old, new = args[:old], args[:new]
6
+ file = if File.exists? path
7
+ path
8
+ else
9
+ File.expand_path(File.join(Dir.pwd, path))
10
+ end
11
+ lines = File.open(file).read
12
+ lines = lines.sub old, new
13
+ File.open(file, 'w') { |f| f << lines }
14
+ end
15
+
16
+ end
17
+ end
@@ -1,24 +1,26 @@
1
1
  require 'haml'
2
2
  require 'ostruct'
3
3
 
4
- class HamlProcessor
4
+ module RevealCK
5
+ class HamlProcessor
5
6
 
6
- attr_reader :html
7
+ attr_reader :html
7
8
 
8
- def initialize(haml)
9
- render_context = ::OpenStruct.new({})
10
- engine = ::Haml::Engine.new haml
11
- @html = engine.render render_context
12
- end
9
+ def initialize(haml)
10
+ render_context = ::OpenStruct.new({})
11
+ engine = ::Haml::Engine.new haml
12
+ @html = engine.render render_context
13
+ end
13
14
 
14
- def self.open(path)
15
- haml_file = if File.exists? path
16
- path
17
- else
18
- File.expand_path(File.join(Dir.pwd, path))
15
+ def self.open(path)
16
+ haml_file = if File.exists? path
17
+ path
18
+ else
19
+ File.expand_path(File.join(Dir.pwd, path))
20
+ end
21
+ haml = File.open(haml_file).read
22
+ HamlProcessor.new haml
19
23
  end
20
- haml = File.open(haml_file).read
21
- HamlProcessor.new haml
22
- end
23
24
 
25
+ end
24
26
  end
@@ -0,0 +1,69 @@
1
+ require 'fileutils'
2
+
3
+ module RevealCK
4
+ #
5
+ # Public: A PresentationBuilder knows how to bundle together all of
6
+ # the various files that makeup a reveal.js presentation
7
+ #
8
+ class PresentationBuilder < Builder
9
+
10
+ attr_reader :revealjs_files, :image_files, :slides_haml, :config
11
+ attr_reader :tasks
12
+
13
+ def initialize(args)
14
+ @revealjs_files, @image_files = args[:revealjs_files], args[:image_files]
15
+ @slides_haml = args[:slides_haml]
16
+ @output_dir = args[:output_dir]
17
+ @config = args[:config]
18
+ end
19
+
20
+ def output_dir(child=nil)
21
+ if child
22
+ File.join(@output_dir, child)
23
+ else
24
+ @output_dir
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def register_tasks
31
+
32
+ @tasks = []
33
+
34
+ add_task "Ensuring #{output_dir}/ exists",
35
+ lambda {
36
+ FileUtils.mkdir_p output_dir, verbose: false
37
+ }
38
+
39
+ add_task "Transforming #{slides_haml} into #{output_dir('slides_html')}'}",
40
+ lambda {
41
+ processor = HamlProcessor.open slides_haml
42
+ File.open(output_dir('slides.html'), 'w') { |f| f << processor.html }
43
+ }
44
+
45
+ add_task "Bundling up the revealjs stuff into #{output_dir}/",
46
+ lambda {
47
+ FileUtils.cp_r revealjs_files, output_dir, verbose: false
48
+ }
49
+
50
+ add_task "Copying in images into #{output_dir('images')}",
51
+ lambda {
52
+ FileUtils.mkdir_p output_dir('images'), verbose: false
53
+ FileUtils.cp_r image_files, output_dir('images'), verbose: false
54
+ }
55
+
56
+ add_task "Creating slides/index.html",
57
+ lambda {
58
+ slide_builder = SlideBuilder.new({
59
+ user_slides: output_dir('slides.html'),
60
+ reveal_slides: output_dir('index.html'),
61
+ config: config
62
+ })
63
+ slide_builder.build!
64
+ }
65
+
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,66 @@
1
+ module RevealCK
2
+ #
3
+ # Public: A SlideBuilder knows how to build the index.html file (the
4
+ # core slides) within a reveal.js presentation.
5
+ #
6
+ class SlideBuilder < Builder
7
+
8
+ attr_reader :user_slides, :reveal_slides
9
+
10
+ attr_reader :tasks
11
+
12
+ attr_reader :config
13
+
14
+ def initialize(args)
15
+ @user_slides = args[:user_slides]
16
+ @reveal_slides = args[:reveal_slides]
17
+ @config = args[:config]
18
+ end
19
+
20
+ private
21
+
22
+ def register_tasks
23
+
24
+ @tasks = []
25
+
26
+ add_task "Slicing out reveal.js default slides",
27
+ lambda {
28
+ line_nums = {
29
+ default_slides: {
30
+ first: 38, # Line where I see <div class="slides">
31
+ last: 346 # Closing <div>
32
+ }
33
+ }
34
+ default_slides = line_nums[:default_slides][:first]..line_nums[:default_slides][:last]
35
+ FileSlicer.remove! reveal_slides, default_slides
36
+ }
37
+
38
+ add_task "Splicing in slides from #{user_slides}",
39
+ lambda {
40
+ FileSplicer.insert! user_slides, into: reveal_slides, after: '<div class="slides">'
41
+ }
42
+
43
+ old_title = 'reveal.js - The HTML Presentation Framework'
44
+ new_title = config.title
45
+ add_task "Replacing the <title>",
46
+ lambda {
47
+ FileStringReplacer.replace! reveal_slides, old: old_title, new: config.title
48
+ }
49
+
50
+ old_author = 'name="author" content="Hakim El Hattab"'
51
+ new_author = 'name="author" content="' + config.author + '"'
52
+ add_task "Replacing the <meta name='author'>",
53
+ lambda {
54
+ FileStringReplacer.replace! reveal_slides, old: old_author, new: new_author
55
+ }
56
+
57
+ old_theme = 'href="css/theme/default.css" id="theme"'
58
+ new_theme = 'href="css/theme/' + config.theme + '.css" id="theme"'
59
+ add_task 'Replacing the core theme',
60
+ lambda {
61
+ FileStringReplacer.replace! reveal_slides, old: old_theme, new: new_theme
62
+ }
63
+ end
64
+
65
+ end
66
+ end