From d0b561651cf00b088798cd0ae8c2956b5aceaf4b Mon Sep 17 00:00:00 2001 From: contributor Date: Sat, 15 Nov 2025 17:00:12 +0200 Subject: [PATCH 1/8] extract checkAndUpdateTab function --- src/pages/Background/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index 946015c..2dc78c4 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -298,7 +298,7 @@ browser.runtime.onInstalled.addListener(function () { }); }); -browser.tabs.onActivated.addListener(async ({ tabId }) => { +async function checkAndUpdateTab(tabId) { const cachedConfig = await getConfig(); const linkExists = await checkLinkExists( cachedConfig.baseUrl, @@ -322,6 +322,10 @@ browser.tabs.onActivated.addListener(async ({ tabId }) => { browser.browserAction.setBadgeText({ tabId, text: '' }); } } +} + +browser.tabs.onActivated.addListener(async ({ tabId }) => { + await checkAndUpdateTab(tabId); }); // Omnibox implementation From eb258adda275d4eb0cb35deb296f2582bab29aa7 Mon Sep 17 00:00:00 2001 From: contributor Date: Sat, 15 Nov 2025 17:07:50 +0200 Subject: [PATCH 2/8] update checkmark state on tabs.onUpdated event only load on complete https://github.com/contributor/self-hosted-linkwarden-extension/pull/2#discussion_r2539167168 --- src/pages/Background/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index 2dc78c4..6fb6c4a 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -324,10 +324,18 @@ async function checkAndUpdateTab(tabId) { } } +// Listen for tab switches (to update icon for already-loaded tabs) browser.tabs.onActivated.addListener(async ({ tabId }) => { await checkAndUpdateTab(tabId); }); +// Listen for URL changes (navigation, page loads) +browser.tabs.onUpdated.addListener(async (tabId, changeInfo) => { + if (changeInfo.status === 'complete') { + await checkAndUpdateTab(tabId); + } +}); + // Omnibox implementation browser.omnibox.onInputStarted.addListener(async () => { From 92cfdb6aff5cc28c17ea78e85c516747c4197ec1 Mon Sep 17 00:00:00 2001 From: contributor Date: Sat, 15 Nov 2025 17:20:12 +0200 Subject: [PATCH 3/8] update checkmark state on on browser startup --- src/pages/Background/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index 6fb6c4a..586ba52 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -336,6 +336,14 @@ browser.tabs.onUpdated.addListener(async (tabId, changeInfo) => { } }); +// On extension startup - check current tab +(async () => { + const tabs = await browser.tabs.query({ active: true, currentWindow: true }); + if (tabs[0]?.url && tabs[0].id !== undefined) { + await checkAndUpdateTab(tabs[0].id); + } +})(); + // Omnibox implementation browser.omnibox.onInputStarted.addListener(async () => { From 96985fa3c297ad2f4f738cca183adcc0539c31d3 Mon Sep 17 00:00:00 2001 From: contributor Date: Tue, 18 Nov 2025 20:14:53 +0200 Subject: [PATCH 4/8] add typing --- src/pages/Background/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index 586ba52..b9756e5 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -298,7 +298,7 @@ browser.runtime.onInstalled.addListener(function () { }); }); -async function checkAndUpdateTab(tabId) { +async function checkAndUpdateTab(tabId: number) { const cachedConfig = await getConfig(); const linkExists = await checkLinkExists( cachedConfig.baseUrl, From c8258070c8aee8357a1896498bdb4387eea3eaac Mon Sep 17 00:00:00 2001 From: contributor Date: Wed, 19 Nov 2025 00:00:12 +0200 Subject: [PATCH 5/8] use array destructure to query browser tab on startup --- src/pages/Background/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index b9756e5..c0e0ad3 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -338,9 +338,9 @@ browser.tabs.onUpdated.addListener(async (tabId, changeInfo) => { // On extension startup - check current tab (async () => { - const tabs = await browser.tabs.query({ active: true, currentWindow: true }); - if (tabs[0]?.url && tabs[0].id !== undefined) { - await checkAndUpdateTab(tabs[0].id); + const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); + if (tab?.id) { + await checkAndUpdateTab(tab.id); } })(); From 09c17fc299f22038294f7cbb0d7fe9f104417822 Mon Sep 17 00:00:00 2001 From: contributor Date: Tue, 18 Nov 2025 20:59:29 +0200 Subject: [PATCH 6/8] prevent check for background pages --- src/pages/Background/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index c0e0ad3..1619ee1 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -330,8 +330,8 @@ browser.tabs.onActivated.addListener(async ({ tabId }) => { }); // Listen for URL changes (navigation, page loads) -browser.tabs.onUpdated.addListener(async (tabId, changeInfo) => { - if (changeInfo.status === 'complete') { +browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => { + if (changeInfo.status === 'complete' && tab?.active) { await checkAndUpdateTab(tabId); } }); From bb3072077adab0154d1568a4a6c605486b1b0465 Mon Sep 17 00:00:00 2001 From: contributor Date: Tue, 18 Nov 2025 23:37:12 +0200 Subject: [PATCH 7/8] add error handling for checkAndUpdateTab promise --- src/pages/Background/index.ts | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index 1619ee1..608f04b 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -326,21 +326,33 @@ async function checkAndUpdateTab(tabId: number) { // Listen for tab switches (to update icon for already-loaded tabs) browser.tabs.onActivated.addListener(async ({ tabId }) => { - await checkAndUpdateTab(tabId); + try { + await checkAndUpdateTab(tabId); + } catch (error) { + console.error(`Error checking tab ${tabId} on activation:`, error); + } }); // Listen for URL changes (navigation, page loads) browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => { - if (changeInfo.status === 'complete' && tab?.active) { - await checkAndUpdateTab(tabId); + try { + if (changeInfo.status === 'complete' && tab?.active) { + await checkAndUpdateTab(tabId); + } + } catch (error) { + console.error(`Error checking tab ${tabId} on update:`, error); } }); // On extension startup - check current tab (async () => { - const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); - if (tab?.id) { - await checkAndUpdateTab(tab.id); + try { + const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); + if (tab?.id) { + await checkAndUpdateTab(tab.id); + } + } catch (error) { + console.error(`Error checking tab on startup:`, error); } })(); From acf52d5821bf17b6f893c3be24ea304577556dd0 Mon Sep 17 00:00:00 2001 From: daniel31x13 Date: Sun, 28 Dec 2025 09:46:55 -0500 Subject: [PATCH 8/8] change badge color --- src/pages/Background/index.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/Background/index.ts b/src/pages/Background/index.ts index 608f04b..4f760fe 100644 --- a/src/pages/Background/index.ts +++ b/src/pages/Background/index.ts @@ -307,12 +307,12 @@ async function checkAndUpdateTab(tabId: number) { if (linkExists) { if (browser.action) { browser.action.setBadgeText({ tabId, text: '✓' }); - browser.action.setBadgeBackgroundColor({ tabId, color: '#4688F1' }); + browser.action.setBadgeBackgroundColor({ tabId, color: '#98c0ff' }); } else { browser.browserAction.setBadgeText({ tabId, text: '✓' }); browser.browserAction.setBadgeBackgroundColor({ tabId, - color: '#4688F1', + color: '#98c0ff', }); } } else { @@ -347,7 +347,10 @@ browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => { // On extension startup - check current tab (async () => { try { - const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); + const [tab] = await browser.tabs.query({ + active: true, + currentWindow: true, + }); if (tab?.id) { await checkAndUpdateTab(tab.id); }