Skip to content

Commit 1e076df

Browse files
authored
Merge pull request #86 from OSRS-Taskman/add_names_tasklist_modal
add names tasklist modal
2 parents 55b2605 + 52940a6 commit 1e076df

1 file changed

Lines changed: 92 additions & 3 deletions

File tree

static/js/task.js

Lines changed: 92 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,89 @@ function attachFallbackImage(imgElement, fallbackSrc) {
483483
};
484484
}
485485

486+
const verificationItemNameCache = new Map();
487+
const verificationItemNameRequestCache = new Map();
488+
const runeliteItemIdNameCache = new Map();
489+
let runeliteItemIdNameLoadPromise = null;
490+
491+
function toDisplayItemName(itemIdConstantName) {
492+
return itemIdConstantName
493+
.toLowerCase()
494+
.split('_')
495+
.map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))
496+
.join(' ')
497+
.trim();
498+
}
499+
500+
function loadRuneLiteItemIdNames() {
501+
if (runeliteItemIdNameLoadPromise) {
502+
return runeliteItemIdNameLoadPromise;
503+
}
504+
505+
const rawItemIdFileUrl = 'https://raw.githubusercontent.com/runelite/runelite/master/runelite-api/src/main/java/net/runelite/api/ItemID.java';
506+
const itemIdLinePattern = /^\s*public\s+static\s+final\s+int\s+([A-Z0-9_]+)\s*=\s*(\d+)\s*;\s*$/gm;
507+
508+
runeliteItemIdNameLoadPromise = fetch(rawItemIdFileUrl)
509+
.then((response) => {
510+
if (!response.ok) {
511+
return '';
512+
}
513+
return response.text();
514+
})
515+
.then((source) => {
516+
if (!source) {
517+
return runeliteItemIdNameCache;
518+
}
519+
520+
let match = itemIdLinePattern.exec(source);
521+
while (match !== null) {
522+
const constantName = match[1];
523+
const parsedItemId = parseInt(match[2], 10);
524+
if (!Number.isNaN(parsedItemId) && !runeliteItemIdNameCache.has(parsedItemId)) {
525+
runeliteItemIdNameCache.set(parsedItemId, toDisplayItemName(constantName));
526+
}
527+
match = itemIdLinePattern.exec(source);
528+
}
529+
530+
return runeliteItemIdNameCache;
531+
})
532+
.catch(() => runeliteItemIdNameCache);
533+
534+
return runeliteItemIdNameLoadPromise;
535+
}
536+
537+
function formatVerificationItemTooltip(itemId, itemName, isRecorded) {
538+
const actionHint = isRecorded ? 'click to mark incomplete' : 'click to mark complete';
539+
const displayName = itemName || 'item';
540+
return `${displayName}(${itemId}) - ${actionHint}`;
541+
}
542+
543+
function fetchVerificationItemName(itemId) {
544+
if (verificationItemNameCache.has(itemId)) {
545+
return Promise.resolve(verificationItemNameCache.get(itemId));
546+
}
547+
548+
if (verificationItemNameRequestCache.has(itemId)) {
549+
return verificationItemNameRequestCache.get(itemId);
550+
}
551+
552+
const itemNameRequest = loadRuneLiteItemIdNames()
553+
.then((itemMap) => {
554+
const itemName = itemMap.get(itemId) || null;
555+
verificationItemNameCache.set(itemId, itemName);
556+
verificationItemNameRequestCache.delete(itemId);
557+
return itemName;
558+
})
559+
.catch(() => {
560+
verificationItemNameCache.set(itemId, null);
561+
verificationItemNameRequestCache.delete(itemId);
562+
return null;
563+
});
564+
565+
verificationItemNameRequestCache.set(itemId, itemNameRequest);
566+
return itemNameRequest;
567+
}
568+
486569
function openTaskActionModal(options) {
487570
const {
488571
actionLabel,
@@ -553,12 +636,18 @@ function openTaskActionModal(options) {
553636
image.width = 36;
554637
image.height = 32;
555638
image.loading = 'lazy';
556-
image.title = isRecorded
557-
? `Item ID: ${itemId} (click to mark incomplete)`
558-
: `Item ID: ${itemId} (click to mark complete)`;
639+
image.title = formatVerificationItemTooltip(itemId, null, isRecorded);
559640
image.setAttribute('role', 'button');
560641
image.tabIndex = 0;
561642

643+
fetchVerificationItemName(itemId).then((itemName) => {
644+
if (!image.isConnected) {
645+
return;
646+
}
647+
image.title = formatVerificationItemTooltip(itemId, itemName, isRecorded);
648+
image.alt = itemName ? `${itemName} (${itemId})` : `Item ${itemId}`;
649+
});
650+
562651
const toggleItem = () => {
563652
if (selectedItemIds.has(itemId)) {
564653
selectedItemIds.delete(itemId);

0 commit comments

Comments
 (0)