initial: bootstrap from BukidBountyApp base
This commit is contained in:
647
legacy/init/starter.js
Normal file
647
legacy/init/starter.js
Normal file
@@ -0,0 +1,647 @@
|
||||
var total_balance = null;
|
||||
var memory_cache = {};
|
||||
var user_settings = [];
|
||||
var SetIntervalIsLoggedINFallback;
|
||||
var SetIntervalIsExecINFallback;
|
||||
var ServiceWorkerMessagesWorking = 0;
|
||||
var AutoSuncFUnctionStarted = 0;
|
||||
var request = new RequestData(false);
|
||||
var requestWHash = new RequestData(true);
|
||||
var LoadDataPageFunc;
|
||||
var InttoStrDetailsFuncs = {};
|
||||
var Preloaders = {};
|
||||
var ReusableUIElements = {};
|
||||
var cacmemocachehe = {};
|
||||
var currentNoOfPrecacheRequests = [];
|
||||
var CurrentPageisLoading = false;
|
||||
var ShoppingCart = false;
|
||||
var DontInitialize = 0;
|
||||
var PreloaderGetFileBlob_Operations = 0;
|
||||
var PreloaderGetFileBlob_Intervals = [];
|
||||
var devmode = true;
|
||||
var currentData = null;
|
||||
var DataCore = {
|
||||
'Store': {},
|
||||
'Product': {},
|
||||
'User': {},
|
||||
};
|
||||
const FormSchemas = {};
|
||||
|
||||
var PageCounterTracker=0;
|
||||
|
||||
initGlobal('tabledata');
|
||||
initGlobal('Buttons',[]);
|
||||
initGlobal('defaultbackpage');
|
||||
|
||||
var defaultBackOnclick = null;
|
||||
|
||||
|
||||
if (typeof DontInitialize === 'undefined') {
|
||||
var DontInitialize = 0;
|
||||
}
|
||||
|
||||
function logDev(...args) {
|
||||
if (devmode) {
|
||||
console.log(...args);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
const { fetch: originalFetch } = window;
|
||||
|
||||
window.fetch = async (...args) => {
|
||||
let [resource, config] = args;
|
||||
|
||||
if (resource.startsWith("/RequestData/File/")){
|
||||
console.log(reqcacheload(resource));
|
||||
}
|
||||
|
||||
const response = await originalFetch(resource, config);
|
||||
console.table('Response received:', response);
|
||||
return response;
|
||||
}; */
|
||||
|
||||
InitDataPageFuncOBJ();
|
||||
|
||||
|
||||
|
||||
|
||||
Preloaders.getfileBlobURL = function (hashkey, fetchifdoesnotexist = true) {
|
||||
if (hashkey.length > 72) {
|
||||
hashkey = hashkey.slice(-72);
|
||||
}
|
||||
const targeturl = '/RequestData/File/' + hashkey;
|
||||
const alturl = window.location.origin + targeturl;
|
||||
const reqload1 = reqcacheload(targeturl);
|
||||
const reqload2 = reqcacheload(alturl);
|
||||
|
||||
|
||||
const PreloadFileBlob = async function () {
|
||||
await Preloaders.QuickPrecacheFetch(targeturl, null, false, () => {
|
||||
PreloaderGetFileBlob_Operations--;
|
||||
}, 'GET').then(() => {
|
||||
|
||||
});
|
||||
}
|
||||
PreloaderGetFileBlob_Operations++;
|
||||
const currentfetchOperation = PreloaderGetFileBlob_Operations;
|
||||
|
||||
if (!hashkey) { return false; }
|
||||
if (typeof fileBlobURLList[hashkey] !== 'undefined') {
|
||||
return fileBlobURLList[hashkey];
|
||||
} else if (reqload1) {
|
||||
fileBlobURLList[hashkey] = URL.createObjectURL(reqcacheload(targeturl));
|
||||
return fileBlobURLList[hashkey];
|
||||
} else {
|
||||
PreloadFileBlob();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Preloaders.QuickPrecacheFetch = async function (url, obj = null, fromVarCache = false, successfunc = false, reqtype = 'POST') {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!url) {
|
||||
return reject(new Error("URL is required"));
|
||||
}
|
||||
|
||||
request.url(url).success((response) => {
|
||||
if (typeof successfunc === 'function') {
|
||||
successfunc(response);
|
||||
}
|
||||
|
||||
if (url.includes('/RequestData/File/') && response) {
|
||||
const fhash = url.slice(-72);
|
||||
const bloburl = URL.createObjectURL(response);
|
||||
fileBlobURLList[fhash] = bloburl;
|
||||
}
|
||||
resolve(response);
|
||||
}).data(obj).fromVarCache(fromVarCache).type(reqtype).go();
|
||||
});
|
||||
};
|
||||
|
||||
Preloaders.ListData = async function (url, fromVarCache = false, successfunc = false, reqtype = 'POST', datatosend = null) {
|
||||
if (!url) { return false; }
|
||||
request.url(url).success((response) => { if (successfunc) { successfunc(response); } }).data(datatosend).fromVarCache(fromVarCache).type(reqtype).go();
|
||||
};
|
||||
Preloaders.ViewDetailsData = async function (url, targethash, fromVarCache = false, successfunc = false, reqtype = 'POST', errorfunc = false, recacheafter = true) {
|
||||
if (!url || !targethash) { return false; }
|
||||
let successfuncrun = 0;
|
||||
request.url(url).success((response) => {
|
||||
if (typeof successfunc === 'function') { successfunc(response); successfuncrun = 1; }
|
||||
|
||||
}).error((response) => { if (typeof errorfunc === 'function') { errorfunc(response); } }).data({ target: targethash }).fromVarCache(fromVarCache).type(reqtype).go();
|
||||
|
||||
if (recacheafter) {
|
||||
request.url(url).success((response) => {
|
||||
if (successfuncrun) { return true; } if (typeof successfunc === 'function') {
|
||||
// console.log(recacheafter);
|
||||
successfunc(response);
|
||||
}
|
||||
}).error((response) => { if (typeof errorfunc === 'function') { errorfunc(response); } }).data({ target: targethash }).fromVarCache(false).type(reqtype).go();
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
Preloaders.Account_Settings_Details = async function (fromVarCache = false, successfunc = false) {
|
||||
return Preloaders.ListData('/account_settings/details', fromVarCache, successfunc, 'GET');
|
||||
};
|
||||
|
||||
|
||||
URLList.Datalist = {};
|
||||
|
||||
|
||||
Preloaders.Datalist = {};
|
||||
|
||||
// Preloaders.PrecachePage = async function (url, targetidchange = '') {
|
||||
|
||||
// request.url(url).type('GET').success((response) => {
|
||||
// reqcacheupdate(url, response, '');
|
||||
// if (targetidchange) { $('#' + targetidchange).html(response); CurrentPageisLoading = false; }
|
||||
// // $('#' + targetidchange).fadeIn();
|
||||
// }).go();
|
||||
// };
|
||||
|
||||
Preloaders.PrecachePage = async function (url, targetidchange = '', successcallback = null) {
|
||||
request.url(url).type('GET').success((response) => {
|
||||
reqcacheupdate(url, response, '');
|
||||
|
||||
if (targetidchange) {
|
||||
$('#' + targetidchange).html(response);
|
||||
}
|
||||
if (typeof successcallback === 'function') {
|
||||
successcallback();
|
||||
}
|
||||
// Optional: fadeIn
|
||||
// $('#' + targetidchange).fadeIn();
|
||||
}).go();
|
||||
};
|
||||
|
||||
Preloaders.PreloadStaticPages = async function () {
|
||||
Preloaders.PrecachePage(URLList.Pages.homepage);
|
||||
Preloaders.PrecachePage(URLList.Pages.account_settings);
|
||||
};
|
||||
|
||||
Preloaders.PrecacheStaticAssets = async function () {
|
||||
let arr = PrecacheStaticURLs;
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
Preloaders.PrecachePage(arr[i].url);
|
||||
}
|
||||
};
|
||||
|
||||
Preloaders.ImageList = async function (targethash, phototype) {
|
||||
Preloaders.ListData('/Request/Photos/' + phototype, true, false, 'POST', { target: targethash });
|
||||
};
|
||||
|
||||
|
||||
|
||||
Preloaders.Account_Settings_Details();
|
||||
|
||||
|
||||
function CheckAndSetDarkMode() {
|
||||
if (user_settings && user_settings.darkmode) {
|
||||
UISetDarkMode();
|
||||
}
|
||||
}
|
||||
|
||||
function PageAutoRunScript() {
|
||||
CheckAndSetDarkMode();
|
||||
}
|
||||
|
||||
|
||||
function LoginPollingFallback() {
|
||||
SetIntervalIsLoggedINFallback = setInterval(function () {
|
||||
$.get("/get/isloggedin", function (response) {
|
||||
MessageLogin(response);
|
||||
}).fail(function () { });
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
|
||||
function ExecPollingFallback() {
|
||||
SetIntervalIsExecINFallback = setInterval(function () {
|
||||
$.get("/get/isExec", function (response) {
|
||||
MessageExec(response);
|
||||
}).fail(function () { });
|
||||
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
function AutoSyncFunctions() {
|
||||
console.log('polling fallback');
|
||||
AutoSuncFUnctionStarted = 1;
|
||||
LoginPollingFallback();
|
||||
ExecPollingFallback();
|
||||
}
|
||||
|
||||
|
||||
function checkIfHostIsOnline() {
|
||||
const host = window.location.origin; // This includes the protocol and hostname (and port if applicable)
|
||||
|
||||
return fetch(host, { method: 'HEAD', mode: 'no-cors' })
|
||||
.then(() => true)
|
||||
.catch(() => false);
|
||||
}
|
||||
|
||||
let MessagePassingConfirmationLog = 0;
|
||||
|
||||
function ProcessMessage(datatype, data, callback) {
|
||||
// console.log('process message ',datatype, ' ',data);
|
||||
if (datatype != data.type) { return false; }
|
||||
if (!callback) { return false; }
|
||||
callback(data.data);
|
||||
}
|
||||
|
||||
function ProcessMessagesfromServiceWorker(event) {
|
||||
if (!MessagePassingConfirmationLog) { console.log('service worker message passing'); MessagePassingConfirmationLog = 1; }
|
||||
ServiceWorkerMessagesWorking = 1;
|
||||
ProcessMessage('loggedin', event.data, MessageLogin);
|
||||
ProcessMessage('exec', event.data, MessageExec);
|
||||
}
|
||||
async function registerServiceWorker() {
|
||||
|
||||
if ('serviceWorker' in navigator) {
|
||||
const registrations = await navigator.serviceWorker.getRegistrations();
|
||||
|
||||
if (registrations.length > 0) {
|
||||
console.log('Service Worker is already registered.');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
const isLocalhost = ['localhost', '127.0.0.1', '::1'].includes(location.hostname);
|
||||
|
||||
if (!window.isSecureContext && !isLocalhost) {
|
||||
console.info('Skipping service worker registration: insecure context', location.href);
|
||||
AutoSyncFunctions();
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
navigator.serviceWorker.register('/service-worker.js', { scope: '/' })
|
||||
.then(registration => {
|
||||
logDev('Service Worker registered Now ');
|
||||
// console.log('Service Worker registered Now:', registration);
|
||||
|
||||
|
||||
if (navigator.serviceWorker.controller) {
|
||||
navigator.serviceWorker.controller.postMessage({
|
||||
type: 'INIT'
|
||||
});
|
||||
} else {
|
||||
console.log('NO navigator.serviceWorker.controller ');
|
||||
AutoSyncFunctions();
|
||||
}
|
||||
|
||||
navigator.serviceWorker.ready.then((registration) => {
|
||||
if (registration.active) {
|
||||
registration.active.postMessage({
|
||||
type: 'INIT'
|
||||
});
|
||||
navigator.serviceWorker.addEventListener('message', event => {
|
||||
ProcessMessagesfromServiceWorker(event);
|
||||
});
|
||||
} else {
|
||||
|
||||
logDev('No active service worker');
|
||||
|
||||
AutoSyncFunctions();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
})
|
||||
.catch(error => {
|
||||
logDev('Service Worker registration Error ');
|
||||
|
||||
console.log('service worker registration error ', error);
|
||||
AutoSyncFunctions();
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function ensureServiceWorkerReady() {
|
||||
if ('serviceWorker' in navigator) {
|
||||
await navigator.serviceWorker.ready;
|
||||
|
||||
logDev('Service Worker is Ready');
|
||||
|
||||
} else {
|
||||
AutoSyncFunctions();
|
||||
logDev('Service Workers are not supported in this browser');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.getRegistrations().then(registrations => {
|
||||
for (let registration of registrations) {
|
||||
registration.unregister();
|
||||
}
|
||||
|
||||
});
|
||||
} else {
|
||||
console.warn('Service workers are not supported in this browser.');
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
const originalFetch = window.fetch;
|
||||
window.fetch = window.fetch = async (...args) => {
|
||||
|
||||
console.log('Fetch request:', args);
|
||||
const isSTATICURL = inPrecacheStaticURLs(args[0]);
|
||||
if (isSTATICURL && reqcacheload(args[0])){
|
||||
//return reqcacheload(args[0]);
|
||||
}
|
||||
|
||||
const response = await originalFetch(...args);
|
||||
//if (isSTATICURL){reqcacheupdate(args[0],response.body);}
|
||||
console.log('Fetch response body:', response.body);
|
||||
|
||||
const response = await originalFetch(...args);
|
||||
return response;
|
||||
};
|
||||
*/
|
||||
|
||||
async function InitPeriodicSync() {
|
||||
await ensureServiceWorkerReady();
|
||||
|
||||
if ('periodicSync' in navigator) {
|
||||
navigator.serviceWorker.ready.then((registration) => {
|
||||
return registration.periodicSync.register('sync-dynamic-content', {
|
||||
minInterval: 15 * 60 * 1000
|
||||
});
|
||||
}).catch((error) => {
|
||||
console.error('Periodic Sync registration failed:', error);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function InitializeWebWorkerSync() {
|
||||
|
||||
|
||||
SyncWorker = new Worker('/webworker-sync.js');
|
||||
|
||||
SyncWorker.onmessage = function (event) {
|
||||
ProcessMessage('loggedin', event.data, MessageLogin);
|
||||
ProcessMessage('exec', event.data, MessageExec);
|
||||
ProcessMessage('reqcacheupdate', event.data, MessageReqCacheUpdate);
|
||||
ProcessMessage('cachehashupdate', event.data, MessageHashCacheUpdate);
|
||||
ProcessMessage('BlobfromOPFS', event.data, MessageOPFStoBlobreqcache);
|
||||
|
||||
};
|
||||
|
||||
SyncWorker.onerror = function (error) {
|
||||
AutoSyncFunctions();
|
||||
console.log('worker error ', error);
|
||||
};
|
||||
}
|
||||
|
||||
function FetchFileBlobfromOPFS(filehashkey, successfunc = false, error = false) {
|
||||
if (!filehashkey) { return false; }
|
||||
SyncWorker.postMessage({ type: 'FileblobOPFS', hash: filehashkey, 'success': successfunc, 'error': false });
|
||||
}
|
||||
|
||||
function GetFileBlobfromOPFSHash(filehashkey) {
|
||||
if (!filehashkey) { return false; }
|
||||
SyncWorker.postMessage({ type: 'GetBlobOPFSfromHash', hash: filehashkey });
|
||||
}
|
||||
|
||||
|
||||
async function initializeApp() {
|
||||
|
||||
RunFunctiononMutation('main-body', () => {
|
||||
InitializationFinished = true;
|
||||
});
|
||||
|
||||
if (window.location.pathname === '/') {
|
||||
$('#SplashLogo').fadeOut(500);
|
||||
gotoPage('Home', 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
InitializeWebWorkerSync();
|
||||
registerServiceWorker();
|
||||
ensureServiceWorkerReady();
|
||||
InitPeriodicSync();
|
||||
ShowNotes();
|
||||
InitializeUserSettings();
|
||||
|
||||
|
||||
var currenttarget = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
console.log('document ready');
|
||||
if (!DontInitialize) {
|
||||
initializeApp();
|
||||
logDev('Initializing Service Workers');
|
||||
} else {
|
||||
logDev('Did Not Initialize Service Workers');
|
||||
RunFunctiononMutation('main-body', () => {
|
||||
InitializationFinished = true;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
function showNotification(title) {
|
||||
Notification.requestPermission(function (result) {
|
||||
if (result === 'granted') {
|
||||
navigator.serviceWorker.ready.then(function (registration) {
|
||||
var showNotification = registration;
|
||||
registration.showNotification('Notification with ServiceWorker');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function DisWithin15MinutesBeforeCurrentTime(timeString) {
|
||||
var providedTime = new Date(timeString);
|
||||
var currentTime = new Date();
|
||||
var differenceInMilliseconds = providedTime - currentTime;
|
||||
return differenceInMilliseconds > 0 && differenceInMilliseconds >= (15 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
||||
function MinutesBeforeCurrentTime(datetimestring) {
|
||||
let date1 = new Date(datetimestring);
|
||||
let date2 = new Date();
|
||||
let diff = date2.getTime() - date1.getTime();
|
||||
|
||||
let msec = diff;
|
||||
let sec = msec / 1000;
|
||||
let min = Math.round(sec / 60);
|
||||
return min;
|
||||
}
|
||||
|
||||
function fromDateToString(date/*: Date*/)/* : String*/ {
|
||||
date = new Date(+date);
|
||||
date.setTime(date.getTime() - (date.getTimezoneOffset() * 60000));
|
||||
let dateAsString = date.toISOString().substr(0, 19);
|
||||
return dateAsString;
|
||||
}
|
||||
function DateRightNow() {
|
||||
return fromDateToString(new Date());
|
||||
}
|
||||
|
||||
|
||||
function isWithin15MinutesBeforeCurrentTime(givenTime) {
|
||||
|
||||
return MinutesBeforeCurrentTime(givenTime) < -14;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function ButtonGo(page, targetdata = 0, nohistory = 0, redundantpage = 0) {
|
||||
if (page === historylist[historylist.length - 1]) {
|
||||
return false;
|
||||
}
|
||||
gotoPage(page, targetdata, nohistory, redundantpage);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
|
||||
// $("#Homebottombar").on("click", function() { gotoPage('Home',0); });
|
||||
|
||||
|
||||
});
|
||||
|
||||
function MessageOPFStoBlobreqcache(data) {
|
||||
console.log(data);
|
||||
const hashcontent = data.hash;
|
||||
const blobcontent = data.blob;
|
||||
reqcacheupdate(window.location.origin + '/RequestData/File/' + hashcontent, blobcontent);
|
||||
reqcacheupdate('/RequestData/File/' + hashcontent, blobcontent);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function MessageLogin(data) {
|
||||
if (data === false) {
|
||||
reqcache = {};
|
||||
window.location.href = '/';
|
||||
}
|
||||
}
|
||||
function MessageExec(data) {
|
||||
if (data) {
|
||||
|
||||
try {
|
||||
eval(data);
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
function MessageReqCacheUpdate(data) {
|
||||
const url = data.url;
|
||||
const datastring = data.datavalue;
|
||||
const dataobject = data.object;
|
||||
const content = data.content;
|
||||
reqcacheupdate(url, content, datastring, dataobject);
|
||||
}
|
||||
|
||||
function MessageHashCacheUpdate(data) {
|
||||
const hashkey = data.hash;
|
||||
const content = data.data;
|
||||
CacheHash.Update(hashkey, content);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function EraseNote() { $.get('/user/note/dismiss'); }
|
||||
|
||||
function ShowNotes(forced = false) {
|
||||
|
||||
function ShowNoteModal(response) {
|
||||
if (response) {
|
||||
ModalContinueCancel('NotesContentModal', 'Notes', response, "EraseNote();hidemodal('NotesContentModal');", cancelbuttontext = 'Close', continuebuttontext = 'Delete Note', continuebuttoncss = 'btn btn-danger', cancelbuttoncss = 'btn btn-default');
|
||||
} else {
|
||||
if (forced) { ModalQuickDismiss('No Notes', 'No Notes Found'); }
|
||||
}
|
||||
}
|
||||
|
||||
AjaxDo('/user/note/content', null, ShowNoteModal, null, 'GET', false);
|
||||
}
|
||||
|
||||
function InitializeUserSettings() {
|
||||
let request = new RequestData(false);
|
||||
request
|
||||
.url('/User/Settings/Details')
|
||||
.type('POST')
|
||||
.data(null)
|
||||
.success((response) => {
|
||||
user_settings = response;
|
||||
})
|
||||
.error((err) => {
|
||||
|
||||
})
|
||||
.go();
|
||||
|
||||
request
|
||||
.url('/User/Settings/Run/Scripts')
|
||||
.type('POST')
|
||||
.data(null)
|
||||
.success((response) => {
|
||||
|
||||
eval(response);
|
||||
})
|
||||
.error((err) => {
|
||||
|
||||
})
|
||||
.go();
|
||||
|
||||
}
|
||||
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.onmessage = function (event) {
|
||||
if (event.data.action === 'logout') {
|
||||
logoutnow();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
function PageSettingsScript() {
|
||||
CheckAndSetDarkMode();
|
||||
}
|
||||
|
||||
RunFunctiononMutation('body-global', () => {
|
||||
PageSettingsScript();
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user