From e5956426d5ec811718d23722778d5902a88461f2 Mon Sep 17 00:00:00 2001 From: Idrees Hassan Date: Sun, 4 Jan 2026 18:02:47 -0500 Subject: [PATCH] Add toggle to enable/disable sound --- dist/extension.zip | Bin 149472 -> 149601 bytes dist/extension/birb.js | 22 +++++++++++++++------- dist/obsidian/main.js | 22 +++++++++++++++------- dist/userscript/birb.user.js | 22 +++++++++++++++------- dist/web/birb.embed.js | 22 +++++++++++++++------- dist/web/birb.js | 22 +++++++++++++++------- src/application.js | 17 ++++++++++++----- src/menu.js | 4 ++-- src/stylesheet.css | 1 + 9 files changed, 90 insertions(+), 42 deletions(-) diff --git a/dist/extension.zip b/dist/extension.zip index ca6f85723744c07a5485783e856807da60770285..a5764e6d1db6dbfc243a5c20eb9d7281bfb1c88a 100644 GIT binary patch delta 24931 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 M4rM|5emMdD4_yV_yZ`_I delta 24783 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 diff --git a/dist/extension/birb.js b/dist/extension/birb.js index 8da2977..bfd23de 100644 --- a/dist/extension/birb.js +++ b/dist/extension/birb.js @@ -1209,7 +1209,7 @@ class MenuItem { /** - * @param {string} text + * @param {string|(() => string)} text * @param {() => void} action * @param {boolean} [removeMenu] */ @@ -1258,7 +1258,7 @@ if (item instanceof Separator) { return makeElement("birb-window-separator"); } - let menuItem = makeElement("birb-menu-item", item.text); + let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -1365,7 +1365,8 @@ * @typedef {typeof DEFAULT_SETTINGS} Settings */ const DEFAULT_SETTINGS = { - birbMode: false + birbMode: false, + soundEnabled: true }; // Rendering constants @@ -1578,6 +1579,7 @@ .birb-menu-item { width: calc(100% - var(--birb-double-border-size)); + white-space: nowrap; font-size: 14px; padding-top: 4px; padding-bottom: 4px; @@ -1850,7 +1852,11 @@ const settingsItems = [ new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), new Separator(), - new MenuItem("Toggle Birb Mode", () => { + new MenuItem(() => `${userSettings.soundEnabled ? "Disable" : "Enable"} Sound`, () => { + userSettings.soundEnabled = !userSettings.soundEnabled; + save(); + }), + new MenuItem(() => `Toggle ${birdBirb(true)} Mode`, () => { userSettings.birbMode = !userSettings.birbMode; save(); const message = makeElement("birb-message-content"); @@ -1969,8 +1975,8 @@ /** * Bird or birb, you decide */ - function birdBirb() { - return settings().birbMode ? "Birb" : "Bird"; + function birdBirb(invert = false) { + return settings().birbMode !== invert ? "Birb" : "Bird"; } function init() { @@ -2559,7 +2565,9 @@ function pet() { if (currentState === States.IDLE && birb.getCurrentAnimation() !== Animations.HEART) { - birdsong.chirp(); + if (settings().soundEnabled) { + birdsong.chirp(); + } birb.setAnimation(Animations.HEART); lastPetTimestamp = Date.now(); } diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index edee0f1..9bdb7fc 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -1252,7 +1252,7 @@ module.exports = class PocketBird extends Plugin { class MenuItem { /** - * @param {string} text + * @param {string|(() => string)} text * @param {() => void} action * @param {boolean} [removeMenu] */ @@ -1301,7 +1301,7 @@ module.exports = class PocketBird extends Plugin { if (item instanceof Separator) { return makeElement("birb-window-separator"); } - let menuItem = makeElement("birb-menu-item", item.text); + let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -1408,7 +1408,8 @@ module.exports = class PocketBird extends Plugin { * @typedef {typeof DEFAULT_SETTINGS} Settings */ const DEFAULT_SETTINGS = { - birbMode: false + birbMode: false, + soundEnabled: true }; // Rendering constants @@ -1621,6 +1622,7 @@ module.exports = class PocketBird extends Plugin { .birb-menu-item { width: calc(100% - var(--birb-double-border-size)); + white-space: nowrap; font-size: 14px; padding-top: 4px; padding-bottom: 4px; @@ -1893,7 +1895,11 @@ module.exports = class PocketBird extends Plugin { const settingsItems = [ new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), new Separator(), - new MenuItem("Toggle Birb Mode", () => { + new MenuItem(() => `${userSettings.soundEnabled ? "Disable" : "Enable"} Sound`, () => { + userSettings.soundEnabled = !userSettings.soundEnabled; + save(); + }), + new MenuItem(() => `Toggle ${birdBirb(true)} Mode`, () => { userSettings.birbMode = !userSettings.birbMode; save(); const message = makeElement("birb-message-content"); @@ -2012,8 +2018,8 @@ module.exports = class PocketBird extends Plugin { /** * Bird or birb, you decide */ - function birdBirb() { - return settings().birbMode ? "Birb" : "Bird"; + function birdBirb(invert = false) { + return settings().birbMode !== invert ? "Birb" : "Bird"; } function init() { @@ -2602,7 +2608,9 @@ module.exports = class PocketBird extends Plugin { function pet() { if (currentState === States.IDLE && birb.getCurrentAnimation() !== Animations.HEART) { - birdsong.chirp(); + if (settings().soundEnabled) { + birdsong.chirp(); + } birb.setAnimation(Animations.HEART); lastPetTimestamp = Date.now(); } diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index fc3ebd8..a757130 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -1214,7 +1214,7 @@ class MenuItem { /** - * @param {string} text + * @param {string|(() => string)} text * @param {() => void} action * @param {boolean} [removeMenu] */ @@ -1263,7 +1263,7 @@ if (item instanceof Separator) { return makeElement("birb-window-separator"); } - let menuItem = makeElement("birb-menu-item", item.text); + let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -1370,7 +1370,8 @@ * @typedef {typeof DEFAULT_SETTINGS} Settings */ const DEFAULT_SETTINGS = { - birbMode: false + birbMode: false, + soundEnabled: true }; // Rendering constants @@ -1583,6 +1584,7 @@ .birb-menu-item { width: calc(100% - var(--birb-double-border-size)); + white-space: nowrap; font-size: 14px; padding-top: 4px; padding-bottom: 4px; @@ -1855,7 +1857,11 @@ const settingsItems = [ new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), new Separator(), - new MenuItem("Toggle Birb Mode", () => { + new MenuItem(() => `${userSettings.soundEnabled ? "Disable" : "Enable"} Sound`, () => { + userSettings.soundEnabled = !userSettings.soundEnabled; + save(); + }), + new MenuItem(() => `Toggle ${birdBirb(true)} Mode`, () => { userSettings.birbMode = !userSettings.birbMode; save(); const message = makeElement("birb-message-content"); @@ -1974,8 +1980,8 @@ /** * Bird or birb, you decide */ - function birdBirb() { - return settings().birbMode ? "Birb" : "Bird"; + function birdBirb(invert = false) { + return settings().birbMode !== invert ? "Birb" : "Bird"; } function init() { @@ -2564,7 +2570,9 @@ function pet() { if (currentState === States.IDLE && birb.getCurrentAnimation() !== Animations.HEART) { - birdsong.chirp(); + if (settings().soundEnabled) { + birdsong.chirp(); + } birb.setAnimation(Animations.HEART); lastPetTimestamp = Date.now(); } diff --git a/dist/web/birb.embed.js b/dist/web/birb.embed.js index 83a0d9f..2d2927e 100644 --- a/dist/web/birb.embed.js +++ b/dist/web/birb.embed.js @@ -1194,7 +1194,7 @@ class MenuItem { /** - * @param {string} text + * @param {string|(() => string)} text * @param {() => void} action * @param {boolean} [removeMenu] */ @@ -1243,7 +1243,7 @@ if (item instanceof Separator) { return makeElement("birb-window-separator"); } - let menuItem = makeElement("birb-menu-item", item.text); + let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -1350,7 +1350,8 @@ * @typedef {typeof DEFAULT_SETTINGS} Settings */ const DEFAULT_SETTINGS = { - birbMode: false + birbMode: false, + soundEnabled: true }; // Rendering constants @@ -1563,6 +1564,7 @@ .birb-menu-item { width: calc(100% - var(--birb-double-border-size)); + white-space: nowrap; font-size: 14px; padding-top: 4px; padding-bottom: 4px; @@ -1835,7 +1837,11 @@ const settingsItems = [ new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), new Separator(), - new MenuItem("Toggle Birb Mode", () => { + new MenuItem(() => `${userSettings.soundEnabled ? "Disable" : "Enable"} Sound`, () => { + userSettings.soundEnabled = !userSettings.soundEnabled; + save(); + }), + new MenuItem(() => `Toggle ${birdBirb(true)} Mode`, () => { userSettings.birbMode = !userSettings.birbMode; save(); const message = makeElement("birb-message-content"); @@ -1954,8 +1960,8 @@ /** * Bird or birb, you decide */ - function birdBirb() { - return settings().birbMode ? "Birb" : "Bird"; + function birdBirb(invert = false) { + return settings().birbMode !== invert ? "Birb" : "Bird"; } function init() { @@ -2544,7 +2550,9 @@ function pet() { if (currentState === States.IDLE && birb.getCurrentAnimation() !== Animations.HEART) { - birdsong.chirp(); + if (settings().soundEnabled) { + birdsong.chirp(); + } birb.setAnimation(Animations.HEART); lastPetTimestamp = Date.now(); } diff --git a/dist/web/birb.js b/dist/web/birb.js index 83a0d9f..2d2927e 100644 --- a/dist/web/birb.js +++ b/dist/web/birb.js @@ -1194,7 +1194,7 @@ class MenuItem { /** - * @param {string} text + * @param {string|(() => string)} text * @param {() => void} action * @param {boolean} [removeMenu] */ @@ -1243,7 +1243,7 @@ if (item instanceof Separator) { return makeElement("birb-window-separator"); } - let menuItem = makeElement("birb-menu-item", item.text); + let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -1350,7 +1350,8 @@ * @typedef {typeof DEFAULT_SETTINGS} Settings */ const DEFAULT_SETTINGS = { - birbMode: false + birbMode: false, + soundEnabled: true }; // Rendering constants @@ -1563,6 +1564,7 @@ .birb-menu-item { width: calc(100% - var(--birb-double-border-size)); + white-space: nowrap; font-size: 14px; padding-top: 4px; padding-bottom: 4px; @@ -1835,7 +1837,11 @@ const settingsItems = [ new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), new Separator(), - new MenuItem("Toggle Birb Mode", () => { + new MenuItem(() => `${userSettings.soundEnabled ? "Disable" : "Enable"} Sound`, () => { + userSettings.soundEnabled = !userSettings.soundEnabled; + save(); + }), + new MenuItem(() => `Toggle ${birdBirb(true)} Mode`, () => { userSettings.birbMode = !userSettings.birbMode; save(); const message = makeElement("birb-message-content"); @@ -1954,8 +1960,8 @@ /** * Bird or birb, you decide */ - function birdBirb() { - return settings().birbMode ? "Birb" : "Bird"; + function birdBirb(invert = false) { + return settings().birbMode !== invert ? "Birb" : "Bird"; } function init() { @@ -2544,7 +2550,9 @@ function pet() { if (currentState === States.IDLE && birb.getCurrentAnimation() !== Animations.HEART) { - birdsong.chirp(); + if (settings().soundEnabled) { + birdsong.chirp(); + } birb.setAnimation(Animations.HEART); lastPetTimestamp = Date.now(); } diff --git a/src/application.js b/src/application.js index 40263ba..4443cc4 100644 --- a/src/application.js +++ b/src/application.js @@ -61,7 +61,8 @@ import { * @typedef {typeof DEFAULT_SETTINGS} Settings */ const DEFAULT_SETTINGS = { - birbMode: false + birbMode: false, + soundEnabled: true }; // Rendering constants @@ -177,7 +178,11 @@ function startApplication(birbPixels, featherPixels) { const settingsItems = [ new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), new Separator(), - new MenuItem("Toggle Birb Mode", () => { + new MenuItem(() => `${userSettings.soundEnabled ? "Disable" : "Enable"} Sound`, () => { + userSettings.soundEnabled = !userSettings.soundEnabled; + save(); + }), + new MenuItem(() => `Toggle ${birdBirb(true)} Mode`, () => { userSettings.birbMode = !userSettings.birbMode; save(); const message = makeElement("birb-message-content"); @@ -296,8 +301,8 @@ function startApplication(birbPixels, featherPixels) { /** * Bird or birb, you decide */ - function birdBirb() { - return settings().birbMode ? "Birb" : "Bird"; + function birdBirb(invert = false) { + return settings().birbMode !== invert ? "Birb" : "Bird"; } function init() { @@ -900,7 +905,9 @@ function startApplication(birbPixels, featherPixels) { function pet() { if (currentState === States.IDLE && birb.getCurrentAnimation() !== Animations.HEART) { - birdsong.chirp(); + if (settings().soundEnabled) { + birdsong.chirp(); + } birb.setAnimation(Animations.HEART); lastPetTimestamp = Date.now(); } diff --git a/src/menu.js b/src/menu.js index 1d67c18..09b7878 100644 --- a/src/menu.js +++ b/src/menu.js @@ -12,7 +12,7 @@ export const MENU_EXIT_ID = "birb-menu-exit"; export class MenuItem { /** - * @param {string} text + * @param {string|(() => string)} text * @param {() => void} action * @param {boolean} [removeMenu] */ @@ -61,7 +61,7 @@ function makeMenuItem(item, removeMenuCallback) { if (item instanceof Separator) { return makeElement("birb-window-separator"); } - let menuItem = makeElement("birb-menu-item", item.text); + let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); diff --git a/src/stylesheet.css b/src/stylesheet.css index fd82706..917c0b8 100644 --- a/src/stylesheet.css +++ b/src/stylesheet.css @@ -198,6 +198,7 @@ .birb-menu-item { width: calc(100% - var(--birb-double-border-size)); + white-space: nowrap; font-size: 14px; padding-top: 4px; padding-bottom: 4px;