diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2025-04-13 13:07:24 -0400 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2025-04-13 13:07:24 -0400 |
| commit | 91fb75dece86b757b68e3678e864c5361267fe26 (patch) | |
| tree | 63990da60c40b58d89d2a81215a6a5def7ebd8ab | |
| parent | Merge tag '2025.4.0' into merge/2025-03-24 (diff) | |
| parent | merge: feat: Allow injection of raw HTML strings inside <head> (!959) (diff) | |
| download | sharkey-91fb75dece86b757b68e3678e864c5361267fe26.tar.gz sharkey-91fb75dece86b757b68e3678e864c5361267fe26.tar.bz2 sharkey-91fb75dece86b757b68e3678e864c5361267fe26.zip | |
Merge branch 'develop' into merge/2025-03-24
| -rw-r--r-- | .config/example.yml | 8 | ||||
| -rw-r--r-- | locales/index.d.ts | 4 | ||||
| -rw-r--r-- | packages/backend/src/config.ts | 12 | ||||
| -rw-r--r-- | packages/backend/src/server/web/ClientServerService.ts | 1 | ||||
| -rw-r--r-- | packages/backend/src/server/web/views/base.pug | 2 | ||||
| -rw-r--r-- | packages/frontend/src/components/SkApprovalUser.vue | 2 | ||||
| -rw-r--r-- | packages/frontend/src/components/SkModPlayer.vue | 2 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin-user.vue | 2 | ||||
| -rw-r--r-- | packages/frontend/src/pages/announcement.vue | 2 | ||||
| -rw-r--r-- | packages/frontend/src/utility/chiptune2.ts | 4 | ||||
| -rw-r--r-- | sharkey-locales/en-US.yml | 1 |
11 files changed, 34 insertions, 6 deletions
diff --git a/.config/example.yml b/.config/example.yml index a4c5165428..d52d145d1e 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -435,3 +435,11 @@ attachLdSignatureForRelays: true # If you're not using jemalloc, this may cause memory fragmentation and performance issues! (https://www.npmjs.com/package/ws#websocket-compression) # jemalloc is used by default in the Sharkey Docker image and may be set up manually otherwise: https://github.com/jemalloc/jemalloc/wiki/getting-started websocketCompression: false + +# Inject arbitrary HTML tags to customize Sharkey without having to fork it +#customHtml: +# head: | +# <!-- The possibilities are limitless! --> +# <script>console.log("Hello, world!")</script> +# <style>.whatever { color: red; }</style> +# <link rel="stylesheet" href="https://example.com/styles.css"> diff --git a/locales/index.d.ts b/locales/index.d.ts index 166c44f3b4..21de920e89 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -12203,6 +12203,10 @@ export interface Locale extends ILocale { */ "oneko": string; /** + * This will irreversibly delete this account. Proceed? + */ + "deleteThisAccountConfirm": string; + /** * Enable Achievements */ "enableAchievements": string; diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts index e2c4a75f80..3b57d748f8 100644 --- a/packages/backend/src/config.ts +++ b/packages/backend/src/config.ts @@ -145,6 +145,10 @@ type Source = { }; websocketCompression?: boolean; + + customHtml?: { + head?: string; + } }; export type Config = { @@ -270,6 +274,10 @@ export type Config = { }; websocketCompression?: boolean; + + customHtml: { + head: string; + } }; export type FulltextSearchProvider = 'sqlLike' | 'sqlPgroonga' | 'meilisearch' | 'sqlTsvector'; @@ -420,6 +428,9 @@ export function loadConfig(): Config { maxAge: config.activityLogging?.maxAge ?? (1000 * 60 * 60 * 24 * 30), }, websocketCompression: config.websocketCompression ?? false, + customHtml: { + head: config.customHtml?.head ?? '', + }, }; } @@ -572,4 +583,5 @@ function applyEnvOverrides(config: Source) { _apply_top([['signToActivityPubGet', 'checkActivityPubGetSignature', 'setupPassword']]); _apply_top(['logging', 'sql', ['disableQueryTruncation', 'enableQueryParamLogging']]); _apply_top(['activityLogging', ['enabled', 'preSave', 'maxAge']]); + _apply_top(['customHtml', ['head']]); } diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 99cc922281..34b69fd7b2 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -458,6 +458,7 @@ export class ClientServerService { url: this.config.url, title: this.meta.name ?? 'Sharkey', desc: this.meta.description, + customHead: this.config.customHtml.head, ...await this.generateCommonPugData(this.meta), ...data, }); diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug index f57dbbbf4e..f7b0377b22 100644 --- a/packages/backend/src/server/web/views/base.pug +++ b/packages/backend/src/server/web/views/base.pug @@ -45,6 +45,8 @@ html link(rel='stylesheet' href=`/static-assets/fonts/sharkey-icons/style.css?version=${version}`) link(rel='modulepreload' href=`/vite/${entry.file}`) + | !{customHead} + if !config.frontendManifestExists script(type="module" src="/vite/@vite/client") diff --git a/packages/frontend/src/components/SkApprovalUser.vue b/packages/frontend/src/components/SkApprovalUser.vue index 7029ce43a3..310d044387 100644 --- a/packages/frontend/src/components/SkApprovalUser.vue +++ b/packages/frontend/src/components/SkApprovalUser.vue @@ -65,7 +65,7 @@ const emits = defineEmits<{ async function deleteAccount() { const confirm = await os.confirm({ type: 'warning', - text: i18n.ts.deleteAccountConfirm, + text: i18n.ts.deleteThisAccountConfirm, }); if (confirm.canceled) return; diff --git a/packages/frontend/src/components/SkModPlayer.vue b/packages/frontend/src/components/SkModPlayer.vue index 572e01c748..0570273c83 100644 --- a/packages/frontend/src/components/SkModPlayer.vue +++ b/packages/frontend/src/components/SkModPlayer.vue @@ -1,5 +1,5 @@ <!-- -SPDX-FileCopyrightText: marie and other Sharkey contributors +SPDX-FileCopyrightText: puniko and other Sharkey contributors SPDX-License-Identifier: AGPL-3.0-only --> diff --git a/packages/frontend/src/pages/admin-user.vue b/packages/frontend/src/pages/admin-user.vue index 5dfed9b569..06d557f045 100644 --- a/packages/frontend/src/pages/admin-user.vue +++ b/packages/frontend/src/pages/admin-user.vue @@ -449,7 +449,7 @@ async function deleteAllFiles() { async function deleteAccount() { const confirm = await os.confirm({ type: 'warning', - text: i18n.ts.deleteAccountConfirm, + text: i18n.ts.deleteThisAccountConfirm, }); if (confirm.canceled) return; diff --git a/packages/frontend/src/pages/announcement.vue b/packages/frontend/src/pages/announcement.vue index 2e0c7d2f42..b9c903e9bf 100644 --- a/packages/frontend/src/pages/announcement.vue +++ b/packages/frontend/src/pages/announcement.vue @@ -26,7 +26,7 @@ SPDX-License-Identifier: AGPL-3.0-only <Mfm :text="announcement.title"/> </div> <div :class="$style.content"> - <Mfm :text="announcement.text"/> + <Mfm :text="announcement.text" :isBlock="true"/> <img v-if="announcement.imageUrl" :src="announcement.imageUrl"/> <div style="margin-top: 8px; opacity: 0.7; font-size: 85%;"> {{ i18n.ts.createdAt }}: <MkTime :time="announcement.createdAt" mode="detail"/> diff --git a/packages/frontend/src/utility/chiptune2.ts b/packages/frontend/src/utility/chiptune2.ts index 220002ff1e..07822502eb 100644 --- a/packages/frontend/src/utility/chiptune2.ts +++ b/packages/frontend/src/utility/chiptune2.ts @@ -1,6 +1,6 @@ /* - * SPDX-FileCopyrightText: marie and other Sharkey contributors - * SPDX-License-Identifier: AGPL-3.0-only + * SPDX-FileCopyrightText: Simon Gündling and other chiptune2.js contributors + * SPDX-License-Identifier: MIT */ /* eslint-disable */ diff --git a/sharkey-locales/en-US.yml b/sharkey-locales/en-US.yml index 730e96d08b..644e904a4e 100644 --- a/sharkey-locales/en-US.yml +++ b/sharkey-locales/en-US.yml @@ -138,6 +138,7 @@ oneko: "Cat friend :3" renotesList: "Boosts" lookupConfirm: "Are you sure that you want to look this up?" openTagPageConfirm: "Are you sure you want to open this hashtags page?" +deleteThisAccountConfirm: "This will irreversibly delete this account. Proceed?" specifyHost: "Specify a host" goToMisskey: "To Sharkey" enableAchievements: "Enable Achievements" |