centralize escaping aliases

deepsource-autofix-76c6eb20
Dan Gowans 2022-12-29 14:21:58 -05:00
parent 9637f4e8f7
commit 8c2ef7d0d6
19 changed files with 463 additions and 346 deletions

View File

@ -6,6 +6,7 @@ export const handler = async (request, response) => {
});
response.json({
count: result.count,
offset: Number.parseInt(request.body.offset, 10),
lots: result.lots
});
};

View File

@ -10,6 +10,7 @@ export const handler: RequestHandler = async (request, response) => {
response.json({
count: result.count,
offset: Number.parseInt(request.body.offset, 10),
lots: result.lots
});
};

View File

@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no ' +
cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()) +
los.escapedAliases.occupancy +
" records that meet the search criteria.</p>" +
"</div>";
return;
@ -26,30 +26,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
lotOccupancy.occupancyEndDateString >= nowDateString)) {
occupancyTimeHTML =
'<span class="has-tooltip-right" data-tooltip="Current ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'">' +
('<i class="fas fa-play" aria-label="Current ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'"></i>') +
"</span>";
}
else if (lotOccupancy.occupancyStartDateString > nowDateString) {
occupancyTimeHTML =
'<span class="has-tooltip-right" data-tooltip="Future ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'">' +
('<i class="fas fa-fast-forward" aria-label="Future ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'"></i>') +
"</span>";
}
else {
occupancyTimeHTML =
'<span class="has-tooltip-right" data-tooltip="Past ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'">' +
('<i class="fas fa-stop" aria-label="Past ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'"></i>') +
"</span>";
}
@ -88,7 +88,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML(lotOccupancy.lotName) +
"</a>"
: '<span class="has-text-grey">(No ' +
cityssm.escapeHTML(exports.aliases.lot) +
los.escapedAliases.Lot +
")</span>") +
"<br />" +
('<span class="is-size-7">' +
@ -121,11 +121,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
"<thead><tr>" +
'<th class="has-width-1"></th>' +
("<th>" + cityssm.escapeHTML(exports.aliases.occupancy) + " Type</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.lot) + "</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.occupancyStartDate) + "</th>") +
("<th>" + los.escapedAliases.Occupancy + " Type</th>") +
("<th>" + los.escapedAliases.Lot + "</th>") +
("<th>" + los.escapedAliases.OccupancyStartDate + "</th>") +
"<th>End Date</th>" +
("<th>" + cityssm.escapeHTML(exports.aliases.occupants) + "</th>") +
("<th>" + los.escapedAliases.Occupants + "</th>") +
'<th class="has-width-1"><span class="is-sr-only">Print</span></th>' +
"</tr></thead>" +
"<table>" +

View File

@ -33,7 +33,7 @@ declare const cityssm: cityssmGlobal;
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no ' +
cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()) +
los.escapedAliases.occupancy +
" records that meet the search criteria.</p>" +
"</div>";
@ -54,28 +54,28 @@ declare const cityssm: cityssmGlobal;
) {
occupancyTimeHTML =
'<span class="has-tooltip-right" data-tooltip="Current ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'">' +
('<i class="fas fa-play" aria-label="Current ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'"></i>') +
"</span>";
} else if (lotOccupancy.occupancyStartDateString! > nowDateString) {
occupancyTimeHTML =
'<span class="has-tooltip-right" data-tooltip="Future ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'">' +
('<i class="fas fa-fast-forward" aria-label="Future ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'"></i>') +
"</span>";
} else {
occupancyTimeHTML =
'<span class="has-tooltip-right" data-tooltip="Past ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'">' +
('<i class="fas fa-stop" aria-label="Past ' +
exports.aliases.occupancy +
los.escapedAliases.Occupancy +
'"></i>') +
"</span>";
}
@ -119,7 +119,7 @@ declare const cityssm: cityssmGlobal;
cityssm.escapeHTML(lotOccupancy.lotName) +
"</a>"
: '<span class="has-text-grey">(No ' +
cityssm.escapeHTML(exports.aliases.lot) +
los.escapedAliases.Lot +
")</span>") +
"<br />" +
('<span class="is-size-7">' +
@ -154,11 +154,11 @@ declare const cityssm: cityssmGlobal;
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
"<thead><tr>" +
'<th class="has-width-1"></th>' +
("<th>" + cityssm.escapeHTML(exports.aliases.occupancy) + " Type</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.lot) + "</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.occupancyStartDate) + "</th>") +
("<th>" + los.escapedAliases.Occupancy + " Type</th>") +
("<th>" + los.escapedAliases.Lot + "</th>") +
("<th>" + los.escapedAliases.OccupancyStartDate + "</th>") +
"<th>End Date</th>" +
("<th>" + cityssm.escapeHTML(exports.aliases.occupants) + "</th>") +
("<th>" + los.escapedAliases.Occupants + "</th>") +
'<th class="has-width-1"><span class="is-sr-only">Print</span></th>' +
"</tr></thead>" +
"<table>" +

View File

@ -7,119 +7,119 @@ Object.defineProperty(exports, "__esModule", { value: true });
const searchResultsContainerElement = document.querySelector("#container--searchResults");
const limit = Number.parseInt(document.querySelector("#searchFilter--limit").value, 10);
const offsetElement = document.querySelector("#searchFilter--offset");
const getLots = () => {
const offset = Number.parseInt(offsetElement.value, 10);
function renderLots(responseJSON) {
if (responseJSON.lots.length === 0) {
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no ' +
los.escapedAliases.lots +
" that meet the search criteria.</p>" +
"</div>";
return;
}
const resultsTbodyElement = document.createElement("tbody");
for (const lot of responseJSON.lots) {
resultsTbodyElement.insertAdjacentHTML("beforeend", "<tr>" +
("<td>" +
'<a class="has-text-weight-bold" href="' +
los.urlPrefix +
"/lots/" +
lot.lotId +
'">' +
cityssm.escapeHTML(lot.lotName || "") +
"</a>" +
"</td>") +
("<td>" +
'<a href="' +
los.urlPrefix +
"/maps/" +
lot.mapId +
'">' +
(lot.mapName
? cityssm.escapeHTML(lot.mapName)
: '<span class="has-text-grey">(No Name)</span>') +
"</a>" +
"</td>") +
("<td>" + cityssm.escapeHTML(lot.lotType || "") + "</td>") +
("<td>" +
(lot.lotStatusId
? cityssm.escapeHTML(lot.lotStatus || "")
: '<span class="has-text-grey">(No Status)</span>') +
"<br />" +
(lot.lotOccupancyCount > 0
? '<span class="is-size-7">Currently Occupied</span>'
: "") +
"</td>") +
"</tr>");
}
searchResultsContainerElement.innerHTML =
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
"<thead><tr>" +
("<th>" + los.escapedAliases.Lot + "</th>") +
("<th>" + los.escapedAliases.Map + "</th>") +
("<th>" + los.escapedAliases.Lot + " Type</th>") +
"<th>Status</th>" +
"</tr></thead>" +
"<table>" +
'<div class="level">' +
('<div class="level-left">' +
'<div class="level-item has-text-weight-bold">' +
"Displaying " +
(responseJSON.offset + 1).toString() +
" to " +
Math.min(responseJSON.count, limit + responseJSON.offset) +
" of " +
responseJSON.count +
"</div>" +
"</div>") +
('<div class="level-right">' +
(responseJSON.offset > 0
? '<div class="level-item">' +
'<button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous">' +
'<i class="fas fa-arrow-left" aria-hidden="true"></i>' +
"</button>" +
"</div>"
: "") +
(limit + responseJSON.offset < responseJSON.count
? '<div class="level-item">' +
'<button class="button is-rounded is-link" data-page="next" type="button" title="Next">' +
"<span>Next</span>" +
'<span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span>' +
"</button>" +
"</div>"
: "") +
"</div>") +
"</div>";
searchResultsContainerElement.querySelector("table").append(resultsTbodyElement);
if (responseJSON.offset > 0) {
searchResultsContainerElement.querySelector("button[data-page='previous']").addEventListener("click", previousAndGetLots);
}
if (limit + responseJSON.offset < responseJSON.count) {
searchResultsContainerElement.querySelector("button[data-page='next']").addEventListener("click", nextAndGetLots);
}
}
function getLots() {
searchResultsContainerElement.innerHTML =
'<div class="has-text-grey has-text-centered">' +
'<i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />' +
"Loading " +
exports.aliases.lots +
los.escapedAliases.Lots +
"..." +
"</div>";
cityssm.postJSON(los.urlPrefix + "/lots/doSearchLots", searchFilterFormElement, (responseJSON) => {
if (responseJSON.lots.length === 0) {
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no ' +
exports.aliases.lots.toLowerCase() +
" that meet the search criteria.</p>" +
"</div>";
return;
}
const resultsTbodyElement = document.createElement("tbody");
for (const lot of responseJSON.lots) {
resultsTbodyElement.insertAdjacentHTML("beforeend", "<tr>" +
("<td>" +
'<a class="has-text-weight-bold" href="' +
los.urlPrefix +
"/lots/" +
lot.lotId +
'">' +
cityssm.escapeHTML(lot.lotName || "") +
"</a>" +
"</td>") +
("<td>" +
'<a href="' +
los.urlPrefix +
"/maps/" +
lot.mapId +
'">' +
(lot.mapName
? cityssm.escapeHTML(lot.mapName)
: '<span class="has-text-grey">(No Name)</span>') +
"</a>" +
"</td>") +
("<td>" + cityssm.escapeHTML(lot.lotType || "") + "</td>") +
("<td>" +
(lot.lotStatusId
? cityssm.escapeHTML(lot.lotStatus || "")
: '<span class="has-text-grey">(No Status)</span>') +
"<br />" +
(lot.lotOccupancyCount > 0
? '<span class="is-size-7">Currently Occupied</span>'
: "") +
"</td>") +
"</tr>");
}
searchResultsContainerElement.innerHTML =
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
"<thead><tr>" +
("<th>" + cityssm.escapeHTML(exports.aliases.lot) + "</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.map) + "</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.lot) + " Type</th>") +
"<th>Status</th>" +
"</tr></thead>" +
"<table>" +
'<div class="level">' +
('<div class="level-left">' +
'<div class="level-item has-text-weight-bold">' +
"Displaying " +
(offset + 1).toString() +
" to " +
Math.min(responseJSON.count, limit + offset) +
" of " +
responseJSON.count +
"</div>" +
"</div>") +
('<div class="level-right">' +
(offset > 0
? '<div class="level-item">' +
'<button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous">' +
'<i class="fas fa-arrow-left" aria-hidden="true"></i>' +
"</button>" +
"</div>"
: "") +
(limit + offset < responseJSON.count
? '<div class="level-item">' +
'<button class="button is-rounded is-link" data-page="next" type="button" title="Next">' +
"<span>Next</span>" +
'<span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span>' +
"</button>" +
"</div>"
: "") +
"</div>") +
"</div>";
searchResultsContainerElement.querySelector("table").append(resultsTbodyElement);
if (offset > 0) {
searchResultsContainerElement.querySelector("button[data-page='previous']").addEventListener("click", previousAndGetLots);
}
if (limit + offset < responseJSON.count) {
searchResultsContainerElement.querySelector("button[data-page='next']").addEventListener("click", nextAndGetLots);
}
});
};
const resetOffsetAndGetLots = () => {
cityssm.postJSON(los.urlPrefix + "/lots/doSearchLots", searchFilterFormElement, renderLots);
}
function resetOffsetAndGetLots() {
offsetElement.value = "0";
getLots();
};
const previousAndGetLots = () => {
}
function previousAndGetLots() {
offsetElement.value = Math.max(Number.parseInt(offsetElement.value, 10) - limit, 0).toString();
getLots();
};
const nextAndGetLots = () => {
}
function nextAndGetLots() {
offsetElement.value = (Number.parseInt(offsetElement.value, 10) + limit).toString();
getLots();
};
}
const filterElements = searchFilterFormElement.querySelectorAll("input, select");
for (const filterElement of filterElements) {
filterElement.addEventListener("change", resetOffsetAndGetLots);

View File

@ -23,149 +23,145 @@ declare const cityssm: cityssmGlobal;
);
const offsetElement = document.querySelector("#searchFilter--offset") as HTMLInputElement;
const getLots = () => {
const offset = Number.parseInt(offsetElement.value, 10);
function renderLots(responseJSON: { count: number; offset: number; lots: recordTypes.Lot[] }): void {
if (responseJSON.lots.length === 0) {
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no ' +
los.escapedAliases.lots +
" that meet the search criteria.</p>" +
"</div>";
return;
}
const resultsTbodyElement = document.createElement("tbody");
for (const lot of responseJSON.lots) {
resultsTbodyElement.insertAdjacentHTML(
"beforeend",
"<tr>" +
("<td>" +
'<a class="has-text-weight-bold" href="' +
los.urlPrefix +
"/lots/" +
lot.lotId +
'">' +
cityssm.escapeHTML(lot.lotName || "") +
"</a>" +
"</td>") +
("<td>" +
'<a href="' +
los.urlPrefix +
"/maps/" +
lot.mapId +
'">' +
(lot.mapName
? cityssm.escapeHTML(lot.mapName)
: '<span class="has-text-grey">(No Name)</span>') +
"</a>" +
"</td>") +
("<td>" + cityssm.escapeHTML(lot.lotType || "") + "</td>") +
("<td>" +
(lot.lotStatusId
? cityssm.escapeHTML(lot.lotStatus || "")
: '<span class="has-text-grey">(No Status)</span>') +
"<br />" +
(lot.lotOccupancyCount! > 0
? '<span class="is-size-7">Currently Occupied</span>'
: "") +
"</td>") +
"</tr>"
);
}
searchResultsContainerElement.innerHTML =
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
"<thead><tr>" +
("<th>" + los.escapedAliases.Lot + "</th>") +
("<th>" + los.escapedAliases.Map + "</th>") +
("<th>" + los.escapedAliases.Lot + " Type</th>") +
"<th>Status</th>" +
"</tr></thead>" +
"<table>" +
'<div class="level">' +
('<div class="level-left">' +
'<div class="level-item has-text-weight-bold">' +
"Displaying " +
(responseJSON.offset + 1).toString() +
" to " +
Math.min(responseJSON.count, limit + responseJSON.offset) +
" of " +
responseJSON.count +
"</div>" +
"</div>") +
('<div class="level-right">' +
(responseJSON.offset > 0
? '<div class="level-item">' +
'<button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous">' +
'<i class="fas fa-arrow-left" aria-hidden="true"></i>' +
"</button>" +
"</div>"
: "") +
(limit + responseJSON.offset < responseJSON.count
? '<div class="level-item">' +
'<button class="button is-rounded is-link" data-page="next" type="button" title="Next">' +
"<span>Next</span>" +
'<span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span>' +
"</button>" +
"</div>"
: "") +
"</div>") +
"</div>";
searchResultsContainerElement.querySelector("table")!.append(resultsTbodyElement);
if (responseJSON.offset > 0) {
(
searchResultsContainerElement.querySelector(
"button[data-page='previous']"
) as HTMLButtonElement
).addEventListener("click", previousAndGetLots);
}
if (limit + responseJSON.offset < responseJSON.count) {
(
searchResultsContainerElement.querySelector(
"button[data-page='next']"
) as HTMLButtonElement
).addEventListener("click", nextAndGetLots);
}
}
function getLots(): void {
searchResultsContainerElement.innerHTML =
'<div class="has-text-grey has-text-centered">' +
'<i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />' +
"Loading " +
exports.aliases.lots +
los.escapedAliases.Lots +
"..." +
"</div>";
cityssm.postJSON(
los.urlPrefix + "/lots/doSearchLots",
searchFilterFormElement,
(responseJSON: { count: number; lots: recordTypes.Lot[] }) => {
if (responseJSON.lots.length === 0) {
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no ' +
exports.aliases.lots.toLowerCase() +
" that meet the search criteria.</p>" +
"</div>";
cityssm.postJSON(los.urlPrefix + "/lots/doSearchLots", searchFilterFormElement, renderLots);
}
return;
}
const resultsTbodyElement = document.createElement("tbody");
for (const lot of responseJSON.lots) {
resultsTbodyElement.insertAdjacentHTML(
"beforeend",
"<tr>" +
("<td>" +
'<a class="has-text-weight-bold" href="' +
los.urlPrefix +
"/lots/" +
lot.lotId +
'">' +
cityssm.escapeHTML(lot.lotName || "") +
"</a>" +
"</td>") +
("<td>" +
'<a href="' +
los.urlPrefix +
"/maps/" +
lot.mapId +
'">' +
(lot.mapName
? cityssm.escapeHTML(lot.mapName)
: '<span class="has-text-grey">(No Name)</span>') +
"</a>" +
"</td>") +
("<td>" + cityssm.escapeHTML(lot.lotType || "") + "</td>") +
("<td>" +
(lot.lotStatusId
? cityssm.escapeHTML(lot.lotStatus || "")
: '<span class="has-text-grey">(No Status)</span>') +
"<br />" +
(lot.lotOccupancyCount! > 0
? '<span class="is-size-7">Currently Occupied</span>'
: "") +
"</td>") +
"</tr>"
);
}
searchResultsContainerElement.innerHTML =
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
"<thead><tr>" +
("<th>" + cityssm.escapeHTML(exports.aliases.lot) + "</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.map) + "</th>") +
("<th>" + cityssm.escapeHTML(exports.aliases.lot) + " Type</th>") +
"<th>Status</th>" +
"</tr></thead>" +
"<table>" +
'<div class="level">' +
('<div class="level-left">' +
'<div class="level-item has-text-weight-bold">' +
"Displaying " +
(offset + 1).toString() +
" to " +
Math.min(responseJSON.count, limit + offset) +
" of " +
responseJSON.count +
"</div>" +
"</div>") +
('<div class="level-right">' +
(offset > 0
? '<div class="level-item">' +
'<button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous">' +
'<i class="fas fa-arrow-left" aria-hidden="true"></i>' +
"</button>" +
"</div>"
: "") +
(limit + offset < responseJSON.count
? '<div class="level-item">' +
'<button class="button is-rounded is-link" data-page="next" type="button" title="Next">' +
"<span>Next</span>" +
'<span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span>' +
"</button>" +
"</div>"
: "") +
"</div>") +
"</div>";
searchResultsContainerElement.querySelector("table")!.append(resultsTbodyElement);
if (offset > 0) {
(
searchResultsContainerElement.querySelector(
"button[data-page='previous']"
) as HTMLButtonElement
).addEventListener("click", previousAndGetLots);
}
if (limit + offset < responseJSON.count) {
(
searchResultsContainerElement.querySelector(
"button[data-page='next']"
) as HTMLButtonElement
).addEventListener("click", nextAndGetLots);
}
}
);
};
const resetOffsetAndGetLots = () => {
function resetOffsetAndGetLots(): void {
offsetElement.value = "0";
getLots();
};
}
const previousAndGetLots = () => {
function previousAndGetLots(): void {
offsetElement.value = Math.max(
Number.parseInt(offsetElement.value, 10) - limit,
0
).toString();
getLots();
};
}
const nextAndGetLots = () => {
function nextAndGetLots(): void {
offsetElement.value = (Number.parseInt(offsetElement.value, 10) + limit).toString();
getLots();
};
}
const filterElements = searchFilterFormElement.querySelectorAll("input, select") as NodeListOf<
HTMLInputElement | HTMLSelectElement

View File

@ -107,7 +107,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
// Apply a label
const labelElement = document.querySelector("label[for='" + dateElement.id + "']");
if (labelElement) {
datepickerElement.querySelector(".datetimepicker-dummy-input").ariaLabel = labelElement.textContent;
datepickerElement.querySelector(".datetimepicker-dummy-input").ariaLabel =
labelElement.textContent;
}
}
};
@ -222,6 +223,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
}
};
const escapedAliases = 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())
});
const hues = ["red", "green", "orange", "blue", "pink", "yellow", "purple"];
const luminosity = ["bright", "light", "dark"];
const getRandomColor = (seedString) => {
@ -243,6 +268,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
initializeDatePickers,
// initializeTimePickers,
populateAliases,
escapedAliases,
getRandomColor
};
exports.los = los;

