lib/dom/dom_attr.ex

defmodule DOM.DOMAttr do
  @moduledoc """
    Defines interface Attr
    https://dom.spec.whatwg.org/#interface-attr
  """
  use DOM
  use DOMNode

  defstruct @dom_node_fields ++
              [
                :namespace_uri,
                :prefix,
                :local_name,
                :name,
                :value,
                :owner_element,
                specified: true
              ]

  @type t ::
          Map.merge(DOMNode.t(), %__MODULE__{
            namespace_uri: binary(),
            prefix: binary(),
            local_name: binary(),
            name: binary(),
            value: binary(),
            owner_element: DOMElement.t(),
            specified: true
          })

  @doc """
    Creates an initialized instance of __MODULE__.t()
    It sets some attributes with default values
  """
  def new(attrs \\ [])

  def new(attrs) when is_list(attrs),
    do: attrs |> Map.new() |> new()

  def new(attrs) when is_map(attrs) do
    struct(__MODULE__, Map.merge(attrs, %{node_type: :attribute}))
  end
end