<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>${title.encodeAsHtml()} ${version}</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="${resourcesPath}/css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />
        <link rel="stylesheet" href="${resourcesPath}/css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8" />
        <script type="text/javascript">
            function addJsClass(el) {
                var classes = document.body.className.split(" ");
                classes.push("js");
                document.body.className = classes.join(" ");
            }
        </script>
        <!-- Matomo -->
        <script>
            var _paq = window._paq = window._paq || [];
            /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
            _paq.push(["setDoNotTrack", true]);
            _paq.push(["disableCookies"]);
            _paq.push(['trackPageView']);
            _paq.push(['enableLinkTracking']);
            (function() {
                var u="https://analytics.apache.org/";
                _paq.push(['setTrackerUrl', u+'matomo.php']);
                _paq.push(['setSiteId', '79']);
                var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
                g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
            })();
        </script>
        <!-- End Matomo Code -->
        <script
            async
            src="https://widget.kapa.ai/kapa-widget.bundle.js"
            data-website-id="d804a9f2-51a2-414c-97f7-12f2a1ba4609"
            data-project-name="Apache Grails"
            data-project-color="#3F4346"
            data-font-family="system-ui,-apple-system,BlinkMacSystemFont,Roboto,Helvetica,Arial,Segoe UI,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;"
            data-project-logo="https://grails.apache.org/images/grails.png"
            data-modal-override-open-id="ask-ai-input"
            data-modal-override-open-class="search-input"
            data-user-analytics-fingerprint-enabled="true"
            data-modal-title="Apache Grails AI Assistant"
            data-modal-example-questions-title="Try asking me..."
            data-modal-disclaimer="This is a custom LLM for Apache Grails using [documentation](https://docs.grails.org/latest/), [groovy documentation](https://docs.groovy-lang.org/docs/groovy-4.0.28/html/documentation/) [github issues](https://github.com/apache/grails-core/issues) and more.\n\nCompanies deploy assistants like this [](https://kapa.ai) on docs via [website widget](https://docs.kapa.ai/integrations/website-widget) (Docker, Reddit), in [support forms](https://docs.kapa.ai/integrations/support-form-deflector) for ticket deflection (Monday.com, Mapbox), or as [an internal assistant](https://docs.kapa.ai/integrations/internal-assistant) with access to private sources."
            data-modal-example-questions="How does database migration work?,How does Spring Security work?"
            data-button-text-color="#FBB576"
            data-modal-header-bg-color="#FFFFFF"
            data-modal-title-color="#FBB576"
            data-consent-required="true"
            data-consent-screen-disclaimer="By clicking &quot;I agree, let&#39;s chat&quot;, you consent to the use of the AI assistant in accordance with kapa.ai&#39;s [Privacy Policy](https://www.kapa.ai/content/privacy-policy). This service uses reCAPTCHA, which requires your consent to Google&#39;s [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms). By proceeding, you explicitly agree to both kapa.ai&#39;s and Google&#39;s privacy policies.">
        ></script>
    </head>

    <body class="body" onload="addJsClass();">
        <div id="navigation">
            <div class="navTitle">
                <% if (logo) { %>
                <span id="logo">${logo}</span>
                <% } %>
                ${docTitle.encodeAsHtml()}
            </div>
            <div class="navLinks">
                <ul>
                    <li>
                        <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
                            <a href="${path}/guide/index.html" class="button">Table of contents</a>
                            <div id="nav-summary-childs" style="display:none;">
                                <%
                                toc.children.eachWithIndex { ch, i ->
                                if (single) {
                                %>
                                <div class="toc-item" style="margin-left:0"><a href="#${ ch.name.encodeAsUrlFragment().encodeAsHtml() }"><strong>${i + 1}</strong><span>${ch.title?.encodeAsHtml()}</span></a></div>
                                <%
                                }
                                else {
                                %>
                                <div class="toc-item" style="margin-left:0"><a href="${path}/guide/${ch.name.encodeAsUrlPath().encodeAsHtml()}.html"><strong>${i + 1}</strong><span>${ch.title?.encodeAsHtml()}</span></a></div>
                                <%
                                }
                                }
                                %>
                            </div>
                        </div>
                    </li>
                    <li class="separator selected">
                        <a id="ref-button" onclick="localToggle(); return false;" href="#">Quick Reference</a>
                    </li>
                </ul>

            </div>
        </div>


        <table id="colset" border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td id="col1">
                    <div id="main" class="corner-all">

                        <span id='toggle-col1' class="toggle">(<a href="#" onclick="localToggle(); return false;">Quick Reference</a>)</span>

                        <div class="project">
                            <h1>${title.encodeAsHtml()}</h1>
                            <p><strong>Authors:</strong> ${authors}</p>
                            <p><strong>Version:</strong> ${version}</p>
                            <% if (translators) { %>
                            <p><strong>Translated by:</strong> ${translators}</p>
                            <% } %>
                        </div>

                        <% if(toc){ %>
                        <div id="table-of-content">
                            <h2>Table of Contents</h2>
                            <%
                            sectionWriter = { lvl, section, topSection, prefix ->
                                if (single) {
                            %>
                            <div class="toc-item" style="margin-left:${lvl * 10}px"><a href="#${ section.name.encodeAsUrlFragment().encodeAsHtml() }"><strong>$prefix</strong><span>${section.title?.encodeAsHtml()}</span></a></div>
                            <%
                                }
                                else {
                            %>
                            <div class="toc-item" style="margin-left:${lvl * 10}px"><a href="${path}/guide/${topSection.name.encodeAsUrlPath().encodeAsHtml()}.html${ lvl == 0 ? '' : '#' + section.name.encodeAsUrlFragment().encodeAsHtml() }"><strong>$prefix</strong><span>${section.title?.encodeAsHtml()}</span></a></div>
                            <%
                                }

                                lvl++
                                section.children.eachWithIndex { s, j ->
                                    sectionWriter.call(lvl, s, topSection, prefix + '.' + (j + 1))
                                }
                            }

                            toc.children.eachWithIndex { topSection, i ->
                                sectionWriter.call(0, topSection, topSection, i + 1)
                            }
                            %>
                            <div style="clear:both" ></div>
                        </div>
                        <% } %>
                        ${content}
                    </div>
                </td>
                <td id="col2">
            <div class="local clearfix">
                <div class="local-title">
                    <a href="${path}/guide/index.html" target="mainFrame">Quick Reference</a>
                    <span class="toggle">(<a href="#" onclick="localToggle(); return false;">hide</a>)</span>
                </div>
                <div class="menu">
                    <% for (cat in refMenu) { %>
                    <div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">${cat.name.encodeAsHtml()}</h1><div class="menu-sub">
                        <% if (cat.usage.exists()) { %>
                        <div class="menu-item"><a href="${path}/ref/${cat.name.encodeAsUrlPath().encodeAsHtml()}/Usage.html">Usage</a></div>
                        <% } %>
                        <% for (txt in cat.sections) { %>
                        <div class="menu-item"><a href="${path}/ref/${cat.name.encodeAsUrlPath().encodeAsHtml()}/${txt.name[0..-6].encodeAsUrlPath().encodeAsHtml()}.html">${txt.name[0..-6].encodeAsHtml()}</a>
                        </div>
                        <% } %>
                        </div>
                    </div>
                    <% } %>
                </div>
            </div>
        </td>
            </tr>
        </table>

        <div id="footer">
            ${copyright}
            ${footer}
        </div>



<script type="text/javascript" src="${resourcesPath}/js/docs.js"></script>

    </body>
</html>
