Skip to content

[gh315] Remove Tailwind config #325

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: feature/gh315-support-1.7.x
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
323 changes: 205 additions & 118 deletions lib/nimble_template/addons/variants/phoenix/web/bootstrap.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,153 +3,240 @@ defmodule NimbleTemplate.Addons.Phoenix.Web.Bootstrap do

use NimbleTemplate.Addons.Addon

# @impl true
# def do_apply!(%Project{} = project, _opts) do
# project
# end

# TODO: Enable Bootstrap on the next PR
@impl true
def do_apply!(%Project{} = project, _opts) do
def do_apply!(%Project{} = project, opts) do
project
|> edit_files!(opts)
|> copy_files!()
|> remove_tailwind_mix!()
|> remove_tailwind_dev_config!()
|> remove_tailwind_config_file!()
|> remove_tailwind_config!()
end

# TODO: Enable Bootstrap on the next PR
# def do_apply!(%Project{} = project, opts) do
# project
# |> edit_files!(opts)
# |> copy_files!()
# end
def remove_tailwind_config_file!(project) do
File.rm!("assets/tailwind.config.js")

# defp edit_files!(%Project{} = project, opts) do
# project
# |> edit_assets_package!()
# |> edit_app_js!(opts)
# |> edit_app_scss!(opts)
# |> edit_vendor_index!(opts)
# |> edit_css_variables!(opts)
# end
project
end

# defp copy_files!(%Project{} = project) do
# copy_bootstrap_vendor!(project)
def remove_tailwind_config!(project) do
Generator.delete_content!(
"config/config.exs",
"""
# Configure tailwind (the version is required)
config :tailwind,
version: "3.2.4",
default: [
args: ~w(
--config=tailwind.config.js
--input=css/app.css
--output=../priv/static/assets/app.css
),
cd: Path.expand("../assets", __DIR__)
]
"""
)

# project
# end
project
end

# defp edit_assets_package!(%Project{} = project) do
# Generator.replace_content!(
# "assets/package.json",
# """
# "dependencies": {
# """,
# """
# "dependencies": {
# "@popperjs/core": "2.11.5",
# "bootstrap": "5.1.3",
# """
# )
def remove_tailwind_dev_config!(project) do
Generator.replace_content!(
"config/dev.exs",
"""
esbuild: {Esbuild, :install_and_run, [:app, ~w(--sourcemap=inline --watch)]},
tailwind: {Tailwind, :install_and_run, [:default, ~w(--watch)]}
""",
"""
esbuild: {Esbuild, :install_and_run, [:app, ~w(--sourcemap=inline --watch)]}
"""
)

# project
# end
project
end

# defp edit_app_js!(project, %{with_nimble_js_addon: true}) do
# Generator.replace_content!(
# "assets/js/app.js",
# """
# import "phoenix_html"
# """,
# """
# // Bootstrap
# import "bootstrap/dist/js/bootstrap";
def remove_tailwind_mix!(project) do
Generator.replace_content!(
"mix.exs",
"""
{:tailwind, "~> 0.1.8", runtime: Mix.env() == :dev},
{:swoosh, "~> 1.3"},
""",
"""
{:swoosh, "~> 1.3"},
"""
)

Generator.replace_content!(
"mix.exs",
"""
"assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"],
"assets.build": ["tailwind default", "esbuild app"],
"assets.deploy": [
"tailwind default --minify",
"esbuild app --minify",
"sass app --no-source-map --style=compressed",
"cmd npm run postcss --prefix assets",
"phx.digest"
]
""",
"""
"assets.setup": ["esbuild.install --if-missing"],
"assets.build": ["esbuild app"],
"assets.deploy": [
"esbuild app --minify",
"sass app --no-source-map --style=compressed",
"cmd npm run postcss --prefix assets",
"phx.digest"
]
"""
)

# import "phoenix_html"
# """
# )
project
end

# project
# end
defp edit_files!(%Project{} = project, opts) do
project
|> edit_assets_package!()
|> edit_app_js!(opts)
|> edit_app_scss!(opts)
|> edit_vendor_index!(opts)
|> edit_css_variables!(opts)
end

# defp edit_app_js!(project, %{with_nimble_js_addon: false}) do
# Generator.replace_content!(
# "assets/js/app.js",
# """
# import "phoenix_html"
# """,
# """
# // Bootstrap
# import "bootstrap/dist/js/bootstrap";
defp copy_files!(%Project{} = project) do
copy_bootstrap_vendor!(project)

# import "phoenix_html"
# """
# )
project
end

