summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Elements/Census.php37
-rw-r--r--app/Elements/PlaceName.php8
-rw-r--r--resources/views/modules/GEDFact_assistant/select-census.phtml27
-rw-r--r--resources/views/modules/census-assistant.phtml42
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() ?>