bridgetown-core 0.19.1 → 0.19.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/bridgetown-core.gemspec +2 -3
  3. data/lib/bridgetown-core.rb +1 -1
  4. data/lib/bridgetown-core/commands/apply.rb +4 -3
  5. data/lib/bridgetown-core/commands/configure.rb +62 -0
  6. data/lib/bridgetown-core/commands/new.rb +8 -0
  7. data/lib/bridgetown-core/commands/plugins.rb +1 -0
  8. data/lib/bridgetown-core/configurations/.keep +0 -0
  9. data/lib/bridgetown-core/configurations/bt-postcss.rb +26 -0
  10. data/lib/bridgetown-core/configurations/bt-postcss/postcss.config.js +21 -0
  11. data/lib/bridgetown-core/configurations/minitesting.rb +95 -0
  12. data/lib/bridgetown-core/configurations/netlify.rb +6 -0
  13. data/lib/bridgetown-core/configurations/netlify/netlify.sh +14 -0
  14. data/lib/bridgetown-core/configurations/netlify/netlify.toml +44 -0
  15. data/lib/bridgetown-core/configurations/purgecss.rb +49 -0
  16. data/lib/bridgetown-core/configurations/stimulus.rb +49 -0
  17. data/lib/bridgetown-core/configurations/swup.rb +37 -0
  18. data/lib/bridgetown-core/configurations/tailwindcss.rb +29 -0
  19. data/lib/bridgetown-core/configurations/tailwindcss/css_imports.css +4 -0
  20. data/lib/bridgetown-core/configurations/tailwindcss/postcss.config.js +12 -0
  21. data/lib/bridgetown-core/configurations/turbo.rb +16 -0
  22. data/lib/bridgetown-core/converters/erb_templates.rb +6 -13
  23. data/lib/bridgetown-core/filters.rb +1 -1
  24. data/lib/bridgetown-core/generator.rb +2 -1
  25. data/lib/bridgetown-core/plugin.rb +2 -26
  26. data/lib/bridgetown-core/ruby_template_view.rb +9 -1
  27. data/lib/bridgetown-core/version.rb +1 -1
  28. data/lib/site_template/README.md +70 -0
  29. metadata +22 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f0497ddff13959e277afd7d937fc399ddd660154df97b511846919f1aaedf73
4
- data.tar.gz: 1f623861feeb1404e1abfac2a4f60354eb57dffe73b32797b4440fba993a3aeb
3
+ metadata.gz: 82771f9cc6fa2993f61010025de7fab09c2be37d9dfb3f365d728a6dd3ed5b3a
4
+ data.tar.gz: ab1cfb7e45eac85bb80852b33ab4ca1f5cc69b52f6a1bde70ea1c70c39859005
5
5
  SHA512:
6
- metadata.gz: aaafe152fc932d7a34c328210b8c2f121367c17c1d03a79c0e80911c55e1db178ccdeacd705c2ee73e936a304e442a4faab57142787cd558c4cf0b3eb5caedfe
7
- data.tar.gz: dfd72e5a7e482ab18fb2d5f8e4e7eebc2461bc5904a978a59ae2125324280359150092c12dda49b9e3bfbdbe46ec0b9a25a9c2328311a746956d4706cb731abb
6
+ metadata.gz: 67ea143f786bf6825f6db8ffa4ba1ce336e5d20e6746bbb24a754df40e0ba5084c3a5a04b0965f7ee080de67f2312b79d0251f34d76174fd55ca3ba379667928
7
+ data.tar.gz: 2ad31567525e3b3633c4620088df104d2fe5ae65010ffadab04baa33982c960640430f16f13eeab6718c27ec2e66574e5aeeb30be90086ab2707a9f465e9d9c5
@@ -42,15 +42,14 @@ Gem::Specification.new do |s|
42
42
  s.add_runtime_dependency("i18n", "~> 1.0")
43
43
  s.add_runtime_dependency("kramdown", "~> 2.1")
44
44
  s.add_runtime_dependency("kramdown-parser-gfm", "~> 1.0")
45
- s.add_runtime_dependency("liquid", "~> 4.0")
45
+ s.add_runtime_dependency("liquid", "~> 5.0")
46
46
  s.add_runtime_dependency("liquid-component", ">= 0.1")
47
- s.add_runtime_dependency("liquid-render-tag", "~> 0.2")
48
47
  s.add_runtime_dependency("listen", "~> 3.0")
49
48
  s.add_runtime_dependency("pathutil", "~> 0.9")
50
49
  s.add_runtime_dependency("rouge", "~> 3.0")
51
50
  s.add_runtime_dependency("safe_yaml", "~> 1.0")
