Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/mod/gui/modmod/modmod.js
/** | /** | ||||
* Contains JS objects defined by the mod JSON files available. | * Contains JS objects defined by the mod JSON files available. | ||||
* @example | * @example | ||||
*{ | *{ | ||||
* "public": | * "public": | ||||
* { | * { | ||||
* "name": "0ad", | * "name": "0ad", | ||||
* "version": "0.0.16", | * "version": "0.0.16", | ||||
* "label": "0 A.D. - Empires Ascendant", | * "label": "0 A.D. - Empires Ascendant", | ||||
* "type": "content|functionality|mixed/mod-pack", | |||||
* "url": "http://wildfregames.com/", | * "url": "http://wildfregames.com/", | ||||
* "description": "A free, open-source, historical RTS game.", | * "description": "A free, open-source, historical RTS game.", | ||||
* "dependencies": [] | * "dependencies": [] | ||||
* }, | * }, | ||||
* "foldername2": { | * "foldername2": { | ||||
* "name": "mod2", | * "name": "mod2", | ||||
* "label": "Mod 2", | * "label": "Mod 2", | ||||
* "version": "1.1", | * "version": "1.1", | ||||
▲ Show 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | function loadMods() | ||||
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); | ||||
} | } | ||||
function initGUIFilters() | function initGUIFilters() | ||||
{ | { | ||||
Engine.GetGUIObjectByName("negateFilter").checked = false; | Engine.GetGUIObjectByName("negateFilter").checked = false; | ||||
Engine.GetGUIObjectByName("modGenericFilter").caption = translate("Filter"); | Engine.GetGUIObjectByName("modGenericFilter").caption = translate("Filter"); | ||||
Engine.GetGUIObjectByName("modTypeFilter").selected = 0; | |||||
let sortBy = Engine.GetGUIObjectByName("sortBy"); | let sortBy = Engine.GetGUIObjectByName("sortBy"); | ||||
sortBy.list = g_SortOptions.map(option => option.title); | sortBy.list = g_SortOptions.map(option => option.title); | ||||
sortBy.selected = g_SortOptions.findIndex(option => option.default); | sortBy.selected = g_SortOptions.findIndex(option => option.default); | ||||
Engine.GetGUIObjectByName("isOrderDescending").checked = false; | Engine.GetGUIObjectByName("isOrderDescending").checked = false; | ||||
displayModLists(); | displayModLists(); | ||||
Show All 16 Lines | |||||
function displayModLists() | function displayModLists() | ||||
{ | { | ||||
displayModList("modsEnabledList", g_ModsEnabled); | displayModList("modsEnabledList", g_ModsEnabled); | ||||
displayModList("modsDisabledList", g_ModsDisabled); | displayModList("modsDisabledList", g_ModsDisabled); | ||||
} | } | ||||
function displayModList(listObjectName, folders) | function displayModList(listObjectName, folders) | ||||
{ | { | ||||
updateModTypes(); | |||||
let sortOption = g_SortOptions[Engine.GetGUIObjectByName("sortBy").selected]; | let sortOption = g_SortOptions[Engine.GetGUIObjectByName("sortBy").selected]; | ||||
if (sortOption && listObjectName == "modsDisabledList") | if (sortOption && listObjectName == "modsDisabledList") | ||||
{ | { | ||||
folders.sort((version1, version2) => sortOption.value(version1).localeCompare(sortOption.value(version2))); | folders.sort((version1, version2) => sortOption.value(version1).localeCompare(sortOption.value(version2))); | ||||
if (Engine.GetGUIObjectByName("isOrderDescending").checked) | if (Engine.GetGUIObjectByName("isOrderDescending").checked) | ||||
folders.reverse(); | folders.reverse(); | ||||
} | } | ||||
folders = folders.filter(filterMod); | folders = folders.filter(filterMod); | ||||
let listObject = Engine.GetGUIObjectByName(listObjectName); | let listObject = Engine.GetGUIObjectByName(listObjectName); | ||||
listObject.list_name = folders.map(folder => g_Mods[folder].name); | listObject.list_name = folders.map(folder => g_Mods[folder].name); | ||||
listObject.list_modFolderName = folders; | listObject.list_modFolderName = folders; | ||||
listObject.list_modLabel = folders.map(folder => g_Mods[folder].label); | listObject.list_modLabel = folders.map(folder => g_Mods[folder].label); | ||||
listObject.list_modType = folders.map(folder => g_Mods[folder].type || ""); | |||||
listObject.list_modURL = folders.map(folder => g_Mods[folder].url || ""); | listObject.list_modURL = folders.map(folder => g_Mods[folder].url || ""); | ||||
listObject.list_modVersion = folders.map(folder => g_Mods[folder].version); | listObject.list_modVersion = folders.map(folder => g_Mods[folder].version); | ||||
listObject.list_modDependencies = folders.map(folder => g_Mods[folder].dependencies.join(" ")); | listObject.list_modDependencies = folders.map(folder => g_Mods[folder].dependencies.join(" ")); | ||||
listObject.list = folders; | listObject.list = folders; | ||||
} | } | ||||
function updateModTypes() | |||||
{ | |||||
let types = [translate("Type: Any")]; | |||||
for (let folder in g_Mods) | |||||
{ | |||||
if (g_Mods[folder].type && types.indexOf(g_Mods[folder].type) == -1) | |||||
types.push(g_Mods[folder].type); | |||||
} | |||||
Engine.GetGUIObjectByName("modTypeFilter").list = types; | |||||
} | |||||
function enableMod() | function enableMod() | ||||
{ | { | ||||
let modsDisabledList = Engine.GetGUIObjectByName("modsDisabledList"); | let modsDisabledList = Engine.GetGUIObjectByName("modsDisabledList"); | ||||
let pos = modsDisabledList.selected; | let pos = modsDisabledList.selected; | ||||
if (pos == -1 || !areDependenciesMet(g_ModsDisabled[pos])) | if (pos == -1 || !areDependenciesMet(g_ModsDisabled[pos])) | ||||
return; | return; | ||||
Show All 33 Lines | function disableMod() | ||||
displayModLists(); | displayModLists(); | ||||
} | } | ||||
function resetFilters() | function resetFilters() | ||||
{ | { | ||||
Engine.GetGUIObjectByName("modGenericFilter").caption = ""; | Engine.GetGUIObjectByName("modGenericFilter").caption = ""; | ||||
Engine.GetGUIObjectByName("negateFilter").checked = false; | Engine.GetGUIObjectByName("negateFilter").checked = false; | ||||
displayModLists(); | |||||
// Calling displayModLists is not needed as the selection changes and that calls applyFilters | |||||
Engine.GetGUIObjectByName("modTypeFilter").selected = 0; | |||||
} | } | ||||
function applyFilters() | function applyFilters() | ||||
{ | { | ||||
// Save selected rows | // Save selected rows | ||||
let modsDisabledList = Engine.GetGUIObjectByName("modsDisabledList"); | let modsDisabledList = Engine.GetGUIObjectByName("modsDisabledList"); | ||||
let modsEnabledList = Engine.GetGUIObjectByName("modsEnabledList"); | let modsEnabledList = Engine.GetGUIObjectByName("modsEnabledList"); | ||||
let selectedModAvailableFolder = modsDisabledList.list_modFolderName[modsDisabledList.selected]; | let selectedModAvailableFolder = modsDisabledList.list_modFolderName[modsDisabledList.selected]; | ||||
Show All 11 Lines | function applyFilters() | ||||
Engine.GetGUIObjectByName("globalModDescription").caption = ""; | Engine.GetGUIObjectByName("globalModDescription").caption = ""; | ||||
} | } | ||||
function filterMod(folder) | function filterMod(folder) | ||||
{ | { | ||||
let mod = g_Mods[folder]; | let mod = g_Mods[folder]; | ||||
let modTypeFilter = Engine.GetGUIObjectByName("modTypeFilter"); | |||||
let negateFilter = Engine.GetGUIObjectByName("negateFilter").checked; | let negateFilter = Engine.GetGUIObjectByName("negateFilter").checked; | ||||
if (modTypeFilter.selected > 0 && (mod.type || "") != modTypeFilter.list[modTypeFilter.selected]) | |||||
return negateFilter; | |||||
let searchText = Engine.GetGUIObjectByName("modGenericFilter").caption; | let searchText = Engine.GetGUIObjectByName("modGenericFilter").caption; | ||||
if (searchText && | if (searchText && | ||||
searchText != translate("Filter") && | searchText != translate("Filter") && | ||||
folder.indexOf(searchText) == -1 && | folder.indexOf(searchText) == -1 && | ||||
mod.name.indexOf(searchText) == -1 && | mod.name.indexOf(searchText) == -1 && | ||||
mod.label.indexOf(searchText) == -1 && | mod.label.indexOf(searchText) == -1 && | ||||
(mod.type || "").indexOf(searchText) == -1 && | |||||
(mod.url || "").indexOf(searchText) == -1 && | (mod.url || "").indexOf(searchText) == -1 && | ||||
mod.version.indexOf(searchText) == -1 && | mod.version.indexOf(searchText) == -1 && | ||||
mod.description.indexOf(searchText) == -1 && | mod.description.indexOf(searchText) == -1 && | ||||
mod.dependencies.indexOf(searchText) == -1) | mod.dependencies.indexOf(searchText) == -1) | ||||
return negateFilter; | return negateFilter; | ||||
return !negateFilter; | return !negateFilter; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | function isDependencyMet(dependency) | ||||
return g_ModsEnabled.some(folder => | return g_ModsEnabled.some(folder => | ||||
g_Mods[folder].name == name && | g_Mods[folder].name == name && | ||||
(!operator || versionSatisfied(g_Mods[folder].version, operator, version))); | (!operator || versionSatisfied(g_Mods[folder].version, operator, version))); | ||||
} | } | ||||
/** | /** | ||||
* Compares the given versions using the given operator. | * Compares the given versions using the given operator. | ||||
* '-' or '_' is ignored. Only numbers are supported. | |||||
* @note "5.3" < "5.3.0" | |||||
*/ | */ | ||||
function versionSatisfied(version1, operator, version2) | function versionSatisfied(version1, operator, version2) | ||||
{ | { | ||||
let versionList1 = version1.split(/[-_]/)[0].split(/\./g); | let versionList1 = version1.split("."); | ||||
let versionList2 = version2.split(/[-_]/)[0].split(/\./g); | let versionList2 = version2.split("."); | ||||
let eq = operator.indexOf("=") != -1; | let eq = operator.indexOf("=") != -1; | ||||
let lt = operator.indexOf("<") != -1; | let lt = operator.indexOf("<") != -1; | ||||
let gt = operator.indexOf(">") != -1; | let gt = operator.indexOf(">") != -1; | ||||
for (let i = 0; i < Math.min(versionList1.length, versionList2.length); ++i) | for (let i = 0; i < Math.min(versionList1.length, versionList2.length); ++i) | ||||
{ | { | ||||
let diff = +versionList1[i] - +versionList2[i]; | let diff = +versionList1[i] - +versionList2[i]; | ||||
▲ Show 20 Lines • Show All 44 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator