From af806352a1c3701b5d8b2088dcf2154732b00152 Mon Sep 17 00:00:00 2001 From: taichan <40626578+taichanNE30@users.noreply.github.com> Date: Sun, 20 Aug 2023 13:39:37 +0900 Subject: [PATCH 01/15] =?UTF-8?q?feat:=20=E3=83=AD=E3=83=BC=E3=82=AB?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E3=81=BF=E3=83=8E=E3=83=BC=E3=83=88=E6=A4=9C?= =?UTF-8?q?=E7=B4=A2=20(#11451)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add local search * Update CHANGELOG * lint * Remove TODO comment * lint * Update packages/backend/src/core/SearchService.ts --------- Co-authored-by: syuilo --- CHANGELOG.md | 2 ++ packages/backend/src/core/SearchService.ts | 14 ++++++++++- packages/frontend/src/pages/search.note.vue | 28 +++++++++++++-------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02a0fa16d6..2782dcf450 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ - 絵文字ピッカーの検索の表示件数を100件に増加 - Enhance: ユーザーメニューでスイッチでユーザーリストに追加・削除できるように - Enhance: 自分が押したリアクションのデザインを改善 +- Enhance: ノート検索にローカルのみ検索可能なオプションの追加 - Fix: サーバー情報画面(`/instance-info/{domain}`)でブロックができないのを修正 - Fix: 未読のお知らせの「わかった」をクリック・タップしてもその場で「わかった」が消えない問題を修正 - Fix: iOSで画面を回転させるとテキストサイズが変わる問題を修正 @@ -35,6 +36,7 @@ - Fix: Misskeyプラグインをインストールする際のAiScriptバージョンのチェックが0.14.0以降に対応していない問題を修正 ### Server +- Fix: ノート検索 `notes/search` にてhostを指定した際に検索結果に反映されるように - cacheRemoteFilesの初期値はfalseになりました - ファイルアップロード時等にファイル名の拡張子を修正する関数(correctFilename)の挙動を改善 - Fix: 一部のfeatured noteを照会できない問題を修正 diff --git a/packages/backend/src/core/SearchService.ts b/packages/backend/src/core/SearchService.ts index ce80744c6d..f21bd790be 100644 --- a/packages/backend/src/core/SearchService.ts +++ b/packages/backend/src/core/SearchService.ts @@ -25,6 +25,8 @@ type Q = { op: '<', k: K, v: number } | { op: '>=', k: K, v: number } | { op: '<=', k: K, v: number } | + { op: 'is null', k: K} | + { op: 'is not null', k: K} | { op: 'and', qs: Q[] } | { op: 'or', qs: Q[] } | { op: 'not', q: Q }; @@ -50,6 +52,8 @@ function compileQuery(q: Q): string { case '<=': return `(${q.k} <= ${compileValue(q.v)})`; case 'and': return q.qs.length === 0 ? '' : `(${ q.qs.map(_q => compileQuery(_q)).join(' AND ') })`; case 'or': return q.qs.length === 0 ? '' : `(${ q.qs.map(_q => compileQuery(_q)).join(' OR ') })`; + case 'is null': return `(${q.k} IS NULL)`; + case 'is not null': return `(${q.k} IS NOT NULL)`; case 'not': return `(NOT ${compileQuery(q.q)})`; default: throw new Error('unrecognized query operator'); } @@ -170,7 +174,7 @@ export class SearchService { if (opts.channelId) filter.qs.push({ op: '=', k: 'channelId', v: opts.channelId }); if (opts.host) { if (opts.host === '.') { - // TODO: Meilisearchが2023/05/07現在値がNULLかどうかのクエリが書けない + filter.qs.push({ op: 'is null', k: 'userHost' }); } else { filter.qs.push({ op: '=', k: 'userHost', v: opts.host }); } @@ -204,6 +208,14 @@ export class SearchService { .leftJoinAndSelect('reply.user', 'replyUser') .leftJoinAndSelect('renote.user', 'renoteUser'); + if (opts.host) { + if (opts.host === '.') { + query.andWhere('user.host IS NULL'); + } else { + query.andWhere('user.host = :host', { host: opts.host }); + } + } + this.queryService.generateVisibilityQuery(query, me); if (me) this.queryService.generateMutedUserQuery(query, me); if (me) this.queryService.generateBlockedUserQuery(query, me); diff --git a/packages/frontend/src/pages/search.note.vue b/packages/frontend/src/pages/search.note.vue index 799dac2096..b0881fdedb 100644 --- a/packages/frontend/src/pages/search.note.vue +++ b/packages/frontend/src/pages/search.note.vue @@ -12,18 +12,22 @@ SPDX-License-Identifier: AGPL-3.0-only - - - +
+ {{ i18n.ts.localOnly }} -
-
@{{ user.username }}
-
- {{ i18n.ts.selectUser }} - {{ i18n.ts.remove }} + + + + +
+
@{{ user.username }}
+
+ {{ i18n.ts.selectUser }} + {{ i18n.ts.remove }} +
-
- + +
{{ i18n.ts.search }} @@ -43,6 +47,7 @@ import MkNotes from '@/components/MkNotes.vue'; import MkInput from '@/components/MkInput.vue'; import MkRadios from '@/components/MkRadios.vue'; import MkButton from '@/components/MkButton.vue'; +import MkSwitch from '@/components/MkSwitch.vue'; import { i18n } from '@/i18n'; import * as os from '@/os'; import MkFoldableSection from '@/components/MkFoldableSection.vue'; @@ -59,6 +64,7 @@ let searchQuery = $ref(''); let searchOrigin = $ref('combined'); let notePagination = $ref(); let user = $ref(null); +let isLocalOnly = $ref(false); function selectUser() { os.selectUser().then(_user => { @@ -98,6 +104,8 @@ async function search() { }, }; + if (isLocalOnly) notePagination.params.host = '.'; + key++; } From bf6158ca719b3ac23fdbe44a6579d289e979a387 Mon Sep 17 00:00:00 2001 From: Hexirp Date: Sun, 20 Aug 2023 17:54:11 +0900 Subject: [PATCH 02/15] =?UTF-8?q?fix(frontend):=20"=E3=83=A1=E3=83=83?= =?UTF-8?q?=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92=E9=80=81=E4=BF=A1"=20?= =?UTF-8?q?=E3=81=AE=E5=88=9D=E6=9C=9F=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B=20(#11721)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(frontend): "メッセージを送信" の初期テキストを あるサーバー A にいるとする。他のサーバー B のユーザー X へ 「メッセージを送信」しようとしたとする。その時に出てくる投稿 フォームには X へのメンションが最初から入っている。 しかし、そのメンションには B の情報が入っておらず、 A の 同名ユーザー X へのメンションとなってしまっている。 See https://github.com/misskey-dev/misskey/issues/11716 * Update CHANGELOG.md --- CHANGELOG.md | 1 + packages/frontend/src/scripts/get-user-menu.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2782dcf450..a7539e2624 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ - Fix: word mute for sub note is not applied - Fix: タイムラインを下にスクロールしてノート画面に移動して再び戻ったら以前のスクロール位置を失う問題を修正 - Fix: Misskeyプラグインをインストールする際のAiScriptバージョンのチェックが0.14.0以降に対応していない問題を修正 +- Fix: 他のサーバーのユーザーへ「メッセージを送信」した時の初期テキストのメンションが間違っている問題を修正 ### Server - Fix: ノート検索 `notes/search` にてhostを指定した際に検索結果に反映されるように diff --git a/packages/frontend/src/scripts/get-user-menu.ts b/packages/frontend/src/scripts/get-user-menu.ts index b9c726e134..314358e58a 100644 --- a/packages/frontend/src/scripts/get-user-menu.ts +++ b/packages/frontend/src/scripts/get-user-menu.ts @@ -156,7 +156,8 @@ export function getUserMenu(user: misskey.entities.UserDetailed, router: Router icon: 'ti ti-mail', text: i18n.ts.sendMessage, action: () => { - os.post({ specified: user, initialText: `@${user.username} ` }); + const canonical = user.host === null ? `@${user.username}` : `@${user.username}@${user.host}`; + os.post({ specified: user, initialText: `${canonical} ` }); }, }, null, { icon: 'ti ti-pencil', From 8038049068c3841844e93623baf54960627aafbe Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 21 Aug 2023 11:53:06 +0900 Subject: [PATCH 03/15] =?UTF-8?q?enhance(frontend/aiscript):=20=E7=8F=BE?= =?UTF-8?q?=E5=9C=A8=E3=81=AE=E8=A8=AD=E5=AE=9A=E8=A8=80=E8=AA=9E=E3=82=92?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolvve #11750 --- CHANGELOG.md | 1 + packages/frontend/src/scripts/aiscript/api.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7539e2624..ed6c7c7778 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - Enhance: ユーザーメニューでスイッチでユーザーリストに追加・削除できるように - Enhance: 自分が押したリアクションのデザインを改善 - Enhance: ノート検索にローカルのみ検索可能なオプションの追加 +- Enhance: AiScriptで`LOCALE`として現在の設定言語を取得できるように - Fix: サーバー情報画面(`/instance-info/{domain}`)でブロックができないのを修正 - Fix: 未読のお知らせの「わかった」をクリック・タップしてもその場で「わかった」が消えない問題を修正 - Fix: iOSで画面を回転させるとテキストサイズが変わる問題を修正 diff --git a/packages/frontend/src/scripts/aiscript/api.ts b/packages/frontend/src/scripts/aiscript/api.ts index f69c631198..8dd3b665a5 100644 --- a/packages/frontend/src/scripts/aiscript/api.ts +++ b/packages/frontend/src/scripts/aiscript/api.ts @@ -8,6 +8,7 @@ import * as os from '@/os'; import { $i } from '@/account'; import { miLocalStorage } from '@/local-storage'; import { customEmojis } from '@/custom-emojis'; +import { lang } from '@/config'; export function createAiScriptEnv(opts) { let apiRequests = 0; @@ -16,6 +17,7 @@ export function createAiScriptEnv(opts) { USER_NAME: $i ? values.STR($i.name) : values.NULL, USER_USERNAME: $i ? values.STR($i.username) : values.NULL, CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value), + LOCALE: values.STR(lang), 'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => { await os.alert({ type: type ? type.value : 'info', From 2939e8131d303f27ef24541fa8394369401be08b Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 21 Aug 2023 12:02:52 +0900 Subject: [PATCH 04/15] 2023.9.0-beta.1 --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed6c7c7778..abe746fc23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ --> -## 2023.8.0 (unreleased) +## 2023.9.0 (unreleased) ### General - OAuth 2.0のサポート diff --git a/package.json b/package.json index 283894f934..7cc040962e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "13.14.2", + "version": "2023.9.0-beta.1", "codename": "nasubi", "repository": { "type": "git", From b60ff1f1ce04bd60d87b048ac525196a5ffebd78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 21 Aug 2023 13:01:08 +0900 Subject: [PATCH 05/15] =?UTF-8?q?fix(misskey-js):=20Play=E9=96=A2=E9=80=A3?= =?UTF-8?q?=E3=81=AE=E6=A8=A9=E9=99=90=E3=82=92=E8=BF=BD=E5=8A=A0=EF=BC=88?= =?UTF-8?q?API=E3=82=B3=E3=83=B3=E3=82=BD=E3=83=BC=E3=83=AB=E3=81=A7?= =?UTF-8?q?=E7=99=BA=E8=A1=8C=E5=8F=AF=E8=83=BD=E3=81=AB=EF=BC=89=20(#1136?= =?UTF-8?q?0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * (add) permission: flash * update changelog * Update CHANGELOG.md (カレンダーリリース対応) --------- Co-authored-by: syuilo --- CHANGELOG.md | 1 + locales/index.d.ts | 4 ++++ locales/ja-JP.yml | 4 ++++ packages/misskey-js/src/consts.ts | 4 ++++ 4 files changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index abe746fc23..63fa0e1440 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ - Fix: タイムラインを下にスクロールしてノート画面に移動して再び戻ったら以前のスクロール位置を失う問題を修正 - Fix: Misskeyプラグインをインストールする際のAiScriptバージョンのチェックが0.14.0以降に対応していない問題を修正 - Fix: 他のサーバーのユーザーへ「メッセージを送信」した時の初期テキストのメンションが間違っている問題を修正 +- Playの操作を行うAPI TokenをAPIコンソールから発行できるように ### Server - Fix: ノート検索 `notes/search` にてhostを指定した際に検索結果に反映されるように diff --git a/locales/index.d.ts b/locales/index.d.ts index 4984dd18ec..d7c85b9597 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1862,6 +1862,10 @@ export interface Locale { "write:gallery": string; "read:gallery-likes": string; "write:gallery-likes": string; + "read:flash": string; + "write:flash": string; + "read:flash-likes": string; + "write:flash-likes": string; }; "_auth": { "shareAccessTitle": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 9089cb1d3b..0dfaa43653 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1780,6 +1780,10 @@ _permissions: "write:gallery": "ギャラリーを操作する" "read:gallery-likes": "ギャラリーのいいねを見る" "write:gallery-likes": "ギャラリーのいいねを操作する" + "read:flash": "Playを見る" + "write:flash": "Playを操作する" + "read:flash-likes": "Playのいいねを見る" + "write:flash-likes": "Playのいいねを操作する" _auth: shareAccessTitle: "アプリへのアクセス許可" diff --git a/packages/misskey-js/src/consts.ts b/packages/misskey-js/src/consts.ts index 261ecd33f4..2b144ab4a4 100644 --- a/packages/misskey-js/src/consts.ts +++ b/packages/misskey-js/src/consts.ts @@ -39,4 +39,8 @@ export const permissions = [ 'write:gallery', 'read:gallery-likes', 'write:gallery-likes', + 'read:flash', + 'write:flash', + 'read:flash-likes', + 'write:flash-likes', ]; From 50ec129b870243bbbb76262508e4d3ec34a5d1b0 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 21 Aug 2023 16:13:10 +0900 Subject: [PATCH 06/15] feat: 'server' webhook payload which hold misskey server url (#11752) --- CHANGELOG.md | 1 + .../src/queue/processors/WebhookDeliverProcessorService.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63fa0e1440..08e059b3b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ - Fix: ノート検索 `notes/search` にてhostを指定した際に検索結果に反映されるように - cacheRemoteFilesの初期値はfalseになりました - ファイルアップロード時等にファイル名の拡張子を修正する関数(correctFilename)の挙動を改善 +- Webhookのペイロードにサーバーのurlが含まれるようになりました - Fix: 一部のfeatured noteを照会できない問題を修正 - Fix: muteがapiからのuser list timeline取得で機能しない問題を修正 - Fix: ジョブキュー管理画面の認証を回避できる問題を修正 diff --git a/packages/backend/src/queue/processors/WebhookDeliverProcessorService.ts b/packages/backend/src/queue/processors/WebhookDeliverProcessorService.ts index 169df77924..92b3720a56 100644 --- a/packages/backend/src/queue/processors/WebhookDeliverProcessorService.ts +++ b/packages/backend/src/queue/processors/WebhookDeliverProcessorService.ts @@ -47,6 +47,7 @@ export class WebhookDeliverProcessorService { 'Content-Type': 'application/json', }, body: JSON.stringify({ + server: this.config.url, hookId: job.data.webhookId, userId: job.data.userId, eventId: job.data.eventId, From 388448f29823194a7e807c63df379321dfcbd0a2 Mon Sep 17 00:00:00 2001 From: MomentQYC <62551256+MomentQYC@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:21:57 +0800 Subject: [PATCH 07/15] feat: Removing stack trace info in production env (#11657) * feat: Hiding stack traces in production env * sytle * style * style * add SPDX * move ./error.js to ./misc/error.js * revert: remove frontend changes * feat: Hiding stack traces in production env * feat: Hiding stack traces in production env * revert * revert * revert * change and fix * revert * fix queue endpoint test --------- Co-authored-by: tamaina Co-authored-by: Kagami Sascha Rosylight --- .../backend/src/server/web/ClientServerService.ts | 12 ++++++------ packages/backend/test/e2e/fetch-resource.ts | 12 +++++++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 25f59914ff..56aa343632 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -148,18 +148,18 @@ export class ClientServerService { if (url === bullBoardPath || url.startsWith(bullBoardPath + '/')) { const token = request.cookies.token; if (token == null) { - reply.code(401); - throw new Error('login required'); + reply.code(401).send('Login required'); + return; } const user = await this.usersRepository.findOneBy({ token }); if (user == null) { - reply.code(403); - throw new Error('no such user'); + reply.code(403).send('No such user'); + return; } const isAdministrator = await this.roleService.isAdministrator(user); if (!isAdministrator) { - reply.code(403); - throw new Error('access denied'); + reply.code(403).send('Access denied'); + return; } } }); diff --git a/packages/backend/test/e2e/fetch-resource.ts b/packages/backend/test/e2e/fetch-resource.ts index 96683ce594..1cbfec3e5f 100644 --- a/packages/backend/test/e2e/fetch-resource.ts +++ b/packages/backend/test/e2e/fetch-resource.ts @@ -34,6 +34,8 @@ describe('Webリソース', () => { let aliceGalleryPost: any; let aliceChannel: any; + let bob: misskey.entities.MeSignup; + type Request = { path: string, accept?: string, @@ -90,6 +92,8 @@ describe('Webリソース', () => { fileIds: [aliceUploadedFile.body.id], }); aliceChannel = await channel(alice, {}); + + bob = await signup({ username: 'alice' }); }, 1000 * 60 * 2); afterAll(async () => { @@ -163,9 +167,15 @@ describe('Webリソース', () => { }); describe.each([{ path: '/queue' }])('$path', ({ path }) => { + test('はログインしないとGETできない。', async () => await notOk({ + path, + status: 401, + })); + test('はadminでなければGETできない。', async () => await notOk({ path, - status: 500, // FIXME? 403ではない。 + cookie: cookie(bob), + status: 403, })); test('はadminならGETできる。', async () => await ok({ From e8ff281db050b36d12803fc71b02f71ac5e9e0c7 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 21 Aug 2023 17:22:49 +0900 Subject: [PATCH 08/15] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08e059b3b4..ddfe7cdcf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ - Fix: 一部のfeatured noteを照会できない問題を修正 - Fix: muteがapiからのuser list timeline取得で機能しない問題を修正 - Fix: ジョブキュー管理画面の認証を回避できる問題を修正 +- Fix: 一部のサーバー内部エラーがスタックトレースを返さないように修正 ## 13.14.2 From 49fc4cce3c778afd4c9540b0042d750fad77cfca Mon Sep 17 00:00:00 2001 From: atsuchan <83960488+atsu1125@users.noreply.github.com> Date: Mon, 21 Aug 2023 17:26:21 +0900 Subject: [PATCH 09/15] fix: Make more than 10 announcements visible on Admin (#11720) --- packages/frontend/src/pages/admin/announcements.vue | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/frontend/src/pages/admin/announcements.vue b/packages/frontend/src/pages/admin/announcements.vue index bb903af459..a0a7b569f3 100644 --- a/packages/frontend/src/pages/admin/announcements.vue +++ b/packages/frontend/src/pages/admin/announcements.vue @@ -57,6 +57,9 @@ SPDX-License-Identifier: AGPL-3.0-only
+ + {{ i18n.ts.more }} + @@ -124,6 +127,12 @@ async function save(announcement) { } } +function more() { + os.api('admin/announcements/list', { untilId: announcements.reduce((acc, announcement) => announcement.id != null ? announcement : acc).id }).then(announcementResponse => { + announcements = announcements.concat(announcementResponse); + }); +} + function refresh() { os.api('admin/announcements/list').then(announcementResponse => { announcements = announcementResponse; From f664f941a28508cbda9780cbc641eb59f2b31f13 Mon Sep 17 00:00:00 2001 From: White-Green <43771790+White-Green@users.noreply.github.com> Date: Mon, 21 Aug 2023 17:33:04 +0900 Subject: [PATCH 10/15] fix: antennas validation (#11469) --- packages/backend/src/server/api/endpoints/antennas/create.ts | 4 ++-- packages/backend/src/server/api/endpoints/antennas/update.ts | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/server/api/endpoints/antennas/create.ts b/packages/backend/src/server/api/endpoints/antennas/create.ts index 74ea74ffd0..1f6a3fa736 100644 --- a/packages/backend/src/server/api/endpoints/antennas/create.ts +++ b/packages/backend/src/server/api/endpoints/antennas/create.ts @@ -85,8 +85,8 @@ export default class extends Endpoint { // eslint- private globalEventService: GlobalEventService, ) { super(meta, paramDef, async (ps, me) => { - if ((ps.keywords.length === 0) || ps.keywords[0].every(x => x === '')) { - throw new Error('invalid param'); + if (ps.keywords.flat().every(x => x === '') && ps.excludeKeywords.flat().every(x => x === '')) { + throw new Error('either keywords or excludeKeywords is required.'); } const currentAntennasCount = await this.antennasRepository.countBy({ diff --git a/packages/backend/src/server/api/endpoints/antennas/update.ts b/packages/backend/src/server/api/endpoints/antennas/update.ts index de6a6020c5..6247c5469f 100644 --- a/packages/backend/src/server/api/endpoints/antennas/update.ts +++ b/packages/backend/src/server/api/endpoints/antennas/update.ts @@ -82,6 +82,9 @@ export default class extends Endpoint { // eslint- private globalEventService: GlobalEventService, ) { super(meta, paramDef, async (ps, me) => { + if (ps.keywords.flat().every(x => x === '') && ps.excludeKeywords.flat().every(x => x === '')) { + throw new Error('either keywords or excludeKeywords is required.'); + } // Fetch the antenna const antenna = await this.antennasRepository.findOneBy({ id: ps.antennaId, From 5758ea463a9470365de157c69354f12b46580c03 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 21 Aug 2023 18:52:20 +0900 Subject: [PATCH 11/15] =?UTF-8?q?=E3=83=97=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E3=81=AE=E8=A1=A8=E7=A4=BA=E7=8A=B6=E6=85=8B=E3=82=92?= =?UTF-8?q?=E8=A8=98=E6=86=B6=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=20(#11346)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: keep show showPreview * docs(changelog): add プレビューの表示した状態ををダイアログを閉じても保存するように * chore: 記憶する領域をdeviceに --- CHANGELOG.md | 1 + packages/frontend/src/components/MkPostForm.vue | 3 ++- packages/frontend/src/store.ts | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddfe7cdcf4..c2af31fce0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ ### Client - リストTLで、ユーザーが追加・削除されてもTLを初期化しないように - URL取得変数を関数に変更 CURRENT_URL -> Mk:url() +- プレビューの表示状態を記憶するように - Fix: モバイル表示のときページ下部がナビゲーションバーに隠れる問題を修正 - Fix: 一部モーダルダイアログでスクロールできない問題を修正 - Fix: Selecting all emojis in Custom emoji is impossible diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index afbec98d61..cbf0d8d871 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -171,7 +171,8 @@ let poll = $ref<{ expiredAfter: string | null; } | null>(null); let useCw = $ref(false); -let showPreview = $ref(false); +let showPreview = $ref(defaultStore.state.showPreview); +watch($$(showPreview), () => defaultStore.set('showPreview', showPreview)); let cw = $ref(null); let localOnly = $ref(props.initialLocalOnly ?? defaultStore.state.rememberNoteVisibility ? defaultStore.state.localOnly : defaultStore.state.defaultNoteLocalOnly); let visibility = $ref(props.initialVisibility ?? (defaultStore.state.rememberNoteVisibility ? defaultStore.state.visibility : defaultStore.state.defaultNoteVisibility) as typeof misskey.noteVisibilities[number]); diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index 1cb3486f74..e9f672384e 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -135,6 +135,10 @@ export const defaultStore = markRaw(new Storage('base', { where: 'deviceAccount', default: false, }, + showPreview: { + where: 'device', + default: false, + }, statusbars: { where: 'deviceAccount', default: [] as { From 77f18f425013b466ac17cf55fed4f4bae0d1f088 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 21 Aug 2023 18:53:04 +0900 Subject: [PATCH 12/15] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2af31fce0..a768f0ecb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ ### Client - メニューのスイッチの動作を改善 - 絵文字ピッカーの検索の表示件数を100件に増加 +- 投稿フォームのプレビューの表示状態を記憶するように - Enhance: ユーザーメニューでスイッチでユーザーリストに追加・削除できるように - Enhance: 自分が押したリアクションのデザインを改善 - Enhance: ノート検索にローカルのみ検索可能なオプションの追加 @@ -53,7 +54,6 @@ ### Client - リストTLで、ユーザーが追加・削除されてもTLを初期化しないように - URL取得変数を関数に変更 CURRENT_URL -> Mk:url() -- プレビューの表示状態を記憶するように - Fix: モバイル表示のときページ下部がナビゲーションバーに隠れる問題を修正 - Fix: 一部モーダルダイアログでスクロールできない問題を修正 - Fix: Selecting all emojis in Custom emoji is impossible From 70a78009270df3ff9a76e84a4e2dd0837a1b5f46 Mon Sep 17 00:00:00 2001 From: GrapeApple0 <84321396+GrapeApple0@users.noreply.github.com> Date: Mon, 21 Aug 2023 20:23:09 +0900 Subject: [PATCH 13/15] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=95=E3=82=A3?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=81=AB=E3=81=9D=E3=81=AE=E4=BA=BA=E3=81=8C?= =?UTF-8?q?=E4=BD=9C=E3=81=A3=E3=81=9FPlay=E3=81=AE=E4=B8=80=E8=A6=A7?= =?UTF-8?q?=E5=87=BA=E3=81=9B=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=20(#1144?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * プロフィールにその人が作ったPlayの一覧出せるように * Update CHANGELOG.md * playの公開範囲を設定できるように * 間違えて変更してしまったのを修正 * Update packages/frontend/src/pages/flash/flash-edit.vue * Update packages/frontend/src/pages/flash/flash-edit.vue * tweak * Update packages/backend/migration/1690796169261-play-visibility.js * Update packages/backend/src/models/entities/Flash.ts * Update packages/backend/src/models/entities/Flash.ts * Update Flash.ts --------- Co-authored-by: syuilo --- CHANGELOG.md | 1 + locales/en-US.yml | 1 + locales/index.d.ts | 1 + locales/ja-JP.yml | 1 + .../1690796169261-play-visibility.js | 15 +++++ packages/backend/src/models/entities/Flash.ts | 9 +++ .../backend/src/server/api/EndpointsModule.ts | 4 ++ packages/backend/src/server/api/endpoints.ts | 2 + .../src/server/api/endpoints/flash/update.ts | 1 + .../src/server/api/endpoints/users/flashs.ts | 62 +++++++++++++++++++ .../frontend/src/pages/flash/flash-edit.vue | 8 +++ packages/frontend/src/pages/user/flashs.vue | 31 ++++++++++ packages/frontend/src/pages/user/index.vue | 6 ++ packages/misskey-js/src/api.types.ts | 1 + 14 files changed, 143 insertions(+) create mode 100644 packages/backend/migration/1690796169261-play-visibility.js create mode 100644 packages/backend/src/server/api/endpoints/users/flashs.ts create mode 100644 packages/frontend/src/pages/user/flashs.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index a768f0ecb2..88c6c36252 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ - チャンネルをセンシティブ指定できるようになりました ### Client +- プロフィールにその人が作ったPlayの一覧出せるように - メニューのスイッチの動作を改善 - 絵文字ピッカーの検索の表示件数を100件に増加 - 投稿フォームのプレビューの表示状態を記憶するように diff --git a/locales/en-US.yml b/locales/en-US.yml index 097aba76ba..320a2dbcbc 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -680,6 +680,7 @@ createNewClip: "Create new clip" unclip: "Unclip" confirmToUnclipAlreadyClippedNote: "This note is already part of the \"{name}\" clip. Do you want to remove it from this clip instead?" public: "Public" +private: "Private" i18nInfo: "Misskey is being translated into various languages by volunteers. You can help at {link}." manageAccessTokens: "Manage access tokens" accountInfo: "Account Info" diff --git a/locales/index.d.ts b/locales/index.d.ts index d7c85b9597..1f25edd0ef 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -684,6 +684,7 @@ export interface Locale { "unclip": string; "confirmToUnclipAlreadyClippedNote": string; "public": string; + "private": string; "i18nInfo": string; "manageAccessTokens": string; "accountInfo": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 0dfaa43653..2e0e64bbef 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -681,6 +681,7 @@ createNewClip: "新しいクリップを作成" unclip: "クリップ解除" confirmToUnclipAlreadyClippedNote: "このノートはすでにクリップ「{name}」に含まれています。ノートをこのクリップから除外しますか?" public: "パブリック" +private: "非公開" i18nInfo: "Misskeyは有志によって様々な言語に翻訳されています。{link}で翻訳に協力できます。" manageAccessTokens: "アクセストークンの管理" accountInfo: "アカウント情報" diff --git a/packages/backend/migration/1690796169261-play-visibility.js b/packages/backend/migration/1690796169261-play-visibility.js new file mode 100644 index 0000000000..c57fa7a109 --- /dev/null +++ b/packages/backend/migration/1690796169261-play-visibility.js @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class PlayVisibility1689102832143 { + name = 'PlayVisibility1690796169261' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "public"."flash" ADD "visibility" character varying(512) DEFAULT 'public'`, undefined); + } + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "public"."flash" DROP COLUMN "visibility"`, undefined); + } +} diff --git a/packages/backend/src/models/entities/Flash.ts b/packages/backend/src/models/entities/Flash.ts index af4553ee9b..38e023332e 100644 --- a/packages/backend/src/models/entities/Flash.ts +++ b/packages/backend/src/models/entities/Flash.ts @@ -61,4 +61,13 @@ export class MiFlash { default: 0, }) public likedCount: number; + + /** + * public ... 公開 + * private ... プロフィールには表示しない + */ + @Column('varchar', { + length: 512, default: 'public', + }) + public visibility: 'public' | 'private'; } diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts index 3be6524689..799ba4498d 100644 --- a/packages/backend/src/server/api/EndpointsModule.ts +++ b/packages/backend/src/server/api/EndpointsModule.ts @@ -336,6 +336,7 @@ import * as ep___users_lists_unfavorite from './endpoints/users/lists/unfavorite import * as ep___users_lists_create_from_public from './endpoints/users/lists/create-from-public.js'; import * as ep___users_notes from './endpoints/users/notes.js'; import * as ep___users_pages from './endpoints/users/pages.js'; +import * as ep___users_flashs from './endpoints/users/flashs.js'; import * as ep___users_reactions from './endpoints/users/reactions.js'; import * as ep___users_recommendation from './endpoints/users/recommendation.js'; import * as ep___users_relation from './endpoints/users/relation.js'; @@ -681,6 +682,7 @@ const $users_lists_unfavorite: Provider = { provide: 'ep:users/lists/unfavorite' const $users_lists_create_from_public: Provider = { provide: 'ep:users/lists/create-from-public', useClass: ep___users_lists_create_from_public.default }; const $users_notes: Provider = { provide: 'ep:users/notes', useClass: ep___users_notes.default }; const $users_pages: Provider = { provide: 'ep:users/pages', useClass: ep___users_pages.default }; +const $users_flashs: Provider = { provide: 'ep:users/flashs', useClass: ep___users_flashs.default }; const $users_reactions: Provider = { provide: 'ep:users/reactions', useClass: ep___users_reactions.default }; const $users_recommendation: Provider = { provide: 'ep:users/recommendation', useClass: ep___users_recommendation.default }; const $users_relation: Provider = { provide: 'ep:users/relation', useClass: ep___users_relation.default }; @@ -1030,6 +1032,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $users_lists_create_from_public, $users_notes, $users_pages, + $users_flashs, $users_reactions, $users_recommendation, $users_relation, @@ -1371,6 +1374,7 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention $users_lists_create_from_public, $users_notes, $users_pages, + $users_flashs, $users_reactions, $users_recommendation, $users_relation, diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts index 5fef975fa6..3924b43d16 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -336,6 +336,7 @@ import * as ep___users_lists_create_from_public from './endpoints/users/lists/cr import * as ep___users_lists_update from './endpoints/users/lists/update.js'; import * as ep___users_notes from './endpoints/users/notes.js'; import * as ep___users_pages from './endpoints/users/pages.js'; +import * as ep___users_flashs from './endpoints/users/flashs.js'; import * as ep___users_reactions from './endpoints/users/reactions.js'; import * as ep___users_recommendation from './endpoints/users/recommendation.js'; import * as ep___users_relation from './endpoints/users/relation.js'; @@ -679,6 +680,7 @@ const eps = [ ['users/lists/create-from-public', ep___users_lists_create_from_public], ['users/notes', ep___users_notes], ['users/pages', ep___users_pages], + ['users/flashs', ep___users_flashs], ['users/reactions', ep___users_reactions], ['users/recommendation', ep___users_recommendation], ['users/relation', ep___users_relation], diff --git a/packages/backend/src/server/api/endpoints/flash/update.ts b/packages/backend/src/server/api/endpoints/flash/update.ts index 04ed79350e..9da29b50ea 100644 --- a/packages/backend/src/server/api/endpoints/flash/update.ts +++ b/packages/backend/src/server/api/endpoints/flash/update.ts @@ -49,6 +49,7 @@ export const paramDef = { permissions: { type: 'array', items: { type: 'string', } }, + visibility: { type: 'string', enum: ['public', 'private'] }, }, required: ['flashId', 'title', 'summary', 'script', 'permissions'], } as const; diff --git a/packages/backend/src/server/api/endpoints/users/flashs.ts b/packages/backend/src/server/api/endpoints/users/flashs.ts new file mode 100644 index 0000000000..4e267f9003 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/users/flashs.ts @@ -0,0 +1,62 @@ +/* + * SPDX-FileCopyrightText: syuilo and other misskey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { QueryService } from '@/core/QueryService.js'; +import { FlashEntityService } from '@/core/entities/FlashEntityService.js'; +import type { FlashsRepository } from '@/models/index.js'; +import { DI } from '@/di-symbols.js'; + +export const meta = { + tags: ['users', 'flashs'], + + description: 'Show all flashs this user created.', + + res: { + type: 'array', + optional: false, nullable: false, + items: { + type: 'object', + optional: false, nullable: false, + ref: 'Flash', + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + userId: { type: 'string', format: 'misskey:id' }, + limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, + sinceId: { type: 'string', format: 'misskey:id' }, + untilId: { type: 'string', format: 'misskey:id' }, + }, + required: ['userId'], +} as const; + +// eslint-disable-next-line import/no-default-export +@Injectable() +export default class extends Endpoint { + constructor( + @Inject(DI.flashsRepository) + private flashsRepository: FlashsRepository, + + private flashEntityService: FlashEntityService, + private queryService: QueryService, + ) { + super(meta, paramDef, async (ps, me) => { + const query = this.queryService.makePaginationQuery(this.flashsRepository.createQueryBuilder('flash'), ps.sinceId, ps.untilId) + .andWhere('flash.userId = :userId', { userId: ps.userId }) + .andWhere('flash.visibility = \'public\''); + + const flashs = await query + .limit(ps.limit) + .getMany(); + + return await this.flashEntityService.packMany(flashs); + }); + } +} diff --git a/packages/frontend/src/pages/flash/flash-edit.vue b/packages/frontend/src/pages/flash/flash-edit.vue index fecf6edd0c..414fe4836c 100644 --- a/packages/frontend/src/pages/flash/flash-edit.vue +++ b/packages/frontend/src/pages/flash/flash-edit.vue @@ -23,6 +23,11 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts.show }} {{ i18n.ts.delete }} + + + + + @@ -36,6 +41,7 @@ import { i18n } from '@/i18n'; import { definePageMetadata } from '@/scripts/page-metadata'; import MkTextarea from '@/components/MkTextarea.vue'; import MkInput from '@/components/MkInput.vue'; +import MkSelect from '@/components/MkSelect.vue'; import { useRouter } from '@/router'; const PRESET_DEFAULT = `/// @ 0.15.0 @@ -358,6 +364,7 @@ const props = defineProps<{ }>(); let flash = $ref(null); +let visibility = $ref('public'); if (props.id) { flash = await os.api('flash/show', { @@ -402,6 +409,7 @@ async function save() { summary, permissions, script, + visibility, }); } else { const created = await os.apiWithDialog('flash/create', { diff --git a/packages/frontend/src/pages/user/flashs.vue b/packages/frontend/src/pages/user/flashs.vue new file mode 100644 index 0000000000..b91ecb8de6 --- /dev/null +++ b/packages/frontend/src/pages/user/flashs.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/packages/frontend/src/pages/user/index.vue b/packages/frontend/src/pages/user/index.vue index 314548fee3..c014897a24 100644 --- a/packages/frontend/src/pages/user/index.vue +++ b/packages/frontend/src/pages/user/index.vue @@ -16,6 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only + @@ -42,6 +43,7 @@ const XReactions = defineAsyncComponent(() => import('./reactions.vue')); const XClips = defineAsyncComponent(() => import('./clips.vue')); const XLists = defineAsyncComponent(() => import('./lists.vue')); const XPages = defineAsyncComponent(() => import('./pages.vue')); +const XFlashs = defineAsyncComponent(() => import('./flashs.vue')); const XGallery = defineAsyncComponent(() => import('./gallery.vue')); const props = withDefaults(defineProps<{ @@ -103,6 +105,10 @@ const headerTabs = $computed(() => user ? [{ key: 'pages', title: i18n.ts.pages, icon: 'ti ti-news', +}, { + key: 'flashs', + title: 'Play', + icon: 'ti ti-player-play', }, { key: 'gallery', title: i18n.ts.gallery, diff --git a/packages/misskey-js/src/api.types.ts b/packages/misskey-js/src/api.types.ts index de9af99168..70ef570166 100644 --- a/packages/misskey-js/src/api.types.ts +++ b/packages/misskey-js/src/api.types.ts @@ -621,6 +621,7 @@ export type Endpoints = { 'users/lists/update': { req: { listId: UserList['id']; name: string; }; res: UserList; }; 'users/notes': { req: { userId: User['id']; limit?: number; sinceId?: Note['id']; untilId?: Note['id']; sinceDate?: number; untilDate?: number; }; res: Note[]; }; 'users/pages': { req: TODO; res: TODO; }; + 'users/flashs': { req: TODO; res: TODO; }; 'users/recommendation': { req: TODO; res: TODO; }; 'users/relation': { req: TODO; res: TODO; }; 'users/report-abuse': { req: TODO; res: TODO; }; From 1f7a4b092d4b3ad3c1f68470d5847a7706b7fb9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 21 Aug 2023 20:24:18 +0900 Subject: [PATCH 14/15] =?UTF-8?q?fix(frontend):=20=E5=8B=95=E3=81=8D?= =?UTF-8?q?=E3=81=AE=E3=81=82=E3=82=8BMFM=E7=84=A1=E5=8A=B9=E6=99=82?= =?UTF-8?q?=E3=81=AB=E3=83=AC=E3=82=A4=E3=83=B3=E3=83=9C=E3=83=BC=E6=96=87?= =?UTF-8?q?=E5=AD=97=E3=81=8C=E5=87=BA=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=20(#11361)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * (fix) mfm: rainbow fallback * Update changelog * Update CHANGELOG.md (カレンダーリリース対応) --------- Co-authored-by: syuilo --- CHANGELOG.md | 3 ++- .../src/components/global/MkMisskeyFlavoredMarkdown.ts | 7 ++++++- packages/frontend/src/style.scss | 7 +++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88c6c36252..e57a2c4fd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,8 @@ - Enhance: 自分が押したリアクションのデザインを改善 - Enhance: ノート検索にローカルのみ検索可能なオプションの追加 - Enhance: AiScriptで`LOCALE`として現在の設定言語を取得できるように +- `$[rainbow ]`記法が、動きのあるMFMが無効になっていても使用できるようになりました +- Playの操作を行うAPI TokenをAPIコンソールから発行できるように - Fix: サーバー情報画面(`/instance-info/{domain}`)でブロックができないのを修正 - Fix: 未読のお知らせの「わかった」をクリック・タップしてもその場で「わかった」が消えない問題を修正 - Fix: iOSで画面を回転させるとテキストサイズが変わる問題を修正 @@ -38,7 +40,6 @@ - Fix: タイムラインを下にスクロールしてノート画面に移動して再び戻ったら以前のスクロール位置を失う問題を修正 - Fix: Misskeyプラグインをインストールする際のAiScriptバージョンのチェックが0.14.0以降に対応していない問題を修正 - Fix: 他のサーバーのユーザーへ「メッセージを送信」した時の初期テキストのメンションが間違っている問題を修正 -- Playの操作を行うAPI TokenをAPIコンソールから発行できるように ### Server - Fix: ノート検索 `notes/search` にてhostを指定した際に検索結果に反映されるように diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts index 567508d220..f9e502dc44 100644 --- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts +++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts @@ -175,8 +175,13 @@ export default function(props: { }, genEl(token.children, scale)); } case 'rainbow': { + if (!useAnim) { + return h('span', { + class: '_mfm_rainbow_fallback_', + }, genEl(token.children, scale)); + } const speed = validTime(token.props.args.speed) ?? '1s'; - style = useAnim ? `animation: mfm-rainbow ${speed} linear infinite;` : ''; + style = `animation: mfm-rainbow ${speed} linear infinite;`; break; } case 'sparkle': { diff --git a/packages/frontend/src/style.scss b/packages/frontend/src/style.scss index dbfb8d0dbf..948d27536c 100644 --- a/packages/frontend/src/style.scss +++ b/packages/frontend/src/style.scss @@ -527,6 +527,13 @@ hr { } } +._mfm_rainbow_fallback_ { + background-image: linear-gradient(to right, rgb(255, 0, 0) 0%, rgb(255, 165, 0) 17%, rgb(255, 255, 0) 33%, rgb(0, 255, 0) 50%, rgb(0, 255, 255) 67%, rgb(0, 0, 255) 83%, rgb(255, 0, 255) 100%); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} + @keyframes mfm-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } From 79db6bd70ea6ab25087c108bfd2b503698495f79 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 21 Aug 2023 20:28:51 +0900 Subject: [PATCH 15/15] 2023.9.0-beta.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7cc040962e..1c6d089e93 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2023.9.0-beta.1", + "version": "2023.9.0-beta.2", "codename": "nasubi", "repository": { "type": "git",