View File

@ -160,7 +160,8 @@ declare const bulmaJS: BulmaJS;
const labelElement = document.querySelector("label[for='" + dateElement.id + "']");
if (labelElement) {
datepickerElement.querySelector(".datetimepicker-dummy-input")!.ariaLabel = labelElement.textContent;
datepickerElement.querySelector(".datetimepicker-dummy-input")!.ariaLabel =
labelElement.textContent;
}
}
};
@ -281,6 +282,40 @@ declare const bulmaJS: BulmaJS;
}
};
const escapedAliases = 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())
});
const hues = ["red", "green", "orange", "blue", "pink", "yellow", "purple"];
const luminosity = ["bright", "light", "dark"];
@ -309,6 +344,7 @@ declare const bulmaJS: BulmaJS;
initializeDatePickers,
// initializeTimePickers,
populateAliases,
escapedAliases,
getRandomColor
};

View File

@ -43,7 +43,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML(lot.mapName || "") +
'">' +
'<i class="fas fa-vector-square" aria-label="' +
cityssm.escapeHTML(exports.aliases.lot) +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML(lot.lotName || "") +
"</span>" +
@ -56,7 +56,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML(occupant.lotOccupantType || "") +
'">' +
'<i class="fas fa-user" aria-label="' +
cityssm.escapeHTML(exports.aliases.lotOccupancy) +
los.escapedAliases.Occupancy +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName || "") +
"</span>" +

