From ea8e6d88aba5b163cf843736fa77dd398418e031 Mon Sep 17 00:00:00 2001 From: tamaina Date: Wed, 20 Oct 2021 03:10:36 +0900 Subject: [PATCH] =?UTF-8?q?enhance:=20share=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=A7=E3=82=88=E3=82=8A=E5=A4=9A=E3=81=8F=E3=81=AE=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E3=82=92=E6=B8=A1=E3=81=9B=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=20(#7606)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * shareでより多くの情報を渡せるように * from chat ui post-form, remove instant and add share * fix await eating array, make document * add changelog * https://github.com/misskey-dev/misskey/pull/7606/files/3581bf9a060742dc59bf7fb8ea7316809cc60522#r692265037 * reply, renoteにも型定義 * :art: * 閉じなければ100ms後タイムラインに --- CHANGELOG.md | 1 + src/client/components/post-form.vue | 38 ++++++- src/client/pages/share.vue | 158 ++++++++++++++++++++++---- src/client/ui/chat/post-form.vue | 6 +- src/docs/ja-JP/advanced/share-page.md | 56 +++++++++ src/misc/acct.ts | 9 +- 6 files changed, 233 insertions(+), 35 deletions(-) create mode 100644 src/docs/ja-JP/advanced/share-page.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a3d9a1caa..10b1cdb37d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -131,6 +131,7 @@ - ワードミュートのドキュメントを追加 - クライアントのデザインの調整 - 依存関係の更新 +- /share のクエリでリプライやファイル等の情報を渡せるように ### Bugfixes - チャンネルを作成しているとアカウントを削除できないのを修正 diff --git a/src/client/components/post-form.vue b/src/client/components/post-form.vue index a1d89d2a2e..816a69e731 100644 --- a/src/client/components/post-form.vue +++ b/src/client/components/post-form.vue @@ -117,11 +117,28 @@ export default defineComponent({ type: String, required: false }, + initialVisibility: { + type: String, + required: false + }, + initialFiles: { + type: Array, + required: false + }, + initialLocalOnly: { + type: Boolean, + required: false + }, + visibleUsers: { + type: Array, + required: false, + default: () => [] + }, initialNote: { type: Object, required: false }, - instant: { + share: { type: Boolean, required: false, default: false @@ -150,8 +167,7 @@ export default defineComponent({ showPreview: false, cw: null, localOnly: this.$store.state.rememberNoteVisibility ? this.$store.state.localOnly : this.$store.state.defaultNoteLocalOnly, - visibility: this.$store.state.rememberNoteVisibility ? this.$store.state.visibility : this.$store.state.defaultNoteVisibility, - visibleUsers: [], + visibility: (this.$store.state.rememberNoteVisibility ? this.$store.state.visibility : this.$store.state.defaultNoteVisibility) as typeof noteVisibilities[number], autocomplete: null, draghover: false, quoteId: null, @@ -246,6 +262,18 @@ export default defineComponent({ this.text = this.initialText; } + if (this.initialVisibility) { + this.visibility = this.initialVisibility; + } + + if (this.initialFiles) { + this.files = this.initialFiles; + } + + if (typeof this.initialLocalOnly === 'boolean') { + this.localOnly = this.initialLocalOnly; + } + if (this.mention) { this.text = this.mention.host ? `@${this.mention.username}@${toASCII(this.mention.host)}` : `@${this.mention.username}`; this.text += ' '; @@ -321,7 +349,7 @@ export default defineComponent({ this.$nextTick(() => { // 書きかけの投稿を復元 - if (!this.instant && !this.mention && !this.specified) { + if (!this.share && !this.mention && !this.specified) { const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftKey]; if (draft) { this.text = draft.data.text; @@ -582,8 +610,6 @@ export default defineComponent({ }, saveDraft() { - if (this.instant) return; - const data = JSON.parse(localStorage.getItem('drafts') || '{}'); data[this.draftKey] = { diff --git a/src/client/pages/share.vue b/src/client/pages/share.vue index 67e598fa8f..70a9661dd0 100644 --- a/src/client/pages/share.vue +++ b/src/client/pages/share.vue @@ -1,22 +1,38 @@ diff --git a/src/client/ui/chat/post-form.vue b/src/client/ui/chat/post-form.vue index 0cacaf77e7..64b8d08cbc 100644 --- a/src/client/ui/chat/post-form.vue +++ b/src/client/ui/chat/post-form.vue @@ -100,7 +100,7 @@ export default defineComponent({ type: Object, required: false }, - instant: { + share: { type: Boolean, required: false, default: false @@ -277,7 +277,7 @@ export default defineComponent({ this.$nextTick(() => { // 書きかけの投稿を復元 - if (!this.instant && !this.mention && !this.specified) { + if (!this.share && !this.mention && !this.specified) { const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftKey]; if (draft) { this.text = draft.data.text; @@ -507,8 +507,6 @@ export default defineComponent({ }, saveDraft() { - if (this.instant) return; - const data = JSON.parse(localStorage.getItem('drafts') || '{}'); data[this.draftKey] = { diff --git a/src/docs/ja-JP/advanced/share-page.md b/src/docs/ja-JP/advanced/share-page.md new file mode 100644 index 0000000000..75a9d14d29 --- /dev/null +++ b/src/docs/ja-JP/advanced/share-page.md @@ -0,0 +1,56 @@ +# シェアページ +`/share`を開くと、共有用の投稿フォームを開くことができます。 +ここではシェアページで利用できるクエリ文字列の一覧を示します。 + +## クエリ文字列一覧 +### 文字 + +
+
title
+
タイトルです。本文の先頭に[ … ]と挿入されます。
+
text
+
本文です。
+
url
+
URLです。末尾に挿入されます。
+
+ + +### リプライ情報 +以下のいずれか + +
+
replyId
+
リプライ先のノートid
+
replyUri
+
リプライ先のUrl(リモートのノートオブジェクトを指定)
+
+ +### Renote情報 +以下のいずれか + +
+
renoteId
+
Renote先のノートid
+
renoteUri
+
Renote先のUrl(リモートのノートオブジェクトを指定)
+
+ +### 公開範囲 +※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する + +
+
visibility
+
公開範囲 ['public' | 'home' | 'followers' | 'specified']
+
localOnly
+
0(false) or 1(true)
+
visibleUserIds
+
specified時のダイレクト先のユーザーid カンマ区切りで
+
visibleAccts
+
specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで
+
+ +### ファイル +
+
fileIds
+
添付したいファイルのid(カンマ区切りで)
+
diff --git a/src/misc/acct.ts b/src/misc/acct.ts index 16876c4429..5106b1a09e 100644 --- a/src/misc/acct.ts +++ b/src/misc/acct.ts @@ -1,13 +1,10 @@ -export type Acct = { - username: string; - host: string | null; -}; +import * as Misskey from 'misskey-js'; -export const getAcct = (user: Acct) => { +export const getAcct = (user: Misskey.Acct) => { return user.host == null ? user.username : `${user.username}@${user.host}`; }; -export const parseAcct = (acct: string): Acct => { +export const parseAcct = (acct: string): Misskey.Acct => { if (acct.startsWith('@')) acct = acct.substr(1); const split = acct.split('@', 2); return { username: split[0], host: split[1] || null };