centralize unsaved changes functions
parent
b60ebf78cc
commit
774f9eddb6
|
|
@ -6,24 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
const lotId = document.querySelector("#lot--lotId").value;
|
||||
const isCreate = lotId === "";
|
||||
// Main form
|
||||
let hasUnsavedChanges = false;
|
||||
let refreshAfterSave = isCreate;
|
||||
const setUnsavedChanges = () => {
|
||||
if (!hasUnsavedChanges) {
|
||||
hasUnsavedChanges = true;
|
||||
cityssm.enableNavBlocker();
|
||||
}
|
||||
};
|
||||
const clearUnsavedChanges = () => {
|
||||
hasUnsavedChanges = false;
|
||||
cityssm.disableNavBlocker();
|
||||
};
|
||||
const formElement = document.querySelector("#form--lot");
|
||||
const updateLot = (formEvent) => {
|
||||
function updateLot(formEvent) {
|
||||
formEvent.preventDefault();
|
||||
cityssm.postJSON(los.urlPrefix + "/lots/" + (isCreate ? "doCreateLot" : "doUpdateLot"), formElement, (responseJSON) => {
|
||||
if (responseJSON.success) {
|
||||
clearUnsavedChanges();
|
||||
los.clearUnsavedChanges();
|
||||
if (isCreate || refreshAfterSave) {
|
||||
window.location.href =
|
||||
los.urlPrefix + "/lots/" + responseJSON.lotId + "/edit?t=" + Date.now();
|
||||
|
|
@ -43,11 +32,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
formElement.addEventListener("submit", updateLot);
|
||||
const formInputElements = formElement.querySelectorAll("input, select");
|
||||
for (const formInputElement of formInputElements) {
|
||||
formInputElement.addEventListener("change", setUnsavedChanges);
|
||||
formInputElement.addEventListener("change", los.setUnsavedChanges);
|
||||
}
|
||||
los.initializeUnlockFieldButtons(formElement);
|
||||
if (!isCreate) {
|
||||
|
|
@ -195,7 +184,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
// Comments
|
||||
let lotComments = exports.lotComments;
|
||||
delete exports.lotComments;
|
||||
const openEditLotComment = (clickEvent) => {
|
||||
function openEditLotComment(clickEvent) {
|
||||
const lotCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.lotCommentId, 10);
|
||||
const lotComment = lotComments.find((currentLotComment) => {
|
||||
return currentLotComment.lotCommentId === lotCommentId;
|
||||
|
|
@ -248,8 +237,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
bulmaJS.toggleHtmlClipped();
|
||||
}
|
||||
});
|
||||
};
|
||||
const deleteLotComment = (clickEvent) => {
|
||||
}
|
||||
function deleteLotComment(clickEvent) {
|
||||
const lotCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.lotCommentId, 10);
|
||||
const doDelete = () => {
|
||||
cityssm.postJSON(los.urlPrefix + "/lots/doDeleteLotComment", {
|
||||
|
|
@ -278,8 +267,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
},
|
||||
contextualColorName: "warning"
|
||||
});
|
||||
};
|
||||
const renderLotComments = () => {
|
||||
}
|
||||
function renderLotComments() {
|
||||
const containerElement = document.querySelector("#container--lotComments");
|
||||
if (lotComments.length === 0) {
|
||||
containerElement.innerHTML =
|
||||
|
|
@ -329,8 +318,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
}
|
||||
containerElement.innerHTML = "";
|
||||
containerElement.append(tableElement);
|
||||
};
|
||||
const openAddCommentModal = () => {
|
||||
}
|
||||
function openAddCommentModal() {
|
||||
let addCommentCloseModalFunction;
|
||||
const doAddComment = (formEvent) => {
|
||||
formEvent.preventDefault();
|
||||
|
|
@ -359,7 +348,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
document.querySelector("#lotComments--add").focus();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
if (!isCreate) {
|
||||
document.querySelector("#lotComments--add").addEventListener("click", openAddCommentModal);
|
||||
renderLotComments();
|
||||
|
|
|
|||
|
|
@ -18,24 +18,11 @@ declare const bulmaJS: BulmaJS;
|
|||
|
||||
// Main form
|
||||
|
||||
let hasUnsavedChanges = false;
|
||||
let refreshAfterSave = isCreate;
|
||||
|
||||
const setUnsavedChanges = () => {
|
||||
if (!hasUnsavedChanges) {
|
||||
hasUnsavedChanges = true;
|
||||
cityssm.enableNavBlocker();
|
||||
}
|
||||
};
|
||||
|
||||
const clearUnsavedChanges = () => {
|
||||
hasUnsavedChanges = false;
|
||||
cityssm.disableNavBlocker();
|
||||
};
|
||||
|
||||
const formElement = document.querySelector("#form--lot") as HTMLFormElement;
|
||||
|
||||
const updateLot = (formEvent: SubmitEvent) => {
|
||||
function updateLot(formEvent: SubmitEvent) {
|
||||
formEvent.preventDefault();
|
||||
|
||||
cityssm.postJSON(
|
||||
|
|
@ -43,7 +30,7 @@ declare const bulmaJS: BulmaJS;
|
|||
formElement,
|
||||
(responseJSON: { success: boolean; lotId?: number; errorMessage?: string }) => {
|
||||
if (responseJSON.success) {
|
||||
clearUnsavedChanges();
|
||||
los.clearUnsavedChanges();
|
||||
|
||||
if (isCreate || refreshAfterSave) {
|
||||
window.location.href =
|
||||
|
|
@ -63,14 +50,14 @@ declare const bulmaJS: BulmaJS;
|
|||
}
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
formElement.addEventListener("submit", updateLot);
|
||||
|
||||
const formInputElements = formElement.querySelectorAll("input, select");
|
||||
|
||||
for (const formInputElement of formInputElements) {
|
||||
formInputElement.addEventListener("change", setUnsavedChanges);
|
||||
formInputElement.addEventListener("change", los.setUnsavedChanges);
|
||||
}
|
||||
|
||||
los.initializeUnlockFieldButtons(formElement);
|
||||
|
|
@ -275,7 +262,7 @@ declare const bulmaJS: BulmaJS;
|
|||
let lotComments: recordTypes.LotComment[] = exports.lotComments;
|
||||
delete exports.lotComments;
|
||||
|
||||
const openEditLotComment = (clickEvent: Event) => {
|
||||
function openEditLotComment(clickEvent: Event) {
|
||||
const lotCommentId = Number.parseInt(
|
||||
(clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.lotCommentId!,
|
||||
10
|
||||
|
|
@ -352,7 +339,6 @@ declare const bulmaJS: BulmaJS;
|
|||
|
||||
los.initializeDatePickers(modalElement);
|
||||
// los.initializeTimePickers(modalElement);
|
||||
|
||||
(
|
||||
modalElement.querySelector("#lotCommentEdit--lotComment") as HTMLTextAreaElement
|
||||
).focus();
|
||||
|
|
@ -366,9 +352,9 @@ declare const bulmaJS: BulmaJS;
|
|||
bulmaJS.toggleHtmlClipped();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
const deleteLotComment = (clickEvent: Event) => {
|
||||
function deleteLotComment(clickEvent: Event) {
|
||||
const lotCommentId = Number.parseInt(
|
||||
(clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.lotCommentId!,
|
||||
10
|
||||
|
|
@ -409,9 +395,9 @@ declare const bulmaJS: BulmaJS;
|
|||
},
|
||||
contextualColorName: "warning"
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
const renderLotComments = () => {
|
||||
function renderLotComments() {
|
||||
const containerElement = document.querySelector("#container--lotComments") as HTMLElement;
|
||||
|
||||
if (lotComments.length === 0) {
|
||||
|
|
@ -474,9 +460,9 @@ declare const bulmaJS: BulmaJS;
|
|||
|
||||
containerElement.innerHTML = "";
|
||||
containerElement.append(tableElement);
|
||||
};
|
||||
}
|
||||
|
||||
const openAddCommentModal = () => {
|
||||
function openAddCommentModal() {
|
||||
let addCommentCloseModalFunction: () => void;
|
||||
|
||||
const doAddComment = (formEvent: SubmitEvent) => {
|
||||
|
|
@ -514,7 +500,7 @@ declare const bulmaJS: BulmaJS;
|
|||
(document.querySelector("#lotComments--add") as HTMLButtonElement).focus();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
if (!isCreate) {
|
||||
(document.querySelector("#lotComments--add") as HTMLButtonElement).addEventListener(
|
||||
|
|
|
|||
|
|
@ -9,18 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
/*
|
||||
* Main form
|
||||
*/
|
||||
let hasUnsavedChanges = false;
|
||||
let refreshAfterSave = isCreate;
|
||||
const setUnsavedChanges = () => {
|
||||
if (!hasUnsavedChanges) {
|
||||
hasUnsavedChanges = true;
|
||||
cityssm.enableNavBlocker();
|
||||
}
|
||||
};
|
||||
const clearUnsavedChanges = () => {
|
||||
hasUnsavedChanges = false;
|
||||
cityssm.disableNavBlocker();
|
||||
};
|
||||
const formElement = document.querySelector("#form--lotOccupancy");
|
||||
formElement.addEventListener("submit", (formEvent) => {
|
||||
formEvent.preventDefault();
|
||||
|
|
@ -28,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
"/lotOccupancies/" +
|
||||
(isCreate ? "doCreateLotOccupancy" : "doUpdateLotOccupancy"), formElement, (responseJSON) => {
|
||||
if (responseJSON.success) {
|
||||
clearUnsavedChanges();
|
||||
los.clearUnsavedChanges();
|
||||
if (isCreate || refreshAfterSave) {
|
||||
window.location.href =
|
||||
los.urlPrefix +
|
||||
|
|
@ -55,7 +44,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
});
|
||||
const formInputElements = formElement.querySelectorAll("input, select");
|
||||
for (const formInputElement of formInputElements) {
|
||||
formInputElement.addEventListener("change", setUnsavedChanges);
|
||||
formInputElement.addEventListener("change", los.setUnsavedChanges);
|
||||
}
|
||||
if (!isCreate) {
|
||||
const doCopy = () => {
|
||||
|
|
@ -83,7 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
(_a = document
|
||||
.querySelector("#button--copyLotOccupancy")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", (clickEvent) => {
|
||||
clickEvent.preventDefault();
|
||||
if (hasUnsavedChanges) {
|
||||
if (los.hasUnsavedChanges()) {
|
||||
bulmaJS.alert({
|
||||
title: "Unsaved Changes",
|
||||
message: "Please save all unsaved changes before continuing.",
|
||||
|
|
@ -312,7 +301,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
document.querySelector("#lotOccupancy--lotId").value =
|
||||
lotId.toString();
|
||||
document.querySelector("#lotOccupancy--lotName").value = lotName;
|
||||
setUnsavedChanges();
|
||||
los.setUnsavedChanges();
|
||||
lotSelectCloseModalFunction();
|
||||
};
|
||||
const selectExistingLot = (clickEvent) => {
|
||||
|
|
@ -468,7 +457,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
else {
|
||||
lotNameElement.value = "(No " + exports.aliases.lot + ")";
|
||||
document.querySelector("#lotOccupancy--lotId").value = "";
|
||||
setUnsavedChanges();
|
||||
los.setUnsavedChanges();
|
||||
}
|
||||
});
|
||||
// Start Date
|
||||
|
|
|
|||
|
|
@ -9,18 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
/*
|
||||
* Main form
|
||||
*/
|
||||
let hasUnsavedChanges = false;
|
||||
let refreshAfterSave = isCreate;
|
||||
const setUnsavedChanges = () => {
|
||||
if (!hasUnsavedChanges) {
|
||||
hasUnsavedChanges = true;
|
||||
cityssm.enableNavBlocker();
|
||||
}
|
||||
};
|
||||
const clearUnsavedChanges = () => {
|
||||
hasUnsavedChanges = false;
|
||||
cityssm.disableNavBlocker();
|
||||
};
|
||||
const formElement = document.querySelector("#form--lotOccupancy");
|
||||
formElement.addEventListener("submit", (formEvent) => {
|
||||
formEvent.preventDefault();
|
||||
|
|
@ -28,7 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
"/lotOccupancies/" +
|
||||
(isCreate ? "doCreateLotOccupancy" : "doUpdateLotOccupancy"), formElement, (responseJSON) => {
|
||||
if (responseJSON.success) {
|
||||
clearUnsavedChanges();
|
||||
los.clearUnsavedChanges();
|
||||
if (isCreate || refreshAfterSave) {
|
||||
window.location.href =
|
||||
los.urlPrefix +
|
||||
|
|
@ -55,7 +44,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
});
|
||||
const formInputElements = formElement.querySelectorAll("input, select");
|
||||
for (const formInputElement of formInputElements) {
|
||||
formInputElement.addEventListener("change", setUnsavedChanges);
|
||||
formInputElement.addEventListener("change", los.setUnsavedChanges);
|
||||
}
|
||||
if (!isCreate) {
|
||||
const doCopy = () => {
|
||||
|
|
@ -83,7 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
(_a = document
|
||||
.querySelector("#button--copyLotOccupancy")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", (clickEvent) => {
|
||||
clickEvent.preventDefault();
|
||||
if (hasUnsavedChanges) {
|
||||
if (los.hasUnsavedChanges()) {
|
||||
bulmaJS.alert({
|
||||
title: "Unsaved Changes",
|
||||
message: "Please save all unsaved changes before continuing.",
|
||||
|
|
@ -312,7 +301,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
document.querySelector("#lotOccupancy--lotId").value =
|
||||
lotId.toString();
|
||||
document.querySelector("#lotOccupancy--lotName").value = lotName;
|
||||
setUnsavedChanges();
|
||||
los.setUnsavedChanges();
|
||||
lotSelectCloseModalFunction();
|
||||
};
|
||||
const selectExistingLot = (clickEvent) => {
|
||||
|
|
@ -468,7 +457,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
else {
|
||||
lotNameElement.value = "(No " + exports.aliases.lot + ")";
|
||||
document.querySelector("#lotOccupancy--lotId").value = "";
|
||||
setUnsavedChanges();
|
||||
los.setUnsavedChanges();
|
||||
}
|
||||
});
|
||||
// Start Date
|
||||
|
|
|
|||
|
|
@ -22,21 +22,8 @@ declare const bulmaJS: BulmaJS;
|
|||
* Main form
|
||||
*/
|
||||
|
||||
let hasUnsavedChanges = false;
|
||||
let refreshAfterSave = isCreate;
|
||||
|
||||
const setUnsavedChanges = () => {
|
||||
if (!hasUnsavedChanges) {
|
||||
hasUnsavedChanges = true;
|
||||
cityssm.enableNavBlocker();
|
||||
}
|
||||
};
|
||||
|
||||
const clearUnsavedChanges = () => {
|
||||
hasUnsavedChanges = false;
|
||||
cityssm.disableNavBlocker();
|
||||
};
|
||||
|
||||
const formElement = document.querySelector("#form--lotOccupancy") as HTMLFormElement;
|
||||
|
||||
formElement.addEventListener("submit", (formEvent) => {
|
||||
|
|
@ -53,7 +40,7 @@ declare const bulmaJS: BulmaJS;
|
|||
errorMessage?: string;
|
||||
}) => {
|
||||
if (responseJSON.success) {
|
||||
clearUnsavedChanges();
|
||||
los.clearUnsavedChanges();
|
||||
|
||||
if (isCreate || refreshAfterSave) {
|
||||
window.location.href =
|
||||
|
|
@ -82,7 +69,7 @@ declare const bulmaJS: BulmaJS;
|
|||
const formInputElements = formElement.querySelectorAll("input, select");
|
||||
|
||||
for (const formInputElement of formInputElements) {
|
||||
formInputElement.addEventListener("change", setUnsavedChanges);
|
||||
formInputElement.addEventListener("change", los.setUnsavedChanges);
|
||||
}
|
||||
|
||||
if (!isCreate) {
|
||||
|
|
@ -120,7 +107,7 @@ declare const bulmaJS: BulmaJS;
|
|||
?.addEventListener("click", (clickEvent) => {
|
||||
clickEvent.preventDefault();
|
||||
|
||||
if (hasUnsavedChanges) {
|
||||
if (los.hasUnsavedChanges()) {
|
||||
bulmaJS.alert({
|
||||
title: "Unsaved Changes",
|
||||
message: "Please save all unsaved changes before continuing.",
|
||||
|
|
@ -440,7 +427,7 @@ declare const bulmaJS: BulmaJS;
|
|||
lotId.toString();
|
||||
(document.querySelector("#lotOccupancy--lotName") as HTMLInputElement).value = lotName;
|
||||
|
||||
setUnsavedChanges();
|
||||
los.setUnsavedChanges();
|
||||
lotSelectCloseModalFunction();
|
||||
};
|
||||
|
||||
|
|
@ -672,7 +659,7 @@ declare const bulmaJS: BulmaJS;
|
|||
} else {
|
||||
lotNameElement.value = "(No " + exports.aliases.lot + ")";
|
||||
(document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value = "";
|
||||
setUnsavedChanges();
|
||||
los.setUnsavedChanges();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,21 @@
|
|||
/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
(() => {
|
||||
const highlightMap = (mapContainerElement, mapKey, contextualClass) => {
|
||||
let _hasUnsavedChanges = false;
|
||||
function setUnsavedChanges() {
|
||||
if (!hasUnsavedChanges()) {
|
||||
_hasUnsavedChanges = true;
|
||||
cityssm.enableNavBlocker();
|
||||
}
|
||||
}
|
||||
function clearUnsavedChanges() {
|
||||
_hasUnsavedChanges = false;
|
||||
cityssm.disableNavBlocker();
|
||||
}
|
||||
function hasUnsavedChanges() {
|
||||
return _hasUnsavedChanges;
|
||||
}
|
||||
function highlightMap(mapContainerElement, mapKey, contextualClass) {
|
||||
// Search for ID
|
||||
let svgId = mapKey;
|
||||
let svgElementToHighlight;
|
||||
|
|
@ -24,8 +38,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
pathElement.style.fill = "";
|
||||
}
|
||||
}
|
||||
};
|
||||
const unlockField = (clickEvent) => {
|
||||
}
|
||||
function unlockField(clickEvent) {
|
||||
const fieldElement = clickEvent.currentTarget.closest(".field");
|
||||
const inputOrSelectElement = fieldElement.querySelector("input, select");
|
||||
inputOrSelectElement.classList.remove("is-readonly");
|
||||
|
|
@ -40,13 +54,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
}
|
||||
}
|
||||
inputOrSelectElement.focus();
|
||||
};
|
||||
const initializeUnlockFieldButtons = (containerElement) => {
|
||||
}
|
||||
function initializeUnlockFieldButtons(containerElement) {
|
||||
const unlockFieldButtonElements = containerElement.querySelectorAll(".is-unlock-field-button");
|
||||
for (const unlockFieldButtonElement of unlockFieldButtonElements) {
|
||||
unlockFieldButtonElement.addEventListener("click", unlockField);
|
||||
}
|
||||
};
|
||||
}
|
||||
const datePickerBaseOptions = {
|
||||
type: "date",
|
||||
dateFormat: "yyyy-MM-dd",
|
||||
|
|
@ -54,7 +68,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
color: "info",
|
||||
displayMode: "dialog"
|
||||
};
|
||||
const initializeDatePickers = (containerElement) => {
|
||||
function initializeDatePickers(containerElement) {
|
||||
const dateElements = containerElement.querySelectorAll("input[type='date']");
|
||||
for (const dateElement of dateElements) {
|
||||
const datePickerOptions = Object.assign({}, datePickerBaseOptions);
|
||||
|
|
@ -111,7 +125,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
labelElement.textContent;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
/*
|
||||
const timePickerBaseOptions: BulmaCalendarOptions = {
|
||||
type: "time",
|
||||
|
|
@ -184,7 +198,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
}
|
||||
};
|
||||
*/
|
||||
const populateAliases = (containerElement) => {
|
||||
function populateAliases(containerElement) {
|
||||
const aliasElements = containerElement.querySelectorAll(".alias");
|
||||
for (const aliasElement of aliasElements) {
|
||||
switch (aliasElement.dataset.alias) {
|
||||
|
|
@ -222,7 +236,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
const escapedAliases = Object.freeze({
|
||||
Map: cityssm.escapeHTML(exports.aliases.map),
|
||||
map: cityssm.escapeHTML(exports.aliases.map.toLowerCase()),
|
||||
|
|
@ -249,7 +263,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
});
|
||||
const hues = ["red", "green", "orange", "blue", "pink", "yellow", "purple"];
|
||||
const luminosity = ["bright", "light", "dark"];
|
||||
const getRandomColor = (seedString) => {
|
||||
function getRandomColor(seedString) {
|
||||
let actualSeedString = seedString;
|
||||
if (actualSeedString.length < 2) {
|
||||
actualSeedString = actualSeedString + "a1";
|
||||
|
|
@ -259,7 +273,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
hue: hues[actualSeedString.codePointAt(actualSeedString.length - 1) % hues.length],
|
||||
luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length]
|
||||
});
|
||||
};
|
||||
}
|
||||
const los = {
|
||||
urlPrefix: document.querySelector("main").dataset.urlPrefix,
|
||||
apiKey: document.querySelector("main").dataset.apiKey,
|
||||
|
|
@ -269,7 +283,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
// initializeTimePickers,
|
||||
populateAliases,
|
||||
escapedAliases,
|
||||
getRandomColor
|
||||
getRandomColor,
|
||||
setUnsavedChanges,
|
||||
clearUnsavedChanges,
|
||||
hasUnsavedChanges
|
||||
};
|
||||
exports.los = los;
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -9,13 +9,30 @@ declare const cityssm: cityssmGlobal;
|
|||
declare const bulmaJS: BulmaJS;
|
||||
|
||||
(() => {
|
||||
const highlightMap = (
|
||||
let _hasUnsavedChanges = false;
|
||||
|
||||
function setUnsavedChanges() {
|
||||
if (!hasUnsavedChanges()) {
|
||||
_hasUnsavedChanges = true;
|
||||
cityssm.enableNavBlocker();
|
||||
}
|
||||
}
|
||||
|
||||
function clearUnsavedChanges() {
|
||||
_hasUnsavedChanges = false;
|
||||
cityssm.disableNavBlocker();
|
||||
}
|
||||
|
||||
function hasUnsavedChanges() {
|
||||
return _hasUnsavedChanges;
|
||||
}
|
||||
|
||||
function highlightMap(
|
||||
mapContainerElement: HTMLElement,
|
||||
mapKey: string,
|
||||
contextualClass: "success" | "danger"
|
||||
) => {
|
||||
): void {
|
||||
// Search for ID
|
||||
|
||||
let svgId = mapKey;
|
||||
let svgElementToHighlight: SVGElement | null;
|
||||
|
||||
|
|
@ -42,9 +59,9 @@ declare const bulmaJS: BulmaJS;
|
|||
pathElement.style.fill = "";
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const unlockField = (clickEvent: Event) => {
|
||||
function unlockField(clickEvent: Event): void {
|
||||
const fieldElement = (clickEvent.currentTarget as HTMLElement).closest(".field")!;
|
||||
|
||||
const inputOrSelectElement = fieldElement.querySelector("input, select") as
|
||||
|
|
@ -64,16 +81,16 @@ declare const bulmaJS: BulmaJS;
|
|||
}
|
||||
|
||||
inputOrSelectElement.focus();
|
||||
};
|
||||
}
|
||||
|
||||
const initializeUnlockFieldButtons = (containerElement: HTMLElement) => {
|
||||
function initializeUnlockFieldButtons(containerElement: HTMLElement): void {
|
||||
const unlockFieldButtonElements =
|
||||
containerElement.querySelectorAll(".is-unlock-field-button");
|
||||
|
||||
for (const unlockFieldButtonElement of unlockFieldButtonElements) {
|
||||
unlockFieldButtonElement.addEventListener("click", unlockField);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const datePickerBaseOptions: BulmaCalendarOptions = {
|
||||
type: "date",
|
||||
|
|
@ -83,7 +100,7 @@ declare const bulmaJS: BulmaJS;
|
|||
displayMode: "dialog"
|
||||
};
|
||||
|
||||
const initializeDatePickers = (containerElement: HTMLElement) => {
|
||||
function initializeDatePickers(containerElement: HTMLElement): void {
|
||||
const dateElements = containerElement.querySelectorAll(
|
||||
"input[type='date']"
|
||||
) as NodeListOf<HTMLInputElement>;
|
||||
|
|
@ -124,11 +141,9 @@ declare const bulmaJS: BulmaJS;
|
|||
});
|
||||
|
||||
// Get the datepicker container element
|
||||
|
||||
const datepickerElement = containerElement.querySelector("#" + cal._id) as HTMLElement;
|
||||
|
||||
// Override the previous and next month button styles
|
||||
|
||||
const datePickerNavButtonElements = datepickerElement.querySelectorAll(
|
||||
".datepicker-nav button.is-text"
|
||||
);
|
||||
|
|
@ -139,7 +154,6 @@ declare const bulmaJS: BulmaJS;
|
|||
}
|
||||
|
||||
// Override the clear button style
|
||||
|
||||
const clearButtonElement = datepickerElement.querySelector(
|
||||
".datetimepicker-clear-button"
|
||||
) as HTMLElement;
|
||||
|
|
@ -156,7 +170,6 @@ declare const bulmaJS: BulmaJS;
|
|||
}
|
||||
|
||||
// Apply a label
|
||||
|
||||
const labelElement = document.querySelector("label[for='" + dateElement.id + "']");
|
||||
|
||||
if (labelElement) {
|
||||
|
|
@ -164,7 +177,7 @@ declare const bulmaJS: BulmaJS;
|
|||
labelElement.textContent;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
const timePickerBaseOptions: BulmaCalendarOptions = {
|
||||
|
|
@ -239,7 +252,7 @@ declare const bulmaJS: BulmaJS;
|
|||
};
|
||||
*/
|
||||
|
||||
const populateAliases = (containerElement: HTMLElement) => {
|
||||
function populateAliases(containerElement: HTMLElement): void {
|
||||
const aliasElements = containerElement.querySelectorAll(
|
||||
".alias"
|
||||
) as NodeListOf<HTMLElement>;
|
||||
|
|
@ -280,7 +293,7 @@ declare const bulmaJS: BulmaJS;
|
|||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const escapedAliases = Object.freeze({
|
||||
Map: cityssm.escapeHTML(exports.aliases.map),
|
||||
|
|
@ -319,7 +332,7 @@ declare const bulmaJS: BulmaJS;
|
|||
const hues = ["red", "green", "orange", "blue", "pink", "yellow", "purple"];
|
||||
const luminosity = ["bright", "light", "dark"];
|
||||
|
||||
const getRandomColor = (seedString: string) => {
|
||||
function getRandomColor(seedString: string) {
|
||||
let actualSeedString = seedString;
|
||||
|
||||
if (actualSeedString.length < 2) {
|
||||
|
|
@ -334,7 +347,7 @@ declare const bulmaJS: BulmaJS;
|
|||
actualSeedString.codePointAt(actualSeedString.length - 2)! % luminosity.length
|
||||
]
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
const los: globalTypes.LOS = {
|
||||
urlPrefix: document.querySelector("main")!.dataset.urlPrefix!,
|
||||
|
|
@ -345,7 +358,11 @@ declare const bulmaJS: BulmaJS;
|
|||
// initializeTimePickers,
|
||||
populateAliases,
|
||||
escapedAliases,
|
||||
getRandomColor
|
||||
getRandomColor,
|
||||
|
||||
setUnsavedChanges,
|
||||
clearUnsavedChanges,
|
||||
hasUnsavedChanges
|
||||
};
|
||||
|
||||
exports.los = los;
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=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()},t={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"},s=Object.freeze({Map:cityssm.escapeHTML(exports.aliases.map),map:cityssm.escapeHTML(exports.aliases.map.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())}),a=["red","green","orange","blue","pink","yellow","purple"],o=["bright","light","dark"],c={urlPrefix:document.querySelector("main").dataset.urlPrefix,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:(e,t,s)=>{let a,o=t;for(;!(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(a){a.style.fill="",a.classList.add("highlight","is-"+s);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:t=>{const s=t.querySelectorAll(".is-unlock-field-button");for(const t of s)t.addEventListener("click",e)},initializeDatePickers:e=>{const s=e.querySelectorAll("input[type='date']");for(const a of s){const s=Object.assign({},t);a.required&&(s.showClearButton=!1),a.min&&(s.minDate=cityssm.dateStringToDate(a.min)),a.max&&(s.maxDate=cityssm.dateStringToDate(a.max));const o=exports.bulmaCalendar.attach(a,s)[0];o.on("save",()=>{a.value=o.value(),a.dispatchEvent(new Event("change"))}),o.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),o.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const c=e.querySelector("#"+o._id),r=c.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+t.color),e.classList.remove("is-text");const l=c.querySelector(".datetimepicker-clear-button");l&&(a.required?l.remove():(l.dataset.tooltip="Clear",l.ariaLabel="Clear",l.innerHTML='<span class="has-text-weight-bold" aria-hidden="true">×</span>'));const i=document.querySelector("label[for='"+a.id+"']");i&&(c.querySelector(".datetimepicker-dummy-input").ariaLabel=i.textContent)}},populateAliases: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:s,getRandomColor:e=>{let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:a[t.codePointAt(t.length-1)%a.length],luminosity:o[t.codePointAt(t.length-2)%o.length]})}};exports.los=c})();
|
||||
"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()),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"],r=["bright","light","dark"];const i={urlPrefix:document.querySelector("main").dataset.urlPrefix,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:function(e,t,s){let a,o=t;for(;!(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(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){const t=e.querySelectorAll("input[type='date']");for(const s of t){const t=Object.assign({},a);s.required&&(t.showClearButton=!1),s.min&&(t.minDate=cityssm.dateStringToDate(s.min)),s.max&&(t.maxDate=cityssm.dateStringToDate(s.max));const o=exports.bulmaCalendar.attach(s,t)[0];o.on("save",()=>{s.value=o.value(),s.dispatchEvent(new Event("change"))}),o.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),o.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const c=e.querySelector("#"+o._id),r=c.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+a.color),e.classList.remove("is-text");const i=c.querySelector(".datetimepicker-clear-button");i&&(s.required?i.remove():(i.dataset.tooltip="Clear",i.ariaLabel="Clear",i.innerHTML='<span class="has-text-weight-bold" aria-hidden="true">×</span>'));const n=document.querySelector("label[for='"+s.id+"']");n&&(c.querySelector(".datetimepicker-dummy-input").ariaLabel=n.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:r[t.codePointAt(t.length-2)%r.length]})},setUnsavedChanges:function(){t()||(e=!0,cityssm.enableNavBlocker())},clearUnsavedChanges:function(){e=!1,cityssm.disableNavBlocker()},hasUnsavedChanges:t};exports.los=i})();
|
||||
|
|
@ -30,4 +30,7 @@ export interface LOS {
|
|||
workOrderCloseDate: string;
|
||||
};
|
||||
getRandomColor: (seedString: string) => string;
|
||||
setUnsavedChanges: () => void;
|
||||
clearUnsavedChanges: () => void;
|
||||
hasUnsavedChanges: () => boolean;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,4 +41,8 @@ export interface LOS {
|
|||
};
|
||||
|
||||
getRandomColor: (seedString: string) => string;
|
||||
|
||||
setUnsavedChanges: () => void;
|
||||
clearUnsavedChanges: () => void;
|
||||
hasUnsavedChanges: () => boolean;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue