summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkPostForm.vue
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2023-11-03 15:35:07 +0900
committerGitHub <noreply@github.com>2023-11-03 15:35:07 +0900
commit24e629ca5c50789ff0aba31532ae66b51148d70f (patch)
tree513155452fd0644c6b69bf7e53e26ab6575977db /packages/frontend/src/components/MkPostForm.vue
parentenhance: アカウント登録時のメールアドレス認証に30分の有... (diff)
downloadmisskey-24e629ca5c50789ff0aba31532ae66b51148d70f.tar.gz
misskey-24e629ca5c50789ff0aba31532ae66b51148d70f.tar.bz2
misskey-24e629ca5c50789ff0aba31532ae66b51148d70f.zip
enhance: 初期設定とチュートリアルを統合 (#12141)
* better onboarding experience * enhance: iroiro * (add) title * (enhance) 戻る・次へボタンを全ページでstickyに * fix merging * (add) iroiro * remove unnecessary file * Update CHANGELOG.md * tweak texts * (fix) reactionViewer mock * change strings * Update MkTutorialDialog.Note.vue * Update ja-JP.yml * (fix) reactionViewer error * (fix) path * refactor * fix * Update MkPostForm.vue * Update ja-JP.yml * Update ja-JP.yml * tweak text * Update ja-JP.yml * Update ja-JP.yml * Update ja-JP.yml * (add) achivement * (add) もう一度見れますよメッセージを追加 * Revert "feat: レジストリAPIをサードパーティから利用可能に (#12229)" This reverts commit 79346272f8792d35955efd3aaaa1e42e0cd2a6e3. * Revert "(add) もう一度見れますよメッセージを追加" This reverts commit 6123b35215133f0d5e5db356bb43f4acbafab8fa. * Revert "Revert "feat: レジストリAPIをサードパーティから利用可能に (#12229)"" This reverts commit bae684e484ef99308d7ac816a822047117efe1c6. * tweak --------- Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/frontend/src/components/MkPostForm.vue')
-rw-r--r--packages/frontend/src/components/MkPostForm.vue28
1 files changed, 24 insertions, 4 deletions
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index 1fa5685861..46faae9523 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -98,7 +98,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { inject, watch, nextTick, onMounted, defineAsyncComponent } from 'vue';
+import { inject, watch, nextTick, onMounted, defineAsyncComponent, provide } from 'vue';
import * as mfm from 'mfm-js';
import * as Misskey from 'misskey-js';
import insertTextAtCursor from 'insert-text-at-cursor';
@@ -143,15 +143,22 @@ const props = withDefaults(defineProps<{
fixed?: boolean;
autofocus?: boolean;
freezeAfterPosted?: boolean;
+ mock?: boolean;
}>(), {
initialVisibleUsers: () => [],
autofocus: true,
+ mock: false,
});
+provide('mock', props.mock);
+
const emit = defineEmits<{
(ev: 'posted'): void;
(ev: 'cancel'): void;
(ev: 'esc'): void;
+
+ // Mock用
+ (ev: 'fileChangeSensitive', fileId: string, to: boolean): void;
}>();
const textareaEl = $shallowRef<HTMLTextAreaElement | null>(null);
@@ -239,7 +246,7 @@ const maxTextLength = $computed((): number => {
});
const canPost = $computed((): boolean => {
- return !posting && !posted &&
+ return !props.mock && !posting && !posted &&
(1 <= textLength || 1 <= files.length || !!poll || !!props.renote) &&
(textLength <= maxTextLength) &&
(!poll || poll.choices.length >= 2);
@@ -396,6 +403,8 @@ function focus() {
}
function chooseFileFrom(ev) {
+ if (props.mock) return;
+
selectFiles(ev.currentTarget ?? ev.target, i18n.ts.attachFile).then(files_ => {
for (const file of files_) {
files.push(file);
@@ -408,6 +417,9 @@ function detachFile(id) {
}
function updateFileSensitive(file, sensitive) {
+ if (props.mock) {
+ emit('fileChangeSensitive', file.id, sensitive);
+ }
files[files.findIndex(x => x.id === file.id)].isSensitive = sensitive;
}
@@ -420,6 +432,8 @@ function replaceFile(file: Misskey.entities.DriveFile, newFile: Misskey.entities
}
function upload(file: File, name?: string): void {
+ if (props.mock) return;
+
uploadFile(file, defaultStore.state.uploadFolder, name).then(res => {
files.push(res);
});
@@ -545,6 +559,8 @@ function onCompositionEnd(ev: CompositionEvent) {
}
async function onPaste(ev: ClipboardEvent) {
+ if (props.mock) return;
+
for (const { item, i } of Array.from(ev.clipboardData.items, (item, i) => ({ item, i }))) {
if (item.kind === 'file') {
const file = item.getAsFile();
@@ -629,7 +645,7 @@ function onDrop(ev): void {
}
function saveDraft() {
- if (props.instant) return;
+ if (props.instant || props.mock) return;
const draftData = JSON.parse(miLocalStorage.getItem('drafts') ?? '{}');
@@ -674,6 +690,8 @@ async function post(ev?: MouseEvent) {
os.popup(MkRippleEffect, { x, y }, {}, 'end');
}
+ if (props.mock) return;
+
const annoying =
text.includes('$[x2') ||
text.includes('$[x3') ||
@@ -839,6 +857,8 @@ function showActions(ev) {
let postAccount = $ref<Misskey.entities.UserDetailed | null>(null);
function openAccountMenu(ev: MouseEvent) {
+ if (props.mock) return;
+
openAccountMenu_({
withExtraOperation: false,
includeCurrentAccount: true,
@@ -869,7 +889,7 @@ onMounted(() => {
nextTick(() => {
// 書きかけの投稿を復元
- if (!props.instant && !props.mention && !props.specified) {
+ if (!props.instant && !props.mention && !props.specified && !props.mock) {
const draft = JSON.parse(miLocalStorage.getItem('drafts') ?? '{}')[draftKey];
if (draft) {
text = draft.data.text;