<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.${module.name}">${module.title}</h1>

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

${module.documentation}

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

#foreach ($method in $module.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 %} -->
