defmodule Mix.Tasks.Torch.Gen.Html do @moduledoc """ Light wrapper module around `mix phx.gen.html` which generates slightly modified HTML. Takes all the same params as the `phx.gen.html` task. ## Example mix torch.gen.html Accounts User users --no-schema """ @commands ~w[phx.gen.html phx.gen.context] def run(args) do if Mix.Project.umbrella?() do Mix.raise("mix torch.gen.html can only be run inside an application directory") end %{format: format} = Mix.Torch.parse_config!("torch.gen.html", args) Mix.Torch.ensure_phoenix_is_loaded!("torch.gen.html") phoenix_version = to_string(Application.spec(:phoenix, :vsn)) # Check for Phoenix 1.6+ with Phoenix.HTML 3+ and Heex template_format = cond do format == "slime" -> format Version.match?(phoenix_version, ">= 1.6.0-rc.0", allow_pre: true) -> "heex" true -> "eex" end # First, backup the projects existing templates if they exist Enum.each(@commands, &Mix.Torch.backup_project_templates/1) # Inject the torch templates for the generator into the priv/ # directory so they will be picked up by the Phoenix generator Enum.each(@commands, &Mix.Torch.inject_templates(&1, template_format)) # Run the Phoenix generator if format == "slime" do Mix.Task.run("phx.gen.html.slime", args) else Mix.Task.run("phx.gen.html", args) end # Remove the injected templates from priv/ so they will not # affect future Phoenix generator commands Enum.each(@commands, &Mix.Torch.remove_templates/1) # Restore the projects existing templates if present Enum.each(@commands, &Mix.Torch.restore_project_templates/1) Mix.shell().info(""" Ensure the following is added to your endpoint.ex: plug( Plug.Static, at: "/torch", from: {:torch, "priv/static"}, gzip: true, cache_control_for_etags: "public, max-age=86400", headers: [{"access-control-allow-origin", "*"}] ) """) Mix.shell().info(""" Also don't forget to add a link to layouts/torch.html. """) end end