XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

chore(webui): debounce inventory bulk actions (#2533)

Closes #2513 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2533 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

2307a408
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

2 个文件 +49 -39
Modified static/webui/index.html +14 -14
@@ -436,22 +436,22 @@
436 436 <h5 class="card-header" data-loc="general_bulkActions"></h5>
437 437 <div class="card-body">
438 438 <div class="mb-2 d-flex flex-wrap gap-2">
439 <button class="btn btn-primary" onclick="addMissingEquipment(['Suits']);" data-loc="inventory_bulkAddSuits"></button>
440 <button class="btn btn-primary" onclick="addMissingEquipment(['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkAddWeapons"></button>
441 <button class="btn btn-primary" onclick="addMissingEquipment(['SpaceSuits']);" data-loc="inventory_bulkAddSpaceSuits"></button>
442 <button class="btn btn-primary" onclick="addMissingEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
443 <button class="btn btn-primary" onclick="addMissingEquipment(['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
444 <button class="btn btn-primary" onclick="addMissingEquipment(['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
445 <button class="btn btn-primary" onclick="addMissingEvolutionProgress();" data-loc="inventory_bulkAddEvolutionProgress"></button>
439 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Suits']);" data-loc="inventory_bulkAddSuits"></button>
440 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkAddWeapons"></button>
441 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SpaceSuits']);" data-loc="inventory_bulkAddSpaceSuits"></button>
442 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
443 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
444 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
445 <button class="btn btn-primary" onclick="debounce(addMissingEvolutionProgress);" data-loc="inventory_bulkAddEvolutionProgress"></button>
446 446 </div>
447 447 <div class="mb-2 d-flex flex-wrap gap-2">
448 <button class="btn btn-success" onclick="maxRankAllEquipment(['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
449 <button class="btn btn-success" onclick="maxRankAllEquipment(['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkRankUpWeapons"></button>
450 <button class="btn btn-success" onclick="maxRankAllEquipment(['SpaceSuits']);" data-loc="inventory_bulkRankUpSpaceSuits"></button>
451 <button class="btn btn-success" onclick="maxRankAllEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
452 <button class="btn btn-success" onclick="maxRankAllEquipment(['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
453 <button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
454 <button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
448 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
449 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkRankUpWeapons"></button>
450 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SpaceSuits']);" data-loc="inventory_bulkRankUpSpaceSuits"></button>
451 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
452 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
453 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
454 <button class="btn btn-success" onclick="debounce(maxRankAllEvolutions);" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
455 455 </div>
456 456 </div>
457 457 </div>
Modified static/webui/script.js +35 -25
@@ -872,15 +872,11 @@ function updateInventory() {
872 872
873 873 const datalistEvolutionProgress = document.querySelectorAll("#datalist-EvolutionProgress option");
874 874 const formEvolutionProgress = document.querySelector('form[onsubmit*="doAcquireEvolution()"]');
875 const giveAllQEvolutionProgress = document.querySelector(
876 'button[onclick*="addMissingEvolutionProgress()"]'
877 );
878 875
879 876 if (datalistEvolutionProgress.length === 0) {
880 877 formEvolutionProgress.classList.add("disabled");
881 878 formEvolutionProgress.querySelector("input").disabled = true;
882 879 formEvolutionProgress.querySelector("button").disabled = true;
883 giveAllQEvolutionProgress.disabled = true;
884 880 }
885 881
886 882 if (data.CrewShipHarnesses?.length) {
@@ -1541,14 +1537,17 @@ $(document).on("input", "input[list]", function () {
1541 1537 });
1542 1538
1543 1539 function dispatchAddItemsRequestsBatch(requests) {
1544 revalidateAuthz().then(() => {
1545 const req = $.post({
1546 url: "/custom/addItems?" + window.authz,
1547 contentType: "application/json",
1548 data: JSON.stringify(requests)
1549 });
1550 req.done(() => {
1551 updateInventory();
1540 return new Promise(resolve => {
1541 revalidateAuthz().then(() => {
1542 const req = $.post({
1543 url: "/custom/addItems?" + window.authz,
1544 contentType: "application/json",
1545 data: JSON.stringify(requests)
1546 });
1547 req.done(() => {
1548 updateInventory();
1549 resolve();
1550 });
1552 1551 });
1553 1552 });
1554 1553 }
@@ -1569,7 +1568,7 @@ function addMissingEquipment(categories) {
1569 1568 });
1570 1569 });
1571 1570 if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
1572 dispatchAddItemsRequestsBatch(requests);
1571 return dispatchAddItemsRequestsBatch(requests);
1573 1572 }
1574 1573 }
1575 1574
@@ -1585,7 +1584,7 @@ function addMissingEvolutionProgress() {
1585 1584 requests.push({ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 });
1586 1585 });
1587 1586 if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
1588 setEvolutionProgress(requests);
1587 return setEvolutionProgress(requests);
1589 1588 }
1590 1589 }
1591 1590
@@ -1812,14 +1811,17 @@ function maturePet(oid, revert) {
1812 1811 }
1813 1812
1814 1813 function setEvolutionProgress(requests) {
1815 revalidateAuthz().then(() => {
1816 const req = $.post({
1817 url: "/custom/setEvolutionProgress?" + window.authz,
1818 contentType: "application/json",
1819 data: JSON.stringify(requests)
1820 });
1821 req.done(() => {
1822 updateInventory();
1814 return new Promise(resolve => {
1815 revalidateAuthz().then(() => {
1816 const req = $.post({
1817 url: "/custom/setEvolutionProgress?" + window.authz,
1818 contentType: "application/json",
1819 data: JSON.stringify(requests)
1820 });
1821 req.done(() => {
1822 updateInventory();
1823 resolve();
1824 });
1823 1825 });
1824 1826 });
1825 1827 }
@@ -2511,9 +2513,17 @@ function formatDatetime(fmt, date) {
2511 2513 const calls_in_flight = new Set();
2512 2514
2513 2515 async function debounce(func, ...args) {
2514 calls_in_flight.add(func);
2515 await func(...args);
2516 calls_in_flight.delete(func);
2516 if (!func.name) {
2517 throw new Error(`cannot debounce anonymous functions`);
2518 }
2519 const callid = JSON.stringify({ func: func.name, args });
2520 if (!calls_in_flight.has(callid)) {
2521 calls_in_flight.add(callid);
2522 await func(...args);
2523 calls_in_flight.delete(callid);
2524 } else {
2525 console.log("debouncing", callid);
2526 }
2517 2527 }
2518 2528
2519 2529 async function doMaxPlexus() {