mirror of
https://github.com/themitosan/fpPS4-Temmie-s-Launcher.git
synced 2025-04-02 10:31:50 -04:00
366 lines
No EOL
6.1 KiB
JavaScript
366 lines
No EOL
6.1 KiB
JavaScript
/*
|
|
***********************************************************************************
|
|
|
|
fpPS4 Temmie's Launcher
|
|
tools.js
|
|
|
|
This file contains most tools for converting hex data and more
|
|
|
|
***********************************************************************************
|
|
*/
|
|
|
|
temp_TOOLS = {
|
|
|
|
// Solve Hex
|
|
solveHex: function(hex){
|
|
|
|
if (hex !== void 0){
|
|
return hex.toLowerCase().replace(RegExp(' ', 'gi'), '');
|
|
}
|
|
|
|
},
|
|
|
|
// Unsolve Hex
|
|
unsolveHex: function(hex){
|
|
|
|
if (hex !== void 0){
|
|
return hex.toUpperCase().match(/.{2,2}/g).toString().replace(RegExp(',', 'gi'), ' ')
|
|
}
|
|
|
|
},
|
|
|
|
// Parse endian values
|
|
parseEndian: function(hex){
|
|
|
|
if (hex !== void 0){
|
|
return hex.match(/.{2,2}/g).reverse().toString().replace(RegExp(',', 'gi'), '');
|
|
}
|
|
|
|
},
|
|
|
|
// Convert Hex values to UTF-8 string
|
|
convertHexToUft8: function(hex){
|
|
|
|
var textValue = '';
|
|
if (hex !== void 0 && hex !== ''){
|
|
textValue = decodeURIComponent('%' + hex.match(/.{2,2}/g).join('%'));
|
|
}
|
|
|
|
return textValue;
|
|
|
|
},
|
|
|
|
// Parse percentage
|
|
parsePercentage: function(current, maximum){
|
|
|
|
var res = 0;
|
|
if (current !== void 0 && maximum !== void 0){
|
|
res = Math.floor((current / maximum) * 100);
|
|
}
|
|
|
|
return res;
|
|
|
|
},
|
|
|
|
// Parse positive
|
|
parsePositive: function(value){
|
|
|
|
var res = 0;
|
|
|
|
if (value !== void 0 && parseInt(value) !== NaN){
|
|
const n = parseInt(value);
|
|
res = ((n - n) - n);
|
|
}
|
|
|
|
return res;
|
|
|
|
},
|
|
|
|
// Process checkbox status
|
|
processCheckbox: function(domName){
|
|
|
|
var res = !1,
|
|
domId = document.getElementById(domName).checked;
|
|
|
|
if (domId === !1){
|
|
res = !0;
|
|
}
|
|
|
|
document.getElementById(domName).checked = res;
|
|
|
|
},
|
|
|
|
// Fix paths
|
|
fixPath: function(path){
|
|
|
|
if (path !== void 0 && path !== ''){
|
|
return path.replace(RegExp('\\\\', 'gi'), '/');
|
|
}
|
|
|
|
},
|
|
|
|
/*
|
|
Remove HTML from string
|
|
Original regex: https://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/
|
|
*/
|
|
removeHTML: function(str){
|
|
if (str !== void 0 && str !== ''){
|
|
return str.replace(/(<([^>]+)>)/gi, '');
|
|
}
|
|
},
|
|
|
|
// Get data from main object (APP - main.js)
|
|
getVariable: function(str){
|
|
if (str !== void 0 && str !== ''){
|
|
|
|
var res = APP,
|
|
temp = str.split('.').forEach(function(objPath){
|
|
res = res[objPath];
|
|
});
|
|
|
|
return res;
|
|
|
|
}
|
|
},
|
|
|
|
// Set data on main object (APP - main.js)
|
|
setVariable: function(target, data, callback){
|
|
|
|
try {
|
|
|
|
if (target !== void 0 && target !== ''){
|
|
|
|
var i,
|
|
temp = APP,
|
|
path = target.split('.');
|
|
|
|
for (i = 0; i < (path.length - 1); i++){
|
|
temp = temp[path[i]];
|
|
}
|
|
|
|
temp[path[i]] = data;
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
throw new Error(err);
|
|
}
|
|
},
|
|
|
|
// Convert array to string breaking lines
|
|
convertArrayToString: function(str){
|
|
var res = '';
|
|
|
|
if (str !== void 0 && str.length !== 0){
|
|
res = str.toString().replace(RegExp(',', 'gi'), '\n');
|
|
}
|
|
|
|
return res;
|
|
},
|
|
|
|
// Remove values from string
|
|
cleanString: function(str, arr){
|
|
|
|
var res = '';
|
|
|
|
if (str !== void 0 && arr !== void 0){
|
|
|
|
res = str;
|
|
arr.forEach(function(rep){
|
|
res = res.replace(RegExp(rep, 'gi'), '');
|
|
});
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
/*
|
|
Fix vars
|
|
This function was obtained from R3V2 API
|
|
|
|
https://github.com/temmieheartz/r3ditor-v2
|
|
*/
|
|
fixVars: function(inp, v){
|
|
|
|
var c = 0,
|
|
size = parseInt(v),
|
|
input = inp.toString();
|
|
|
|
if (inp === void 0 || inp === ''){
|
|
input = '00';
|
|
}
|
|
if (v === void 0 || v === ''){
|
|
size = 2;
|
|
}
|
|
|
|
if (input.length < size){
|
|
|
|
while (input.length !== size){
|
|
input = '0' + input;
|
|
}
|
|
|
|
} else {
|
|
|
|
if (input.length !== size && input.toString().length > size){
|
|
input = input.slice(0, v);
|
|
}
|
|
|
|
}
|
|
|
|
return input;
|
|
|
|
},
|
|
|
|
// Fix JSON quotes
|
|
fixJson: function(data){
|
|
|
|
var res = '';
|
|
|
|
if (data !== void 0){
|
|
res = data.replace(RegExp("'", 'gi'), '"');
|
|
}
|
|
|
|
return res;
|
|
|
|
},
|
|
|
|
// Clean function
|
|
cleanFn: function(fnStr){
|
|
|
|
var res = '';
|
|
|
|
if (fnStr !== void 0){
|
|
res = fnStr.replace(RegExp('\n', 'gi'), ' ').replace(RegExp(' ', 'gi'), '');
|
|
}
|
|
|
|
return res;
|
|
|
|
},
|
|
|
|
// Prompt - a simple way to handle window.prompt call
|
|
prompt: function(msg){
|
|
|
|
return new Promise(function(resolve, reject){
|
|
|
|
var res,
|
|
canStart = !0,
|
|
errorReason = '';
|
|
|
|
if (msg === '' || msg === void 0){
|
|
canStart = !1;
|
|
errorReason = 'Provided message is empty';
|
|
} else {
|
|
res = window.prompt(msg);
|
|
}
|
|
|
|
if (res === null){
|
|
canStart = !1;
|
|
errorReason = 'User canceled action';
|
|
}
|
|
|
|
if (res === ''){
|
|
canStart = !1;
|
|
errorReason = 'User didn\'t provided any data on textbox';
|
|
}
|
|
|
|
if (canStart === !0){
|
|
resolve(res);
|
|
} else {
|
|
reject(errorReason);
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// Confirm - a simple way to handle window.confirm call
|
|
confirm: function(msg){
|
|
|
|
return new Promise(function(resolve, reject){
|
|
|
|
var res,
|
|
canStart = !0,
|
|
errorReason = '';
|
|
|
|
if (msg === '' || msg === void 0){
|
|
canStart = !1;
|
|
errorReason = 'Provided message is empty';
|
|
} else {
|
|
res = window.confirm(msg);
|
|
}
|
|
|
|
if (res === !1){
|
|
canStart = !1;
|
|
errorReason = 'User canceled action';
|
|
}
|
|
|
|
if (canStart === !0){
|
|
resolve(res);
|
|
} else {
|
|
reject(errorReason);
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// Get all files from dir / subdir (require node.js)
|
|
getDirFiles: function(dir){
|
|
|
|
// Variables
|
|
var res = [],
|
|
fixPath = this.fixPath;
|
|
|
|
// Main process
|
|
const gFileProcess = function(path){
|
|
|
|
/*
|
|
Require modules individually.
|
|
They will not be linked to main object due compat with other softwares (like fpPS4TL Script Editor)
|
|
*/
|
|
var module_fs = require('fs'),
|
|
module_path = require('path');
|
|
|
|
// Read dir
|
|
module_fs.readdirSync(fixPath(path)).forEach(function(cFile){
|
|
|
|
var ret,
|
|
abs = module_path.join(path, cFile);
|
|
|
|
if (module_fs.statSync(abs).isDirectory()){
|
|
ret = gFileProcess(abs);
|
|
} else {
|
|
ret = res.push(fixPath(abs));
|
|
}
|
|
|
|
return ret;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
// Run process
|
|
gFileProcess(dir);
|
|
|
|
// End
|
|
return res;
|
|
|
|
},
|
|
|
|
// Check online status
|
|
checkOnlineStatus: async function(){
|
|
|
|
try {
|
|
|
|
const fetchTest = await fetch('https://google.com');
|
|
return parseInt(fetchTest.status) > 199 && parseInt(fetchTest.status) < 300;
|
|
|
|
} catch (err){
|
|
return !1;
|
|
}
|
|
|
|
}
|
|
|
|
} |