diff --git a/lib/dsl/html.ex b/lib/dsl/html.ex index ea50cd5..2e3c5a9 100644 --- a/lib/dsl/html.ex +++ b/lib/dsl/html.ex @@ -24,6 +24,9 @@ defmodule Dsl.Html do area br col embed hr img input keygen param source track wbr ]a + def nonvoid_elements, do: @nonvoid_elements + def void_elements, do: @void_elements + @doc """ Creates a markup context. @@ -65,6 +68,9 @@ defmodule Dsl.Html do end for el <- @nonvoid_elements do + @doc """ + #{File.read!("./tmp/docs/#{el}.txt")} + """ defmacro unquote(el)() do el = unquote(el) @@ -74,26 +80,28 @@ defmodule Dsl.Html do end end - defmacro unquote(el)([{:do, inner} | attrs]) do + @doc false + defmacro unquote(el)([{:do, inner}] = _attrs_or_content_or_block) do el = unquote(el) quote do - put_open_tag(var!(buff, Dsl.Html), unquote(el), unquote(attrs)) + put_open_tag(var!(buff, Dsl.Html), unquote(el), []) _ = unquote(inner) put_close_tag(var!(buff, Dsl.Html), unquote(el)) end end - defmacro unquote(el)(attrs_or_content) do + defmacro unquote(el)(attrs_or_content_or_block) do el = unquote(el) quote do - put_open_tag(var!(buff, Dsl.Html), unquote(el), unquote(attrs_or_content)) + put_open_tag(var!(buff, Dsl.Html), unquote(el), unquote(attrs_or_content_or_block)) put_close_tag(var!(buff, Dsl.Html), unquote(el)) end end - defmacro unquote(el)(attrs, [{:do, inner}]) do + @doc false + defmacro unquote(el)(attrs, [{:do, inner}] = _block) do el = unquote(el) quote do @@ -130,6 +138,10 @@ defmodule Dsl.Html do end for el <- @void_elements do + @doc """ + #{File.read!("./tmp/docs/#{el}.txt")} + """ + defmacro unquote(el)(attrs \\ []) do el = unquote(el) diff --git a/lib/mix/tasks/update_mdn_docs.ex b/lib/mix/tasks/update_mdn_docs.ex new file mode 100644 index 0000000..1b5598d --- /dev/null +++ b/lib/mix/tasks/update_mdn_docs.ex @@ -0,0 +1,29 @@ +defmodule Mix.Tasks.UpdateMdnDocs do + use Mix.Task + + @baseurl "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/" + @params "?summary&raw" + + @shortdoc "Update the MDN documentation" + def run(_) do + (Dsl.Html.nonvoid_elements() ++ Dsl.Html.void_elements()) + |> Enum.each(fn el -> + el = to_string(el) + + page = + if Enum.any?(["h1", "h2", "h3", "h4", "h5", "h6"], & &1 == el) do + "Heading_Elements" + else + el + end + + {doc, 0} = System.cmd("curl", [@baseurl <> page <> @params]) + File.mkdir_p!("./tmp/docs/") + + path = "./tmp/docs/" <> el <> ".txt" + doc = HtmlSanitizeEx.strip_tags(doc) + + File.write!(path, doc) + end) + end +end