52
51
  s.add_runtime_dependency("terminal-table", "~> 1.8")
53
- s.add_runtime_dependency("thor", "~> 1.0")
52
+ s.add_runtime_dependency("thor", "~> 1.1")
54
53
  s.add_runtime_dependency("tilt", "~> 2.0")
55
54
  s.add_runtime_dependency("webrick", "~> 1.7")
56
55
  end
@@ -35,12 +35,12 @@ require "active_support/core_ext/object/blank"
35
35
  require "active_support/core_ext/string/inflections"
36
36
  require "active_support/core_ext/string/inquiry"
37
37
  require "active_support/core_ext/string/starts_ends_with"
38
+ require "active_support/descendants_tracker"
38
39
  require "hash_with_dot_access"
39
40
  require "pathutil"
40
41
  require "addressable/uri"
41
42
  require "safe_yaml/load"
42
43
  require "liquid"
43
- require "liquid-render-tag"
44
44
  require "liquid-component"
45
45
  require "kramdown"
46
46
  require "colorator"
@@ -26,6 +26,7 @@ module Bridgetown
26
26
 
27
27
  def apply_automation
28
28
  @source_paths = [Dir.pwd]
29
+ @logger = Bridgetown.logger
29
30
 
30
31
  if options[:apply]
31
32
  apply_after_new_command
@@ -33,9 +34,9 @@ module Bridgetown
33
34
  apply_in_pwd
34
35
  end
35
36
  rescue SystemExit => e
36
- Bridgetown.logger.error "Problem occurred while running automation:"
37
+ @logger.error "Problem occurred while running automation:"
37
38
  e.backtrace[0..3].each do |backtrace_line|
38
- Bridgetown.logger.info backtrace_line if backtrace_line.include?(":in `apply'")
39
+ @logger.info backtrace_line if backtrace_line.include?(":in `apply'")
39
40
  end
40
41
  raise e
41
42
  end
@@ -66,7 +67,7 @@ module Bridgetown
66
67
  apply_from_url automation_command
67
68
  end
68
69
  rescue ArgumentError => e
69
- Bridgetown.logger.warn "Oops!", e.message
70
+ @logger.warn "Oops!", e.message
70
71
  end
71
72
  end
72
73
  end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bridgetown
4
+ module Commands
5
+ class Configure < Thor::Group
6
+ include Thor::Actions
7
+ extend Summarizable
8
+
9
+ Registrations.register do
10
+ register(Configure, "configure", "configure CONFIGURATION", Configure.summary)
11
+ end
12
+
13
+ def self.banner
14
+ "bridgetown configure CONFIGURATION(S)"
15
+ end
16
+ summary "Set up bundled Bridgetown configurations"
17
+
18
+ def self.exit_on_failure?
19
+ true
20
+ end
21
+
22
+ def perform_configurations
23
+ logger = Bridgetown.logger
24
+ list_configurations if args.empty?
25
+
26
+ args.each do |configuration|
27
+ configure configuration
28
+ rescue Thor::Error
29
+ logger.error "Error:".red, "🚨 Configuration doesn't exist: #{configuration}"
30
+ end
31
+ end
32
+
33
+ def self.source_root
34
+ File.expand_path("../configurations", __dir__)
35
+ end
36
+
37
+ protected
38
+
39
+ def configure(configuration)
40
+ configuration_file = find_in_source_paths("#{configuration}.rb")
41
+
42
+ inside(New.created_site_dir || Dir.pwd) do
43
+ Apply.new.invoke(:apply_automation, [configuration_file])
44
+ end
45
+ end
46
+
47
+ def list_configurations
48
+ say "Please specify a valid packaged configuration from the below list:\n\n"
49
+ configurations.each do |configuration|
50
+ configuration = set_color configuration, :blue, :bold
51
+ say configuration
52
+ end
53
+ end
54
+
55
+ def configurations
56
+ inside self.class.source_root do
57
+ return Dir.glob("*.rb").map { |file| file.sub(".rb", "") }
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -19,6 +19,10 @@ module Bridgetown
19
19
  aliases: "-a",
20
20
  banner: "PATH|URL",
21
21
  desc: "Apply an automation after creating the site scaffold"
22
+ class_option :configure,
23
+ aliases: "-c",
24
+ banner: "CONFIGURATION(S)",
25
+ desc: "Comma separated list of bundled configurations to perform"
22
26
  class_option :force,
23
27
  type: :boolean,
24
28
  desc: "Force creation even if PATH already exists"
@@ -100,6 +104,7 @@ module Bridgetown
100
104
  # then automatically execute bundle install from within the new site dir
