diff --git a/package.json b/package.json index 5c22e089..0a51f77a 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "dev:live": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* nodemon ./bin/www.js", "cy:open": "cypress open --config-file cypress.config.js", "cy:run": "cypress run --config-file cypress.config.js", + "cy:run:firefox": "cypress run --config-file cypress.config.js --browser firefox", "test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true mocha --timeout 30000 --exit", "coverage": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true c8 --reporter=lcov --reporter=text --reporter=text-summary mocha --timeout 30000 --exit", "temp:legacy:importFromCsv": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true node ./temp/legacy.importFromCsv.js", diff --git a/public-typescript/main.js b/public-typescript/main.js index 366a9dd2..5d694200 100644 --- a/public-typescript/main.js +++ b/public-typescript/main.js @@ -80,7 +80,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); displayMode: 'dialog' }; function initializeDatePickers(containerElement) { - var _a; + var _a, _b; const dateElements = containerElement.querySelectorAll("input[type='date']"); for (const dateElement of dateElements) { const datePickerOptions = Object.assign({}, datePickerBaseOptions); @@ -125,7 +125,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } else { clearButtonElement.dataset.tooltip = 'Clear'; - clearButtonElement.ariaLabel = 'Clear'; + clearButtonElement.setAttribute('aria-label', 'Clear'); clearButtonElement.innerHTML = ''; } @@ -133,7 +133,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); // Apply a label const labelElement = document.querySelector("label[for='" + dateElement.id + "']"); if (labelElement !== null) { - datepickerElement.querySelector('.datetimepicker-dummy-input').ariaLabel = labelElement.textContent; + datepickerElement + .querySelector('.datetimepicker-dummy-input') + .setAttribute('aria-label', (_b = labelElement.textContent) !== null && _b !== void 0 ? _b : ''); } } } diff --git a/public-typescript/main.ts b/public-typescript/main.ts index eda979d5..798bc558 100644 --- a/public-typescript/main.ts +++ b/public-typescript/main.ts @@ -181,7 +181,7 @@ declare const bulmaJS: BulmaJS clearButtonElement.remove() } else { clearButtonElement.dataset.tooltip = 'Clear' - clearButtonElement.ariaLabel = 'Clear' + clearButtonElement.setAttribute('aria-label', 'Clear') clearButtonElement.innerHTML = '' } @@ -193,9 +193,9 @@ declare const bulmaJS: BulmaJS ) if (labelElement !== null) { - datepickerElement.querySelector( - '.datetimepicker-dummy-input' - )!.ariaLabel = labelElement.textContent + datepickerElement + .querySelector('.datetimepicker-dummy-input')! + .setAttribute('aria-label', labelElement.textContent ?? '') } } } diff --git a/public/javascripts/main.min.js b/public/javascripts/main.min.js index d82b3de9..4d9e3ac9 100644 --- a/public/javascripts/main.min.js +++ b/public/javascripts/main.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{let e=!1;function t(){return e}function s(e){const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()}const a={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"};const o=Object.freeze({Map:cityssm.escapeHTML(exports.aliases.map),map:cityssm.escapeHTML(exports.aliases.map.toLowerCase()),Maps:cityssm.escapeHTML(exports.aliases.maps),maps:cityssm.escapeHTML(exports.aliases.maps.toLowerCase()),Lot:cityssm.escapeHTML(exports.aliases.lot),lot:cityssm.escapeHTML(exports.aliases.lot.toLowerCase()),Lots:cityssm.escapeHTML(exports.aliases.lots),lots:cityssm.escapeHTML(exports.aliases.lots.toLowerCase()),Occupancy:cityssm.escapeHTML(exports.aliases.occupancy),occupancy:cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()),Occupancies:cityssm.escapeHTML(exports.aliases.occupancies),occupancies:cityssm.escapeHTML(exports.aliases.occupancies.toLowerCase()),Occupant:cityssm.escapeHTML(exports.aliases.occupant),occupant:cityssm.escapeHTML(exports.aliases.occupant.toLowerCase()),Occupants:cityssm.escapeHTML(exports.aliases.occupants),occupants:cityssm.escapeHTML(exports.aliases.occupants.toLowerCase()),ExternalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber),externalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber.toLowerCase()),OccupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate),occupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate.toLowerCase()),WorkOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate),workOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate.toLowerCase()),WorkOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate),workOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate.toLowerCase())}),c=["red","green","orange","blue","pink","yellow","purple"],n=["bright","light","dark"];const i=document.querySelector("main").dataset.urlPrefix;function r(e,t,s,a){return i+"/"+e+(t?"/"+t.toString():"")+(t&&s?"/edit":"")+(a?"/?t="+Date.now().toString():"")}const l={urlPrefix:i,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:function(e,t,s){let a,o=t;for(;null===(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(null!==a){a.style.fill="",a.classList.add("highlight","is-"+s);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:function(e){const t=e.querySelectorAll(".is-unlock-field-button");for(const e of t)e.addEventListener("click",s)},initializeDatePickers:function(e){var t;const s=e.querySelectorAll("input[type='date']");for(const o of s){const s=Object.assign({},a);o.required&&(s.showClearButton=!1),""!==o.min&&(s.minDate=cityssm.dateStringToDate(o.min)),""!==o.max&&(s.maxDate=cityssm.dateStringToDate(o.max));const c=exports.bulmaCalendar.attach(o,s)[0];c.on("save",()=>{o.value=c.value(),o.dispatchEvent(new Event("change"))}),c.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),c.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const n=e.querySelector("#"+c._id),i=n.querySelectorAll(".datepicker-nav button.is-text");for(const e of i)e.classList.add(`is-${null!==(t=a.color)&&void 0!==t?t:""}`),e.classList.remove("is-text");const r=n.querySelector(".datetimepicker-clear-button");null!==r&&(o.required?r.remove():(r.dataset.tooltip="Clear",r.ariaLabel="Clear",r.innerHTML=''));const l=document.querySelector("label[for='"+o.id+"']");null!==l&&(n.querySelector(".datetimepicker-dummy-input").ariaLabel=l.textContent)}},populateAliases:function(e){const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Map":e.textContent=exports.aliases.map;break;case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},escapedAliases:o,getRandomColor:function(e){let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:c[t.codePointAt(t.length-1)%c.length],luminosity:n[t.codePointAt(t.length-2)%n.length]})},setUnsavedChanges:function(){t()||(e=!0,cityssm.enableNavBlocker())},clearUnsavedChanges:function(){e=!1,cityssm.disableNavBlocker()},hasUnsavedChanges:t,getMoveUpDownButtonFieldHTML:function(e,t,s=!0){return`
\n
\n \n \n \n
\n
\n \n \n \n
\n
`},getLoadingParagraphHTML:function(e="Loading..."){return`

\n
\n ${cityssm.escapeHTML(e)}\n

`},getSearchResultsPagerHTML:function(e,t,s){return'
Displaying '+(t+1).toString()+" to "+Math.min(s,e+t)+" of "+s+'
'+(t>0?'
':"")+(e+t
':"")+"
"},getMapURL:function(e="",t=!1,s=!1){return r("maps",e,t,s)},getLotURL:function(e="",t=!1,s=!1){return r("lots",e,t,s)},getLotOccupancyURL:function(e="",t=!1,s=!1){return r("lotOccupancies",e,t,s)},getWorkOrderURL:function(e="",t=!1,s=!1){return r("workOrders",e,t,s)}};exports.los=l})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{let e=!1;function t(){return e}function s(e){const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()}const a={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"};const o=Object.freeze({Map:cityssm.escapeHTML(exports.aliases.map),map:cityssm.escapeHTML(exports.aliases.map.toLowerCase()),Maps:cityssm.escapeHTML(exports.aliases.maps),maps:cityssm.escapeHTML(exports.aliases.maps.toLowerCase()),Lot:cityssm.escapeHTML(exports.aliases.lot),lot:cityssm.escapeHTML(exports.aliases.lot.toLowerCase()),Lots:cityssm.escapeHTML(exports.aliases.lots),lots:cityssm.escapeHTML(exports.aliases.lots.toLowerCase()),Occupancy:cityssm.escapeHTML(exports.aliases.occupancy),occupancy:cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()),Occupancies:cityssm.escapeHTML(exports.aliases.occupancies),occupancies:cityssm.escapeHTML(exports.aliases.occupancies.toLowerCase()),Occupant:cityssm.escapeHTML(exports.aliases.occupant),occupant:cityssm.escapeHTML(exports.aliases.occupant.toLowerCase()),Occupants:cityssm.escapeHTML(exports.aliases.occupants),occupants:cityssm.escapeHTML(exports.aliases.occupants.toLowerCase()),ExternalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber),externalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber.toLowerCase()),OccupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate),occupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate.toLowerCase()),WorkOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate),workOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate.toLowerCase()),WorkOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate),workOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate.toLowerCase())}),c=["red","green","orange","blue","pink","yellow","purple"],n=["bright","light","dark"];const i=document.querySelector("main").dataset.urlPrefix;function r(e,t,s,a){return i+"/"+e+(t?"/"+t.toString():"")+(t&&s?"/edit":"")+(a?"/?t="+Date.now().toString():"")}const l={urlPrefix:i,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:function(e,t,s){let a,o=t;for(;null===(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(null!==a){a.style.fill="",a.classList.add("highlight","is-"+s);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:function(e){const t=e.querySelectorAll(".is-unlock-field-button");for(const e of t)e.addEventListener("click",s)},initializeDatePickers:function(e){var t,s;const o=e.querySelectorAll("input[type='date']");for(const c of o){const o=Object.assign({},a);c.required&&(o.showClearButton=!1),""!==c.min&&(o.minDate=cityssm.dateStringToDate(c.min)),""!==c.max&&(o.maxDate=cityssm.dateStringToDate(c.max));const n=exports.bulmaCalendar.attach(c,o)[0];n.on("save",()=>{c.value=n.value(),c.dispatchEvent(new Event("change"))}),n.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),n.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const i=e.querySelector("#"+n._id),r=i.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add(`is-${null!==(t=a.color)&&void 0!==t?t:""}`),e.classList.remove("is-text");const l=i.querySelector(".datetimepicker-clear-button");null!==l&&(c.required?l.remove():(l.dataset.tooltip="Clear",l.setAttribute("aria-label","Clear"),l.innerHTML=''));const p=document.querySelector("label[for='"+c.id+"']");null!==p&&i.querySelector(".datetimepicker-dummy-input").setAttribute("aria-label",null!==(s=p.textContent)&&void 0!==s?s:"")}},populateAliases:function(e){const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Map":e.textContent=exports.aliases.map;break;case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},escapedAliases:o,getRandomColor:function(e){let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:c[t.codePointAt(t.length-1)%c.length],luminosity:n[t.codePointAt(t.length-2)%n.length]})},setUnsavedChanges:function(){t()||(e=!0,cityssm.enableNavBlocker())},clearUnsavedChanges:function(){e=!1,cityssm.disableNavBlocker()},hasUnsavedChanges:t,getMoveUpDownButtonFieldHTML:function(e,t,s=!0){return`
\n
\n \n \n \n
\n
\n \n \n \n
\n
`},getLoadingParagraphHTML:function(e="Loading..."){return`

\n
\n ${cityssm.escapeHTML(e)}\n

`},getSearchResultsPagerHTML:function(e,t,s){return'
Displaying '+(t+1).toString()+" to "+Math.min(s,e+t)+" of "+s+'
'+(t>0?'
':"")+(e+t
':"")+"
"},getMapURL:function(e="",t=!1,s=!1){return r("maps",e,t,s)},getLotURL:function(e="",t=!1,s=!1){return r("lots",e,t,s)},getLotOccupancyURL:function(e="",t=!1,s=!1){return r("lotOccupancies",e,t,s)},getWorkOrderURL:function(e="",t=!1,s=!1){return r("workOrders",e,t,s)}};exports.los=l})(); \ No newline at end of file