bridgetown-core 1.1.0 → 1.2.0.beta1
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 +4 -4
- data/bin/bridgetown +1 -3
- data/bridgetown-core.gemspec +7 -6
- data/lib/bridgetown-core/collection.rb +5 -2
- data/lib/bridgetown-core/commands/base.rb +1 -1
- data/lib/bridgetown-core/commands/build.rb +18 -5
- data/lib/bridgetown-core/commands/clean.rb +1 -1
- data/lib/bridgetown-core/commands/concerns/actions.rb +2 -4
- data/lib/bridgetown-core/commands/concerns/configuration_overridable.rb +7 -8
- data/lib/bridgetown-core/commands/console.rb +20 -1
- data/lib/bridgetown-core/commands/esbuild/esbuild.config.js +5 -0
- data/lib/bridgetown-core/commands/esbuild/esbuild.defaults.js.erb +8 -7
- data/lib/bridgetown-core/commands/esbuild/migrate-from-webpack.rb +1 -1
- data/lib/bridgetown-core/commands/plugins.rb +46 -32
- data/lib/bridgetown-core/commands/serve.rb +1 -2
- data/lib/bridgetown-core/commands/start.rb +0 -8
- data/lib/bridgetown-core/component.rb +50 -0
- data/lib/bridgetown-core/concerns/site/configurable.rb +22 -18
- data/lib/bridgetown-core/concerns/site/localizable.rb +2 -6
- data/lib/bridgetown-core/concerns/site/processable.rb +0 -1
- data/lib/bridgetown-core/concerns/site/ssr.rb +0 -1
- data/lib/bridgetown-core/concerns/transformable.rb +5 -2
- data/lib/bridgetown-core/configuration/configuration_dsl.rb +146 -0
- data/lib/bridgetown-core/configuration.rb +90 -15
- data/lib/bridgetown-core/configurations/gh-pages/gh-pages.yml +3 -1
- data/lib/bridgetown-core/configurations/lit/esbuild-plugins.js +5 -2
- data/lib/bridgetown-core/configurations/minitesting.rb +1 -1
- data/lib/bridgetown-core/converter.rb +8 -0
- data/lib/bridgetown-core/converters/identity.rb +2 -0
- data/lib/bridgetown-core/converters/liquid_templates.rb +1 -0
- data/lib/bridgetown-core/converters/markdown/kramdown_parser.rb +1 -1
- data/lib/bridgetown-core/converters/markdown.rb +2 -0
- data/lib/bridgetown-core/current.rb +19 -5
- data/lib/bridgetown-core/deprecator.rb +4 -37
- data/lib/bridgetown-core/filters.rb +1 -3
- data/lib/bridgetown-core/generated_page.rb +5 -0
- data/lib/bridgetown-core/helpers.rb +119 -8
- data/lib/bridgetown-core/hooks.rb +1 -0
- data/lib/bridgetown-core/kramdown/parser/gfm.rb +1 -1
- data/lib/bridgetown-core/layout.rb +1 -1
- data/lib/bridgetown-core/model/base.rb +11 -12
- data/lib/bridgetown-core/model/builder_origin.rb +1 -1
- data/lib/bridgetown-core/model/origin.rb +5 -1
- data/lib/bridgetown-core/model/plugin_origin.rb +1 -1
- data/lib/bridgetown-core/model/repo_origin.rb +7 -7
- data/lib/bridgetown-core/plugin.rb +2 -6
- data/lib/bridgetown-core/plugin_manager.rb +120 -41
- data/lib/bridgetown-core/rack/boot.rb +3 -7
- data/lib/bridgetown-core/rack/logger.rb +1 -0
- data/lib/bridgetown-core/rack/roda.rb +39 -45
- data/lib/bridgetown-core/rack/routes.rb +2 -6
- data/lib/bridgetown-core/rack/static_indexes.rb +1 -2
- data/lib/bridgetown-core/reader.rb +39 -50
- data/lib/bridgetown-core/readers/layout_reader.rb +1 -1
- data/lib/bridgetown-core/resource/base.rb +17 -1
- data/lib/bridgetown-core/ruby_template_view.rb +12 -8
- data/lib/bridgetown-core/site.rb +10 -3
- data/lib/bridgetown-core/slot.rb +41 -0
- data/lib/bridgetown-core/tasks/bridgetown_tasks.rake +23 -9
- data/lib/bridgetown-core/utils/ansi.rb +1 -1
- data/lib/bridgetown-core/utils/aux.rb +7 -6
- data/lib/bridgetown-core/utils/initializers.rb +45 -0
- data/lib/bridgetown-core/utils/loaders_manager.rb +2 -2
- data/lib/bridgetown-core/utils/require_gems.rb +11 -35
- data/lib/bridgetown-core/utils/ruby_front_matter.rb +2 -3
- data/lib/bridgetown-core/{converters/smartypants.rb → utils/smarty_pants_converter.rb} +5 -24
- data/lib/bridgetown-core/utils.rb +1 -0
- data/lib/bridgetown-core/version.rb +2 -2
- data/lib/bridgetown-core/watcher.rb +1 -8
- data/lib/bridgetown-core.rb +89 -6
- data/lib/roda/plugins/bridgetown_boot.rb +25 -0
- data/lib/roda/plugins/bridgetown_ssr.rb +23 -0
- data/lib/roda/plugins/initializers.rb +17 -0
- data/lib/site_template/.gitignore +1 -0
- data/lib/site_template/Gemfile.erb +1 -1
- data/lib/site_template/TEMPLATES/erb/_layouts/default.erb +2 -2
- data/lib/site_template/TEMPLATES/erb/_layouts/page.erb +1 -1
- data/lib/site_template/TEMPLATES/erb/_layouts/post.erb +1 -1
- data/lib/site_template/TEMPLATES/liquid/_layouts/default.liquid +2 -2
- data/lib/site_template/TEMPLATES/liquid/_layouts/page.liquid +1 -1
- data/lib/site_template/TEMPLATES/liquid/_layouts/post.liquid +1 -1
- data/lib/site_template/TEMPLATES/serbea/_layouts/default.serb +2 -2
- data/lib/site_template/TEMPLATES/serbea/_layouts/page.serb +1 -1
- data/lib/site_template/TEMPLATES/serbea/_layouts/post.serb +1 -1
- data/lib/site_template/config/initializers.rb +43 -0
- data/lib/site_template/package.json.erb +1 -1
- data/lib/site_template/server/roda_app.rb +2 -8
- metadata +17 -9
|
@@ -6,12 +6,15 @@ module Bridgetown
|
|
|
6
6
|
# (requires a `converter` method to be present on the including class)
|
|
7
7
|
#
|
|
8
8
|
# @param document [Bridgetown::GeneratedPage, Bridgetown::Resource::Base]
|
|
9
|
+
# @param alternate_content [String, nil] Pass in content if you don't want to use document's
|
|
9
10
|
# @return String
|
|
10
11
|
# @yieldparam converter [Bridgetown::Converter]
|
|
11
12
|
# @yieldparam index [Integer] index of the conversion step
|
|
12
13
|
# @yieldparam output [String]
|
|
13
|
-
def transform_content(document)
|
|
14
|
-
converters.each_with_index.inject(
|
|
14
|
+
def transform_content(document, alternate_content: nil)
|
|
15
|
+
converters.each_with_index.inject(
|
|
16
|
+
(alternate_content || document.content).to_s
|
|
17
|
+
) do |content, (converter, index)|
|
|
15
18
|
output = if converter.method(:convert).arity == 1
|
|
16
19
|
converter.convert content
|
|
17
20
|
else
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bridgetown
|
|
4
|
+
class Configuration
|
|
5
|
+
class ConfigurationDSL < Bridgetown::Utils::RubyFrontMatter
|
|
6
|
+
attr_reader :context
|
|
7
|
+
|
|
8
|
+
# @yieldself [ConfigurationDSL]
|
|
9
|
+
def init(name, require_gem: true, require_initializer: true, **kwargs, &block) # rubocop:todo Metrics
|
|
10
|
+
return if @scope.initializers.key?(name.to_sym) &&
|
|
11
|
+
@scope.initializers[name.to_sym].completed
|
|
12
|
+
|
|
13
|
+
initializer = _setup_initializer(
|
|
14
|
+
name: name, require_gem: require_gem, require_initializer: require_initializer
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
return unless initializer.nil? || initializer.completed == false
|
|
18
|
+
|
|
19
|
+
set :init_params do
|
|
20
|
+
block ? set(name, &block) : set(name, kwargs)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if initializer.nil?
|
|
24
|
+
Bridgetown.logger.warn("Initializing:",
|
|
25
|
+
"The `#{name}' initializer could not be found")
|
|
26
|
+
return
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Bridgetown.logger.debug "Initializing:", name
|
|
30
|
+
@scope.initializers[name.to_sym].block.(self, **@scope.init_params[name].symbolize_keys)
|
|
31
|
+
initializer.completed = true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def only(*context, &block)
|
|
35
|
+
return unless context.any? { _1 == @context }
|
|
36
|
+
|
|
37
|
+
instance_exec(&block)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def except(*context, &block)
|
|
41
|
+
return if context.any? { _1 == @context }
|
|
42
|
+
|
|
43
|
+
instance_exec(&block)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def hook(
|
|
47
|
+
owner,
|
|
48
|
+
event,
|
|
49
|
+
priority: Bridgetown::Hooks::DEFAULT_PRIORITY,
|
|
50
|
+
&block
|
|
51
|
+
)
|
|
52
|
+
Bridgetown::Hooks.register_one(owner, event, priority: priority, &block)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def source_manifest(**kwargs)
|
|
56
|
+
@scope.source_manifests << SourceManifest.new(**kwargs)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def builder(klass = nil, &block)
|
|
60
|
+
return klass.register if klass.is_a?(Bridgetown::Builder)
|
|
61
|
+
|
|
62
|
+
unless klass.is_a?(Symbol)
|
|
63
|
+
raise "You must supply a constant symbol to register an inline builder"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
Object.const_set(
|
|
67
|
+
klass, Class.new(Bridgetown::Builder, &block).tap(&:register)
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def roda(&block)
|
|
72
|
+
@scope.roda_initializers << block
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def method_missing(key, *value, &block) # rubocop:disable Style/MissingRespondToMissing
|
|
76
|
+
return get(key) if value.length.zero? && block.nil?
|
|
77
|
+
|
|
78
|
+
set(key, value[0], &block)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def get(key)
|
|
82
|
+
unless @data.key?(key)
|
|
83
|
+
Bridgetown.logger.debug("Initializing:", "Uh oh, missing key `#{key}' in configuration")
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
super
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def set(key, value = nil, &block)
|
|
90
|
+
# Handle nested data within a block
|
|
91
|
+
if block
|
|
92
|
+
value = self.class.new(scope: @scope).tap do |fm|
|
|
93
|
+
fm.instance_exec(&block)
|
|
94
|
+
end.to_h
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
key = key.to_s.delete_suffix("=") if key.to_s.ends_with?("=")
|
|
98
|
+
|
|
99
|
+
@data[key] = if @data[key].is_a?(Hash) && value.is_a?(Hash)
|
|
100
|
+
Bridgetown::Utils.deep_merge_hashes(@data[key], value)
|
|
101
|
+
else
|
|
102
|
+
value
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def reflect(name, require_gem: true, require_initializer: true)
|
|
107
|
+
initializer = _setup_initializer(
|
|
108
|
+
name: name, require_gem: require_gem, require_initializer: require_initializer
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
if initializer.nil?
|
|
112
|
+
Bridgetown.logger.info("Reflection:",
|
|
113
|
+
"The `#{name}' initializer could not be found")
|
|
114
|
+
return
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
Bridgetown.logger.info(
|
|
118
|
+
"Reflection:",
|
|
119
|
+
"The #{name.to_s.yellow} initializer accepts the following options:"
|
|
120
|
+
)
|
|
121
|
+
initializer.block.parameters.each do |param|
|
|
122
|
+
next if param[0] == :opt
|
|
123
|
+
|
|
124
|
+
Bridgetown.logger.info("",
|
|
125
|
+
"* #{param[1].to_s.cyan}#{" (required)" if param[0] == :keyreq}")
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @return [Bridgetown::Configuration::Initializer]
|
|
130
|
+
def _setup_initializer(name:, require_gem:, require_initializer:)
|
|
131
|
+
Bridgetown::PluginManager.require_gem(name) if require_gem && !_in_require_denylist?(name)
|
|
132
|
+
|
|
133
|
+
if require_initializer
|
|
134
|
+
init_file_name = File.join(@scope.root_dir, "config", "#{name}.rb")
|
|
135
|
+
require(init_file_name) if File.exist?(init_file_name)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
@scope.initializers[name.to_sym]
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def _in_require_denylist?(name)
|
|
142
|
+
REQUIRE_DENYLIST.include?(name.to_sym)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -1,20 +1,35 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Bridgetown
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# @todo refactor this whole object! Already had to fix obscure
|
|
7
|
-
# bugs just making minor changes, and all the indirection is
|
|
8
|
-
# quite hard to decipher. -JW
|
|
4
|
+
# The primary configuration object for a Bridgetown project
|
|
9
5
|
class Configuration < HashWithDotAccess::Hash
|
|
10
|
-
|
|
6
|
+
REQUIRE_DENYLIST = %i(parse_routes ssr) # rubocop:disable Style/MutableConstant
|
|
7
|
+
|
|
8
|
+
Initializer = Struct.new(:name, :block, :completed, keyword_init: true) do
|
|
9
|
+
def to_s
|
|
10
|
+
"#{name} (Initializer)"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
SourceManifest = Struct.new(:origin, :components, :content, :layouts, keyword_init: true)
|
|
15
|
+
|
|
16
|
+
Preflight = Struct.new(:source_manifests, :initializers, keyword_init: true) do
|
|
17
|
+
def initialize(*)
|
|
18
|
+
super
|
|
19
|
+
self.source_manifests ||= Set.new
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
require_relative "configuration/configuration_dsl"
|
|
24
|
+
|
|
25
|
+
# Default options. Overridden by values in bridgetown.config.yml or initializers.
|
|
11
26
|
# Strings rather than symbols are used for compatibility with YAML.
|
|
12
27
|
DEFAULTS = {
|
|
13
28
|
# Where things are
|
|
14
29
|
"root_dir" => Dir.pwd,
|
|
15
30
|
"plugins_dir" => "plugins",
|
|
16
|
-
"source" =>
|
|
17
|
-
"destination" =>
|
|
31
|
+
"source" => "src",
|
|
32
|
+
"destination" => "output",
|
|
18
33
|
"collections_dir" => "",
|
|
19
34
|
"cache_dir" => ".bridgetown-cache",
|
|
20
35
|
"layouts_dir" => "_layouts",
|
|
@@ -87,12 +102,15 @@ module Bridgetown
|
|
|
87
102
|
},
|
|
88
103
|
}.each_with_object(Configuration.new) { |(k, v), hsh| hsh[k] = v.freeze }.freeze
|
|
89
104
|
|
|
90
|
-
#
|
|
91
|
-
# need to check for _config.EXT as a backward-compatibility nod to our
|
|
92
|
-
# progenitor
|
|
105
|
+
# TODO: Deprecated. Remove support for _config as well as toml in the next release.
|
|
93
106
|
CONFIG_FILE_PREFIXES = %w(bridgetown.config _config).freeze
|
|
94
107
|
CONFIG_FILE_EXTS = %w(yml yaml toml).freeze
|
|
95
108
|
|
|
109
|
+
# @return [Hash<Symbol, Initializer>]
|
|
110
|
+
attr_accessor :initializers
|
|
111
|
+
|
|
112
|
+
attr_writer :source_manifests, :roda_initializers
|
|
113
|
+
|
|
96
114
|
class << self
|
|
97
115
|
# Static: Produce a Configuration ready for use in a Site.
|
|
98
116
|
# It takes the input, fills in the defaults where values do not exist.
|
|
@@ -101,7 +119,7 @@ module Bridgetown
|
|
|
101
119
|
#
|
|
102
120
|
# Returns a Configuration filled with defaults.
|
|
103
121
|
def from(user_config, starting_defaults = DEFAULTS)
|
|
104
|
-
Utils.deep_merge_hashes(starting_defaults.deep_dup, Configuration
|
|
122
|
+
Utils.deep_merge_hashes(starting_defaults.deep_dup, Configuration.new(user_config))
|
|
105
123
|
.merge_environment_specific_options!
|
|
106
124
|
.setup_load_paths!
|
|
107
125
|
.setup_locales
|
|
@@ -111,6 +129,43 @@ module Bridgetown
|
|
|
111
129
|
end
|
|
112
130
|
end
|
|
113
131
|
|
|
132
|
+
def run_initializers!(context:)
|
|
133
|
+
initializers_file = File.join(root_dir, "config", "initializers.rb")
|
|
134
|
+
return unless File.file?(initializers_file)
|
|
135
|
+
|
|
136
|
+
require initializers_file
|
|
137
|
+
|
|
138
|
+
return unless initializers # no initializers have been set up
|
|
139
|
+
|
|
140
|
+
init_init = initializers[:init]
|
|
141
|
+
return unless init_init && !init_init.completed
|
|
142
|
+
|
|
143
|
+
Bridgetown.logger.debug "Initializing:", "Running initializers with `#{context}' context in:"
|
|
144
|
+
Bridgetown.logger.debug "", initializers_file
|
|
145
|
+
self.init_params = {}
|
|
146
|
+
dsl = ConfigurationDSL.new(scope: self, data: self)
|
|
147
|
+
dsl.instance_variable_set(:@context, context)
|
|
148
|
+
dsl.instance_exec(dsl, &init_init.block)
|
|
149
|
+
|
|
150
|
+
self
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# @return [Set<SourceManifest>]
|
|
154
|
+
def source_manifests
|
|
155
|
+
@source_manifests ||= Set.new
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# @return [Array<Proc>]
|
|
159
|
+
def roda_initializers
|
|
160
|
+
@roda_initializers ||= []
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def initialize_roda_app(app)
|
|
164
|
+
roda_initializers.each do |initializer|
|
|
165
|
+
initializer.(app)
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
114
169
|
def get_config_value_with_override(config_key, override)
|
|
115
170
|
override[config_key] || self[config_key] || DEFAULTS[config_key]
|
|
116
171
|
end
|
|
@@ -143,16 +198,32 @@ module Bridgetown
|
|
|
143
198
|
end
|
|
144
199
|
alias_method :verbose?, :verbose
|
|
145
200
|
|
|
146
|
-
def safe_load_file(filename)
|
|
201
|
+
def safe_load_file(filename) # rubocop:todo Metrics
|
|
147
202
|
case File.extname(filename)
|
|
148
203
|
when %r!\.toml!i
|
|
204
|
+
Deprecator.deprecation_message(
|
|
205
|
+
"TOML configurations will no longer be supported in the next version of Bridgetown." \
|
|
206
|
+
"Use initializers or a .yaml config instead."
|
|
207
|
+
)
|
|
149
208
|
Bridgetown::Utils::RequireGems.require_with_graceful_fail("tomlrb") unless defined?(Tomlrb)
|
|
150
209
|
Tomlrb.load_file(filename)
|
|
151
210
|
when %r!\.ya?ml!i
|
|
211
|
+
if File.basename(filename, ".*") == "_config"
|
|
212
|
+
Deprecator.deprecation_message(
|
|
213
|
+
"YAML configurations named `_config.y(a)ml' will no longer be supported in the next " \
|
|
214
|
+
"version of Bridgetown. Rename to `bridgetown.config.yml' instead."
|
|
215
|
+
)
|
|
216
|
+
end
|
|
217
|
+
if File.extname(filename) == ".yaml"
|
|
218
|
+
Deprecator.deprecation_message(
|
|
219
|
+
"YAML configurations ending in `.yaml' will no longer be supported in the next " \
|
|
220
|
+
"version of Bridgetown. Rename to use `.yml' extension instead."
|
|
221
|
+
)
|
|
222
|
+
end
|
|
152
223
|
YAMLParser.load_file(filename) || {}
|
|
153
224
|
else
|
|
154
225
|
raise ArgumentError,
|
|
155
|
-
"No parser for '#{filename}' is available. Use a .y(a)ml
|
|
226
|
+
"No parser for '#{filename}' is available. Use a .y(a)ml file instead."
|
|
156
227
|
end
|
|
157
228
|
rescue Psych::DisallowedClass => e
|
|
158
229
|
raise "Unable to parse `#{File.basename(filename)}'. #{e.message}"
|
|
@@ -252,7 +323,11 @@ module Bridgetown
|
|
|
252
323
|
self
|
|
253
324
|
end
|
|
254
325
|
|
|
255
|
-
def setup_load_paths!
|
|
326
|
+
def setup_load_paths! # rubocop:todo Metrics
|
|
327
|
+
self[:root_dir] = File.expand_path(self[:root_dir])
|
|
328
|
+
self[:source] = File.expand_path(self[:source], self[:root_dir])
|
|
329
|
+
self[:destination] = File.expand_path(self[:destination], self[:root_dir])
|
|
330
|
+
|
|
256
331
|
if self[:plugins_use_zeitwerk]
|
|
257
332
|
autoload_paths.unshift({
|
|
258
333
|
path: self[:plugins_dir],
|
|
@@ -5,14 +5,17 @@
|
|
|
5
5
|
// This plugin will let you import `.lit.css` files as sidecar stylesheets.
|
|
6
6
|
// Read https://edge.bridgetownrb.com/docs/components/lit#sidecar-css-files for documentation.
|
|
7
7
|
const { litCssPlugin } = require("esbuild-plugin-lit-css")
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const postcssrc = require("postcss-load-config")
|
|
9
|
+
const postcss = require("postcss")
|
|
10
10
|
|
|
11
11
|
module.exports = {
|
|
12
12
|
plugins: [
|
|
13
13
|
litCssPlugin({
|
|
14
14
|
filter: /\.lit\.css$/,
|
|
15
15
|
transform: async (css, { filePath }) => {
|
|
16
|
+
const postCssConfig = await postcssrc()
|
|
17
|
+
const postCssProcessor = postcss([...postCssConfig.plugins])
|
|
18
|
+
|
|
16
19
|
const results = await postCssProcessor.process(css, { ...postCssConfig.options, from: filePath })
|
|
17
20
|
return results.css
|
|
18
21
|
}
|
|
@@ -14,6 +14,14 @@ module Bridgetown
|
|
|
14
14
|
self.extname_list ||= []
|
|
15
15
|
self.extname_list += extnames.map { |e| ".#{e.to_s.downcase}" }
|
|
16
16
|
end
|
|
17
|
+
|
|
18
|
+
def supports_slots?
|
|
19
|
+
@support_slots == true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def support_slots(bool = true) # rubocop:disable Style/OptionalBooleanParameter
|
|
23
|
+
@support_slots = bool == true
|
|
24
|
+
end
|
|
17
25
|
end
|
|
18
26
|
|
|
19
27
|
# Initialize the converter.
|
|
@@ -89,6 +89,7 @@ module Bridgetown
|
|
|
89
89
|
payload["paginator"] = document.respond_to?(:paginator) ? document.paginator.to_liquid : nil
|
|
90
90
|
payload["layout"] = @layout ? @layout.to_liquid.merge({ data: @layout.data }) : {}
|
|
91
91
|
payload["content"] = content
|
|
92
|
+
payload["data"] = payload["page"].data
|
|
92
93
|
end
|
|
93
94
|
|
|
94
95
|
def liquid_context
|
|
@@ -2,13 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
module Bridgetown
|
|
4
4
|
class Current < ActiveSupport::CurrentAttributes
|
|
5
|
-
# @!method self.site
|
|
6
|
-
# @return [Bridgetown::Site]
|
|
7
|
-
|
|
8
|
-
attribute :site
|
|
9
|
-
|
|
10
5
|
# @!method self.preloaded_configuration
|
|
11
6
|
# @return [Bridgetown::Configuration]
|
|
12
7
|
attribute :preloaded_configuration
|
|
8
|
+
|
|
9
|
+
# @return [Bridgetown::Site, nil]
|
|
10
|
+
def self.site
|
|
11
|
+
sites[:main]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.site=(new_site)
|
|
15
|
+
sites[:main] = new_site
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @!method self.sites
|
|
19
|
+
# @return [Hash<Symbol, Bridgetown::Site>]
|
|
20
|
+
|
|
21
|
+
attribute :sites
|
|
22
|
+
|
|
23
|
+
def initialize
|
|
24
|
+
super
|
|
25
|
+
@attributes[:sites] = {}
|
|
26
|
+
end
|
|
13
27
|
end
|
|
14
28
|
end
|
|
@@ -2,45 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Bridgetown
|
|
4
4
|
module Deprecator
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def process(args)
|
|
8
|
-
arg_is_present? args, "--server", "The --server command has been replaced by the \
|
|
9
|
-
'serve' subcommand."
|
|
10
|
-
arg_is_present? args, "--serve", "The --serve command has been replaced by the \
|
|
11
|
-
'serve' subcommand."
|
|
12
|
-
arg_is_present? args, "--no-server", "To build Bridgetown without launching a server, \
|
|
13
|
-
use the 'build' subcommand."
|
|
14
|
-
arg_is_present? args, "--auto", "The switch '--auto' has been replaced with \
|
|
15
|
-
'--watch'."
|
|
16
|
-
arg_is_present? args, "--no-auto", "To disable auto-replication, simply leave off \
|
|
17
|
-
the '--watch' switch."
|
|
18
|
-
arg_is_present? args, "--url", "The 'url' setting can only be set in your \
|
|
19
|
-
config files."
|
|
20
|
-
no_subcommand(args)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def no_subcommand(args)
|
|
24
|
-
unless args.empty? ||
|
|
25
|
-
args.first !~ %r(!/^--/!) || %w(--help --version).include?(args.first)
|
|
26
|
-
deprecation_message "Bridgetown now uses subcommands instead of just switches. \
|
|
27
|
-
Run `bridgetown help` to find out more."
|
|
28
|
-
abort
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def arg_is_present?(args, deprecated_argument, message)
|
|
33
|
-
deprecation_message(message) if args.include?(deprecated_argument)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def deprecation_message(message)
|
|
5
|
+
def self.deprecation_message(message)
|
|
37
6
|
Bridgetown.logger.warn "Deprecation:", message
|
|
38
|
-
end
|
|
39
7
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
'type: #{current}'."
|
|
8
|
+
caller_locations[0..1].each_with_index do |backtrace_line, index|
|
|
9
|
+
Bridgetown.logger.debug "#{index + 1}:", backtrace_line
|
|
10
|
+
end
|
|
44
11
|
end
|
|
45
12
|
end
|
|
46
13
|
end
|
|
@@ -26,9 +26,7 @@ module Bridgetown
|
|
|
26
26
|
#
|
|
27
27
|
# Returns the smart-quotified String.
|
|
28
28
|
def smartify(input)
|
|
29
|
-
@context.registers[:site].
|
|
30
|
-
Bridgetown::Converters::SmartyPants
|
|
31
|
-
).convert(input.to_s)
|
|
29
|
+
Utils::SmartyPantsConverter.new(@context.registers[:site].config).convert(input.to_s)
|
|
32
30
|
end
|
|
33
31
|
|
|
34
32
|
# Slugify a filename or title.
|
|
@@ -65,6 +65,11 @@ module Bridgetown
|
|
|
65
65
|
data[property]
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
+
# @return [Array<Bridgetown::Slot>]
|
|
69
|
+
def slots
|
|
70
|
+
@slots ||= []
|
|
71
|
+
end
|
|
72
|
+
|
|
68
73
|
# The generated directory into which the page will be placed
|
|
69
74
|
# upon generation. This is derived from the permalink or, if
|
|
70
75
|
# permalink is absent, will be '/'
|