From 9f7d864e576ebea78451ad5fa891df6b083f4800 Mon Sep 17 00:00:00 2001 From: Idrees Hassan Date: Sun, 18 Jan 2026 18:14:40 -0500 Subject: [PATCH] Add tag enum --- dist/extension.zip | Bin 149636 -> 149653 bytes dist/extension/birb.js | 41 ++++++++++++++++++++--------------- dist/obsidian/main.js | 41 ++++++++++++++++++++--------------- dist/userscript/birb.user.js | 41 ++++++++++++++++++++--------------- dist/web/birb.embed.js | 41 ++++++++++++++++++++--------------- dist/web/birb.js | 41 ++++++++++++++++++++--------------- src/animation/frame.js | 12 +++++----- src/animation/layer.js | 7 +++++- src/animation/sprites.js | 6 +++-- 9 files changed, 131 insertions(+), 99 deletions(-) diff --git a/dist/extension.zip b/dist/extension.zip index 36f701089e223e20f93c729659742d13a184c5a5..e463bc2dba15f6c4aa427b33ddfaf05814a3c39c 100644 GIT binary patch delta 23731 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�-*P;K-4nN|hM{ZsB{3BvQsEB6XSGk~r&6w`(;6 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 @@ -333,7 +349,7 @@ [PALETTE.UNDERBELLY]: "#d7cfcb", [PALETTE.WING]: "#b1b5c5", [PALETTE.WING_EDGE]: "#9d9fa9", - }, ["tuft"]), + }, [TAG.TUFT]), europeanRobin: new BirdType("European Robin", "Native to western Europe, this is the quintessential robin. Quite friendly, you'll often find them searching for worms.", { [PALETTE.FOOT]: "#af8e75", @@ -355,7 +371,7 @@ [PALETTE.UNDERBELLY]: "#dc3719", [PALETTE.WING]: "#d23215", [PALETTE.WING_EDGE]: "#b1321c", - }, ["tuft"]), + }, [TAG.TUFT]), americanGoldfinch: new BirdType("American Goldfinch", "Coloured a brilliant yellow, this bird feeds almost entirely on the seeds of plants such as thistle, sunflowers, and coneflowers.", { [PALETTE.BEAK]: "#ffaf34", @@ -432,17 +448,6 @@ }), }; - class Layer { - /** - * @param {string[][]} pixels - * @param {string} [tag] - */ - constructor(pixels, tag = "default") { - this.pixels = pixels; - this.tag = tag; - } - } - class Frame { /** @type {{ [tag: string]: string[][] }} */ @@ -457,10 +462,10 @@ for (let layer of layers) { tags.add(layer.tag); } - tags.add("default"); + tags.add(TAG.DEFAULT); for (let tag of tags) { let maxHeight = layers.reduce((max, layer) => Math.max(max, layer.pixels.length), 0); - if (layers[0].tag !== "default") { + if (layers[0].tag !== TAG.DEFAULT) { throw new Error("First layer must have the 'default' tag"); } this.pixels = layers[0].pixels.map(row => row.slice()); @@ -470,7 +475,7 @@ } // Combine layers for (let i = 1; i < layers.length; i++) { - if (layers[i].tag === "default" || layers[i].tag === tag) { + if (layers[i].tag === TAG.DEFAULT || layers[i].tag === tag) { let layerPixels = layers[i].pixels; let topMargin = maxHeight - layerPixels.length; for (let y = 0; y < layerPixels.length; y++) { @@ -488,8 +493,8 @@ * @param {string} [tag] * @returns {string[][]} */ - getPixels(tag = "default") { - return this.#pixelsByTag[tag] ?? this.#pixelsByTag["default"]; + getPixels(tag = TAG.DEFAULT) { + return this.#pixelsByTag[tag] ?? this.#pixelsByTag[TAG.DEFAULT]; } /** diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index 255ba72..e847f07 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -231,6 +231,22 @@ module.exports = class PocketBird extends Plugin { return document.documentElement.clientHeight; } + const TAG = { + DEFAULT: "default", + TUFT: "tuft", + }; + + class Layer { + /** + * @param {string[][]} pixels + * @param {string} [tag] + */ + constructor(pixels, tag = TAG.DEFAULT) { + this.pixels = pixels; + this.tag = tag; + } + } + /** * Palette color names * @type {Record} @@ -338,7 +354,7 @@ module.exports = class PocketBird extends Plugin { [PALETTE.UNDERBELLY]: "#d7cfcb", [PALETTE.WING]: "#b1b5c5", [PALETTE.WING_EDGE]: "#9d9fa9", - }, ["tuft"]), + }, [TAG.TUFT]), europeanRobin: new BirdType("European Robin", "Native to western Europe, this is the quintessential robin. Quite friendly, you'll often find them searching for worms.", { [PALETTE.FOOT]: "#af8e75", @@ -360,7 +376,7 @@ module.exports = class PocketBird extends Plugin { [PALETTE.UNDERBELLY]: "#dc3719", [PALETTE.WING]: "#d23215", [PALETTE.WING_EDGE]: "#b1321c", - }, ["tuft"]), + }, [TAG.TUFT]), americanGoldfinch: new BirdType("American Goldfinch", "Coloured a brilliant yellow, this bird feeds almost entirely on the seeds of plants such as thistle, sunflowers, and coneflowers.", { [PALETTE.BEAK]: "#ffaf34", @@ -437,17 +453,6 @@ module.exports = class PocketBird extends Plugin { }), }; - class Layer { - /** - * @param {string[][]} pixels - * @param {string} [tag] - */ - constructor(pixels, tag = "default") { - this.pixels = pixels; - this.tag = tag; - } - } - class Frame { /** @type {{ [tag: string]: string[][] }} */ @@ -462,10 +467,10 @@ module.exports = class PocketBird extends Plugin { for (let layer of layers) { tags.add(layer.tag); } - tags.add("default"); + tags.add(TAG.DEFAULT); for (let tag of tags) { let maxHeight = layers.reduce((max, layer) => Math.max(max, layer.pixels.length), 0); - if (layers[0].tag !== "default") { + if (layers[0].tag !== TAG.DEFAULT) { throw new Error("First layer must have the 'default' tag"); } this.pixels = layers[0].pixels.map(row => row.slice()); @@ -475,7 +480,7 @@ module.exports = class PocketBird extends Plugin { } // Combine layers for (let i = 1; i < layers.length; i++) { - if (layers[i].tag === "default" || layers[i].tag === tag) { + if (layers[i].tag === TAG.DEFAULT || layers[i].tag === tag) { let layerPixels = layers[i].pixels; let topMargin = maxHeight - layerPixels.length; for (let y = 0; y < layerPixels.length; y++) { @@ -493,8 +498,8 @@ module.exports = class PocketBird extends Plugin { * @param {string} [tag] * @returns {string[][]} */ - getPixels(tag = "default") { - return this.#pixelsByTag[tag] ?? this.#pixelsByTag["default"]; + getPixels(tag = TAG.DEFAULT) { + return this.#pixelsByTag[tag] ?? this.#pixelsByTag[TAG.DEFAULT]; } /** diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index 01018f5..c794adb 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -240,6 +240,22 @@ return document.documentElement.clientHeight; } + const TAG = { + DEFAULT: "default", + TUFT: "tuft", + }; + + class Layer { + /** + * @param {string[][]} pixels + * @param {string} [tag] + */ + constructor(pixels, tag = TAG.DEFAULT) { + this.pixels = pixels; + this.tag = tag; + } + } + /** * Palette color names * @type {Record} @@ -347,7 +363,7 @@ [PALETTE.UNDERBELLY]: "#d7cfcb", [PALETTE.WING]: "#b1b5c5", [PALETTE.WING_EDGE]: "#9d9fa9", - }, ["tuft"]), + }, [TAG.TUFT]), europeanRobin: new BirdType("European Robin", "Native to western Europe, this is the quintessential robin. Quite friendly, you'll often find them searching for worms.", { [PALETTE.FOOT]: "#af8e75", @@ -369,7 +385,7 @@ [PALETTE.UNDERBELLY]: "#dc3719", [PALETTE.WING]: "#d23215", [PALETTE.WING_EDGE]: "#b1321c", - }, ["tuft"]), + }, [TAG.TUFT]), americanGoldfinch: new BirdType("American Goldfinch", "Coloured a brilliant yellow, this bird feeds almost entirely on the seeds of plants such as thistle, sunflowers, and coneflowers.", { [PALETTE.BEAK]: "#ffaf34", @@ -446,17 +462,6 @@ }), }; - class Layer { - /** - * @param {string[][]} pixels - * @param {string} [tag] - */ - constructor(pixels, tag = "default") { - this.pixels = pixels; - this.tag = tag; - } - } - class Frame { /** @type {{ [tag: string]: string[][] }} */ @@ -471,10 +476,10 @@ for (let layer of layers) { tags.add(layer.tag); } - tags.add("default"); + tags.add(TAG.DEFAULT); for (let tag of tags) { let maxHeight = layers.reduce((max, layer) => Math.max(max, layer.pixels.length), 0); - if (layers[0].tag !== "default") { + if (layers[0].tag !== TAG.DEFAULT) { throw new Error("First layer must have the 'default' tag"); } this.pixels = layers[0].pixels.map(row => row.slice()); @@ -484,7 +489,7 @@ } // Combine layers for (let i = 1; i < layers.length; i++) { - if (layers[i].tag === "default" || layers[i].tag === tag) { + if (layers[i].tag === TAG.DEFAULT || layers[i].tag === tag) { let layerPixels = layers[i].pixels; let topMargin = maxHeight - layerPixels.length; for (let y = 0; y < layerPixels.length; y++) { @@ -502,8 +507,8 @@ * @param {string} [tag] * @returns {string[][]} */ - getPixels(tag = "default") { - return this.#pixelsByTag[tag] ?? this.#pixelsByTag["default"]; + getPixels(tag = TAG.DEFAULT) { + return this.#pixelsByTag[tag] ?? this.#pixelsByTag[TAG.DEFAULT]; } /** diff --git a/dist/web/birb.embed.js b/dist/web/birb.embed.js index 722645a..0d3bcb5 100644 --- a/dist/web/birb.embed.js +++ b/dist/web/birb.embed.js @@ -226,6 +226,22 @@ return document.documentElement.clientHeight; } + const TAG = { + DEFAULT: "default", + TUFT: "tuft", + }; + + class Layer { + /** + * @param {string[][]} pixels + * @param {string} [tag] + */ + constructor(pixels, tag = TAG.DEFAULT) { + this.pixels = pixels; + this.tag = tag; + } + } + /** * Palette color names * @type {Record} @@ -333,7 +349,7 @@ [PALETTE.UNDERBELLY]: "#d7cfcb", [PALETTE.WING]: "#b1b5c5", [PALETTE.WING_EDGE]: "#9d9fa9", - }, ["tuft"]), + }, [TAG.TUFT]), europeanRobin: new BirdType("European Robin", "Native to western Europe, this is the quintessential robin. Quite friendly, you'll often find them searching for worms.", { [PALETTE.FOOT]: "#af8e75", @@ -355,7 +371,7 @@ [PALETTE.UNDERBELLY]: "#dc3719", [PALETTE.WING]: "#d23215", [PALETTE.WING_EDGE]: "#b1321c", - }, ["tuft"]), + }, [TAG.TUFT]), americanGoldfinch: new BirdType("American Goldfinch", "Coloured a brilliant yellow, this bird feeds almost entirely on the seeds of plants such as thistle, sunflowers, and coneflowers.", { [PALETTE.BEAK]: "#ffaf34", @@ -432,17 +448,6 @@ }), }; - class Layer { - /** - * @param {string[][]} pixels - * @param {string} [tag] - */ - constructor(pixels, tag = "default") { - this.pixels = pixels; - this.tag = tag; - } - } - class Frame { /** @type {{ [tag: string]: string[][] }} */ @@ -457,10 +462,10 @@ for (let layer of layers) { tags.add(layer.tag); } - tags.add("default"); + tags.add(TAG.DEFAULT); for (let tag of tags) { let maxHeight = layers.reduce((max, layer) => Math.max(max, layer.pixels.length), 0); - if (layers[0].tag !== "default") { + if (layers[0].tag !== TAG.DEFAULT) { throw new Error("First layer must have the 'default' tag"); } this.pixels = layers[0].pixels.map(row => row.slice()); @@ -470,7 +475,7 @@ } // Combine layers for (let i = 1; i < layers.length; i++) { - if (layers[i].tag === "default" || layers[i].tag === tag) { + if (layers[i].tag === TAG.DEFAULT || layers[i].tag === tag) { let layerPixels = layers[i].pixels; let topMargin = maxHeight - layerPixels.length; for (let y = 0; y < layerPixels.length; y++) { @@ -488,8 +493,8 @@ * @param {string} [tag] * @returns {string[][]} */ - getPixels(tag = "default") { - return this.#pixelsByTag[tag] ?? this.#pixelsByTag["default"]; + getPixels(tag = TAG.DEFAULT) { + return this.#pixelsByTag[tag] ?? this.#pixelsByTag[TAG.DEFAULT]; } /** diff --git a/dist/web/birb.js b/dist/web/birb.js index 722645a..0d3bcb5 100644 --- a/dist/web/birb.js +++ b/dist/web/birb.js @@ -226,6 +226,22 @@ return document.documentElement.clientHeight; } + const TAG = { + DEFAULT: "default", + TUFT: "tuft", + }; + + class Layer { + /** + * @param {string[][]} pixels + * @param {string} [tag] + */ + constructor(pixels, tag = TAG.DEFAULT) { + this.pixels = pixels; + this.tag = tag; + } + } + /** * Palette color names * @type {Record} @@ -333,7 +349,7 @@ [PALETTE.UNDERBELLY]: "#d7cfcb", [PALETTE.WING]: "#b1b5c5", [PALETTE.WING_EDGE]: "#9d9fa9", - }, ["tuft"]), + }, [TAG.TUFT]), europeanRobin: new BirdType("European Robin", "Native to western Europe, this is the quintessential robin. Quite friendly, you'll often find them searching for worms.", { [PALETTE.FOOT]: "#af8e75", @@ -355,7 +371,7 @@ [PALETTE.UNDERBELLY]: "#dc3719", [PALETTE.WING]: "#d23215", [PALETTE.WING_EDGE]: "#b1321c", - }, ["tuft"]), + }, [TAG.TUFT]), americanGoldfinch: new BirdType("American Goldfinch", "Coloured a brilliant yellow, this bird feeds almost entirely on the seeds of plants such as thistle, sunflowers, and coneflowers.", { [PALETTE.BEAK]: "#ffaf34", @@ -432,17 +448,6 @@ }), }; - class Layer { - /** - * @param {string[][]} pixels - * @param {string} [tag] - */ - constructor(pixels, tag = "default") { - this.pixels = pixels; - this.tag = tag; - } - } - class Frame { /** @type {{ [tag: string]: string[][] }} */ @@ -457,10 +462,10 @@ for (let layer of layers) { tags.add(layer.tag); } - tags.add("default"); + tags.add(TAG.DEFAULT); for (let tag of tags) { let maxHeight = layers.reduce((max, layer) => Math.max(max, layer.pixels.length), 0); - if (layers[0].tag !== "default") { + if (layers[0].tag !== TAG.DEFAULT) { throw new Error("First layer must have the 'default' tag"); } this.pixels = layers[0].pixels.map(row => row.slice()); @@ -470,7 +475,7 @@ } // Combine layers for (let i = 1; i < layers.length; i++) { - if (layers[i].tag === "default" || layers[i].tag === tag) { + if (layers[i].tag === TAG.DEFAULT || layers[i].tag === tag) { let layerPixels = layers[i].pixels; let topMargin = maxHeight - layerPixels.length; for (let y = 0; y < layerPixels.length; y++) { @@ -488,8 +493,8 @@ * @param {string} [tag] * @returns {string[][]} */ - getPixels(tag = "default") { - return this.#pixelsByTag[tag] ?? this.#pixelsByTag["default"]; + getPixels(tag = TAG.DEFAULT) { + return this.#pixelsByTag[tag] ?? this.#pixelsByTag[TAG.DEFAULT]; } /** diff --git a/src/animation/frame.js b/src/animation/frame.js index d51515d..b623e41 100644 --- a/src/animation/frame.js +++ b/src/animation/frame.js @@ -1,6 +1,6 @@ import { Directions } from '../shared.js'; import { PALETTE, BirdType } from './sprites.js'; -import Layer from './layer.js'; +import Layer, { TAG } from './layer.js'; class Frame { @@ -16,10 +16,10 @@ class Frame { for (let layer of layers) { tags.add(layer.tag); } - tags.add("default"); + tags.add(TAG.DEFAULT); for (let tag of tags) { let maxHeight = layers.reduce((max, layer) => Math.max(max, layer.pixels.length), 0); - if (layers[0].tag !== "default") { + if (layers[0].tag !== TAG.DEFAULT) { throw new Error("First layer must have the 'default' tag"); } this.pixels = layers[0].pixels.map(row => row.slice()); @@ -29,7 +29,7 @@ class Frame { } // Combine layers for (let i = 1; i < layers.length; i++) { - if (layers[i].tag === "default" || layers[i].tag === tag) { + if (layers[i].tag === TAG.DEFAULT || layers[i].tag === tag) { let layerPixels = layers[i].pixels; let topMargin = maxHeight - layerPixels.length; for (let y = 0; y < layerPixels.length; y++) { @@ -47,8 +47,8 @@ class Frame { * @param {string} [tag] * @returns {string[][]} */ - getPixels(tag = "default") { - return this.#pixelsByTag[tag] ?? this.#pixelsByTag["default"]; + getPixels(tag = TAG.DEFAULT) { + return this.#pixelsByTag[tag] ?? this.#pixelsByTag[TAG.DEFAULT]; } /** diff --git a/src/animation/layer.js b/src/animation/layer.js index cd33990..72e6c95 100644 --- a/src/animation/layer.js +++ b/src/animation/layer.js @@ -1,9 +1,14 @@ +export const TAG = { + DEFAULT: "default", + TUFT: "tuft", +}; + class Layer { /** * @param {string[][]} pixels * @param {string} [tag] */ - constructor(pixels, tag = "default") { + constructor(pixels, tag = TAG.DEFAULT) { this.pixels = pixels; this.tag = tag; } diff --git a/src/animation/sprites.js b/src/animation/sprites.js index 9ff5e80..3aca274 100644 --- a/src/animation/sprites.js +++ b/src/animation/sprites.js @@ -1,3 +1,5 @@ +import { TAG } from "./layer.js"; + /** * Palette color names * @type {Record} @@ -105,7 +107,7 @@ export const SPECIES = { [PALETTE.UNDERBELLY]: "#d7cfcb", [PALETTE.WING]: "#b1b5c5", [PALETTE.WING_EDGE]: "#9d9fa9", - }, ["tuft"]), + }, [TAG.TUFT]), europeanRobin: new BirdType("European Robin", "Native to western Europe, this is the quintessential robin. Quite friendly, you'll often find them searching for worms.", { [PALETTE.FOOT]: "#af8e75", @@ -127,7 +129,7 @@ export const SPECIES = { [PALETTE.UNDERBELLY]: "#dc3719", [PALETTE.WING]: "#d23215", [PALETTE.WING_EDGE]: "#b1321c", - }, ["tuft"]), + }, [TAG.TUFT]), americanGoldfinch: new BirdType("American Goldfinch", "Coloured a brilliant yellow, this bird feeds almost entirely on the seeds of plants such as thistle, sunflowers, and coneflowers.", { [PALETTE.BEAK]: "#ffaf34",