{{- /*
Here's where all of the inline partials are defined.
If the partial is short enough, it should be put here.
*/ -}}

{{- /* This is a partial that creates an icon from the icon templates. */ -}}
{{- define "partials/components/icon.html" }}
  {{- $icon := . }}
  {{- $res := resources.ExecuteAsTemplate (printf $icon.output $icon.id) $icon.id (resources.Get $icon.template) }}
  <svg class="icon">
    <use href="{{ $res.Permalink }}#{{ $icon.id }}"></use>
  </svg>
{{- end }}


{{- /* A partial that aliases the Heroicon template from the icon partial */ -}}
{{- define "partials/components/heroicon.html" }}
  {{- partial "components/icon.html" (dict "id" . "output" "icons/generic/%s.svg" "template" "templates/heroicon.svg") }}
{{ end }}


{{- define "partials/components/theme-button.html" }}
  {{- if gt (len (index $.Site.Data "more-contentful").themes) 1 }}
  <div class="site__theme-btn" aria-label="Theme toggle">
      {{ partial "components/heroicon.html" "color-swatch" }}
      <div class="site__theme-dropdown">
        {{- range $filename, $scheme := (index $.Site.Data "more-contentful").themes }}
        {{- $name := cond (eq $filename "_index") (printf "%s (default)" .scheme) .scheme }}
        <div class="site__theme-item" {{ if ne $filename "_index" }}data-theme="{{ .scheme }}"{{ end }}>{{ $name }}</div>
        {{- end }}
      </div>
    </div>
  </div>
  <script defer>
    const themeDropdown = document.querySelector('.site__theme-btn');
    themeDropdown.addEventListener('click', (event) => {
      const { target } = event;
      if (target.classList.contains("site__theme-item")) {
        if (target.dataset.theme) {
          theme = target.dataset.theme;
          window.localStorage.setItem("theme", theme);
          document.documentElement.dataset.theme = theme;
        } else {
          window.localStorage.removeItem("theme");
          delete document.documentElement.dataset.theme;
        }
      }
    });
  </script>
  {{- end }}
{{- end }}


{{- define "partials/components/post-meta.html" }}
<div class="list post__meta">
  {{- if ne (.PublishDate.Format "2006") "0001" -}}
  <time datetime="{{ .PublishDate }}">
    {{ partial "components/heroicon.html" "calendar" }}
    <span style="margin-left: 0.5em;">{{ .PublishDate.Format "2006-01-02" }}</span>
  </time>
  {{- end }}

  {{- if and .GitInfo (ne (.PublishDate.Format "2006-01-02") (.Lastmod.Format "2006-01-02")) }}
  <time datetime="{{ .Lastmod }}">
    {{ partial "components/heroicon.html" "refresh" }}
    <span style="margin-left: 0.5em;">{{ .Lastmod.Format "2006-01-02" }}</span>
  </time>
  {{- end }}

  {{- /* The authors are appended with 'et al' if there's more than one author in the map. */ -}}
  {{ with .Params.author }}
  {{- $names := slice }}
  {{- range . }}{{ $names = $names | append .name }}{{ end }}
  {{- $author := index (first 1 $names) 0 }}
  <span data-authors="{{ jsonify $names }}">
    {{ partial "components/heroicon.html" "pencil" }}
    <span style="margin-left: 0.5em;">
      {{ $author }}{{ if ge (len .) 2 }}, et al.{{ end }}
    </span>
  </span>
  {{ end }}

</div>
{{- end }}