View File

@ -75,7 +75,7 @@ declare const cityssm: cityssmGlobal;
cityssm.escapeHTML(lot.mapName || "") +
'">' +
'<i class="fas fa-vector-square" aria-label="' +
cityssm.escapeHTML(exports.aliases.lot) +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML(lot.lotName || "") +
"</span>" +
@ -89,7 +89,7 @@ declare const cityssm: cityssmGlobal;
cityssm.escapeHTML(occupant.lotOccupantType || "") +
'">' +
'<i class="fas fa-user" aria-label="' +
cityssm.escapeHTML(exports.aliases.lotOccupancy) +
los.escapedAliases.Occupancy +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName || "") +
"</span>" +

View File

@ -26,9 +26,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML(lot.mapName || "") +
'">' +
'<i class="fas fa-fw fa-vector-square" aria-label="' +
cityssm.escapeHTML(exports.aliases.lot) +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML(lot.lotName || "(No Lot Name)") +
cityssm.escapeHTML(lot.lotName || "(No " + exports.aliases.Lot + " Name)") +
"</span><br />";
}
for (const occupancy of workOrder.workOrderLotOccupancies) {
@ -37,8 +37,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType || "") +
'">' +
'<i class="fas fa-fw fa-' + cityssm.escapeHTML(occupant.fontAwesomeIconClass || "user") + '" aria-label="' +
cityssm.escapeHTML(exports.aliases.occupant) +
'<i class="fas fa-fw fa-' +
cityssm.escapeHTML(occupant.fontAwesomeIconClass || "user") +
'" aria-label="' +
los.escapedAliases.occupant +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName || "(No Name)") +
"</span><br />";
@ -68,23 +70,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
"</span></td>") +
('<td class="is-nowrap">' +
('<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(exports.aliases.workOrderOpenDate) +
los.escapedAliases.WorkOrderOpenDate +
'">' +
'<i class="fas fa-fw fa-play" aria-label="' +
cityssm.escapeHTML(exports.aliases.workOrderOpenDate) +
los.escapedAliases.WorkOrderOpenDate +
'"></i> ' +
workOrder.workOrderOpenDateString +
"</span><br />") +
('<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(exports.aliases.workOrderCloseDate) +
los.escapedAliases.WorkOrderCloseDate +
'">' +
'<i class="fas fa-fw fa-stop" aria-label="' +
cityssm.escapeHTML(exports.aliases.workOrderCloseDate) +
los.escapedAliases.WorkOrderCloseDate +
'"></i> ' +
(workOrder.workOrderCloseDate
? workOrder.workOrderCloseDateString
: '<span class="has-text-grey">(No ' +
cityssm.escapeHTML(exports.aliases.workOrderCloseDate) +
los.escapedAliases.WorkOrderCloseDate +
")</span>") +
"</span>") +
"</td>") +

