bridgetown-core 0.17.1 → 0.18.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/lib/bridgetown-core.rb +43 -28
  4. data/lib/bridgetown-core/collection.rb +5 -1
  5. data/lib/bridgetown-core/commands/apply.rb +2 -2
  6. data/lib/bridgetown-core/commands/new.rb +1 -1
  7. data/lib/bridgetown-core/concerns/layout_placeable.rb +1 -1
  8. data/lib/bridgetown-core/concerns/liquid_renderable.rb +10 -0
  9. data/lib/bridgetown-core/concerns/site/configurable.rb +21 -23
  10. data/lib/bridgetown-core/concerns/site/content.rb +44 -31
  11. data/lib/bridgetown-core/concerns/site/extensible.rb +14 -13
  12. data/lib/bridgetown-core/concerns/site/localizable.rb +6 -2
  13. data/lib/bridgetown-core/concerns/site/processable.rb +10 -13
  14. data/lib/bridgetown-core/concerns/site/renderable.rb +34 -26
  15. data/lib/bridgetown-core/concerns/site/writable.rb +7 -15
  16. data/lib/bridgetown-core/configuration.rb +5 -3
  17. data/lib/bridgetown-core/converter.rb +0 -42
  18. data/lib/bridgetown-core/converters/erb_templates.rb +80 -16
  19. data/lib/bridgetown-core/converters/liquid_templates.rb +104 -0
  20. data/lib/bridgetown-core/converters/markdown.rb +0 -3
  21. data/lib/bridgetown-core/document.rb +31 -18
  22. data/lib/bridgetown-core/drops/site_drop.rb +4 -0
  23. data/lib/bridgetown-core/drops/unified_payload_drop.rb +0 -1
  24. data/lib/bridgetown-core/drops/url_drop.rb +19 -3
  25. data/lib/bridgetown-core/excerpt.rb +1 -1
  26. data/lib/bridgetown-core/filters.rb +28 -7
  27. data/lib/bridgetown-core/generators/prototype_generator.rb +42 -25
  28. data/lib/bridgetown-core/helpers.rb +84 -0
  29. data/lib/bridgetown-core/liquid_renderer.rb +1 -1
  30. data/lib/bridgetown-core/log_writer.rb +2 -2
  31. data/lib/bridgetown-core/plugin_manager.rb +34 -1
  32. data/lib/bridgetown-core/reader.rb +1 -4
  33. data/lib/bridgetown-core/readers/layout_reader.rb +1 -1
  34. data/lib/bridgetown-core/readers/post_reader.rb +28 -15
  35. data/lib/bridgetown-core/renderer.rb +42 -162
  36. data/lib/bridgetown-core/ruby_template_view.rb +23 -34
  37. data/lib/bridgetown-core/site.rb +12 -2
  38. data/lib/bridgetown-core/tags/render_content.rb +2 -2
  39. data/lib/bridgetown-core/utils.rb +14 -0
  40. data/lib/bridgetown-core/version.rb +2 -2
  41. data/lib/bridgetown-core/watcher.rb +1 -0
  42. data/lib/site_template/src/images/.keep +1 -0
  43. metadata +7 -3
@@ -5,36 +5,7 @@ require "active_support/core_ext/hash/keys"
5
5
 
6
6
  module Bridgetown
7
7
  class RubyTemplateView
8
- class Helpers
9
- include Bridgetown::Filters
10
-
11
- attr_reader :view, :site
12
-
13
- Context = Struct.new(:registers)
14
-
15
- def initialize(view, site)
16
- @view = view
17
- @site = site
18
-
19
- # duck typing for Liquid context
20
- @context = Context.new({ site: site })
21
- end
22
-
23
- def webpack_path(asset_type)
24
- Bridgetown::Utils.parse_webpack_manifest_file(site, asset_type.to_s)
25
- end
26
-
27
- # @param pairs [Hash] A hash of key/value pairs.
28
- #
29
- # @return [String] Space-separated keys where the values are truthy.
30
- def class_map(pairs = {})
31
- pairs.select { |_key, truthy| truthy }.keys.join(" ")
32
- end
33
-
34
- def t(*args)
35
- I18n.send :t, *args
36
- end
37
- end
8
+ require "bridgetown-core/helpers"
38
9
 
39
10
  attr_reader :layout, :page, :paginator, :site, :content
40
11
 
@@ -44,6 +15,7 @@ module Bridgetown
44
15
  @page = layout.current_document
45
16
  @content = layout.current_document_output
46
17
  else
18
+ @layout = convertible.site.layouts[convertible.data["layout"]]
47
19
  @page = convertible
48
20
  end
49
21
  @paginator = page.paginator if page.respond_to?(:paginator)
@@ -54,11 +26,20 @@ module Bridgetown
54
26
  raise "Must be implemented in a subclass"
55
27
  end
56
28
 
29
+ def render(item, options = {}, &block)
30
+ if item.respond_to?(:render_in)
31
+ item.render_in(self, &block)
32
+ else
33
+ partial(item, options, &block)
34
+ end
35
+ end
36
+
57
37
  def site_drop
