cityssm/corporate-records-manager

View on GitHub
public/javascripts/admin.min.js

Summary

Maintainability
A
0 mins
Test Coverage
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e={isValidRegex:e=>{try{return new RegExp(e),!0}catch(e){return!1}},getLoadingHTML:e=>'<div class="has-text-centered has-text-grey-dark"><i class="fas fa-4x fa-pulse fa-spinner" aria-hidden="true"></i><br /><em>Loading '+e+"...</em></div>"};exports.crmAdmin=e;const t=document.querySelector("#admin--tabs").querySelectorAll("[role='tab']"),s=document.querySelector("#admin--tabpanels").querySelectorAll("[role='tabpanel']"),r=r=>{r.preventDefault();const a=r.currentTarget;for(const e of s)e.classList.add("is-hidden");for(const e of t)e.classList.remove("is-active"),e.setAttribute("aria-selected","false");switch(a.classList.add("is-active"),a.setAttribute("aria-selected","true"),document.querySelector("#"+a.getAttribute("aria-controls")).classList.remove("is-hidden"),a.getAttribute("aria-controls").split("--")[1]){case"users":e.getUsersFunction();break;case"recordTypes":e.getRecordTypesFunction();break;case"recordUserTypes":e.getRecordUserTypesFunction();break;case"statusTypes":e.getRecordTypesFunction(e.getStatusTypesFunction)}};for(const e of t)e.addEventListener("click",r)})(),Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.crmAdmin,t=exports.urlPrefix,s=document.querySelector("#container--users");let r=[];const a=e=>{const t=e.currentTarget,s=t.closest("tr"),a=Number.parseInt(s.dataset.index,10);return{buttonElement:t,trElement:s,userIndex:a,user:r[a]}},c=e=>{const{buttonElement:s,user:r}=a(e);s.disabled=!0;const c=s.dataset.field,n=!r[c];cityssm.postJSON(t+"/admin/doSetUserSetting",{userName:r.userName,fieldName:c,fieldValue:n},e=>{if(s.disabled=!1,e.success)if(r[c]=n,n)switch(c){case"isActive":s.innerHTML='<i class="fas fa-user-check" aria-label="Active User"></i>';break;case"canViewAll":s.innerHTML='<i class="fas fa-eye" aria-label="View All User"></i>';break;case"canUpdate":s.innerHTML='<i class="fas fa-pencil-alt" aria-label="Update User"></i>';break;case"isAdmin":s.innerHTML='<i class="fas fa-cog" aria-label="Admin User"></i>'}else s.innerHTML='<i class="fas fa-minus" aria-label="False"></i>';else cityssm.alertModal("User Setting Not Updated",cityssm.escapeHTML(e.message),"OK","danger")})},n=e=>{const{buttonElement:s,user:c,userIndex:n}=a(e),i=c.userName;cityssm.confirmModal("Remove User?",'Are you sure you want to remove all access for "'+i+'"?',"Yes, Remove User","warning",()=>{s.disabled=!0,cityssm.postJSON(t+"/admin/doRemoveUser",{userName:i},e=>{e.success?(r.splice(n,1),o()):(cityssm.alertModal("Error Removing User",cityssm.escapeHTML(e.message),"OK","danger"),s.disabled=!1)})})},o=()=>{if(0===r.length)return void(s.innerHTML='<div class="message is-warning"><p class="message-body"><strong>There are no users in the system.</strong><br />Please create at least one user.</p></div>');const e=document.createElement("table");e.className="table is-fullwidth is-bordered is-striped is-hoverable has-sticky-header",e.innerHTML='<thead><tr><th>User Name</th><th class="has-text-centered">Is Active</th><th class="has-text-centered">Can View All</th><th class="has-text-centered">Can Update</th><th class="has-text-centered">Is Admin</th><th class="has-text-centered">Remove</th></tr></thead><tbody></tbody>';const t=e.querySelector("tbody");for(const[e,s]of r.entries()){const r=document.createElement("tr");r.dataset.index=e.toString(),r.innerHTML='<th class="is-vcentered">'+s.userName+"<br />"+(s.fullName&&""!==s.fullName&&s.fullName!==s.userName?cityssm.escapeHTML(s.fullName):"")+'</th><td class="has-text-centered"><button class="button is-inverted is-info" data-field="isActive" type="button">'+(s.isActive?'<i class="fas fa-user-check" aria-label="Active User"></i>':'<i class="fas fa-minus" aria-label="False"></i>')+'</button></td><td class="has-text-centered"><button class="button is-inverted is-info" data-field="canViewAll" type="button">'+(s.canViewAll?'<i class="fas fa-eye" aria-label="View All User"></i>':'<i class="fas fa-minus" aria-label="False"></i>')+'</button></td><td class="has-text-centered"><button class="button is-inverted is-info" data-field="canUpdate" type="button">'+(s.canUpdate?'<i class="fas fa-pencil-alt" aria-label="Update User"></i>':'<i class="fas fa-minus" aria-label="False"></i>')+'</button></td><td class="has-text-centered"><button class="button is-inverted is-info" data-field="isAdmin" type="button">'+(s.isAdmin?'<i class="fas fa-cog" aria-label="Admin User"></i>':'<i class="fas fa-minus" aria-label="False"></i>')+'</button></td><td class="has-text-centered">'+(exports.user.userName===s.userName?"":'<button class="button is-inverted is-danger is-remove-user-button" type="button"><i class="fas fa-trash-alt" aria-label="Remove User"></i></button>')+"</td>";const a=r.querySelectorAll("button");for(const e of a)e.classList.contains("is-remove-user-button")?e.addEventListener("click",n):e.addEventListener("click",c);t.append(r)}cityssm.clearElement(s),s.append(e)};e.getUsersFunction=(()=>{r=[],cityssm.clearElement(s),s.innerHTML=e.getLoadingHTML("Users"),cityssm.postJSON(t+"/admin/doGetUsers",{},e=>{r=e.users,o()})}),document.querySelector("#form--addUser").addEventListener("submit",e=>{e.preventDefault();const s=e.currentTarget;cityssm.postJSON(t+"/admin/doAddUser",s,e=>{e.success?(s.reset(),r.unshift(e.user),o()):cityssm.alertModal("Error Creating New User",cityssm.escapeHTML(e.message),"OK","danger")})})})(),Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.crmAdmin,t=exports.urlPrefix,s=document.querySelector("#container--recordTypes"),r=document.querySelector("#statusTypesFilter--recordTypeKey");e.recordTypes=[];const a=t=>{const s=t.currentTarget,r=s.closest("tr"),a=Number.parseInt(r.dataset.index,10);return{buttonElement:s,trElement:r,recordTypeIndex:a,recordType:e.recordTypes[a]}},c=e=>{const{buttonElement:s,recordType:r}=a(e);s.disabled=!0;const c=!r.isActive;cityssm.postJSON(t+"/admin/doSetRecordTypeIsActive",{recordTypeKey:r.recordTypeKey,isActive:c},e=>{s.disabled=!1,e.success?(r.isActive=c,s.innerHTML=c?'<i class="fas fa-check" aria-label="Active Record Type"></i>':'<i class="fas fa-minus" aria-label="False"></i>'):cityssm.alertModal("Record Type Not Updated",cityssm.escapeHTML(e.message),"OK","danger")})},n=s=>{const{recordType:r,recordTypeIndex:c}=a(s);let n,o,d,l=!1;const u=s=>{s.preventDefault(),l||(e.isValidRegex(o.value)?(l=!0,cityssm.postJSON(t+"/admin/doUpdateRecordType",n,t=>{t.success?(e.recordTypes[c]=t.recordType,e.recordTypes[c].isActive=r.isActive,e.recordTypes[c].recordCount=r.recordCount,i(),d()):(l=!1,cityssm.alertModal("Error Updating Record Type",cityssm.escapeHTML(t.message),"OK","danger"))})):cityssm.alertModal("Regular Expression Pattern Invalid","Please ensure you are using a valid regular expression.","OK","warning"))};cityssm.openHtmlModal("recordType-edit",{onshow:()=>{n=document.querySelector("#form--editRecordType"),document.querySelector("#editRecordType--recordTypeKey").value=r.recordTypeKey,document.querySelector("#editRecordType--recordType").value=r.recordType,document.querySelector("#editRecordType--minlength").value=r.minlength.toString(),document.querySelector("#editRecordType--maxlength").value=r.maxlength.toString(),(o=document.querySelector("#editRecordType--pattern")).value=r.pattern,o.addEventListener("keyup",()=>{e.isValidRegex(o.value)?o.classList.remove("is-danger"):o.classList.add("is-danger")}),document.querySelector("#editRecordType--patternHelp").value=r.patternHelp,n.addEventListener("submit",u)},onshown:(e,t)=>{d=t}})},o=s=>{const{recordType:r,recordTypeIndex:c}=a(s);cityssm.confirmModal("Remove Record Type",'Are you sure you want to remove the "'+cityssm.escapeHTML(r.recordType)+'" record type?',"Yes, Remove It","warning",()=>{cityssm.postJSON(t+"/admin/doRemoveRecordType",{recordTypeKey:r.recordTypeKey},t=>{t.success?(e.recordTypes.splice(c,1),i()):cityssm.alertModal("Error Removing Record Type",cityssm.escapeHTML(t.message),"OK","danger")})})},i=()=>{if(r.innerHTML="",0===e.recordTypes.length)return void(s.innerHTML='<div class="message is-warning"><p class="message-body"><strong>There are no record types in the system.</strong><br />Please create at least one record type.</p></div>');const t=document.createElement("table");t.className="table is-fullwidth is-bordered is-striped is-hoverable has-sticky-header",t.innerHTML='<thead><tr><th>Record Type</th><th class="has-text-centered">Is Active</th><th class="has-text-centered">Length</th><th class="has-text-centered">Pattern</th><th class="has-text-centered">Options</th></tr></thead><tbody></tbody>';const a=t.querySelector("tbody");for(let t=0;t<e.recordTypes.length;t+=1){const s=e.recordTypes[t],i=document.createElement("tr");i.dataset.index=t.toString(),i.innerHTML='<th class="is-vcentered">'+s.recordType+'<br /><span class="is-size-7"><i class="fas fa-key" aria-hidden="true"></i> '+s.recordTypeKey+'</span></th><td class="has-text-centered"><button class="button is-inverted is-info is-toggle-active-button" type="button">'+(s.isActive?'<i class="fas fa-check" aria-label="Active Record Type"></i>':'<i class="fas fa-minus" aria-label="False"></i>')+'</button></td><td class="has-text-centered">'+s.minlength.toString()+" - "+s.maxlength.toString()+'</td><td class="has-text-centered">'+cityssm.escapeHTML(s.pattern)+'<br /><span class="is-size-7">'+cityssm.escapeHTML(s.patternHelp)+'</span></td><td class="has-text-centered"><button class="button is-inverted is-info is-update-button" type="button"><i class="fas fa-pencil-alt" aria-label="Update Record Type"></i></button>'+(0===s.recordCount?' <button class="button is-inverted is-danger is-remove-button" type="button"><i class="fas fa-trash-alt" aria-label="Remove Record Type"></i></button>':"")+"</td>",i.querySelector(".is-toggle-active-button").addEventListener("click",c),i.querySelector(".is-update-button").addEventListener("click",n),0===s.recordCount&&i.querySelector(".is-remove-button").addEventListener("click",o),a.append(i);const d=document.createElement("option");d.value=s.recordTypeKey,d.textContent=s.recordType,r.append(d)}cityssm.clearElement(s),s.append(t)};e.getRecordTypesFunction=(a=>{e.recordTypes=[],r.innerHTML="",cityssm.clearElement(s),s.innerHTML=e.getLoadingHTML("Record Types"),cityssm.postJSON(t+"/admin/doGetRecordTypes",{},t=>{e.recordTypes=t.recordTypes,i(),a&&a()})}),document.querySelector("#is-add-record-type-button").addEventListener("click",()=>{let s,r,a,c=!1;const n=n=>{n.preventDefault(),c||(e.isValidRegex(r.value)?(c=!0,cityssm.postJSON(t+"/admin/doAddRecordType",s,t=>{t.success?(e.recordTypes.unshift(t.recordType),i(),a()):(c=!1,cityssm.alertModal("Error Adding Record Type",cityssm.escapeHTML(t.message),"OK","danger"))})):cityssm.alertModal("Regular Expression Pattern Invalid","Please ensure you are using a valid regular expression.","OK","warning"))};cityssm.openHtmlModal("recordType-add",{onshow:()=>{s=document.querySelector("#form--addRecordType"),(r=document.querySelector("#addRecordType--pattern")).addEventListener("keyup",()=>{e.isValidRegex(r.value)?r.classList.remove("is-danger"):r.classList.add("is-danger")}),s.addEventListener("submit",n)},onshown:(e,t)=>{a=t}})})})(),Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.crmAdmin,t=exports.urlPrefix,s=document.querySelector("#container--statusTypes"),r=document.querySelector("#statusTypesFilter--recordTypeKey");let a=[];const c=e=>{const t=e.currentTarget,s=t.closest("tr"),r=Number.parseInt(s.dataset.index,10);return{buttonElement:t,trElement:s,statusTypeIndex:r,statusType:a[r]}},n=e=>{const{buttonElement:s,statusType:r}=c(e);s.disabled=!0;const a=!r.isActive;cityssm.postJSON(t+"/admin/doSetStatusTypeIsActive",{statusTypeKey:r.statusTypeKey,isActive:a},e=>{s.disabled=!1,e.success?(r.isActive=a,s.innerHTML=a?'<i class="fas fa-check" aria-label="Active Status Type"></i>':'<i class="fas fa-minus" aria-label="False"></i>'):cityssm.alertModal("Status Type Not Updated",cityssm.escapeHTML(e.message),"OK","danger")})},o=(e,s)=>{const{buttonElement:r,statusType:n}=c(e);r.disabled=!0;const o=n.orderNumber+s;cityssm.postJSON(t+"/admin/doSetStatusTypeOrderNumber",{statusTypeKey:n.statusTypeKey,orderNumber:o},e=>{e.success?(a=e.statusTypes,y()):cityssm.alertModal("Error Moving Status Type",cityssm.escapeHTML(e.message),"OK","danger")})},i=e=>{o(e,-1)},d=e=>{o(e,1)},l=e=>{const{statusType:s}=c(e);let r,n;const o=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateStatusType",r,e=>{e.success?(n(),a=e.statusTypes,y()):cityssm.alertModal("Error Updating Status Type",cityssm.escapeHTML(e.message),"OK","danger")})};cityssm.openHtmlModal("statusType-edit",{onshow:()=>{document.querySelector("#editStatusType--statusTypeKey").value=s.statusTypeKey,document.querySelector("#editStatusType--statusType").value=s.statusType,(r=document.querySelector("#form--editStatusType")).addEventListener("submit",o)},onshown:(e,t)=>{n=t}})},u=e=>{const{statusType:s}=c(e);cityssm.confirmModal("Remove Status Type",'Are you sure you want to remove the "'+cityssm.escapeHTML(s.statusType)+'" status type?',"Yes, Remove It","warning",()=>{cityssm.postJSON(t+"/admin/doRemoveStatusType",{statusTypeKey:s.statusTypeKey},e=>{e.success?(a=e.statusTypes,y()):cityssm.alertModal("Error Removing Status Type",cityssm.escapeHTML(e.message),"OK","danger")})})},y=()=>{const e=r.value;let t=!1;const c=document.createElement("table");c.className="table is-fullwidth is-bordered is-striped is-hoverable has-sticky-header",c.innerHTML='<thead><tr><th>Status Type</th><th class="has-text-centered">Is Active</th><th class="has-text-centered">Order</th><th class="has-text-centered">Options</th></tr></thead><tbody></tbody>';const o=c.querySelectorAll("tbody")[0];for(const[s,r]of a.entries()){if(e!==r.recordTypeKey)continue;const a=document.createElement("tr");a.dataset.index=s.toString(),a.innerHTML='<th class="is-vcentered">'+r.statusType+'<br /><span class="is-size-7"><i class="fas fa-key" aria-hidden="true"></i> '+r.statusTypeKey+'</span></th><td class="has-text-centered"><button class="button is-inverted is-info is-toggle-active-button" type="button">'+(r.isActive?'<i class="fas fa-check" aria-label="Active Status Type"></i>':'<i class="fas fa-minus" aria-label="False"></i>')+'</button></td><td class="has-text-centered"><button class="button is-inverted is-info is-up-button" type="button"><i class="fas fa-arrow-up" aria-label="Move Status Type Up"></i></button> <button class="button is-inverted is-info is-down-button" type="button"><i class="fas fa-arrow-down" aria-label="Move Status Type Down"></i></button></td><td class="has-text-centered"><button class="button is-inverted is-info is-update-button" type="button"><i class="fas fa-pencil-alt" aria-label="Update Status Type"></i></button>'+(0===r.recordCount?' <button class="button is-inverted is-danger is-remove-button" type="button"><i class="fas fa-trash-alt" aria-label="Remove Status Type"></i></button>':"")+"</td>",a.querySelectorAll(".is-toggle-active-button")[0].addEventListener("click",n),a.querySelectorAll(".is-up-button")[0].addEventListener("click",i),a.querySelectorAll(".is-down-button")[0].addEventListener("click",d),a.querySelectorAll(".is-update-button")[0].addEventListener("click",l),0===r.recordCount&&a.querySelectorAll(".is-remove-button")[0].addEventListener("click",u),o.append(a),t=!0}if(cityssm.clearElement(s),t){const e=o.querySelectorAll("tr");e[0].querySelector(".is-up-button").disabled=!0,e[e.length-1].querySelector(".is-down-button").disabled=!0,s.append(c)}else s.innerHTML='<div class="message is-info"><p class="message-body">There are no status types associated with the selected record type.</p></div>'};e.getStatusTypesFunction=(()=>{a=[],cityssm.clearElement(s),s.innerHTML=e.getLoadingHTML("Status Types"),cityssm.postJSON(t+"/admin/doGetStatusTypes",{},e=>{a=e.statusTypes,y()})}),r.addEventListener("change",y),document.querySelector("#is-add-status-type-button").addEventListener("click",()=>{let s,c;const n=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doAddStatusType",c,e=>{e.success?(s(),a=e.statusTypes,y()):cityssm.alertModal("Error Adding Status Type",cityssm.escapeHTML(e.message),"OK","danger")})};cityssm.openHtmlModal("statusType-add",{onshow:()=>{const t=e.recordTypes.find(e=>e.recordTypeKey===r.value);document.querySelector("#addStatusType--recordType").textContent=t.recordType,document.querySelector("#addStatusType--recordTypeKey").value=r.value,(c=document.querySelector("#form--addStatusType")).addEventListener("submit",n)},onshown:(e,t)=>{s=t}})})})(),Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.crmAdmin,t=exports.urlPrefix,s=document.querySelector("#container--recordUserTypes");let r=[];const a=e=>{const t=e.currentTarget,s=t.closest("tr"),a=Number.parseInt(s.dataset.index,10);return{buttonElement:t,trElement:s,recordUserTypeIndex:a,recordUserType:r[a]}},c=e=>{const{buttonElement:s,recordUserType:r}=a(e);s.disabled=!0;const c=!r.isActive;cityssm.postJSON(t+"/admin/doSetRecordUserTypeIsActive",{recordUserTypeKey:r.recordUserTypeKey,isActive:c},e=>{s.disabled=!1,e.success?(r.isActive=c,s.innerHTML=c?'<i class="fas fa-check" aria-label="Active Record User Type"></i>':'<i class="fas fa-minus" aria-label="False"></i>'):cityssm.alertModal("Record User Type Not Updated",cityssm.escapeHTML(e.message),"OK","danger")})},n=e=>{const{recordUserType:s,recordUserTypeIndex:c}=a(e);let n,o,d=!1;const l=e=>{e.preventDefault(),d||(d=!0,cityssm.postJSON(t+"/admin/doUpdateRecordUserType",n,e=>{e.success?(r[c]=e.recordUserType,r[c].isActive=s.isActive,r[c].recordCount=s.recordCount,i(),o()):(d=!1,cityssm.alertModal("Error Updating Record User Type",cityssm.escapeHTML(e.message),"OK","danger"))}))};cityssm.openHtmlModal("recordUserType-edit",{onshow:()=>{n=document.querySelector("#form--editRecordUserType"),document.querySelector("#editRecordUserType--recordUserTypeKey").value=s.recordUserTypeKey,document.querySelector("#editRecordUserType--recordUserType").value=s.recordUserType,n.addEventListener("submit",l)},onshown:(e,t)=>{o=t}})},o=e=>{const{recordUserType:s,recordUserTypeIndex:c}=a(e);cityssm.confirmModal("Remove Record User Type",'Are you sure you want to remove the "'+cityssm.escapeHTML(s.recordUserType)+'" user type?',"Yes, Remove It","warning",()=>{cityssm.postJSON(t+"/admin/doRemoveRecordUserType",{recordUserTypeKey:s.recordUserTypeKey},e=>{e.success?(r.splice(c,1),i()):cityssm.alertModal("Error Removing Record User Type",cityssm.escapeHTML(e.message),"OK","danger")})})},i=()=>{if(0===r.length)return void(s.innerHTML='<div class="message is-warning"><p class="message-body"><strong>There are no user types in the system.</strong><br />Please create at least one record type.</p></div>');const e=document.createElement("table");e.className="table is-fullwidth is-bordered is-striped is-hoverable has-sticky-header",e.innerHTML='<thead><tr><th>Record User Type</th><th class="has-text-centered">Is Active</th><th class="has-text-centered">Options</th></tr></thead><tbody></tbody>';const t=e.querySelector("tbody");for(const[e,s]of r.entries()){const r=document.createElement("tr");r.dataset.index=e.toString(),r.innerHTML='<th class="is-vcentered">'+s.recordUserType+'<br /><span class="is-size-7"><i class="fas fa-key" aria-hidden="true"></i> '+s.recordUserTypeKey+'</span></th><td class="has-text-centered"><button class="button is-inverted is-info is-toggle-active-button" type="button">'+(s.isActive?'<i class="fas fa-check" aria-label="Active User Type"></i>':'<i class="fas fa-minus" aria-label="False"></i>')+'</button></td><td class="has-text-centered"><button class="button is-inverted is-info is-update-button" type="button"><i class="fas fa-pencil-alt" aria-label="Update Record Type"></i></button>'+(0===s.recordCount?' <button class="button is-inverted is-danger is-remove-button" type="button"><i class="fas fa-trash-alt" aria-label="Remove Record User Type"></i></button>':"")+"</td>",r.querySelector(".is-toggle-active-button").addEventListener("click",c),r.querySelector(".is-update-button").addEventListener("click",n),0===s.recordCount&&r.querySelector(".is-remove-button").addEventListener("click",o),t.append(r)}cityssm.clearElement(s),s.append(e)};e.getRecordUserTypesFunction=(a=>{r=[],cityssm.clearElement(s),s.innerHTML=e.getLoadingHTML("Record User Types"),cityssm.postJSON(t+"/admin/doGetRecordUserTypes",{},e=>{r=e.recordUserTypes,i(),a&&a()})}),document.querySelector("#is-add-record-user-type-button").addEventListener("click",()=>{let e,s,a=!1;const c=c=>{c.preventDefault(),a||(a=!0,cityssm.postJSON(t+"/admin/doAddRecordUserType",e,e=>{e.success?(r.unshift(e.recordUserType),i(),s()):(a=!1,cityssm.alertModal("Error Adding Record User Type",cityssm.escapeHTML(e.message),"OK","danger"))}))};cityssm.openHtmlModal("recordUserType-add",{onshow:()=>{(e=document.querySelector("#form--addRecordUserType")).addEventListener("submit",c)},onshown:(e,t)=>{s=t}})})})(),Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.urlPrefix,t=t=>{const s=t.currentTarget;s.disabled=!0;const r=s.dataset.table;cityssm.confirmModal("Cleanup "+r,"Are you sure you want to permanently delete all deleted records in the "+r+" table?","Yes, Cleanup","warning",()=>{cityssm.postJSON(e+"/admin/doTableCleanup",{tableName:r},e=>{e.success?cityssm.alertModal("Table Cleaned Successfully",e.recordCount.toString()+" row"+(1===e.recordCount?"":"s")+" deleted.","OK","success"):(cityssm.alertModal("Error Cleaning Table",cityssm.escapeHTML(e.message),"OK","danger"),s.disabled=!1)})})},s=document.querySelector("#adminTabpanel--tableCleanup").querySelectorAll(".is-purge-button");for(const e of s)e.addEventListener("click",t)})();