<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/_book.yaml">
</head>
<body>

<h1 class="page-title" id="modules.${page.name}">${page.title}</h1>

{% dynamic setvar source_file "${page.sourceFile}" %}
{% include "_buttons.html" %}
<!-- {% raw %} -->

${page.documentation}

#if (!$page.methods.isEmpty())
<h2>Members</h2>
<ul>
#foreach ($method in $page.methods)
  #if ($method.documented())
  <li>
    <a href="#${method.name}">${method.name}</a>
  </li>
  #end
#end
</ul>
#end

#foreach ($method in $page.methods)
  #if ($method.documented())
    <h2 id="${method.name}">${method.name}</h2>
    #if (!$method.signature.isEmpty())
    <p><pre class="rule-signature">${method.signature}</pre></p>
    #end

    ${method.documentation}

    #if (!$method.params.isEmpty())
      <!-- hide-from-toc is a class used by DevSite for the public Bazel site
      (https://developers.google.com/devsite/reference/styles/headings#hide_headings_from_the_toc) -->
      <h3 class="hide-from-toc">Parameters</h3>
      <table class="table table-bordered table-condensed table-params">
        <colgroup>
          <col class="col-param">
          <col class="param-description">
        </colgroup>
        <thead>
          <tr>
            <th>Parameter</th>
            <th>Description</th>
          </tr>
        </thead>
        <tbody>
        #foreach ($param in $method.params)
          <tr>
            <td id="${param.method.name}.${param.name}">
              <code>${param.name}</code>
            </td>
            <td>
            #if (!$param.type.isEmpty())
              <code>${param.type}</code>;
            #end
            #if (!$param.defaultValue.isEmpty())
             default = ${param.defaultValue}<br/>
            #else
             required<br/>
            #end
              ${param.documentation}
            </td>
          </tr>
        #end
        </tbody>
      </table>
    #end
    ${method.returnTypeExtraMessage}
  #end
#end

</body>
</html>

<!-- {% endraw %} -->
