822 lines
24 KiB
JavaScript
822 lines
24 KiB
JavaScript
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 =
|
||
`<a href="${url}" target="_blank">${name}</a>`;
|
||
|
||
// 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 =
|
||
`<a href="${response.url}" target="_blank">${response.name}</a>`;
|
||
|
||
// 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 '<button value="' + value + '" ' + addtionaldata + ' ' + img + ' id="' + idtext + '" class="' + setclass + '" onclick="' + onclick + '">' + content + '</button>';
|
||
}
|
||
|
||
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 '<input type="text" class="' + setclass + '" id="' + idtext + '" placeholder="' + placeholder + '" ' + required + ' value="' + value + '">';
|
||
}
|
||
|
||
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 `<div class="` + divclass + `" id="` + divid + `"><button id="` + buttonid + `" onclick="` + buttontoclick + `" class="bg-transparent border-0 btn-block" style="">
|
||
<div class="card-body box-profile">
|
||
<div class="text-center">
|
||
<img class=" img-circle rounded mx-auto d-block" src="`+ buttonicon + `" width="` + iconwidth + `" height="` + iconheight + `" style="overflow:hidden;"></div>
|
||
<h3 class="profile-username text-center">`+ buttonText + `</h3>
|
||
<p class="text-muted text-center"></p>
|
||
</div>
|
||
</button></div>`;
|
||
}
|
||
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 `<div class="card ${maincardaddclass}" id="` + cardid + `" style="` + maincardstyle + `">
|
||
<div id="cardheader-${cardid}" class="card-header ui-sortable-handle" style="cursor: move;` + titlecardhide + `">
|
||
<h3 class="card-title" style="" id="card-title-${cardid}">` + cardtitle + `</h3>
|
||
<div class="card-tools" id="card-tools-${cardid}">
|
||
`+ cardtools + `
|
||
</div>
|
||
</div>
|
||
<div class="card-body `+ cardbodyclassadd + `" id='` + cardbodyid + `'>
|
||
`+ cardbodytext + `
|
||
</div>
|
||
</div>`;
|
||
}
|
||
|
||
|
||
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 = `
|
||
<div class="row">
|
||
<div class="col">
|
||
`+ thirdrowtext + `
|
||
</div>
|
||
<div class="col text-right" id="`+ thirdrowvalueid + `">
|
||
`+ thirdrowvaluetext + `
|
||
</div>
|
||
</div>
|
||
`;
|
||
}
|
||
|
||
|
||
return `<div class="card-body card-info" id="` + maincardid + `" style="">
|
||
<div class="row">
|
||
<div class="col-md-18">
|
||
`+ titletext + `
|
||
</div>
|
||
</div>
|
||
|
||
<br>
|
||
<div class="row card-info">
|
||
<div class="col-md-18 card text-xl border-rounded balancecard" style="width:100%;height:30%;">
|
||
<div class="row">
|
||
<div class="col">
|
||
`+ firstrowtext + `
|
||
</div>
|
||
<div class="col text-right" id="`+ firstrowvalueid + `">
|
||
`+ firstrowvaluetext + `
|
||
</div>
|
||
</div>
|
||
<div class="row" style="`+ secondrowvisible + `">
|
||
<div class="col">
|
||
`+ secondrowtext + `
|
||
</div>
|
||
<div class="col text-right" id="`+ secondrowvalueid + `">
|
||
`+ secodrowvaluetext + `
|
||
</div>
|
||
</div>`
|
||
+ thirdrowhtml +
|
||
`<br><br>
|
||
<div class="row ">
|
||
<div class="col text-sm" id="`+ footerrowid + `">
|
||
`+ footerrowtext + `
|
||
</div>
|
||
<div class="col">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>`;
|
||
|
||
}
|
||
|
||
|
||
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 = `<tr>`;
|
||
if (Array.isArray(array)) {
|
||
array.forEach((item, index) => {
|
||
html += `<th>` + item + `</th>`;
|
||
});
|
||
} else if (array !== null && typeof array === 'object') {
|
||
Object.entries(array).forEach(([key, value]) => {
|
||
html += `<th>` + value + `</th>`;
|
||
});
|
||
} else {
|
||
return;
|
||
}
|
||
html += `</tr>`;
|
||
return html;
|
||
}
|
||
|
||
function GenerateTableRowFromArraySimple(array) {
|
||
html = `<tr>`;
|
||
if (Array.isArray(array)) {
|
||
array.forEach((item, index) => {
|
||
html += `<td>` + item + `</td>`;
|
||
});
|
||
} else if (array !== null && typeof array === 'object') {
|
||
Object.entries(array).forEach(([key, value]) => {
|
||
html += `<td>` + value + `</td>`;
|
||
});
|
||
} else {
|
||
return;
|
||
}
|
||
html += `</tr>`;
|
||
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 = '<datalist id="' + id + '">';
|
||
array.forEach(item => {
|
||
htmlstring += '<option value="' + item + '">';
|
||
});
|
||
htmlstring += '</datalist>';
|
||
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 `<table id="` + id + `">
|
||
<thead>
|
||
`+ theadinnerhtml + `
|
||
</thead>
|
||
<tbody>
|
||
`+ bodyinnerhtml + `
|
||
</tbody>
|
||
</table>`;
|
||
}
|
||
|
||
|
||
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.<br>'); 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.<br>'); return false; }
|
||
let htmlbody = $(`<div class="splide" role="group" aria-label="photosSplide">
|
||
<div class="splide__track">
|
||
<ul class="splide__list">
|
||
</ul> </div></div>`);
|
||
const NewSplideLIImage = function (imgsrc) {
|
||
return `<li class="splide__slide" onclick="${onclick}"><img src="${imgsrc}" style="max-width: ${maxwidth};
|
||
max-height: ${maxheight};
|
||
width: auto;
|
||
height: auto;"></li>`;
|
||
};
|
||
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;
|
||
} |