bridgetown-core 0.16.0.beta2 → 0.18.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/bridgetown-core.gemspec +2 -1
- data/lib/bridgetown-core.rb +45 -29
- data/lib/bridgetown-core/collection.rb +5 -1
- data/lib/bridgetown-core/commands/apply.rb +2 -2
- data/lib/bridgetown-core/commands/console.rb +4 -4
- data/lib/bridgetown-core/commands/new.rb +1 -1
- data/lib/bridgetown-core/concerns/layout_placeable.rb +1 -1
- data/lib/bridgetown-core/concerns/liquid_renderable.rb +10 -0
- data/lib/bridgetown-core/concerns/site/configurable.rb +24 -22
- data/lib/bridgetown-core/concerns/site/content.rb +46 -33
- data/lib/bridgetown-core/concerns/site/extensible.rb +14 -13
- data/lib/bridgetown-core/concerns/site/localizable.rb +24 -0
- data/lib/bridgetown-core/concerns/site/processable.rb +12 -15
- data/lib/bridgetown-core/concerns/site/renderable.rb +35 -28
- data/lib/bridgetown-core/concerns/site/writable.rb +7 -15
- data/lib/bridgetown-core/concerns/validatable.rb +2 -2
- data/lib/bridgetown-core/configuration.rb +14 -6
- data/lib/bridgetown-core/converter.rb +0 -42
- data/lib/bridgetown-core/converters/erb_templates.rb +75 -16
- data/lib/bridgetown-core/converters/liquid_templates.rb +96 -0
- data/lib/bridgetown-core/converters/markdown.rb +0 -3
- data/lib/bridgetown-core/document.rb +34 -21
- data/lib/bridgetown-core/drops/site_drop.rb +5 -1
- data/lib/bridgetown-core/drops/unified_payload_drop.rb +0 -1
- data/lib/bridgetown-core/drops/url_drop.rb +19 -3
- data/lib/bridgetown-core/excerpt.rb +1 -1
- data/lib/bridgetown-core/filters.rb +37 -55
- data/lib/bridgetown-core/filters/condition_helpers.rb +56 -0
- data/lib/bridgetown-core/frontmatter_defaults.rb +17 -0
- data/lib/bridgetown-core/generators/prototype_generator.rb +42 -25
- data/lib/bridgetown-core/helpers.rb +84 -0
- data/lib/bridgetown-core/liquid_renderer.rb +1 -1
- data/lib/bridgetown-core/log_writer.rb +2 -2
- data/lib/bridgetown-core/page.rb +8 -2
- data/lib/bridgetown-core/plugin_manager.rb +34 -1
- data/lib/bridgetown-core/reader.rb +2 -4
- data/lib/bridgetown-core/readers/collection_reader.rb +1 -0
- data/lib/bridgetown-core/readers/data_reader.rb +4 -3
- data/lib/bridgetown-core/readers/defaults_reader.rb +27 -0
- data/lib/bridgetown-core/readers/layout_reader.rb +1 -0
- data/lib/bridgetown-core/readers/page_reader.rb +1 -0
- data/lib/bridgetown-core/readers/post_reader.rb +29 -15
- data/lib/bridgetown-core/readers/static_file_reader.rb +1 -0
- data/lib/bridgetown-core/renderer.rb +42 -160
- data/lib/bridgetown-core/ruby_template_view.rb +26 -22
- data/lib/bridgetown-core/site.rb +14 -2
- data/lib/bridgetown-core/tags/find.rb +86 -0
- data/lib/bridgetown-core/tags/render_content.rb +2 -2
- data/lib/bridgetown-core/tags/t.rb +14 -0
- data/lib/bridgetown-core/utils.rb +16 -2
- data/lib/bridgetown-core/utils/ruby_exec.rb +1 -1
- data/lib/bridgetown-core/version.rb +2 -2
- data/lib/bridgetown-core/watcher.rb +1 -0
- data/lib/site_template/src/images/.keep +1 -0
- metadata +29 -6
data/lib/bridgetown-core/site.rb
CHANGED
@@ -7,6 +7,7 @@ module Bridgetown
|
|
7
7
|
include Configurable
|
8
8
|
include Content
|
9
9
|
include Extensible
|
10
|
+
include Localizable
|
10
11
|
include Processable
|
11
12
|
include Renderable
|
12
13
|
include Writable
|
@@ -14,8 +15,18 @@ module Bridgetown
|
|
14
15
|
attr_reader :root_dir, :source, :dest, :cache_dir, :config,
|
15
16
|
:regenerator, :liquid_renderer, :components_load_paths,
|
16
17
|
:includes_load_paths
|
17
|
-
|
18
|
-
|
18
|
+
|
19
|
+
# All files not pages/documents or structured data in the source folder
|
20
|
+
# @return [Array<StaticFile>]
|
21
|
+
attr_accessor :static_files
|
22
|
+
|
23
|
+
# @return [Array<Layout>]
|
24
|
+
attr_accessor :layouts
|
25
|
+
|
26
|
+
# @return [Array<Page>]
|
27
|
+
attr_accessor :pages
|
28
|
+
|
29
|
+
attr_accessor :exclude, :include, :lsi, :highlighter, :permalink_style,
|
19
30
|
:time, :future, :unpublished, :limit_posts,
|
20
31
|
:keep_files, :baseurl, :data, :file_read_opts,
|
21
32
|
:plugin_manager, :converters, :generators, :reader
|
@@ -25,6 +36,7 @@ module Bridgetown
|
|
25
36
|
# config - A Hash containing site configuration details.
|
26
37
|
def initialize(config)
|
27
38
|
self.config = config
|
39
|
+
locale
|
28
40
|
|
29
41
|
@plugin_manager = PluginManager.new(self)
|
30
42
|
@cleaner = Cleaner.new(self)
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
module Tags
|
5
|
+
class Find < Liquid::Tag
|
6
|
+
include Bridgetown::Filters::ConditionHelpers
|
7
|
+
include Bridgetown::LiquidExtensions
|
8
|
+
|
9
|
+
SYNTAX = %r!^(.*?) (where|in) (.*?),(.*)$!.freeze
|
10
|
+
CONDITIONS_SEP = "~FINDSEP~"
|
11
|
+
|
12
|
+
def initialize(tag_name, markup, tokens)
|
13
|
+
super
|
14
|
+
if markup.strip =~ SYNTAX
|
15
|
+
@new_var_name = Regexp.last_match(1).strip
|
16
|
+
@single_or_group = Regexp.last_match(2)
|
17
|
+
@arr_name = Regexp.last_match(3).strip
|
18
|
+
@conditions = process_conditions(Regexp.last_match(4).strip)
|
19
|
+
else
|
20
|
+
raise SyntaxError, <<~MSG
|
21
|
+
Syntax Error in tag 'find' while parsing the following markup:
|
22
|
+
|
23
|
+
#{markup}
|
24
|
+
|
25
|
+
Valid syntax: find <varname> where|in <array>, <condition(s)>
|
26
|
+
MSG
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def render(context)
|
31
|
+
@group = lookup_variable(context, @arr_name)
|
32
|
+
return "" unless @group.respond_to?(:select)
|
33
|
+
|
34
|
+
@group = @group.values if @group.is_a?(Hash)
|
35
|
+
|
36
|
+
expression = @conditions.split(CONDITIONS_SEP).map do |condition|
|
37
|
+
"__find_tag_item__.#{condition.strip}"
|
38
|
+
end.join(" and ")
|
39
|
+
@liquid_condition = parse_condition(expression)
|
40
|
+
|
41
|
+
context[@new_var_name] = if @single_or_group == "where"
|
42
|
+
group_evaluate(context)
|
43
|
+
else
|
44
|
+
single_evaluate(context)
|
45
|
+
end
|
46
|
+
|
47
|
+
""
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def process_conditions(conditions)
|
53
|
+
processed_conditions = +""
|
54
|
+
in_quotes = false
|
55
|
+
|
56
|
+
conditions.each_char do |c|
|
57
|
+
in_quotes = !in_quotes if c == '"'
|
58
|
+
|
59
|
+
processed_conditions << (c == "," && !in_quotes ? CONDITIONS_SEP : c)
|
60
|
+
end
|
61
|
+
|
62
|
+
processed_conditions
|
63
|
+
end
|
64
|
+
|
65
|
+
def group_evaluate(context)
|
66
|
+
context.stack do
|
67
|
+
@group.select do |object|
|
68
|
+
context["__find_tag_item__"] = object
|
69
|
+
@liquid_condition.evaluate(context)
|
70
|
+
end
|
71
|
+
end || []
|
72
|
+
end
|
73
|
+
|
74
|
+
def single_evaluate(context)
|
75
|
+
context.stack do
|
76
|
+
@group.find do |object|
|
77
|
+
context["__find_tag_item__"] = object
|
78
|
+
@liquid_condition.evaluate(context)
|
79
|
+
end
|
80
|
+
end || nil
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
Liquid::Template.register_tag("find", Bridgetown::Tags::Find)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Bridgetown
|
4
4
|
module Tags
|
5
5
|
class BlockRenderTag < Liquid::Block
|
6
|
-
# rubocop:disable Metrics/
|
6
|
+
# rubocop:disable Metrics/MethodLength
|
7
7
|
def render(context)
|
8
8
|
context.stack({}) do
|
9
9
|
# unindent the incoming text
|
@@ -37,7 +37,7 @@ module Bridgetown
|
|
37
37
|
.render_tag(context, +"")
|
38
38
|
end
|
39
39
|
end
|
40
|
-
# rubocop:enable Metrics/
|
40
|
+
# rubocop:enable Metrics/MethodLength
|
41
41
|
|
42
42
|
private
|
43
43
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
module Tags
|
5
|
+
class TranslationTag < Liquid::Tag
|
6
|
+
def render(_context)
|
7
|
+
key = @markup.strip
|
8
|
+
I18n.t(key)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
Liquid::Template.register_tag("t", Bridgetown::Tags::TranslationTag)
|
@@ -14,8 +14,8 @@ module Bridgetown
|
|
14
14
|
# Constants for use in #slugify
|
15
15
|
SLUGIFY_MODES = %w(raw default pretty simple ascii latin).freeze
|
16
16
|
SLUGIFY_RAW_REGEXP = Regexp.new('\\s+').freeze
|
17
|
-
SLUGIFY_DEFAULT_REGEXP = Regexp.new("[
|
18
|
-
SLUGIFY_PRETTY_REGEXP = Regexp.new("[
|
17
|
+
SLUGIFY_DEFAULT_REGEXP = Regexp.new("[^\\p{M}\\p{L}\\p{Nd}]+").freeze
|
18
|
+
SLUGIFY_PRETTY_REGEXP = Regexp.new("[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+").freeze
|
19
19
|
SLUGIFY_ASCII_REGEXP = Regexp.new("[^[A-Za-z0-9]]+").freeze
|
20
20
|
|
21
21
|
# Takes a slug and turns it into a simple title.
|
@@ -23,6 +23,20 @@ module Bridgetown
|
|
23
23
|
slug.gsub(%r![_ ]!, "-").split("-").map!(&:capitalize).join(" ")
|
24
24
|
end
|
25
25
|
|
26
|
+
# XML escape a string for use. Replaces any special characters with
|
27
|
+
# appropriate HTML entity replacements.
|
28
|
+
#
|
29
|
+
# Examples
|
30
|
+
#
|
31
|
+
# xml_escape('foo "bar" <baz>')
|
32
|
+
# # => "foo "bar" <baz>"
|
33
|
+
#
|
34
|
+
# @param input [String] The String to escape.
|
35
|
+
# @return [String] the escaped String.
|
36
|
+
def xml_escape(input)
|
37
|
+
input.to_s.encode(xml: :attr).gsub(%r!\A"|"\Z!, "")
|
38
|
+
end
|
39
|
+
|
26
40
|
# Non-destructive version of deep_merge_hashes! See that method.
|
27
41
|
#
|
28
42
|
# Returns the merged hashes.
|
@@ -59,7 +59,7 @@ module Bridgetown
|
|
59
59
|
|
60
60
|
# This is where the magic happens! DON'T BE EVIL!!! ;-)
|
61
61
|
output = obj.instance_eval(ruby_code)
|
62
|
-
output.is_a?(Hash) ? output.
|
62
|
+
output.is_a?(Hash) ? output.with_dot_access : output
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -130,6 +130,7 @@ module Bridgetown
|
|
130
130
|
Bridgetown::Hooks.trigger :site, :pre_reload, site
|
131
131
|
Bridgetown::Hooks.clear_reloadable_hooks
|
132
132
|
site.plugin_manager.reload_plugin_files
|
133
|
+
site.plugin_manager.reload_component_loaders
|
133
134
|
site.process
|
134
135
|
Bridgetown.logger.info "Done! 🎉", "#{"Completed".green} in less than" \
|
135
136
|
" #{(Time.now - time).ceil(2)} seconds."
|
@@ -0,0 +1 @@
|
|
1
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bridgetown-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bridgetown Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: amazing_print
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.2'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: colorator
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: hash_with_dot_access
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: i18n
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -298,6 +312,7 @@ executables:
|
|
298
312
|
extensions: []
|
299
313
|
extra_rdoc_files: []
|
300
314
|
files:
|
315
|
+
- ".yardopts"
|
301
316
|
- Rakefile
|
302
317
|
- bin/bridgetown
|
303
318
|
- bridgetown-core.gemspec
|
@@ -327,6 +342,7 @@ files:
|
|
327
342
|
- lib/bridgetown-core/concerns/site/configurable.rb
|
328
343
|
- lib/bridgetown-core/concerns/site/content.rb
|
329
344
|
- lib/bridgetown-core/concerns/site/extensible.rb
|
345
|
+
- lib/bridgetown-core/concerns/site/localizable.rb
|
330
346
|
- lib/bridgetown-core/concerns/site/processable.rb
|
331
347
|
- lib/bridgetown-core/concerns/site/renderable.rb
|
332
348
|
- lib/bridgetown-core/concerns/site/writable.rb
|
@@ -335,6 +351,7 @@ files:
|
|
335
351
|
- lib/bridgetown-core/converter.rb
|
336
352
|
- lib/bridgetown-core/converters/erb_templates.rb
|
337
353
|
- lib/bridgetown-core/converters/identity.rb
|
354
|
+
- lib/bridgetown-core/converters/liquid_templates.rb
|
338
355
|
- lib/bridgetown-core/converters/markdown.rb
|
339
356
|
- lib/bridgetown-core/converters/markdown/kramdown_parser.rb
|
340
357
|
- lib/bridgetown-core/converters/smartypants.rb
|
@@ -355,12 +372,14 @@ files:
|
|
355
372
|
- lib/bridgetown-core/excerpt.rb
|
356
373
|
- lib/bridgetown-core/external.rb
|
357
374
|
- lib/bridgetown-core/filters.rb
|
375
|
+
- lib/bridgetown-core/filters/condition_helpers.rb
|
358
376
|
- lib/bridgetown-core/filters/date_filters.rb
|
359
377
|
- lib/bridgetown-core/filters/grouping_filters.rb
|
360
378
|
- lib/bridgetown-core/filters/url_filters.rb
|
361
379
|
- lib/bridgetown-core/frontmatter_defaults.rb
|
362
380
|
- lib/bridgetown-core/generator.rb
|
363
381
|
- lib/bridgetown-core/generators/prototype_generator.rb
|
382
|
+
- lib/bridgetown-core/helpers.rb
|
364
383
|
- lib/bridgetown-core/hooks.rb
|
365
384
|
- lib/bridgetown-core/layout.rb
|
366
385
|
- lib/bridgetown-core/liquid_extensions.rb
|
@@ -380,6 +399,7 @@ files:
|
|
380
399
|
- lib/bridgetown-core/reader.rb
|
381
400
|
- lib/bridgetown-core/readers/collection_reader.rb
|
382
401
|
- lib/bridgetown-core/readers/data_reader.rb
|
402
|
+
- lib/bridgetown-core/readers/defaults_reader.rb
|
383
403
|
- lib/bridgetown-core/readers/layout_reader.rb
|
384
404
|
- lib/bridgetown-core/readers/page_reader.rb
|
385
405
|
- lib/bridgetown-core/readers/plugin_content_reader.rb
|
@@ -392,11 +412,13 @@ files:
|
|
392
412
|
- lib/bridgetown-core/site.rb
|
393
413
|
- lib/bridgetown-core/static_file.rb
|
394
414
|
- lib/bridgetown-core/tags/class_map.rb
|
415
|
+
- lib/bridgetown-core/tags/find.rb
|
395
416
|
- lib/bridgetown-core/tags/highlight.rb
|
396
417
|
- lib/bridgetown-core/tags/include.rb
|
397
418
|
- lib/bridgetown-core/tags/link.rb
|
398
419
|
- lib/bridgetown-core/tags/post_url.rb
|
399
420
|
- lib/bridgetown-core/tags/render_content.rb
|
421
|
+
- lib/bridgetown-core/tags/t.rb
|
400
422
|
- lib/bridgetown-core/tags/webpack_path.rb
|
401
423
|
- lib/bridgetown-core/tags/with.rb
|
402
424
|
- lib/bridgetown-core/url.rb
|
@@ -430,6 +452,7 @@ files:
|
|
430
452
|
- lib/site_template/src/_posts/0000-00-00-welcome-to-bridgetown.md.erb
|
431
453
|
- lib/site_template/src/about.md
|
432
454
|
- lib/site_template/src/favicon.ico
|
455
|
+
- lib/site_template/src/images/.keep
|
433
456
|
- lib/site_template/src/index.md
|
434
457
|
- lib/site_template/src/posts.md
|
435
458
|
- lib/site_template/start.js
|
@@ -459,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
459
482
|
- !ruby/object:Gem::Version
|
460
483
|
version: 2.7.0
|
461
484
|
requirements: []
|
462
|
-
rubygems_version: 3.
|
485
|
+
rubygems_version: 3.1.4
|
463
486
|
signing_key:
|
464
487
|
specification_version: 4
|
465
488
|
summary: A Webpack-aware, Ruby-based static site generator for the modern Jamstack
|