diff options
| -rw-r--r-- | app/Elements/Census.php | 37 | ||||
| -rw-r--r-- | app/Elements/PlaceName.php | 8 | ||||
| -rw-r--r-- | resources/views/modules/GEDFact_assistant/select-census.phtml | 27 | ||||
| -rw-r--r-- | resources/views/modules/census-assistant.phtml | 42 |
4 files changed, 89 insertions, 25 deletions
diff --git a/app/Elements/Census.php b/app/Elements/Census.php index 772bb2edfe..c47af37ba6 100644 --- a/app/Elements/Census.php +++ b/app/Elements/Census.php @@ -19,6 +19,15 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Elements; +use Fisharebest\Webtrees\Census\Census as Censuses; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Individual; +use Fisharebest\Webtrees\Module\CensusAssistantModule; +use Fisharebest\Webtrees\Registry; +use Fisharebest\Webtrees\Services\ModuleService; +use Fisharebest\Webtrees\Tree; +use Psr\Http\Message\ServerRequestInterface; + /** * Census */ @@ -33,4 +42,32 @@ class Census extends AbstractElement 'SOUR' => '0:M', 'RESN' => '0:1', ]; + + /** + * An edit control for this data. + * + * @param string $id + * @param string $name + * @param string $value + * @param Tree $tree + * + * @return string + */ + public function edit(string $id, string $name, string $value, Tree $tree): string + { + $html = $this->editHidden($id, $name, $value) . view('modules/GEDFact_assistant/select-census', [ + 'census_places' => Censuses::censusPlaces(I18N::languageTag()), + ]); + + $xref=app(ServerRequestInterface::class)->getAttribute('xref', ''); + + $census_assistant = app(ModuleService::class)->findByInterface(CensusAssistantModule::class)->first(); + $record = Registry::individualFactory()->make($xref, $tree); + + if ($census_assistant instanceof CensusAssistantModule && $record instanceof Individual) { + $html .= $census_assistant->createCensusAssistant($record); + } + + return $html; + } } diff --git a/app/Elements/PlaceName.php b/app/Elements/PlaceName.php index a4e140fa70..0b20ab80c3 100644 --- a/app/Elements/PlaceName.php +++ b/app/Elements/PlaceName.php @@ -35,6 +35,14 @@ use function route; */ class PlaceName extends AbstractElement { + protected const SUBTAGS = [ + 'FORM' => '0:1', + 'MAP' => '0:1', + 'FONE' => '0:1', + 'ROMN' => '0:1', + 'NOTE' => '0:M', + ]; + /** * Convert a value to a canonical form. * diff --git a/resources/views/modules/GEDFact_assistant/select-census.phtml b/resources/views/modules/GEDFact_assistant/select-census.phtml index a758840bcf..a7d98926ef 100644 --- a/resources/views/modules/GEDFact_assistant/select-census.phtml +++ b/resources/views/modules/GEDFact_assistant/select-census.phtml @@ -10,23 +10,13 @@ use Fisharebest\Webtrees\I18N; ?> -<script> - function selectCensus(el) { - var option = $(":selected", el); - - $("input[id^=DATE]", $(el).closest("form")).val(option.val()); - $("input[id^=PLAC]", $(el).closest("form")).val(option.data("place")); - $("input.census-class", $(el).closest("form")).val(option.data("census")); - } -</script> - -<select id="census-selector" class="form-control" onchange="selectCensus(this)"> +<select class="form-control census-selector" aria-label="<?= I18N::translate('Census date and place') ?>"> <option value="" disabled selected hidden><?= I18N::translate('Census date') ?></option> <?php foreach ($census_places as $census_place) : ?> <optgroup label="<?= $census_place->censusPlace() ?>"> <?php foreach ($census_place->allCensusDates() as $census) : ?> - <option value="<?= $census->censusDate() ?>" data-place="<?= $census->censusPlace() ?>" data-census="<?= get_class($census) ?>"> + <option data-date="<?= $census->censusDate() ?>" data-place="<?= $census->censusPlace() ?>" data-census="<?= get_class($census) ?>"> <?= (new Date($census->censusDate()))->minimumDate()->format('%Y') ?> — <?= $census->censusPlace() ?> @@ -35,3 +25,16 @@ use Fisharebest\Webtrees\I18N; </optgroup> <?php endforeach ?> </select> + +<script> + document.querySelectorAll('.census-selector').forEach(function (el) { + el.addEventListener('change', function (el) { + const select = el.target; + const option = select.options[select.selectedIndex]; + const form = select.closest('form'); + + form.querySelector('[id$=CENS\\3a DATE]').value = option.dataset.date; + form.querySelector('[id$=CENS\\3a PLAC]').value = option.dataset.place; + }); + }); +</script> diff --git a/resources/views/modules/census-assistant.phtml b/resources/views/modules/census-assistant.phtml index 1f4cacd7ac..974aa2ebf1 100644 --- a/resources/views/modules/census-assistant.phtml +++ b/resources/views/modules/census-assistant.phtml @@ -10,14 +10,14 @@ use Fisharebest\Webtrees\View; ?> -<div id="census-assistant-link" hidden> +<div class="census-assistant-link" hidden> <a href="#"> <?= I18N::translate('Create a shared note using the census assistant') ?> </a> </div> <div id="census-assistant" hidden> - <input type="hidden" name="ca_census" id="census-assistant-class"> + <input type="hidden" name="ca_census" class="census-assistant-class"> <div class="form-group"> <div class="input-group"> <div class="input-group-prepend"> @@ -62,7 +62,7 @@ use Fisharebest\Webtrees\View; </div> <?= view('components/select-individual', ['name' => 'census-assistant-individual', 'individual' => $individual, 'tree' => $individual->tree()]) ?> <div class="input-group-append"> - <button type="button" class="btn btn-primary" id="census-assistant-add" title="<?= I18N::translate('add') ?>"> + <button type="button" class="btn btn-primary census-assistant-add" title="<?= I18N::translate('add') ?>"> <?= view('icons/add') ?> </button> </div> @@ -93,7 +93,13 @@ use Fisharebest\Webtrees\View; <script> // When a census date/place is selected, activate the census-assistant function censusAssistantSelect() { - var censusAssistantLink = document.querySelector('#census-assistant-link'); + const select = this; + const option = select.options[select.selectedIndex]; + const form = select.closest('form'); + + form.querySelector('.census-assistant-class').value = option.dataset.census; + + var censusAssistantLink = document.querySelector('.census-assistant-link'); var censusAssistant = document.querySelector('#census-assistant'); var censusOption = this.options[this.selectedIndex]; var census = censusOption.dataset.census; @@ -107,7 +113,7 @@ use Fisharebest\Webtrees\View; } censusAssistant.setAttribute('hidden', ''); - document.querySelector('#census-assistant-class').value = census; + document.querySelector('.census-assistant-class').value = census; document.querySelector('#census-assistant-title').value = censusYear + ' ' + censusPlace + ' - <?= I18N::translate('Census transcript') ?> - <?= strip_tags($individual->fullName()) ?> - <?= I18N::translate('Household') ?>'; let formData = new FormData(); @@ -128,7 +134,7 @@ use Fisharebest\Webtrees\View; // When the census assistant is activated, show the input fields function censusAssistantLink() { - document.querySelector('#census-selector').setAttribute('hidden', ''); + document.querySelector('.census-selector').setAttribute('hidden', ''); this.setAttribute('hidden', ''); document.getElementById('census-assistant').removeAttribute('hidden'); // Set the current individual as the head of household. @@ -139,7 +145,7 @@ use Fisharebest\Webtrees\View; // Add the currently selected individual to the census function censusAssistantAdd() { - var censusSelector = document.querySelector('#census-selector'); + var censusSelector = document.querySelector('.census-selector'); var census = censusSelector.options[censusSelector.selectedIndex].dataset.census; var indi_selector = document.querySelector('#census-assistant-individual'); var xref = indi_selector.options[indi_selector.selectedIndex].value; @@ -169,14 +175,24 @@ use Fisharebest\Webtrees\View; return false; } - $('#census-selector').on('change', censusAssistantSelect); - $('#census-assistant-link').on('click', censusAssistantLink); - $('#census-assistant-add').on('click', censusAssistantAdd); + document.querySelectorAll('.census-selector').forEach(function (el) { + el.addEventListener('change', censusAssistantSelect); + }); - $('#census-assistant-table').on('click', '.wt-icon-delete', function() { - $(this).closest('tr').remove(); + document.querySelectorAll('.census-assistant-link').forEach(function (el) { + el.addEventListener('click', censusAssistantLink); + }); - return false; + document.querySelectorAll('.census-assistant-add').forEach(function (el) { + el.addEventListener('click', censusAssistantAdd); + }); + + document.querySelectorAll('#census-assistant-table').forEach(function (el) { + el.addEventListener('click', function (el) { + if (el.target.matches('.wt-icon-delete')) { + el.target.closest('tr').remove(); + } + }) }) </script> <?php View::endpush() ?> |
