Skip to content

Commit

Permalink
feat: 新カスタム絵文字管理画面(β)の追加 (misskey-dev#13473)
Browse files Browse the repository at this point in the history
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* fix

* fix

* fix

* fix size

* fix register logs

* fix img autosize

* fix row selection

* support delete

* fix border rendering

* fix display:none

* tweak comments

* support choose pc file and drive file

* support directory drag-drop

* fix

* fix comment

* support context menu on data area

* fix autogen

* wip イベント整理

* イベントの整理

* refactor grid

* fix cell re-render bugs

* fix row remove

* fix comment

* fix validation

* fix utils

* list maximum

* add mimetype check

* fix

* fix number cell focus

* fix over 100 file drop

* remove log

* fix patchData

* fix performance

* fix

* support update and delete

* support remote import

* fix layout

* heightやめる

* fix performance

* add list v2 endpoint

* support pagination

* fix api call

* fix no clickable input text

* fix limit

* fix paging

* fix

* fix

* support search

* tweak logs

* tweak cell selection

* fix range select

* block delete

* add comment

* fix

* support import log

* fix dialog

* refactor

* add confirm dialog

* fix name

* fix autogen

* wip

* support image change and highlight row

* add columns

* wip

* support sort

* add role name

* add index to emoji

* refine context menu setting

* support role select

* remove unused buttons

* fix url

* fix MkRoleSelectDialog.vue

* add route

* refine remote page

* enter key search

* fix paste bugs

* fix copy/paste

* fix keyEvent

* fix copy/paste and delete

* fix comment

* fix MkRoleSelectDialog.vue and storybook scenario

* fix MkRoleSelectDialog.vue and storybook scenario

* add MkGrid.stories.impl.ts

* fix

* [wip] add custom-emojis-manager2.stories.impl.ts

* [wip] add custom-emojis-manager2.stories.impl.ts

* wip

* 課題はまだ残っているが、ひとまず完了

* fix validation and register roles

* fix upload

* optimize import

* patch from dev

* i18n

* revert excess fixes

* separate sort order component

* add SPDX

* revert excess fixes

* fix pre test

* fix bugs

* add type column

* fix types

* fix CHANGELOG.md

* fix lit

* lint

* tweak style

* refactor

* fix ci

* autogen

* Update types.ts

* CSS Module化

* fix log

* 縦スクロールを無効化

* MkStickyContainer化

* regenerate locales index.d.ts

* fix

* fix

* テスト

* ランダム値によるUI変更の抑制

* テスト

* tableタグやめる

* fix last-child css

* fix overflow css

* fix endpoint.ts

* tweak css

* 最新への追従とレイアウト微調整

* ソートキーの指定方法を他と合わせた

* fix focus

* fix layout

* v2エンドポイントのルールに対応

* 表示条件などを微調整

* fix MkDataCell.vue

* fix error code

* fix error

* add comment to MkModal.vue

* Update index.d.ts

* fix CHANGELOG.md

* fix color theme

* fix CHANGELOG.md

* fix CHANGELOG.md

* fix center

* fix: テーブルにフォーカスがあり、通常状態であるときはキーイベントの伝搬を止める

* fix: ロール選択用のダイアログにてコンディショナルロールを×ボタンで除外できなかったのを修正

* fix remote list folder

* sticky footers

* chore: fix ci error(just single line-break diff)

* fix loading

* fix like

* comma to space

* fix ci

* fix ci

* removed align-center

---------

Co-authored-by: osamu <46447427+sam-osamu@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
  • Loading branch information
4 people authored and nanasina8 committed Jan 21, 2025
1 parent 6e71717 commit b33366d
Show file tree
Hide file tree
Showing 67 changed files with 8,277 additions and 89 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
## 2024.11.1

### General
-
- Feat: カスタム絵文字管理画面をリニューアル #10996
* β版として公開のため、旧画面も引き続き利用可能です

### Client
- Fix: 画面サイズが変わった際にナビゲーションバーが自動で折りたたまれない問題を修正
Expand Down
226 changes: 225 additions & 1 deletion locales/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ export interface Locale extends ILocale {
* 検索
*/
readonly "search": string;
/**
* リセット
*/
"reset": string;
/**
* 通知
*/
Expand Down Expand Up @@ -10527,7 +10531,227 @@ export interface Locale extends ILocale {
*/
readonly "native": string;
};
readonly "_embedCodeGen": {
"_gridComponent": {
"_error": {
/**
* この値は必須項目です
*/
"requiredValue": string;
/**
* 正規表現によるバリデーションはtype:textのカラムのみサポートします。
*/
"columnTypeNotSupport": string;
/**
* この値は{pattern}のパターンに一致しません
*/
"patternNotMatch": ParameterizedString<"pattern">;
/**
* この値は一意である必要があります
*/
"notUnique": string;
};
};
"_roleSelectDialog": {
/**
* 選択されていません
*/
"notSelected": string;
};
"_customEmojisManager": {
"_gridCommon": {
/**
* 選択行をコピー
*/
"copySelectionRows": string;
/**
* 選択範囲をコピー
*/
"copySelectionRanges": string;
/**
* 選択行を削除
*/
"deleteSelectionRows": string;
/**
* 選択範囲の行を削除
*/
"deleteSelectionRanges": string;
/**
* 検索設定
*/
"searchSettings": string;
/**
* 検索条件を詳細に設定します。
*/
"searchSettingCaption": string;
/**
* 並び順
*/
"sortOrder": string;
/**
* 登録ログ
*/
"registrationLogs": string;
/**
* 絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。
*/
"registrationLogsCaption": string;
/**
* エラー
*/
"alertEmojisRegisterFailedTitle": string;
/**
* 絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。
*/
"alertEmojisRegisterFailedDescription": string;
};
"_logs": {
/**
* 成功ログを表示
*/
"showSuccessLogSwitch": string;
/**
* 失敗ログはありません。
*/
"failureLogNothing": string;
/**
* ログはありません。
*/
"logNothing": string;
};
"_remote": {
/**
* 選択行をインポート
*/
"importSelectionRows": string;
/**
* 選択範囲の行をインポート
*/
"importSelectionRangesRows": string;
/**
* チェックされた絵文字をインポート
*/
"importEmojisButton": string;
/**
* 絵文字のインポート
*/
"confirmImportEmojisTitle": string;
/**
* リモートから受信した{count}個の絵文字のインポートを行います。絵文字のライセンスに十分な注意を払ってください。実行しますか?
*/
"confirmImportEmojisDescription": ParameterizedString<"count">;
};
"_local": {
/**
* 登録済み絵文字一覧
*/
"tabTitleList": string;
/**
* 絵文字の登録
*/
"tabTitleRegister": string;
"_list": {
/**
* 登録された絵文字はありません。
*/
"emojisNothing": string;
/**
* 選択行を削除対象にする
*/
"markAsDeleteTargetRows": string;
/**
* 選択範囲の行を削除対象にする
*/
"markAsDeleteTargetRanges": string;
/**
* 変更された絵文字はありません。
*/
"alertUpdateEmojisNothingDescription": string;
/**
* 削除対象の絵文字はありません。
*/
"alertDeleteEmojisNothingDescription": string;
/**
* 確認
*/
"confirmUpdateEmojisTitle": string;
/**
* {count}個の絵文字を更新します。実行しますか?
*/
"confirmUpdateEmojisDescription": ParameterizedString<"count">;
/**
* 確認
*/
"confirmDeleteEmojisTitle": string;
/**
* チェックがつけられた{count}個の絵文字を削除します。実行しますか?
*/
"confirmDeleteEmojisDescription": ParameterizedString<"count">;
/**
* 絵文字に設定されたロールで検索
*/
"dialogSelectRoleTitle": string;
};
"_register": {
/**
* アップロード設定
*/
"uploadSettingTitle": string;
/**
* この画面で絵文字アップロードを行う際の動作を設定できます。
*/
"uploadSettingDescription": string;
/**
* ディレクトリ名を"category"に入力する
*/
"directoryToCategoryLabel": string;
/**
* ディレクトリをドラッグ・ドロップした時に、ディレクトリ名を"category"に入力します。
*/
"directoryToCategoryCaption": string;
/**
* いずれかの方法で登録する絵文字を選択してください。
*/
"emojiInputAreaCaption": string;
/**
* この枠に画像ファイルまたはディレクトリをドラッグ&ドロップ
*/
"emojiInputAreaList1": string;
/**
* このリンクをクリックしてPCから選択する
*/
"emojiInputAreaList2": string;
/**
* このリンクをクリックしてドライブから選択する
*/
"emojiInputAreaList3": string;
/**
* 確認
*/
"confirmRegisterEmojisTitle": string;
/**
* リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)
*/
"confirmRegisterEmojisDescription": ParameterizedString<"count">;
/**
* 確認
*/
"confirmClearEmojisTitle": string;
/**
* 編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?
*/
"confirmClearEmojisDescription": string;
/**
* 確認
*/
"confirmUploadEmojisTitle": string;
/**
* ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?
*/
"confirmUploadEmojisDescription": ParameterizedString<"count">;
};
};
};
"_embedCodeGen": {
/**
* 埋め込みコードをカスタマイズ
*/
Expand Down
64 changes: 64 additions & 0 deletions locales/ja-JP.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ introMisskey: "ようこそ!Misskeyは、オープンソースの分散型マ
poweredByMisskeyDescription: "{name}は、オープンソースのプラットフォーム<b>Misskey</b>のサーバーのひとつです。"
monthAndDay: "{month}月 {day}日"
search: "検索"
reset: "リセット"
notifications: "通知"
username: "ユーザー名"
password: "パスワード"
Expand Down Expand Up @@ -2804,6 +2805,69 @@ _contextMenu:
appWithShift: "Shiftキーでアプリケーション"
native: "ブラウザのUI"

_gridComponent:
_error:
requiredValue: "この値は必須項目です"
columnTypeNotSupport: "正規表現によるバリデーションはtype:textのカラムのみサポートします。"
patternNotMatch: "この値は{pattern}のパターンに一致しません"
notUnique: "この値は一意である必要があります"

_roleSelectDialog:
notSelected: "選択されていません"

_customEmojisManager:
_gridCommon:
copySelectionRows: "選択行をコピー"
copySelectionRanges: "選択範囲をコピー"
deleteSelectionRows: "選択行を削除"
deleteSelectionRanges: "選択範囲の行を削除"
searchSettings: "検索設定"
searchSettingCaption: "検索条件を詳細に設定します。"
sortOrder: "並び順"
registrationLogs: "登録ログ"
registrationLogsCaption: "絵文字更新・削除時のログが表示されます。更新・削除操作を行ったり、ページを遷移・リロードすると消えます。"
alertEmojisRegisterFailedTitle: "エラー"
alertEmojisRegisterFailedDescription: "絵文字の更新・削除に失敗しました。詳細は登録ログをご確認ください。"
_logs:
showSuccessLogSwitch: "成功ログを表示"
failureLogNothing: "失敗ログはありません。"
logNothing: "ログはありません。"
_remote:
importSelectionRows: "選択行をインポート"
importSelectionRangesRows: "選択範囲の行をインポート"
importEmojisButton: "チェックされた絵文字をインポート"
confirmImportEmojisTitle: "絵文字のインポート"
confirmImportEmojisDescription: "リモートから受信した{count}個の絵文字のインポートを行います。絵文字のライセンスに十分な注意を払ってください。実行しますか?"
_local:
tabTitleList: "登録済み絵文字一覧"
tabTitleRegister: "絵文字の登録"
_list:
emojisNothing: "登録された絵文字はありません。"
markAsDeleteTargetRows: "選択行を削除対象にする"
markAsDeleteTargetRanges: "選択範囲の行を削除対象にする"
alertUpdateEmojisNothingDescription: "変更された絵文字はありません。"
alertDeleteEmojisNothingDescription: "削除対象の絵文字はありません。"
confirmUpdateEmojisTitle: "確認"
confirmUpdateEmojisDescription: "{count}個の絵文字を更新します。実行しますか?"
confirmDeleteEmojisTitle: "確認"
confirmDeleteEmojisDescription: "チェックがつけられた{count}個の絵文字を削除します。実行しますか?"
dialogSelectRoleTitle: "絵文字に設定されたロールで検索"
_register:
uploadSettingTitle: "アップロード設定"
uploadSettingDescription: "この画面で絵文字アップロードを行う際の動作を設定できます。"
directoryToCategoryLabel: "ディレクトリ名を\"category\"に入力する"
directoryToCategoryCaption: "ディレクトリをドラッグ・ドロップした時に、ディレクトリ名を\"category\"に入力します。"
emojiInputAreaCaption: "いずれかの方法で登録する絵文字を選択してください。"
emojiInputAreaList1: "この枠に画像ファイルまたはディレクトリをドラッグ&ドロップ"
emojiInputAreaList2: "このリンクをクリックしてPCから選択する"
emojiInputAreaList3: "このリンクをクリックしてドライブから選択する"
confirmRegisterEmojisTitle: "確認"
confirmRegisterEmojisDescription: "リストに表示されている絵文字を新たなカスタム絵文字として登録します。よろしいですか?(負荷を避けるため、一度の操作で登録可能な絵文字は{count}件までです)"
confirmClearEmojisTitle: "確認"
confirmClearEmojisDescription: "編集内容を破棄し、リストに表示されている絵文字をクリアします。よろしいですか?"
confirmUploadEmojisTitle: "確認"
confirmUploadEmojisDescription: "ドラッグ&ドロップされた{count}個のファイルをドライブにアップロードします。実行しますか?"

_embedCodeGen:
title: "埋め込みコードをカスタマイズ"
header: "ヘッダーを表示"
Expand Down
18 changes: 18 additions & 0 deletions packages/backend/migration/1709126576000-optimize-emoji-index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/

export class OptimizeEmojiIndex1709126576000 {
name = 'OptimizeEmojiIndex1709126576000'

async up(queryRunner) {
await queryRunner.query(`CREATE INDEX "IDX_EMOJI_ROLE_IDS" ON "emoji" using gin ("roleIdsThatCanBeUsedThisEmojiAsReaction")`)
await queryRunner.query(`CREATE INDEX "IDX_EMOJI_CATEGORY" ON "emoji" ("category")`)
}

async down(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_EMOJI_CATEGORY"`)
await queryRunner.query(`DROP INDEX "IDX_EMOJI_ROLE_IDS"`)
}
}
12 changes: 12 additions & 0 deletions packages/backend/src/const.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@ export const DB_MAX_NOTE_TEXT_LENGTH = 8192;
export const DB_MAX_IMAGE_COMMENT_LENGTH = 512;
//#endregion

export const FILE_TYPE_IMAGE = [
'image/png',
'image/gif',
'image/jpeg',
'image/webp',
'image/avif',
'image/apng',
'image/bmp',
'image/tiff',
'image/x-icon',
];

// ブラウザで直接表示することを許可するファイルの種類のリスト
// ここに含まれないものは application/octet-stream としてレスポンスされる
// SVGはXSSを生むので許可しない
Expand Down
Loading

0 comments on commit b33366d

Please sign in to comment.