initial: bootstrap from BukidBountyApp base
This commit is contained in:
822
resources/js/utils/libFunctions.js
Normal file
822
resources/js/utils/libFunctions.js
Normal file
@@ -0,0 +1,822 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user