death age calculator

closes #9
pull/11/head
Dan Gowans 2025-04-25 14:18:24 -04:00
parent 14bd8e0ea4
commit c7640f6dfd
7 changed files with 249 additions and 5 deletions

View File

@ -177,6 +177,11 @@
</div>
<label class="label" for="contractIntermentAdd--deathAge">Death Age</label>
<div class="field has-addons">
<div class="control">
<button class="button" type="button" id="button--calculateDeathAge" aria-label="Calculate Age" disabled>
<span class="icon is-small"><i class="fas fa-calculator" aria-hidden="true"></i></span>
</button>
</div>
<div class="control is-expanded">
<input class="input has-text-right" id="contractIntermentAdd--deathAge" name="deathAge" type="number" min="0" max="150" />
</div>

View File

@ -184,6 +184,11 @@
</div>
<label class="label" for="contractIntermentEdit--deathAge">Death Age</label>
<div class="field has-addons">
<div class="control">
<button class="button" type="button" id="button--calculateDeathAge" aria-label="Calculate Age" disabled>
<span class="icon is-small"><i class="fas fa-calculator" aria-hidden="true"></i></span>
</button>
</div>
<div class="control is-expanded">
<input class="input has-text-right" id="contractIntermentEdit--deathAge" name="deathAge" type="number" min="0" max="150" />
</div>

View File

@ -435,7 +435,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
setUnsavedChanges();
});
sunrise.initializeMinDateUpdate(document.querySelector('#contract--birthDateString'), document.querySelector('#contract--deathDateString'));
sunrise.initializeMinDateUpdate(document.querySelector('#contract--deathDateString'), document.querySelector('#contract--funeralDateString'));
const birthDateStringElement = document.querySelector('#contract--birthDateString');
const deathDateStringElement = document.querySelector('#contract--deathDateString');
sunrise.initializeMinDateUpdate(birthDateStringElement, deathDateStringElement);
sunrise.initializeMinDateUpdate(deathDateStringElement, document.querySelector('#contract--funeralDateString'));
const calculateDeathAgeButtonElement = document.querySelector('#button--calculateDeathAge');
function toggleDeathAgeCalculatorButton() {
if (birthDateStringElement.value === '' ||
deathDateStringElement.value === '') {
calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled');
}
else {
calculateDeathAgeButtonElement.removeAttribute('disabled');
}
}
birthDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
deathDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
calculateDeathAgeButtonElement.addEventListener('click', (clickEvent) => {
clickEvent.preventDefault();
const birthDate = new Date(birthDateStringElement.value);
const deathDate = new Date(deathDateStringElement.value);
const ageInDays = Math.floor((deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24));
const ageInYears = Math.floor(ageInDays / 365.25);
const deathAgeElement = document.querySelector('#contract--deathAge');
const deathAgePeriodElement = document.querySelector('#contract--deathAgePeriod');
if (ageInYears > 0) {
deathAgeElement.value = ageInYears.toString();
deathAgePeriodElement.value = 'Years';
}
else if (ageInDays > 0) {
deathAgeElement.value = ageInDays.toString();
deathAgePeriodElement.value = 'Days';
}
else {
deathAgeElement.value = '0';
deathAgePeriodElement.value = 'Stillborn';
}
setUnsavedChanges();
});
}
})();

View File

@ -724,14 +724,80 @@ declare const exports: {
setUnsavedChanges()
})
const birthDateStringElement = document.querySelector(
'#contract--birthDateString'
) as HTMLInputElement
const deathDateStringElement = document.querySelector(
'#contract--deathDateString'
) as HTMLInputElement
sunrise.initializeMinDateUpdate(
document.querySelector('#contract--birthDateString') as HTMLInputElement,
document.querySelector('#contract--deathDateString') as HTMLInputElement
birthDateStringElement,
deathDateStringElement
)
sunrise.initializeMinDateUpdate(
document.querySelector('#contract--deathDateString') as HTMLInputElement,
deathDateStringElement,
document.querySelector('#contract--funeralDateString') as HTMLInputElement
)
const calculateDeathAgeButtonElement = document.querySelector(
'#button--calculateDeathAge'
) as HTMLButtonElement
function toggleDeathAgeCalculatorButton(): void {
if (
birthDateStringElement.value === '' ||
deathDateStringElement.value === ''
) {
calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled')
} else {
calculateDeathAgeButtonElement.removeAttribute('disabled')
}
}
birthDateStringElement.addEventListener(
'change',
toggleDeathAgeCalculatorButton
)
deathDateStringElement.addEventListener(
'change',
toggleDeathAgeCalculatorButton
)
calculateDeathAgeButtonElement.addEventListener('click', (clickEvent) => {
clickEvent.preventDefault()
const birthDate = new Date(birthDateStringElement.value)
const deathDate = new Date(deathDateStringElement.value)
const ageInDays = Math.floor(
(deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24)
)
const ageInYears = Math.floor(ageInDays / 365.25)
const deathAgeElement = document.querySelector(
'#contract--deathAge'
) as HTMLInputElement
const deathAgePeriodElement = document.querySelector(
'#contract--deathAgePeriod'
) as HTMLInputElement
if (ageInYears > 0) {
deathAgeElement.value = ageInYears.toString()
deathAgePeriodElement.value = 'Years'
} else if (ageInDays > 0) {
deathAgeElement.value = ageInDays.toString()
deathAgePeriodElement.value = 'Days'
} else {
deathAgeElement.value = '0'
deathAgePeriodElement.value = 'Stillborn'
}
setUnsavedChanges()
})
}
})()

View File

