var content_div_id = "content_wrapper"; var historylist = []; var targetlist = []; var fileBlobURLList = {}; if (typeof currentPage === 'undefined') { var currentPage = ''; } function InitDataPageFuncOBJ() { if (typeof LoadDataPageFunc === 'undefined') { LoadDataPageFunc = {}; logDev('Initialize LoadDataPageFunc'); } } function newPageLoadDataPageFuncOBJ() { LoadDataPageFunc = {}; LoadDataPageFunc.PageTitle = ''; LoadDataPageFunc.MainDetailsURL = ''; LoadDataPageFunc.Details = {}; LoadDataPageFunc.Settings = {}; LoadDataPageFunc.currentPage = ''; LoadDataPageFunc.Disabled = null; defaultBackOnclick = null; LoadDataPageFunc.URL = {}; LoadDataPageFunc.URL.Details = null; } /* window.addEventListener('load', function() { window.history.pushState({}, ''); window.history.pushState({}, ''); window.history.pushState({}, ''); window.history.pushState({}, ''); }); window.addEventListener('popstate', function() { window.history.pushState({}, ''); window.history.pushState({}, ''); window.history.pushState({}, ''); window.history.pushState({}, ''); window.history.pushState({}, ''); }); */ function loadandexecute(targeturl, targetid = "main-body", targethtml = '') { CurrentPageisLoading = true; // console.log('loadandexecute started'); if (!targetid) { targetid = 'main-body'; } if (targethtml) { return new Promise((resolve, reject) => { try { targethtml = base64Decode(targethtml); $("#" + targetid).html(targethtml); CurrentPageisLoading = false; return resolve('loaded'); } catch (err) { CurrentPageisLoading = false; return reject(err); } }); } else { // console.log('no target html '+targethtml); } if (reqcacheload(targeturl)) { return new Promise((resolve, reject) => { $("#" + targetid).html(reqcacheload(targeturl)); // $('#' + targetid).fadeIn(); CurrentPageisLoading = false; return resolve('loaded'); }); } CurrentPageisLoading = false; return new Promise((resolve, reject) => { Preloaders.PrecachePage(targeturl, targetid, () => { CurrentPageisLoading = false; resolve('loaded'); }); }); } DropZoneFunc = { AcceptedFilesString: { images: 'image/*', docs: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx', documents: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx' }, AddPreviouslyUploadedFiles: function (dropzoneobject, filesarray) { /* const previousFiles = [ { name: "example.jpg", size: 12345, url: "/path/to/example.jpg", thumbnail: "/path/to/thumbnail/example.jpg" }, // Add more files as needed ];*/ filesarray.forEach(file => { const mockFile = { name: file.name, size: file.size, url: file.url }; dropzoneobject.emit("addedfile", mockFile); dropzoneobject.emit("thumbnail", mockFile, file.thumbnail); dropzoneobject.emit("complete", mockFile); dropzoneobject.emit("url", mockFile, file.url, file.name); // Optionally, if you have server-side file handling, you may need to set this to true // dropzoneobject.emit("success", mockFile, file.serverResponse); }); }, ReplaceDropzoneFiles: function (dropzoneid, newFilesArray) { const dropzoneobject = window.currentDropzone[dropzoneid]; if (!dropzoneobject) { console.warn(`Dropzone '${dropzoneid}' not found.`); return; } DropZoneFunc.ClearDropzoneUpload(dropzoneid, dropzoneobject); DropZoneFunc.AddPreviouslyUploadedFiles(dropzoneobject, newFilesArray); window.Target_Uploaded_Files = newFilesArray.map(f => f.hashkey || f.name); }, ResetDropzoneUpload: function (url, obj = null, reqtype = 'POST', successfunc = false) { function ReplaceDropZoneFilesfrom(filesarray) { DropZoneFunc.ClearDropzoneUpload(); DropZoneFunc.AddPreviouslyUploadedFilesDropZone(myDropzone, filesarray); Target_Uploaded_Files = filesarray.map(file => file.hashkey); } if (!reqtype) { reqtype = 'POST'; } if (!obj) { obj = null; } let DRrequest = RequestData(false); DRrequest.url(url).data(obj).type(reqtype).fromVarCache(false).success(function (response) { ReplaceDropZoneFilesfrom(response); if (typeof successfunc === 'function') { successfunc(response); } }).go(); }, ClearDropzoneUpload: function (dropzonetargetid = '', dropzoneobject = '') { //if (myDropzone){myDropzone.removeAllFiles(true);} if (!dropzonetargetid) { $('#' + dropzonetargetid + ' .dz-preview.dz-complete').remove(); console.log('#ClearUploadButton-' + dropzonetargetid); // $('#ClearUploadButton-' + dropzonetargetid).hide(); } else { $('.dz-preview.dz-complete').remove(); } if (!dropzoneobject) { myDropzone.emit("reset") } else { dropzoneobject.emit("reset"); } //$('.dz-default.dz-message').show() Target_Uploaded_Files = []; }, hasOngoingUploads: function (dropzoneobject) { return dropzoneobject.getUploadingFiles().length > 0; }, RemoveLastUploadedDropzone: function (dropzoneobject) { const uploadedFiles = dropzoneobject.getAcceptedFiles(); if (uploadedFiles.length > 0) { const lastFile = uploadedFiles[uploadedFiles.length - 1]; dropzoneobject.removeFile(lastFile); } }, InitializeDropZone: function (url, successcallback, dropzoneid = 'myAwesomeDropZone', acceptedFiles, filename, maxfilesize = 100, updatedropzonestatusFUNC = '', errorcallback = false) { const dropzoneconfig = { paramName: filename, maxFilesize: maxfilesize, url: url, acceptedFiles: acceptedFiles || null, init: function () { const dropzoneobject = this; let ongoingUploads = 0; function updateUploadStatus() { if (typeof updatedropzonestatusFUNC === 'function') { updatedropzonestatusFUNC(); } } this.on("addedfile", function (file) { ongoingUploads++; updateUploadStatus(); }); this.on("uploadprogress", function (file, progress) { // optional }); this.on("complete", function (file) { ongoingUploads--; updateUploadStatus(); }); this.on("url", function (file, url, name) { // Make filename clickable file.previewElement.classList.add("dz-success"); file.previewElement.querySelector("[data-dz-name]").innerHTML = `${name}`; // Use the real image as thumbnail if it’s an image // if (file.type.startsWith("image/")) { // file.previewElement.querySelector("img").src = response.url; // } // Preserve your existing success callback }); this.on("success", function (file, response) { if (response && response.url) { // Make filename clickable file.previewElement.classList.add("dz-success"); file.previewElement.querySelector("[data-dz-name]").innerHTML = `${response.name}`; // Use the real image as thumbnail if it’s an image // if (file.type.startsWith("image/")) { // file.previewElement.querySelector("img").src = response.url; // } } // Preserve your existing success callback if (typeof successcallback === 'function') { successcallback(response, file); } }); // 🔴 catch network/server errors (like HTTP 500) this.on("error", function (file, errorMessage, xhr) { ongoingUploads--; updateUploadStatus(); console.warn("Dropzone upload error:", errorMessage); // Make sure it visually shows as failed file.previewElement?.classList.add("dz-error"); const errorNode = file.previewElement?.querySelector("[data-dz-errormessage]"); if (errorNode) { const msg = (xhr && xhr.responseText) || errorMessage || "Upload failed"; errorNode.textContent = msg; } // Optionally auto-remove failed files setTimeout(() => { if (file && this.files.includes(file)) this.removeFile(file); }, 2000); // Run custom error callback if provided if (typeof errorcallback === "function") { errorcallback(file, errorMessage, xhr); } }); }, success: function (file, response) { if (response && response.success) { if (typeof successcallback === "function") successcallback(response, file); } else { // Even if backend returned 200, force an error state const msg = response?.error || "Upload failed"; file.previewElement?.classList.add("dz-error"); const errorNode = file.previewElement?.querySelector("[data-dz-errormessage]"); if (errorNode) errorNode.textContent = msg; this.emit("error", file, msg); } }, }; const myDropzone = new Dropzone(`#${dropzoneid}`, dropzoneconfig); return myDropzone; }, AddFiles: function (url = '/File/Upload', errorcallback = '', filename = 'file', maxfilesize = 100, acceptedFiles = 'image/*,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx', dropzoneid = 'my-awesome-dropzone', dropzonemodal = 'Dropzone-Modal') { function successcallback(response, file) { // if (!response || isNumeric(response)) { // RemoveLastUploadedDropzone(); // return false; // } else { // Target_Uploaded_Files.push(response); // } if (response.success && response.hashkey) { Target_Uploaded_Files.push(response.hashkey); } else { RemoveLastUploadedDropzone(); return false; } } if (!myDropzone) { DropZoneFunc.InitializeDropZone(url, successcallback, dropzoneid = 'myAwesomeDropZone', acceptedFiles, filename, maxfilesize = 100); } if (view_transaction_reset_once) { DropZoneFunc.ResetDropzoneUpload(); view_transaction_reset_once = 0 } if (!filename) { filename = 'file'; } if (!dropzonemodal) { dropzonemodal = 'Dropzone-Modal'; } if (ElementExists(dropzonemodal)) { showmodal(dropzonemodal); } } }; function button(content, value = '', onclick = '', idtext = '', setclass = '', addtionaldata = '', img = '') { if (img) { img = imgiconuserdefault(img); } else { img = ''; } return ''; } function buttonGOTOPage(text, targetpage, targetdata = 0, idtext = '', addonclick = '', setclass = '', addtionaldata = '', img = '') { if (!text || !targetpage) { return false; } const onclick = `gotoPage('${targetpage}','${targetdata}'); ` + addonclick; return button(text, text, onclick, idtext, setclass + ' btn btn-default', addtionaldata, img); } function buttonwarning(content, value = '', onclick = '', block = '', idtext = '', addclass = '', addtionaldata = '', img = '') { if (block) { block = 'btn-block'; } else { block = ''; } return button(content, value, onclick, idtext, 'btn btn-warning ' + block + ' ' + addclass, addtionaldata, img); } function buttondanger(content, value = '', onclick = '', block = '', idtext = '', addclass = '', addtionaldata = '', img = '') { if (block) { block = 'btn-block'; } else { block = ''; } return button(content, value, onclick, idtext, 'btn btn-danger ' + block + ' ' + addclass, addtionaldata, img); } function buttonprimary(content, value = '', onclick = '', block = '', idtext = '', addclass = '', addtionaldata = '', img = '') { if (block) { block = 'btn-block'; } else { block = ''; } return button(content, value, onclick, idtext, 'btn btn-primary ' + block + ' ' + addclass, addtionaldata, img); } function textinput(idtext = '', setclass = '', required = '', placeholder = '', value = '') { if (required) { required = 'required'; } else { required = ''; } return ''; } function textformcontrol(idtext = '', addclass = '', required = '', placeholder = '', value = '') { return textinput(idtext, 'form-control ' + addclass, required, placeholder, value); } function HomeMenuButtons(buttonicon, buttonText, buttonGo, buttonVariabletoPass = '', iconwidth = '', iconheight = '', buttonstyle = '', buttononclick = '', divclass = '', divid = '', buttonid = '', textclass = '') { // buttonvariabletopass is just currenttarget if (!buttonstyle) { buttonstyle = 'bg-transparent border-0 btn-block' } if (!divclass) { divclass = 'col-6'; } if (!buttonVariabletoPass) { buttonVariabletoPass = 0; } if (!buttonGo && buttononclick) { buttontoclick = buttononclick; } else if (buttonGo) { buttontoclick = `ButtonGo('` + buttonGo + `', '` + buttonVariabletoPass + `')`; } else { buttontoclick = ''; } if (!iconwidth) { iconwidth = '20%'; } if (!iconheight) { iconheight = '40%'; } if (!textclass) { textclass = 'profile-username text-center'; } return `
`; } function createCard(cardtitle = '', cardid = '', cardtools = '', cardbodyid = '', cardbodytext = '', cardbodyclassadd = '', maincardstyle = '', titlecardhide = false, maincardaddclass = '') { if (titlecardhide) { titlecardhide = 'display:none;'; } else { titlecardhide = ';' } if (!cardbodyid && cardid) { cardbodyid = 'card-body-' + cardid; } return `

` + cardtitle + `

`+ cardtools + `
`+ cardbodytext + `
`; } function CreateCardSimple(title = '', text = '', id = '', style = '') { let titlehidden = false; if (!title) { titlehidden = true; } return createCard(title, id, '', '', text, '', style, titlehidden); } function CreateBalanceCard(titletext = '', maincardid = 'main-card-body', firstrowtext = 'Total Balance', firstrowvalueid = 'total-balance', firstrowvaluetext = '...', secondrowtext = '', secondrowvalueid = '', secodrowvaluetext = '', secondrowvisible = false, footerrowid = '', footerrowtext = '', thirdrowtext = '', thirdrowvalueid = '', thirdrowvaluetext = '', thirdrowvisible = false) { if (titletext === false || titletext === null) { titletext = 'Welcome!'; } if (!secondrowvisible) { secondrowvisible = 'display:none;'; } else { secondrowvisible = ''; } let thirdrowhtml = ''; if (thirdrowtext || thirdrowvalueid || thirdrowvaluetext || thirdrowvisible) { if (thirdrowvisible) { thirdrowvisible = ''; } else { thirdrowvisible = 'display:none;'; } thirdrowhtml = `
`+ thirdrowtext + `
`+ thirdrowvaluetext + `
`; } return `
`+ titletext + `

`+ firstrowtext + `
`+ firstrowvaluetext + `
`+ secondrowtext + `
`+ secodrowvaluetext + `
` + thirdrowhtml + `

`+ footerrowtext + `
`; } function clearCacheAndReload(redirectTo = '/') { localStorage.clear(); sessionStorage.clear(); if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistrations().then(registrations => { for (let registration of registrations) { logDev('Unregistering Old Service Worker'); registration.unregister(); } caches.keys().then(cacheNames => { return Promise.all( cacheNames.map(cacheName => { logDev('Deleting Old Cache'); return caches.delete(cacheName); }) ); }).then(() => { caches.keys().then(function (names) { for (let name of names) { caches.delete(name); } }); if (redirectTo !== null && redirectTo !== false) { window.location.href = redirectTo; } }); }); } else { caches.keys().then(function (names) { for (let name of names) { caches.delete(name); } }); if (redirectTo !== null && redirectTo !== false) { window.location.href = redirectTo; } } } function logoutnow() { window.location.href = '/go/logoutnow'; } function clearCacheAndLogout() { clearCacheAndReload('/go/logoutnow'); } function ResetBrowserAndCache() { logDev('Resetting Browser Cache'); if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistrations().then(registrations => { for (let registration of registrations) { registration.unregister(); } window.location.reload(true); }); } else { console.warn('Service workers are not supported in this browser.'); }; } function GenerateTheadFromArraySimple(array) { html = ``; if (Array.isArray(array)) { array.forEach((item, index) => { html += `` + item + ``; }); } else if (array !== null && typeof array === 'object') { Object.entries(array).forEach(([key, value]) => { html += `` + value + ``; }); } else { return; } html += ``; return html; } function GenerateTableRowFromArraySimple(array) { html = ``; if (Array.isArray(array)) { array.forEach((item, index) => { html += `` + item + ``; }); } else if (array !== null && typeof array === 'object') { Object.entries(array).forEach(([key, value]) => { html += `` + value + ``; }); } else { return; } html += ``; return html; } function ArraytoDatalist(id, array, replace = true) { if (!id || !array) { return false; } if (replace) { const datalist = document.getElementById(id); if (!datalist) { return false; } datalist.innerHTML = ""; array.forEach(item => { const option = document.createElement('option'); option.value = item; datalist.appendChild(option); }); return datalist; } if (!replace) { let htmlstring = ''; array.forEach(item => { htmlstring += ''; return htmlstring; } } function QueryandReplaceDatalist(datalistid, url, method = 'POST', datatosend = null, fromvarcache = false, successfunc = false, errorfunc = false) { if (!document.getElementById(datalistid) || !url) { return false; } let RequestDataDatalist = new RequestData(false); RequestDataDatalist.url(url).type(method).fromVarCache(fromvarcache).data(datatosend) .success((response) => { if (typeof successfunc === 'function') { successfunc(response); } ArraytoDatalist(datalistid, response, replace = true); }).error((response) => { if (errorfunc && typeof errorfunc === 'function') { errorfunc(response); } }).go();; } function ReqCachetoDatalist(url, id, replace = true) { const data = reqcacheload(url, datavalue = '', object = ''); if (!data) { return false; } return ArraytoDatalist(id, data, replace); } function CreateTable(id, theadinnerhtml, bodyinnerhtml) { return ` `+ theadinnerhtml + ` `+ bodyinnerhtml + `
`; } function LoadPhotosCard(photosdivid, onclick = '', photosarray = '', photoscardid = 'PhotosCard', maxwidth = '300px', maxheight = '300px', preloadFileBlobURL = false) { // onclick sample ButtonGo('ViewAllPhotos','${currenttarget}'); if (!maxwidth && !maxheight) { maxwidth = '300px'; maxheight = '300px'; } let photosdiv = $('#' + photosdivid); if (photosdiv.length === 0) { return false; } if (!photosarray) { photosdiv.html('No Photos.
'); return false; } if (photosarray && typeof photosarray === 'string') { try { photolist = JSON.parse(photosarray); } catch (error) { photolist = [photosarray]; } } else { photolist = photosarray; } if (preloadFileBlobURL) { photolist.forEach(function (photo) { Preloaders.getfileBlobURL(photo); }); } if (!photolist || photolist.length === 0) { photosdiv.html('No Photo.
'); return false; } let htmlbody = $(`
`); const NewSplideLIImage = function (imgsrc) { return `
  • `; }; let splidebody = htmlbody.find('ul'); LoadDataPageFunc.PhotoBlobs = []; photolist.forEach(function (photo) { LoadAndCreateURLfromFileHash(photo).then(bloburl => { splidebody.append(NewSplideLIImage(bloburl)); if (typeof LoadDataPageFunc.PhotoBlobs === 'undefined') { LoadDataPageFunc.PhotoBlobs = []; } LoadDataPageFunc.PhotoBlobs.push(bloburl); }); }); photosdiv.html(htmlbody); new Splide('.splide').mount(); }; function LoadPhototoIMG(photimgid, photohash, onclick = '', maxwidth = '300px', maxheight = '300px') { if (typeof photohash === 'array') { photohash = photohash[0]; } LoadAndCreateURLfromFileHash(photohash).then(bloburl => { $('#' + photimgid).attr('src', bloburl); }); } function LoadPhotoIMGTargetClass(imgclassname, settodisplaylater = true) { if (!imgclassname) { return false; } const images = document.querySelectorAll(`img.${imgclassname}`); images.forEach((img) => { const photohash = img.getAttribute('src'); LoadAndCreateURLfromFileHash(photohash).then(bloburl => { img.setAttribute('src', bloburl); if (settodisplaylater) { img.style.display = 'block'; } }).catch(error => { }); }); } function HideBrokenPhotowithClass(imgclassname) { if (!imgclassname) { return false; } const images = document.querySelectorAll(`img.${imgclassname}`); images.forEach((img) => { img.addEventListener('error', () => { img.style.display = 'none'; }); }); } /** * Validates Input Form * @param {Array} ArrayOfRequiredInput - Array of required input field IDs * @returns {boolean|Array} - Returns an array of values if all required fields are filled, false otherwise */ function validateInputForm(ArrayOfRequiredInput) { const inputsArray = getInputElementsValuesObjectbyCSSClassname(LoadDataPageFunc.formclass); if (isObjectEmpty(inputsArray)) { return false; } let values = []; for (let id of ArrayOfRequiredInput) { const value = inputsArray[id]; if (value === undefined || value === null || String(value).trim() === "") { return false; } values.push(value); } return values; }