diff --git a/packages/frontend/assets/boobdog.gif b/packages/frontend/assets/boobdog.gif new file mode 100644 index 000000000..3d7281da9 Binary files /dev/null and b/packages/frontend/assets/boobdog.gif differ diff --git a/packages/frontend/src/components/SkOneko.vue b/packages/frontend/src/components/SkOneko.vue index fbf50067a..5408d7456 100644 --- a/packages/frontend/src/components/SkOneko.vue +++ b/packages/frontend/src/components/SkOneko.vue @@ -8,6 +8,13 @@ import { shallowRef, onMounted } from 'vue'; +const props = defineProps({ + spritesheet: { + type: String, + default: '/client-assets/oneko.gif', + }, +}); + const nekoEl = shallowRef(); let nekoPosX = 32; @@ -89,6 +96,8 @@ const spriteSets = { function init() { if (!nekoEl.value) return; + nekoEl.value.style.backgroundImage = `url(${props.spritesheet})`; + nekoEl.value.style.left = `${nekoPosX - 16}px`; nekoEl.value.style.top = `${nekoPosY - 16}px`; @@ -235,6 +244,5 @@ onMounted(init); pointer-events: none; image-rendering: pixelated; z-index: 2147483647; - background-image: url(/client-assets/oneko.gif); } diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index 1e4e815d5..b743cc543 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -146,6 +146,7 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts.disableDrawer }} {{ i18n.ts.forceShowAds }} {{ i18n.ts.oneko }} + Boobdog friend {{ i18n.ts.seasonalScreenEffect }}
@@ -334,6 +335,7 @@ const disableDrawer = computed(defaultStore.makeGetterSetter('disableDrawer')); const disableShowingAnimatedImages = computed(defaultStore.makeGetterSetter('disableShowingAnimatedImages')); const forceShowAds = computed(defaultStore.makeGetterSetter('forceShowAds')); const oneko = computed(defaultStore.makeGetterSetter('oneko')); +const boobdog = computed(defaultStore.makeGetterSetter('boobdog')); const loadRawImages = computed(defaultStore.makeGetterSetter('loadRawImages')); const highlightSensitiveMedia = computed(defaultStore.makeGetterSetter('highlightSensitiveMedia')); const imageNewTab = computed(defaultStore.makeGetterSetter('imageNewTab')); diff --git a/packages/frontend/src/pages/settings/preferences-backups.vue b/packages/frontend/src/pages/settings/preferences-backups.vue index f180e0b72..a5d5715c4 100644 --- a/packages/frontend/src/pages/settings/preferences-backups.vue +++ b/packages/frontend/src/pages/settings/preferences-backups.vue @@ -100,6 +100,7 @@ const defaultStoreSaveKeys: (keyof typeof defaultStore['state'])[] = [ 'reactionsDisplaySize', 'forceShowAds', 'oneko', + 'boobdog', 'numberOfReplies', 'aiChanMode', 'devMode', diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index 2cf17b27c..b8df0cb63 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -416,6 +416,10 @@ export const defaultStore = markRaw(new Storage('base', { where: 'device', default: false, }, + boobdog: { + where: 'device', + default: false, + }, clickToOpen: { where: 'device', default: true, diff --git a/packages/frontend/src/ui/_common_/common.vue b/packages/frontend/src/ui/_common_/common.vue index 4fe53ae6a..8319b2545 100644 --- a/packages/frontend/src/ui/_common_/common.vue +++ b/packages/frontend/src/ui/_common_/common.vue @@ -43,7 +43,8 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.loggedInAsBot }}
- + +