tailwindcss-rails 0.3.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ require "rails/generators/erb/controller/controller_generator"
2
+
3
+ module Tailwindcss
4
+ module Generators
5
+ class ControllerGenerator < Erb::Generators::ControllerGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ <div>
2
+ <h1 class="text-lg font-bold text-4xl"><%= class_name %>#<%= @action %></h1>
3
+ <p>Find me in <%= @path %></p>
4
+ </div>
@@ -0,0 +1,9 @@
1
+ require "rails/generators/erb/mailer/mailer_generator"
2
+
3
+ module Tailwindcss
4
+ module Generators
5
+ class MailerGenerator < Erb::Generators::MailerGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ <h1><%= class_name %>#<%= @action %></h1>
2
+
3
+ <p>
4
+ <%%= @greeting %>, find me in <%= @path %>
5
+ </p>
@@ -0,0 +1,3 @@
1
+ <%= class_name %>#<%= @action %>
2
+
3
+ <%%= @greeting %>, find me in <%= @path %>
@@ -0,0 +1,34 @@
1
+ require 'rails/generators/erb/scaffold/scaffold_generator'
2
+ require "rails/generators/resource_helpers"
3
+
4
+ module Tailwindcss
5
+ module Generators
6
+ class ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
7
+ include Rails::Generators::ResourceHelpers
8
+
9
+ source_root File.expand_path("../templates", __FILE__)
10
+
11
+ argument :attributes, type: :array, default: [], banner: "field:type field:type"
12
+
13
+ def create_root_folder
14
+ empty_directory File.join("app/views", controller_file_path)
15
+ end
16
+
17
+ def copy_view_files
18
+ available_views.each do |view|
19
+ formats.each do |format|
20
+ filename = filename_with_extensions(view, format)
21
+ template filename, File.join("app/views", controller_file_path, filename)
22
+ end
23
+ end
24
+
25
+ template "partial.html.erb", File.join("app/views", controller_file_path, "_#{singular_table_name}.html.erb")
26
+ end
27
+
28
+ private
29
+ def available_views
30
+ %w(index edit show new _form)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ <%%= form_with(model: <%= model_resource_name %>, class: "contents") do |form| %>
2
+ <%% if <%= singular_table_name %>.errors.any? %>
3
+ <div id="error_explanation" class="bg-red-50 text-red-500 px-3 py-2 font-medium rounded-lg mt-3">
4
+ <h2><%%= pluralize(<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
5
+
6
+ <ul>
7
+ <%% <%= singular_table_name %>.errors.each do |error| %>
8
+ <li><%%= error.full_message %></li>
9
+ <%% end %>
10
+ </ul>
11
+ </div>
12
+ <%% end %>
13
+
14
+ <% attributes.each do |attribute| -%>
15
+ <div class="my-5">
16
+ <% if attribute.password_digest? -%>
17
+ <%%= form.label :password %>
18
+ <%%= form.password_field :password %>
19
+ </div>
20
+
21
+ <div class="my-5">
22
+ <%%= form.label :password_confirmation %>
23
+ <%%= form.password_field :password_confirmation, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
24
+ <% elsif attribute.attachments? -%>
25
+ <%%= form.label :<%= attribute.column_name %> %>
26
+ <%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, multiple: true, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
27
+ <% else -%>
28
+ <%%= form.label :<%= attribute.column_name %> %>
29
+ <% if attribute.field_type == :text_area -%>
30
+ <%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, rows: 4, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
31
+ <% elsif attribute.field_type == :check_box -%>
32
+ <%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: "block mt-2 h-5 w-5" %>
33
+ <% else -%>
34
+ <%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
35
+ <% end -%>
36
+ <% end -%>
37
+ </div>
38
+
39
+ <% end -%>
40
+ <div class="inline">
41
+ <%%= form.submit class: "rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium cursor-pointer" %>
42
+ </div>
43
+ <%% end %>
@@ -0,0 +1,8 @@
1
+ <div class="mx-auto md:w-2/3 w-full">
2
+ <h1 class="font-bold text-4xl">Editing <%= human_name.downcase %></h1>
3
+
4
+ <%%= render "form", <%= singular_table_name %>: @<%= singular_table_name %> %>
5
+
6
+ <%%= link_to "Show this <%= human_name.downcase %>", @<%= singular_table_name %>, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
7
+ <%%= link_to "Back to <%= human_name.pluralize.downcase %>", <%= index_helper %>_path, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
8
+ </div>
@@ -0,0 +1,14 @@
1
+ <div class="w-full">
2
+ <%% if notice.present? %>
3
+ <p class="py-2 px-3 bg-green-50 mb-5 text-green-500 font-medium rounded-lg inline-block" id="notice"><%%= notice %></p>
4
+ <%% end %>
5
+
6
+ <div class="flex justify-between items-center">
7
+ <h1 class="text-lg font-bold text-4xl"><%= human_name.pluralize %></h1>
8
+ <%%= link_to 'New <%= human_name.downcase %>', new_<%= singular_route_name %>_path, class: "rounded-lg py-3 px-5 bg-blue-600 text-white block font-medium" %>
9
+ </div>
10
+
11
+ <div id="<%= plural_table_name %>" class="min-w-full">
12
+ <%%= render @<%= plural_table_name %> %>
13
+ </div>
14
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="mx-auto md:w-2/3 w-full">
2
+ <h1 class="text-lg font-bold text-4xl">New <%= human_name.downcase %></h1>
3
+
4
+ <%%= render "form", <%= singular_table_name %>: @<%= singular_table_name %> %>
5
+
6
+ <%%= link_to 'Back to <%= human_name.pluralize.downcase %>', <%= index_helper %>_path, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
7
+ </div>
@@ -0,0 +1,22 @@
1
+ <div id="<%%= dom_id <%= singular_table_name %> %>">
2
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
3
+ <p class="my-5">
4
+ <strong class="block font-medium mb-1"><%= attribute.human_name %>:</strong>
5
+ <% if attribute.attachment? -%>
6
+ <%%= link_to <%= singular_table_name %>.<%= attribute.column_name %>.filename, <%= singular_table_name %>.<%= attribute.column_name %> if <%= singular_table_name %>.<%= attribute.column_name %>.attached? %>
7
+ <% elsif attribute.attachments? -%>
8
+ <%% <%= singular_table_name %>.<%= attribute.column_name %>.each do |<%= attribute.singular_name %>| %>
9
+ <div><%%= link_to <%= attribute.singular_name %>.filename, <%= attribute.singular_name %> %></div>
10
+ <%% end %>
11
+ <% else -%>
12
+ <%%= <%= singular_table_name %>.<%= attribute.column_name %> %>
13
+ <% end -%>
14
+ </p>
15
+
16
+ <% end -%>
17
+ <%% if action_name != "show" %>
18
+ <%%= link_to "Show this <%= human_name.downcase %>", <%= singular_table_name %>, class: "rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
19
+ <%%= link_to 'Edit this <%= human_name.downcase %>', edit_<%= singular_table_name %>_path(<%= singular_table_name %>), class: "rounded-lg py-3 ml-2 px-5 bg-gray-100 inline-block font-medium" %>
20
+ <hr class="mt-6">
21
+ <%% end %>
22
+ </div>
@@ -0,0 +1,15 @@
1
+ <div class="mx-auto md:w-2/3 w-full flex">
2
+ <div class="mx-auto">
3
+ <%% if notice.present? %>
4
+ <p class="py-2 px-3 bg-green-50 mb-5 text-green-500 font-medium rounded-lg inline-block" id="notice"><%%= notice %></p>
5
+ <%% end %>
6
+
7
+ <%%= render @<%= singular_table_name %> %>
8
+
9
+ <%%= link_to 'Edit this <%= singular_table_name %>', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>), class: "mt-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
10
+ <div class="inline-block ml-2">
11
+ <%%= button_to 'Destroy this <%= singular_table_name %>', <%= singular_table_name %>_path(@<%= singular_table_name %>), method: :delete, data: { confirm: "Are you sure you want to delete this <%= singular_table_name %>?" }, class: "mt-2 rounded-lg py-3 px-5 bg-gray-100 font-medium" %>
12
+ </div>
13
+ <%%= link_to 'Back to <%= plural_table_name %>', <%= index_helper %>_path, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
14
+ </div>
15
+ </div>
@@ -0,0 +1,22 @@
1
+ APPLICATION_LAYOUT_PATH = Rails.root.join("app/views/layouts/application.html.erb")
2
+
3
+ if APPLICATION_LAYOUT_PATH.exist?
4
+ say "Add Tailwindcss include tags and container element in application layout"
5
+ insert_into_file APPLICATION_LAYOUT_PATH.to_s, <<~ERB.indent(4), before: /^\s*<%= stylesheet_link_tag/
6
+ <%= stylesheet_link_tag "inter-font", "data-turbo-track": "reload" %>
7
+ <%= stylesheet_link_tag "tailwind", "data-turbo-track": "reload" %>
8
+ ERB
9
+ insert_into_file APPLICATION_LAYOUT_PATH.to_s, %( <main class="container mx-auto mt-28 px-5 flex">\n ), before: /^\s*<%= yield/
10
+ insert_into_file APPLICATION_LAYOUT_PATH.to_s, %(\n </main>), after: /^\s*<%= yield %>/
11
+ else
12
+ say "Default application.html.erb is missing!", :red
13
+ say %( Add <%= stylesheet_link_tag "inter-font", "data-turbo-track": "reload" %> and <%= stylesheet_link_tag "tailwind", "data-turbo-track": "reload" %> within the <head> tag in your custom layout.)
14
+ end
15
+
16
+ # No longer included by default in Rails 7, but for earlier versions of Rails
17
+ if (scaffolds_css_path = Rails.root.join("app/assets/stylesheets/scaffolds.scss")).exist?
18
+ remove_file scaffolds_css_path
19
+ end
20
+
21
+ say "Turn on purging of unused css classes in production"
22
+ gsub_file Rails.root.join("config/environments/production.rb"), /^\s+#?\s+config.assets.css_compressor =.*$/, %( config.assets.css_compressor = :purger)
@@ -10,8 +10,8 @@ class Tailwindcss::Compressor
10
10
  end
