chore(webui): split weapons by category (#820)
This commit is contained in:
		
							parent
							
								
									45c32b087d
								
							
						
					
					
						commit
						4ce03ad523
					
				@ -17,25 +17,32 @@ interface ListedItem {
 | 
			
		||||
    fusionLimit?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const getItemListsController: RequestHandler = (req, res) => {
 | 
			
		||||
const getItemListsController: RequestHandler = (req, response) => {
 | 
			
		||||
    const lang = getDict(typeof req.query.lang == "string" ? req.query.lang : "en");
 | 
			
		||||
    const weapons = [];
 | 
			
		||||
    const miscitems = [];
 | 
			
		||||
    const res: Record<string, ListedItem[]> = {};
 | 
			
		||||
    res.LongGuns = [];
 | 
			
		||||
    res.Pistols = [];
 | 
			
		||||
    res.Melee = [];
 | 
			
		||||
    res.miscitems = [];
 | 
			
		||||
    for (const [uniqueName, item] of Object.entries(ExportWeapons)) {
 | 
			
		||||
        if (item.productCategory !== "OperatorAmps") {
 | 
			
		||||
        if (item.totalDamage !== 0) {
 | 
			
		||||
                weapons.push({
 | 
			
		||||
            if (
 | 
			
		||||
                item.productCategory == "LongGuns" ||
 | 
			
		||||
                item.productCategory == "Pistols" ||
 | 
			
		||||
                item.productCategory == "Melee"
 | 
			
		||||
            ) {
 | 
			
		||||
                res[item.productCategory].push({
 | 
			
		||||
                    uniqueName,
 | 
			
		||||
                    name: getString(item.name, lang)
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        } else if (!item.excludeFromCodex) {
 | 
			
		||||
                miscitems.push({
 | 
			
		||||
            res.miscitems.push({
 | 
			
		||||
                uniqueName: "MiscItems:" + uniqueName,
 | 
			
		||||
                name: getString(item.name, lang)
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
    for (const [uniqueName, item] of Object.entries(ExportResources)) {
 | 
			
		||||
        let name = getString(item.name, lang);
 | 
			
		||||
        if ("dissectionParts" in item) {
 | 
			
		||||
@ -48,13 +55,13 @@ const getItemListsController: RequestHandler = (req, res) => {
 | 
			
		||||
                name = name.split("|FISH_SIZE|").join(getString("/Lotus/Language/Fish/FishSizeSmallAbbrev", lang));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        miscitems.push({
 | 
			
		||||
        res.miscitems.push({
 | 
			
		||||
            uniqueName: item.productCategory + ":" + uniqueName,
 | 
			
		||||
            name: name
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    for (const [uniqueName, item] of Object.entries(ExportGear)) {
 | 
			
		||||
        miscitems.push({
 | 
			
		||||
        res.miscitems.push({
 | 
			
		||||
            uniqueName: "Consumables:" + uniqueName,
 | 
			
		||||
            name: getString(item.name, lang)
 | 
			
		||||
        });
 | 
			
		||||
@ -64,7 +71,7 @@ const getItemListsController: RequestHandler = (req, res) => {
 | 
			
		||||
        if (!item.hidden) {
 | 
			
		||||
            const resultName = getItemName(item.resultType);
 | 
			
		||||
            if (resultName) {
 | 
			
		||||
                miscitems.push({
 | 
			
		||||
                res.miscitems.push({
 | 
			
		||||
                    uniqueName: "Recipes:" + uniqueName,
 | 
			
		||||
                    name: recipeNameTemplate.replace("|ITEM|", getString(resultName, lang))
 | 
			
		||||
                });
 | 
			
		||||
@ -72,10 +79,10 @@ const getItemListsController: RequestHandler = (req, res) => {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const mods: ListedItem[] = [];
 | 
			
		||||
    res.mods = [];
 | 
			
		||||
    const badItems: Record<string, boolean> = {};
 | 
			
		||||
    for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) {
 | 
			
		||||
        mods.push({
 | 
			
		||||
        res.mods.push({
 | 
			
		||||
            uniqueName,
 | 
			
		||||
            name: getString(upgrade.name, lang),
 | 
			
		||||
            fusionLimit: upgrade.fusionLimit
 | 
			
		||||
@ -85,7 +92,7 @@ const getItemListsController: RequestHandler = (req, res) => {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    for (const [uniqueName, arcane] of Object.entries(ExportArcanes)) {
 | 
			
		||||
        mods.push({
 | 
			
		||||
        res.mods.push({
 | 
			
		||||
            uniqueName,
 | 
			
		||||
            name: getString(arcane.name, lang)
 | 
			
		||||
        });
 | 
			
		||||
@ -94,7 +101,7 @@ const getItemListsController: RequestHandler = (req, res) => {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.json({
 | 
			
		||||
    response.json({
 | 
			
		||||
        warframes: Object.entries(ExportWarframes)
 | 
			
		||||
            .filter(([_uniqueName, warframe]) => warframe.productCategory == "Suits")
 | 
			
		||||
            .map(([uniqueName, warframe]) => {
 | 
			
		||||
@ -104,11 +111,9 @@ const getItemListsController: RequestHandler = (req, res) => {
 | 
			
		||||
                    exalted: warframe.exalted
 | 
			
		||||
                };
 | 
			
		||||
            }),
 | 
			
		||||
        weapons,
 | 
			
		||||
        miscitems,
 | 
			
		||||
        mods,
 | 
			
		||||
        badItems,
 | 
			
		||||
        archonCrystalUpgrades
 | 
			
		||||
        archonCrystalUpgrades,
 | 
			
		||||
        ...res
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -96,7 +96,7 @@
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="row g-3">
 | 
			
		||||
                    <div class="col-lg-6">
 | 
			
		||||
                        <div class="card mb-3" style="height: 480px;">
 | 
			
		||||
                        <div class="card mb-3" style="height: 400px;">
 | 
			
		||||
                            <h5 class="card-header">Warframes</h5>
 | 
			
		||||
                            <div class="card-body overflow-auto">
 | 
			
		||||
                                <form class="input-group mb-3" onsubmit="doAcquireWarframe();return false;">
 | 
			
		||||
@ -110,15 +110,45 @@
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="col-lg-6">
 | 
			
		||||
                        <div class="card mb-3" style="height: 480px;">
 | 
			
		||||
                            <h5 class="card-header">Weapons</h5>
 | 
			
		||||
                        <div class="card mb-3" style="height: 400px;">
 | 
			
		||||
                            <h5 class="card-header">Primary Weapons</h5>
 | 
			
		||||
                            <div class="card-body overflow-auto">
 | 
			
		||||
                                <form class="input-group mb-3" onsubmit="doAcquireWeapon();return false;">
 | 
			
		||||
                                    <input class="form-control" id="weapon-to-acquire" list="datalist-weapons" />
 | 
			
		||||
                                <form class="input-group mb-3" onsubmit="doAcquireWeapon('LongGuns');return false;">
 | 
			
		||||
                                    <input class="form-control" id="acquire-type-LongGuns" list="datalist-LongGuns" />
 | 
			
		||||
                                    <button class="btn btn-primary" type="submit">Add</button>
 | 
			
		||||
                                </form>
 | 
			
		||||
                                <table class="table table-hover w-100">
 | 
			
		||||
                                    <tbody id="weapon-list"></tbody>
 | 
			
		||||
                                    <tbody id="LongGuns-list"></tbody>
 | 
			
		||||
                                </table>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="row g-3">
 | 
			
		||||
                    <div class="col-lg-6">
 | 
			
		||||
                        <div class="card mb-3" style="height: 400px;">
 | 
			
		||||
                            <h5 class="card-header">Secondary Weapons</h5>
 | 
			
		||||
                            <div class="card-body overflow-auto">
 | 
			
		||||
                                <form class="input-group mb-3" onsubmit="doAcquireWeapon('Pistols');return false;">
 | 
			
		||||
                                    <input class="form-control" id="acquire-type-Pistols" list="datalist-Pistols" />
 | 
			
		||||
                                    <button class="btn btn-primary" type="submit">Add</button>
 | 
			
		||||
                                </form>
 | 
			
		||||
                                <table class="table table-hover w-100">
 | 
			
		||||
                                    <tbody id="Pistols-list"></tbody>
 | 
			
		||||
                                </table>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="col-lg-6">
 | 
			
		||||
                        <div class="card mb-3" style="height: 400px;">
 | 
			
		||||
                            <h5 class="card-header">Melee Weapons</h5>
 | 
			
		||||
                            <div class="card-body overflow-auto">
 | 
			
		||||
                                <form class="input-group mb-3" onsubmit="doAcquireWeapon('Melee');return false;">
 | 
			
		||||
                                    <input class="form-control" id="acquire-type-Melee" list="datalist-Melee" />
 | 
			
		||||
                                    <button class="btn btn-primary" type="submit">Add</button>
 | 
			
		||||
                                </form>
 | 
			
		||||
                                <table class="table table-hover w-100">
 | 
			
		||||
                                    <tbody id="Melee-list"></tbody>
 | 
			
		||||
                                </table>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
@ -355,7 +385,9 @@
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <datalist id="datalist-warframes"></datalist>
 | 
			
		||||
    <datalist id="datalist-weapons"></datalist>
 | 
			
		||||
    <datalist id="datalist-LongGuns"></datalist>
 | 
			
		||||
    <datalist id="datalist-Pistols"></datalist>
 | 
			
		||||
    <datalist id="datalist-Melee"></datalist>
 | 
			
		||||
    <datalist id="datalist-miscitems"></datalist>
 | 
			
		||||
    <datalist id="datalist-mods">
 | 
			
		||||
        <option data-key="/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser" value="Legendary Core"></option>
 | 
			
		||||
 | 
			
		||||
@ -265,8 +265,8 @@ function updateInventory() {
 | 
			
		||||
                }
 | 
			
		||||
                document.getElementById("warframe-list").appendChild(tr);
 | 
			
		||||
            });
 | 
			
		||||
            document.getElementById("weapon-list").innerHTML = "";
 | 
			
		||||
            ["LongGuns", "Pistols", "Melee"].forEach(category => {
 | 
			
		||||
                document.getElementById(category + "-list").innerHTML = "";
 | 
			
		||||
                data[category].forEach(item => {
 | 
			
		||||
                    const tr = document.createElement("tr");
 | 
			
		||||
                    tr.setAttribute("data-item-type", item.ItemType);
 | 
			
		||||
@ -319,7 +319,7 @@ function updateInventory() {
 | 
			
		||||
                        }
 | 
			
		||||
                        tr.appendChild(td);
 | 
			
		||||
                    }
 | 
			
		||||
                    document.getElementById("weapon-list").appendChild(tr);
 | 
			
		||||
                    document.getElementById(category + "-list").appendChild(tr);
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@ -548,14 +548,16 @@ function doAcquireWarframe() {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$("#warframe-to-acquire").on("input", () => {
 | 
			
		||||
    $("#warframe-to-acquire").removeClass("is-invalid");
 | 
			
		||||
$("input[list]").on("input", function () {
 | 
			
		||||
    $(this).removeClass("is-invalid");
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function doAcquireWeapon() {
 | 
			
		||||
    const uniqueName = getKey(document.getElementById("weapon-to-acquire"));
 | 
			
		||||
function doAcquireWeapon(category) {
 | 
			
		||||
    const uniqueName = getKey(document.getElementById("acquire-type-" + category));
 | 
			
		||||
    if (!uniqueName) {
 | 
			
		||||
        $("#weapon-to-acquire").addClass("is-invalid").focus();
 | 
			
		||||
        $("#acquire-type-" + category)
 | 
			
		||||
            .addClass("is-invalid")
 | 
			
		||||
            .focus();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    revalidateAuthz(() => {
 | 
			
		||||
@ -570,16 +572,12 @@ function doAcquireWeapon() {
 | 
			
		||||
            ])
 | 
			
		||||
        });
 | 
			
		||||
        req.done(() => {
 | 
			
		||||
            document.getElementById("weapon-to-acquire").value = "";
 | 
			
		||||
            document.getElementById("acquire-type-" + category).value = "";
 | 
			
		||||
            updateInventory();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$("#weapon-to-acquire").on("input", () => {
 | 
			
		||||
    $("#weapon-to-acquire").removeClass("is-invalid");
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function dispatchAddItemsRequestsBatch(requests) {
 | 
			
		||||
    revalidateAuthz(() => {
 | 
			
		||||
        const req = $.post({
 | 
			
		||||
@ -650,7 +648,9 @@ function maxRankAllWarframes() {
 | 
			
		||||
 | 
			
		||||
function addMissingWeapons() {
 | 
			
		||||
    const requests = [];
 | 
			
		||||
    document.querySelectorAll("#datalist-weapons option").forEach(elm => {
 | 
			
		||||
    document
 | 
			
		||||
        .querySelectorAll("#datalist-LongGuns option, #datalist-Pistols option, #datalist-Melee option")
 | 
			
		||||
        .forEach(elm => {
 | 
			
		||||
            if (!document.querySelector("#weapon-list [data-item-type='" + elm.getAttribute("data-key") + "']")) {
 | 
			
		||||
                requests.push({ type: "Weapon", internalName: elm.getAttribute("data-key") });
 | 
			
		||||
            }
 | 
			
		||||
@ -809,10 +809,6 @@ function doAcquireMiscItems() {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$("#miscitem-type").on("input", () => {
 | 
			
		||||
    $("#miscitem-type").removeClass("is-invalid");
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function doAcquireRiven() {
 | 
			
		||||
    let fingerprint;
 | 
			
		||||
    try {
 | 
			
		||||
@ -925,10 +921,6 @@ function doAcquireMod() {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$("#mod-to-acquire").on("input", () => {
 | 
			
		||||
    $("#mod-to-acquire").removeClass("is-invalid");
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const uiConfigs = [...$("#server-settings input[id]")].map(x => x.id);
 | 
			
		||||
 | 
			
		||||
function doChangeSettings() {
 | 
			
		||||
@ -1155,10 +1147,6 @@ function doPushArchonCrystalUpgrade() {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$("[list='datalist-archonCrystalUpgrades']").on("input", () => {
 | 
			
		||||
    $("[list='datalist-archonCrystalUpgrades']").removeClass("is-invalid");
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function doPopArchonCrystalUpgrade(type) {
 | 
			
		||||
    revalidateAuthz(() => {
 | 
			
		||||
        $.get(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user