101
105
  # unless the user opts to skip 'bundle install'.
102
106
  # rubocop:todo Metrics/CyclomaticComplexity
107
+ # rubocop:disable Metrics/PerceivedComplexity
103
108
  def after_install(path, cli_path, options = {})
104
109
  git_init path
105
110
 
@@ -110,6 +115,7 @@ module Bridgetown
110
115
  yarn_install path unless options["skip-yarn"]
111
116
 
112
117
  invoke(Apply, [], options) if options[:apply]
118
+ invoke(Configure, options[:configure].split(","), {}) if options[:configure]
113
119
 
114
120
  logger = Bridgetown.logger
115
121
  yarn_start = "yarn start"
@@ -130,6 +136,7 @@ module Bridgetown
130
136
  logger.info "Yarn install skipped.".yellow if @skipped_yarn
131
137
  end
132
138
  # rubocop:enable Metrics/CyclomaticComplexity
139
+ # rubocop:enable Metrics/PerceivedComplexity
133
140
 
134
141
  def bundle_install(path)
135
142
  unless Bridgetown.environment == "test"
@@ -151,6 +158,7 @@ module Bridgetown
151
158
  unless Bridgetown.environment == "test"
152
159
  inside(path) do
153
160
  run "git init", abort_on_failure: true
161
+ run "if [[ -n $(git status | grep 'On branch master') ]]; then git checkout -b main; fi"
154
162
  end
155
163
  end
156
164
  rescue SystemExit
@@ -150,6 +150,7 @@ module Bridgetown
150
150
  inside name do # rubocop:todo Metrics/BlockLength
151
151
  run "rm -rf .git"
152
152
  run "git init"
153
+ run "if [[ -n $(git status | grep 'On branch master') ]]; then git checkout -b main; fi"
153
154
 
154
155
  run "mv bridgetown-sample-plugin.gemspec #{new_gemspec}"
155
156
  gsub_file new_gemspec, "https://github.com/bridgetownrb/bridgetown-sample-plugin", "https://github.com/username/#{name}"
