middleman-core 3.3.2 → 3.3.3
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/features/helpers_select_tag.feature +6 -8
- data/lib/middleman-core.rb +1 -2
- data/lib/middleman-core/application.rb +10 -9
- data/lib/middleman-core/cli.rb +9 -13
- data/lib/middleman-core/cli/build.rb +26 -27
- data/lib/middleman-core/cli/bundler.rb +6 -7
- data/lib/middleman-core/cli/console.rb +10 -13
- data/lib/middleman-core/cli/extension.rb +2 -4
- data/lib/middleman-core/cli/init.rb +27 -28
- data/lib/middleman-core/cli/server.rb +43 -44
- data/lib/middleman-core/configuration.rb +13 -11
- data/lib/middleman-core/core_extensions/data.rb +21 -29
- data/lib/middleman-core/core_extensions/extensions.rb +8 -8
- data/lib/middleman-core/core_extensions/external_helpers.rb +3 -5
- data/lib/middleman-core/core_extensions/file_watcher.rb +7 -11
- data/lib/middleman-core/core_extensions/front_matter.rb +5 -6
- data/lib/middleman-core/core_extensions/rendering.rb +40 -30
- data/lib/middleman-core/core_extensions/request.rb +16 -19
- data/lib/middleman-core/core_extensions/routing.rb +37 -36
- data/lib/middleman-core/core_extensions/show_exceptions.rb +1 -5
- data/lib/middleman-core/extension.rb +14 -16
- data/lib/middleman-core/extensions.rb +4 -6
- data/lib/middleman-core/load_paths.rb +3 -6
- data/lib/middleman-core/logger.rb +1 -3
- data/lib/middleman-core/meta_pages.rb +11 -11
- data/lib/middleman-core/meta_pages/config_setting.rb +4 -4
- data/lib/middleman-core/meta_pages/sitemap_resource.rb +2 -2
- data/lib/middleman-core/meta_pages/sitemap_tree.rb +4 -4
- data/lib/middleman-core/preview_server.rb +12 -11
- data/lib/middleman-core/profiling.rb +6 -8
- data/lib/middleman-core/renderers/asciidoc.rb +12 -13
- data/lib/middleman-core/renderers/coffee_script.rb +2 -4
- data/lib/middleman-core/renderers/erb.rb +3 -4
- data/lib/middleman-core/renderers/haml.rb +2 -4
- data/lib/middleman-core/renderers/kramdown.rb +3 -4
- data/lib/middleman-core/renderers/less.rb +3 -9
- data/lib/middleman-core/renderers/liquid.rb +4 -8
- data/lib/middleman-core/renderers/markdown.rb +7 -11
- data/lib/middleman-core/renderers/redcarpet.rb +14 -16
- data/lib/middleman-core/renderers/sass.rb +36 -15
- data/lib/middleman-core/renderers/slim.rb +7 -10
- data/lib/middleman-core/renderers/stylus.rb +2 -6
- data/lib/middleman-core/sitemap.rb +6 -13
- data/lib/middleman-core/sitemap/extensions/ignores.rb +4 -10
- data/lib/middleman-core/sitemap/extensions/on_disk.rb +3 -7
- data/lib/middleman-core/sitemap/extensions/proxies.rb +7 -12
- data/lib/middleman-core/sitemap/extensions/redirects.rb +7 -15
- data/lib/middleman-core/sitemap/extensions/request_endpoints.rb +7 -15
- data/lib/middleman-core/sitemap/extensions/traversal.rb +4 -7
- data/lib/middleman-core/sitemap/queryable.rb +22 -27
- data/lib/middleman-core/sitemap/resource.rb +13 -25
- data/lib/middleman-core/sitemap/store.rb +11 -15
- data/lib/middleman-core/templates.rb +9 -12
- data/lib/middleman-core/templates/default.rb +6 -7
- data/lib/middleman-core/templates/empty.rb +0 -1
- data/lib/middleman-core/templates/extension/Gemfile +1 -1
- data/lib/middleman-core/templates/extension/Rakefile +2 -2
- data/lib/middleman-core/templates/extension/lib/lib.rb +0 -1
- data/lib/middleman-core/templates/html5.rb +6 -7
- data/lib/middleman-core/templates/local.rb +1 -2
- data/lib/middleman-core/templates/mobile.rb +3 -4
- data/lib/middleman-core/templates/shared/config.ru +1 -1
- data/lib/middleman-core/util.rb +5 -6
- data/lib/middleman-core/version.rb +1 -1
- data/lib/middleman-more/core_extensions/compass.rb +0 -1
- data/lib/middleman-more/core_extensions/default_helpers.rb +25 -16
- data/lib/middleman-more/core_extensions/i18n.rb +24 -23
- data/lib/middleman-more/extensions/asset_hash.rb +4 -6
- data/lib/middleman-more/extensions/asset_host.rb +1 -1
- data/lib/middleman-more/extensions/automatic_alt_tags.rb +2 -3
- data/lib/middleman-more/extensions/automatic_image_sizes.rb +4 -5
- data/lib/middleman-more/extensions/cache_buster.rb +0 -1
- data/lib/middleman-more/extensions/gzip.rb +1 -1
- data/lib/middleman-more/extensions/lorem.rb +8 -8
- data/lib/middleman-more/extensions/minify_css.rb +9 -8
- data/lib/middleman-more/extensions/minify_javascript.rb +5 -6
- data/lib/middleman-more/extensions/relative_assets.rb +0 -1
- data/lib/middleman-more/templates/smacss.rb +6 -7
- data/middleman-core.gemspec +1 -1
- metadata +5 -5
|
@@ -9,10 +9,8 @@ require 'active_support/json'
|
|
|
9
9
|
|
|
10
10
|
# Extensions namespace
|
|
11
11
|
module Middleman::CoreExtensions
|
|
12
|
-
|
|
13
12
|
class FrontMatter < ::Middleman::Extension
|
|
14
|
-
|
|
15
|
-
YAML_ERRORS = [ StandardError ]
|
|
13
|
+
YAML_ERRORS = [StandardError]
|
|
16
14
|
|
|
17
15
|
# https://github.com/tenderlove/psych/issues/23
|
|
18
16
|
if defined?(Psych) && defined?(Psych::SyntaxError)
|
|
@@ -45,7 +43,7 @@ module Middleman::CoreExtensions
|
|
|
45
43
|
data[opt] = fmdata[opt] unless fmdata[opt].nil?
|
|
46
44
|
end
|
|
47
45
|
|
|
48
|
-
{ :
|
|
46
|
+
{ options: data, page: ::Middleman::Util.recursively_enhance(fmdata).freeze }
|
|
49
47
|
end
|
|
50
48
|
end
|
|
51
49
|
|
|
@@ -115,7 +113,8 @@ module Middleman::CoreExtensions
|
|
|
115
113
|
@cache.delete(path)
|
|
116
114
|
end
|
|
117
115
|
|
|
118
|
-
|
|
116
|
+
private
|
|
117
|
+
|
|
119
118
|
# Parse YAML frontmatter out of a string
|
|
120
119
|
# @param [String] content
|
|
121
120
|
# @return [Array<Hash, String>]
|
|
@@ -147,7 +146,7 @@ module Middleman::CoreExtensions
|
|
|
147
146
|
content = content.sub(json_regex, '')
|
|
148
147
|
|
|
149
148
|
begin
|
|
150
|
-
json = ($1
|
|
149
|
+
json = ($1 + $2).sub(';;;', '{').sub(';;;', '}')
|
|
151
150
|
data = ActiveSupport::JSON.decode(json).symbolize_keys
|
|
152
151
|
rescue => e
|
|
153
152
|
app.logger.error "JSON Exception parsing #{full_path}: #{e.message}"
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
# Shutup Tilt Warnings
|
|
2
2
|
# @private
|
|
3
3
|
class Tilt::Template
|
|
4
|
-
def warn(*
|
|
5
|
-
# Kernel.warn(*args)
|
|
4
|
+
def warn(*)
|
|
6
5
|
end
|
|
7
6
|
end
|
|
8
7
|
|
|
9
8
|
# Rendering extension
|
|
9
|
+
# rubocop:disable UnderscorePrefixedVariableName
|
|
10
10
|
module Middleman
|
|
11
11
|
module CoreExtensions
|
|
12
12
|
module Rendering
|
|
13
|
-
|
|
14
13
|
# Setup extension
|
|
15
14
|
class << self
|
|
16
|
-
|
|
17
15
|
# Once registered
|
|
18
16
|
def registered(app)
|
|
19
17
|
# Include methods
|
|
@@ -93,7 +91,7 @@ module Middleman
|
|
|
93
91
|
|
|
94
92
|
# Clean up missing Tilt exts
|
|
95
93
|
app.after_configuration do
|
|
96
|
-
Tilt.mappings.each do |key,
|
|
94
|
+
Tilt.mappings.each do |key, _|
|
|
97
95
|
begin
|
|
98
96
|
Tilt[".#{key}"]
|
|
99
97
|
rescue LoadError, NameError
|
|
@@ -103,7 +101,7 @@ module Middleman
|
|
|
103
101
|
end
|
|
104
102
|
end
|
|
105
103
|
|
|
106
|
-
|
|
104
|
+
alias_method :included, :registered
|
|
107
105
|
end
|
|
108
106
|
|
|
109
107
|
# Custom error class for handling
|
|
@@ -112,7 +110,6 @@ module Middleman
|
|
|
112
110
|
|
|
113
111
|
# Rendering instance methods
|
|
114
112
|
module InstanceMethods
|
|
115
|
-
|
|
116
113
|
# Add or overwrite a default template extension
|
|
117
114
|
#
|
|
118
115
|
# @param [Hash] extension_map
|
|
@@ -140,13 +137,14 @@ module Middleman
|
|
|
140
137
|
|
|
141
138
|
# Use a dup of self as a context so that instance variables set within
|
|
142
139
|
# the template don't persist for other templates.
|
|
143
|
-
context =
|
|
140
|
+
context = dup
|
|
144
141
|
blocks.each do |block|
|
|
145
142
|
context.instance_eval(&block)
|
|
146
143
|
end
|
|
147
144
|
|
|
148
145
|
# Store current locs/opts for later
|
|
149
|
-
@current_locs = locs
|
|
146
|
+
@current_locs = locs
|
|
147
|
+
@current_opts = opts
|
|
150
148
|
|
|
151
149
|
# Keep rendering template until we've used up all extensions. This
|
|
152
150
|
# handles cases like `style.css.sass.erb`
|
|
@@ -184,7 +182,7 @@ module Middleman
|
|
|
184
182
|
# @param [String, Symbol] data
|
|
185
183
|
# @param [Hash] options
|
|
186
184
|
# @return [String]
|
|
187
|
-
def render(
|
|
185
|
+
def render(_, data, options={}, &block)
|
|
188
186
|
data = data.to_s
|
|
189
187
|
|
|
190
188
|
locals = options[:locals]
|
|
@@ -198,13 +196,13 @@ module Middleman
|
|
|
198
196
|
resolve_opts[:preferred_engine] = File.extname(resource.source_file)[1..-1].to_sym
|
|
199
197
|
|
|
200
198
|
# Look for partials relative to the current path
|
|
201
|
-
relative_dir = File.join(current_dir.sub(%r{^#{Regexp.escape(
|
|
199
|
+
relative_dir = File.join(current_dir.sub(%r{^#{Regexp.escape(source_dir)}/?}, ''), data)
|
|
202
200
|
|
|
203
201
|
found_partial = resolve_template(relative_dir, resolve_opts)
|
|
204
202
|
end
|
|
205
203
|
|
|
206
204
|
# Look in the partials_dir for the partial with the current engine
|
|
207
|
-
|
|
205
|
+
unless found_partial
|
|
208
206
|
partials_path = File.join(config[:partials_dir], data)
|
|
209
207
|
found_partial = resolve_template(partials_path, resolve_opts)
|
|
210
208
|
end
|
|
@@ -222,9 +220,13 @@ module Middleman
|
|
|
222
220
|
# @param [Hash] opts
|
|
223
221
|
# @param [Class] context
|
|
224
222
|
# @return [String]
|
|
225
|
-
def render_individual_file(path, locs
|
|
223
|
+
def render_individual_file(path, locs={}, opts={}, context=self, &block)
|
|
226
224
|
path = path.to_s
|
|
227
225
|
|
|
226
|
+
# Mutability is FUN!
|
|
227
|
+
# Try to work around: https://github.com/middleman/middleman/issues/501
|
|
228
|
+
locs = locs.dup
|
|
229
|
+
|
|
228
230
|
# Detect the remdering engine from the extension
|
|
229
231
|
extension = File.extname(path)
|
|
230
232
|
engine = extension[1..-1].to_sym
|
|
@@ -254,13 +256,18 @@ module Middleman
|
|
|
254
256
|
template_class = Tilt[path]
|
|
255
257
|
# Allow hooks to manipulate the template before render
|
|
256
258
|
self.class.callbacks_for_hook(:before_render).each do |callback|
|
|
257
|
-
|
|
259
|
+
# Uber::Options::Value doesn't respond to call
|
|
260
|
+
newbody = if callback.respond_to?(:call)
|
|
261
|
+
callback.call(body, path, locs, template_class)
|
|
262
|
+
elsif callback.respond_to?(:evaluate)
|
|
263
|
+
callback.evaluate(self, body, path, locs, template_class)
|
|
264
|
+
end
|
|
258
265
|
body = newbody if newbody # Allow the callback to return nil to skip it
|
|
259
266
|
end
|
|
260
267
|
|
|
261
268
|
# Read compiled template from disk or cache
|
|
262
269
|
template = cache.fetch(:compiled_template, extension, options, body) do
|
|
263
|
-
|
|
270
|
+
::Tilt.new(path, 1, options) { body }
|
|
264
271
|
end
|
|
265
272
|
|
|
266
273
|
# Render using Tilt
|
|
@@ -268,7 +275,13 @@ module Middleman
|
|
|
268
275
|
|
|
269
276
|
# Allow hooks to manipulate the result after render
|
|
270
277
|
self.class.callbacks_for_hook(:after_render).each do |callback|
|
|
271
|
-
|
|
278
|
+
# Uber::Options::Value doesn't respond to call
|
|
279
|
+
newcontent = if callback.respond_to?(:call)
|
|
280
|
+
content = callback.call(content, path, locs, template_class)
|
|
281
|
+
elsif callback.respond_to?(:evaluate)
|
|
282
|
+
content = callback.evaluate(self, content, path, locs, template_class)
|
|
283
|
+
end
|
|
284
|
+
content = newcontent if newcontent # Allow the callback to return nil to skip it
|
|
272
285
|
end
|
|
273
286
|
|
|
274
287
|
output = ::ActiveSupport::SafeBuffer.new ''
|
|
@@ -317,7 +330,7 @@ module Middleman
|
|
|
317
330
|
# @return [String]
|
|
318
331
|
def fetch_layout(engine, opts)
|
|
319
332
|
# The layout name comes from either the system default or the options
|
|
320
|
-
local_layout = opts.
|
|
333
|
+
local_layout = opts.key?(:layout) ? opts[:layout] : config[:layout]
|
|
321
334
|
return false unless local_layout
|
|
322
335
|
|
|
323
336
|
# Look for engine-specific options
|
|
@@ -325,9 +338,9 @@ module Middleman
|
|
|
325
338
|
|
|
326
339
|
# The engine for the layout can be set in options, engine_options or passed
|
|
327
340
|
# into this method
|
|
328
|
-
layout_engine = if opts.
|
|
341
|
+
layout_engine = if opts.key?(:layout_engine)
|
|
329
342
|
opts[:layout_engine]
|
|
330
|
-
elsif engine_options.
|
|
343
|
+
elsif engine_options.key?(:layout_engine)
|
|
331
344
|
engine_options[:layout_engine]
|
|
332
345
|
else
|
|
333
346
|
engine
|
|
@@ -354,11 +367,8 @@ module Middleman
|
|
|
354
367
|
# @param [Symbol] preferred_engine
|
|
355
368
|
# @return [String]
|
|
356
369
|
def locate_layout(name, preferred_engine=nil)
|
|
357
|
-
# Whether we've found the layout
|
|
358
|
-
layout_path = false
|
|
359
|
-
|
|
360
370
|
resolve_opts = {}
|
|
361
|
-
resolve_opts[:preferred_engine] = preferred_engine
|
|
371
|
+
resolve_opts[:preferred_engine] = preferred_engine unless preferred_engine.nil?
|
|
362
372
|
|
|
363
373
|
# Check layouts folder
|
|
364
374
|
layout_path = resolve_template(File.join(config[:layouts_dir], name.to_s), resolve_opts)
|
|
@@ -377,13 +387,13 @@ module Middleman
|
|
|
377
387
|
# Save current buffer for later
|
|
378
388
|
@_out_buf, _buf_was = '', @_out_buf
|
|
379
389
|
|
|
380
|
-
layout_path = locate_layout(layout_name,
|
|
390
|
+
layout_path = locate_layout(layout_name, current_engine)
|
|
381
391
|
|
|
382
392
|
extension = File.extname(layout_path)
|
|
383
393
|
engine = extension[1..-1].to_sym
|
|
384
394
|
|
|
385
395
|
# Store last engine for later (could be inside nested renders)
|
|
386
|
-
self.current_engine, engine_was = engine,
|
|
396
|
+
self.current_engine, engine_was = engine, current_engine
|
|
387
397
|
|
|
388
398
|
begin
|
|
389
399
|
content = if block_given?
|
|
@@ -408,6 +418,7 @@ module Middleman
|
|
|
408
418
|
end
|
|
409
419
|
|
|
410
420
|
# The currently rendering engine
|
|
421
|
+
# rubocop:disable TrivialAccessors
|
|
411
422
|
# @return [Symbol, nil]
|
|
412
423
|
def current_engine=(v)
|
|
413
424
|
@_current_engine = v
|
|
@@ -423,18 +434,17 @@ module Middleman
|
|
|
423
434
|
request_path = request_path.to_s
|
|
424
435
|
cache.fetch(:resolve_template, request_path, options) do
|
|
425
436
|
relative_path = Util.strip_leading_slash(request_path)
|
|
426
|
-
on_disk_path = File.expand_path(relative_path,
|
|
437
|
+
on_disk_path = File.expand_path(relative_path, source_dir)
|
|
427
438
|
|
|
428
439
|
# By default, any engine will do
|
|
429
440
|
preferred_engines = ['*']
|
|
430
441
|
|
|
431
442
|
# If we're specifically looking for a preferred engine
|
|
432
|
-
if options.
|
|
443
|
+
if options.key?(:preferred_engine)
|
|
433
444
|
extension_class = ::Tilt[options[:preferred_engine]]
|
|
434
|
-
matched_exts = []
|
|
435
445
|
|
|
436
446
|
# Get a list of extensions for a preferred engine
|
|
437
|
-
matched_exts = ::Tilt.mappings.select do |
|
|
447
|
+
matched_exts = ::Tilt.mappings.select do |_, engines|
|
|
438
448
|
engines.include? extension_class
|
|
439
449
|
end.keys
|
|
440
450
|
|
|
@@ -464,7 +474,7 @@ module Middleman
|
|
|
464
474
|
# If we found one, return it and the found engine
|
|
465
475
|
if found_path
|
|
466
476
|
found_path
|
|
467
|
-
elsif File.
|
|
477
|
+
elsif File.exist?(on_disk_path)
|
|
468
478
|
on_disk_path
|
|
469
479
|
else
|
|
470
480
|
false
|
|
@@ -8,15 +8,12 @@ require 'middleman-core/util'
|
|
|
8
8
|
|
|
9
9
|
module Middleman
|
|
10
10
|
module CoreExtensions
|
|
11
|
-
|
|
12
11
|
# Base helper to manipulate asset paths
|
|
13
12
|
module Request
|
|
14
|
-
|
|
15
13
|
# Extension registered
|
|
16
14
|
class << self
|
|
17
15
|
# @private
|
|
18
16
|
def registered(app)
|
|
19
|
-
|
|
20
17
|
# CSSPIE HTC File
|
|
21
18
|
::Rack::Mime::MIME_TYPES['.htc'] = 'text/x-component'
|
|
22
19
|
|
|
@@ -32,7 +29,7 @@ module Middleman
|
|
|
32
29
|
# Include instance methods
|
|
33
30
|
app.send :include, InstanceMethods
|
|
34
31
|
end
|
|
35
|
-
|
|
32
|
+
alias_method :included, :registered
|
|
36
33
|
end
|
|
37
34
|
|
|
38
35
|
module ClassMethods
|
|
@@ -60,9 +57,7 @@ module Middleman
|
|
|
60
57
|
# @private
|
|
61
58
|
# @param [Middleman::Application] inst
|
|
62
59
|
# @return [void]
|
|
63
|
-
|
|
64
|
-
@inst = inst
|
|
65
|
-
end
|
|
60
|
+
attr_writer :inst
|
|
66
61
|
|
|
67
62
|
# Return built Rack app
|
|
68
63
|
#
|
|
@@ -74,15 +69,15 @@ module Middleman
|
|
|
74
69
|
app.use Rack::Lint
|
|
75
70
|
app.use Rack::Head
|
|
76
71
|
|
|
77
|
-
Array(@middleware).each do |klass, options,
|
|
78
|
-
app.use(klass, *options, &
|
|
72
|
+
Array(@middleware).each do |klass, options, middleware_block|
|
|
73
|
+
app.use(klass, *options, &middleware_block)
|
|
79
74
|
end
|
|
80
75
|
|
|
81
76
|
inner_app = inst(&block)
|
|
82
77
|
app.map('/') { run inner_app }
|
|
83
78
|
|
|
84
|
-
Array(@mappings).each do |path,
|
|
85
|
-
app.map(path, &
|
|
79
|
+
Array(@mappings).each do |path, map_block|
|
|
80
|
+
app.map(path, &map_block)
|
|
86
81
|
end
|
|
87
82
|
|
|
88
83
|
app
|
|
@@ -130,6 +125,7 @@ module Middleman
|
|
|
130
125
|
# configuration can be included later without impacting
|
|
131
126
|
# other classes and instances.
|
|
132
127
|
#
|
|
128
|
+
# rubocop:disable ClassVars
|
|
133
129
|
# @return [Class]
|
|
134
130
|
def server(&block)
|
|
135
131
|
@@servercounter ||= 0
|
|
@@ -169,20 +165,21 @@ module Middleman
|
|
|
169
165
|
# @return [void]
|
|
170
166
|
def current_path=(path)
|
|
171
167
|
Thread.current[:current_path] = path
|
|
172
|
-
Thread.current[:legacy_request] = ::Thor::CoreExt::HashWithIndifferentAccess.new(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
168
|
+
Thread.current[:legacy_request] = ::Thor::CoreExt::HashWithIndifferentAccess.new(
|
|
169
|
+
path: path,
|
|
170
|
+
params: req ? ::Thor::CoreExt::HashWithIndifferentAccess.new(req.params) : {}
|
|
171
|
+
)
|
|
176
172
|
end
|
|
177
173
|
|
|
178
|
-
delegate :use, :
|
|
179
|
-
delegate :map, :
|
|
174
|
+
delegate :use, to: :"self.class"
|
|
175
|
+
delegate :map, to: :"self.class"
|
|
180
176
|
|
|
181
177
|
# Rack request
|
|
182
178
|
# @return [Rack::Request]
|
|
183
179
|
def req
|
|
184
180
|
Thread.current[:req]
|
|
185
181
|
end
|
|
182
|
+
|
|
186
183
|
def req=(value)
|
|
187
184
|
Thread.current[:req] = value
|
|
188
185
|
end
|
|
@@ -199,7 +196,7 @@ module Middleman
|
|
|
199
196
|
self.req = req = ::Rack::Request.new(env)
|
|
200
197
|
res = ::Rack::Response.new
|
|
201
198
|
|
|
202
|
-
logger.debug "== Request: #{env[
|
|
199
|
+
logger.debug "== Request: #{env['PATH_INFO']}"
|
|
203
200
|
|
|
204
201
|
# Catch :halt exceptions and use that response if given
|
|
205
202
|
catch(:halt) do
|
|
@@ -277,7 +274,7 @@ module Middleman
|
|
|
277
274
|
# @param [String] value Mime type
|
|
278
275
|
# @return [void]
|
|
279
276
|
def mime_type(type, value)
|
|
280
|
-
type = ".#{type}" unless type.to_s[0] ==
|
|
277
|
+
type = ".#{type}" unless type.to_s[0] == '.'
|
|
281
278
|
::Rack::Mime::MIME_TYPES[type] = value
|
|
282
279
|
end
|
|
283
280
|
|
|
@@ -11,14 +11,14 @@ module Middleman
|
|
|
11
11
|
#
|
|
12
12
|
# @param [String, Symbol] layout_name
|
|
13
13
|
# @return [void]
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
def with_layout(layout_name, &block)
|
|
15
|
+
old_layout = config[:layout]
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
config[:layout] = layout_name
|
|
18
|
+
instance_exec(&block) if block_given?
|
|
19
|
+
ensure
|
|
20
|
+
config[:layout] = old_layout
|
|
21
|
+
end
|
|
22
22
|
|
|
23
23
|
# The page method allows the layout to be set on a specific path
|
|
24
24
|
#
|
|
@@ -28,43 +28,44 @@ module Middleman
|
|
|
28
28
|
# @param [String] url
|
|
29
29
|
# @param [Hash] opts
|
|
30
30
|
# @return [void]
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
# Default layout
|
|
35
|
-
opts[:layout] = config[:layout] if opts[:layout].nil?
|
|
31
|
+
def page(url, opts={}, &block)
|
|
32
|
+
blocks = Array(block)
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
# Default layout
|
|
35
|
+
opts[:layout] = config[:layout] if opts[:layout].nil?
|
|
39
36
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
{ :options => opts, :blocks => blocks }
|
|
43
|
-
end
|
|
37
|
+
# If the url is a regexp
|
|
38
|
+
if url.is_a?(Regexp) || url.include?('*')
|
|
44
39
|
|
|
45
|
-
|
|
40
|
+
# Use the metadata loop for matching against paths at runtime
|
|
41
|
+
sitemap.provides_metadata_for_path(url) do |_|
|
|
42
|
+
{ options: opts, blocks: blocks }
|
|
46
43
|
end
|
|
47
44
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if url.end_with?('/') || File.directory?(File.join(source_dir, url))
|
|
51
|
-
url = File.join(url, config[:index_file])
|
|
52
|
-
end
|
|
45
|
+
return
|
|
46
|
+
end
|
|
53
47
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
# TODO: deprecate ignore through page?
|
|
60
|
-
ignore(url)
|
|
61
|
-
end
|
|
48
|
+
# Normalized path
|
|
49
|
+
url = '/' + Middleman::Util.normalize_path(url)
|
|
50
|
+
if url.end_with?('/') || File.directory?(File.join(source_dir, url))
|
|
51
|
+
url = File.join(url, config[:index_file])
|
|
52
|
+
end
|
|
62
53
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
# Setup proxy
|
|
55
|
+
if target = opts.delete(:proxy)
|
|
56
|
+
# TODO: deprecate proxy through page?
|
|
57
|
+
proxy(url, target, opts, &block)
|
|
58
|
+
return
|
|
59
|
+
elsif opts.delete(:ignore)
|
|
60
|
+
# TODO: deprecate ignore through page?
|
|
61
|
+
ignore(url)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Setup a metadata matcher for rendering those options
|
|
65
|
+
sitemap.provides_metadata_for_path(url) do |_|
|
|
66
|
+
{ options: opts, blocks: blocks }
|
|
67
67
|
end
|
|
68
|
+
end
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
end
|