middleman-presentation-core 0.16.0.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rdebugrc +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +52 -0
- data/.simplecov +25 -0
- data/.yardopts +5 -0
- data/Guardfile +13 -0
- data/LICENSE.software +21 -0
- data/Rakefile +200 -0
- data/config/license_finder.yml +13 -0
- data/cucumber.yml +2 -0
- data/doc/licenses/dependencies.csv +55 -0
- data/doc/licenses/dependencies.db +0 -0
- data/doc/licenses/dependencies.html +1415 -0
- data/doc/licenses/dependencies.md +603 -0
- data/doc/licenses/dependencies_detailed.csv +190 -0
- data/doc/yard/.keep +0 -0
- data/features/build_presentation.feature +62 -0
- data/features/code_highlighting.feature +43 -0
- data/features/components.feature +29 -0
- data/features/create_plugin-cli.feature +11 -0
- data/features/create_presentation-cli.feature +349 -0
- data/features/create_slide-cli.feature +188 -0
- data/features/create_slides-templates-cli.feature +114 -0
- data/features/create_theme-cli.feature +58 -0
- data/features/default_slides.feature +58 -0
- data/features/edit_slide-cli.feature +121 -0
- data/features/export_presentation-cli.feature +23 -0
- data/features/grouping_slides.feature +150 -0
- data/features/ignore_slides.feature +103 -0
- data/features/init_application-cli.feature +59 -0
- data/features/init_predefined_slides.feature +9 -0
- data/features/language_detection.feature +0 -0
- data/features/list_assets-cli.feature +13 -0
- data/features/list_components-cli.feature +13 -0
- data/features/list_helpers-cli.feature +13 -0
- data/features/list_plugins-cli.feature +13 -0
- data/features/list_styles-cli.feature +17 -0
- data/features/plugins.feature +63 -0
- data/features/presentation.feature +57 -0
- data/features/rename_slide-cli.feature +176 -0
- data/features/render_slides.feature +76 -0
- data/features/show_config-cli.feature +25 -0
- data/features/show_footer.feature +14 -0
- data/features/show_slide_number.feature +31 -0
- data/features/show_support_information-cli.feature +12 -0
- data/features/support/aruba.rb +18 -0
- data/features/support/ci.rb +3 -0
- data/features/support/env.rb +25 -0
- data/features/support/fixtures.rb +21 -0
- data/features/support/hash.rb +2 -0
- data/features/support/reporting.rb +2 -0
- data/features/version_number.feature +15 -0
- data/fixtures/middleman-presentation-simple_plugin/Rakefile +1 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-plugin.rb +0 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/helpers.rb +13 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/plugin.rb +34 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin/version.rb +8 -0
- data/fixtures/middleman-presentation-simple_plugin/lib/middleman-presentation-simple_plugin.rb +11 -0
- data/fixtures/middleman-presentation-simple_plugin/middleman-presentation-simple_plugin.gemspec +22 -0
- data/fixtures/middleman-presentation-simple_plugin/vendor/assets/stylesheets/test_simple.scss +3 -0
- data/lib/middleman-presentation-core/application_config.rb +198 -0
- data/lib/middleman-presentation-core/asset.rb +103 -0
- data/lib/middleman-presentation-core/asset_component.rb +34 -0
- data/lib/middleman-presentation-core/asset_list.rb +84 -0
- data/lib/middleman-presentation-core/asset_store.rb +73 -0
- data/lib/middleman-presentation-core/assets_loader.rb +95 -0
- data/lib/middleman-presentation-core/assets_manager.rb +73 -0
- data/lib/middleman-presentation-core/cache.rb +49 -0
- data/lib/middleman-presentation-core/cli/base.rb +30 -0
- data/lib/middleman-presentation-core/cli/base_group.rb +11 -0
- data/lib/middleman-presentation-core/cli/build.rb +13 -0
- data/lib/middleman-presentation-core/cli/build_presentation.rb +57 -0
- data/lib/middleman-presentation-core/cli/change.rb +13 -0
- data/lib/middleman-presentation-core/cli/change_slide.rb +82 -0
- data/lib/middleman-presentation-core/cli/create.rb +16 -0
- data/lib/middleman-presentation-core/cli/create_plugin.rb +62 -0
- data/lib/middleman-presentation-core/cli/create_presentation.rb +300 -0
- data/lib/middleman-presentation-core/cli/create_slide.rb +52 -0
- data/lib/middleman-presentation-core/cli/create_theme.rb +81 -0
- data/lib/middleman-presentation-core/cli/edit.rb +13 -0
- data/lib/middleman-presentation-core/cli/edit_slide.rb +49 -0
- data/lib/middleman-presentation-core/cli/export.rb +11 -0
- data/lib/middleman-presentation-core/cli/export_presentation.rb +55 -0
- data/lib/middleman-presentation-core/cli/init.rb +12 -0
- data/lib/middleman-presentation-core/cli/init_application.rb +48 -0
- data/lib/middleman-presentation-core/cli/init_predefined_slides.rb +31 -0
- data/lib/middleman-presentation-core/cli/list.rb +66 -0
- data/lib/middleman-presentation-core/cli/reset_thor.rb +18 -0
- data/lib/middleman-presentation-core/cli/runner.rb +47 -0
- data/lib/middleman-presentation-core/cli/serve.rb +13 -0
- data/lib/middleman-presentation-core/cli/serve_presentation.rb +30 -0
- data/lib/middleman-presentation-core/cli/shared.rb +51 -0
- data/lib/middleman-presentation-core/cli/show.rb +70 -0
- data/lib/middleman-presentation-core/comparable_slide.rb +69 -0
- data/lib/middleman-presentation-core/component.rb +86 -0
- data/lib/middleman-presentation-core/components_manager.rb +96 -0
- data/lib/middleman-presentation-core/configuration_file.rb +15 -0
- data/lib/middleman-presentation-core/css_class_extracter.rb +41 -0
- data/lib/middleman-presentation-core/custom_template.rb +15 -0
- data/lib/middleman-presentation-core/erb_template.rb +15 -0
- data/lib/middleman-presentation-core/errors.rb +10 -0
- data/lib/middleman-presentation-core/existing_slide.rb +92 -0
- data/lib/middleman-presentation-core/frontend_component.rb +75 -0
- data/lib/middleman-presentation-core/group_template.rb +15 -0
- data/lib/middleman-presentation-core/helpers_manager.rb +37 -0
- data/lib/middleman-presentation-core/ignore_file.rb +52 -0
- data/lib/middleman-presentation-core/liquid_template.rb +15 -0
- data/lib/middleman-presentation-core/list.rb +7 -0
- data/lib/middleman-presentation-core/locale_configurator.rb +84 -0
- data/lib/middleman-presentation-core/logger.rb +8 -0
- data/lib/middleman-presentation-core/main.rb +55 -0
- data/lib/middleman-presentation-core/markdown_template.rb +15 -0
- data/lib/middleman-presentation-core/middleman_environment.rb +108 -0
- data/lib/middleman-presentation-core/middleman_extension.rb +12 -0
- data/lib/middleman-presentation-core/middleman_step_definitions.rb +131 -0
- data/lib/middleman-presentation-core/new_slide.rb +140 -0
- data/lib/middleman-presentation-core/overwrite_sass.rb +22 -0
- data/lib/middleman-presentation-core/plugin.rb +8 -0
- data/lib/middleman-presentation-core/plugin_api.rb +65 -0
- data/lib/middleman-presentation-core/plugins_manager.rb +7 -0
- data/lib/middleman-presentation-core/predefined_slide_templates_directory.rb +15 -0
- data/lib/middleman-presentation-core/presentation_helper.rb +69 -0
- data/lib/middleman-presentation-core/register_extension.rb +4 -0
- data/lib/middleman-presentation-core/roles/comparable_by_name.rb +24 -0
- data/lib/middleman-presentation-core/slide_group.rb +33 -0
- data/lib/middleman-presentation-core/slide_list.rb +52 -0
- data/lib/middleman-presentation-core/slide_name.rb +61 -0
- data/lib/middleman-presentation-core/start.rb +68 -0
- data/lib/middleman-presentation-core/step_definitions.rb +238 -0
- data/lib/middleman-presentation-core/syntax_highlighter.rb +42 -0
- data/lib/middleman-presentation-core/test_helpers.rb +22 -0
- data/lib/middleman-presentation-core/transformers/file_keeper.rb +13 -0
- data/lib/middleman-presentation-core/transformers/group_slides.rb +34 -0
- data/lib/middleman-presentation-core/transformers/ignore_slides.rb +28 -0
- data/lib/middleman-presentation-core/transformers/remove_duplicate_slides.rb +32 -0
- data/lib/middleman-presentation-core/transformers/sort_slides.rb +13 -0
- data/lib/middleman-presentation-core/utils.rb +40 -0
- data/lib/middleman-presentation-core/version.rb +8 -0
- data/lib/middleman-presentation-core.rb +127 -0
- data/locales/de.yml +233 -0
- data/locales/en.yml +236 -0
- data/middleman-presentation-core.gemspec +40 -0
- data/source/slides/01.html.liquid +0 -0
- data/spec/asset_component_spec.rb +13 -0
- data/spec/asset_list_spec.rb +50 -0
- data/spec/asset_spec.rb +45 -0
- data/spec/asset_store_spec.rb +61 -0
- data/spec/assets_manager_spec.rb +111 -0
- data/spec/components_manager_spec.rb +142 -0
- data/spec/css_class_extracter_spec.rb +28 -0
- data/spec/existing_slide_spec.rb +177 -0
- data/spec/frontend_component_spec.rb +94 -0
- data/spec/helpers_manager_spec.rb +90 -0
- data/spec/ignore_file_spec.rb +75 -0
- data/spec/new_slide_spec.rb +155 -0
- data/spec/presentation_helper_spec.rb +137 -0
- data/spec/shared_examples/.keep +0 -0
- data/spec/slide_group_spec.rb +54 -0
- data/spec/slide_list_spec.rb +125 -0
- data/spec/slide_name_spec.rb +53 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/aruba.rb +53 -0
- data/spec/support/ci.rb +20 -0
- data/spec/support/environment.rb +18 -0
- data/spec/support/filesystem.rb +22 -0
- data/spec/support/locale.rb +2 -0
- data/spec/support/reporting.rb +2 -0
- data/spec/support/rspec.rb +9 -0
- data/spec/support/string.rb +2 -0
- data/spec/transformers/file_keeper_spec.rb +24 -0
- data/spec/transformers/group_slides_spec.rb +44 -0
- data/spec/transformers/ignore_slides_spec.rb +64 -0
- data/spec/transformers/remove_duplicate_slides_spec.rb +120 -0
- data/spec/transformers/sort_slides_spec.rb +17 -0
- data/spec/utils_spec.rb +14 -0
- data/templates/.bowerrc.tt +4 -0
- data/templates/.gitignore +5 -0
- data/templates/Gemfile.tt +32 -0
- data/templates/LICENSE.presentation +1 -0
- data/templates/Rakefile +59 -0
- data/templates/bower.json.tt +8 -0
- data/templates/bundler_config.tt +6 -0
- data/templates/config.rb.tt +2 -0
- data/templates/config.yaml.tt +17 -0
- data/templates/gitignore.tt +14 -0
- data/templates/plugin/%plugin_name%.gemspec.tt +24 -0
- data/templates/plugin/.gitignore +13 -0
- data/templates/plugin/Gemfile.tt +4 -0
- data/templates/plugin/LICENSE.txt.tt +22 -0
- data/templates/plugin/README.md.tt +31 -0
- data/templates/plugin/Rakefile +1 -0
- data/templates/plugin/lib/%plugin_name%/version.rb.tt +8 -0
- data/templates/plugin/lib/%plugin_name%.rb.tt +10 -0
- data/templates/predefined_slides.d/00_00.html.erb.tt +26 -0
- data/templates/predefined_slides.d/00_01.html.md.tt +6 -0
- data/templates/predefined_slides.d/999980.html.erb.tt +4 -0
- data/templates/predefined_slides.d/999981.html.erb.tt +27 -0
- data/templates/predefined_slides.d/999982.html.erb.tt +4 -0
- data/templates/presentation_theme/bower.json.tt +20 -0
- data/templates/presentation_theme/images/.keep +0 -0
- data/templates/presentation_theme/javascripts/%theme_name%.js.tt +0 -0
- data/templates/presentation_theme/stylesheets/%theme_name%.scss.tt +9 -0
- data/templates/presentation_theme/stylesheets/_fonts.scss.tt +0 -0
- data/templates/presentation_theme/stylesheets/_images.scss.tt +5 -0
- data/templates/presentation_theme/stylesheets/_theme.scss.tt +251 -0
- data/templates/rackup.config.erb +16 -0
- data/templates/script/bootstrap +5 -0
- data/templates/script/build +3 -0
- data/templates/script/export +3 -0
- data/templates/script/presentation +3 -0
- data/templates/script/slide +3 -0
- data/templates/script/start +43 -0
- data/templates/slides/custom.md.tt +3 -0
- data/templates/slides/erb.tt +5 -0
- data/templates/slides/group.tt +3 -0
- data/templates/slides/liquid.tt +5 -0
- data/templates/slides/markdown.tt +3 -0
- data/templates/source/index.html.erb +1 -0
- data/templates/source/javascripts/application.js.tt +3 -0
- data/templates/source/layout.erb +133 -0
- data/templates/source/stylesheets/application.scss.tt +3 -0
- metadata +574 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# Main
|
|
3
|
+
module Middleman
|
|
4
|
+
# Presentation extension
|
|
5
|
+
module Presentation
|
|
6
|
+
@logger = Logger.new
|
|
7
|
+
@config = ApplicationConfig.new(merge_files: true)
|
|
8
|
+
@helpers_manager = HelpersManager.new
|
|
9
|
+
@assets_manager = AssetsManager.new
|
|
10
|
+
@components_manager = ComponentsManager.new
|
|
11
|
+
@plugins_manager = PluginsManager.new(creator: Plugin)
|
|
12
|
+
@locale_configurator = LocaleConfigurator.new(path: File.expand_path('../../../locales', __FILE__), default_locale: @config.cli_language)
|
|
13
|
+
@debug_mode = false
|
|
14
|
+
|
|
15
|
+
class << self
|
|
16
|
+
attr_reader :config, :logger, :plugins_manager, :components_manager, :helpers_manager, :assets_manager, :locale_configurator
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
attr_accessor :debug_mode
|
|
21
|
+
|
|
22
|
+
public
|
|
23
|
+
|
|
24
|
+
def t(*args, &block)
|
|
25
|
+
locale_configurator.t(*args, &block)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def underline_character
|
|
29
|
+
'#'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def debug_mode_enabled?
|
|
33
|
+
debug_mode == true
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def enable_debug_mode
|
|
37
|
+
self.debug_mode = true
|
|
38
|
+
Middleman::Presentation.config.debugging_libraries.each { |l| require l }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def stylable_files
|
|
42
|
+
paths = []
|
|
43
|
+
|
|
44
|
+
paths << '../../../templates/slides/*.tt'
|
|
45
|
+
paths << '../../../templates/predefined_slides.d/*.tt'
|
|
46
|
+
|
|
47
|
+
paths.concat ['../../../templates/source/'].product(%w(layout.erb index.html.erb)).map(&:join)
|
|
48
|
+
|
|
49
|
+
Rake::FileList.new(
|
|
50
|
+
paths.map { |f| File.expand_path(f, __FILE__) }
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Middleman
|
|
3
|
+
module Presentation
|
|
4
|
+
# Markdown template to create new slides
|
|
5
|
+
class MarkdownTemplate < FeduxOrgStdlib::FileTemplate
|
|
6
|
+
def application_name
|
|
7
|
+
'middleman-presentation'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def fallback_template_directory
|
|
11
|
+
File.expand_path('../../../templates/slides', __FILE__)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Middleman
|
|
3
|
+
module Presentation
|
|
4
|
+
# Abstraction for middleman environment
|
|
5
|
+
class MiddlemanEnvironment
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
attr_reader :strict, :application_config
|
|
9
|
+
|
|
10
|
+
public
|
|
11
|
+
|
|
12
|
+
def initialize(strict: true)
|
|
13
|
+
@strict = strict
|
|
14
|
+
@application_config = Middleman::Presentation.config
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def root_path
|
|
18
|
+
@root_path ||= ConfigurationFile.new.directory
|
|
19
|
+
rescue Errno::ENOENT
|
|
20
|
+
raise Errno::ENOENT, Middleman::Presentation.t('errors.extension_not_activated') if strict
|
|
21
|
+
|
|
22
|
+
@root_path = Dir.getwd
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def build_directory
|
|
26
|
+
application_config.build_directory
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def build_path
|
|
30
|
+
File.join(sources_path, application_config.build_directory)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def stylesheets_directory
|
|
34
|
+
application_config.stylesheets_directory
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def stylesheets_path
|
|
38
|
+
File.join(sources_path, application_config.stylesheets_directory)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def scripts_directory
|
|
42
|
+
application_config.scripts_directory
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def scripts_path
|
|
46
|
+
File.join(sources_path, application_config.scripts_directory)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def images_directory
|
|
50
|
+
application_config.images_directory
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def images_path
|
|
54
|
+
File.join(sources_path, application_config.images_directory)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def fonts_directory
|
|
58
|
+
application_config.fonts_directory
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def fonts_path
|
|
62
|
+
File.join(sources_path, application_config.fonts_directory)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def sources_directory
|
|
66
|
+
application_config.sources_directory
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def sources_path
|
|
70
|
+
File.join(root_path, application_config.sources_directory)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def slides_directory
|
|
74
|
+
File.join(application_config.sources_directory, application_config.slides_directory)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def slides_path
|
|
78
|
+
File.join(root_path, application_config.sources_directory, application_config.slides_directory)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def bower_directory
|
|
82
|
+
application_config.bower_directory
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def bower_path
|
|
86
|
+
File.join(root_path, application_config.bower_directory)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
def configuration_file
|
|
92
|
+
@configuration_file ||= ConfigurationFile.new
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def server_instance
|
|
96
|
+
@server_instance ||= proc { ::Middleman::Application.server.inst }.call
|
|
97
|
+
|
|
98
|
+
fail Thor::Error, Middleman::Presentation.t('errors.extension_not_activated') unless @server_instance.extensions.key? :presentation
|
|
99
|
+
|
|
100
|
+
@server_instance
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def presentation_instance
|
|
104
|
+
@presentation_instance ||= server_instance.extensions[:presentation]
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'rack/test'
|
|
3
|
+
|
|
4
|
+
Given /^a clean server$/ do
|
|
5
|
+
@initialize_commands = []
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
Given /^"([^\"]*)" feature is "([^\"]*)"$/ do |feature, state|
|
|
9
|
+
@initialize_commands ||= []
|
|
10
|
+
|
|
11
|
+
if state == 'enabled'
|
|
12
|
+
@initialize_commands << lambda { activate(feature.to_sym) }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
Given /^"([^\"]*)" feature is "enabled" with "([^\"]*)"$/ do |feature, options_str|
|
|
17
|
+
@initialize_commands ||= []
|
|
18
|
+
|
|
19
|
+
options = eval("{#{options_str}}")
|
|
20
|
+
|
|
21
|
+
@initialize_commands << lambda { activate(feature.to_sym, options) }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Given /^"([^\"]*)" is set to "([^\"]*)"$/ do |variable, value|
|
|
25
|
+
@initialize_commands ||= []
|
|
26
|
+
@initialize_commands << lambda { set(variable.to_sym, value) }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Given /^current environment is "([^\"]*)"$/ do |env|
|
|
30
|
+
@current_env = env.to_sym
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Given /^the Server is running$/ do
|
|
34
|
+
root_dir = File.expand_path(current_dir)
|
|
35
|
+
in_current_dir do
|
|
36
|
+
|
|
37
|
+
if File.exist?(File.join(root_dir, 'source'))
|
|
38
|
+
ENV['MM_SOURCE'] = 'source'
|
|
39
|
+
else
|
|
40
|
+
ENV['MM_SOURCE'] = ''
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
ENV['MM_ROOT'] = root_dir
|
|
44
|
+
|
|
45
|
+
initialize_commands = @initialize_commands || []
|
|
46
|
+
initialize_commands.unshift lambda {
|
|
47
|
+
set :environment, @current_env || :development
|
|
48
|
+
set :show_exceptions, false
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
in_current_dir do
|
|
52
|
+
@server_inst = Middleman::Application.server.inst do
|
|
53
|
+
initialize_commands.each do |p|
|
|
54
|
+
instance_exec(&p)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
app_rack = @server_inst.class.to_rack_app
|
|
60
|
+
@browser = ::Rack::Test::Session.new(::Rack::MockSession.new(app_rack))
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
Given /^the Server is running at "([^\"]*)"$/ do |app_path|
|
|
65
|
+
step %(a fixture app "#{app_path}")
|
|
66
|
+
step %(the Server is running)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
Given /^a template named "([^\"]*)" with:$/ do |name, string|
|
|
70
|
+
step %(a file named "source/#{name}" with:), string
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
When /^I go to "([^\"]*)"$/ do |url|
|
|
74
|
+
in_current_dir do
|
|
75
|
+
@browser.get(URI.escape(url))
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
Then /^going to "([^\"]*)" should not raise an exception$/ do |url|
|
|
80
|
+
in_current_dir do
|
|
81
|
+
expect { @browser.get(URI.escape(url)) }.to_not raise_exception
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
Then /^the content type should be "([^\"]*)"$/ do |expected|
|
|
86
|
+
in_current_dir do
|
|
87
|
+
expect(@browser.last_response.content_type).to start_with(expected)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
Then /^I should see "([^\"]*)"$/ do |expected|
|
|
92
|
+
in_current_dir do
|
|
93
|
+
expect(@browser.last_response.body).to include(expected)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
Then /^I should see '([^\']*)'$/ do |expected|
|
|
98
|
+
in_current_dir do
|
|
99
|
+
expect(@browser.last_response.body).to include(expected)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
Then /^I should see:$/ do |expected|
|
|
104
|
+
in_current_dir do
|
|
105
|
+
expect(@browser.last_response.body).to include(expected)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
Then /^I should not see "([^\"]*)"$/ do |expected|
|
|
110
|
+
in_current_dir do
|
|
111
|
+
expect(@browser.last_response.body).to_not include(expected)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
Then /^I should not see:$/ do |expected|
|
|
116
|
+
in_current_dir do
|
|
117
|
+
expect(@browser.last_response.body).to_not include(expected.chomp)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
Then /^the status code should be "([^\"]*)"$/ do |expected|
|
|
122
|
+
in_current_dir do
|
|
123
|
+
expect(@browser.last_response.status).to eq expected.to_i
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
Then /^I should see "([^\"]*)" lines$/ do |lines|
|
|
128
|
+
in_current_dir do
|
|
129
|
+
expect(@browser.last_response.body.chomp.split($INPUT_RECORD_SEPARATOR).length).to eq(lines.to_i)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Middleman
|
|
3
|
+
module Presentation
|
|
4
|
+
# A slide
|
|
5
|
+
class NewSlide
|
|
6
|
+
include ComparableSlide
|
|
7
|
+
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
attr_reader :input, :name, :base_path, :slide_directory_path
|
|
11
|
+
|
|
12
|
+
public
|
|
13
|
+
|
|
14
|
+
def initialize(input, base_path:)
|
|
15
|
+
@input = input.split(/:/)
|
|
16
|
+
@name = extract_name
|
|
17
|
+
@slide_directory_path = Pathname.new(base_path)
|
|
18
|
+
@base_path = @slide_directory_path.dirname
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Return string representation of self
|
|
22
|
+
def to_s
|
|
23
|
+
path.to_s
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def path
|
|
27
|
+
p = []
|
|
28
|
+
p << Pathname.new(group) unless group.blank?
|
|
29
|
+
p << file_name
|
|
30
|
+
|
|
31
|
+
# rubocop:disable Style/EachWithObject
|
|
32
|
+
p.reduce(slide_directory_path) do |a, e|
|
|
33
|
+
# rubocop:enable Style/EachWithObject
|
|
34
|
+
a += e
|
|
35
|
+
|
|
36
|
+
a
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def group
|
|
41
|
+
@group ||= extract_group
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Return basename of slide
|
|
45
|
+
def base_name
|
|
46
|
+
File.basename(name).scan(/^([^.]+)(?:\..+)?/).flatten.first
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def file_name
|
|
50
|
+
path = if type? :erb
|
|
51
|
+
Pathname.new "#{base_name}.html.erb"
|
|
52
|
+
elsif type? :md
|
|
53
|
+
Pathname.new "#{base_name}.html.md"
|
|
54
|
+
elsif type? :liquid
|
|
55
|
+
Pathname.new "#{base_name}.html.liquid"
|
|
56
|
+
else
|
|
57
|
+
Pathname.new("#{base_name}.html#{template.proposed_extname}")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Pathname.new(path)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Write slide content to file
|
|
64
|
+
def write(**data)
|
|
65
|
+
FileUtils.mkdir_p path.dirname
|
|
66
|
+
|
|
67
|
+
File.open(path, 'wb') do |f|
|
|
68
|
+
f.write(content(**data))
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Does the slide exist
|
|
73
|
+
def exist?
|
|
74
|
+
path.exist?
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Generate slide content
|
|
78
|
+
#
|
|
79
|
+
# It either uses previously set content or generates content by using a
|
|
80
|
+
# predefined template
|
|
81
|
+
def content(**data)
|
|
82
|
+
Erubis::Eruby.new(template.content).result(data)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Relative path of slide
|
|
86
|
+
def relative_path
|
|
87
|
+
path.relative_path_from(base_path)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
def template
|
|
93
|
+
if type? :erb
|
|
94
|
+
ErbTemplate.new(working_directory: base_path.dirname)
|
|
95
|
+
elsif type? :md
|
|
96
|
+
MarkdownTemplate.new(working_directory: base_path.dirname)
|
|
97
|
+
elsif type? :liquid
|
|
98
|
+
LiquidTemplate.new(working_directory: base_path.dirname)
|
|
99
|
+
else
|
|
100
|
+
CustomTemplate.new(working_directory: base_path.dirname)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Check type of slide
|
|
105
|
+
def type?(t)
|
|
106
|
+
type == t
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Determine type of slide
|
|
110
|
+
def type
|
|
111
|
+
return :erb if extname? '.erb'
|
|
112
|
+
return :md if extname? '.md', '.markdown', '.mkd'
|
|
113
|
+
return :liquid if extname? '.l', '.liquid'
|
|
114
|
+
|
|
115
|
+
:custom
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Return file extension
|
|
119
|
+
def extname
|
|
120
|
+
File.extname(name)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Check if slide has given extensions
|
|
124
|
+
def extname?(*extensions)
|
|
125
|
+
extensions.any? { |e| extname == e }
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def extract_name
|
|
129
|
+
input.last
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Extract group from name
|
|
133
|
+
def extract_group
|
|
134
|
+
return nil if input.size < 2 # no group given
|
|
135
|
+
|
|
136
|
+
input.first.to_s
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Fixes bug in middleman
|
|
2
|
+
module Middleman
|
|
3
|
+
# Renderers
|
|
4
|
+
module Renderers
|
|
5
|
+
# Sass
|
|
6
|
+
module Sass
|
|
7
|
+
# Template
|
|
8
|
+
class SassPlusCSSFilenameTemplate < ::Tilt::SassTemplate
|
|
9
|
+
def evaluate(context, _)
|
|
10
|
+
@context ||= context
|
|
11
|
+
@engine = ::Sass::Engine.new(data, sass_options)
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
@engine.render
|
|
15
|
+
rescue ::Sass::SyntaxError => e
|
|
16
|
+
::Sass::SyntaxError.exception_to_css(e)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Middleman
|
|
3
|
+
module Presentation
|
|
4
|
+
# Plugin Api
|
|
5
|
+
module PluginApi
|
|
6
|
+
# Require some other plugin
|
|
7
|
+
#
|
|
8
|
+
# @param [String, Array] names
|
|
9
|
+
# The name of the plugin which should be loaded. It also supports
|
|
10
|
+
# multiple arguments or an array of plugin names.
|
|
11
|
+
#
|
|
12
|
+
# @example String
|
|
13
|
+
#
|
|
14
|
+
# require_plugin 'name1'
|
|
15
|
+
#
|
|
16
|
+
# @example Multiple Arguments
|
|
17
|
+
#
|
|
18
|
+
# require_plugin 'name1', 'name2'
|
|
19
|
+
#
|
|
20
|
+
# @example Arrays
|
|
21
|
+
#
|
|
22
|
+
# require_plugin ['name1', 'name2']
|
|
23
|
+
#
|
|
24
|
+
def require_plugin(*names)
|
|
25
|
+
application.plugins_manager.activate_plugin(names)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Add frontend component
|
|
29
|
+
#
|
|
30
|
+
# @param [Hash] component
|
|
31
|
+
# The component which should be added
|
|
32
|
+
def add_component(component)
|
|
33
|
+
Middleman::Presentation.components_manager.add FrontendComponent.new(**component)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Add helpers
|
|
37
|
+
#
|
|
38
|
+
# @example Add helpers via modules
|
|
39
|
+
#
|
|
40
|
+
# add_helpers MyModule1, MyModule2
|
|
41
|
+
#
|
|
42
|
+
# @example Add helpers via code block
|
|
43
|
+
#
|
|
44
|
+
# add_helpers do
|
|
45
|
+
# def my_helper1
|
|
46
|
+
# 'my_helper1'
|
|
47
|
+
# end
|
|
48
|
+
# end
|
|
49
|
+
def add_helpers(*m, &block)
|
|
50
|
+
Middleman::Presentation.helpers_manager.add(*m, &block)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Add assets which should be imported
|
|
54
|
+
#
|
|
55
|
+
# @param [String] path
|
|
56
|
+
# Directory where assets are stored
|
|
57
|
+
# def add_assets(path, output_paths: {}, importable_files: [], loadable_files: [], ignorable_files: [])
|
|
58
|
+
def add_assets(component)
|
|
59
|
+
Middleman::Presentation.components_manager.add AssetComponent.new(**component)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
module_function :add_component, :add_helpers, :add_assets
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Middleman
|
|
3
|
+
module Presentation
|
|
4
|
+
# Predefined slide templates directory
|
|
5
|
+
class PredefinedSlideTemplateDirectory < FeduxOrgStdlib::TemplateDirectory
|
|
6
|
+
def application_name
|
|
7
|
+
'middleman-presentation'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def fallback_template_directory
|
|
11
|
+
File.expand_path('../../../templates', __FILE__)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Middleman
|
|
3
|
+
module Presentation
|
|
4
|
+
# Container for helper methods which can be used in presentation slides
|
|
5
|
+
class PresentationHelper
|
|
6
|
+
include Comparable
|
|
7
|
+
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
attr_reader :helper_container
|
|
11
|
+
|
|
12
|
+
public
|
|
13
|
+
|
|
14
|
+
def initialize(helper_container)
|
|
15
|
+
fail TypeError, Middleman::Presentation.t('errors.invalid_helper_module') if !helper_container.is_a?(Module) && !helper_container.is_a?(Proc)
|
|
16
|
+
|
|
17
|
+
@helper_container = helper_container
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Return self as module
|
|
21
|
+
def to_module
|
|
22
|
+
if helper_container.is_a? Proc
|
|
23
|
+
mod = Module.new
|
|
24
|
+
mod.module_eval(&helper_container)
|
|
25
|
+
|
|
26
|
+
mod
|
|
27
|
+
else
|
|
28
|
+
helper_container
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Return name for container
|
|
33
|
+
def name
|
|
34
|
+
if helper_container.respond_to?(:name) && !helper_container.name.blank?
|
|
35
|
+
helper_container.name
|
|
36
|
+
else
|
|
37
|
+
'<Anonymous>'
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Type of helper
|
|
42
|
+
def type
|
|
43
|
+
if helper_container.is_a? Module
|
|
44
|
+
:MODULE
|
|
45
|
+
else
|
|
46
|
+
:PROC
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Return all available methods
|
|
51
|
+
def available_methods
|
|
52
|
+
instance_methods = to_module.instance_methods - Module.methods
|
|
53
|
+
klass_methods = (to_module.methods - Module.methods).map { |m| "self.#{m}" }
|
|
54
|
+
|
|
55
|
+
instance_methods + klass_methods
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Parse an array
|
|
59
|
+
def self.parse(*modules)
|
|
60
|
+
modules.flatten.map { |m| new(m) }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @private
|
|
64
|
+
def <=>(other)
|
|
65
|
+
name <=> other.name
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Middleman
|
|
3
|
+
module Presentation
|
|
4
|
+
# Included if class can be compared by name
|
|
5
|
+
module ComparableByName
|
|
6
|
+
include Comparable
|
|
7
|
+
|
|
8
|
+
# @private
|
|
9
|
+
def hash
|
|
10
|
+
name.hash
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @private
|
|
14
|
+
def eql?(other)
|
|
15
|
+
name.eql? other.name
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @private
|
|
19
|
+
def <=>(other)
|
|
20
|
+
name <=> other.name
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|