11
11
 
12
12
  def initialize(options = {})
13
- @options = {
14
- files_with_class_names: Rails.root.glob("app/views/**/*.*") + Rails.root.glob("app/helpers/**/*.rb"),
13
+ @options = {
14
+ files_with_class_names: files_with_class_names,
15
15
  only_purge: %w[ tailwind ]
16
16
  }.merge(options).freeze
17
17
  end
@@ -23,4 +23,11 @@ class Tailwindcss::Compressor
23
23
  input[:data]
24
24
  end
25
25
  end
26
+
27
+ private
28
+ def files_with_class_names
29
+ Rails.root.glob("app/views/**/*.*") +
30
+ Rails.root.glob("app/helpers/**/*.rb") +
31
+ Rails.root.glob("app/javascript/**/*.js")
32
+ end
26
33
  end
@@ -1,3 +1,4 @@
1
+ require "rails"
1
2
  require "tailwindcss/compressor"
2
3
 
3
4
  module Tailwindcss
@@ -19,5 +20,9 @@ module Tailwindcss
19
20
  env.cache = ActiveSupport::Cache.lookup_store(:null_store)
20
21
  end if Rails.env.production?
21
22
  end
23
+
24
+ config.app_generators do |g|
25
+ g.template_engine :tailwindcss
26
+ end
22
27
  end
23
28
  end
@@ -1,8 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Tailwindcss::Purger
2
- CLASS_NAME_PATTERN = /([:A-Za-z0-9_-]+[\.\\\/:A-Za-z0-9_-]*)/
3
- OPENING_SELECTOR_PATTERN = /\..*\{/
4
- CLOSING_SELECTOR_PATTERN = /\s*\}/
5
- NEWLINE = "\n"
4
+ CLASS_NAME_PATTERN = /((?:[:A-Za-z0-9_-]+[\\\/:A-Za-z0-9_-]*[0-3][\\.]*5)|(?:[A-Za-z0-9_-]+[\\\/:A-Za-z0-9_-]*))/
5
+
6
+ CLASS_BREAK = /(?![-_a-z0-9\\])/i # `\b` for class selectors
7
+
8
+ COMMENT = /#{Regexp.escape "/*"}.*?#{Regexp.escape "*/"}/m
9
+ COMMENTS_AND_BLANK_LINES = /\A(?:^#{COMMENT}?[ \t]*(?:\n|\z)|[ \t]*#{COMMENT})+/
10
+
11
+ AT_RULE = /@[^{]+/
12
+ CLASSLESS_SELECTOR_GROUP = /[^.{]+/
13
+ CLASSLESS_BEGINNING_OF_BLOCK = /\A\s*(?:#{AT_RULE}|#{CLASSLESS_SELECTOR_GROUP})\{\n?/
14
+
15
+ SELECTOR_GROUP = /[^{]+/
16
+ BEGINNING_OF_BLOCK = /\A#{SELECTOR_GROUP}\{\n?/
17
+
18
+ PROPERTY_NAME = /[-_a-z0-9]+/i
19
+ PROPERTY_VALUE = /(?:[^;]|;\S)+/
20
+ PROPERTIES = /\A(?:\s*#{PROPERTY_NAME}:#{PROPERTY_VALUE};\n?)+/
21
+
22
+ END_OF_BLOCK = /\A\s*\}\n?/
6
23
 
7
24
  attr_reader :keep_these_class_names
8
25
 
@@ -12,11 +29,15 @@ class Tailwindcss::Purger
12
29
  end
13
30
 
14
31
  def extract_class_names(string)
15
- string.scan(CLASS_NAME_PATTERN).flatten.uniq.sort
32
+ string.scan(CLASS_NAME_PATTERN).flatten.uniq.sort!
16
33
  end
17
34
 
18
35
  def extract_class_names_from(files)
19
- Array(files).flat_map { |file| extract_class_names(file.read) }.uniq.sort
36
+ Array(files).flat_map { |file| extract_class_names(file.read) }.uniq.sort!
37
+ end
38
+
39
+ def escape_class_selector(class_name)
40
+ class_name.gsub(/\A\d|[^-_a-z0-9]/, '\\\\\0')
20
41
  end
21
42
  end
22
43
 
@@ -25,40 +46,79 @@ class Tailwindcss::Purger
25
46
  end
26
47
 
27
48
  def purge(input)
28
- inside_kept_selector = inside_ignored_selector = false
29
- output = []
30
-
31
- input.split(NEWLINE).each do |line|
32
- case
33
- when inside_kept_selector
34
- output << line
35
- inside_kept_selector = false if line =~ CLOSING_SELECTOR_PATTERN
36
- when inside_ignored_selector
37
- inside_ignored_selector = false if line =~ CLOSING_SELECTOR_PATTERN
38
- when line =~ OPENING_SELECTOR_PATTERN
39
- if keep_these_class_names.include? class_name_in(line)
40
- output << line
41
- inside_kept_selector = true
42
- else
43
- inside_ignored_selector = true
44
- end
45
- else
46
- output << line
47
- end
49
+ conveyor = Conveyor.new(input)
50
+
51
+ until conveyor.done?
52
+ conveyor.discard(COMMENTS_AND_BLANK_LINES) \
53
+ or conveyor.conditionally_keep(PROPERTIES) { conveyor.staged_output.last != "" } \
54
+ or conveyor.conditionally_keep(END_OF_BLOCK) { not conveyor.staged_output.pop } \
55
+ or conveyor.stage_output(CLASSLESS_BEGINNING_OF_BLOCK) \
56
+ or conveyor.stage_output(BEGINNING_OF_BLOCK) { |match| purge_beginning_of_block(match.to_s) } \
57
+ or raise "infinite loop"
48
58
  end
49
59
 
50
- separated_without_empty_lines(output)
60
+ conveyor.output
51
61
  end
52
62
 
53
63
  private
54
- def class_name_in(line)
55
- CLASS_NAME_PATTERN.match(line)[1]
56
- .remove("\\")
57
- .remove(/:(focus|hover)(-within)?/)
58
- .remove("::placeholder").remove("::-moz-placeholder").remove(":-ms-input-placeholder")
64
+ def keep_these_selectors_pattern
65
+ @keep_these_selectors_pattern ||= begin
66
+ escaped_classes = @keep_these_class_names.map { |name| Regexp.escape self.class.escape_class_selector(name) }
67
+ /(?:\A|,)[^.,{]*(?:[.](?:#{escaped_classes.join("|")})#{CLASS_BREAK}[^.,{]*)*(?=[,{])/
68
+ end
69
+ end
70
+
71
+ def purge_beginning_of_block(string)
72
+ purged = string.scan(keep_these_selectors_pattern).join
73
+ unless purged.empty?
74
+ purged.sub!(/\A,\s*/, "")
75
+ purged.rstrip!
76
+ purged << " {\n"
77
+ end
78
+ purged
59
79
  end
60
80
 
61
- def separated_without_empty_lines(output)
62
- output.reject { |line| line.strip.empty? }.join(NEWLINE)
81
+ class Conveyor
82
+ attr_reader :output, :staged_output
83
+
84
+ def initialize(input, output = +"")
85
+ @input = input
86
+ @output = output
87
+ @staged_output = []
88
+ end
89
+
90
+ def consume(pattern)
91
+ match = pattern.match(@input)
92
+ @input = match.post_match if match
93
+ match
94
+ end
95
+ alias :discard :consume
96
+
97
+ def stage_output(pattern)
98
+ if match = consume(pattern)
99
+ string = block_given? ? (yield match) : match.to_s
100
+ @staged_output << string
101
+ string
102
+ end
103
+ end
104
+
105
+ def keep(pattern)
106
+ if match = consume(pattern)
107
+ string = block_given? ? (yield match) : match.to_s
108
+ @output << @staged_output.shift until @staged_output.empty?
109
+ @output << string
110
+ string
111
+ end
112
+ end
113
+
114
+ def conditionally_keep(pattern)
115
+ keep(pattern) do |match|
116
+ (yield match) ? match.to_s : (break "")
117
+ end
118
+ end
119
+
120
+ def done?
121
+ @input.empty?
122
+ end
63
123
  end
64
124
  end
@@ -1,3 +1,3 @@
1
1
  module Tailwindcss
2
- VERSION = "0.3.3"
2
+ VERSION = "0.5.4"
3
3
  end
@@ -1,23 +1,7 @@
1
1
  namespace :tailwindcss do
2
2
  desc "Install Tailwind CSS into the app"
3
3
  task :install do
4
- if defined?(Webpacker::Engine)
5
- Rake::Task["tailwindcss:install:webpacker"].invoke
6
- else
7
- Rake::Task["tailwindcss:install:asset_pipeline"].invoke
8
- end
9
- end
10
-
11
- namespace :install do
12
- desc "Install Tailwind CSS with the asset pipeline"
13
- task :asset_pipeline do
14
- run_install_template "tailwindcss_with_asset_pipeline"
15
- end
16
-
17
- desc "Install Tailwind CSS with webpacker"
18
- task :webpacker do
19
- run_install_template "tailwindcss_with_webpacker"
20
- end
4
+ system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/tailwindcss.rb", __dir__)}"
21
5
  end
22
6
 
23
7
  desc "Show the list of class names being kept in Tailwind CSS"
@@ -31,10 +15,6 @@ namespace :tailwindcss do
31
15
  end
32
16
  end
33
17
 
34
- def run_install_template(path)
35
- system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/#{path}.rb", __dir__)}"
36
- end
37
-
38
18
  def default_files_with_class_names
39
19
  Rails.root.glob("app/views/**/*.*") + Rails.root.glob("app/helpers/**/*.rb")
40
20
  end
@@ -42,3 +22,4 @@ end
42
22
  def tailwind_css
43
23
  Pathname.new(__FILE__).join("../../../app/assets/stylesheets/tailwind.css").read
44
24
  end
25
+
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tailwindcss-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-06 00:00:00.000000000 Z
11
+ date: 2021-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 6.0.0
27
- description:
27
+ description:
28
28
  email: david@loudthinking.com
29
29
  executables: []
30
30
  extensions: []
@@ -51,9 +51,19 @@ files:
51
51
  - app/assets/fonts/Inter-roman.vietnamese.var.woff2
52
52
  - app/assets/stylesheets/inter-font.css.erb
53
53
  - app/assets/stylesheets/tailwind.css
54
- - lib/install/stylesheets/application.scss
55
- - lib/install/tailwindcss_with_asset_pipeline.rb
56
- - lib/install/tailwindcss_with_webpacker.rb
54
+ - lib/generators/tailwindcss/controller/controller_generator.rb
55
+ - lib/generators/tailwindcss/controller/templates/view.html.erb.tt
56
+ - lib/generators/tailwindcss/mailer/mailer_generator.rb
57
+ - lib/generators/tailwindcss/mailer/templates/view.html.erb.tt
58
+ - lib/generators/tailwindcss/mailer/templates/view.text.erb.tt
59
+ - lib/generators/tailwindcss/scaffold/scaffold_generator.rb
60
+ - lib/generators/tailwindcss/scaffold/templates/_form.html.erb.tt
61
+ - lib/generators/tailwindcss/scaffold/templates/edit.html.erb.tt
62
+ - lib/generators/tailwindcss/scaffold/templates/index.html.erb.tt
63
+ - lib/generators/tailwindcss/scaffold/templates/new.html.erb.tt
64
+ - lib/generators/tailwindcss/scaffold/templates/partial.html.erb.tt
65
+ - lib/generators/tailwindcss/scaffold/templates/show.html.erb.tt
66
+ - lib/install/tailwindcss.rb
57
67
  - lib/tailwindcss-rails.rb
58
68
  - lib/tailwindcss/compressor.rb
59
69
  - lib/tailwindcss/engine.rb
@@ -65,7 +75,7 @@ licenses:
65
75
  - MIT
66
76
  metadata:
67
77
  homepage_uri: https://github.com/rails/tailwindcss-rails
68
- post_install_message:
78
+ post_install_message:
69
79
  rdoc_options: []
70
80
  require_paths:
71
81
  - lib
@@ -80,8 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
90
  - !ruby/object:Gem::Version
81
91
  version: '0'
82
92
  requirements: []
83
- rubygems_version: 3.1.2
84
- signing_key:
93
+ rubygems_version: 3.2.32
94
+ signing_key:
85
95
  specification_version: 4
86
96
  summary: Integrate Tailwind CSS with the asset pipeline in Rails.
87
97
  test_files: []
@@ -1,3 +0,0 @@
1
- @import "tailwindcss/base";
2
- @import "tailwindcss/components";
3
- @import "tailwindcss/utilities";
@@ -1,12 +0,0 @@
1
- APPLICATION_LAYOUT_PATH = Rails.root.join("app/views/layouts/application.html.erb")
2
-
3
- if APPLICATION_LAYOUT_PATH.exist?
4
- say "Add Tailwindcss include tags in application layout"
5
- insert_into_file Rails.root.join("app/views/layouts/application.html.erb").to_s, %(\n <%= stylesheet_link_tag "inter-font" %>\n <%= stylesheet_link_tag "tailwind" %>), before: /^\s*<%= stylesheet_link_tag/
6
- else
7
- say "Default application.html.erb is missing!", :red
8
- say %( Add <%= stylesheet_link_tag "inter-font" %> and <%= stylesheet_link_tag "tailwind" %> within the <head> tag in your custom layout.)
9
- end
10
-
11
- say "Turn on purging of unused css classes in production"
12
- gsub_file Rails.root.join("config/environments/production.rb"), /^\s+#?\s+config.assets.css_compressor =.*$/, %( config.assets.css_compressor = :purger)
@@ -1,22 +0,0 @@
1
- WEBPACK_STYLESHEETS_PATH = "#{Webpacker.config.source_path}/stylesheets"
2
- APPLICATION_LAYOUT_PATH = Rails.root.join("app/views/layouts/application.html.erb")
3
-
4
- say "Installing Tailwind CSS"
5
- run "yarn add tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9"
6
- insert_into_file "#{Webpacker.config.source_entry_path}/application.js", "\nimport \"stylesheets/application\"\n"
7
-
8
- say "Configuring Tailwind CSS"
9
- directory Pathname.new(__dir__).join("stylesheets"), Webpacker.config.source_path.join("stylesheets")
10
- Dir.chdir(WEBPACK_STYLESHEETS_PATH) { run "npx tailwindcss init" }
11
-
12
- insert_into_file "postcss.config.js", "require('tailwindcss')(\"./app/javascript/stylesheets/tailwind.config.js\"),\n ",
13
- before: "require('postcss-import')"
14
-
15
-
16
- if APPLICATION_LAYOUT_PATH.exist?
17
- say "Add Tailwindcss include tags in application layout"
18
- insert_into_file Rails.root.join("app/views/layouts/application.html.erb").to_s, %(\n <%= stylesheet_pack_tag "application", "data-turbo-track": "reload" %>), before: /\s*<\/head>/
19
- else
20
- say "Default application.html.erb is missing!", :red
21
- say %( Add <%= stylesheet_pack_tag "application", "data-turbo-track": "reload" %> within the <head> tag in your custom layout.)
22
- end