Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/mod/gui/modmod/modmod.js
Show First 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | function init(data, hotloadData) | ||||
initGUIButtons(data); | initGUIButtons(data); | ||||
} | } | ||||
function initMods() | function initMods() | ||||
{ | { | ||||
loadMods(); | loadMods(); | ||||
loadEnabledMods(); | loadEnabledMods(); | ||||
recomputeCompatibility(); | recomputeCompatibility(); | ||||
validateMods(); | |||||
initGUIFilters(); | initGUIFilters(); | ||||
} | } | ||||
function getHotloadData() | function getHotloadData() | ||||
{ | { | ||||
return { "installedMods": g_InstalledMods }; | return { "installedMods": g_InstalledMods }; | ||||
} | } | ||||
function loadMods() | function loadMods() | ||||
{ | { | ||||
g_Mods = Engine.GetAvailableMods(); | g_Mods = Engine.GetAvailableMods(); | ||||
deepfreeze(g_Mods); | deepfreeze(g_Mods); | ||||
} | } | ||||
function loadEnabledMods() | function loadEnabledMods() | ||||
{ | { | ||||
g_ModsEnabled = Engine.ConfigDB_GetValue("user", "mod.enabledmods").split(/\s+/).filter(folder => !!g_Mods[folder]); | g_ModsEnabled = Engine.ConfigDB_GetValue("user", "mod.enabledmods").split(/\s+/).filter(folder => !!g_Mods[folder]); | ||||
g_ModsDisabled = Object.keys(g_Mods).filter(folder => g_ModsEnabled.indexOf(folder) == -1); | g_ModsDisabled = Object.keys(g_Mods).filter(folder => g_ModsEnabled.indexOf(folder) == -1); | ||||
g_ModsEnabledFiltered = g_ModsEnabled; | g_ModsEnabledFiltered = g_ModsEnabled; | ||||
g_ModsDisabledFiltered = g_ModsDisabled; | g_ModsDisabledFiltered = g_ModsDisabled; | ||||
} | } | ||||
function validateMods() | |||||
{ | |||||
for (let folder in g_Mods) | |||||
validateMod(folder, g_Mods[folder], true); | |||||
} | |||||
function initGUIFilters() | function initGUIFilters() | ||||
{ | { | ||||
Engine.GetGUIObjectByName("negateFilter").checked = false; | Engine.GetGUIObjectByName("negateFilter").checked = false; | ||||
Engine.GetGUIObjectByName("modCompatibleFilter").checked = true; | Engine.GetGUIObjectByName("modCompatibleFilter").checked = true; | ||||
displayModLists(); | displayModLists(); | ||||
} | } | ||||
Show All 39 Lines | function displayModList(listObjectName, folders, enabled) | ||||
} | } | ||||
folders = folders.filter(filterMod); | folders = folders.filter(filterMod); | ||||
if (!enabled && Engine.GetGUIObjectByName("modCompatibleFilter").checked) | if (!enabled && Engine.GetGUIObjectByName("modCompatibleFilter").checked) | ||||
folders = folders.filter(folder => g_ModsCompatibility[folder]); | folders = folders.filter(folder => g_ModsCompatibility[folder]); | ||||
let selected = listObject.selected !== -1 ? listObject.list_name[listObject.selected] : null; | let selected = listObject.selected !== -1 ? listObject.list_name[listObject.selected] : null; | ||||
listObject.list_name = folders.map(folder => colorMod(folder, g_Mods[folder].name, enabled)); | listObject.list_name = folders.map(folder => colorMod(folder, g_Mods[folder].name || "", enabled)); | ||||
listObject.list_folder = folders.map(folder => colorMod(folder, folder, enabled)); | listObject.list_folder = folders.map(folder => colorMod(folder, folder, enabled)); | ||||
listObject.list_label = folders.map(folder => colorMod(folder, g_Mods[folder].label, enabled)); | listObject.list_label = folders.map(folder => colorMod(folder, g_Mods[folder].label || "", enabled)); | ||||
listObject.list_url = folders.map(folder => colorMod(folder, g_Mods[folder].url || "", enabled)); | listObject.list_url = folders.map(folder => colorMod(folder, g_Mods[folder].url || "", enabled)); | ||||
listObject.list_version = folders.map(folder => colorMod(folder, g_Mods[folder].version, enabled)); | listObject.list_version = folders.map(folder => colorMod(folder, g_Mods[folder].version || "", enabled)); | ||||
listObject.list_dependencies = folders.map(folder => colorMod(folder, g_Mods[folder].dependencies.join(" "), enabled)); | listObject.list_dependencies = folders.map(folder => colorMod(folder,g_Mods[folder].dependencies?.join(" "), enabled)); | ||||
Lint: comma-spacing: A space is required after ','. | |||||
listObject.list = folders; | listObject.list = folders; | ||||
listObject.selected = selected ? listObject.list_name.indexOf(selected) : -1; | listObject.selected = selected ? listObject.list_name.indexOf(selected) : -1; | ||||
return folders; | return folders; | ||||
} | } | ||||
function getModColor(folder, enabled) | function getModColor(folder, enabled) | ||||
▲ Show 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | function moveCurrItem(objectName, up) | ||||
g_ModsEnabled[idx2] = tmp; | g_ModsEnabled[idx2] = tmp; | ||||
g_ModsEnabledFiltered = displayModList("modsEnabledList", g_ModsEnabled, true); | g_ModsEnabledFiltered = displayModList("modsEnabledList", g_ModsEnabled, true); | ||||
obj.selected = idx2; | obj.selected = idx2; | ||||
} | } | ||||
function areDependenciesMet(folder, disabledAction = false) | function areDependenciesMet(folder, disabledAction = false) | ||||
{ | { | ||||
if (!g_Mods[folder].dependencies) | |||||
return true; | |||||
// If we disabled mod it will not change satus of incompatible mods | // If we disabled mod it will not change satus of incompatible mods | ||||
if (disabledAction && !g_ModsCompatibility[folder]) | if (disabledAction && !g_ModsCompatibility[folder]) | ||||
return g_ModsCompatibility[folder]; | return g_ModsCompatibility[folder]; | ||||
for (let dependency of g_Mods[folder].dependencies) | for (let dependency of g_Mods[folder].dependencies) | ||||
{ | { | ||||
if (!isDependencyMet(dependency)) | if (!isDependencyMet(dependency)) | ||||
return false; | return false; | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
function recomputeCompatibility(disabledAction = false) | function recomputeCompatibility(disabledAction = false) | ||||
{ | { | ||||
for (let mod in g_Mods) | for (let mod in g_Mods) | ||||
g_ModsCompatibility[mod] = areDependenciesMet(mod, disabledAction); | g_ModsCompatibility[mod] = !g_Mods[mod].invalid && areDependenciesMet(mod, disabledAction); | ||||
} | } | ||||
/** | /** | ||||
* @param dependency is a mod name or a mod version comparison. | * @param dependency is a mod name or a mod version comparison. | ||||
*/ | */ | ||||
function isDependencyMet(dependency) | function isDependencyMet(dependency) | ||||
{ | { | ||||
let operator = dependency.match(g_RegExpComparisonOperator); | let operator = dependency.match(g_RegExpComparisonOperator); | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | function sortEnabledMods() | ||||
g_ModsEnabled.sort((folder1, folder2) => | g_ModsEnabled.sort((folder1, folder2) => | ||||
dependencies[folder1].indexOf(g_Mods[folder2].name) != -1 ? 1 : | dependencies[folder1].indexOf(g_Mods[folder2].name) != -1 ? 1 : | ||||
dependencies[folder2].indexOf(g_Mods[folder1].name) != -1 ? -1 : 0); | dependencies[folder2].indexOf(g_Mods[folder1].name) != -1 ? -1 : 0); | ||||
g_ModsEnabledFiltered = displayModList("modsEnabledList", g_ModsEnabled, true); | g_ModsEnabledFiltered = displayModList("modsEnabledList", g_ModsEnabled, true); | ||||
} | } | ||||
function isModInvalid(folder) | |||||
{ | |||||
return g_Mods[folder].invalid; | |||||
} | |||||
function selectedMod(listObjectName) | function selectedMod(listObjectName) | ||||
{ | { | ||||
let listObject = Engine.GetGUIObjectByName(listObjectName); | let listObject = Engine.GetGUIObjectByName(listObjectName); | ||||
let isPickedDisabledList = listObjectName == "modsDisabledList"; | let isPickedDisabledList = listObjectName == "modsDisabledList"; | ||||
let otherListObject = Engine.GetGUIObjectByName(isPickedDisabledList ? | let otherListObject = Engine.GetGUIObjectByName(isPickedDisabledList ? | ||||
"modsEnabledList" : "modsDisabledList"); | "modsEnabledList" : "modsDisabledList"); | ||||
let toggleModButton = Engine.GetGUIObjectByName("toggleModButton"); | let toggleModButton = Engine.GetGUIObjectByName("toggleModButton"); | ||||
let isModSelected = listObject.selected != -1; | let isModSelected = listObject.selected != -1; | ||||
if (isModSelected) | if (isModSelected) | ||||
{ | { | ||||
otherListObject.selected = -1; | otherListObject.selected = -1; | ||||
toggleModButton.onPress = isPickedDisabledList ? enableMod : disableMod; | toggleModButton.onPress = isPickedDisabledList ? enableMod : disableMod; | ||||
} | } | ||||
Engine.GetGUIObjectByName("visitWebButton").enabled = isModSelected && !!getSelectedModUrl(); | Engine.GetGUIObjectByName("visitWebButton").enabled = isModSelected && !!getSelectedModUrl(); | ||||
toggleModButton.caption = isPickedDisabledList ? | toggleModButton.caption = isPickedDisabledList ? | ||||
translateWithContext("mod activation", "Enable") : | translateWithContext("mod activation", "Enable") : | ||||
translateWithContext("mod activation", "Disable"); | translateWithContext("mod activation", "Disable"); | ||||
toggleModButton.enabled = isPickedDisabledList ? isModSelected && g_ModsCompatibility[listObject.list[listObject.selected]] : isModSelected; | toggleModButton.enabled = isPickedDisabledList ? isModSelected && g_ModsCompatibility[listObject.list[listObject.selected]] : isModSelected && !g_Mods[listObject.list[listObject.selected]].invalid; | ||||
Engine.GetGUIObjectByName("enabledModUp").enabled = isModSelected && listObjectName == "modsEnabledList" && !areFilters(); | Engine.GetGUIObjectByName("enabledModUp").enabled = isModSelected && listObjectName == "modsEnabledList" && !areFilters(); | ||||
Engine.GetGUIObjectByName("enabledModDown").enabled = isModSelected && listObjectName == "modsEnabledList" && !areFilters(); | Engine.GetGUIObjectByName("enabledModDown").enabled = isModSelected && listObjectName == "modsEnabledList" && !areFilters(); | ||||
Engine.GetGUIObjectByName("globalModDescription").caption = | Engine.GetGUIObjectByName("globalModDescription").caption = | ||||
listObject.list[listObject.selected] ? | listObject.list[listObject.selected] ? | ||||
g_Mods[listObject.list[listObject.selected]].invalid ? | |||||
'[color="' + g_ColorDependenciesNotMet + '"]' + sprintf(translate("Invalid mod: %(error)s"), {"error": getErrorReason(g_Mods[listObject.list[listObject.selected]].error)}) : | |||||
Lint: indent Expected indentation of 4 tabs but found 3. Lint: indent: Expected indentation of 4 tabs but found 3. | |||||
Lint: object-curly-spacing A space is required after '{'. Lint: object-curly-spacing: A space is required after '{'. | |||||
Lint: object-curly-spacing A space is required before '}'. Lint: object-curly-spacing: A space is required before '}'. | |||||
g_Mods[listObject.list[listObject.selected]].description : | g_Mods[listObject.list[listObject.selected]].description : | ||||
'[color="' + g_ColorNoModSelected + '"]' + translate("No mod has been selected.") + '[/color]'; | '[color="' + g_ColorNoModSelected + '"]' + translate("No mod has been selected.") + '[/color]'; | ||||
} | } | ||||
function getErrorReason(error) | |||||
{ | |||||
switch(error) | |||||
{ | |||||
case 1: return translate("Missing name"); | |||||
case 2: return translate("Missing version"); | |||||
case 3: return translate("Missing dependencies"); | |||||
case 4: return translate("Dependencies are not object"); | |||||
case 5: return translate("Missing label"); | |||||
case 6: return translate("Missing description"); | |||||
case 7: return translate("Name may only contain alphanumeric characters"); | |||||
case 8: return translate("Version may only contain numbers and at most 2 periods"); | |||||
case 9: return translate("Label may not be empty!"); | |||||
default: return translate(sprintf("unknown error %(error)s", {"error": error})); | |||||
Lint: object-curly-spacing A space is required after '{'. Lint: object-curly-spacing: A space is required after '{'. | |||||
Lint: object-curly-spacing A space is required before '}'. Lint: object-curly-spacing: A space is required before '}'. | |||||
} | |||||
} | |||||
/** | /** | ||||
* @returns {string} The url of the currently selected mod. | * @returns {string} The url of the currently selected mod. | ||||
*/ | */ | ||||
function getSelectedModUrl() | function getSelectedModUrl() | ||||
{ | { | ||||
let modsEnabledList = Engine.GetGUIObjectByName("modsEnabledList"); | let modsEnabledList = Engine.GetGUIObjectByName("modsEnabledList"); | ||||
let modsDisabledList = Engine.GetGUIObjectByName("modsDisabledList"); | let modsDisabledList = Engine.GetGUIObjectByName("modsDisabledList"); | ||||
Show All 16 Lines |
Wildfire Games · Phabricator
A space is required after ','.