middleman-presentation-core 0.16.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. checksums.yaml +7 -0
  2. data/.rdebugrc +7 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +52 -0
  5. data/.simplecov +25 -0
  6. data/.yardopts +5 -0
  7. data/Guardfile +13 -0
  8. data/LICENSE.software +21 -0
  9. data/Rakefile +200 -0
  10. data/config/license_finder.yml +13 -0
  11. data/cucumber.yml +2 -0
  12. data/doc/licenses/dependencies.csv +55 -0
  13. data/doc/licenses/dependencies.db +0 -0
  14. data/doc/licenses/dependencies.html +1415 -0
  15. data/doc/licenses/dependencies.md +603 -0
  16. data/doc/licenses/dependencies_detailed.csv +190 -0
  17. data/doc/yard/.keep +0 -0
  18. data/features/build_presentation.feature +62 -0
  19. data/features/code_highlighting.feature +43 -0
  20. data/features/components.feature +29 -0
  21. data/features/create_plugin-cli.feature +11 -0
  22. data/features/create_presentation-cli.feature +349 -0
  23. data/features/create_slide-cli.feature +188 -0
  24. data/features/create_slides-templates-cli.feature +114 -0
  25. data/features/create_theme-cli.feature +58 -0
  26. data/features/default_slides.feature +58 -0
  27. data/features/edit_slide-cli.feature +121 -0
  28. data/features/export_presentation-cli.feature +23 -0
  29. data/features/grouping_slides.feature +150 -0
  30. data/features/ignore_slides.feature +103 -0
  31. data/features/init_application-cli.feature +59 -0
  32. data/features/init_predefined_slides.feature +9 -0
  33. data/features/language_detection.feature +0 -0
  34. data/features/list_assets-cli.feature +13 -0
  35. data/features/list_components-cli.feature +13 -0
  36. data/features/list_helpers-cli.feature +13 -0
  37. data/features/list_plugins-cli.feature +13 -0
  38. data/features/list_styles-cli.feature +17 -0
  39. data/features/plugins.feature +63 -0
  40. data/features/presentation.feature +57 -0
  41. data/features/rename_slide-cli.feature +176 -0
  42. data/features/render_slides.feature +76 -0
  43. data/features/show_config-cli.feature +25 -0
  44. data/features/show_footer.feature +14 -0
  45. data/features/show_slide_number.feature +31 -0
  46. data/features/show_support_information-cli.feature +12 -0
  47. data/features/support/aruba.rb +18 -0
  48. data/features/support/ci.rb +3 -0
  49. data/features/support/env.rb +25 -0
  50. data/features/support/fixtures.rb +21 -0
  51. data/features/support/hash.rb +2 -0
  52. data/features/support/reporting.rb +2 -0
  53. data/features/version_number.feature +15 -0
  54. data/fixtures/middleman-presentation-simple_plugin/Rakefile +1 -0
  55. data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-plugin.rb +0 -0
  56. data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/helpers.rb +13 -0
  57. data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/plugin.rb +34 -0
  58. data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/version.rb +8 -0
  59. data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin.rb +11 -0
  60. data/fixtures/middleman-presentation-simple_plugin/middleman-presentation-simple_plugin.gemspec +22 -0
  61. data/fixtures/middleman-presentation-simple_plugin/vendor/assets/stylesheets/test_simple.scss +3 -0
  62. data/lib/middleman-presentation-core/application_config.rb +198 -0
  63. data/lib/middleman-presentation-core/asset.rb +103 -0
  64. data/lib/middleman-presentation-core/asset_component.rb +34 -0
  65. data/lib/middleman-presentation-core/asset_list.rb +84 -0
  66. data/lib/middleman-presentation-core/asset_store.rb +73 -0
  67. data/lib/middleman-presentation-core/assets_loader.rb +95 -0
  68. data/lib/middleman-presentation-core/assets_manager.rb +73 -0
  69. data/lib/middleman-presentation-core/cache.rb +49 -0
  70. data/lib/middleman-presentation-core/cli/base.rb +30 -0
  71. data/lib/middleman-presentation-core/cli/base_group.rb +11 -0
  72. data/lib/middleman-presentation-core/cli/build.rb +13 -0
  73. data/lib/middleman-presentation-core/cli/build_presentation.rb +57 -0
  74. data/lib/middleman-presentation-core/cli/change.rb +13 -0
  75. data/lib/middleman-presentation-core/cli/change_slide.rb +82 -0
  76. data/lib/middleman-presentation-core/cli/create.rb +16 -0
  77. data/lib/middleman-presentation-core/cli/create_plugin.rb +62 -0
  78. data/lib/middleman-presentation-core/cli/create_presentation.rb +300 -0
  79. data/lib/middleman-presentation-core/cli/create_slide.rb +52 -0
  80. data/lib/middleman-presentation-core/cli/create_theme.rb +81 -0
  81. data/lib/middleman-presentation-core/cli/edit.rb +13 -0
  82. data/lib/middleman-presentation-core/cli/edit_slide.rb +49 -0
  83. data/lib/middleman-presentation-core/cli/export.rb +11 -0
  84. data/lib/middleman-presentation-core/cli/export_presentation.rb +55 -0
  85. data/lib/middleman-presentation-core/cli/init.rb +12 -0
  86. data/lib/middleman-presentation-core/cli/init_application.rb +48 -0
  87. data/lib/middleman-presentation-core/cli/init_predefined_slides.rb +31 -0
  88. data/lib/middleman-presentation-core/cli/list.rb +66 -0
  89. data/lib/middleman-presentation-core/cli/reset_thor.rb +18 -0
  90. data/lib/middleman-presentation-core/cli/runner.rb +47 -0
  91. data/lib/middleman-presentation-core/cli/serve.rb +13 -0
  92. data/lib/middleman-presentation-core/cli/serve_presentation.rb +30 -0
  93. data/lib/middleman-presentation-core/cli/shared.rb +51 -0
  94. data/lib/middleman-presentation-core/cli/show.rb +70 -0
  95. data/lib/middleman-presentation-core/comparable_slide.rb +69 -0
  96. data/lib/middleman-presentation-core/component.rb +86 -0
  97. data/lib/middleman-presentation-core/components_manager.rb +96 -0
  98. data/lib/middleman-presentation-core/configuration_file.rb +15 -0
  99. data/lib/middleman-presentation-core/css_class_extracter.rb +41 -0
  100. data/lib/middleman-presentation-core/custom_template.rb +15 -0
  101. data/lib/middleman-presentation-core/erb_template.rb +15 -0
  102. data/lib/middleman-presentation-core/errors.rb +10 -0
  103. data/lib/middleman-presentation-core/existing_slide.rb +92 -0
  104. data/lib/middleman-presentation-core/frontend_component.rb +75 -0
  105. data/lib/middleman-presentation-core/group_template.rb +15 -0
  106. data/lib/middleman-presentation-core/helpers_manager.rb +37 -0
  107. data/lib/middleman-presentation-core/ignore_file.rb +52 -0
  108. data/lib/middleman-presentation-core/liquid_template.rb +15 -0
  109. data/lib/middleman-presentation-core/list.rb +7 -0
  110. data/lib/middleman-presentation-core/locale_configurator.rb +84 -0
  111. data/lib/middleman-presentation-core/logger.rb +8 -0
  112. data/lib/middleman-presentation-core/main.rb +55 -0
  113. data/lib/middleman-presentation-core/markdown_template.rb +15 -0
  114. data/lib/middleman-presentation-core/middleman_environment.rb +108 -0
  115. data/lib/middleman-presentation-core/middleman_extension.rb +12 -0
  116. data/lib/middleman-presentation-core/middleman_step_definitions.rb +131 -0
  117. data/lib/middleman-presentation-core/new_slide.rb +140 -0
  118. data/lib/middleman-presentation-core/overwrite_sass.rb +22 -0
  119. data/lib/middleman-presentation-core/plugin.rb +8 -0
  120. data/lib/middleman-presentation-core/plugin_api.rb +65 -0
  121. data/lib/middleman-presentation-core/plugins_manager.rb +7 -0
  122. data/lib/middleman-presentation-core/predefined_slide_templates_directory.rb +15 -0
  123. data/lib/middleman-presentation-core/presentation_helper.rb +69 -0
  124. data/lib/middleman-presentation-core/register_extension.rb +4 -0
  125. data/lib/middleman-presentation-core/roles/comparable_by_name.rb +24 -0
  126. data/lib/middleman-presentation-core/slide_group.rb +33 -0
  127. data/lib/middleman-presentation-core/slide_list.rb +52 -0
  128. data/lib/middleman-presentation-core/slide_name.rb +61 -0
  129. data/lib/middleman-presentation-core/start.rb +68 -0
  130. data/lib/middleman-presentation-core/step_definitions.rb +238 -0
  131. data/lib/middleman-presentation-core/syntax_highlighter.rb +42 -0
  132. data/lib/middleman-presentation-core/test_helpers.rb +22 -0
  133. data/lib/middleman-presentation-core/transformers/file_keeper.rb +13 -0
  134. data/lib/middleman-presentation-core/transformers/group_slides.rb +34 -0
  135. data/lib/middleman-presentation-core/transformers/ignore_slides.rb +28 -0
  136. data/lib/middleman-presentation-core/transformers/remove_duplicate_slides.rb +32 -0
  137. data/lib/middleman-presentation-core/transformers/sort_slides.rb +13 -0
  138. data/lib/middleman-presentation-core/utils.rb +40 -0
  139. data/lib/middleman-presentation-core/version.rb +8 -0
  140. data/lib/middleman-presentation-core.rb +127 -0
  141. data/locales/de.yml +233 -0
  142. data/locales/en.yml +236 -0
  143. data/middleman-presentation-core.gemspec +40 -0
  144. data/source/slides/01.html.liquid +0 -0
  145. data/spec/asset_component_spec.rb +13 -0
  146. data/spec/asset_list_spec.rb +50 -0
  147. data/spec/asset_spec.rb +45 -0
  148. data/spec/asset_store_spec.rb +61 -0
  149. data/spec/assets_manager_spec.rb +111 -0
  150. data/spec/components_manager_spec.rb +142 -0
  151. data/spec/css_class_extracter_spec.rb +28 -0
  152. data/spec/existing_slide_spec.rb +177 -0
  153. data/spec/frontend_component_spec.rb +94 -0
  154. data/spec/helpers_manager_spec.rb +90 -0
  155. data/spec/ignore_file_spec.rb +75 -0
  156. data/spec/new_slide_spec.rb +155 -0
  157. data/spec/presentation_helper_spec.rb +137 -0
  158. data/spec/shared_examples/.keep +0 -0
  159. data/spec/slide_group_spec.rb +54 -0
  160. data/spec/slide_list_spec.rb +125 -0
  161. data/spec/slide_name_spec.rb +53 -0
  162. data/spec/spec_helper.rb +19 -0
  163. data/spec/support/aruba.rb +53 -0
  164. data/spec/support/ci.rb +20 -0
  165. data/spec/support/environment.rb +18 -0
  166. data/spec/support/filesystem.rb +22 -0
  167. data/spec/support/locale.rb +2 -0
  168. data/spec/support/reporting.rb +2 -0
  169. data/spec/support/rspec.rb +9 -0
  170. data/spec/support/string.rb +2 -0
  171. data/spec/transformers/file_keeper_spec.rb +24 -0
  172. data/spec/transformers/group_slides_spec.rb +44 -0
  173. data/spec/transformers/ignore_slides_spec.rb +64 -0
  174. data/spec/transformers/remove_duplicate_slides_spec.rb +120 -0
  175. data/spec/transformers/sort_slides_spec.rb +17 -0
  176. data/spec/utils_spec.rb +14 -0
  177. data/templates/.bowerrc.tt +4 -0
  178. data/templates/.gitignore +5 -0
  179. data/templates/Gemfile.tt +32 -0
  180. data/templates/LICENSE.presentation +1 -0
  181. data/templates/Rakefile +59 -0
  182. data/templates/bower.json.tt +8 -0
  183. data/templates/bundler_config.tt +6 -0
  184. data/templates/config.rb.tt +2 -0
  185. data/templates/config.yaml.tt +17 -0
  186. data/templates/gitignore.tt +14 -0
  187. data/templates/plugin/%plugin_name%.gemspec.tt +24 -0
  188. data/templates/plugin/.gitignore +13 -0
  189. data/templates/plugin/Gemfile.tt +4 -0
  190. data/templates/plugin/LICENSE.txt.tt +22 -0
  191. data/templates/plugin/README.md.tt +31 -0
  192. data/templates/plugin/Rakefile +1 -0
  193. data/templates/plugin/lib/%plugin_name%/version.rb.tt +8 -0
  194. data/templates/plugin/lib/%plugin_name%.rb.tt +10 -0
  195. data/templates/predefined_slides.d/00_00.html.erb.tt +26 -0
  196. data/templates/predefined_slides.d/00_01.html.md.tt +6 -0
  197. data/templates/predefined_slides.d/999980.html.erb.tt +4 -0
  198. data/templates/predefined_slides.d/999981.html.erb.tt +27 -0
  199. data/templates/predefined_slides.d/999982.html.erb.tt +4 -0
  200. data/templates/presentation_theme/bower.json.tt +20 -0
  201. data/templates/presentation_theme/images/.keep +0 -0
  202. data/templates/presentation_theme/javascripts/%theme_name%.js.tt +0 -0
  203. data/templates/presentation_theme/stylesheets/%theme_name%.scss.tt +9 -0
  204. data/templates/presentation_theme/stylesheets/_fonts.scss.tt +0 -0
  205. data/templates/presentation_theme/stylesheets/_images.scss.tt +5 -0
  206. data/templates/presentation_theme/stylesheets/_theme.scss.tt +251 -0
  207. data/templates/rackup.config.erb +16 -0
  208. data/templates/script/bootstrap +5 -0
  209. data/templates/script/build +3 -0
  210. data/templates/script/export +3 -0
  211. data/templates/script/presentation +3 -0
  212. data/templates/script/slide +3 -0
  213. data/templates/script/start +43 -0
  214. data/templates/slides/custom.md.tt +3 -0
  215. data/templates/slides/erb.tt +5 -0
  216. data/templates/slides/group.tt +3 -0
  217. data/templates/slides/liquid.tt +5 -0
  218. data/templates/slides/markdown.tt +3 -0
  219. data/templates/source/index.html.erb +1 -0
  220. data/templates/source/javascripts/application.js.tt +3 -0
  221. data/templates/source/layout.erb +133 -0
  222. data/templates/source/stylesheets/application.scss.tt +3 -0
  223. metadata +574 -0
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # Create theme
6
+ class CreateTheme < BaseGroup
7
+ include Thor::Actions
8
+
9
+ desc Middleman::Presentation.t('views.themes.create.title')
10
+
11
+ class_option :prefix, default: Middleman::Presentation.config.theme_prefix, desc: Middleman::Presentation.t('views.themes.create.options.prefix')
12
+ class_option :stylesheets_directory, default: Middleman::Presentation.config.create_stylesheets_directory, desc: Middleman::Presentation.t('views.themes.create.options.stylesheets_directory')
13
+ class_option :javascripts_directory, default: Middleman::Presentation.config.create_javascripts_directory, desc: Middleman::Presentation.t('views.themes.create.options.javascripts_directory')
14
+ class_option :images_directory, default: Middleman::Presentation.config.create_images_directory, desc: Middleman::Presentation.t('views.themes.create.options.images_directory')
15
+ class_option :author, default: Middleman::Presentation.config.author, desc: Middleman::Presentation.t('views.themes.create.options.author')
16
+ class_option :email, desc: Middleman::Presentation.t('views.themes.create.options.email')
17
+ class_option :homepage, desc: Middleman::Presentation.t('views.themes.create.options.homepage')
18
+ class_option :version, default: '0.0.1', required: true, desc: Middleman::Presentation.t('views.themes.create.options.version')
19
+ class_option :year, default: Time.now.strftime('%Y'), desc: Middleman::Presentation.t('views.themes.create.options.year')
20
+ class_option :license, default: 'MIT', required: true, desc: Middleman::Presentation.t('views.themes.create.options.license')
21
+ class_option :initialize_git, type: :boolean, default: Middleman::Presentation.config.initialize_git, desc: Middleman::Presentation.t('views.themes.create.options.initialize_git')
22
+ class_option :clean_css, type: :boolean, default: false, desc: Middleman::Presentation.t('views.themes.create.options.clean_css')
23
+
24
+ argument :name, desc: Middleman::Presentation.t('views.themes.create.arguments.name')
25
+
26
+ def initialize_generator
27
+ enable_debug_mode
28
+ end
29
+
30
+ def add_path_to_source_paths
31
+ source_paths << File.expand_path('../../../../templates', __FILE__)
32
+ end
33
+
34
+ def build_theme_name
35
+ new_name = []
36
+ new_name << options[:prefix] unless options[:prefix].blank?
37
+ new_name << name
38
+
39
+ @theme_name = new_name.join('-')
40
+ end
41
+
42
+ def create_variables_for_templates
43
+ @author = options[:author]
44
+ @year = options[:year]
45
+ @license = options[:license]
46
+ @email = options[:email]
47
+ @version = options[:version]
48
+ @clean_css = options[:clean_css]
49
+ end
50
+
51
+ def create_theme_directory
52
+ empty_directory theme_name
53
+ end
54
+
55
+ def create_bower_config_file
56
+ template 'presentation_theme/bower.json.tt', File.join(theme_name, 'bower.json')
57
+ end
58
+
59
+ def create_asset_directories
60
+ directory('presentation_theme/javascripts', File.join(theme_name, 'javascripts')) if options[:javascripts_directory]
61
+ directory('presentation_theme/stylesheets', File.join(theme_name, 'stylesheets')) if options[:stylesheets_directory]
62
+ directory('presentation_theme/images', File.join(theme_name, 'images')) if options[:images_directory]
63
+ end
64
+
65
+ def initialize_git
66
+ return unless options[:initialize_git]
67
+
68
+ Dir.chdir(theme_name) do
69
+ run 'git init'
70
+ run 'git add -A .'
71
+ run 'git commit -m Init'
72
+ end
73
+ end
74
+
75
+ no_commands do
76
+ attr_reader :theme_name
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'presentation init' command for the middleman CLI.
6
+ class Edit < Base
7
+ register(EditSlide, 'slide', 'slide NAME(S)', Middleman::Presentation.t('views.slides.edit.title'))
8
+
9
+ default_command :slide
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # Create slide
6
+ class EditSlide < BaseGroup
7
+ class_option :editor_command, default: Middleman::Presentation.config.editor_command, desc: Middleman::Presentation.t('views.application.options.editor_command')
8
+ class_option :regex, type: :boolean, default: Middleman::Presentation.config.use_regex, desc: Middleman::Presentation.t('views.application.options.regex')
9
+
10
+ argument :names, default: [], required: false, type: :array, desc: Middleman::Presentation.t('views.slides.edit.arguments.names')
11
+
12
+ def make_middleman_environment_available
13
+ @environment = MiddlemanEnvironment.new
14
+ end
15
+
16
+ def edit_slide
17
+ enable_debug_mode
18
+
19
+ existing_slides = SlideList.new(
20
+ Dir.glob(File.join(@environment.slides_path, '**', '*')),
21
+ slide_builder: ExistingSlide,
22
+ base_path: @environment.sources_path
23
+ ) do |l|
24
+ l.transform_with Transformers::FileKeeper.new
25
+ end
26
+
27
+ found_slides = existing_slides.select do |s|
28
+ if names.blank?
29
+ true
30
+ else
31
+ if options[:regex]
32
+ names.any? { |n| s.base_name =~ /#{n}/ }
33
+ else
34
+ names.any? { |n| s.base_name == n }
35
+ end
36
+ end
37
+ end
38
+
39
+ if found_slides.blank?
40
+ Middleman::Presentation.logger.warn Middleman::Presentation.t('errors.slide_not_found', patterns: names.to_list)
41
+ return
42
+ end
43
+
44
+ open_in_editor found_slides.sort.map(&:path)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # Run command
6
+ class Export < Base
7
+ register ExportPresentation, 'presentation', 'presentation', 'Export presentation'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'export presentation' command for the middleman CLI.
6
+ class ExportPresentation < BaseGroup
7
+ include Thor::Actions
8
+
9
+ class_option :output_file, desc: Middleman::Presentation.t('views.presentations.export.options.output_file')
10
+ class_option :prefix, desc: Middleman::Presentation.t('views.presentations.export.options.prefix')
11
+
12
+ desc Middleman::Presentation.t('views.presentation.export.title')
13
+
14
+ def initialize_generator
15
+ enable_debug_mode
16
+ end
17
+
18
+ def make_middleman_environment_available
19
+ @environment = MiddlemanEnvironment.new
20
+ end
21
+
22
+ def extract_data
23
+ @title = Middleman::Presentation.config.title
24
+ @date = Middleman::Presentation.config.date.to_s
25
+ @source_directory = @environment.build_path
26
+ @output_file = File.expand_path(
27
+ options.fetch('output_file', (@date.to_s + '-' + @title).characterize + '.zip')
28
+ )
29
+
30
+ fail Middleman::Presentation.t('errors.zip_filename_error', name: File.basename(@output_file)) unless @output_file.end_with? '.zip'
31
+
32
+ @prefix = options.fetch('prefix', (@date.to_s + '-' + @title.to_s).characterize + '/')
33
+ @images_directory = @environment.images_directory
34
+ @stylesheets_directory = @environment.stylesheets_directory
35
+ @javascripts_directory = @environment.scripts_directory
36
+ @fonts_directory = @environment.fonts_directory
37
+ end
38
+
39
+ def build_presentation
40
+ invoke 'middleman:presentation:cli:build:presentation'
41
+ end
42
+
43
+ def create_archive
44
+ Middleman::Presentation.logger.info Middleman::Presentation.t(
45
+ 'views.presentation.export.headline',
46
+ title: @title,
47
+ file: @output_file
48
+ )
49
+
50
+ Middleman::Presentation::Utils.zip(@source_directory, @output_file, prefix: @prefix)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'presentation init' command for the middleman CLI.
6
+ class Init < Base
7
+ register(InitApplication, 'application', 'application', Middleman::Presentation.t('views.applications.init.title'))
8
+ register(InitPredefinedSlides, 'predefined_slides', 'predefined_slides', Middleman::Presentation.t('views.predefined_slides.init.title'))
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'init presentation' command for the middleman CLI.
6
+ class InitApplication < BaseGroup
7
+ include Thor::Actions
8
+
9
+ class_option :configuration_file, default: Middleman::Presentation.config.preferred_configuration_file, desc: Middleman::Presentation.t('views.applications.create.options.configuration_file')
10
+ class_option :force, type: :boolean, desc: Middleman::Presentation.t('views.applications.create.options.force')
11
+ class_option :local, type: :boolean, desc: Middleman::Presentation.t('views.applications.create.options.local')
12
+
13
+ def initialize_generator
14
+ enable_debug_mode
15
+ end
16
+
17
+ def add_to_source_path
18
+ source_paths << File.expand_path('../../../../templates', __FILE__)
19
+ end
20
+
21
+ def set_variables_for_templates
22
+ @version = Middleman::Presentation::VERSION
23
+ @config = Middleman::Presentation.config
24
+ end
25
+
26
+ def write_new_configuration
27
+ file = if options[:local]
28
+ File.join(MiddlemanEnvironment.new.root_path, '.middleman-presentation.yaml')
29
+ else
30
+ options[:configuration_file]
31
+ end
32
+
33
+ FileUtils.cp file, "#{file}.bkp" if File.exist?(file) && options[:force]
34
+
35
+ if options[:local]
36
+ create_file(
37
+ file,
38
+ Middleman::Presentation.config.to_yaml(keys: Middleman::Presentation.config.exportable_options, remove_blank: true),
39
+ force: options[:force]
40
+ )
41
+ else
42
+ template 'config.yaml.tt', file, force: options[:force]
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'create presentation' command for the middleman CLI.
6
+ class InitPredefinedSlides < BaseGroup
7
+ include Thor::Actions
8
+
9
+ class_option :directory, default: PredefinedSlideTemplateDirectory.new.preferred_template_directory, desc: Middleman::Presentation.t('views.predefined_slides.create.options.directory')
10
+
11
+ def initialize_generator
12
+ enable_debug_mode
13
+ end
14
+
15
+ def add_to_source_path
16
+ source_paths << File.expand_path('../../../../templates', __FILE__)
17
+ end
18
+
19
+ def set_variables
20
+ @source = File.expand_path('../../../../templates', __FILE__)
21
+ end
22
+
23
+ def copy_templates
24
+ PredefinedSlideTemplateDirectory.new(working_directory: @source).template_files.each do |file|
25
+ copy_file file, File.join(options[:directory], File.basename(file))
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'presentation init' command for the middleman CLI.
6
+ class List < Base
7
+ include Thor::Actions
8
+
9
+ desc 'plugins', Middleman::Presentation.t('views.plugins.list.title')
10
+ def plugins
11
+ enable_debug_mode
12
+ load_runtime_assets
13
+
14
+ puts Middleman::Presentation.t('views.plugins.list.headline').underline(character: Middleman::Presentation.underline_character)
15
+ puts Middleman::Presentation.plugins_manager.to_s
16
+ end
17
+
18
+ desc 'helpers', Middleman::Presentation.t('views.helpers.list.title')
19
+ def helpers
20
+ enable_debug_mode
21
+ load_runtime_assets
22
+
23
+ puts Middleman::Presentation.t('views.helpers.list.headline').underline(character: Middleman::Presentation.underline_character)
24
+ puts Middleman::Presentation.helpers_manager.to_s
25
+ end
26
+
27
+ desc 'assets', Middleman::Presentation.t('views.assets.list.title')
28
+ def assets
29
+ enable_debug_mode
30
+ load_runtime_assets
31
+
32
+ puts Middleman::Presentation.t('views.assets.list.headline').underline(character: Middleman::Presentation.underline_character)
33
+ puts Middleman::Presentation.assets_manager.to_s
34
+ end
35
+
36
+ desc 'components', Middleman::Presentation.t('views.components.list.title')
37
+ def components
38
+ enable_debug_mode
39
+ load_runtime_assets
40
+
41
+ puts Middleman::Presentation.t('views.components.list.headline').underline(character: Middleman::Presentation.underline_character)
42
+ puts Middleman::Presentation.components_manager.to_s
43
+ end
44
+
45
+ desc 'styles', Middleman::Presentation.t('views.styles.list.title')
46
+ def styles
47
+ enable_debug_mode
48
+ load_runtime_assets
49
+
50
+ css_classes = Middleman::Presentation::CssClassExtracter.new.extract Middleman::Presentation.stylable_files, ignore: %w(slides reveal)
51
+
52
+ puts Middleman::Presentation.t('views.styles.list.headline').underline(character: Middleman::Presentation.underline_character)
53
+ css_classes.each { |klass| puts format ' %20s: %s', klass.name, klass.files.to_list }
54
+ puts
55
+ end
56
+
57
+ no_commands do
58
+ # Overwrite for assets_loader
59
+ def bower_path
60
+ MiddlemanEnvironment.new(strict: false).bower_path
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,18 @@
1
+ # Restore original behaviour of thor
2
+ # rubocop:disable Style/ClassAndModuleChildren
3
+ class ::Thor
4
+ # rubocop:enable Style/ClassAndModuleChildren
5
+ module Actions
6
+ # Create file helper class
7
+ class CreateFile
8
+ def on_conflict_behavior(&block)
9
+ if identical?
10
+ say_status :identical, :blue
11
+ else
12
+ options = base.options.merge(config)
13
+ force_or_skip_or_conflict(options[:force], options[:skip], &block)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # Run command
6
+ class Runner < Base
7
+ class_option :debug_mode, default: Middleman::Presentation.config.debug_mode, type: :boolean, desc: Middleman::Presentation.t('views.application.options.debug_mode')
8
+ class_option :bower_directory, default: Middleman::Presentation.config.bower_directory, desc: Middleman::Presentation.t('views.application.options.bower_directory')
9
+
10
+ map '-v' => :version
11
+ map '--version' => :version
12
+
13
+ desc 'init', Middleman::Presentation.t('views.runners.init.title')
14
+ subcommand 'init', Init
15
+
16
+ desc 'show', Middleman::Presentation.t('views.runners.show.title')
17
+ subcommand 'show', Show
18
+
19
+ desc 'create', Middleman::Presentation.t('views.runners.create.title')
20
+ subcommand 'create', Create
21
+
22
+ desc 'list', Middleman::Presentation.t('views.runners.list.title')
23
+ subcommand 'list', List
24
+
25
+ desc 'export', Middleman::Presentation.t('views.runners.export.title')
26
+ subcommand 'export', Export
27
+
28
+ desc 'build', Middleman::Presentation.t('views.runners.build.title')
29
+ subcommand 'build', Build
30
+
31
+ desc 'serve', Middleman::Presentation.t('views.runners.build.title')
32
+ subcommand 'serve', Serve
33
+
34
+ desc 'change', Middleman::Presentation.t('views.runners.change.title')
35
+ subcommand 'change', Change
36
+
37
+ desc 'edit', Middleman::Presentation.t('views.runners.edit.title')
38
+ subcommand 'edit', Edit
39
+
40
+ desc 'version', 'version', hide: true
41
+ def version
42
+ invoke 'middleman:presentation:cli:show:version'
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # Build presentation
6
+ class Serve < Base
7
+ register ServePresentation, 'presentation', 'presentation', 'Serve presentation'
8
+
9
+ default_command :presentation
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'build presentation' command for the middleman CLI.
6
+ class ServePresentation < BaseGroup
7
+ include Thor::Actions
8
+
9
+ desc Middleman::Presentation.t('views.presentation.serve.title')
10
+
11
+ def initialize_generator
12
+ enable_debug_mode
13
+ end
14
+
15
+ def build_presentation
16
+ Middleman::Presentation.logger.info Middleman::Presentation.t(
17
+ 'views.presentation.serve.headline',
18
+ title: Middleman::Presentation.config.title
19
+ )
20
+
21
+ cmd = []
22
+ cmd << 'middleman server'
23
+ cmd << '--verbose' if options[:debug_mode]
24
+
25
+ run(cmd.join(' '))
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # Bundle shared methods for all cli classes
6
+ module Shared
7
+ def self.included(base)
8
+ base.extend ClassMethods
9
+ end
10
+
11
+ # Enable debug mode
12
+ def enable_debug_mode
13
+ Middleman::Presentation.enable_debug_mode if options[:debug_mode] == true
14
+ end
15
+
16
+ # Create bower directory
17
+ def bower_path
18
+ MiddlemanEnvironment.new.bower_path
19
+ end
20
+
21
+ # Create assets loader base on bower directory
22
+ def assets_loader
23
+ return @assets_loader if @assets_loader
24
+
25
+ @assets_loader = Middleman::Presentation::AssetsLoader.new(bower_directory: bower_path)
26
+ end
27
+
28
+ def open_in_editor(paths)
29
+ editor = []
30
+
31
+ begin
32
+ editor << Erubis::Eruby.new(options[:editor_command]).result(Middleman::Presentation.config.to_h)
33
+ rescue NameError => e
34
+ $stderr.puts Middleman::Presentation.t('errors.missing_data_attribute', message: e.message)
35
+ end
36
+ editor.concat paths
37
+
38
+ Middleman::Presentation.logger.warn Middleman::Presentation.t('infos.open_slide_in_editor', editor: editor.first)
39
+ system(editor.join(' '))
40
+ end
41
+
42
+ # The class methods
43
+ module ClassMethods
44
+ def self.exit_on_failure?
45
+ true
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ module Cli
5
+ # This class provides an 'presentation init' command for the middleman CLI.
6
+ class Show < Base
7
+ include Thor::Actions
8
+
9
+ desc 'support_information', Middleman::Presentation.t('views.support_informations.show.title')
10
+ def support_information
11
+ enable_debug_mode
12
+ load_runtime_assets
13
+
14
+ puts FeduxOrgStdlib::SupportInformation.new(
15
+ headlines: {
16
+ rubygems_information: Middleman::Presentation.t('views.support_informations.show.headline.rubygems_information'),
17
+ system_information: Middleman::Presentation.t('views.support_informations.show.headline.system_information'),
18
+ installed_rubygems: Middleman::Presentation.t('views.support_informations.show.headline.installed_rubygems')
19
+ },
20
+ underline_character: Middleman::Presentation.underline_character
21
+ ).to_s
22
+ puts
23
+
24
+ puts Middleman::Presentation.t('views.plugins.list.headline').underline(character: Middleman::Presentation.underline_character)
25
+ puts Middleman::Presentation.plugins_manager.to_s
26
+ puts
27
+
28
+ puts Middleman::Presentation.t('views.helpers.list.headline').underline(character: Middleman::Presentation.underline_character)
29
+ puts Middleman::Presentation.helpers_manager.to_s
30
+ puts
31
+
32
+ puts Middleman::Presentation.t('views.assets.list.headline').underline(character: Middleman::Presentation.underline_character)
33
+ puts Middleman::Presentation.assets_manager.to_s
34
+ puts
35
+
36
+ puts Middleman::Presentation.t('views.components.list.headline').underline(character: Middleman::Presentation.underline_character)
37
+ puts Middleman::Presentation.components_manager.to_s
38
+ puts
39
+ end
40
+
41
+ desc 'version', Middleman::Presentation.t('views.versions.show.title')
42
+ def version
43
+ puts Middleman::Presentation::VERSION
44
+ end
45
+
46
+ desc 'config', Middleman::Presentation.t('views.configs.show.title')
47
+ option :defaults, type: :boolean, desc: Middleman::Presentation.t('views.configs.show.options.defaults')
48
+ def config
49
+ enable_debug_mode
50
+
51
+ if options[:defaults]
52
+ puts Middleman::Presentation.config.defaults.to_s
53
+ else
54
+ files = Middleman::Presentation.config.files
55
+ puts Middleman::Presentation.t('views.configs.show.used_config_files', files: files.to_list, count: files.size)
56
+ puts
57
+ puts Middleman::Presentation.config.to_s
58
+ end
59
+ end
60
+
61
+ no_commands do
62
+ # Overwrite for assets_loader
63
+ def bower_path
64
+ MiddlemanEnvironment.new(strict: false).bower_path
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+ module Middleman
3
+ module Presentation
4
+ # All methods needed to compare slides
5
+ module ComparableSlide
6
+ include Comparable
7
+
8
+ # Needs to be implemented to make the other methods work
9
+ def path
10
+ fail MethodNotImplemented
11
+ end
12
+
13
+ # Needs to be implemented to make the other methods work
14
+ def base_name
15
+ fail MethodNotImplemented
16
+ end
17
+
18
+ # Needs to be implemented to make the other methods work
19
+ def group
20
+ fail MethodNotImplemented
21
+ end
22
+
23
+ # @private
24
+ def <=>(other)
25
+ path <=> other.path
26
+ end
27
+
28
+ # @private
29
+ def eql?(other)
30
+ path.eql? other.path
31
+ end
32
+
33
+ # Is slide similar to another slide
34
+ def similar?(other)
35
+ return true if eql? other
36
+
37
+ base_name?(other.base_name) && group?(other.group)
38
+ end
39
+
40
+ # @private
41
+ def hash
42
+ path.hash
43
+ end
44
+
45
+ # Checks if slide is in group
46
+ def group?(g)
47
+ group == g
48
+ end
49
+
50
+ # Check if string/regex matches path
51
+ def match?(string_or_regex)
52
+ regex = if string_or_regex.is_a? String
53
+ Regexp.new(string_or_regex)
54
+ else
55
+ string_or_regex
56
+ end
57
+
58
+ # rubocop:disable Style/CaseEquality
59
+ regex === relative_path.to_s
60
+ # rubocop:enable Style/CaseEquality
61
+ end
62
+
63
+ # Check if basename is equal
64
+ def base_name?(b)
65
+ base_name == b
66
+ end
67
+ end
68
+ end
69
+ end