From 0731ec2663cde0a3865171ef6f31157b62a58b0f Mon Sep 17 00:00:00 2001 From: smthbh Date: Tue, 29 Apr 2025 08:23:26 -0400 Subject: [PATCH 1/4] add counts of different quests --- src/armory/Armory.ts | 8 ++++++++ static/character-quests-compare.hbs | 5 +++++ static/css/character-quests.css | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/src/armory/Armory.ts b/src/armory/Armory.ts index 5ab9f66..b301530 100644 --- a/src/armory/Armory.ts +++ b/src/armory/Armory.ts @@ -114,6 +114,14 @@ export class Armory { if (!quest.char2Status) return 'quest-missing-2'; if (quest.char1Status !== quest.char2Status) return 'quest-diff'; return ''; + }, + getDiffCount: function(quests: any[]): number { + return quests.reduce((count, quest) => { + if (!quest.char1Status && quest.char2Status) return count + 1; + if (quest.char1Status && !quest.char2Status) return count + 1; + if (quest.char1Status !== quest.char2Status) return count + 1; + return count; + }, 0); } }, }), diff --git a/static/character-quests-compare.hbs b/static/character-quests-compare.hbs index 5a77e24..558c82c 100644 --- a/static/character-quests-compare.hbs +++ b/static/character-quests-compare.hbs @@ -67,6 +67,11 @@

