From b2da12dac1d82025e9ee7081e9e4b58a79b913f5 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Mon, 31 Mar 2025 14:59:31 -0400 Subject: [PATCH] linting --- .ncurc.json | 3 + README.md | 9 + .../admin-post/doAddBurialSiteStatus.d.ts | 2 +- handlers/admin-post/doAddBurialSiteStatus.js | 4 +- handlers/admin-post/doAddBurialSiteStatus.ts | 7 +- handlers/admin-post/doAddBurialSiteType.d.ts | 2 +- handlers/admin-post/doAddBurialSiteType.ts | 3 +- .../admin-post/doAddBurialSiteTypeField.ts | 1 + handlers/admin-post/doAddContractType.js | 4 +- handlers/admin-post/doAddContractType.ts | 5 +- public/javascripts/contract.editInterments.js | 10 +- public/javascripts/contract.editInterments.ts | 12 +- public/javascripts/main.js | 16 +- public/javascripts/main.ts | 43 +- public/javascripts/types.d.ts | 14 +- public/javascripts/types.ts | 28 +- public/javascripts/workOrder.edit.js | 2 +- public/javascripts/workOrder.edit.ts | 3 +- public/javascripts/workOrder.editComments.js | 2 +- public/javascripts/workOrder.editComments.ts | 2 +- public/javascripts/workOrder.editRelated.js | 25 +- public/javascripts/workOrder.editRelated.ts | 33 +- temp/legacyImportFromCsv/index.js | 3 +- temp/legacyImportFromCsv/index.ts | 6 +- views/_header.ejs | 132 +-- views/admin-burialSiteTypes.ejs | 68 +- views/admin-contractTypes.ejs | 132 +-- views/admin-tables.ejs | 168 ++-- views/burialSite-edit.ejs | 30 +- views/burialSite-search.ejs | 52 +- views/burialSite-view.ejs | 15 +- views/cemetery-edit.ejs | 331 ++++--- views/cemetery-view.ejs | 30 +- views/dashboard.ejs | 8 +- views/funeralHome-edit.ejs | 95 +- views/print/pdf/ssm.cemetery.burialPermit.ejs | 122 +-- views/print/pdf/ssm.cemetery.contract.ejs | 858 +++++++++--------- views/print/pdf/workOrder-commentLog.ejs | 85 +- views/print/pdf/workOrder.ejs | 82 +- views/workOrder-edit.ejs | 401 ++++---- views/workOrder-search.ejs | 132 +-- 41 files changed, 1574 insertions(+), 1406 deletions(-) create mode 100644 .ncurc.json diff --git a/.ncurc.json b/.ncurc.json new file mode 100644 index 00000000..94ae07e1 --- /dev/null +++ b/.ncurc.json @@ -0,0 +1,3 @@ +{ + "reject": ["puppeteer"] +} diff --git a/README.md b/README.md index b3429d0f..724c089e 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,15 @@ Sunrise CMS does not need an expensive server to run. No separate database server is required either. The whole application could run on a current, modest workstation. +### ✔️ Track Unlimited Cemeteries and Burial Sites + +There are no limits to the number of records that can be tracked in Sunrise CMS. + +### ✔️ Includes a Built-In Work Order System + +In addition to tracking data related to cemetery plots, +Sunrise CMS can also track work order activities, like grave maintenance. + ### ✔️ Sunrise CMS is Free and Open Source There's no cost to use it. diff --git a/handlers/admin-post/doAddBurialSiteStatus.d.ts b/handlers/admin-post/doAddBurialSiteStatus.d.ts index c7c5d6a5..b0911c26 100644 --- a/handlers/admin-post/doAddBurialSiteStatus.d.ts +++ b/handlers/admin-post/doAddBurialSiteStatus.d.ts @@ -1,5 +1,5 @@ import type { Request, Response } from 'express'; export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/admin-post/doAddBurialSiteStatus.js b/handlers/admin-post/doAddBurialSiteStatus.js index dc6a0b45..f3519bcf 100644 --- a/handlers/admin-post/doAddBurialSiteStatus.js +++ b/handlers/admin-post/doAddBurialSiteStatus.js @@ -5,7 +5,7 @@ export default async function handler(request, response) { const burialSiteStatuses = await getBurialSiteStatuses(); response.json({ success: true, - burialSiteStatusId, - burialSiteStatuses + burialSiteStatuses, + burialSiteStatusId }); } diff --git a/handlers/admin-post/doAddBurialSiteStatus.ts b/handlers/admin-post/doAddBurialSiteStatus.ts index ab0fb337..be478bfb 100644 --- a/handlers/admin-post/doAddBurialSiteStatus.ts +++ b/handlers/admin-post/doAddBurialSiteStatus.ts @@ -7,7 +7,7 @@ export default async function handler( request: Request< unknown, unknown, - { burialSiteStatus: string; orderNumber?: string | number } + { burialSiteStatus: string; orderNumber?: number | string } >, response: Response ): Promise { @@ -22,7 +22,8 @@ export default async function handler( response.json({ success: true, - burialSiteStatusId, - burialSiteStatuses + + burialSiteStatuses, + burialSiteStatusId }) } diff --git a/handlers/admin-post/doAddBurialSiteType.d.ts b/handlers/admin-post/doAddBurialSiteType.d.ts index 26f38122..b56ace0d 100644 --- a/handlers/admin-post/doAddBurialSiteType.d.ts +++ b/handlers/admin-post/doAddBurialSiteType.d.ts @@ -1,5 +1,5 @@ import type { Request, Response } from 'express'; export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/admin-post/doAddBurialSiteType.ts b/handlers/admin-post/doAddBurialSiteType.ts index d27e60bf..a5573132 100644 --- a/handlers/admin-post/doAddBurialSiteType.ts +++ b/handlers/admin-post/doAddBurialSiteType.ts @@ -7,7 +7,7 @@ export default async function handler( request: Request< unknown, unknown, - { burialSiteType: string; orderNumber?: string | number } + { burialSiteType: string; orderNumber?: number | string } >, response: Response ): Promise { @@ -22,6 +22,7 @@ export default async function handler( response.json({ success: true, + burialSiteTypeId, burialSiteTypes }) diff --git a/handlers/admin-post/doAddBurialSiteTypeField.ts b/handlers/admin-post/doAddBurialSiteTypeField.ts index 62a0dc5b..11f0f9e9 100644 --- a/handlers/admin-post/doAddBurialSiteTypeField.ts +++ b/handlers/admin-post/doAddBurialSiteTypeField.ts @@ -18,6 +18,7 @@ export default async function handler( response.json({ success: true, + burialSiteTypeFieldId, burialSiteTypes }) diff --git a/handlers/admin-post/doAddContractType.js b/handlers/admin-post/doAddContractType.js index 20e32e03..758e448d 100644 --- a/handlers/admin-post/doAddContractType.js +++ b/handlers/admin-post/doAddContractType.js @@ -6,8 +6,8 @@ export default async function handler(request, response) { const allContractTypeFields = await getAllContractTypeFields(); response.json({ success: true, + allContractTypeFields, contractTypeId, - contractTypes, - allContractTypeFields + contractTypes }); } diff --git a/handlers/admin-post/doAddContractType.ts b/handlers/admin-post/doAddContractType.ts index f18aa4b7..4d167f17 100644 --- a/handlers/admin-post/doAddContractType.ts +++ b/handlers/admin-post/doAddContractType.ts @@ -22,8 +22,9 @@ export default async function handler( response.json({ success: true, + + allContractTypeFields, contractTypeId, - contractTypes, - allContractTypeFields + contractTypes }) } diff --git a/public/javascripts/contract.editInterments.js b/public/javascripts/contract.editInterments.js index c6626623..9dc5246c 100644 --- a/public/javascripts/contract.editInterments.js +++ b/public/javascripts/contract.editInterments.js @@ -192,11 +192,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); Birth:
- ${cityssm.escapeHTML(interment.birthDateString ?? '(No Birth Date)')}
+ ${cityssm.escapeHTML((interment.birthDateString ?? '') === '' + ? '(No Birth Date)' + : interment.birthDateString ?? '')}
${cityssm.escapeHTML(interment.birthPlace ?? '(No Birth Place)')}
-
+
Death:
@@ -205,12 +207,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); ${cityssm.escapeHTML(interment.deathPlace ?? '(No Death Place)')}
-
+
Age:
- ${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}
+ ${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')} ${cityssm.escapeHTML(interment.deathAgePeriod ?? '')}
diff --git a/public/javascripts/contract.editInterments.ts b/public/javascripts/contract.editInterments.ts index c92ea4b1..8cb36d5e 100644 --- a/public/javascripts/contract.editInterments.ts +++ b/public/javascripts/contract.editInterments.ts @@ -291,11 +291,15 @@ declare const exports: Record Birth:
- ${cityssm.escapeHTML(interment.birthDateString ?? '(No Birth Date)')}
+ ${cityssm.escapeHTML( + (interment.birthDateString ?? '') === '' + ? '(No Birth Date)' + : interment.birthDateString ?? '' + )}
${cityssm.escapeHTML(interment.birthPlace ?? '(No Birth Place)')}
-
+
Death:
@@ -304,12 +308,12 @@ declare const exports: Record ${cityssm.escapeHTML(interment.deathPlace ?? '(No Death Place)')}
-
+
Age:
- ${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}
+ ${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')} ${cityssm.escapeHTML(interment.deathAgePeriod ?? '')}
diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 73fb9577..892a5516 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -103,10 +103,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); actualSeedString += 'a1'; } return exports.randomColor({ - seed: actualSeedString + actualSeedString, hue: hues[actualSeedString.codePointAt(actualSeedString.length - 1) % hues.length], - luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length] + luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length], + seed: actualSeedString + actualSeedString }); } /* @@ -202,24 +202,24 @@ Object.defineProperty(exports, "__esModule", { value: true }); * Declare sunrise */ const sunrise = { - urlPrefix, apiKey: document.querySelector('main')?.dataset.apiKey ?? '', dynamicsGPIntegrationIsEnabled, + urlPrefix, highlightMap, initializeUnlockFieldButtons, - populateAliases, escapedAliases, + populateAliases, getRandomColor, - setUnsavedChanges, clearUnsavedChanges, hasUnsavedChanges, - getMoveUpDownButtonFieldHTML, + setUnsavedChanges, getLoadingParagraphHTML, + getMoveUpDownButtonFieldHTML, getSearchResultsPagerHTML, - getCemeteryURL, getBurialSiteURL, - getFuneralHomeURL, + getCemeteryURL, getContractURL, + getFuneralHomeURL, getWorkOrderURL }; exports.sunrise = sunrise; diff --git a/public/javascripts/main.ts b/public/javascripts/main.ts index 2df83153..7901fb02 100644 --- a/public/javascripts/main.ts +++ b/public/javascripts/main.ts @@ -3,26 +3,26 @@ import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js' import type { Sunrise } from './types.js' type RandomColorHue = - | 'red' - | 'orange' - | 'yellow' - | 'green' | 'blue' - | 'purple' - | 'pink' + | 'green' | 'monochrome' -type RandomColorLuminosity = 'bright' | 'light' | 'dark' + | 'orange' + | 'pink' + | 'purple' + | 'red' + | 'yellow' +type RandomColorLuminosity = 'bright' | 'dark' | 'light' declare const cityssm: cityssmGlobal declare const exports: Record & { aliases: Record randomColor: (options?: { + alpha?: number + count?: number + format?: 'hex' | 'hsl' | 'hsla' | 'hslArray' | 'rgb' | 'rgba' | 'rgbArray' hue?: RandomColorHue luminosity?: RandomColorLuminosity - count?: number seed?: number | string - format?: 'rgb' | 'rgba' | 'rgbArray' | 'hsl' | 'hsla' | 'hslArray' | 'hex' - alpha?: number }) => string } ;(() => { @@ -55,7 +55,7 @@ declare const exports: Record & { function highlightMap( mapContainerElement: HTMLElement, mapKey: string, - contextualClass: 'success' | 'danger' + contextualClass: 'danger' | 'success' ): void { // Search for ID let svgId = mapKey @@ -175,7 +175,6 @@ declare const exports: Record & { } return exports.randomColor({ - seed: actualSeedString + actualSeedString, hue: hues[ (actualSeedString.codePointAt(actualSeedString.length - 1) as number) % hues.length @@ -185,7 +184,8 @@ declare const exports: Record & { (actualSeedString.codePointAt( actualSeedString.length - 2 ) as number) % luminosity.length - ] + ], + seed: actualSeedString + actualSeedString }) } @@ -271,10 +271,10 @@ declare const exports: Record & { function getRecordURL( recordTypePlural: - | 'cemeteries' | 'burialSites' - | 'funeralHomes' + | 'cemeteries' | 'contracts' + | 'funeralHomes' | 'workOrders', recordId: number | string, edit: boolean, @@ -342,29 +342,30 @@ declare const exports: Record & { */ const sunrise: Sunrise = { - urlPrefix, apiKey: document.querySelector('main')?.dataset.apiKey ?? '', dynamicsGPIntegrationIsEnabled, + urlPrefix, + highlightMap, initializeUnlockFieldButtons, - populateAliases, escapedAliases, + populateAliases, getRandomColor, - setUnsavedChanges, clearUnsavedChanges, hasUnsavedChanges, + setUnsavedChanges, - getMoveUpDownButtonFieldHTML, getLoadingParagraphHTML, + getMoveUpDownButtonFieldHTML, getSearchResultsPagerHTML, - getCemeteryURL, getBurialSiteURL, - getFuneralHomeURL, + getCemeteryURL, getContractURL, + getFuneralHomeURL, getWorkOrderURL } diff --git a/public/javascripts/types.d.ts b/public/javascripts/types.d.ts index ca74cbbc..71d535d6 100644 --- a/public/javascripts/types.d.ts +++ b/public/javascripts/types.d.ts @@ -1,28 +1,28 @@ export interface Sunrise { urlPrefix: string; apiKey: string; - highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: 'success' | 'danger') => void; + highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: 'danger' | 'success') => void; initializeUnlockFieldButtons: (containerElement: HTMLElement) => void; populateAliases: (containerElement: HTMLElement) => void; escapedAliases: { ExternalReceiptNumber: string; externalReceiptNumber: string; - WorkOrderOpenDate: string; - workOrderOpenDate: string; WorkOrderCloseDate: string; workOrderCloseDate: string; + WorkOrderOpenDate: string; + workOrderOpenDate: string; }; dynamicsGPIntegrationIsEnabled: boolean; getRandomColor: (seedString: string) => string; - setUnsavedChanges: () => void; clearUnsavedChanges: () => void; hasUnsavedChanges: () => boolean; - getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string; + setUnsavedChanges: () => void; getLoadingParagraphHTML: (captionText?: string) => string; + getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string; getSearchResultsPagerHTML: (limit: number, offset: number, count: number) => string; - getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string; - getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string; getBurialSiteURL: (burialSiteId?: number | string, edit?: boolean, time?: boolean) => string; + getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string; getContractURL: (contractId?: number | string, edit?: boolean, time?: boolean) => string; + getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string; getWorkOrderURL: (workOrderId?: number | string, edit?: boolean, time?: boolean) => string; } diff --git a/public/javascripts/types.ts b/public/javascripts/types.ts index b34048bc..c3b83e0c 100644 --- a/public/javascripts/types.ts +++ b/public/javascripts/types.ts @@ -5,7 +5,7 @@ export interface Sunrise { highlightMap: ( mapContainerElement: HTMLElement, mapKey: string, - contextualClass: 'success' | 'danger' + contextualClass: 'danger' | 'success' ) => void initializeUnlockFieldButtons: (containerElement: HTMLElement) => void @@ -15,40 +15,52 @@ export interface Sunrise { escapedAliases: { ExternalReceiptNumber: string externalReceiptNumber: string - WorkOrderOpenDate: string - workOrderOpenDate: string WorkOrderCloseDate: string workOrderCloseDate: string + WorkOrderOpenDate: string + workOrderOpenDate: string } dynamicsGPIntegrationIsEnabled: boolean getRandomColor: (seedString: string) => string - setUnsavedChanges: () => void clearUnsavedChanges: () => void hasUnsavedChanges: () => boolean + setUnsavedChanges: () => void + getLoadingParagraphHTML: (captionText?: string) => string getMoveUpDownButtonFieldHTML: ( upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean ) => string - getLoadingParagraphHTML: (captionText?: string) => string getSearchResultsPagerHTML: ( limit: number, offset: number, count: number ) => string - getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string - getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string - getBurialSiteURL: (burialSiteId?: number | string, edit?: boolean, time?: boolean) => string + getBurialSiteURL: ( + burialSiteId?: number | string, + edit?: boolean, + time?: boolean + ) => string + getCemeteryURL: ( + cemeteryId?: number | string, + edit?: boolean, + time?: boolean + ) => string getContractURL: ( contractId?: number | string, edit?: boolean, time?: boolean ) => string + getFuneralHomeURL: ( + funeralHomeId?: number | string, + edit?: boolean, + time?: boolean + ) => string getWorkOrderURL: ( workOrderId?: number | string, edit?: boolean, diff --git a/public/javascripts/workOrder.edit.js b/public/javascripts/workOrder.edit.js index c50a711d..6aaa32c3 100644 --- a/public/javascripts/workOrder.edit.js +++ b/public/javascripts/workOrder.edit.js @@ -382,7 +382,7 @@ Object.defineProperty(exports, "__esModule", { value: true });