From b0f113ba928c4d8606cdf0515a15fc54d806de67 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Fri, 28 Oct 2022 09:59:07 -0400 Subject: [PATCH] admin accessibility testing --- cypress/e2e/01-admin/configTables.cy.d.ts | 1 + cypress/e2e/01-admin/configTables.cy.js | 20 +++++++++++++ cypress/e2e/01-admin/configTables.cy.ts | 27 ++++++++++++++++++ cypress/e2e/01-admin/feeManagement.cy.js | 2 +- cypress/e2e/01-admin/feeManagement.cy.ts | 2 +- .../e2e/01-admin/lotTypeManagement.cy.d.ts | 1 + cypress/e2e/01-admin/lotTypeManagement.cy.js | 17 +++++++++++ cypress/e2e/01-admin/lotTypeManagement.cy.ts | 24 ++++++++++++++++ .../01-admin/occupancyTypeManagement.cy.d.ts | 1 + .../01-admin/occupancyTypeManagement.cy.js | 17 +++++++++++ .../01-admin/occupancyTypeManagement.cy.ts | 24 ++++++++++++++++ public-typescript/adminTables.js | 28 +++++++++++-------- public-typescript/adminTables.ts | 28 +++++++++++-------- public/javascripts/adminTables.min.js | 2 +- test/1_serverCypress.js | 4 +-- test/1_serverCypress.ts | 4 +-- views/admin-tables.ejs | 2 +- 17 files changed, 172 insertions(+), 32 deletions(-) create mode 100644 cypress/e2e/01-admin/configTables.cy.d.ts create mode 100644 cypress/e2e/01-admin/configTables.cy.js create mode 100644 cypress/e2e/01-admin/configTables.cy.ts create mode 100644 cypress/e2e/01-admin/lotTypeManagement.cy.d.ts create mode 100644 cypress/e2e/01-admin/lotTypeManagement.cy.js create mode 100644 cypress/e2e/01-admin/lotTypeManagement.cy.ts create mode 100644 cypress/e2e/01-admin/occupancyTypeManagement.cy.d.ts create mode 100644 cypress/e2e/01-admin/occupancyTypeManagement.cy.js create mode 100644 cypress/e2e/01-admin/occupancyTypeManagement.cy.ts diff --git a/cypress/e2e/01-admin/configTables.cy.d.ts b/cypress/e2e/01-admin/configTables.cy.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/cypress/e2e/01-admin/configTables.cy.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/cypress/e2e/01-admin/configTables.cy.js b/cypress/e2e/01-admin/configTables.cy.js new file mode 100644 index 00000000..91ddf86f --- /dev/null +++ b/cypress/e2e/01-admin/configTables.cy.js @@ -0,0 +1,20 @@ +import { testAdmin } from "../../../test/_globals.js"; +import { logout, login } from "../../support/index.js"; +describe("Admin - Config Table Management", () => { + before(() => { + logout(); + login(testAdmin); + }); + after(logout); + beforeEach("Loads page", () => { + cy.visit("/admin/tables"); + cy.location("pathname").should("equal", "/admin/tables"); + }); + it("Has no detectable accessibility issues", () => { + cy.get(".tabs a").each(($tab) => { + cy.wrap($tab).click({ force: true }); + cy.injectAxe(); + cy.checkA11y(); + }); + }); +}); diff --git a/cypress/e2e/01-admin/configTables.cy.ts b/cypress/e2e/01-admin/configTables.cy.ts new file mode 100644 index 00000000..031c031b --- /dev/null +++ b/cypress/e2e/01-admin/configTables.cy.ts @@ -0,0 +1,27 @@ +/* eslint-disable unicorn/filename-case, promise/catch-or-return, promise/always-return */ + +import { testAdmin } from "../../../test/_globals.js"; + +import { logout, login } from "../../support/index.js"; + +describe("Admin - Config Table Management", () => { + before(() => { + logout(); + login(testAdmin); + }); + + after(logout); + + beforeEach("Loads page", () => { + cy.visit("/admin/tables"); + cy.location("pathname").should("equal", "/admin/tables"); + }); + + it("Has no detectable accessibility issues", () => { + cy.get(".tabs a").each(($tab) => { + cy.wrap($tab).click({ force: true }); + cy.injectAxe(); + cy.checkA11y(); + }); + }); +}); diff --git a/cypress/e2e/01-admin/feeManagement.cy.js b/cypress/e2e/01-admin/feeManagement.cy.js index 1de502f7..6ca7ee62 100644 --- a/cypress/e2e/01-admin/feeManagement.cy.js +++ b/cypress/e2e/01-admin/feeManagement.cy.js @@ -27,7 +27,7 @@ describe("Admin - Fee Management", () => { cy.get(".container--feeCategory .panel-heading .title").should("contain.text", fee.feeCategory); }); }); - it.only("Creates a new fee", () => { + it("Creates a new fee", () => { cy.get("[data-cy='addFee']").first().click(); cy.get(".modal").should("be.visible"); cy.injectAxe(); diff --git a/cypress/e2e/01-admin/feeManagement.cy.ts b/cypress/e2e/01-admin/feeManagement.cy.ts index 13bbbf41..00e0f1ae 100644 --- a/cypress/e2e/01-admin/feeManagement.cy.ts +++ b/cypress/e2e/01-admin/feeManagement.cy.ts @@ -48,7 +48,7 @@ describe("Admin - Fee Management", () => { }); }); - it.only("Creates a new fee", () => { + it("Creates a new fee", () => { cy.get("[data-cy='addFee']").first().click(); cy.get(".modal").should("be.visible"); diff --git a/cypress/e2e/01-admin/lotTypeManagement.cy.d.ts b/cypress/e2e/01-admin/lotTypeManagement.cy.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/cypress/e2e/01-admin/lotTypeManagement.cy.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/cypress/e2e/01-admin/lotTypeManagement.cy.js b/cypress/e2e/01-admin/lotTypeManagement.cy.js new file mode 100644 index 00000000..ed138624 --- /dev/null +++ b/cypress/e2e/01-admin/lotTypeManagement.cy.js @@ -0,0 +1,17 @@ +import { testAdmin } from "../../../test/_globals.js"; +import { logout, login } from "../../support/index.js"; +describe("Admin - Lot Type Management", () => { + before(() => { + logout(); + login(testAdmin); + }); + after(logout); + beforeEach("Loads page", () => { + cy.visit("/admin/lotTypes"); + cy.location("pathname").should("equal", "/admin/lotTypes"); + }); + it("Has no detectable accessibility issues", () => { + cy.injectAxe(); + cy.checkA11y(); + }); +}); diff --git a/cypress/e2e/01-admin/lotTypeManagement.cy.ts b/cypress/e2e/01-admin/lotTypeManagement.cy.ts new file mode 100644 index 00000000..194cb100 --- /dev/null +++ b/cypress/e2e/01-admin/lotTypeManagement.cy.ts @@ -0,0 +1,24 @@ +/* eslint-disable unicorn/filename-case, promise/catch-or-return, promise/always-return */ + +import { testAdmin } from "../../../test/_globals.js"; + +import { logout, login } from "../../support/index.js"; + +describe("Admin - Lot Type Management", () => { + before(() => { + logout(); + login(testAdmin); + }); + + after(logout); + + beforeEach("Loads page", () => { + cy.visit("/admin/lotTypes"); + cy.location("pathname").should("equal", "/admin/lotTypes"); + }); + + it("Has no detectable accessibility issues", () => { + cy.injectAxe(); + cy.checkA11y(); + }); +}); diff --git a/cypress/e2e/01-admin/occupancyTypeManagement.cy.d.ts b/cypress/e2e/01-admin/occupancyTypeManagement.cy.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/cypress/e2e/01-admin/occupancyTypeManagement.cy.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/cypress/e2e/01-admin/occupancyTypeManagement.cy.js b/cypress/e2e/01-admin/occupancyTypeManagement.cy.js new file mode 100644 index 00000000..3e4b56ba --- /dev/null +++ b/cypress/e2e/01-admin/occupancyTypeManagement.cy.js @@ -0,0 +1,17 @@ +import { testAdmin } from "../../../test/_globals.js"; +import { logout, login } from "../../support/index.js"; +describe("Admin - Occupancy Type Management", () => { + before(() => { + logout(); + login(testAdmin); + }); + after(logout); + beforeEach("Loads page", () => { + cy.visit("/admin/occupancyTypes"); + cy.location("pathname").should("equal", "/admin/occupancyTypes"); + }); + it("Has no detectable accessibility issues", () => { + cy.injectAxe(); + cy.checkA11y(); + }); +}); diff --git a/cypress/e2e/01-admin/occupancyTypeManagement.cy.ts b/cypress/e2e/01-admin/occupancyTypeManagement.cy.ts new file mode 100644 index 00000000..c7b8e696 --- /dev/null +++ b/cypress/e2e/01-admin/occupancyTypeManagement.cy.ts @@ -0,0 +1,24 @@ +/* eslint-disable unicorn/filename-case, promise/catch-or-return, promise/always-return */ + +import { testAdmin } from "../../../test/_globals.js"; + +import { logout, login } from "../../support/index.js"; + +describe("Admin - Occupancy Type Management", () => { + before(() => { + logout(); + login(testAdmin); + }); + + after(logout); + + beforeEach("Loads page", () => { + cy.visit("/admin/occupancyTypes"); + cy.location("pathname").should("equal", "/admin/occupancyTypes"); + }); + + it("Has no detectable accessibility issues", () => { + cy.injectAxe(); + cy.checkA11y(); + }); +}); diff --git a/public-typescript/adminTables.js b/public-typescript/adminTables.js index 5a4e82c9..64ed9ea1 100644 --- a/public-typescript/adminTables.js +++ b/public-typescript/adminTables.js @@ -131,10 +131,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + '' + + '" maxlength="100" aria-label="Work Order Type" required />' + "
" + '
' + - '' + + '' + "
" + "") + "" + @@ -323,10 +323,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); '
' + '' + + '" maxlength="100" aria-label="Work Order Milestone Type" required />' + "
" + '
' + - '' + + '' + "
" + "") + "" + @@ -518,12 +518,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); '" />' + ('
' + '
' + - '' + + '' + "
" + '
' + - '' + + '' + "
" + "
") + "" + @@ -744,12 +745,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); '" />' + ('
' + '
' + - '' + + '' + "
" + '
' + - '' + + '' + "
" + "
") + "" + diff --git a/public-typescript/adminTables.ts b/public-typescript/adminTables.ts index ff0f39f2..239985f2 100644 --- a/public-typescript/adminTables.ts +++ b/public-typescript/adminTables.ts @@ -197,10 +197,10 @@ declare const bulmaJS: BulmaJS; '
' + '' + + '" maxlength="100" aria-label="Work Order Type" required />' + "
" + '
' + - '' + + '' + "
" + "") + "" + @@ -460,10 +460,10 @@ declare const bulmaJS: BulmaJS; '
' + '' + + '" maxlength="100" aria-label="Work Order Milestone Type" required />' + "
" + '
' + - '' + + '' + "
" + "") + "" + @@ -725,12 +725,13 @@ declare const bulmaJS: BulmaJS; '" />' + ('
' + '
' + - '' + + '' + "
" + '
' + - '' + + '' + "
" + "
") + "" + @@ -1028,12 +1029,15 @@ declare const bulmaJS: BulmaJS; '" />' + ('
' + '
' + - '' + + '' + "
" + '
' + - '' + + '' + "
" + "
") + "" + diff --git a/public/javascripts/adminTables.min.js b/public/javascripts/adminTables.min.js index 01fedcc7..ad9c9a71 100644 --- a/public/javascripts/adminTables.min.js +++ b/public/javascripts/adminTables.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix;let t=exports.workOrderTypes;delete exports.workOrderTypes;const s=s=>{s.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateWorkOrderType",s.currentTarget,e=>{e.success?(t=e.workOrderTypes,bulmaJS.alert({message:"Work Order Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},o=s=>{const o=s.currentTarget.closest("tr"),r=o.dataset.workOrderTypeId;bulmaJS.confirm({title:"Delete Work Order Type",message:"Are you sure you want to delete this work order type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteWorkOrderType",{workOrderTypeId:r},e=>{e.success?(0===(t=e.workOrderTypes).length?l():o.remove(),bulmaJS.alert({message:"Work Order Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},r=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderTypeUp",{workOrderTypeId:o,moveToTop:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},a=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderTypeDown",{workOrderTypeId:o,moveToBottom:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},l=()=>{const e=document.querySelector("#container--workOrderTypes");if(0!==t.length){e.innerHTML="";for(const l of t){const t=document.createElement("tr");t.dataset.workOrderTypeId=l.workOrderTypeId.toString(),t.innerHTML='
',t.querySelector("form").addEventListener("submit",s),t.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click",r),t.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click",a),t.querySelector(".button--deleteWorkOrderType").addEventListener("click",o),e.append(t)}}else e.innerHTML='

There are no active work order types.

'};document.querySelector("#form--addWorkOrderType").addEventListener("submit",s=>{s.preventDefault();const o=s.currentTarget;cityssm.postJSON(e+"/admin/doAddWorkOrderType",o,e=>{e.success?(t=e.workOrderTypes,l(),o.reset(),o.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})}),l();let n=exports.workOrderMilestoneTypes;delete exports.workOrderMilestoneTypes;const d=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateWorkOrderMilestoneType",t.currentTarget,e=>{e.success?(n=e.workOrderMilestoneTypes,bulmaJS.alert({message:"Work Order Milestone Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},c=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.workOrderMilestoneTypeId;bulmaJS.confirm({title:"Delete Work Order Milestone Type",message:"Are you sure you want to delete this work order milestone type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Milestone Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteWorkOrderMilestoneType",{workOrderMilestoneTypeId:o},e=>{e.success?(0===(n=e.workOrderMilestoneTypes).length?p():s.remove(),bulmaJS.alert({message:"Work Order Milestone Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},i=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderMilestoneTypeUp",{workOrderMilestoneTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},u=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderMilestoneTypeDown",{workOrderMilestoneTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},p=()=>{const e=document.querySelector("#container--workOrderMilestoneTypes");if(0!==n.length){e.innerHTML="";for(const t of n){const s=document.createElement("tr");s.dataset.workOrderMilestoneTypeId=t.workOrderMilestoneTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",d),s.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click",i),s.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click",u),s.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click",c),e.append(s)}}else e.innerHTML='

There are no active work order milestone types.

'};document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddWorkOrderMilestoneType",s,e=>{e.success?(n=e.workOrderMilestoneTypes,p(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})}),p();let m=exports.lotStatuses;delete exports.lotStatuses;const y=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateLotStatus",t.currentTarget,e=>{e.success?(m=e.lotStatuses,bulmaJS.alert({message:exports.aliases.lot+" Status Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},v=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotStatusId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Status",message:"Are you sure you want to delete this status?
Note that no "+exports.aliases.lots.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Status",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteLotStatus",{lotStatusId:o},e=>{e.success?(0===(m=e.lotStatuses).length?b():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" Status Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})}}})},T=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e+"/admin/doMoveLotStatusUp",{lotStatusId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,b()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},g=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e+"/admin/doMoveLotStatusDown",{lotStatusId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,b()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},b=()=>{const e=document.querySelector("#container--lotStatuses");if(0!==t.length){e.innerHTML="";for(const t of m){const s=document.createElement("tr");s.dataset.lotStatusId=t.lotStatusId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",y),s.querySelector(".button--moveLotStatusUp").addEventListener("click",T),s.querySelector(".button--moveLotStatusDown").addEventListener("click",g),s.querySelector(".button--deleteLotStatus").addEventListener("click",v),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" statuses.

"};document.querySelector("#form--addLotStatus").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddLotStatus",s,e=>{e.success?(m=e.lotStatuses,b(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})}),b();let S=exports.lotOccupantTypes;delete exports.lotOccupantTypes;const O=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateLotOccupantType",t.currentTarget,e=>{e.success?(S=e.lotOccupantTypes,bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},M=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotOccupantTypeId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupant.toLowerCase()+" type?
Note that no "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteLotOccupantType",{lotOccupantTypeId:o},e=>{e.success?(0===(S=e.lotOccupantTypes).length?w():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},k=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e+"/admin/doMoveLotOccupantTypeUp",{lotOccupantTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},f=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e+"/admin/doMoveLotOccupantTypeDown",{lotOccupantTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},w=()=>{const e=document.querySelector("#container--lotOccupantTypes");if(0!==t.length){e.innerHTML="";for(const t of S){const s=document.createElement("tr");s.dataset.lotOccupantTypeId=t.lotOccupantTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",O),s.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click",k),s.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click",f),s.querySelector(".button--deleteLotOccupantType").addEventListener("click",M),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" "+cityssm.escapeHTML(exports.aliases.occupant.toLowerCase())+" types.

"};document.querySelector("#form--addLotOccupantType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddLotOccupantType",s,e=>{e.success?(S=e.lotOccupantTypes,w(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})}),w()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix;let t=exports.workOrderTypes;delete exports.workOrderTypes;const s=s=>{s.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateWorkOrderType",s.currentTarget,e=>{e.success?(t=e.workOrderTypes,bulmaJS.alert({message:"Work Order Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},o=s=>{const o=s.currentTarget.closest("tr"),r=o.dataset.workOrderTypeId;bulmaJS.confirm({title:"Delete Work Order Type",message:"Are you sure you want to delete this work order type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteWorkOrderType",{workOrderTypeId:r},e=>{e.success?(0===(t=e.workOrderTypes).length?l():o.remove(),bulmaJS.alert({message:"Work Order Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},r=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderTypeUp",{workOrderTypeId:o,moveToTop:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},a=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderTypeDown",{workOrderTypeId:o,moveToBottom:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})},l=()=>{const e=document.querySelector("#container--workOrderTypes");if(0!==t.length){e.innerHTML="";for(const l of t){const t=document.createElement("tr");t.dataset.workOrderTypeId=l.workOrderTypeId.toString(),t.innerHTML='
',t.querySelector("form").addEventListener("submit",s),t.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click",r),t.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click",a),t.querySelector(".button--deleteWorkOrderType").addEventListener("click",o),e.append(t)}}else e.innerHTML='

There are no active work order types.

'};document.querySelector("#form--addWorkOrderType").addEventListener("submit",s=>{s.preventDefault();const o=s.currentTarget;cityssm.postJSON(e+"/admin/doAddWorkOrderType",o,e=>{e.success?(t=e.workOrderTypes,l(),o.reset(),o.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Type",message:e.errorMessage,contextualColorName:"danger"})})}),l();let n=exports.workOrderMilestoneTypes;delete exports.workOrderMilestoneTypes;const d=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateWorkOrderMilestoneType",t.currentTarget,e=>{e.success?(n=e.workOrderMilestoneTypes,bulmaJS.alert({message:"Work Order Milestone Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},i=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.workOrderMilestoneTypeId;bulmaJS.confirm({title:"Delete Work Order Milestone Type",message:"Are you sure you want to delete this work order milestone type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Milestone Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteWorkOrderMilestoneType",{workOrderMilestoneTypeId:o},e=>{e.success?(0===(n=e.workOrderMilestoneTypes).length?p():s.remove(),bulmaJS.alert({message:"Work Order Milestone Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},c=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderMilestoneTypeUp",{workOrderMilestoneTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},u=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e+"/admin/doMoveWorkOrderMilestoneTypeDown",{workOrderMilestoneTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})},p=()=>{const e=document.querySelector("#container--workOrderMilestoneTypes");if(0!==n.length){e.innerHTML="";for(const t of n){const s=document.createElement("tr");s.dataset.workOrderMilestoneTypeId=t.workOrderMilestoneTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",d),s.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click",c),s.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click",u),s.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click",i),e.append(s)}}else e.innerHTML='

There are no active work order milestone types.

'};document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddWorkOrderMilestoneType",s,e=>{e.success?(n=e.workOrderMilestoneTypes,p(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Milestone Type",message:e.errorMessage,contextualColorName:"danger"})})}),p();let m=exports.lotStatuses;delete exports.lotStatuses;const y=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateLotStatus",t.currentTarget,e=>{e.success?(m=e.lotStatuses,bulmaJS.alert({message:exports.aliases.lot+" Status Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},v=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotStatusId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Status",message:"Are you sure you want to delete this status?
Note that no "+exports.aliases.lots.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Status",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteLotStatus",{lotStatusId:o},e=>{e.success?(0===(m=e.lotStatuses).length?g():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" Status Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})}}})},T=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e+"/admin/doMoveLotStatusUp",{lotStatusId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},b=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e+"/admin/doMoveLotStatusDown",{lotStatusId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})},g=()=>{const e=document.querySelector("#container--lotStatuses");if(0!==t.length){e.innerHTML="";for(const t of m){const s=document.createElement("tr");s.dataset.lotStatusId=t.lotStatusId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",y),s.querySelector(".button--moveLotStatusUp").addEventListener("click",T),s.querySelector(".button--moveLotStatusDown").addEventListener("click",b),s.querySelector(".button--deleteLotStatus").addEventListener("click",v),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" statuses.

"};document.querySelector("#form--addLotStatus").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddLotStatus",s,e=>{e.success?(m=e.lotStatuses,g(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Status",message:e.errorMessage,contextualColorName:"danger"})})}),g();let S=exports.lotOccupantTypes;delete exports.lotOccupantTypes;const O=t=>{t.preventDefault(),cityssm.postJSON(e+"/admin/doUpdateLotOccupantType",t.currentTarget,e=>{e.success?(S=e.lotOccupantTypes,bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},M=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotOccupantTypeId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupant.toLowerCase()+" type?
Note that no "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",callbackFunction:()=>{cityssm.postJSON(e+"/admin/doDeleteLotOccupantType",{lotOccupantTypeId:o},e=>{e.success?(0===(S=e.lotOccupantTypes).length?w():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})}}})},k=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e+"/admin/doMoveLotOccupantTypeUp",{lotOccupantTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},f=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e+"/admin/doMoveLotOccupantTypeDown",{lotOccupantTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})},w=()=>{const e=document.querySelector("#container--lotOccupantTypes");if(0!==t.length){e.innerHTML="";for(const t of S){const s=document.createElement("tr");s.dataset.lotOccupantTypeId=t.lotOccupantTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",O),s.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click",k),s.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click",f),s.querySelector(".button--deleteLotOccupantType").addEventListener("click",M),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" "+cityssm.escapeHTML(exports.aliases.occupant.toLowerCase())+" types.

"};document.querySelector("#form--addLotOccupantType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e+"/admin/doAddLotOccupantType",s,e=>{e.success?(S=e.lotOccupantTypes,w(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage,contextualColorName:"danger"})})}),w()})(); \ No newline at end of file diff --git a/test/1_serverCypress.js b/test/1_serverCypress.js index 5160a48e..e1e0de76 100644 --- a/test/1_serverCypress.js +++ b/test/1_serverCypress.js @@ -1,7 +1,7 @@ import * as assert from "assert"; import { portNumber } from "./_globals.js"; -import { exec } from "child_process"; -import * as http from "http"; +import { exec } from "node:child_process"; +import * as http from "node:http"; import { app } from "../app.js"; describe("lot-occupancy-system", () => { const httpServer = http.createServer(app); diff --git a/test/1_serverCypress.ts b/test/1_serverCypress.ts index 6c7ea1eb..f862c481 100644 --- a/test/1_serverCypress.ts +++ b/test/1_serverCypress.ts @@ -4,9 +4,9 @@ import * as assert from "assert"; import { portNumber } from "./_globals.js"; -import { exec } from "child_process"; +import { exec } from "node:child_process"; -import * as http from "http"; +import * as http from "node:http"; import { app } from "../app.js"; describe("lot-occupancy-system", () => { diff --git a/views/admin-tables.ejs b/views/admin-tables.ejs index faa42840..525c9db7 100644 --- a/views/admin-tables.ejs +++ b/views/admin-tables.ejs @@ -28,7 +28,7 @@
-