# project
# end
defp edit_assets_package!(%Project{} = project) do
Generator.replace_content!(
"assets/package.json",
"""
"dependencies": {
""",
"""
"dependencies": {
"@popperjs/core": "2.11.5",
"bootstrap": "5.1.3",
"""
)

# defp edit_app_scss!(project, %{with_nimble_css_addon: true}), do: project
project
end

# defp edit_app_scss!(project, %{with_nimble_css_addon: false}) do
# Generator.replace_content!(
# "assets/css/app.scss",
# """
# @import "./phoenix.css";
# """,
# """
# @import "./phoenix.css";
defp edit_app_js!(project, %{with_nimble_js_addon: true}) do
Generator.replace_content!(
"assets/js/app.js",
"""
import "phoenix_html"
""",
"""
// Bootstrap
import "bootstrap/dist/js/bootstrap";

# @import './vendor/';
# """
# )
import "phoenix_html"
"""
)

# project
# end
project
end

# defp edit_css_variables!(project, %{with_nimble_css_addon: false}) do
# Generator.create_file!(
# "assets/css/_variables.scss",
# """
# ////////////////////////////////
# // Shared variables //
# ////////////////////////////////
defp edit_app_js!(project, %{with_nimble_js_addon: false}) do
Generator.replace_content!(
"assets/js/app.js",
"""
import "phoenix_html"
""",
"""
// Bootstrap
import "bootstrap/dist/js/bootstrap";

# ////////////////////////////////
# // Custom Bootstrap variables //
# ////////////////////////////////
# """
# )
import "phoenix_html"
"""
)

# project
# end
project
end

# defp edit_css_variables!(project, %{with_nimble_css_addon: true}) do
# Generator.append_content!(
# "assets/css/_variables.scss",
# """
# ////////////////////////////////
# // Shared variables //
# ////////////////////////////////
defp edit_app_scss!(project, %{with_nimble_css_addon: true}), do: project

# ////////////////////////////////
# // Custom Bootstrap variables //
# ////////////////////////////////
# """
# )
defp edit_app_scss!(project, %{with_nimble_css_addon: false}) do
Generator.replace_content!(
"assets/css/app.scss",
"""
@import "./phoenix.css";
""",
"""
@import "./phoenix.css";

# project
# end
@import './vendor/';
"""
)

# defp edit_vendor_index!(project, %{with_nimble_css_addon: true}) do
# Generator.append_content!("assets/css/vendor/_index.scss", "@import './bootstrap';")
project
end

# project
# end
defp edit_css_variables!(project, %{with_nimble_css_addon: false}) do
Generator.create_file!(
"assets/css/_variables.scss",
"""
////////////////////////////////
// Shared variables //
////////////////////////////////

# defp edit_vendor_index!(project, %{with_nimble_css_addon: false}) do
# Generator.make_directory!("assets/css/vendor/", false)
# Generator.create_file!("assets/css/vendor/_index.scss", "@import './bootstrap';")
////////////////////////////////
// Custom Bootstrap variables //
////////////////////////////////
"""
)

# project
# end
project
end

# defp copy_bootstrap_vendor!(%Project{} = project) do
# Generator.copy_file!([
# {:text, "assets/bootstrap_css/vendor/_bootstrap.scss", "assets/css/vendor/_bootstrap.scss"}
# ])
defp edit_css_variables!(project, %{with_nimble_css_addon: true}) do
Generator.append_content!(
"assets/css/_variables.scss",
"""
////////////////////////////////
// Shared variables //
////////////////////////////////

# project
# end
////////////////////////////////
// Custom Bootstrap variables //
////////////////////////////////
"""
)

project
end

defp edit_vendor_index!(project, %{with_nimble_css_addon: true}) do
Generator.append_content!("assets/css/vendor/_index.scss", "@import './bootstrap';")

project
end

defp edit_vendor_index!(project, %{with_nimble_css_addon: false}) do
Generator.make_directory!("assets/css/vendor/", false)
Generator.create_file!("assets/css/vendor/_index.scss", "@import './bootstrap';")

project
end

defp copy_bootstrap_vendor!(%Project{} = project) do
Generator.copy_file!([
{:text, "assets/bootstrap_css/vendor/_bootstrap.scss", "assets/css/vendor/_bootstrap.scss"}
])

project
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ defmodule NimbleTemplate.Addons.Phoenix.Web.CoreJS do
""",
"""
"dependencies": {
"core-js": "3.22.0"
"core-js": "3.29.1"
"""
)

Expand Down