<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright (c) 2024, The Regents of the University of California, through
    Lawrence Berkeley National Laboratory (subject to receipt of any required
    approvals from the U.S. Dept. of Energy). All rights reserved.

    CLOCKSS system has permission to ingest, preserve, and serve this Archival Unit.
    LOCKSS system has permission to collect, preserve, and serve this Archival Unit.

    This content is licensed under a Creative Commons Attribution 3.0 International license.
    https://creativecommons.org/licenses/by/3.0/
-->
<xsl:stylesheet version="1.0" exclude-result-prefixes="menu" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:menu="http://namesforlife.com/ns/menu">

    <xsl:output method="html" standalone="yes" encoding="iso-8859-1" omit-xml-declaration="yes" cdata-section-elements="pre script style" indent="yes" />

    <xsl:template match="/menu:menu">
        <xsl:apply-templates select="." mode="root" />
    </xsl:template>

    <xsl:template match="menu:message" mode="items">
        <div id="namesforlife-message-container">
            <span class="namesforlife-message">
                <xsl:apply-templates mode="contents" />
            </span>
        </div>
    </xsl:template>

    <xsl:template match="menu:menu" mode="root">
        <xsl:variable name="menu-id">namesforlife-root</xsl:variable>
        <xsl:comment> Copyright (c) 2005-2018 NamesforLife, LLC. All rights reserved. </xsl:comment>
<xsl:text>
</xsl:text>
        <div class="namesforlife-menu">
            <xsl:attribute name="id"><xsl:value-of select="$menu-id" /></xsl:attribute>
            <xsl:apply-templates select="menu:*" mode="items">
                <xsl:with-param name="parent-menu-id"><xsl:value-of select="$menu-id" /></xsl:with-param>
            </xsl:apply-templates>
            <xsl:apply-templates select="menu:submenu" mode="menus">
                <xsl:with-param name="parent-menu-id"><xsl:value-of select="$menu-id" /></xsl:with-param>
            </xsl:apply-templates>
        </div>
    </xsl:template>

    <xsl:template match="menu:menu/menu:title" mode="items">
        <xsl:apply-templates select="menu:item" mode="items" />
    </xsl:template>

    <xsl:template match="menu:submenu/menu:title" mode="items" />

    <xsl:template match="menu:submenu/menu:subtitle" mode="items">
        <xsl:apply-templates select="menu:item" mode="items" />
    </xsl:template>

    <xsl:template match="menu:submenu" mode="items">
        <xsl:param name="parent-menu-id" />
        <xsl:variable name="disabled">
            <xsl:choose>
                <xsl:when test="@type='info'">false</xsl:when>
                <xsl:when test="count(menu:item) + count(menu:submenu) = 0">true</xsl:when>
                <xsl:otherwise>false</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="submenu-index"><xsl:value-of select="count(preceding-sibling::*[name(current())=name()])" /></xsl:variable>
        <xsl:variable name="menu-id"><xsl:value-of select="$parent-menu-id" /><xsl:text>-</xsl:text><xsl:value-of select="$submenu-index" /></xsl:variable>
        <xsl:apply-templates select="menu:title/menu:item" mode="items">
            <xsl:with-param name="menu-id"><xsl:value-of select="$menu-id" /></xsl:with-param>
            <xsl:with-param name="disabled"><xsl:value-of select="$disabled" /></xsl:with-param>
        </xsl:apply-templates>
    </xsl:template>

    <xsl:template match="menu:submenu" mode="menus">
        <xsl:param name="parent-menu-id" />
        <xsl:variable name="submenu-index"><xsl:value-of select="count(preceding-sibling::*[name(current())=name()])" /></xsl:variable>
        <xsl:variable name="menu-id"><xsl:value-of select="$parent-menu-id" /><xsl:text>-</xsl:text><xsl:value-of select="$submenu-index" /></xsl:variable>
        <div class="namesforlife-menu">
            <xsl:attribute name="id"><xsl:value-of select="$menu-id" /></xsl:attribute>
            <xsl:apply-templates select="menu:*" mode="items">
                <xsl:with-param name="parent-menu-id"><xsl:value-of select="$menu-id" /></xsl:with-param>
            </xsl:apply-templates>
        </div>
        <xsl:apply-templates select="menu:submenu" mode="menus">
            <xsl:with-param name="parent-menu-id"><xsl:value-of select="$menu-id" /></xsl:with-param>
        </xsl:apply-templates>
        <xsl:apply-templates select="menu:infopanel" mode="menus">
            <xsl:with-param name="parent-menu-id"><xsl:value-of select="$menu-id" /></xsl:with-param>
        </xsl:apply-templates>
    </xsl:template>

    <xsl:template match="menu:item|menu:separator|menu:spacer" mode="items">
        <xsl:param name="menu-id" />
        <xsl:param name="disabled" />
            <a>
                <xsl:choose>
                    <xsl:when test="name()='separator'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-separator</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="name()='spacer'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-spacer</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="@type='root-menutitle'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-menutitle</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="@type='label'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-label</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="@type='menu'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-selectable namesforlife-internal</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem namesforlife-name</xsl:attribute>