View File

@ -28,7 +28,11 @@ declare const cityssm: cityssmGlobal;
const offsetElement = document.querySelector("#searchFilter--offset") as HTMLInputElement;
function renderWorkOrders(responseJSON: { count: number; offset: number; workOrders: recordTypes.WorkOrder[]; }) {
function renderWorkOrders(responseJSON: {
count: number;
offset: number;
workOrders: recordTypes.WorkOrder[];
}) {
if (responseJSON.workOrders.length === 0) {
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
@ -49,9 +53,9 @@ declare const cityssm: cityssmGlobal;
cityssm.escapeHTML(lot.mapName || "") +
'">' +
'<i class="fas fa-fw fa-vector-square" aria-label="' +
cityssm.escapeHTML(exports.aliases.lot) +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML(lot.lotName || "(No Lot Name)") +
cityssm.escapeHTML(lot.lotName || "(No " + exports.aliases.Lot + " Name)") +
"</span><br />";
}
@ -61,8 +65,10 @@ declare const cityssm: cityssmGlobal;
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType || "") +
'">' +
'<i class="fas fa-fw fa-' + cityssm.escapeHTML(occupant.fontAwesomeIconClass || "user") + '" aria-label="' +
cityssm.escapeHTML(exports.aliases.occupant) +
'<i class="fas fa-fw fa-' +
cityssm.escapeHTML(occupant.fontAwesomeIconClass || "user") +
'" aria-label="' +
los.escapedAliases.occupant +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName || "(No Name)") +
"</span><br />";
@ -72,70 +78,70 @@ declare const cityssm: cityssmGlobal;
resultsTbodyElement.insertAdjacentHTML(
"beforeend",
"<tr>" +
("<td>" +
'<a class="has-text-weight-bold" href="' +
los.urlPrefix +
"/workOrders/" +
workOrder.workOrderId +
'">' +
(workOrder.workOrderNumber!.trim()
? cityssm.escapeHTML(workOrder.workOrderNumber || "")
: "(No Number)") +
"</a>" +
"</td>") +
("<td>" +
cityssm.escapeHTML(workOrder.workOrderType || "") +
"<br />" +
'<span class="is-size-7">' +
cityssm.escapeHTML(workOrder.workOrderDescription || "") +
"</span>" +
"</td>") +
('<td class="is-nowrap"><span class="is-size-7">' +
relatedHTML +
"</span></td>") +
('<td class="is-nowrap">' +
('<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(exports.aliases.workOrderOpenDate) +
("<td>" +
'<a class="has-text-weight-bold" href="' +
los.urlPrefix +
"/workOrders/" +
workOrder.workOrderId +
'">' +
'<i class="fas fa-fw fa-play" aria-label="' +
cityssm.escapeHTML(exports.aliases.workOrderOpenDate) +
'"></i> ' +
workOrder.workOrderOpenDateString +
"</span><br />") +
('<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(exports.aliases.workOrderCloseDate) +
'">' +
'<i class="fas fa-fw fa-stop" aria-label="' +
cityssm.escapeHTML(exports.aliases.workOrderCloseDate) +
'"></i> ' +
(workOrder.workOrderCloseDate
? workOrder.workOrderCloseDateString
: '<span class="has-text-grey">(No ' +
cityssm.escapeHTML(exports.aliases.workOrderCloseDate) +
")</span>") +
"</span>") +
"</td>") +
("<td>" +
(workOrder.workOrderMilestoneCount === 0
? "-"
: workOrder.workOrderMilestoneCompletionCount +
" / " +
workOrder.workOrderMilestoneCount) +
"</td>") +
(workOrderPrints.length > 0
? "<td>" +
'<a class="button is-small" data-tooltip="Print" href="' +
los.urlPrefix +
"/print/" +
workOrderPrints[0] +
"/?workOrderId=" +
workOrder.workOrderId +
'" target="_blank">' +
'<i class="fas fa-print" aria-label="Print"></i>' +
"</a>" +
"</td>"
: "") +
"</tr>"
(workOrder.workOrderNumber!.trim()
? cityssm.escapeHTML(workOrder.workOrderNumber || "")
: "(No Number)") +
"</a>" +
"</td>") +
("<td>" +
cityssm.escapeHTML(workOrder.workOrderType || "") +
"<br />" +
'<span class="is-size-7">' +
cityssm.escapeHTML(workOrder.workOrderDescription || "") +
"</span>" +
"</td>") +
('<td class="is-nowrap"><span class="is-size-7">' +
relatedHTML +
"</span></td>") +
('<td class="is-nowrap">' +
('<span class="has-tooltip-left" data-tooltip="' +
los.escapedAliases.WorkOrderOpenDate +
'">' +
'<i class="fas fa-fw fa-play" aria-label="' +
los.escapedAliases.WorkOrderOpenDate +
'"></i> ' +
workOrder.workOrderOpenDateString +
"</span><br />") +
('<span class="has-tooltip-left" data-tooltip="' +
los.escapedAliases.WorkOrderCloseDate +
'">' +
'<i class="fas fa-fw fa-stop" aria-label="' +
los.escapedAliases.WorkOrderCloseDate +
'"></i> ' +
(workOrder.workOrderCloseDate
? workOrder.workOrderCloseDateString
: '<span class="has-text-grey">(No ' +
los.escapedAliases.WorkOrderCloseDate +
")</span>") +
"</span>") +
"</td>") +
("<td>" +
(workOrder.workOrderMilestoneCount === 0
? "-"
: workOrder.workOrderMilestoneCompletionCount +
" / " +
workOrder.workOrderMilestoneCount) +
"</td>") +
(workOrderPrints.length > 0
? "<td>" +
'<a class="button is-small" data-tooltip="Print" href="' +
los.urlPrefix +
"/print/" +
workOrderPrints[0] +
"/?workOrderId=" +
workOrder.workOrderId +
'" target="_blank">' +
'<i class="fas fa-print" aria-label="Print"></i>' +
"</a>" +
"</td>"
: "") +
"</tr>"
);
}
@ -164,18 +170,18 @@ declare const cityssm: cityssmGlobal;
('<div class="level-right">' +
(responseJSON.offset > 0
? '<div class="level-item">' +
'<button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous">' +
'<i class="fas fa-arrow-left" aria-hidden="true"></i>' +
"</button>" +
"</div>"
'<button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous">' +
'<i class="fas fa-arrow-left" aria-hidden="true"></i>' +
"</button>" +
"</div>"
: "") +
(limit + responseJSON.offset < responseJSON.count
? '<div class="level-item">' +
'<button class="button is-rounded is-link" data-page="next" type="button" title="Next">' +
"<span>Next</span>" +
'<span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span>' +
"</button>" +
"</div>"
'<button class="button is-rounded is-link" data-page="next" type="button" title="Next">' +
"<span>Next</span>" +
'<span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span>' +
"</button>" +
"</div>"
: "") +
"</div>") +
"</div>";

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,e=document.querySelector("#form--searchFilters"),a=document.querySelector("#container--searchResults"),s=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),c=document.querySelector("#searchFilter--offset");function i(e){if(0===e.lotOccupancies.length)return void(a.innerHTML='<div class="message is-info"><p class="message-body">There are no '+cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase())+" records that meet the search criteria.</p></div>");const c=document.createElement("tbody"),i=cityssm.dateToString(new Date);for(const a of e.lotOccupancies){let e="";e=a.occupancyStartDateString<=i&&(""===a.occupancyEndDateString||a.occupancyEndDateString>=i)?'<span class="has-tooltip-right" data-tooltip="Current '+exports.aliases.occupancy+'"><i class="fas fa-play" aria-label="Current '+exports.aliases.occupancy+'"></i></span>':a.occupancyStartDateString>i?'<span class="has-tooltip-right" data-tooltip="Future '+exports.aliases.occupancy+'"><i class="fas fa-fast-forward" aria-label="Future '+exports.aliases.occupancy+'"></i></span>':'<span class="has-tooltip-right" data-tooltip="Past '+exports.aliases.occupancy+'"><i class="fas fa-stop" aria-label="Past '+exports.aliases.occupancy+'"></i></span>';let s="";for(const t of a.lotOccupancyOccupants)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(t.lotOccupantType||"")+'"><i class="fas fa-fw fa-'+cityssm.escapeHTML(t.fontAwesomeIconClass||"user")+'" aria-hidden="true"></i> '+cityssm.escapeHTML(t.occupantName||"")+"</span><br />";c.insertAdjacentHTML("beforeend",'<tr><td class="has-width-1">'+e+'</td><td><a class="has-text-weight-bold" href="'+t.urlPrefix+"/lotOccupancies/"+a.lotOccupancyId+'">'+cityssm.escapeHTML(a.occupancyType)+"</a></td><td>"+(a.lotName?'<a class="has-tooltip-right" data-tooltip="'+cityssm.escapeHTML(a.lotType||"")+'" href="'+t.urlPrefix+"/lots/"+a.lotId+'">'+cityssm.escapeHTML(a.lotName)+"</a>":'<span class="has-text-grey">(No '+cityssm.escapeHTML(exports.aliases.lot)+")</span>")+'<br /><span class="is-size-7">'+cityssm.escapeHTML(a.mapName||"")+"</span></td><td>"+a.occupancyStartDateString+"</td><td>"+(a.occupancyEndDate?a.occupancyEndDateString:'<span class="has-text-grey">(No End Date)</span>')+"</td><td>"+s+"</td><td>"+(a.printEJS?'<a class="button is-small" data-tooltip="Print" href="'+t.urlPrefix+"/print/"+a.printEJS+"/?lotOccupancyId="+a.lotOccupancyId+'" target="_blank"><i class="fas fa-print" aria-label="Print"></i></a>':"")+"</td></tr>")}a.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th class="has-width-1"></th><th>'+cityssm.escapeHTML(exports.aliases.occupancy)+" Type</th><th>"+cityssm.escapeHTML(exports.aliases.lot)+"</th><th>"+cityssm.escapeHTML(exports.aliases.occupancyStartDate)+"</th><th>End Date</th><th>"+cityssm.escapeHTML(exports.aliases.occupants)+'</th><th class="has-width-1"><span class="is-sr-only">Print</span></th></tr></thead><table><div class="level"><div class="level-left"><div class="level-item has-text-weight-bold">Displaying '+(e.offset+1).toString()+" to "+Math.min(e.count,s+e.offset)+" of "+e.count+'</div></div><div class="level-right">'+(e.offset>0?'<div class="level-item"><button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous"><i class="fas fa-arrow-left" aria-hidden="true"></i></button></div>':"")+(s+e.offset<e.count?'<div class="level-item"><button class="button is-rounded is-link" data-page="next" type="button" title="Next"><span>Next</span><span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span></button></div>':"")+"</div></div>",a.querySelector("table").append(c),e.offset>0&&a.querySelector("button[data-page='previous']").addEventListener("click",r),s+e.offset<e.count&&a.querySelector("button[data-page='next']").addEventListener("click",l)}function o(){a.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading '+exports.aliases.occupancies+"...</div>",cityssm.postJSON(t.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",e,i)}function n(){c.value="0",o()}function r(){c.value=Math.max(Number.parseInt(c.value,10)-s,0).toString(),o()}function l(){c.value=(Number.parseInt(c.value,10)+s).toString(),o()}const p=e.querySelectorAll("input, select");for(const t of p)t.addEventListener("change",n);e.addEventListener("submit",t=>{t.preventDefault(),n()}),o()})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,e=document.querySelector("#form--searchFilters"),a=document.querySelector("#container--searchResults"),s=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),c=document.querySelector("#searchFilter--offset");function i(e){if(0===e.lotOccupancies.length)return void(a.innerHTML='<div class="message is-info"><p class="message-body">There are no '+t.escapedAliases.occupancy+" records that meet the search criteria.</p></div>");const c=document.createElement("tbody"),i=cityssm.dateToString(new Date);for(const a of e.lotOccupancies){let e="";e=a.occupancyStartDateString<=i&&(""===a.occupancyEndDateString||a.occupancyEndDateString>=i)?'<span class="has-tooltip-right" data-tooltip="Current '+t.escapedAliases.Occupancy+'"><i class="fas fa-play" aria-label="Current '+t.escapedAliases.Occupancy+'"></i></span>':a.occupancyStartDateString>i?'<span class="has-tooltip-right" data-tooltip="Future '+t.escapedAliases.Occupancy+'"><i class="fas fa-fast-forward" aria-label="Future '+t.escapedAliases.Occupancy+'"></i></span>':'<span class="has-tooltip-right" data-tooltip="Past '+t.escapedAliases.Occupancy+'"><i class="fas fa-stop" aria-label="Past '+t.escapedAliases.Occupancy+'"></i></span>';let s="";for(const t of a.lotOccupancyOccupants)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(t.lotOccupantType||"")+'"><i class="fas fa-fw fa-'+cityssm.escapeHTML(t.fontAwesomeIconClass||"user")+'" aria-hidden="true"></i> '+cityssm.escapeHTML(t.occupantName||"")+"</span><br />";c.insertAdjacentHTML("beforeend",'<tr><td class="has-width-1">'+e+'</td><td><a class="has-text-weight-bold" href="'+t.urlPrefix+"/lotOccupancies/"+a.lotOccupancyId+'">'+cityssm.escapeHTML(a.occupancyType)+"</a></td><td>"+(a.lotName?'<a class="has-tooltip-right" data-tooltip="'+cityssm.escapeHTML(a.lotType||"")+'" href="'+t.urlPrefix+"/lots/"+a.lotId+'">'+cityssm.escapeHTML(a.lotName)+"</a>":'<span class="has-text-grey">(No '+t.escapedAliases.Lot+")</span>")+'<br /><span class="is-size-7">'+cityssm.escapeHTML(a.mapName||"")+"</span></td><td>"+a.occupancyStartDateString+"</td><td>"+(a.occupancyEndDate?a.occupancyEndDateString:'<span class="has-text-grey">(No End Date)</span>')+"</td><td>"+s+"</td><td>"+(a.printEJS?'<a class="button is-small" data-tooltip="Print" href="'+t.urlPrefix+"/print/"+a.printEJS+"/?lotOccupancyId="+a.lotOccupancyId+'" target="_blank"><i class="fas fa-print" aria-label="Print"></i></a>':"")+"</td></tr>")}a.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th class="has-width-1"></th><th>'+t.escapedAliases.Occupancy+" Type</th><th>"+t.escapedAliases.Lot+"</th><th>"+t.escapedAliases.OccupancyStartDate+"</th><th>End Date</th><th>"+t.escapedAliases.Occupants+'</th><th class="has-width-1"><span class="is-sr-only">Print</span></th></tr></thead><table><div class="level"><div class="level-left"><div class="level-item has-text-weight-bold">Displaying '+(e.offset+1).toString()+" to "+Math.min(e.count,s+e.offset)+" of "+e.count+'</div></div><div class="level-right">'+(e.offset>0?'<div class="level-item"><button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous"><i class="fas fa-arrow-left" aria-hidden="true"></i></button></div>':"")+(s+e.offset<e.count?'<div class="level-item"><button class="button is-rounded is-link" data-page="next" type="button" title="Next"><span>Next</span><span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span></button></div>':"")+"</div></div>",a.querySelector("table").append(c),e.offset>0&&a.querySelector("button[data-page='previous']").addEventListener("click",o),s+e.offset<e.count&&a.querySelector("button[data-page='next']").addEventListener("click",r)}function n(){a.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading '+exports.aliases.occupancies+"...</div>",cityssm.postJSON(t.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",e,i)}function l(){c.value="0",n()}function o(){c.value=Math.max(Number.parseInt(c.value,10)-s,0).toString(),n()}function r(){c.value=(Number.parseInt(c.value,10)+s).toString(),n()}const p=e.querySelectorAll("input, select");for(const t of p)t.addEventListener("change",l);e.addEventListener("submit",t=>{t.preventDefault(),l()}),n()})();

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),a=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),r=()=>{const r=Number.parseInt(i.value,10);s.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading '+exports.aliases.lots+"...</div>",cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",t,t=>{if(0===t.lots.length)return void(s.innerHTML='<div class="message is-info"><p class="message-body">There are no '+exports.aliases.lots.toLowerCase()+" that meet the search criteria.</p></div>");const i=document.createElement("tbody");for(const s of t.lots)i.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.urlPrefix+"/lots/"+s.lotId+'">'+cityssm.escapeHTML(s.lotName||"")+'</a></td><td><a href="'+e.urlPrefix+"/maps/"+s.mapId+'">'+(s.mapName?cityssm.escapeHTML(s.mapName):'<span class="has-text-grey">(No Name)</span>')+"</a></td><td>"+cityssm.escapeHTML(s.lotType||"")+"</td><td>"+(s.lotStatusId?cityssm.escapeHTML(s.lotStatus||""):'<span class="has-text-grey">(No Status)</span>')+"<br />"+(s.lotOccupancyCount>0?'<span class="is-size-7">Currently Occupied</span>':"")+"</td></tr>");s.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th>'+cityssm.escapeHTML(exports.aliases.lot)+"</th><th>"+cityssm.escapeHTML(exports.aliases.map)+"</th><th>"+cityssm.escapeHTML(exports.aliases.lot)+' Type</th><th>Status</th></tr></thead><table><div class="level"><div class="level-left"><div class="level-item has-text-weight-bold">Displaying '+(r+1).toString()+" to "+Math.min(t.count,a+r)+" of "+t.count+'</div></div><div class="level-right">'+(r>0?'<div class="level-item"><button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous"><i class="fas fa-arrow-left" aria-hidden="true"></i></button></div>':"")+(a+r<t.count?'<div class="level-item"><button class="button is-rounded is-link" data-page="next" type="button" title="Next"><span>Next</span><span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span></button></div>':"")+"</div></div>",s.querySelector("table").append(i),r>0&&s.querySelector("button[data-page='previous']").addEventListener("click",o),a+r<t.count&&s.querySelector("button[data-page='next']").addEventListener("click",n)})},l=()=>{i.value="0",r()},o=()=>{i.value=Math.max(Number.parseInt(i.value,10)-a,0).toString(),r()},n=()=>{i.value=(Number.parseInt(i.value,10)+a).toString(),r()},c=t.querySelectorAll("input, select");for(const e of c)e.addEventListener("change",l);t.addEventListener("submit",e=>{e.preventDefault(),l()}),r()})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),a=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset");function r(t){if(0===t.lots.length)return void(s.innerHTML='<div class="message is-info"><p class="message-body">There are no '+e.escapedAliases.lots+" that meet the search criteria.</p></div>");const i=document.createElement("tbody");for(const s of t.lots)i.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.urlPrefix+"/lots/"+s.lotId+'">'+cityssm.escapeHTML(s.lotName||"")+'</a></td><td><a href="'+e.urlPrefix+"/maps/"+s.mapId+'">'+(s.mapName?cityssm.escapeHTML(s.mapName):'<span class="has-text-grey">(No Name)</span>')+"</a></td><td>"+cityssm.escapeHTML(s.lotType||"")+"</td><td>"+(s.lotStatusId?cityssm.escapeHTML(s.lotStatus||""):'<span class="has-text-grey">(No Status)</span>')+"<br />"+(s.lotOccupancyCount>0?'<span class="is-size-7">Currently Occupied</span>':"")+"</td></tr>");s.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th>'+e.escapedAliases.Lot+"</th><th>"+e.escapedAliases.Map+"</th><th>"+e.escapedAliases.Lot+' Type</th><th>Status</th></tr></thead><table><div class="level"><div class="level-left"><div class="level-item has-text-weight-bold">Displaying '+(t.offset+1).toString()+" to "+Math.min(t.count,a+t.offset)+" of "+t.count+'</div></div><div class="level-right">'+(t.offset>0?'<div class="level-item"><button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous"><i class="fas fa-arrow-left" aria-hidden="true"></i></button></div>':"")+(a+t.offset<t.count?'<div class="level-item"><button class="button is-rounded is-link" data-page="next" type="button" title="Next"><span>Next</span><span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span></button></div>':"")+"</div></div>",s.querySelector("table").append(i),t.offset>0&&s.querySelector("button[data-page='previous']").addEventListener("click",n),a+t.offset<t.count&&s.querySelector("button[data-page='next']").addEventListener("click",c)}function l(){s.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading '+e.escapedAliases.Lots+"...</div>",cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",t,r)}function o(){i.value="0",l()}function n(){i.value=Math.max(Number.parseInt(i.value,10)-a,0).toString(),l()}function c(){i.value=(Number.parseInt(i.value,10)+a).toString(),l()}const d=t.querySelectorAll("input, select");for(const e of d)e.addEventListener("change",o);t.addEventListener("submit",e=>{e.preventDefault(),o()}),l()})();

View File

@ -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"},a=["red","green","orange","blue","pink","yellow","purple"],o=["bright","light","dark"],s={urlPrefix:document.querySelector("main").dataset.urlPrefix,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:(e,t,a)=>{let o,s=t;for(;!(o=e.querySelector("#"+s))&&s.includes("-");)s=s.slice(0,Math.max(0,s.lastIndexOf("-")));if(o){o.style.fill="",o.classList.add("highlight","is-"+a);const e=o.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:t=>{const a=t.querySelectorAll(".is-unlock-field-button");for(const t of a)t.addEventListener("click",e)},initializeDatePickers:e=>{const a=e.querySelectorAll("input[type='date']");for(const o of a){const a=Object.assign({},t);o.required&&(a.showClearButton=!1),o.min&&(a.minDate=cityssm.dateStringToDate(o.min)),o.max&&(a.maxDate=cityssm.dateStringToDate(o.max));const s=exports.bulmaCalendar.attach(o,a)[0];s.on("save",()=>{o.value=s.value(),o.dispatchEvent(new Event("change"))}),s.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),s.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const l=e.querySelector("#"+s._id),r=l.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+t.color),e.classList.remove("is-text");const n=l.querySelector(".datetimepicker-clear-button");n&&(o.required?n.remove():(n.dataset.tooltip="Clear",n.ariaLabel="Clear",n.innerHTML='<span class="has-text-weight-bold" aria-hidden="true">&times;</span>'));const i=document.querySelector("label[for='"+o.id+"']");i&&(l.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}},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=s})();
"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">&times;</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})();

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,s=document.querySelector("#form--searchFilters"),r=s.querySelector("#searchFilter--workOrderMilestoneDateFilter"),a=s.querySelector("#searchFilter--workOrderMilestoneDateString"),t=document.querySelector("#container--milestoneCalendar"),i=r=>{r&&r.preventDefault(),t.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading Milestones...</div>',cityssm.postJSON(e.urlPrefix+"/workOrders/doGetWorkOrderMilestones",s,s=>{(s=>{if(0===s.length)return void(t.innerHTML='<div class="message is-info"><p class="message-body">There are no milestones that meet the search criteria.</p></div>');t.innerHTML="";const r=cityssm.dateToString(new Date);let a,i="";for(const o of s){i!==o.workOrderMilestoneDateString&&(a&&t.append(a),(a=document.createElement("div")).className="panel",a.innerHTML='<h2 class="panel-heading">'+o.workOrderMilestoneDateString+"</h2>",i=o.workOrderMilestoneDateString);const s=document.createElement("div");s.className="panel-block is-block",!o.workOrderMilestoneCompletionDate&&o.workOrderMilestoneDateString<r&&s.classList.add("has-background-warning-light");let n="";for(const e of o.workOrderLots)n+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(e.mapName||"")+'"><i class="fas fa-vector-square" aria-label="'+cityssm.escapeHTML(exports.aliases.lot)+'"></i> '+cityssm.escapeHTML(e.lotName||"")+"</span><br />";for(const e of o.workOrderLotOccupancies)for(const s of e.lotOccupancyOccupants)n+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(s.lotOccupantType||"")+'"><i class="fas fa-user" aria-label="'+cityssm.escapeHTML(exports.aliases.lotOccupancy)+'"></i> '+cityssm.escapeHTML(s.occupantName||"")+"</span><br />";s.innerHTML='<div class="columns"><div class="column is-narrow"><span class="icon is-small">'+(o.workOrderMilestoneCompletionDate?'<i class="fas fa-check" aria-label="Completed"></i>':'<i class="far fa-square has-text-grey" aria-label="Incomplete"></i>')+'</span></div><div class="column">'+(0===o.workOrderMilestoneTime?"":o.workOrderMilestoneTimeString+"<br />")+(o.workOrderMilestoneTypeId?"<strong>"+cityssm.escapeHTML(o.workOrderMilestoneType)+"</strong><br />":"")+'<span class="is-size-7">'+cityssm.escapeHTML(o.workOrderMilestoneDescription)+'</span></div><div class="column"><i class="fas fa-circle" style="color:'+e.getRandomColor(o.workOrderNumber||"")+'" aria-hidden="true"></i> <a class="has-text-weight-bold" href="'+e.urlPrefix+"/workOrders/"+o.workOrderId+'">'+cityssm.escapeHTML(o.workOrderNumber||"")+'</a><br /><span class="is-size-7">'+cityssm.escapeHTML(o.workOrderDescription||"")+'</span></div><div class="column is-size-7">'+n+"</div></div>",a.append(s)}t.append(a)})(s.workOrderMilestones)})};r.addEventListener("change",()=>{a.closest("fieldset").disabled="date"!==r.value,i()}),e.initializeDatePickers(s),a.addEventListener("change",i),s.addEventListener("submit",i),i()})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,s=document.querySelector("#form--searchFilters"),r=s.querySelector("#searchFilter--workOrderMilestoneDateFilter"),a=s.querySelector("#searchFilter--workOrderMilestoneDateString"),t=document.querySelector("#container--milestoneCalendar"),i=r=>{r&&r.preventDefault(),t.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading Milestones...</div>',cityssm.postJSON(e.urlPrefix+"/workOrders/doGetWorkOrderMilestones",s,s=>{(s=>{if(0===s.length)return void(t.innerHTML='<div class="message is-info"><p class="message-body">There are no milestones that meet the search criteria.</p></div>');t.innerHTML="";const r=cityssm.dateToString(new Date);let a,i="";for(const o of s){i!==o.workOrderMilestoneDateString&&(a&&t.append(a),(a=document.createElement("div")).className="panel",a.innerHTML='<h2 class="panel-heading">'+o.workOrderMilestoneDateString+"</h2>",i=o.workOrderMilestoneDateString);const s=document.createElement("div");s.className="panel-block is-block",!o.workOrderMilestoneCompletionDate&&o.workOrderMilestoneDateString<r&&s.classList.add("has-background-warning-light");let n="";for(const s of o.workOrderLots)n+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(s.mapName||"")+'"><i class="fas fa-vector-square" aria-label="'+e.escapedAliases.Lot+'"></i> '+cityssm.escapeHTML(s.lotName||"")+"</span><br />";for(const s of o.workOrderLotOccupancies)for(const r of s.lotOccupancyOccupants)n+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(r.lotOccupantType||"")+'"><i class="fas fa-user" aria-label="'+e.escapedAliases.Occupancy+'"></i> '+cityssm.escapeHTML(r.occupantName||"")+"</span><br />";s.innerHTML='<div class="columns"><div class="column is-narrow"><span class="icon is-small">'+(o.workOrderMilestoneCompletionDate?'<i class="fas fa-check" aria-label="Completed"></i>':'<i class="far fa-square has-text-grey" aria-label="Incomplete"></i>')+'</span></div><div class="column">'+(0===o.workOrderMilestoneTime?"":o.workOrderMilestoneTimeString+"<br />")+(o.workOrderMilestoneTypeId?"<strong>"+cityssm.escapeHTML(o.workOrderMilestoneType)+"</strong><br />":"")+'<span class="is-size-7">'+cityssm.escapeHTML(o.workOrderMilestoneDescription)+'</span></div><div class="column"><i class="fas fa-circle" style="color:'+e.getRandomColor(o.workOrderNumber||"")+'" aria-hidden="true"></i> <a class="has-text-weight-bold" href="'+e.urlPrefix+"/workOrders/"+o.workOrderId+'">'+cityssm.escapeHTML(o.workOrderNumber||"")+'</a><br /><span class="is-size-7">'+cityssm.escapeHTML(o.workOrderDescription||"")+'</span></div><div class="column is-size-7">'+n+"</div></div>",a.append(s)}t.append(a)})(s.workOrderMilestones)})};r.addEventListener("change",()=>{a.closest("fieldset").disabled="date"!==r.value,i()}),e.initializeDatePickers(s),a.addEventListener("change",i),s.addEventListener("submit",i),i()})();

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=exports.workOrderPrints,s=document.querySelector("#form--searchFilters");e.initializeDatePickers(s);const a=document.querySelector("#container--searchResults"),r=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),o=document.querySelector("#searchFilter--offset");function i(s){if(0===s.workOrders.length)return void(a.innerHTML='<div class="message is-info"><p class="message-body">There are no work orders that meet the search criteria.</p></div>');const o=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const e of a.workOrderLots)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(e.mapName||"")+'"><i class="fas fa-fw fa-vector-square" aria-label="'+cityssm.escapeHTML(exports.aliases.lot)+'"></i> '+cityssm.escapeHTML(e.lotName||"(No Lot Name)")+"</span><br />";for(const e of a.workOrderLotOccupancies)for(const t of e.lotOccupancyOccupants)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(t.lotOccupantType||"")+'"><i class="fas fa-fw fa-'+cityssm.escapeHTML(t.fontAwesomeIconClass||"user")+'" aria-label="'+cityssm.escapeHTML(exports.aliases.occupant)+'"></i> '+cityssm.escapeHTML(t.occupantName||"(No Name)")+"</span><br />";o.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.urlPrefix+"/workOrders/"+a.workOrderId+'">'+(a.workOrderNumber.trim()?cityssm.escapeHTML(a.workOrderNumber||""):"(No Number)")+"</a></td><td>"+cityssm.escapeHTML(a.workOrderType||"")+'<br /><span class="is-size-7">'+cityssm.escapeHTML(a.workOrderDescription||"")+'</span></td><td class="is-nowrap"><span class="is-size-7">'+s+'</span></td><td class="is-nowrap"><span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(exports.aliases.workOrderOpenDate)+'"><i class="fas fa-fw fa-play" aria-label="'+cityssm.escapeHTML(exports.aliases.workOrderOpenDate)+'"></i> '+a.workOrderOpenDateString+'</span><br /><span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(exports.aliases.workOrderCloseDate)+'"><i class="fas fa-fw fa-stop" aria-label="'+cityssm.escapeHTML(exports.aliases.workOrderCloseDate)+'"></i> '+(a.workOrderCloseDate?a.workOrderCloseDateString:'<span class="has-text-grey">(No '+cityssm.escapeHTML(exports.aliases.workOrderCloseDate)+")</span>")+"</span></td><td>"+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+"</td>"+(t.length>0?'<td><a class="button is-small" data-tooltip="Print" href="'+e.urlPrefix+"/print/"+t[0]+"/?workOrderId="+a.workOrderId+'" target="_blank"><i class="fas fa-print" aria-label="Print"></i></a></td>':"")+"</tr>")}a.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th>Work Order Number</th><th>Description</th><th>Related</th><th>Date</th><th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>'+(t.length>0?'<th class="has-width-1"></th>':"")+'</tr></thead><table><div class="level"><div class="level-left"><div class="level-item has-text-weight-bold">Displaying '+(s.offset+1).toString()+" to "+Math.min(s.count,r+s.offset)+" of "+s.count+'</div></div><div class="level-right">'+(s.offset>0?'<div class="level-item"><button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous"><i class="fas fa-arrow-left" aria-hidden="true"></i></button></div>':"")+(r+s.offset<s.count?'<div class="level-item"><button class="button is-rounded is-link" data-page="next" type="button" title="Next"><span>Next</span><span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span></button></div>':"")+"</div></div>",a.querySelector("table").append(o),s.offset>0&&a.querySelector("button[data-page='previous']").addEventListener("click",c),r+s.offset<s.count&&a.querySelector("button[data-page='next']").addEventListener("click",d)}function l(){a.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading Work Orders...</div>',cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",s,i)}function n(){o.value="0",l()}function c(){o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),l()}function d(){o.value=(Number.parseInt(o.value,10)+r).toString(),l()}const p=s.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",n);s.addEventListener("submit",e=>{e.preventDefault(),n()}),l()})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=exports.workOrderPrints,s=document.querySelector("#form--searchFilters");e.initializeDatePickers(s);const a=document.querySelector("#container--searchResults"),r=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),o=document.querySelector("#searchFilter--offset");function i(s){if(0===s.workOrders.length)return void(a.innerHTML='<div class="message is-info"><p class="message-body">There are no work orders that meet the search criteria.</p></div>');const o=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const t of a.workOrderLots)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(t.mapName||"")+'"><i class="fas fa-fw fa-vector-square" aria-label="'+e.escapedAliases.Lot+'"></i> '+cityssm.escapeHTML(t.lotName||"(No "+exports.aliases.Lot+" Name)")+"</span><br />";for(const t of a.workOrderLotOccupancies)for(const a of t.lotOccupancyOccupants)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(a.lotOccupantType||"")+'"><i class="fas fa-fw fa-'+cityssm.escapeHTML(a.fontAwesomeIconClass||"user")+'" aria-label="'+e.escapedAliases.occupant+'"></i> '+cityssm.escapeHTML(a.occupantName||"(No Name)")+"</span><br />";o.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.urlPrefix+"/workOrders/"+a.workOrderId+'">'+(a.workOrderNumber.trim()?cityssm.escapeHTML(a.workOrderNumber||""):"(No Number)")+"</a></td><td>"+cityssm.escapeHTML(a.workOrderType||"")+'<br /><span class="is-size-7">'+cityssm.escapeHTML(a.workOrderDescription||"")+'</span></td><td class="is-nowrap"><span class="is-size-7">'+s+'</span></td><td class="is-nowrap"><span class="has-tooltip-left" data-tooltip="'+e.escapedAliases.WorkOrderOpenDate+'"><i class="fas fa-fw fa-play" aria-label="'+e.escapedAliases.WorkOrderOpenDate+'"></i> '+a.workOrderOpenDateString+'</span><br /><span class="has-tooltip-left" data-tooltip="'+e.escapedAliases.WorkOrderCloseDate+'"><i class="fas fa-fw fa-stop" aria-label="'+e.escapedAliases.WorkOrderCloseDate+'"></i> '+(a.workOrderCloseDate?a.workOrderCloseDateString:'<span class="has-text-grey">(No '+e.escapedAliases.WorkOrderCloseDate+")</span>")+"</span></td><td>"+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+"</td>"+(t.length>0?'<td><a class="button is-small" data-tooltip="Print" href="'+e.urlPrefix+"/print/"+t[0]+"/?workOrderId="+a.workOrderId+'" target="_blank"><i class="fas fa-print" aria-label="Print"></i></a></td>':"")+"</tr>")}a.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th>Work Order Number</th><th>Description</th><th>Related</th><th>Date</th><th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>'+(t.length>0?'<th class="has-width-1"></th>':"")+'</tr></thead><table><div class="level"><div class="level-left"><div class="level-item has-text-weight-bold">Displaying '+(s.offset+1).toString()+" to "+Math.min(s.count,r+s.offset)+" of "+s.count+'</div></div><div class="level-right">'+(s.offset>0?'<div class="level-item"><button class="button is-rounded is-link is-outlined" data-page="previous" type="button" title="Previous"><i class="fas fa-arrow-left" aria-hidden="true"></i></button></div>':"")+(r+s.offset<s.count?'<div class="level-item"><button class="button is-rounded is-link" data-page="next" type="button" title="Next"><span>Next</span><span class="icon"><i class="fas fa-arrow-right" aria-hidden="true"></i></span></button></div>':"")+"</div></div>",a.querySelector("table").append(o),s.offset>0&&a.querySelector("button[data-page='previous']").addEventListener("click",c),r+s.offset<s.count&&a.querySelector("button[data-page='next']").addEventListener("click",d)}function l(){a.innerHTML='<div class="has-text-grey has-text-centered"><i class="fas fa-5x fa-circle-notch fa-spin" aria-hidden="true"></i><br />Loading Work Orders...</div>',cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",s,i)}function n(){o.value="0",l()}function c(){o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),l()}function d(){o.value=(Number.parseInt(o.value,10)+r).toString(),l()}const p=s.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",n);s.addEventListener("submit",e=>{e.preventDefault(),n()}),l()})();

