diff --git a/CHANGELOG_YOJO.md b/CHANGELOG_YOJO.md
index 33fc009dd8..ff6ab1c5a3 100644
--- a/CHANGELOG_YOJO.md
+++ b/CHANGELOG_YOJO.md
@@ -1,5 +1,29 @@
+## 1.2.1
+Cherrypick 4.13.0
+Misskey 2024.10.1
+
+### Release Date
+2024-12-21
+
+### General
+-
+
+### Client
+- Fix: すべてのノートに翻訳ボタンが表示される/本文がなくて投票だけあると翻訳が表示されなくなる [#579](https://github.com/yojo-art/cherrypick/pull/579)
+- Fix: ユーザーTLファイル付きノートTLの修正 [#580](https://github.com/yojo-art/cherrypick/pull/580)
+ - ユーザー設定アピアランスのセンシティブ画像を常に表示が無視されてたのを修正
+ - ユーザー設定アピアランスの画像を常に非表示が無視されてたのを修正
+ - ユーザー設定アピアランスの非表示の画像をダブルクリックして開く設定が無視されてたのを修正
+ - ユーザー設定全般のデータセーバー、メディアの読み込みを無効化が無視されてたのを修正
+ - センシティブ画像を開く時に年齢確認ダイアログを表示する機能が無視されてたのを修正
+ - 画像左上にALT/GIF/APNG/センシティブの表示を追加
+- Fix: リモートクリップ/リモートplay機能のURLで外部サイト警告が出る問題を修正 [#581](https://github.com/yojo-art/cherrypick/pull/581)
+
+### Server
+-
+
## 1.2.0
-Cherrypick 4.13.0
+Cherrypick 4.13.0
Misskey 2024.10.1
### Release Date
@@ -20,7 +44,7 @@ Misskey 2024.10.1
- Enhance: `/users/${id}`に`Accept: application/ld+json`ではないリクエストが来たとき`/@${username}`にリダイレクトするように [#554](https://github.com/yojo-art/cherrypick/pull/554)
## 1.1.0
-Cherrypick 4.11.1
+Cherrypick 4.11.1
Misskey 2024.8.0
### Release Date
@@ -121,7 +145,7 @@ docker環境でノートレコードが多数(数百万件)ある場合**一時
## 1.0.1
-Cherrypick 4.11.1
+Cherrypick 4.11.1
Misskey 2024.8.0
### Release Date
@@ -138,7 +162,7 @@ Misskey 2024.8.0
## 1.0.0
-Cherrypick 4.11.1
+Cherrypick 4.11.1
Misskey 2024.8.0
### Release Date
diff --git a/package.json b/package.json
index 593bfaba83..ba05f139e1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "yojo-art",
- "version": "1.2.0",
+ "version": "1.2.1",
"basedMisskeyVersion": "2024.10.1",
"basedCherrypickVersion": "4.13.0",
"codename": "nasubi",
diff --git a/packages/cherrypick-js/package.json b/packages/cherrypick-js/package.json
index 01db288fdf..1d2ea63b1c 100644
--- a/packages/cherrypick-js/package.json
+++ b/packages/cherrypick-js/package.json
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "cherrypick-js",
- "version": "1.2.0",
+ "version": "1.2.1",
"basedMisskeyVersion": "2024.10.1",
"basedCherrypickVersion": "4.13.0",
"description": "yojo-art SDK for JavaScript",
diff --git a/packages/frontend/src/components/MkLink.vue b/packages/frontend/src/components/MkLink.vue
index 7b4a0e452f..6a94f0cf47 100644
--- a/packages/frontend/src/components/MkLink.vue
+++ b/packages/frontend/src/components/MkLink.vue
@@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
:is="self ? 'MkA' : 'a'" ref="el" style="word-break: break-all;" class="_link" :[attr]="self ? url_string.substring(local.length) : url_string" :rel="rel ?? 'nofollow noopener'" :target="target"
:behavior="props.navigationBehavior"
:title="url_string"
- @click.stop="(ev: MouseEvent) => warningExternalWebsite(ev, props.url)"
+ @click.stop="(ev: MouseEvent) => warningExternalWebsite(ev, url_string)"
>
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index a94bfb1c29..1e8cd6d7d4 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -93,7 +93,7 @@ SPDX-License-Identifier: AGPL-3.0-only
:enableEmojiMenuReaction="!!$i"
:enableAnimatedMfm="enableAnimatedMfm"
/>
-
+
@@ -101,7 +101,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
-
{
os.popupMenu(await getNoteClipMenu({ note: note.value, isDeleted, currentClip: currentClip?.value }), clipButton.value).then(focus);
}
-const isForeignLanguage: boolean = appearNote.value.text != null && (() => {
+const isForeignLanguage: boolean = (appearNote.value.text != null || appearNote.value.poll != null) && (() => {
const targetLang = (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2);
- const postLang = detectLanguage(appearNote.value.text);
- const choicesLang = appearNote.value.poll?.choices.map((choice) => choice.text).join(' ') ?? '';
- const pollLang = detectLanguage(choicesLang);
- return postLang !== '' && (postLang !== targetLang || pollLang !== targetLang);
+ if (appearNote.value.text) {
+ const postLang = detectLanguage(appearNote.value.text);
+ if (postLang !== '' && postLang !== targetLang) return true;
+ }
+ if (appearNote.value.poll) {
+ const foreignLang = appearNote.value.poll.choices
+ .map((choice) => detectLanguage(choice.text))
+ .filter((lang) => lang !== targetLang).length;
+ if (0 < foreignLang) return true;
+ }
+ return false;
})();
if (defaultStore.state.useAutoTranslate && instance.translatorAvailable && $i.policies.canUseTranslator && $i.policies.canUseAutoTranslate && !isLong && (appearNote.value.cw == null || showContent.value) && appearNote.value.text && isForeignLanguage) translate();
@@ -769,6 +776,15 @@ async function translate(): Promise {
collapsed.value = false;
translating.value = true;
+ if (appearNote.value.text == null) {
+ translating.value = false;
+ translation.value = {
+ sourceLang: '',
+ text: '',
+ };
+ return;
+ }
+
vibrate(defaultStore.state.vibrateSystem ? 5 : []);
if (props.mock) {
diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue
index 3b1cc081ce..1a43490640 100644
--- a/packages/frontend/src/components/MkNoteDetailed.vue
+++ b/packages/frontend/src/components/MkNoteDetailed.vue
@@ -117,7 +117,7 @@ SPDX-License-Identifier: AGPL-3.0-only
:enableAnimatedMfm="enableAnimatedMfm"
/>
RN:
-
+
@@ -125,7 +125,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
- {
+const isForeignLanguage: boolean = (appearNote.value.text != null || appearNote.value.poll != null) && (() => {
const targetLang = (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2);
- const postLang = detectLanguage(appearNote.value.text);
- const choicesLang = appearNote.value.poll?.choices.map((choice) => choice.text).join(' ') ?? '';
- const pollLang = detectLanguage(choicesLang);
- return postLang !== '' && (postLang !== targetLang || pollLang !== targetLang);
+ if (appearNote.value.text) {
+ const postLang = detectLanguage(appearNote.value.text);
+ if (postLang !== '' && postLang !== targetLang) return true;
+ }
+ if (appearNote.value.poll) {
+ const foreignLang = appearNote.value.poll.choices
+ .map((choice) => detectLanguage(choice.text))
+ .filter((lang) => lang !== targetLang).length;
+ if (0 < foreignLang) return true;
+ }
+ return false;
})();
if (defaultStore.state.useAutoTranslate && instance.translatorAvailable && $i.policies.canUseTranslator && $i.policies.canUseAutoTranslate && (appearNote.value.cw == null || showContent.value) && appearNote.value.text && isForeignLanguage) translate();
@@ -699,6 +706,15 @@ async function translate(): Promise {
vibrate(defaultStore.state.vibrateSystem ? 5 : []);
+ if (appearNote.value.text == null) {
+ translating.value = false;
+ translation.value = {
+ sourceLang: '',
+ text: '',
+ };
+ return;
+ }
+
const res = await misskeyApi('notes/translate', {
noteId: appearNote.value.id,
targetLang: miLocalStorage.getItem('lang') ?? navigator.language,
diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue
index 04941bb8b1..a1a0007385 100644
--- a/packages/frontend/src/components/MkUrlPreview.vue
+++ b/packages/frontend/src/components/MkUrlPreview.vue
@@ -44,7 +44,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
warningExternalWebsite(ev, url)">
+ warningExternalWebsite(ev, url_string)">
diff --git a/packages/frontend/src/components/global/MkUrl.vue b/packages/frontend/src/components/global/MkUrl.vue
index 41053a98d7..56179bcb08 100644
--- a/packages/frontend/src/components/global/MkUrl.vue
+++ b/packages/frontend/src/components/global/MkUrl.vue
@@ -7,7 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only
warningExternalWebsite(ev, props.url)"
+ @click.stop="(ev: MouseEvent) => warningExternalWebsite(ev, url_string)"
@contextmenu.stop="() => {}"
>
diff --git a/packages/frontend/src/pages/user/index.timeline.files.files.vue b/packages/frontend/src/pages/user/index.timeline.files.files.vue
index 358a25d8ab..edc5e6c91a 100644
--- a/packages/frontend/src/pages/user/index.timeline.files.files.vue
+++ b/packages/frontend/src/pages/user/index.timeline.files.files.vue
@@ -4,37 +4,43 @@ SPDX-License-Identifier: AGPL-3.0-only
-->
-
-
+
+
-
+
-
{{ i18n.ts.sensitive }}
+
{{ i18n.ts.sensitive }}{{ defaultStore.state.dataSaver.media ? ` (${i18n.ts.image}${note.files[0].size ? ' ' + bytes(note.files[0].size) : ''})` : '' }}
+
{{ defaultStore.state.dataSaver.media && note.files[0].size ? bytes(note.files[0].size) : i18n.ts.image }}
{{ i18n.ts.clickToShow }}
-
+
+
-