@ -8,6 +8,48 @@ Object.defineProperty(exports, "__esModule", { value: true });
delete exports.deathAgePeriods;
const intermentContainerTypes = exports.intermentContainerTypes;
delete exports.intermentContainerTypes;
function initializeDeathAgeCalculator(fieldPrefix) {
const birthDateStringElement = document.querySelector(`#${fieldPrefix}--birthDateString`);
const deathDateStringElement = document.querySelector(`#${fieldPrefix}--deathDateString`);
const calculateDeathAgeButtonElement = document.querySelector('#button--calculateDeathAge');
function toggleDeathAgeCalculatorButton() {
if (birthDateStringElement.value === '' ||
deathDateStringElement.value === '') {
calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled');
}
else {
calculateDeathAgeButtonElement.removeAttribute('disabled');
}
}
toggleDeathAgeCalculatorButton();
birthDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
deathDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
const deathAgeElement = document.querySelector(`#${fieldPrefix}--deathAge`);
const deathAgePeriodElement = document.querySelector(`#${fieldPrefix}--deathAgePeriod`);
function calculateDeathAge() {
if (birthDateStringElement.value === '' ||
deathDateStringElement.value === '') {
return;
}
const birthDate = new Date(birthDateStringElement.value);
const deathDate = new Date(deathDateStringElement.value);
const ageInDays = Math.floor((deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24));
const ageInYears = Math.floor(ageInDays / 365.25);
if (ageInYears > 0) {
deathAgeElement.value = ageInYears.toString();
deathAgePeriodElement.value = 'Years';
}
else if (ageInDays > 0) {
deathAgeElement.value = ageInDays.toString();
deathAgePeriodElement.value = 'Days';
}
else {
deathAgeElement.value = '0';
deathAgePeriodElement.value = 'Stillborn';
}
}
calculateDeathAgeButtonElement.addEventListener('click', calculateDeathAge);
}
function openEditContractInterment(clickEvent) {
const intermentNumber = clickEvent.currentTarget.closest('tr')?.dataset.intermentNumber;
if (intermentNumber === undefined) {
@ -123,6 +165,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm);
initializeDeathAgeCalculator('contractIntermentEdit');
},
onremoved() {
bulmaJS.toggleHtmlClipped();
@ -290,6 +333,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm);
initializeDeathAgeCalculator('contractIntermentAdd');
},
onremoved() {
bulmaJS.toggleHtmlClipped();

View File

@ -24,6 +24,83 @@ declare const exports: Record<string, unknown>
exports.intermentContainerTypes as IntermentContainerType[]
delete exports.intermentContainerTypes
function initializeDeathAgeCalculator(
fieldPrefix: 'contractIntermentAdd' | 'contractIntermentEdit'
): void {
const birthDateStringElement = document.querySelector(
`#${fieldPrefix}--birthDateString`
) as HTMLInputElement
const deathDateStringElement = document.querySelector(
`#${fieldPrefix}--deathDateString`
) as HTMLInputElement
const calculateDeathAgeButtonElement = document.querySelector(
'#button--calculateDeathAge'
) as HTMLButtonElement
function toggleDeathAgeCalculatorButton(): void {
if (
birthDateStringElement.value === '' ||
deathDateStringElement.value === ''
) {
calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled')
} else {
calculateDeathAgeButtonElement.removeAttribute('disabled')
}
}
toggleDeathAgeCalculatorButton()
birthDateStringElement.addEventListener(
'change',
toggleDeathAgeCalculatorButton
)
deathDateStringElement.addEventListener(
'change',
toggleDeathAgeCalculatorButton
)
const deathAgeElement = document.querySelector(
`#${fieldPrefix}--deathAge`
) as HTMLInputElement
const deathAgePeriodElement = document.querySelector(
`#${fieldPrefix}--deathAgePeriod`
) as HTMLSelectElement
function calculateDeathAge(): void {
if (
birthDateStringElement.value === '' ||
deathDateStringElement.value === ''
) {
return
}
const birthDate = new Date(birthDateStringElement.value)
const deathDate = new Date(deathDateStringElement.value)
const ageInDays = Math.floor(
(deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24)
)
const ageInYears = Math.floor(ageInDays / 365.25)
if (ageInYears > 0) {
deathAgeElement.value = ageInYears.toString()
deathAgePeriodElement.value = 'Years'
} else if (ageInDays > 0) {
deathAgeElement.value = ageInDays.toString()
deathAgePeriodElement.value = 'Days'
} else {
deathAgeElement.value = '0'
deathAgePeriodElement.value = 'Stillborn'
}
}
calculateDeathAgeButtonElement.addEventListener('click', calculateDeathAge)
}
function openEditContractInterment(clickEvent: Event): void {
const intermentNumber = (clickEvent.currentTarget as HTMLElement).closest(
'tr'
@ -198,7 +275,10 @@ declare const exports: Record<string, unknown>
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm)
initializeDeathAgeCalculator('contractIntermentEdit')
},
onremoved() {
bulmaJS.toggleHtmlClipped()
}
@ -424,7 +504,10 @@ declare const exports: Record<string, unknown>
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm)
initializeDeathAgeCalculator('contractIntermentAdd')
},
onremoved() {
bulmaJS.toggleHtmlClipped()
}

View File

@ -687,6 +687,11 @@
</div>
<label class="label" for="contract--deathAge">Death Age</label>
<div class="field has-addons">
<div class="control">
<button class="button" type="button" id="button--calculateDeathAge" aria-label="Calculate Age" disabled>
<span class="icon is-small"><i class="fas fa-calculator" aria-hidden="true"></i></span>
</button>
</div>
<div class="control is-expanded">
<input class="input has-text-right" id="contract--deathAge" name="deathAge" type="number"
min="0" max="150"