File without changes
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable all
4
+
5
+ TEMPLATE_PATH = File.expand_path("./bt-postcss", __dir__)
6
+
7
+ begin
8
+ find_in_source_paths("postcss.config.js")
9
+ rescue Thor::Error
10
+ error_message = "#{"postcss.config.js".bold} not found. Please configure postcss in your project."
11
+
12
+ @logger.error "\nError:".red, "🚨 #{error_message}"
13
+ @logger.info "\nFor new projects, you can use #{"bridgetown new my_project --use-postcss".bold.blue}\n"
14
+
15
+ return
16
+ end
17
+
18
+ plugins = %w(postcss-easy-import postcss-mixins postcss-color-function cssnano)
19
+
20
+ say "Adding the following PostCSS plugins: #{plugins.join(' | ')}", :green
21
+ run "yarn add -D #{plugins.join(' ')}"
22
+
23
+ remove_file "postcss.config.js"
24
+ copy_file "#{TEMPLATE_PATH}/postcss.config.js", "postcss.config.js"
25
+
26
+ # rubocop:enable all
@@ -0,0 +1,21 @@
1
+ module.exports = {
2
+ plugins: {
3
+ 'postcss-easy-import': {},
4
+ 'postcss-mixins': {},
5
+ 'postcss-color-function': {},
6
+ 'postcss-flexbugs-fixes': {},
7
+ 'postcss-preset-env': {
8
+ autoprefixer: {
9
+ flexbox: 'no-2009'
10
+ },
11
+ stage: 2,
12
+ features: {
13
+ 'nesting-rules': true,
14
+ 'custom-media-queries': true
15
+ },
16
+ },
17
+ 'cssnano' : {
18
+ preset: 'default'
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable all
4
+
5
+ say_status :minitesting, "Adding test gems, package.json scripts, and examples"
6
+
7
+ append_to_file "Gemfile" do
8
+ <<~GEMS
9
+ \n
10
+ group :test, optional: true do
11
+ gem "nokogiri"
12
+ gem "minitest"
13
+ gem "minitest-profile"
14
+ gem "minitest-reporters"
15
+ gem "shoulda"
16
+ gem "rails-dom-testing"
17
+ end
18
+ GEMS
19
+ end
20
+
21
+ new_scripts = ' "test": "BRIDGETOWN_ENV=test yarn build",'
22
+ new_scripts += "\n" + ' "deploy:test": "bundle install --with test && yarn deploy"'
23
+ package_json = "package.json"
24
+ script_regex = %r{"scripts": \{(\s+".*,?)*}
25
+ inject_into_file(package_json, ",\n" + new_scripts, after: script_regex)
26
+
27
+ create_file "test/helper.rb" do
28
+ <<~RUBY
29
+ require "nokogiri"
30
+ require "minitest/autorun"
31
+ require "minitest/reporters"
32
+ require "minitest/profile"
33
+ require "shoulda"
34
+ require "rails-dom-testing"
35
+ # Report with color.
36
+ Minitest::Reporters.use! [
37
+ Minitest::Reporters::DefaultReporter.new(
38
+ color: true
39
+ ),
40
+ ]
41
+ Minitest::Test.class_eval do
42
+ include Rails::Dom::Testing::Assertions
43
+ def site
44
+ @site ||= Bridgetown.sites.first
45
+ end
46
+ def nokogiri(input)
47
+ input.respond_to?(:output) ? Nokogiri::HTML(input.output) : Nokogiri::HTML(input)
48
+ end
49
+ def document_root(root)
50
+ @document_root = root.is_a?(Nokogiri::XML::Document) ? root : nokogiri(root)
51
+ end
52
+ def document_root_element
53
+ if @document_root.nil?
54
+ raise "Call `document_root' with a Nokogiri document before testing your assertions"
55
+ end
56
+ @document_root
57
+ end
58
+ end
59
+ RUBY
60
+ end
61
+
62
+ create_file "test/test_homepage.rb" do
63
+ <<~RUBY
64
+ require_relative "./helper"
65
+ class TestHomepage < Minitest::Test
66
+ context "homepage" do
67
+ setup do
68
+ page = site.pages.find { |doc| doc.url == "/" }
69
+ document_root page
70
+ end
71
+ should "exist" do
72
+ assert_select "body"
73
+ end
74
+ end
75
+ end
76
+ RUBY
77
+ end
78
+
79
+ create_file "plugins/test_output.rb" do
80
+ <<~RUBY
81
+ unless Bridgetown.environment == "development"
82
+ Bridgetown::Hooks.register :site, :post_write do
83
+ # Load test suite to run on exit
84
+ require "nokogiri"
85
+ Dir["test/**/*.rb"].each { |file| require_relative("../\#{file}") }
86
+ rescue LoadError
87
+ Bridgetown.logger.warn "Testing:", "To run tests, you must first run \`bundle install --with test\`"
88
+ end
89
+ end
90
+ RUBY
91
+ end
92
+
93
+ say_status :minitesting, "All set! To get started, look at test/test_homepage.rb and then run \`yarn test\`"
94
+
95
+ # rubocop:enable all
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ TEMPLATE_PATH = File.expand_path("./netlify", __dir__)
4
+
5
+ copy_file "#{TEMPLATE_PATH}/netlify.toml", "netlify.toml"
6
+ copy_file "#{TEMPLATE_PATH}/netlify.sh", "bin/netlify.sh"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bash
2
+ # Taken from https://docs.netlify.com/configure-builds/file-based-configuration/#inject-environment-variable-values
3
+
4
+ echo "Updating netlify.toml with references to our built files"
5
+
6
+ CSS_PATH=`find output/_bridgetown/static/css/*.css -type f | sed -e 's,output\/,/,g'`
7
+ JS_PATH=`find output/_bridgetown/static/js/*.js -type f | sed -e 's,output\/,/,g'`
8
+
9
+ echo "CSS Path: ${CSS_PATH}"
10
+ echo "JS Path: ${JS_PATH}"
11
+
12
+ sed -i s,CSS_PATH,${CSS_PATH},g netlify.toml
13
+ sed -i s,JS_PATH,${JS_PATH},g netlify.toml
14
+ sed -i s,NETLIFY_IMAGES_CDN_DOMAIN,${NETLIFY_IMAGES_CDN_DOMAIN},g netlify.toml
@@ -0,0 +1,44 @@
1
+ [build]
2
+ command = "yarn deploy && ./bin/netlify.sh"
3
+ publish = "output"
4
+
5
+ [build.environment]
6
+ NODE_ENV = "development"
7
+ BRIDGETOWN_ENV = "production"
8
+
9
+ [build.processing]
10
+ skip_processing = false
11
+ [build.processing.css]
12
+ bundle = false
13
+ minify = true
14
+ [build.processing.js]
15
+ bundle = false
16
+ minify = true
17
+ [build.processing.html]
18
+ pretty_urls = true
19
+ [build.processing.images]
20
+ compress = true
21
+
22
+ [[headers]]
23
+ for = "*"
24
+ [headers.values]
25
+ X-Frame-Options = "DENY"
26
+ X-XSS-Protection = "1; mode=block"
27
+ X-Content-Type-Options = "nosniff"
28
+ Strict-Transport-Security = "max-age=15552000; includeSubDomains"
29
+ Referrer-Policy = "no-referrer-when-downgrade"
30
+ Cache-Control = "public, max-age=604800, s-max-age=604800"
31
+
32
+ [[headers]]
33
+ for = "/"
34
+ [headers.values]
35
+ Link = [
36
+ "<CSS_PATH>; rel=preload; as=style",
37
+ "<JS_PATH>; rel=preload; as=script",
38
+ "<https://NETLIFY_IMAGES_CDN_DOMAIN>; rel=preconnect"
39
+ ]
40
+
41
+ [[headers]]
42
+ for = "/*.(png|jpg|js|css|svg|woff|ttf|eot|ico|woff2)"
43
+ [headers.values]
44
+ Cache-Control = "public, max-age=31536000, s-max-age=31536000"
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable all
4
+
5
+ say_status :purgecss, "Installing PurgeCSS"
6
+
7
+ run "yarn add -D purgecss"
8
+
9
+ create_builder "purgecss_builder.rb" do
10
+ <<~RUBY
11
+ class PurgeCSS < SiteBuilder
12
+ def build
13
+ unless config[:watch] # don't run in "watch mode"
14
+ hook :site, :post_write do
15
+ purgecss_file = site.in_root_dir("purgecss.config.js")
16
+ unless File.exist?(purgecss_file)
17
+ config_js = <<~PURGE
18
+ module.exports = {
19
+ content: ['frontend/javascript/*.js','./output/**/*.html'],
20
+ output: "./output/_bridgetown/static/css"
21
+ }
22
+ PURGE
23
+ File.write(purgecss_file, config_js.strip)
24
+ end
25
+ manifest_file = site.in_root_dir(".bridgetown-webpack", "manifest.json")
26
+ if File.exist?(manifest_file)
27
+ manifest = JSON.parse(File.read(manifest_file))
28
+ css_file = manifest["main.css"].split("/").last
29
+ css_path = ["output", "_bridgetown", "static", "css", css_file].join("/")
30
+ Bridgetown.logger.info "PurgeCSS", "Purging \#{css_file}"
31
+ oldsize = File.stat(css_path).size / 1000
32
+ system "./node_modules/.bin/purgecss -c purgecss.config.js -css \#{css_path}"
33
+ newsize = File.stat(css_path).size / 1000
34
+ if newsize < oldsize
35
+ Bridgetown.logger.info "PurgeCSS", "Done! File size reduced from \#{oldsize}kB to \#{newsize}kB"
36
+ else
37
+ Bridgetown.logger.info "PurgeCSS", "Done. No apparent change in file size (\#{newsize}kB)."
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ RUBY
45
+ end
46
+
47
+ say_status :purgecss, "All set! Open plugins/builders/purgecss_builder.rb if you'd like to customize the PurgeCSS config."
48
+
49
+ # rubocop:enable all
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+
5
+ say "Installing Stimulus...", :green
6
+
7
+ run("yarn add stimulus")
8
+
9
+ say 'Adding Stimulus to "frontend/javascript/index.js"...', :magenta
10
+
11
+ javascript_import do
12
+ <<~JS
13
+ import { Application } from "stimulus"
14
+ import { definitionsFromContext } from "stimulus/webpack-helpers"
15
+ JS
16
+ end
17
+
18
+ javascript_dir = File.join("frontend", "javascript")
19
+
20
+ append_to_file(File.join(javascript_dir, "index.js")) do
21
+ <<~JS
22
+ const application = Application.start()
23
+ const context = require.context("./controllers", true, /\.js$/)
24
+ application.load(definitionsFromContext(context))
25
+ JS
26
+ end
27
+
28
+ controller_dir = File.join(javascript_dir, "controllers")
29
+
30
+ say "Creating a `./#{controller_dir}` directory...", :magenta
31
+ FileUtils.mkdir_p(controller_dir)
32
+
33
+ say "Creating an example Stimulus Controller for you!...", :magenta
34
+ create_file(File.join(controller_dir, "example_controller.js")) do
35
+ <<~JS
36
+ import { Controller } from "stimulus"
37
+ export default class extends Controller {
38
+ connect() {
39
+ console.log("Hello, Stimulus!", this.element)
40
+ }
41
+ }
42
+ JS
43
+ end
44
+
45
+ say "Stimulus successfully added", :green
46
+
47
+ say "To start adding controllers, visit the `./frontend/javascript/controllers/` directory", :blue
48
+ say "Make sure your controllers follow the `[name]_controller.js` convention", :blue
49
+ say 'For further reading, check out "https://stimulus.hotwire.dev/"', :blue
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable all
4
+
5
+ packages = "swup @swup/body-class-plugin @swup/scroll-plugin @swup/fade-theme"
6
+ say_status :swup, "Adding the following yarn packages: #{packages}"
7
+ system("yarn add #{packages}")
8
+
9
+ javascript_import do
10
+ <<~JS
11
+ import Swup from "swup"
12
+ import SwupBodyClassPlugin from "@swup/body-class-plugin"
13
+ import SwupScrollPlugin from "@swup/scroll-plugin"
14
+ import SwupFadeTheme from "@swup/fade-theme"
15
+ const swup = new Swup({
16
+ plugins: [
17
+ new SwupBodyClassPlugin(),
18
+ new SwupScrollPlugin(),
19
+ new SwupFadeTheme(),
20
+ ]
21
+ })
22
+ JS
23
+ end
24
+
25
+ css_index = File.exist?(File.expand_path("frontend/styles/index.scss", destination_root)) ? "frontend/styles/index.scss" : "frontend/styles/index.css"
26
+ append_to_file css_index do
27
+ <<~CSS
28
+ .swup-transition-main {
29
+ transition: opacity .2s;
30
+ }
31
+ CSS
32
+ end
33
+
34
+ say_status :swup, "All done! Edit .swup-transition-main in #{css_index} if you wish to adjust the transition animation"
35
+ say_status :swup, "Make sure you add id=\"swup\" to the primary container of your HTML layout (perhaps <main>)"
36
+
37
+ # rubocop:enable all
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable all
4
+
5
+ TEMPLATE_PATH = File.expand_path("./tailwindcss", __dir__)
6
+
7
+ begin
8
+ find_in_source_paths("postcss.config.js")
9
+ rescue Thor::Error
10
+ error_message = "#{"postcss.config.js".bold} not found. Please configure postcss in your project."
11
+
12
+ @logger.error "\nError:".red, "🚨 #{error_message}"
13
+ @logger.info "\nFor new projects, you can use #{"bridgetown new my_project --use-postcss".bold.blue}\n"
14
+
15
+ return
16
+ end
17
+
18
+ run "yarn add -D tailwindcss"
19
+ run "npx tailwindcss init"
20
+
21
+ remove_file "postcss.config.js"
22
+ copy_file "#{TEMPLATE_PATH}/postcss.config.js", "postcss.config.js"
23
+
24
+ prepend_to_file "frontend/styles/index.css",
25
+ File.read("#{TEMPLATE_PATH}/css_imports.css")
26
+
27
+ run "bundle exec bridgetown configure purgecss"
28
+
29
+ # rubocop:enable all
@@ -0,0 +1,4 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
@@ -0,0 +1,12 @@
1
+ module.exports = {
2
+ plugins: {
3
+ 'tailwindcss': {},
4
+ 'postcss-flexbugs-fixes': {},
5
+ 'postcss-preset-env': {
6
+ autoprefixer: {
7
+ flexbox: 'no-2009'
8
+ },
9
+ stage: 3
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ say "Installing Turbo...", :green
4
+
5
+ run("yarn add @hotwired/turbo")
6
+
7
+ say 'Adding Turbo to "frontend/javascript/index.js"...', :magenta
8
+
9
+ javascript_import do
10
+ <<~JS
11
+ import Turbo from "@hotwired/turbo"
12
+ JS
13
+ end
14
+
15
+ say "Turbo successfully added", :green
16
+ say 'For further reading, check out "https://turbo.hotwire.dev/"', :blue
@@ -65,24 +65,17 @@ module Bridgetown
65
65
  block.nil? ? input.to_s : capture(&block)
66
66
  )
67
67
  converter = site.find_converter_instance(Bridgetown::Converters::Markdown)
68
- converter.convert(content).strip
68
+ result = converter.convert(content).strip
69
+ result.respond_to?(:html_safe) ? result.html_safe : result
69
70
  end
70
71
 
71
- def capture(obj = nil, &block)
72
+ def capture(*args, &block)
73
+ return capture_in_view_component(*args, &block) if @in_view_component
74
+
72
75
  previous_buffer_state = @_erbout
73
76
  @_erbout = ERBBuffer.new
74
-
75
- # For compatibility with ActionView, not used by Bridgetown normally
76
- previous_ob_state = @output_buffer
77
- @output_buffer = ERBBuffer.new
78
-
79
- result = instance_exec(obj, &block)
80
- if @output_buffer != ""
81
- # use Rails' ActionView buffer if present
82
- result = @output_buffer
83
- end
77
+ result = yield(*args)
84
78
  @_erbout = previous_buffer_state
85
- @output_buffer = previous_ob_state
86
79
 
87
80
  result.respond_to?(:html_safe) ? result.html_safe : result
88
81
  end
@@ -375,7 +375,7 @@ module Bridgetown
375
375
  case target
376
376
  when NilClass
377
377
  return true if property.nil?
378
- when Liquid::Expression::MethodLiteral # `empty` or `blank`
378
+ when "" # aka `empty` or `blank`
379
379
  target = target.to_s
380
380
  return true if property == target || Array(property).join == target
381
381
  else
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- Generator = Class.new(Plugin)
4
+ class Generator < Plugin
5
+ end
5
6
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Bridgetown
4
4
  class Plugin
5
+ extend ActiveSupport::DescendantsTracker
6
+
5
7
  PRIORITIES = {
6
8
  low: -10,
7
9
  highest: 100,
@@ -12,32 +14,6 @@ module Bridgetown
12
14
 
13
15
  SourceManifest = Struct.new(:origin, :components, :content, :layouts, keyword_init: true)
14
16
 
15
- #
16
-
17
- def self.inherited(const)
18
- catch_inheritance(const) do |const_|
19
- catch_inheritance(const_)
20
- end
21
- end
22
-
23
- #
24
-
25
- def self.catch_inheritance(const)
26
- const.define_singleton_method :inherited do |const_|
27
- (@children ||= Set.new).add const_
28
- yield const_ if block_given?
29
- end
30
- end
31
-
32
- #
33
-
34
- def self.descendants
35
- @children ||= Set.new
36
- out = @children.map(&:descendants)
37
- out << self unless superclass == Plugin
38
- Set.new(out).flatten
39
- end
40
-
41
17
  # Get or set the priority of this plugin. When called without an
42
18
  # argument it returns the priority. When an argument is given, it will
43
19
  # set the priority.
@@ -27,7 +27,15 @@ module Bridgetown
27
27
 
28
28
  def render(item, options = {}, &block)
29
29
  if item.respond_to?(:render_in)
30
- item.render_in(self, &block)
30
+ previous_buffer_state = @_erbout
31
+ @_erbout = Bridgetown::ERBBuffer.new
32
+
33
+ @in_view_component ||= defined?(::ViewComponent::Base) && item.is_a?(::ViewComponent::Base)
34
+ result = item.render_in(self, &block)
35
+ @in_view_component = false
36
+
37
+ @_erbout = previous_buffer_state
38
+ result
31
39
  else
32
40
  partial(item, options, &block)
33
41
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "0.19.1"
4
+ VERSION = "0.19.2"
5
5
  CODE_NAME = "Arbor Lodge"
6
6
  end
@@ -0,0 +1,70 @@
1
+ # Bridgetown Website README
2
+
3
+ Welcome to your new Bridgetown website! You can update this README file to provide additional context and setup information for yourself or other contributors.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Prerequisites](#prerequisites)
8
+ - [Install](#install)
9
+ - [Development](#development)
10
+ - [Commands](#commands)
11
+ - [Deployment](#deployment)
12
+ - [Contributing](#contributing)
13
+
14
+ ## Prerequisites
15
+
16
+ - [GCC](https://gcc.gnu.org/install/)
17
+ - [Make](https://www.gnu.org/software/make/)
18
+ - [Ruby](https://www.ruby-lang.org/en/downloads/)
19
+ - `>= 2.5`
20
+ - [Bridgetown Gem](https://rubygems.org/gems/bridgetown)
21
+ - `gem install bundler bridgetown -N`
22
+ - [Node](https://nodejs.org)
23
+ - `>= 10.13`
24
+ - [Yarn](https://yarnpkg.com)
25
+
26
+ ## Install
27
+
28
+ ```sh
29
+ cd bridgetown-site-folder
30
+ bundle install && yarn install
31
+ ```
32
+ > Learn more: [Bridgetown Getting Started Documentation](https://www.bridgetownrb.com/docs/).
33
+
34
+ ## Development
35
+
36
+ To start your site in development mode, run `yarn start` and navigate to [localhost:4000](https://localhost:4000/)!
37
+
38
+ Use a [theme](https://github.com/topics/bridgetown-theme), add some [plugins](https://www.bridgetownrb.com/plugins/), and/or run some [automations](https://github.com/topics/bridgetown-automation) to get started quickly.
39
+
40
+ ### Commands
41
+
42
+ ```sh
43
+ # running locally
44
+ yarn start
45
+
46
+ # build & deploy to production
47
+ yarn deploy
48
+
49
+ # load the site up within a Ruby console (IRB)
50
+ bundle exec bridgetown console
51
+ ```
52
+
53
+ > Learn more: [Bridgetown CLI Documentation](https://www.bridgetownrb.com/docs/command-line-usage)
54
+
55
+ ## Deployment
56
+
57
+ You can deploy Bridgetown sites on "Jamstack" hosts (Netlify, Vercel, Render, etc.) or virtually any tranditional web server by simply building and copying the output folder to your HTML root.
58
+
59
+ > Read the [Bridgetown Deployment Documentation](https://www.bridgetownrb.com/docs/deployment) for more information.
60
+
61
+ ## Contributing
62
+
63
+ If repo is on GitHub:
64
+
65
+ 1. Fork it
66
+ 2. Clone the fork using `git clone` to your local development machine.
67
+ 3. Create your feature branch (`git checkout -b my-new-feature`)
68
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
69
+ 5. Push to the branch (`git push origin my-new-feature`)
70
+ 6. Create a new Pull Request
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.19.1
4
+ version: 0.19.2
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-12-26 00:00:00.000000000 Z
11
+ date: 2021-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '4.0'
173
+ version: '5.0'
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '4.0'
180
+ version: '5.0'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: liquid-component
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -192,20 +192,6 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0.1'
195
- - !ruby/object:Gem::Dependency
196
- name: liquid-render-tag
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '0.2'
202
- type: :runtime
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '0.2'
209
195
  - !ruby/object:Gem::Dependency
210
196
  name: listen
211
197
  requirement: !ruby/object:Gem::Requirement
@@ -282,14 +268,14 @@ dependencies:
282
268
  requirements:
283
269
  - - "~>"
284
270
  - !ruby/object:Gem::Version
285
- version: '1.0'
271
+ version: '1.1'
286
272
  type: :runtime
287
273
  prerelease: false
288
274
  version_requirements: !ruby/object:Gem::Requirement
289
275
  requirements:
290
276
  - - "~>"
291
277
  - !ruby/object:Gem::Version
292
- version: '1.0'
278
+ version: '1.1'
293
279
  - !ruby/object:Gem::Dependency
294
280
  name: tilt
295
281
  requirement: !ruby/object:Gem::Requirement
@@ -342,6 +328,7 @@ files:
342
328
  - lib/bridgetown-core/commands/concerns/build_options.rb
343
329
  - lib/bridgetown-core/commands/concerns/configuration_overridable.rb
344
330
  - lib/bridgetown-core/commands/concerns/summarizable.rb
331
+ - lib/bridgetown-core/commands/configure.rb
345
332
  - lib/bridgetown-core/commands/console.rb
346
333
  - lib/bridgetown-core/commands/doctor.rb
347
334
  - lib/bridgetown-core/commands/new.rb
@@ -362,6 +349,20 @@ files:
362
349
  - lib/bridgetown-core/concerns/site/writable.rb
363
350
  - lib/bridgetown-core/concerns/validatable.rb
364
351
  - lib/bridgetown-core/configuration.rb
352
+ - lib/bridgetown-core/configurations/.keep
353
+ - lib/bridgetown-core/configurations/bt-postcss.rb
354
+ - lib/bridgetown-core/configurations/bt-postcss/postcss.config.js
355
+ - lib/bridgetown-core/configurations/minitesting.rb
356
+ - lib/bridgetown-core/configurations/netlify.rb
357
+ - lib/bridgetown-core/configurations/netlify/netlify.sh
358
+ - lib/bridgetown-core/configurations/netlify/netlify.toml
359
+ - lib/bridgetown-core/configurations/purgecss.rb
360
+ - lib/bridgetown-core/configurations/stimulus.rb
361
+ - lib/bridgetown-core/configurations/swup.rb
362
+ - lib/bridgetown-core/configurations/tailwindcss.rb
363
+ - lib/bridgetown-core/configurations/tailwindcss/css_imports.css
364
+ - lib/bridgetown-core/configurations/tailwindcss/postcss.config.js
365
+ - lib/bridgetown-core/configurations/turbo.rb
365
366
  - lib/bridgetown-core/converter.rb
366
367
  - lib/bridgetown-core/converters/erb_templates.rb
367
368
  - lib/bridgetown-core/converters/identity.rb
@@ -448,6 +449,7 @@ files:
448
449
  - lib/bridgetown-core/watcher.rb
449
450
  - lib/site_template/.gitignore
450
451
  - lib/site_template/Gemfile.erb
452
+ - lib/site_template/README.md
451
453
  - lib/site_template/bridgetown.config.yml
452
454
  - lib/site_template/frontend/javascript/index.js.erb
453
455
  - lib/site_template/frontend/styles/index.css