diff --git a/birb.js b/birb.js index 6c578fa..67a670e 100644 --- a/birb.js +++ b/birb.js @@ -857,6 +857,46 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI save(); } + /** + * @param {StickyNote} stickyNote + * @returns {boolean} Whether the given sticky note is applicable to the current site/page + */ + function isStickyNoteApplicable(stickyNote) { + const stickyNoteUrl = stickyNote.site; + const currentUrl = window.location.href; + const stickyNoteWebsite = stickyNoteUrl.split("?")[0]; + const currentWebsite = currentUrl.split("?")[0]; + + debug("Comparing " + stickyNoteUrl + " with " + currentUrl); + + if (stickyNoteWebsite !== currentWebsite) { + return false; + } + + /** @type {Record} */ + const stickyNoteParams = stickyNoteUrl.split("?")[1]?.split("&").reduce((params, param) => { + const [key, value] = param.split("="); + params[key] = value; + return params; + }, {}); + + /** @type {Record} */ + const currentParams = currentUrl.split("?")[1]?.split("&").reduce((params, param) => { + const [key, value] = param.split("="); + params[key] = value; + return params; + }, {}); + + debug("Comparing params: ", stickyNoteParams, currentParams); + + if (window.location.hostname === "www.youtube.com") { + if (currentParams.v !== undefined && currentParams.v !== stickyNoteParams.v) { + return false; + } + } + return true; + } + function init() { if (window !== window.top) { // Skip installation if within an iframe @@ -911,7 +951,7 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI // Render all sticky notes for (let stickyNote of stickyNotes) { - if (stickyNote.site.split("?")[0] === window.location.href.split("?")[0]) { + if (isStickyNoteApplicable(stickyNote)) { renderStickyNote(stickyNote); } } diff --git a/build.js b/build.js index 0dd712e..3c70a1f 100644 --- a/build.js +++ b/build.js @@ -24,7 +24,7 @@ const userScriptHeader = `// ==UserScript== // @name Browser Bird // @namespace https://idreesinc.com -// @version 2025-08-16-3 +// @version 2025-08-16-4 // @description birb // @author Idrees // @downloadURL https://github.com/IdreesInc/Browser-Bird/raw/refs/heads/main/dist/birb.user.js diff --git a/dist/birb.js b/dist/birb.js index 7140be1..21acde7 100644 --- a/dist/birb.js +++ b/dist/birb.js @@ -1175,6 +1175,46 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI save(); } + /** + * @param {StickyNote} stickyNote + * @returns {boolean} Whether the given sticky note is applicable to the current site/page + */ + function isStickyNoteApplicable(stickyNote) { + const stickyNoteUrl = stickyNote.site; + const currentUrl = window.location.href; + const stickyNoteWebsite = stickyNoteUrl.split("?")[0]; + const currentWebsite = currentUrl.split("?")[0]; + + debug("Comparing " + stickyNoteUrl + " with " + currentUrl); + + if (stickyNoteWebsite !== currentWebsite) { + return false; + } + + /** @type {Record} */ + const stickyNoteParams = stickyNoteUrl.split("?")[1]?.split("&").reduce((params, param) => { + const [key, value] = param.split("="); + params[key] = value; + return params; + }, {}); + + /** @type {Record} */ + const currentParams = currentUrl.split("?")[1]?.split("&").reduce((params, param) => { + const [key, value] = param.split("="); + params[key] = value; + return params; + }, {}); + + debug("Comparing params: ", stickyNoteParams, currentParams); + + if (window.location.hostname === "www.youtube.com") { + if (currentParams.v !== undefined && currentParams.v !== stickyNoteParams.v) { + return false; + } + } + return true; + } + function init() { if (window !== window.top) { // Skip installation if within an iframe @@ -1229,7 +1269,7 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI // Render all sticky notes for (let stickyNote of stickyNotes) { - if (stickyNote.site.split("?")[0] === window.location.href.split("?")[0]) { + if (isStickyNoteApplicable(stickyNote)) { renderStickyNote(stickyNote); } } diff --git a/dist/birb.user.js b/dist/birb.user.js index 1f4919f..dd1790e 100644 --- a/dist/birb.user.js +++ b/dist/birb.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Browser Bird // @namespace https://idreesinc.com -// @version 2025-08-16-3 +// @version 2025-08-16-4 // @description birb // @author Idrees // @downloadURL https://github.com/IdreesInc/Browser-Bird/raw/refs/heads/main/dist/birb.user.js @@ -1189,6 +1189,46 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI save(); } + /** + * @param {StickyNote} stickyNote + * @returns {boolean} Whether the given sticky note is applicable to the current site/page + */ + function isStickyNoteApplicable(stickyNote) { + const stickyNoteUrl = stickyNote.site; + const currentUrl = window.location.href; + const stickyNoteWebsite = stickyNoteUrl.split("?")[0]; + const currentWebsite = currentUrl.split("?")[0]; + + debug("Comparing " + stickyNoteUrl + " with " + currentUrl); + + if (stickyNoteWebsite !== currentWebsite) { + return false; + } + + /** @type {Record} */ + const stickyNoteParams = stickyNoteUrl.split("?")[1]?.split("&").reduce((params, param) => { + const [key, value] = param.split("="); + params[key] = value; + return params; + }, {}); + + /** @type {Record} */ + const currentParams = currentUrl.split("?")[1]?.split("&").reduce((params, param) => { + const [key, value] = param.split("="); + params[key] = value; + return params; + }, {}); + + debug("Comparing params: ", stickyNoteParams, currentParams); + + if (window.location.hostname === "www.youtube.com") { + if (currentParams.v !== undefined && currentParams.v !== stickyNoteParams.v) { + return false; + } + } + return true; + } + function init() { if (window !== window.top) { // Skip installation if within an iframe @@ -1243,7 +1283,7 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI // Render all sticky notes for (let stickyNote of stickyNotes) { - if (stickyNote.site.split("?")[0] === window.location.href.split("?")[0]) { + if (isStickyNoteApplicable(stickyNote)) { renderStickyNote(stickyNote); } }