middleman-presentation-core 0.16.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- 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
|