<!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>
    <style>
        .contribute-btn {
            bottom: 0px;
        }
    </style>
    <!-- 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">
                        <% toc.children.eachWithIndex { ch, i -> %>
                        <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="reference corner-all">

                <span id='toggle-col1' class="toggle">(<a href="#" onclick="localToggle(); return false;">Quick Reference</a>)</span>
                <% if(sourceRepo) { %>
                <div class='contribute-btn'>
                    <button type='button' class='btn btn-default' onclick='window.location.href="${sourceRepo}/${sourcePath}"'>
                        <i class='fa fa-pencil-square-o'></i> Improve this doc
                    </button>
                </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(nextElement(this))">${cat.name.encodeAsHtml()}</h1>
                        <div class="menu-sub${ cat.name == section ? ' selected' : ''}">
                            <% 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>
