/*
******************************************************************************
fpPS4 Temmie's Launcher
design.js
This file contains tools, functions and variables related for rendering and
updating main GUI
Quick note: This is probably the largest file on this project!
******************************************************************************
*/
temp_DESIGN = {
// Game patch loaded
gamePatchLoaded: !1,
/*
Hack List
If red-prig implements a new one, just add it here!
*/
hackList: [
'DEPTH_DISABLE_HACK',
'COMPUTE_DISABLE_HACK',
'MEMORY_BOUND_HACK',
'IMAGE_TEST_HACK',
'IMAGE_LOAD_HACK',
'DISABLE_SRGB_HACK',
'DISABLE_FMV_HACK',
'SKIP_UNKNOW_TILING'
],
// Game list display modes
gameListDisplayModes: ['normal', 'compact', 'grid'],
// Render hack list
renderHacklist: function(){
var htmlTemp = '';
this.hackList.forEach(function(hackName){
htmlTemp = `${htmlTemp} `;
});
// Append html and render gui
document.getElementById('DIV_HACK_LIST').innerHTML = htmlTemp;
this.update();
},
// Update GUI lang
updateLang: function(){
// Update titles
Object.keys(APP.lang.selected.title).forEach(function(domId){
if (document.getElementById(domId) !== null && APP.lang.selected.title[domId] !== ''){
document.getElementById(domId).title = APP.lang.selected.title[domId];
}
});
// If current lang isn't english, update remaining GUI
if (APP.settings.data.appLanguage !== 'english'){
// Update input text
Object.keys(APP.lang.selected.input_text).forEach(function(domId){
if (document.getElementById(domId) !== null){
document.getElementById(domId).value = APP.lang.selected.input_text[domId].value;
document.getElementById(domId).placeholder = APP.lang.selected.input_text[domId].placeholder;
}
});
// Update select
Object.keys(APP.lang.selected.select).forEach(function(domId){
if (document.getElementById(domId) !== null){
var optionsHtml = '';
Object.keys(APP.lang.selected.select[domId]).forEach(function(option){
optionsHtml = `${optionsHtml}`;
});
// Append HTML
document.getElementById(domId).innerHTML = optionsHtml;
}
});
// Update innerHTML
Object.keys(APP.lang.selected.innerHTML).forEach(function(domId){
if (document.getElementById(domId) !== null && APP.lang.selected.innerHTML[domId] !== ''){
document.getElementById(domId).innerHTML = APP.lang.selected.innerHTML[domId];
}
});
// Update value
Object.keys(APP.lang.selected.value).forEach(function(domId){
if (document.getElementById(domId) !== null && APP.lang.selected.value[domId] !== ''){
document.getElementById(domId).value = APP.lang.selected.value[domId];
}
});
}
},
// Render game list
renderGameList: function(data){
// Create main vars
var tempHtml = '',
gList = APP.gameList.list;
// Check data var
if (data === void 0 || typeof data !== 'object'){
data = {};
}
// Check custom list
if (data.customList !== void 0){
gList = data.customList;
}
// Process game list
Object.keys(gList).forEach(function(cGame, cIndex){
// Settings for display mode: Normal
var appTitle = '',
gameName = '',
gameBgAndIcon,
appVersion = '',
patchParamSfo = {},
gameEntryStyle = '',
classDisplayEntryMode = '',
appNameClass = 'LABEL_gameTitle',
classGameDetailsMode = 'GAME_DETAILS',
settingsFile = gList[cGame].settingsFile,
gridIconSize = APP.settings.data.gridIconSize,
gameMetadata = ` ${APP.lang.getVariable('path')}: ${gList[cGame].exe}`,
bgPath = `url(\'file://${gList[cGame].bg.replace(RegExp('\'', 'gi'), '\\\'')}\')`;
// Disable background image
if (APP.settings.data.showBgOnEntry !== !0){
bgPath = 'none';
}
// Check if current entry is the first one
if (cIndex === 0){
classDisplayEntryMode = ' GAME_ENTRY_FIRST_INDEX';
}
// Set background, icon and check if path is available / active
gameBgAndIcon = `
`;
if (Object.keys(settingsFile).length !== 0 && settingsFile.usePatch === !0 && APP.fs.existsSync(`${settingsFile.patchLocation}/sce_sys/param.sfo`) === !0){
// Get PARAM.SFO patch data and check if PARAM.SFO from patch is loaded and isn't an DLC
patchParamSfo = APP.paramSfo.parse(`${settingsFile.patchLocation}/sce_sys/param.sfo`);
if (Object.keys(patchParamSfo).keys !== 0 && patchParamSfo.CATEGORY !== 'ac'){
appVersion = ``;
}
}
// If PARAM.SFO metadata exists, show serial and game version instead
if (Object.keys(gList[cGame].paramSfo).length !== 0){
// If patch isn't enabled or patch location does not exists but is enabled
if (settingsFile.usePatch !== !0 || settingsFile.usePatch === !0 && APP.fs.existsSync(`${settingsFile.patchLocation}/sce_sys/param.sfo`) !== !0){
appVersion = gList[cGame].paramSfo.APP_VER;
}
// Set game data
gameMetadata = ` ${gList[cGame].paramSfo.TITLE_ID} - ${APP.lang.getVariable('gameListVersion')} ${appVersion}`;
}
// Settings: Show App / Game version (or executable path) for every title in game list
if (APP.settings.data.showPathEntry !== !0){
gameMetadata = '';
}
// Display modes
switch (APP.settings.data.gameListMode){
// Display mode: Compact
case 'compact':
gameMetadata = '';
gameBgAndIcon = '';
appNameClass = 'LABEL_gameTitleCompact';
classDisplayEntryMode = `${classDisplayEntryMode} GAME_ENTRY_COMPACT`;
classGameDetailsMode = 'GAME_DETAILS GAME_DETAILS_COMPACT';
// Check if PARAM.SFO is available
if (Object.keys(gList[cGame].paramSfo).length !== 0){
gameMetadata = `