diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bdc1d135a..ce66d779a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ - Enhance: `Ui:C:postForm` および `Ui:C:postFormButton` に `localOnly` と `visibility` を設定できるように - Enhance: AiScriptを0.18.0にバージョンアップ - Enhance: 通常のノートでも、お気に入りに登録したチャンネルにリノートできるように +- Enhance: 長いテキストをペーストした際にテキストファイルとして添付するかどうかを選択できるように - Fix: 一部のページ内リンクが正しく動作しない問題を修正 - Fix: 周年の実績が閏年を考慮しない問題を修正 - Fix: ローカルURLのプレビューポップアップが左上に表示される diff --git a/locales/index.d.ts b/locales/index.d.ts index 70741b6460..d5d6ef0f34 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -917,7 +917,7 @@ export interface Locale extends ILocale { */ "silencedInstances": string; /** - * サイレンスしたいサーバーのホストを改行で区切って設定します。サイレンスされたサーバーに所属するアカウントはすべて「サイレンス」として扱われ、フォローがすべてリクエストになり、フォロワーでないローカルアカウントにはメンションできなくなります。ブロックしたインスタンスには影響しません。 + * サイレンスしたいサーバーのホストを改行で区切って設定します。サイレンスされたサーバーに所属するアカウントはすべて「サイレンス」として扱われ、フォローがすべてリクエストになります。ブロックしたインスタンスには影響しません。 */ "silencedInstancesDescription": string; /** @@ -1900,6 +1900,10 @@ export interface Locale extends ILocale { * 引用として添付しますか? */ "quoteQuestion": string; + /** + * クリップボードのテキストが長いです。テキストファイルとして添付しますか? + */ + "attachAsFileQuestion": string; /** * まだチャットはありません */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 626e3f30f8..9aa1e6e6a0 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -471,6 +471,7 @@ retype: "再入力" noteOf: "{user}のノート" quoteAttached: "引用付き" quoteQuestion: "引用として添付しますか?" +attachAsFileQuestion: "クリップボードのテキストが長いです。テキストファイルとして添付しますか?" noMessagesYet: "まだチャットはありません" newMessageExists: "新しいメッセージがあります" onlyOneFileCanBeAttached: "メッセージに添付できるファイルはひとつです" diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 41d603e40f..1df9007681 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -612,6 +612,23 @@ async function onPaste(ev: ClipboardEvent) { quoteId.value = paste.substring(url.length).match(/^\/notes\/(.+?)\/?$/)?.[1] ?? null; }); } + + if (paste.length > 1000) { + ev.preventDefault(); + os.confirm({ + type: 'info', + text: i18n.ts.attachAsFileQuestion, + }).then(({ canceled }) => { + if (canceled) { + insertTextAtCursor(textareaEl.value, paste); + return; + } + + const fileName = formatTimeString(new Date(), defaultStore.state.pastedFileName).replace(/{{number}}/g, "0"); + const file = new File([paste], `${fileName}.txt`, { type: "text/plain" }); + upload(file, `${fileName}.txt`); + }); + } } function onDragover(ev) {