{{@key}} + {{#with (getDiffCount this)}} + {{#if this}} + ({{this}} different) + {{/if}} + {{/with}}

diff --git a/static/css/character-quests.css b/static/css/character-quests.css index 69f913c..688f311 100644 --- a/static/css/character-quests.css +++ b/static/css/character-quests.css @@ -141,4 +141,11 @@ tr.quest-missing-2 td:nth-child(4) { .quest-compare-section .select select { min-width: 200px; +} + +.diff-count { + font-size: 0.8em; + color: #ffdd57; + margin-left: 10px; + font-weight: normal; } \ No newline at end of file From 40c7755ae7e3c5e3a36ee126922367cac373a819 Mon Sep 17 00:00:00 2001 From: smthbh Date: Tue, 29 Apr 2025 08:59:46 -0400 Subject: [PATCH 2/4] add active quests section --- src/armory/Armory.ts | 31 +++++++++++++++++++++------ src/armory/types/QuestTypes.ts | 17 +++++++++++++++ static/character-quests-compare.hbs | 33 +++++++++++++++++++++++++++++ static/css/character-quests.css | 9 ++++++++ 4 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 src/armory/types/QuestTypes.ts diff --git a/src/armory/Armory.ts b/src/armory/Armory.ts index b301530..c9ff9cd 100644 --- a/src/armory/Armory.ts +++ b/src/armory/Armory.ts @@ -14,6 +14,7 @@ import { IndexController } from "./controllers/IndexController"; import { CharacterController } from "./controllers/CharacterController"; import { GuildController } from "./controllers/GuildController"; import { ArenaController } from "./controllers/ArenaController"; +import { IQuest, IQuestComparison } from './types/QuestTypes'; export class Armory { public characterCustomization: CharacterCustomization; @@ -102,26 +103,44 @@ export class Armory { helpers: { // eslint-disable-next-line @typescript-eslint/no-var-requires ...require("handlebars-helpers")(), - eq: function(a: any, b: any) { - return a === b; - }, - hasInProgressQuests: function(quests: any[]) { + hasInProgressQuests: function(quests: IQuest[]): boolean { return quests.some(quest => quest.status === 'In Progress'); }, - getDiffClass: function(quest: any) { + getDiffClass: function(quest: IQuestComparison): string { if (!quest.char1Status && !quest.char2Status) return ''; if (!quest.char1Status) return 'quest-missing-1'; if (!quest.char2Status) return 'quest-missing-2'; if (quest.char1Status !== quest.char2Status) return 'quest-diff'; return ''; }, - getDiffCount: function(quests: any[]): number { + getDiffCount: function(quests: IQuestComparison[]): number { return quests.reduce((count, quest) => { if (!quest.char1Status && quest.char2Status) return count + 1; if (quest.char1Status && !quest.char2Status) return count + 1; if (quest.char1Status !== quest.char2Status) return count + 1; return count; }, 0); + }, + getActiveQuests: function(categories: { [key: string]: IQuestComparison[] }): (IQuestComparison & { category: string })[] { + const activeQuests: (IQuestComparison & { category: string })[] = []; + Object.entries(categories).forEach(([category, quests]) => { + quests.forEach(quest => { + if (quest.char1Status === 'In Progress' || quest.char2Status === 'In Progress') { + activeQuests.push({ + ...quest, + category + }); + } + }); + }); + return activeQuests.sort((a, b) => { + // First sort by category + const categoryCompare = a.category.localeCompare(b.category); + if (categoryCompare !== 0) return categoryCompare; + + // Then by title within same category + return a.title.localeCompare(b.title); + }); } }, }), diff --git a/src/armory/types/QuestTypes.ts b/src/armory/types/QuestTypes.ts new file mode 100644 index 0000000..a924193 --- /dev/null +++ b/src/armory/types/QuestTypes.ts @@ -0,0 +1,17 @@ +export interface IQuest { + id: number; + title: string; + status: 'Completed' | 'In Progress'; + minLevel: number; + questLevel: number; + questSortID: number; +} + +export interface IQuestComparison { + id: number; + title: string; + questLevel: number; + char1Status?: 'Completed' | 'In Progress'; + char2Status?: 'Completed' | 'In Progress'; + category?: string; +} \ No newline at end of file diff --git a/static/character-quests-compare.hbs b/static/character-quests-compare.hbs index 558c82c..b434bff 100644 --- a/static/character-quests-compare.hbs +++ b/static/character-quests-compare.hbs @@ -63,6 +63,39 @@
+{{! Add this section before the categories loop }} +
+

+ Active Quests + +

+ +
+ + + + + + + + + + + {{#each (getActiveQuests data.categories)}} + + + + + + + {{/each}} + +
QuestArea (Level){{data.char1.name}}{{data.char2.name}}
+ {{this.title}} + {{this.category}} ({{this.questLevel}}){{this.char1Status}}{{this.char2Status}}
+
+
+ {{#each data.categories as |quests category|}}

diff --git a/static/css/character-quests.css b/static/css/character-quests.css index 688f311..e54cc68 100644 --- a/static/css/character-quests.css +++ b/static/css/character-quests.css @@ -148,4 +148,13 @@ tr.quest-missing-2 td:nth-child(4) { color: #ffdd57; margin-left: 10px; font-weight: normal; +} + +.quest-status.In.Progress { + color: #4CAF50; + font-weight: bold; +} + +.quest-category { + font-style: italic; } \ No newline at end of file From 7e673b45d6446e443ee225779d376dfbeef864fa Mon Sep 17 00:00:00 2001 From: smthbh Date: Tue, 29 Apr 2025 09:03:28 -0400 Subject: [PATCH 3/4] indent with tabs for linter --- src/armory/types/QuestTypes.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/armory/types/QuestTypes.ts b/src/armory/types/QuestTypes.ts index a924193..392f1ef 100644 --- a/src/armory/types/QuestTypes.ts +++ b/src/armory/types/QuestTypes.ts @@ -1,17 +1,17 @@ export interface IQuest { - id: number; - title: string; - status: 'Completed' | 'In Progress'; - minLevel: number; - questLevel: number; - questSortID: number; + id: number; + title: string; + status: 'Completed' | 'In Progress'; + minLevel: number; + questLevel: number; + questSortID: number; } export interface IQuestComparison { - id: number; - title: string; - questLevel: number; - char1Status?: 'Completed' | 'In Progress'; - char2Status?: 'Completed' | 'In Progress'; - category?: string; + id: number; + title: string; + questLevel: number; + char1Status?: 'Completed' | 'In Progress'; + char2Status?: 'Completed' | 'In Progress'; + category?: string; } \ No newline at end of file From 07c1e6acb1b5aad2bc27d814e811a5821e90941f Mon Sep 17 00:00:00 2001 From: smthbh Date: Tue, 29 Apr 2025 09:03:48 -0400 Subject: [PATCH 4/4] set linter warnings to 0 --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e469842..32024ee 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -10,4 +10,4 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 - run: npm ci - - run: npm run lint -- --max-warnings=4 + - run: npm run lint -- --max-warnings=0