diff --git a/CHANGELOG.md b/CHANGELOG.md index ec38ad9bd..3dcf57caa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - API: ユーザーのリアクション一覧を取得する users/reactions を追加 - API: users/search および users/search-by-username-and-host を強化 - ミュート及びブロックのインポートを行えるように +- クライアント: /share のクエリでリプライやファイル等の情報を渡せるように ### Bugfixes - クライアント: テーマの管理が行えない問題を修正 diff --git a/src/client/components/post-form.vue b/src/client/components/post-form.vue index a1d89d2a2..816a69e73 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 67e598fa8..70a9661dd 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 0cacaf77e..64b8d08cb 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 000000000..75a9d14d2 --- /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 16876c442..5106b1a09 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 };