From e94c697aae38820138d695a34b0f7af6d5c89e27 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Sun, 26 Jan 2025 12:26:29 +0900 Subject: [PATCH 1/8] New Crowdin updates (#15347) * New translations ja-jp.yml (Russian) * New translations ja-jp.yml (German) --- locales/de-DE.yml | 2 +- locales/ru-RU.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/locales/de-DE.yml b/locales/de-DE.yml index d110fba34b..43b63c2423 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -684,7 +684,7 @@ smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest." testEmail: "Emailversand testen" wordMute: "Wortstummschaltung" wordMuteDescription: "Minimiert Notizen, die das angegebene Wort oder den angegebenen Ausdruck enthalten. Minimierte Notizen können angezeigt werden, indem du auf sie klickst." -hardWordMute: "Harte Wort-Stummschaltung" +hardWordMute: "Harte Wortstummschaltung" showMutedWord: "Stummgeschaltete Wörter anzeigen" hardWordMuteDescription: "Blendet Notizen aus, die das angegebene Wort oder die angegebene Phrase enthalten. Im Gegensatz zur Wortstummschaltung wird die Notiz vollständig ausgeblendet." regexpError: "Fehler in einem regulären Ausdruck" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 64747e0b91..589155ee4b 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -1063,7 +1063,7 @@ hiddenTags: "Скрытые хештеги" notesSearchNotAvailable: "Поиск заметок недоступен" license: "Лицензия" unfavoriteConfirm: "Удалить избранное?" -myClips: "Мои клипы" +myClips: "Мои подборки" drivecleaner: "Очиститель дисков" retryAllQueuesNow: "Повторить все очереди сейчас" retryAllQueuesConfirmTitle: "Хотите попробовать ещё раз?" From f4bca4708eba50cdef4127c74a37678ac25747c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:59:03 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat(frontend):=20=E3=83=AA=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=88=E7=B5=B5=E6=96=87=E5=AD=97=E3=81=AE=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=83=9D=E3=83=BC=E3=83=88=E6=99=82=E3=81=AB=E8=A9=B3?= =?UTF-8?q?=E7=B4=B0=E3=82=92=E7=A2=BA=E8=AA=8D=E3=81=A7=E3=81=8D=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=20(#15344)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(frontend): リモート絵文字のインポート時に詳細を確認できるように * 追加対応 * MkInput -> MkKeyValue --- CHANGELOG.md | 1 + locales/index.d.ts | 4 + locales/ja-JP.yml | 1 + .../components/MkRemoteEmojiEditDialog.vue | 132 ++++++++++++++++++ .../admin/custom-emojis-manager.remote.vue | 48 ++++++- .../src/pages/custom-emojis-manager.vue | 18 +++ 6 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 packages/frontend/src/components/MkRemoteEmojiEditDialog.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index 57d8a528f3..7339dbd3ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ (Based on https://github.com/Otaku-Social/maniakey/pull/14) - Enhance: AiScriptの拡張API関数において引数の型チェックをより厳格に - Enhance: クエリパラメータでuiを一時的に変更できるように #15240 +- Enhance: リモート絵文字のインポート時に詳細を確認できるように #15336 - Fix: 画面サイズが変わった際にナビゲーションバーが自動で折りたたまれない問題を修正 - Fix: サーバー情報メニューに区切り線が不足していたのを修正 - Fix: ノートがログインしているユーザーしか見れない場合にログインダイアログを閉じるとその後の動線がなくなる問題を修正 diff --git a/locales/index.d.ts b/locales/index.d.ts index b98fd5d423..83159337ae 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -10635,6 +10635,10 @@ export interface Locale extends ILocale { "logNothing": string; }; "_remote": { + /** + * 選択行の詳細 + */ + "selectionRowDetail": string; /** * 選択行をインポート */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 638f2a69c3..42c25a58a6 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2837,6 +2837,7 @@ _customEmojisManager: failureLogNothing: "失敗ログはありません。" logNothing: "ログはありません。" _remote: + selectionRowDetail: "選択行の詳細" importSelectionRows: "選択行をインポート" importSelectionRangesRows: "選択範囲の行をインポート" importEmojisButton: "チェックされた絵文字をインポート" diff --git a/packages/frontend/src/components/MkRemoteEmojiEditDialog.vue b/packages/frontend/src/components/MkRemoteEmojiEditDialog.vue new file mode 100644 index 0000000000..873b276b3d --- /dev/null +++ b/packages/frontend/src/components/MkRemoteEmojiEditDialog.vue @@ -0,0 +1,132 @@ + + + + + + + diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue index 9a9d2990ba..14a3b71e53 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue @@ -34,6 +34,16 @@ SPDX-License-Identifier: AGPL-3.0-only > + + + + import { computed, onMounted, ref, useCssModule } from 'vue'; import * as Misskey from 'misskey-js'; +import MkRemoteEmojiEditDialog from '@/components/MkRemoteEmojiEditDialog.vue'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { i18n } from '@/i18n.js'; import MkButton from '@/components/MkButton.vue'; @@ -135,7 +146,7 @@ import { deviceKind } from '@/scripts/device-kind.js'; import MkPagingButtons from '@/components/MkPagingButtons.vue'; import MkSortOrderEditor from '@/components/MkSortOrderEditor.vue'; import { SortOrder } from '@/components/MkSortOrderEditor.define.js'; -import { useLoading } from "@/components/hook/useLoading.js"; +import { useLoading } from '@/components/hook/useLoading.js'; type GridItem = { checked: boolean; @@ -178,12 +189,37 @@ function setupGrid(): GridSetting { { bindTo: 'url', icon: 'ti-icons', type: 'image', editable: false, width: 'auto' }, { bindTo: 'name', title: 'name', type: 'text', editable: false, width: 'auto' }, { bindTo: 'host', title: 'host', type: 'text', editable: false, width: 'auto' }, + { bindTo: 'license', title: 'license', type: 'text', editable: false, width: 200 }, { bindTo: 'uri', title: 'uri', type: 'text', editable: false, width: 'auto' }, { bindTo: 'publicUrl', title: 'publicUrl', type: 'text', editable: false, width: 'auto' }, ], cells: { contextMenuFactory: (col, row, value, context) => { return [ + { + type: 'button', + text: i18n.ts._customEmojisManager._remote.selectionRowDetail, + icon: 'ti ti-info-circle', + action: async () => { + const target = customEmojis.value[row.index]; + const { dispose } = os.popup(MkRemoteEmojiEditDialog, { + emoji: { + id: target.id, + name: target.name, + host: target.host!, + license: target.license, + url: target.publicUrl, + }, + }, { + done: () => { + dispose(); + }, + closed: () => { + dispose(); + }, + }); + }, + }, { type: 'button', text: i18n.ts._customEmojisManager._remote.importSelectionRangesRows, @@ -207,6 +243,7 @@ const currentPage = ref(0); const queryName = ref(null); const queryHost = ref(null); +const queryLicense = ref(null); const queryUri = ref(null); const queryPublicUrl = ref(null); const previousQuery = ref(undefined); @@ -229,6 +266,7 @@ async function onSearchRequest() { function onQueryResetButtonClicked() { queryName.value = null; queryHost.value = null; + queryLicense.value = null; queryUri.value = null; queryPublicUrl.value = null; } @@ -306,6 +344,7 @@ async function refreshCustomEmojis() { const query: Misskey.entities.V2AdminEmojiListRequest['query'] = { name: emptyStrToUndefined(queryName.value), host: emptyStrToUndefined(queryHost.value), + license: emptyStrToUndefined(queryLicense.value), uri: emptyStrToUndefined(queryUri.value), publicUrl: emptyStrToUndefined(queryPublicUrl.value), hostType: 'remote', @@ -330,6 +369,7 @@ async function refreshCustomEmojis() { id: it.id, url: it.publicUrl, name: it.name, + license: it.license, host: it.host!, })); } @@ -356,6 +396,10 @@ onMounted(async () => { grid-column: 2 / 3; } +.col3 { + grid-column: 3 / 4; +} + .root { padding: 16px; } @@ -366,7 +410,7 @@ onMounted(async () => { .searchArea { display: grid; - grid-template-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr 1fr; gap: 16px; } diff --git a/packages/frontend/src/pages/custom-emojis-manager.vue b/packages/frontend/src/pages/custom-emojis-manager.vue index 789a63eb90..82c6d8df4e 100644 --- a/packages/frontend/src/pages/custom-emojis-manager.vue +++ b/packages/frontend/src/pages/custom-emojis-manager.vue @@ -78,6 +78,7 @@ import { computed, defineAsyncComponent, ref, shallowRef } from 'vue'; import MkButton from '@/components/MkButton.vue'; import MkInput from '@/components/MkInput.vue'; import MkPagination from '@/components/MkPagination.vue'; +import MkRemoteEmojiEditDialog from '@/components/MkRemoteEmojiEditDialog.vue'; import MkSwitch from '@/components/MkSwitch.vue'; import FormSplit from '@/components/form/split.vue'; import { selectFile } from '@/scripts/select-file.js'; @@ -159,6 +160,19 @@ const edit = (emoji) => { }); }; +const detailRemoteEmoji = (emoji) => { + const { dispose } = os.popup(MkRemoteEmojiEditDialog, { + emoji: emoji, + }, { + done: () => { + dispose(); + }, + closed: () => { + dispose(); + }, + }); +}; + const importEmoji = (emoji) => { os.apiWithDialog('admin/emoji/copy', { emojiId: emoji.id, @@ -169,6 +183,10 @@ const remoteMenu = (emoji, ev: MouseEvent) => { os.popupMenu([{ type: 'label', text: ':' + emoji.name + ':', + }, { + text: i18n.ts.details, + icon: 'ti ti-info-circle', + action: () => { detailRemoteEmoji(emoji); }, }, { text: i18n.ts.import, icon: 'ti ti-plus', From ef29130057e08e3c2b51625671d8cdfd495f6d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A5=BA=E5=AD=90w=20=28Yumechi=29?= <35571479+eternal-flame-AD@users.noreply.github.com> Date: Sun, 26 Jan 2025 06:03:42 +0000 Subject: [PATCH 3/8] =?UTF-8?q?fix(backend):=20=E3=83=8E=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=81=AE=E9=96=B2=E8=A6=A7=E3=81=AB=E3=83=AD=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E5=BF=85=E9=A0=88=E3=81=AB=E3=81=97=E3=81=A6=E3=82=82?= =?UTF-8?q?Feed=E3=81=A7=E3=83=8E=E3=83=BC=E3=83=88=E3=81=8C=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=95=E3=82=8C=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3=20(#15083)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: eternal-flame-AD Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> --- CHANGELOG.md | 1 + packages/backend/src/server/web/ClientServerService.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7339dbd3ff..8536c1a4ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ - Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 ) - Fix: 起動前の疎通チェックが機能しなくなっていた問題を修正 (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737) +- Fix: ノートの閲覧にログイン必須にしてもFeedでノートが表示されてしまう問題を修正 - Fix: 絵文字の連合でライセンス欄を相互にやり取りするように ( #10859, #14109 ) - Fix: ロックダウンされた期間指定のノートがStreaming経由でLTLに出現するのを修正 ( #15200 ) - Fix: disableClustering設定時の初期化ロジックを調整( #15223 ) diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index d450c3fb01..4c884dd314 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -512,6 +512,7 @@ export class ClientServerService { usernameLower: username.toLowerCase(), host: host ?? IsNull(), isSuspended: false, + requireSigninToViewContents: false, }); return user && await this.feedService.packFeed(user); From 791b4500ec405446785acdc6d10c41acd9d2583c 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: Sun, 26 Jan 2025 15:07:12 +0900 Subject: [PATCH 4/8] =?UTF-8?q?fix(frontend):=20=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E3=82=92=E9=96=89=E3=81=98=E3=82=8B=E7=9B=B4=E5=89=8D=E3=81=AB?= =?UTF-8?q?AudioContext=E3=82=92=E9=96=89=E3=81=98=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=20(#15080)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(frontend): 画面を閉じる直前にAudioContextを閉じるように * Update Changelog * Update CHANGELOG.md --------- Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> --- CHANGELOG.md | 1 + packages/frontend/src/scripts/sound.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8536c1a4ef..59fd861ec4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ (Cherry-picked from https://github.com/TeamNijimiss/misskey/commit/800359623e41a662551d774de15b0437b6849bb4) - Fix: ノート作成画面でファイルの添付可能個数を超えてもノートボタンが押せていた問題を修正 - Fix: 「アカウントを管理」画面で、ユーザー情報の取得に失敗したアカウント(削除されたアカウントなど)が表示されない問題を修正 +- Fix: MacOSでChrome系ブラウザを使用している場合に、Misskeyを閉じた際に他のタブのオーディオ機能と干渉する問題を修正 - Fix: 言語データのキャッシュ状況によっては、埋め込みウィジェットが正しく起動しない問題を修正 - Fix: 「削除して編集」でノートの引用を解除出来なかった問題を修正( #14476 ) - Fix: RSSウィジェットが正しく表示されない問題を修正 diff --git a/packages/frontend/src/scripts/sound.ts b/packages/frontend/src/scripts/sound.ts index 05f82fce7d..2008afe045 100644 --- a/packages/frontend/src/scripts/sound.ts +++ b/packages/frontend/src/scripts/sound.ts @@ -93,6 +93,10 @@ export async function loadAudio(url: string, options?: { useCache?: boolean; }) // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (ctx == null) { ctx = new AudioContext(); + + window.addEventListener('beforeunload', () => { + ctx.close(); + }); } if (options?.useCache ?? true) { if (cache.has(url)) { From 297186e492b20c3e54f8cbfe51ec2d7694ca7068 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: Sun, 26 Jan 2025 20:10:22 +0900 Subject: [PATCH 5/8] =?UTF-8?q?enhance(frontend):=20=E7=B5=B5=E6=96=87?= =?UTF-8?q?=E5=AD=97=E7=AE=A1=E7=90=86=E7=94=BB=E9=9D=A2=CE=B2=EF=BC=88?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=82=AB=E3=83=AB=EF=BC=89=E3=81=AEUI?= =?UTF-8?q?=E3=83=BBUX=E6=94=B9=E5=96=84=20(#15349)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * enhance(frontend): 絵文字管理画面β(ローカル)のUI・UX改善 * fix * :art: * 表示件数をメニューから変更するように * 確認ダイアログ * fix i18n * needWideArea: trueならwidgetの開閉ボタンを表示しないように * fix: 検索ウィンドウは一つしか開けないように --- locales/index.d.ts | 43 +- locales/ja-JP.yml | 13 +- .../src/components/MkSortOrderEditor.vue | 8 +- .../frontend/src/components/MkSuperMenu.vue | 2 +- .../frontend/src/components/MkTagItem.vue | 4 +- .../src/components/global/MkPageHeader.vue | 12 +- .../src/components/grid/MkDataCell.vue | 35 +- .../frontend/src/components/grid/MkGrid.vue | 56 ++- .../src/components/grid/MkHeaderCell.vue | 6 +- packages/frontend/src/components/grid/grid.ts | 5 + .../pages/admin/custom-emojis-manager.impl.ts | 3 +- .../custom-emojis-manager.local.list.logs.vue | 39 ++ ...ustom-emojis-manager.local.list.search.vue | 213 ++++++++ .../custom-emojis-manager.local.list.vue | 471 +++++++----------- .../custom-emojis-manager.local.register.vue | 16 +- .../admin/custom-emojis-manager.local.vue | 39 +- ...der.vue => custom-emojis-manager.logs.vue} | 56 +-- .../admin/custom-emojis-manager.remote.vue | 26 +- .../pages/admin/custom-emojis-manager2.vue | 13 +- packages/frontend/src/pages/admin/index.vue | 11 +- .../frontend/src/pages/settings/index.vue | 2 +- packages/frontend/src/ui/universal.vue | 2 +- 22 files changed, 659 insertions(+), 416 deletions(-) create mode 100644 packages/frontend/src/pages/admin/custom-emojis-manager.local.list.logs.vue create mode 100644 packages/frontend/src/pages/admin/custom-emojis-manager.local.list.search.vue rename packages/frontend/src/pages/admin/{custom-emojis-manager.logs-folder.vue => custom-emojis-manager.logs.vue} (62%) diff --git a/locales/index.d.ts b/locales/index.d.ts index 83159337ae..a0540fd228 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -10588,7 +10588,7 @@ export interface Locale extends ILocale { */ "deleteSelectionRows": string; /** - * 選択範囲の行を削除 + * 選択範囲の値をクリア */ "deleteSelectionRanges": string; /** @@ -10599,6 +10599,10 @@ export interface Locale extends ILocale { * 検索条件を詳細に設定します。 */ "searchSettingCaption": string; + /** + * 表示件数 + */ + "searchLimit": string; /** * 並び順 */ @@ -10611,10 +10615,6 @@ export interface Locale extends ILocale { * 絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。 */ "registrationLogsCaption": string; - /** - * エラー - */ - "alertEmojisRegisterFailedTitle": string; /** * 絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。 */ @@ -10691,21 +10691,30 @@ export interface Locale extends ILocale { */ "alertDeleteEmojisNothingDescription": string; /** - * 確認 + * ページを移動しますか? */ - "confirmUpdateEmojisTitle": string; + "confirmMovePage": string; + /** + * 表示を変更しますか? + */ + "confirmChangeView": string; /** * {count}個の絵文字を更新します。実行しますか? */ "confirmUpdateEmojisDescription": ParameterizedString<"count">; - /** - * 確認 - */ - "confirmDeleteEmojisTitle": string; /** * チェックがつけられた{count}個の絵文字を削除します。実行しますか? */ "confirmDeleteEmojisDescription": ParameterizedString<"count">; + /** + * 今までに加えた変更がすべてリセットされます。 + */ + "confirmResetDescription": string; + /** + * このページの絵文字に変更が加えられています。 + * 保存せずにこのままページを移動すると、このページで加えた変更はすべて破棄されます。 + */ + "confirmMovePageDesciption": string; /** * 絵文字に設定されたロールで検索 */ @@ -10744,26 +10753,14 @@ export interface Locale extends ILocale { * このリンクをクリックしてドライブから選択する */ "emojiInputAreaList3": string; - /** - * 確認 - */ - "confirmRegisterEmojisTitle": string; /** * リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです) */ "confirmRegisterEmojisDescription": ParameterizedString<"count">; - /** - * 確認 - */ - "confirmClearEmojisTitle": string; /** * 編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか? */ "confirmClearEmojisDescription": string; - /** - * 確認 - */ - "confirmUploadEmojisTitle": string; /** * ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか? */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 42c25a58a6..a578704434 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2824,13 +2824,13 @@ _customEmojisManager: copySelectionRows: "選択行をコピー" copySelectionRanges: "選択範囲をコピー" deleteSelectionRows: "選択行を削除" - deleteSelectionRanges: "選択範囲の行を削除" + deleteSelectionRanges: "選択範囲の値をクリア" searchSettings: "検索設定" searchSettingCaption: "検索条件を詳細に設定します。" + searchLimit: "表示件数" sortOrder: "並び順" registrationLogs: "登録ログ" registrationLogsCaption: "絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。" - alertEmojisRegisterFailedTitle: "エラー" alertEmojisRegisterFailedDescription: "絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。" _logs: showSuccessLogSwitch: "成功ログを表示" @@ -2852,10 +2852,12 @@ _customEmojisManager: markAsDeleteTargetRanges: "選択範囲の行を削除対象にする" alertUpdateEmojisNothingDescription: "変更された絵文字はありません。" alertDeleteEmojisNothingDescription: "削除対象の絵文字はありません。" - confirmUpdateEmojisTitle: "確認" + confirmMovePage: "ページを移動しますか?" + confirmChangeView: "表示を変更しますか?" confirmUpdateEmojisDescription: "{count}個の絵文字を更新します。実行しますか?" - confirmDeleteEmojisTitle: "確認" confirmDeleteEmojisDescription: "チェックがつけられた{count}個の絵文字を削除します。実行しますか?" + confirmResetDescription: "今までに加えた変更がすべてリセットされます。" + confirmMovePageDesciption: "このページの絵文字に変更が加えられています。\n保存せずにこのままページを移動すると、このページで加えた変更はすべて破棄されます。" dialogSelectRoleTitle: "絵文字に設定されたロールで検索" _register: uploadSettingTitle: "アップロード設定" @@ -2866,11 +2868,8 @@ _customEmojisManager: emojiInputAreaList1: "この枠に画像ファイルまたはディレクトリをドラッグ&ドロップ" emojiInputAreaList2: "このリンクをクリックしてPCから選択する" emojiInputAreaList3: "このリンクをクリックしてドライブから選択する" - confirmRegisterEmojisTitle: "確認" confirmRegisterEmojisDescription: "リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)" - confirmClearEmojisTitle: "確認" confirmClearEmojisDescription: "編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?" - confirmUploadEmojisTitle: "確認" confirmUploadEmojisDescription: "ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?" _embedCodeGen: diff --git a/packages/frontend/src/components/MkSortOrderEditor.vue b/packages/frontend/src/components/MkSortOrderEditor.vue index da08f12297..9decacc5f5 100644 --- a/packages/frontend/src/components/MkSortOrderEditor.vue +++ b/packages/frontend/src/components/MkSortOrderEditor.vue @@ -12,12 +12,13 @@ SPDX-License-Identifier: AGPL-3.0-only :iconClass="order.direction === '+' ? 'ti ti-arrow-up' : 'ti ti-arrow-down'" :exButtonIconClass="'ti ti-x'" :content="order.key" + :class="$style.sortOrderTag" @click="onToggleSortOrderButtonClicked(order)" @exButtonClick="onRemoveSortOrderButtonClicked(order)" /> - + @@ -109,4 +110,9 @@ function emitOrder(sortOrders: SortOrder[]) { border-radius: 9999px; background-color: var(--MI_THEME-buttonBg); } + +.sortOrderTag { + user-select: none; + cursor: pointer; +} diff --git a/packages/frontend/src/components/MkSuperMenu.vue b/packages/frontend/src/components/MkSuperMenu.vue index 0caaed6f39..fa0e40d8f9 100644 --- a/packages/frontend/src/components/MkSuperMenu.vue +++ b/packages/frontend/src/components/MkSuperMenu.vue @@ -47,7 +47,7 @@ export type SuperMenuDef = { active?: boolean; action: (ev: MouseEvent) => void; } | { - type: 'link'; + type?: 'link'; to: string; icon?: string; text: string; diff --git a/packages/frontend/src/components/MkTagItem.vue b/packages/frontend/src/components/MkTagItem.vue index 98f2411392..8b7460f3a3 100644 --- a/packages/frontend/src/components/MkTagItem.vue +++ b/packages/frontend/src/components/MkTagItem.vue @@ -5,10 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue index aa4be69b2c..a2e70a5cad 100644 --- a/packages/frontend/src/components/global/MkPageHeader.vue +++ b/packages/frontend/src/components/global/MkPageHeader.vue @@ -48,13 +48,16 @@ import { scrollToTop } from '@@/js/scroll.js'; import { globalEvents } from '@/events.js'; import { injectReactiveMetadata } from '@/scripts/page-metadata.js'; import { $i, openAccountMenu as openAccountMenu_ } from '@/account.js'; -import { PageHeaderItem } from '@/types/page-header.js'; +import type { PageHeaderItem } from '@/types/page-header.js'; +import type { PageMetadata } from '@/scripts/page-metadata.js'; const props = withDefaults(defineProps<{ + overridePageMetadata?: PageMetadata; tabs?: Tab[]; tab?: string; actions?: PageHeaderItem[] | null; thin?: boolean; + hideTitle?: boolean; displayMyAvatar?: boolean; }>(), { tabs: () => ([] as Tab[]), @@ -64,9 +67,10 @@ const emit = defineEmits<{ (ev: 'update:tab', key: string); }>(); -const pageMetadata = injectReactiveMetadata(); +const injectedPageMetadata = injectReactiveMetadata(); +const pageMetadata = computed(() => props.overridePageMetadata ?? injectedPageMetadata.value); -const hideTitle = inject('shouldOmitHeaderTitle', false); +const hideTitle = computed(() => inject('shouldOmitHeaderTitle', false) || props.hideTitle); const thin_ = props.thin || inject('shouldHeaderThin', false); const el = shallowRef(undefined); @@ -75,7 +79,7 @@ const narrow = ref(false); const hasTabs = computed(() => props.tabs.length > 0); const hasActions = computed(() => props.actions && props.actions.length > 0); const show = computed(() => { - return !hideTitle || hasTabs.value || hasActions.value; + return !hideTitle.value || hasTabs.value || hasActions.value; }); const preventDrag = (ev: TouchEvent) => { diff --git a/packages/frontend/src/components/grid/MkDataCell.vue b/packages/frontend/src/components/grid/MkDataCell.vue index 0ffd42abda..e473b7c1af 100644 --- a/packages/frontend/src/components/grid/MkDataCell.vue +++ b/packages/frontend/src/components/grid/MkDataCell.vue @@ -39,13 +39,15 @@ SPDX-License-Identifier: AGPL-3.0-only {{ cell.value }}
- - +
@@ -375,6 +377,31 @@ $cellHeight: 28px; object-fit: cover; } +.bool { + position: relative; + width: 18px; + height: 18px; + background: var(--MI_THEME-panel); + border: solid 2px var(--MI_THEME-divider); + border-radius: 4px; + box-sizing: border-box; + + &.boolTrue { + border-color: var(--MI_THEME-accent); + background: var(--MI_THEME-accent); + + &::before { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: var(--MI_THEME-fgOnAccent); + font-size: 12px; + line-height: 18px; + } + } +} + .editingInput { padding: 0 8px; width: 100%; diff --git a/packages/frontend/src/components/grid/MkGrid.vue b/packages/frontend/src/components/grid/MkGrid.vue index 60738365fb..4dbd4ebcae 100644 --- a/packages/frontend/src/components/grid/MkGrid.vue +++ b/packages/frontend/src/components/grid/MkGrid.vue @@ -7,7 +7,11 @@ SPDX-License-Identifier: AGPL-3.0-only
(); const props = defineProps<{ - settings: GridSetting, - data: DataSource[] + settings: GridSetting; + data: DataSource[]; }>(); +const rootSetting: Required = { + noOverflowStyle: false, + rounded: true, + outerBorder: true, + ...props.settings.root, +}; + // non-reactive // eslint-disable-next-line vue/no-setup-props-reactivity-loss const rowSetting: Required = { @@ -1277,32 +1288,48 @@ onMounted(() => { overflow-x: scroll; // firefoxだとスクロールバーがセルに重なって見づらくなってしまうのでスペースを空けておく padding-bottom: 8px; + + &.noOverflowHandling { + overflow-x: revert; + padding-bottom: 0; + } } diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue index 55f9632ce4..c4ea3b93e3 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.local.list.vue @@ -5,137 +5,11 @@ SPDX-License-Identifier: AGPL-3.0-only + + +const headerTabs = computed(() => [{ + key: 'list', + title: i18n.ts._customEmojisManager._local.tabTitleList, +}, { + key: 'register', + title: i18n.ts._customEmojisManager._local.tabTitleRegister, +}]); + diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.logs-folder.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.logs.vue similarity index 62% rename from packages/frontend/src/pages/admin/custom-emojis-manager.logs-folder.vue rename to packages/frontend/src/pages/admin/custom-emojis-manager.logs.vue index f75f6c0da5..eef55a9f7e 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.logs-folder.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.logs.vue @@ -4,47 +4,38 @@ SPDX-License-Identifier: AGPL-3.0-only --> - - diff --git a/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue b/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue index 14a3b71e53..eecf8d7390 100644 --- a/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue +++ b/packages/frontend/src/pages/admin/custom-emojis-manager.remote.vue @@ -64,6 +64,8 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+ @@ -74,6 +76,14 @@ SPDX-License-Identifier: AGPL-3.0-only /> + + + +
{{ i18n.ts.search }} @@ -85,7 +95,14 @@ SPDX-License-Identifier: AGPL-3.0-only
- + + + + + +