<!-- Miscellaneous render related template parts we use multiple times -->
{{define "collection-meta"}}
	{{if .Monetization -}}
		<meta name="monetization" content="{{.DisplayMonetization}}" />
	{{- end}}
	{{if .Verification -}}
		<link rel="me" href="{{.Verification}}" />
	{{- end}}
{{end}}

{{define "highlighting"}}
<script>
  // TODO: this feels more like a mutation observer
  addEventListener('DOMContentLoaded', function () {
    var hlbaseUri = "/js/";
    var lb = document.querySelectorAll("code[class^='language-']");


    // Custom aliasmap
    var aliasmap = {
      "elisp"      : "lisp",
      "emacs-lisp" : "lisp",
      "c"          : "cpp",
      "cc"         : "cpp",
      "h"          : "cpp",
      "c++"        : "cpp",
      "h++"        : "cpp",
      "hpp"        : "cpp",
      "hh"         : "cpp",
      "hxx"        : "cpp",
      "cxx"        : "cpp",
      "sh"         : "bash",
      "js"         : "javascript",
      "jsx"        : "javascript",
      "html"       : "xml"
    };

    // Given a set of nodes, run highlighting on them
    function highlight(nodes) {
      for (i=0; i < nodes.length; i++) {
          hljs.highlightBlock(nodes[i]);
      }
    }

    // Given a array of URIs, load them in order
    function loadLanguages(uris, callback) {
      uris.forEach(function(uri) {
        var sc = document.createElement('script');
        sc.src = uri;
        sc.async = false; // critical?
	  // Set callback on last script
        if (uris.indexOf(uri) == uris.length-1) {
	  // Set callback regardless
	  // so we're sure it will run if last element had error
	  // (we only know after loading, so we've had load time already)
          sc.onload  = callback; sc.onerror = callback;
        }
        document.head.appendChild(sc);
      });
    }

    // We don't have to do anything if there are no language blocks
    if (lb.length > 0) {
      // We have blocks to be highlighted, so we load css
      var st = document.createElement('link');
      st.rel = "stylesheet";
      st.href = "/css/lib/atom-one-light.min.css";
      document.head.appendChild(st);

      // Construct set of files to load, in order
      var jss = [hlbaseUri + "highlight.min.js"];
      // Check what we need to load
      for (i=0; i < lb.length; i++) {
        lang = lb[i].className.replace('language-','').toLowerCase();
        // Support the aliases specified above
        if (aliasmap[lang]) lang = aliasmap[lang];
        lurl = hlbaseUri + "highlightjs/" + lang + ".min.js";
        if (!jss.includes(lurl)) {
          jss.push(lurl);
        }
      }
      // Load files in order, highlight on last load
      loadLanguages(jss, () => {highlight(lb)});
    }
  });
</script>
{{end}}

<!-- Include mathjax configuration -->
{{define "mathjax"}}
<script>
  MathJax = {
      tex: {
        inlineMath: [
          ["\\(", "\\)"],
          ['$', '$'],
        ],
        displayMath: [
          ['$$', '$$'],
          ['\\[', '\\]'],
        ],
      },
    };
</script>
<script type="text/javascript" id="MathJax-script" src="/js/mathjax/tex-svg-full.js" async>
</script>
{{end}}

{{define "emailsubscribe"}}
    {{if .EmailSubsEnabled}}
		<div id="emailsub">
            {{if .IsSubscriber}}
			<p>You're subscribed to email updates. <a href="/api/collections/{{.Alias}}/email/unsubscribe">Unsubscribe</a>.</p>
            {{else}}
			<form method="post" action="/api/collections/{{.Alias}}/email/subscribe">
				<input type="hidden" name="web" value="1" />
				<p>Enter your email to subscribe to updates.</p> <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="email" name="{{.Honeypot}}" tabindex="-1" value="" /><input type="password" name="fake_password" tabindex="-1" placeholder="password" autocomplete="new-password" /></div>
				<input type="email" name="email" placeholder="me@example.com" />
				<input type="submit" id="subscribe-btn" value="Subscribe" />
			</form>
			<script type="text/javascript">
                var $form = document.getElementById('emailsub').getElementsByTagName('form')[0];
                $form.onsubmit = function() {
                    var $sub = document.getElementById('subscribe-btn');
                    $sub.disabled = true;
                    $sub.value = 'Subscribing...';
                }
			</script>
            {{end}}
		</div>
    {{end}}
{{end}}