View File

@ -5,5 +5,29 @@ export interface LOS {
initializeDatePickers: (containerElement: HTMLElement) => void;
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void;
populateAliases: (containerElement: HTMLElement) => void;
escapedAliases: {
Map: string;
map: string;
Lot: string;
lot: string;
Lots: string;
lots: string;
Occupancy: string;
occupancy: string;
Occupancies: string;
occupancies: string;
Occupant: string;
occupant: string;
Occupants: string;
occupants: string;
ExternalReceiptNumber: string;
externalReceiptNumber: string;
OccupancyStartDate: string;
occupancyStartDate: string;
WorkOrderOpenDate: string;
workOrderOpenDate: string;
WorkOrderCloseDate: string;
workOrderCloseDate: string;
};
getRandomColor: (seedString: string) => string;
}

View File

@ -14,5 +14,30 @@ export interface LOS {
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void;
populateAliases: (containerElement: HTMLElement) => void;
escapedAliases: {
Map: string;
map: string;
Lot: string;
lot: string;
Lots: string;
lots: string;
Occupancy: string;
occupancy: string;
Occupancies: string;
occupancies: string;
Occupant: string;
occupant: string;
Occupants: string;
occupants: string;
ExternalReceiptNumber: string;
externalReceiptNumber: string;
OccupancyStartDate: string;
occupancyStartDate: string;
WorkOrderOpenDate: string;
workOrderOpenDate: string;
WorkOrderCloseDate: string;
workOrderCloseDate: string;
};
getRandomColor: (seedString: string) => string;
}