fisharebest/webtrees

View on GitHub
resources/views/modules/statistics-chart/page.phtml

Summary

Maintainability
Test Coverage
<?php

declare(strict_types=1);

use Fisharebest\Webtrees\View;

/**
 * @var array<string,string> $tabs
 * @var string               $title
 */

?>

<h2 class="wt-page-title">
    <?= $title ?>
</h2>

<div class="wt-page-content wt-chart wt-statistics-chart" id="statistics-tabs">
    <ul class="nav nav-tabs" role="tablist">
        <?php foreach ($tabs as $label => $url) : ?>
            <li class="nav-item" role="presentation">
                <a class="nav-link" href="#tab-<?= e(md5($url)) ?>" data-bs-toggle="tab" data-wt-href="<?= e($url) ?>" role="tab">
                    <?= $label ?>
                </a>
            </li>
        <?php endforeach ?>
    </ul>

    <div class="tab-content">
        <?php foreach ($tabs as $url) : ?>
            <div class="tab-pane fade wt-ajax-load" role="tabpanel" id="tab-<?= e(md5($url)) ?>"></div>
        <?php endforeach ?>
    </div>
</div>

<?php View::push('javascript') ?>
<script>
  'use strict';

  // Bootstrap tabs - load content dynamically using AJAX
  $('a[data-bs-toggle="tab"][data-wt-href]').on('show.bs.tab', function () {
    $(this.getAttribute('href') + ':empty').load(this.dataset.wtHref);
  });

  // If the URL contains a fragment, then activate the corresponding tab.
  // Use a prefix on the fragment, to prevent scrolling to the element.
  let target = window.location.hash.replace("tab-", "");
  let tab = document.querySelector("#statistics-tabs .nav-link[href='" + target + "']");
  // If not, then activate the first tab.
  tab = tab ?? document.querySelector("#statistics-tabs .nav-link");
  tab.click();

  // If the user selects a tab, update the URL to reflect this
  $('#statistics-tabs a[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
    window.location.hash = "tab-" + e.target.href.substring(e.target.href.indexOf('#') + 1);
  });
</script>
<?php View::endpush() ?>