From 71bb8204e2c520612a567c12d4eeebb74e5ff18b Mon Sep 17 00:00:00 2001 From: Idrees Hassan Date: Thu, 13 Nov 2025 18:41:37 -0500 Subject: [PATCH] Add focusing on obsidian elements --- build.js | 2 ++ dist/birb.js | 32 +++++++++++++++++++++++++++++--- dist/extension.zip | Bin 148982 -> 149183 bytes dist/extension/birb.js | 32 +++++++++++++++++++++++++++++--- dist/extension/manifest.json | 2 +- dist/obsidian/main.js | 34 +++++++++++++++++++++++++++++++--- dist/obsidian/manifest.json | 2 +- dist/userscript/birb.user.js | 34 ++++++++++++++++++++++++++++++---- src/application.js | 4 ++-- src/context.js | 26 ++++++++++++++++++++++++++ 10 files changed, 151 insertions(+), 17 deletions(-) diff --git a/build.js b/build.js index 1e11733..027105a 100644 --- a/build.js +++ b/build.js @@ -163,8 +163,10 @@ const obsidianPlugin = ` const { Plugin, Notice } = require('obsidian'); module.exports = class PocketBird extends Plugin { onload() { + console.log("Loading Pocket Bird version ${version}..."); const OBSIDIAN_PLUGIN = this; ${birbJs} + console.log("Pocket Bird loaded!"); } onunload() { diff --git a/dist/birb.js b/dist/birb.js index d82e1f1..5bded46 100644 --- a/dist/birb.js +++ b/dist/birb.js @@ -881,6 +881,17 @@ throw new Error("Method not implemented"); } + /** + * @returns {string[]} A list of CSS selectors for focusable elements + */ + getFocusableElements() { + return ["img", "video", ".birb-sticky-note"]; + } + + getFocusElementTopMargin() { + return 80; + } + /** * @returns {string} The current path of the active page in this context */ @@ -1084,6 +1095,21 @@ this.putSaveData({}); } + /** @override */ + getFocusElementTopMargin() { + return 10; + } + + /** @override */ + getFocusableElements() { + const elements = [ + ".workspace-leaf", + ".cm-callout", + ".HyperMD-codeblock-begin" + ]; + return super.getFocusableElements().concat(elements); + } + /** @override */ areStickyNotesEnabled() { return false; @@ -1795,7 +1821,6 @@ // Focus element constraints const MIN_FOCUS_ELEMENT_WIDTH = 100; - const MIN_FOCUS_ELEMENT_TOP = 80; /** @type {Partial} */ let userSettings = {}; @@ -1924,7 +1949,7 @@ insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem("2025.11.13.16", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.16"); }, false), + new MenuItem("2025.11.13.27", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.27"); }, false), ]; const styleElement = document.createElement("style"); @@ -2551,7 +2576,8 @@ if (frozen) { return false; } - const elements = document.querySelectorAll("img, video, .birb-sticky-note"); + const MIN_FOCUS_ELEMENT_TOP = getContext().getFocusElementTopMargin(); + const elements = document.querySelectorAll(getContext().getFocusableElements().join(", ")); const inWindow = Array.from(elements).filter((img) => { const rect = img.getBoundingClientRect(); return rect.left >= 0 && rect.top >= MIN_FOCUS_ELEMENT_TOP && rect.right <= window.innerWidth && rect.top <= getWindowHeight(); diff --git a/dist/extension.zip b/dist/extension.zip index fdc7731738f10a746a90114d6b69dd65d71a3431..416407c8359f1d3f0ea0b261d5f6a6a36f8e50eb 100644 GIT binary patch delta 26861 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 */ let userSettings = {}; @@ -1924,7 +1949,7 @@ insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem("2025.11.13.16", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.16"); }, false), + new MenuItem("2025.11.13.27", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.27"); }, false), ]; const styleElement = document.createElement("style"); @@ -2551,7 +2576,8 @@ if (frozen) { return false; } - const elements = document.querySelectorAll("img, video, .birb-sticky-note"); + const MIN_FOCUS_ELEMENT_TOP = getContext().getFocusElementTopMargin(); + const elements = document.querySelectorAll(getContext().getFocusableElements().join(", ")); const inWindow = Array.from(elements).filter((img) => { const rect = img.getBoundingClientRect(); return rect.left >= 0 && rect.top >= MIN_FOCUS_ELEMENT_TOP && rect.right <= window.innerWidth && rect.top <= getWindowHeight(); diff --git a/dist/extension/manifest.json b/dist/extension/manifest.json index c8f1e33..dfa33f3 100644 --- a/dist/extension/manifest.json +++ b/dist/extension/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Pocket Bird", "description": "It's a pet bird in your browser, what more could you want?", - "version": "2025.11.13.16", + "version": "2025.11.13.27", "homepage_url": "https://idreesinc.com", "icons": { "48": "images/icons/transparent/48x48x1.png", diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index e545261..4386c5f 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -2,6 +2,7 @@ const { Plugin, Notice } = require('obsidian'); module.exports = class PocketBird extends Plugin { onload() { + console.log("Loading Pocket Bird version 2025.11.13.27..."); const OBSIDIAN_PLUGIN = this; (function () { 'use strict'; @@ -886,6 +887,17 @@ module.exports = class PocketBird extends Plugin { throw new Error("Method not implemented"); } + /** + * @returns {string[]} A list of CSS selectors for focusable elements + */ + getFocusableElements() { + return ["img", "video", ".birb-sticky-note"]; + } + + getFocusElementTopMargin() { + return 80; + } + /** * @returns {string} The current path of the active page in this context */ @@ -1089,6 +1101,21 @@ module.exports = class PocketBird extends Plugin { this.putSaveData({}); } + /** @override */ + getFocusElementTopMargin() { + return 10; + } + + /** @override */ + getFocusableElements() { + const elements = [ + ".workspace-leaf", + ".cm-callout", + ".HyperMD-codeblock-begin" + ]; + return super.getFocusableElements().concat(elements); + } + /** @override */ areStickyNotesEnabled() { return false; @@ -1800,7 +1827,6 @@ module.exports = class PocketBird extends Plugin { // Focus element constraints const MIN_FOCUS_ELEMENT_WIDTH = 100; - const MIN_FOCUS_ELEMENT_TOP = 80; /** @type {Partial} */ let userSettings = {}; @@ -1929,7 +1955,7 @@ module.exports = class PocketBird extends Plugin { insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem("2025.11.13.16", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.16"); }, false), + new MenuItem("2025.11.13.27", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.27"); }, false), ]; const styleElement = document.createElement("style"); @@ -2556,7 +2582,8 @@ module.exports = class PocketBird extends Plugin { if (frozen) { return false; } - const elements = document.querySelectorAll("img, video, .birb-sticky-note"); + const MIN_FOCUS_ELEMENT_TOP = getContext().getFocusElementTopMargin(); + const elements = document.querySelectorAll(getContext().getFocusableElements().join(", ")); const inWindow = Array.from(elements).filter((img) => { const rect = img.getBoundingClientRect(); return rect.left >= 0 && rect.top >= MIN_FOCUS_ELEMENT_TOP && rect.right <= window.innerWidth && rect.top <= getWindowHeight(); @@ -2720,6 +2747,7 @@ module.exports = class PocketBird extends Plugin { })(); + console.log("Pocket Bird loaded!"); } onunload() { diff --git a/dist/obsidian/manifest.json b/dist/obsidian/manifest.json index d692265..7591d6d 100644 --- a/dist/obsidian/manifest.json +++ b/dist/obsidian/manifest.json @@ -1,7 +1,7 @@ { "id": "pocket-bird", "name": "Pocket Bird", - "version": "2025.11.13.16", + "version": "2025.11.13.27", "minAppVersion": "0.15.0", "description": "It's a pet bird in your Obsidian, what more could you want?", "author": "Idrees Hassan", diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index c6e381d..364d825 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Pocket Bird // @namespace https://idreesinc.com -// @version 2025.11.13.16 +// @version 2025.11.13.27 // @description It's a bird that hops around your web browser, the future is here // @author Idrees // @downloadURL https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/userscript/birb.user.js @@ -895,6 +895,17 @@ throw new Error("Method not implemented"); } + /** + * @returns {string[]} A list of CSS selectors for focusable elements + */ + getFocusableElements() { + return ["img", "video", ".birb-sticky-note"]; + } + + getFocusElementTopMargin() { + return 80; + } + /** * @returns {string} The current path of the active page in this context */ @@ -1098,6 +1109,21 @@ this.putSaveData({}); } + /** @override */ + getFocusElementTopMargin() { + return 10; + } + + /** @override */ + getFocusableElements() { + const elements = [ + ".workspace-leaf", + ".cm-callout", + ".HyperMD-codeblock-begin" + ]; + return super.getFocusableElements().concat(elements); + } + /** @override */ areStickyNotesEnabled() { return false; @@ -1809,7 +1835,6 @@ // Focus element constraints const MIN_FOCUS_ELEMENT_WIDTH = 100; - const MIN_FOCUS_ELEMENT_TOP = 80; /** @type {Partial} */ let userSettings = {}; @@ -1938,7 +1963,7 @@ insertModal(`${birdBirb()} Mode`, message); }), new Separator(), - new MenuItem("2025.11.13.16", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.16"); }, false), + new MenuItem("2025.11.13.27", () => { alert("Thank you for using Pocket Bird! You are on version: 2025.11.13.27"); }, false), ]; const styleElement = document.createElement("style"); @@ -2565,7 +2590,8 @@ if (frozen) { return false; } - const elements = document.querySelectorAll("img, video, .birb-sticky-note"); + const MIN_FOCUS_ELEMENT_TOP = getContext().getFocusElementTopMargin(); + const elements = document.querySelectorAll(getContext().getFocusableElements().join(", ")); const inWindow = Array.from(elements).filter((img) => { const rect = img.getBoundingClientRect(); return rect.left >= 0 && rect.top >= MIN_FOCUS_ELEMENT_TOP && rect.right <= window.innerWidth && rect.top <= getWindowHeight(); diff --git a/src/application.js b/src/application.js index bd52124..8489f65 100644 --- a/src/application.js +++ b/src/application.js @@ -104,7 +104,6 @@ const PET_FEATHER_BOOST = 2; // Focus element constraints const MIN_FOCUS_ELEMENT_WIDTH = 100; -const MIN_FOCUS_ELEMENT_TOP = 80; /** @type {Partial} */ let userSettings = {}; @@ -864,7 +863,8 @@ Promise.all([ if (frozen) { return false; } - const elements = document.querySelectorAll("img, video, .birb-sticky-note"); + const MIN_FOCUS_ELEMENT_TOP = getContext().getFocusElementTopMargin(); + const elements = document.querySelectorAll(getContext().getFocusableElements().join(", ")); const inWindow = Array.from(elements).filter((img) => { const rect = img.getBoundingClientRect(); return rect.left >= 0 && rect.top >= MIN_FOCUS_ELEMENT_TOP && rect.right <= window.innerWidth && rect.top <= getWindowHeight(); diff --git a/src/context.js b/src/context.js index 31640bb..7e21dbc 100644 --- a/src/context.js +++ b/src/context.js @@ -42,6 +42,17 @@ export class Context { throw new Error("Method not implemented"); } + /** + * @returns {string[]} A list of CSS selectors for focusable elements + */ + getFocusableElements() { + return ["img", "video", ".birb-sticky-note"]; + } + + getFocusElementTopMargin() { + return 80; + } + /** * @returns {string} The current path of the active page in this context */ @@ -245,6 +256,21 @@ class ObsidianContext extends Context { this.putSaveData({}); } + /** @override */ + getFocusElementTopMargin() { + return 10; + } + + /** @override */ + getFocusableElements() { + const elements = [ + ".workspace-leaf", + ".cm-callout", + ".HyperMD-codeblock-begin" + ]; + return super.getFocusableElements().concat(elements); + } + /** @override */ areStickyNotesEnabled() { return false;