<!--
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.
-->

<div class="pagination pagination-centered">
  <ul>
    <% if (page > 1) { %>
    <li> <a href="<%- urlFun(page-1) %>">&laquo;</a></li>
    <% } else { %>
      <li class="disabled"> <a href="<%- urlFun(page) %>">&laquo;</a></li>
    <% } %>
    <% _.each(_.range(1, totalPages+1), function(i) { %>
      <li <% if (page == i) { %>class="active"<% } %>> <a href="<%- urlFun(i) %>"><%- i %></a></li>
    <% }) %>
    <% if (page < totalPages) { %>
      <li><a href="<%- urlFun(page+1) %>">&raquo;</a></li>
    <% } else { %>
      <li class="disabled"> <a href="<%- urlFun(page) %>">&raquo;</a></li>
    <% } %>
  </ul>
</div>
