feat(webui): add "max rank all warframes" & "max rank all weapons" #783
@ -96,9 +96,9 @@
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="row g-3">
 | 
			
		||||
                    <div class="col-lg-6">
 | 
			
		||||
                        <div class="card mb-3">
 | 
			
		||||
                        <div class="card mb-3" style="height: 480px;">
 | 
			
		||||
                            <h5 class="card-header">Warframes</h5>
 | 
			
		||||
                            <div class="card-body">
 | 
			
		||||
                            <div class="card-body overflow-auto">
 | 
			
		||||
                                <form class="input-group mb-3" onsubmit="doAcquireWarframe();return false;">
 | 
			
		||||
                                    <input class="form-control" id="warframe-to-acquire" list="datalist-warframes" />
 | 
			
		||||
                                    <button class="btn btn-primary" type="submit">Add</button>
 | 
			
		||||
@ -108,18 +108,11 @@
 | 
			
		||||
                                </table>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="card mb-3">
 | 
			
		||||
                            <h5 class="card-header">Bulk Actions</h5>
 | 
			
		||||
                            <div class="card-body">
 | 
			
		||||
                                <button class="btn btn-primary" onclick="addMissingWarframes();">Add Missing Warframes</button>
 | 
			
		||||
                                <button class="btn btn-primary" onclick="addMissingWeapons();">Add Missing Weapons</button>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="col-lg-6">
 | 
			
		||||
                        <div class="card mb-3">
 | 
			
		||||
                        <div class="card mb-3" style="height: 480px;">
 | 
			
		||||
                            <h5 class="card-header">Weapons</h5>
 | 
			
		||||
                            <div class="card-body">
 | 
			
		||||
                            <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" />
 | 
			
		||||
                                    <button class="btn btn-primary" type="submit">Add</button>
 | 
			
		||||
@ -131,6 +124,15 @@
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="card mb-3">
 | 
			
		||||
                    <h5 class="card-header">Bulk Actions</h5>
 | 
			
		||||
                    <div class="card-body d-flex flex-wrap gap-2">
 | 
			
		||||
                        <button class="btn btn-primary" onclick="addMissingWarframes();">Add Missing Warframes</button>
 | 
			
		||||
                        <button class="btn btn-primary" onclick="addMissingWeapons();">Add Missing Weapons</button>
 | 
			
		||||
                        <button class="btn btn-success" onclick="maxRankAllWarframes()">Max Rank All Warframes</button>
 | 
			
		||||
                        <button class="btn btn-success" onclick="maxRankAllWeapons()">Max Rank All Weapons</button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div id="powersuit-route" data-route="~ /webui/powersuit/(.+)" data-title="Inventory | OpenWF WebUI">
 | 
			
		||||
                <h3 class="mb-0"></h3>
 | 
			
		||||
 | 
			
		||||
@ -605,6 +605,46 @@ function addMissingWarframes() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function maxRankAllWarframes() {
 | 
			
		||||
    const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
 | 
			
		||||
 | 
			
		||||
    req.done(data => {
 | 
			
		||||
        window.itemListPromise.then(itemMap => {
 | 
			
		||||
            const batchData = { Suits: [], SpecialItems: [] };
 | 
			
		||||
 | 
			
		||||
            data.Suits.forEach(item => {
 | 
			
		||||
                if (item.XP < 1_600_000) {
 | 
			
		||||
                    batchData.Suits.push({
 | 
			
		||||
                        ItemId: { $oid: item.ItemId.$oid },
 | 
			
		||||
                        XP: 1_600_000 - item.XP
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if ("exalted" in itemMap[item.ItemType]) {
 | 
			
		||||
                    for (const exaltedType of itemMap[item.ItemType].exalted) {
 | 
			
		||||
                        const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType);
 | 
			
		||||
                        if (exaltedItem) {
 | 
			
		||||
                            const exaltedCap = itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
 | 
			
		||||
                            if (exaltedItem.XP < exaltedCap) {
 | 
			
		||||
                                batchData.SpecialItems.push({
 | 
			
		||||
                                    ItemId: { $oid: exaltedItem.ItemId.$oid },
 | 
			
		||||
                                    XP: exaltedCap
 | 
			
		||||
                                });
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            if (batchData.Suits.length > 0 || batchData.SpecialItems.length > 0) {
 | 
			
		||||
                return sendBatchGearExp(batchData);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            alert("No Warframes to rank up.");
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
					
	
	
	
	
	
	
	
	 | 
			||||
 | 
			
		||||
function addMissingWeapons() {
 | 
			
		||||
    const requests = [];
 | 
			
		||||
    document.querySelectorAll("#datalist-weapons option").forEach(elm => {
 | 
			
		||||
@ -620,6 +660,34 @@ function addMissingWeapons() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function maxRankAllWeapons() {
 | 
			
		||||
    const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
 | 
			
		||||
 | 
			
		||||
    req.done(data => {
 | 
			
		||||
        const batchData = {};
 | 
			
		||||
 | 
			
		||||
        ["LongGuns", "Pistols", "Melee"].forEach(category => {
 | 
			
		||||
            data[category].forEach(item => {
 | 
			
		||||
                if (item.XP < 800_000) {
 | 
			
		||||
                    if (!batchData[category]) {
 | 
			
		||||
                        batchData[category] = [];
 | 
			
		||||
                    }
 | 
			
		||||
                    batchData[category].push({
 | 
			
		||||
                        ItemId: { $oid: item.ItemId.$oid },
 | 
			
		||||
                        XP: 800_000 - item.XP
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (Object.keys(batchData).length > 0) {
 | 
			
		||||
            return sendBatchGearExp(batchData);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        alert("No weapons to rank up.");
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function addGearExp(category, oid, xp) {
 | 
			
		||||
    const data = {};
 | 
			
		||||
    data[category] = [
 | 
			
		||||
@ -641,6 +709,18 @@ function addGearExp(category, oid, xp) {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sendBatchGearExp(data) {
 | 
			
		||||
    revalidateAuthz(() => {
 | 
			
		||||
        $.post({
 | 
			
		||||
            url: "/api/missionInventoryUpdate.php?" + window.authz,
 | 
			
		||||
            contentType: "text/plain",
 | 
			
		||||
            data: JSON.stringify(data)
 | 
			
		||||
        }).done(() => {
 | 
			
		||||
            updateInventory();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function renameGear(category, oid, name) {
 | 
			
		||||
    revalidateAuthz(() => {
 | 
			
		||||
        $.post({
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	
🛠️ Refactor suggestion
Add error handling and improve user feedback.
The function needs the following improvements:
Consider this implementation:
📝 Committable suggestion
🧰 Tools
🪛 eslint
[error] 608-608: 'maxRankAllWarframes' is defined but never used.
(@typescript-eslint/no-unused-vars)
[error] 609-609: '$' is not defined.
(no-undef)