diff --git a/CHANGELOG.md b/CHANGELOG.md
index 76e1a6e53f..c3cfae93cf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,6 +36,7 @@
- Enhance: リプライにて引用がある場合テキストが空でもノートできるように
- 引用したいノートのURLをコピーしリプライ投稿画面にペーストして添付することで達成できます
- Enhance: フォローするかどうかの確認ダイアログを出せるように
+- Enhance: Playを手動でリロードできるように
- Enhance: アイコン画像・バナー画像を外せるように
- Chore: AiScriptを0.18.0にバージョンアップ
- Fix: 一部のページ内リンクが正しく動作しない問題を修正
@@ -52,6 +53,7 @@
- Fix: ノート詳細ページにおいてCW付き引用リノートのCWボタンのラベルに「引用」が含まれていない問題を修正
- Fix: ダイアログの入力で字数制限に違反していてもEnterキーが押せてしまう問題を修正
- Fix: ダイレクト投稿の宛先が保存されない問題を修正
+- Fix: Playのページを離れたときに、Playが正常に初期化されない問題を修正
### Server
- Enhance: エンドポイント`antennas/update`の必須項目を`antennaId`のみに
diff --git a/packages/frontend/src/pages/flash/flash-edit.vue b/packages/frontend/src/pages/flash/flash-edit.vue
index bff45094a1..3445da26a2 100644
--- a/packages/frontend/src/pages/flash/flash-edit.vue
+++ b/packages/frontend/src/pages/flash/flash-edit.vue
@@ -163,11 +163,11 @@ var cursor = 0
text: "←"
disabled: !(results.len > 1 && (results.len - cursor) > 1)
onClick: back
- } {
+ }, {
text: "→"
disabled: !(results.len > 1 && cursor > 0)
onClick: forward
- } {
+ }, {
text: "引き直す"
onClick: do
}]
@@ -196,17 +196,17 @@ let qas = [{
choices: ['シドニー', 'キャンベラ', 'メルボルン']
a: 'キャンベラ'
aDescription: '最大の都市はシドニーですが首都はキャンベラです。'
-} {
+}, {
q: '国土面積2番目の国は?'
choices: ['カナダ', 'アメリカ', '中国']
a: 'カナダ'
aDescription: '大きい順にロシア、カナダ、アメリカ、中国です。'
-} {
+}, {
q: '二重内陸国ではないのは?'
choices: ['リヒテンシュタイン', 'ウズベキスタン', 'レソト']
a: 'レソト'
aDescription: 'レソトは(一重)内陸国です。'
-} {
+}, {
q: '閘門がない運河は?'
choices: ['キール運河', 'スエズ運河', 'パナマ運河']
a: 'スエズ運河'
@@ -244,9 +244,9 @@ each (let qa, qas) {
})
Ui:C:container({
children: []
- } \`{qa.id}:a\`)
+ }, \`{qa.id}:a\`)
]
- } qa.id))
+ }, qa.id))
}
@finish() {
diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue
index 4aa3ce1672..40499fde0e 100644
--- a/packages/frontend/src/pages/flash/flash.vue
+++ b/packages/frontend/src/pages/flash/flash.vue
@@ -15,11 +15,15 @@ SPDX-License-Identifier: AGPL-3.0-only
-
{{ flash.likedCount }}
-
{{ flash.likedCount }}
-
-
-
+
+
+
+
+ {{ flash.likedCount }}
+ {{ flash.likedCount }}
+
+
+
@@ -49,7 +53,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts._play.editThisPage }}
-
+
@@ -94,12 +98,33 @@ function fetchFlash() {
});
}
+function share(ev: MouseEvent) {
+ if (!flash.value) return;
+
+ os.popupMenu([
+ {
+ text: i18n.ts.shareWithNote,
+ icon: 'ti ti-pencil',
+ action: shareWithNote,
+ },
+ ...(isSupportShare() ? [{
+ text: i18n.ts.share,
+ icon: 'ti ti-share',
+ action: shareWithNavigator,
+ }] : []),
+ ], ev.currentTarget ?? ev.target);
+}
+
function copyLink() {
+ if (!flash.value) return;
+
copyToClipboard(`${url}/play/${flash.value.id}`);
os.success();
}
-function share() {
+function shareWithNavigator() {
+ if (!flash.value) return;
+
navigator.share({
title: flash.value.title,
text: flash.value.summary,
@@ -108,21 +133,28 @@ function share() {
}
function shareWithNote() {
+ if (!flash.value) return;
+
os.post({
- initialText: `${flash.value.title} ${url}/play/${flash.value.id}`,
+ initialText: `${flash.value.title}\n${url}/play/${flash.value.id}`,
+ instant: true,
});
}
function like() {
+ if (!flash.value) return;
+
os.apiWithDialog('flash/like', {
flashId: flash.value.id,
}).then(() => {
- flash.value.isLiked = true;
- flash.value.likedCount++;
+ flash.value!.isLiked = true;
+ flash.value!.likedCount++;
});
}
async function unlike() {
+ if (!flash.value) return;
+
const confirm = await os.confirm({
type: 'warning',
text: i18n.ts.unlikeConfirm,
@@ -131,8 +163,8 @@ async function unlike() {
os.apiWithDialog('flash/unlike', {
flashId: flash.value.id,
}).then(() => {
- flash.value.isLiked = false;
- flash.value.likedCount--;
+ flash.value!.isLiked = false;
+ flash.value!.likedCount--;
});
}
@@ -152,6 +184,7 @@ function start() {
async function run() {
if (aiscript.value) aiscript.value.abort();
+ if (!flash.value) return;
aiscript.value = new Interpreter({
...createAiScriptEnv({
@@ -193,12 +226,17 @@ async function run() {
}
}
-onDeactivated(() => {
+function reset() {
if (aiscript.value) aiscript.value.abort();
+ started.value = false;
+}
+
+onDeactivated(() => {
+ reset();
});
onUnmounted(() => {
- if (aiscript.value) aiscript.value.abort();
+ reset();
});
const headerActions = computed(() => []);
@@ -265,11 +303,19 @@ definePageMetadata(() => ({
}
> .actions {
- display: flex;
- justify-content: center;
- gap: 12px;
margin-top: 16px;
- padding: 16px;
+
+ > .items {
+ display: flex;
+ justify-content: center;
+ gap: 12px;
+ padding: 16px;
+ border-bottom: 1px solid var(--divider);
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
}
}
}