<!-- TODO: Need to prevent empty titles, since Internet Explorer renders them
                        <xsl:if test="text()!=''">
                            <xsl:attribute name="title"><xsl:value-of select="text()" /></xsl:attribute>
                        </xsl:if>
-->
                        <xsl:attribute name="href"><xsl:value-of select="@id" /></xsl:attribute>
                        <xsl:attribute name="title">Opens this item in a new menu.</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="parent::menu:title and $disabled='false'">
                        <xsl:attribute name="class">
                          <xsl:text>namesforlife-item namesforlife-selectable namesforlife-submenu n4l-ca</xsl:text>
                          <!-- Add any additional classes. -->
                          <xsl:if test="@type"><xsl:text> namesforlife-</xsl:text><xsl:value-of select="@type" /></xsl:if>
                        </xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-submenu</xsl:attribute>
                        <xsl:attribute name="name"><xsl:text>open_</xsl:text><xsl:value-of select="$menu-id" /></xsl:attribute>
                    </xsl:when>
                    <xsl:when test="parent::menu:title and $disabled='true'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-submenu-disabled n4l-cb</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="parent::menu:subtitle and @type='link'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-menusubtitle namesforlife-selectable n4l-cc</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem namesforlife-external</xsl:attribute>
                        <xsl:attribute name="title">Opens this item in a new window.</xsl:attribute>
                        <xsl:attribute name="href"><xsl:value-of select="menu:external-link/@url" /></xsl:attribute>
                    </xsl:when>
                    <xsl:when test="parent::menu:subtitle">
                        <xsl:attribute name="class">namesforlife-item namesforlife-menusubtitle n4l-cd</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="@type='link'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-selectable n4l-ce</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem namesforlife-external</xsl:attribute>
                        <xsl:attribute name="title">Opens this item in a new window.</xsl:attribute>
                        <xsl:attribute name="href"><xsl:value-of select="menu:external-link/@url" /></xsl:attribute>
                    </xsl:when>
                    <xsl:when test="@type='link-help'">
                        <xsl:attribute name="class">namesforlife-item namesforlife-selectable namesforlife-help n4l-cf</xsl:attribute>
                        <xsl:attribute name="rel">namesforlife-menuitem namesforlife-external</xsl:attribute>
                        <xsl:attribute name="title">Opens this item in a new window.</xsl:attribute>
                        <xsl:attribute name="href"><xsl:value-of select="menu:external-link/@url" /></xsl:attribute>
                    </xsl:when>
                    <xsl:otherwise></xsl:otherwise>
                </xsl:choose>
                <!-- Produce the content. -->
                <xsl:choose>
                    <xsl:when test="@type='link' or @type='link-about'"><xsl:value-of select="menu:external-link/text()" /></xsl:when>
                    <xsl:otherwise><xsl:apply-templates mode="contents" /></xsl:otherwise>
                </xsl:choose>
                <xsl:text>&#160;&#160;&#160;&#160;&#160;</xsl:text>
            </a>
    </xsl:template>

    <xsl:template match="menu:submenu[@type='info']" mode="menus">
        <xsl:param name="parent-menu-id" />
        <xsl:variable name="submenu-index"><xsl:value-of select="count(preceding-sibling::*[name(current())=name()])" /></xsl:variable>
        <xsl:variable name="menu-id"><xsl:value-of select="$parent-menu-id" /><xsl:text>-</xsl:text><xsl:value-of select="$submenu-index" /></xsl:variable>
        <div class="namesforlife-menu namesforlife-infopanel">
            <xsl:attribute name="id"><xsl:value-of select="$menu-id" /></xsl:attribute>
            <div class="namesforlife-infopanel-content">
                <!-- Menu/Infopanel Title ("Bibliography") -->
                <div class="namesforlife-submenu-title"><xsl:apply-templates select="menu:title/menu:item" mode="contents" /></div>
                <xsl:apply-templates select="menu:content" mode="clipboard">
                    <xsl:with-param name="id"><xsl:value-of select="$menu-id" /></xsl:with-param>
                </xsl:apply-templates>
            </div>
        </div>
    </xsl:template>

    <xsl:template match="menu:content[@type='bibliography']" mode="clipboard">
        <xsl:param name="id" />
        <div class="namesforlife-clipboard namesforlife-bibliography">
            <xsl:attribute name="id"><xsl:text>clipboard:</xsl:text><xsl:value-of select="$id" /><xsl:text>-content-</xsl:text><xsl:value-of select="position()" /></xsl:attribute>
            <xsl:attribute name="rel">namesforlife-clipboard</xsl:attribute>
            <xsl:apply-templates select="." mode="contents" />
        </div>
    </xsl:template>

    <xsl:template match="menu:content[@type='footer']" mode="clipboard">
        <xsl:param name="id" />
        <div class="namesforlife-clipboard namesforlife-footer">
            <xsl:attribute name="id"><xsl:text>clipboard:</xsl:text><xsl:value-of select="$id" /><xsl:text>-content-</xsl:text><xsl:value-of select="position()" /></xsl:attribute>
            <xsl:attribute name="rel">namesforlife-clipboard</xsl:attribute>
            <xsl:apply-templates select="." mode="contents" />
        </div>
    </xsl:template>

    <xsl:template match="menu:content[@type='clipboard']" mode="clipboard">
        <xsl:param name="id" />
        <div class="namesforlife-clipboard">
            <xsl:attribute name="id"><xsl:text>clipboard:</xsl:text><xsl:value-of select="$id" /><xsl:text>-content-</xsl:text><xsl:value-of select="position()" /></xsl:attribute>
            <xsl:attribute name="rel">namesforlife-clipboard</xsl:attribute>
            <xsl:apply-templates select="." mode="contents" />
        </div>
    </xsl:template>

    <xsl:template match="menu:content" mode="clipboard">
        <xsl:apply-templates select="." mode="contents" />
    </xsl:template>

    <xsl:template match="menu:item" mode="contents">
        <xsl:apply-templates mode="contents" />
    </xsl:template>

    <xsl:template match="menu:content" mode="contents">
        <xsl:apply-templates mode="contents" />
    </xsl:template>

    <xsl:template match="menu:i" mode="contents">
        <i><xsl:apply-templates mode="contents" /></i>
    </xsl:template>

    <xsl:template match="menu:b" mode="contents">
        <b><xsl:apply-templates mode="contents" /></b>
    </xsl:template>

    <xsl:template match="menu:u" mode="contents">
        <u><xsl:apply-templates mode="contents" /></u>
    </xsl:template>
    
    <xsl:template match="menu:sup" mode="contents">
        <sup><xsl:apply-templates mode="contents" /></sup>
    </xsl:template>

    <!-- Opens an external link in a new window or tab. -->
    <xsl:template match="menu:external-link" mode="contents">
        <a>
            <xsl:attribute name="class">namesforlife-link</xsl:attribute>
            <xsl:attribute name="rel">namesforlife-external</xsl:attribute>
            <xsl:attribute name="title">Opens this item in a new window.</xsl:attribute>
            <xsl:attribute name="href"><xsl:value-of select="@url" /></xsl:attribute>
            <xsl:attribute name="target"><xsl:text>_newtab</xsl:text></xsl:attribute>
            <xsl:apply-templates mode="contents" />
        </a>
    </xsl:template>

    <xsl:template match="menu:newline" mode="contents">
        <br/>
    </xsl:template>

    <xsl:template match="menu:horizontal-rule" mode="contents">
        <hr/>
    </xsl:template>

    <xsl:template match="menu:list" mode="contents"><xsl:apply-templates mode="contents" /></xsl:template>

    <xsl:template match="menu:list/menu:list-item" mode="contents">
        <div>
          <xsl:attribute name="class">
            <xsl:text>namesforlife-list-item</xsl:text>
            <xsl:if test="@type"><xsl:text> namesforlife-</xsl:text><xsl:value-of select="@type" /></xsl:if>
          </xsl:attribute>
          <xsl:apply-templates mode="contents" />
        </div>
    </xsl:template>

    <xsl:template match="text()" mode="contents">
        <xsl:value-of select="." />
    </xsl:template>

</xsl:stylesheet>