58
38
  site.site_payload.site
59
39
  end
60
40
 
61
- def liquid_render(component, options = {})
41
+ def liquid_render(component, options = {}, &block)
42
+ options[:_block_content] = capture(&block) if block && respond_to?(:capture)
62
43
  render_statement = _render_statement(component, options)
63
44
 
64
45
  template = site.liquid_renderer.file(
@@ -90,11 +71,19 @@ module Bridgetown
90
71
  private
91
72
 
92
73
  def _render_statement(component, options)
93
- render_statement = ["{% render \"#{component}\""]
74
+ render_statement = if options[:_block_content]
75
+ ["{% rendercontent \"#{component}\""]
76
+ else
77
+ ["{% render \"#{component}\""]
78
+ end
94
79
  unless options.empty?
95
80
  render_statement << ", " + options.keys.map { |k| "#{k}: #{k}" }.join(", ")
96
81
  end
97
82
  render_statement << " %}"
83
+ if options[:_block_content]
84
+ render_statement << options[:_block_content]
85
+ render_statement << "{% endrendercontent %}"
86
+ end
98
87
  render_statement.join
99
88
  end
100
89
 
@@ -102,8 +91,8 @@ module Bridgetown
102
91
  {
103
92
  registers: {
104
93
  site: site,
105
- page: page,
106
- cached_partials: Bridgetown::Renderer.cached_partials,
94
+ page: page.to_liquid,
95
+ cached_partials: Bridgetown::Converters::LiquidTemplates.cached_partials,
107
96
  },
108
97
  strict_filters: site.config["liquid"]["strict_filters"],
109
98
  strict_variables: site.config["liquid"]["strict_variables"],
@@ -15,8 +15,18 @@ module Bridgetown
15
15
  attr_reader :root_dir, :source, :dest, :cache_dir, :config,
16
16
  :regenerator, :liquid_renderer, :components_load_paths,
17
17
  :includes_load_paths
18
- attr_accessor :layouts, :pages, :static_files,
19
- :exclude, :include, :lsi, :highlighter, :permalink_style,
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,
20
30
  :time, :future, :unpublished, :limit_posts,
21
31
  :keep_files, :baseurl, :data, :file_read_opts,
22
32
  :plugin_manager, :converters, :generators, :reader
@@ -3,7 +3,7 @@
3
3
  module Bridgetown
4
4
  module Tags
5
5
  class BlockRenderTag < Liquid::Block
6
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
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/AbcSize, Metrics/MethodLength
40
+ # rubocop:enable Metrics/MethodLength
41
41
 
42
42
  private
43
43
 
@@ -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 &quot;bar&quot; &lt;baz&gt;"
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.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "0.17.1"
5
- CODE_NAME = "Mount Scott"
4
+ VERSION = "0.18.4"
5
+ CODE_NAME = "Taylor Street"
6
6
  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."
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.17.1
4
+ version: 0.18.4
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-10-02 00:00:00.000000000 Z
11
+ date: 2020-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -312,6 +312,7 @@ executables:
312
312
  extensions: []
313
313
  extra_rdoc_files: []
314
314
  files:
315
+ - ".yardopts"
315
316
  - Rakefile
316
317
  - bin/bridgetown
317
318
  - bridgetown-core.gemspec
@@ -350,6 +351,7 @@ files:
350
351
  - lib/bridgetown-core/converter.rb
351
352
  - lib/bridgetown-core/converters/erb_templates.rb
352
353
  - lib/bridgetown-core/converters/identity.rb
354
+ - lib/bridgetown-core/converters/liquid_templates.rb
353
355
  - lib/bridgetown-core/converters/markdown.rb
354
356
  - lib/bridgetown-core/converters/markdown/kramdown_parser.rb
355
357
  - lib/bridgetown-core/converters/smartypants.rb
@@ -377,6 +379,7 @@ files:
377
379
  - lib/bridgetown-core/frontmatter_defaults.rb
378
380
  - lib/bridgetown-core/generator.rb
379
381
  - lib/bridgetown-core/generators/prototype_generator.rb
382
+ - lib/bridgetown-core/helpers.rb
380
383
  - lib/bridgetown-core/hooks.rb
381
384
  - lib/bridgetown-core/layout.rb
382
385
  - lib/bridgetown-core/liquid_extensions.rb
@@ -449,6 +452,7 @@ files:
449
452
  - lib/site_template/src/_posts/0000-00-00-welcome-to-bridgetown.md.erb
450
453
  - lib/site_template/src/about.md
451
454
  - lib/site_template/src/favicon.ico
455
+ - lib/site_template/src/images/.keep
452
456
  - lib/site_template/src/index.md
453
457
  - lib/site_template/src/posts.md
454
458
  - lib/site_template/start.js
@@ -478,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
478
482
  - !ruby/object:Gem::Version
479
483
  version: 2.7.0
480
484
  requirements: []
481
- rubygems_version: 3.0.6
485
+ rubygems_version: 3.1.4
482
486
  signing_key:
483
487
  specification_version: 4
484
488
  summary: A Webpack-aware, Ruby-based static site generator for the modern Jamstack