+
+
+
+ {{ i18n.ts._watermarkEditor.text }}
+
+
+
+ {{ i18n.ts._watermarkEditor.position }}
+
+
+
+
+ {{ i18n.ts._watermarkEditor.scale }}
+
+
+
+ {{ i18n.ts._watermarkEditor.angle }}
+
+
+
+ {{ i18n.ts._watermarkEditor.opacity }}
+
+
+
+ {{ i18n.ts._watermarkEditor.repeat }}
+
+
+
+
+ {{ i18n.ts.selectFile }}
+
+
+ {{ i18n.ts._watermarkEditor.position }}
+
+
+
+
+ {{ i18n.ts._watermarkEditor.scale }}
+
+
+
+ {{ i18n.ts._watermarkEditor.angle }}
+
+
+
+ {{ i18n.ts._watermarkEditor.opacity }}
+
+
+
+ {{ i18n.ts._watermarkEditor.repeat }}
+
+
+
+ {{ i18n.ts._watermarkEditor.cover }}
+
+
+
+
+
+ {{ i18n.ts._watermarkEditor.stripeFrequency }}
+
+
+
+ {{ i18n.ts._watermarkEditor.stripeWidth }}
+
+
+
+ {{ i18n.ts._watermarkEditor.angle }}
+
+
+
+ {{ i18n.ts._watermarkEditor.opacity }}
+
+
+
+
+
+ {{ i18n.ts._watermarkEditor.angle }}
+
+
+
+ {{ i18n.ts._watermarkEditor.scale }}
+
+
+
+ {{ i18n.ts._watermarkEditor.polkadotMainDotRadius }}
+
+
+
+ {{ i18n.ts._watermarkEditor.polkadotMainDotOpacity }}
+
+
+
+ {{ i18n.ts._watermarkEditor.polkadotSubDotDivisions }}
+
+
+
+ {{ i18n.ts._watermarkEditor.polkadotSubDotRadius }}
+
+
+
+ {{ i18n.ts._watermarkEditor.polkadotSubDotOpacity }}
+
+
+
+
+
+ {{ i18n.ts._watermarkEditor.angle }}
+
+
+
+ {{ i18n.ts._watermarkEditor.scale }}
+
+
+
+ {{ i18n.ts._watermarkEditor.opacity }}
+
+
+
+
+
+
+
+
--
cgit v1.2.3-freya
From b43dfa260b1416da153d28bcd46a8bcbce02c18d Mon Sep 17 00:00:00 2001
From: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
Date: Wed, 4 Jun 2025 16:22:09 +0900
Subject: fix/refactor(frontend): 画像編集機能の修正・型強化 (#16156)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* enhance: refine uploadFile
* fix: missing locale
* refactor: harden types
* refactor: シェーダーファイルをlazy-loadingできるように
* fix(frontend): omit console.log in production environment
* fix: glslのバージョン表記は最初の行になければならない
* fix: シェーダーの読み込みが完了してからレンダリングを行うように
* fix merge failure
* fix: ウォーターマークのプリセットがない場合にdividerが2重に表示される問題を修正
* fix: アップローダーダイアログの機能設定でウォーターマークが無効な場合でもデフォルトのプリセットが適用されてしまう問題を修正
* fix lint
* Revert "fix: シェーダーの読み込みが完了してからレンダリングを行うように"
This reverts commit e06f37a7d453ca581858252eae422d8a9e470dc3.
* Revert "fix: glslのバージョン表記は最初の行になければならない"
This reverts commit afcc37d886106c4acd545e4c2922e67f94e1037b.
* Revert "refactor: シェーダーファイルをlazy-loadingできるように"
This reverts commit a1ab2fa38c2b7485c069f9cd089bc7de59416c9d.
* fix: ウォーターマークのFX定義を分ける
* Update packages/frontend/src/components/MkWatermarkEditorDialog.vue
* Update packages/frontend/src/components/MkWatermarkEditorDialog.vue
* Update packages/frontend/src/components/MkWatermarkEditorDialog.vue
---------
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
---
locales/index.d.ts | 8 +++
locales/ja-JP.yml | 2 +
.../frontend/src/components/MkFormDialog.file.vue | 5 +-
.../src/components/MkImageEffectorDialog.vue | 3 +-
packages/frontend/src/components/MkPostForm.vue | 8 ++-
.../frontend/src/components/MkUploaderDialog.vue | 69 ++++++++++++++++------
.../components/MkWatermarkEditorDialog.Layer.vue | 17 ++++--
.../src/components/MkWatermarkEditorDialog.vue | 7 ++-
packages/frontend/src/os.ts | 3 +
.../admin/custom-emojis-manager.local.list.vue | 5 +-
packages/frontend/src/pages/channel-editor.vue | 5 +-
packages/frontend/src/pages/chat/room.form.vue | 6 +-
.../frontend/src/pages/custom-emojis-manager.vue | 5 +-
packages/frontend/src/pages/emoji-edit-dialog.vue | 5 +-
packages/frontend/src/pages/gallery/edit.vue | 11 ++--
.../frontend/src/pages/page-editor/page-editor.vue | 5 +-
.../frontend/src/pages/settings/account-data.vue | 25 ++++++--
packages/frontend/src/pages/settings/deck.vue | 5 +-
.../frontend/src/pages/settings/sounds.sound.vue | 6 +-
packages/frontend/src/preferences/def.ts | 2 +-
packages/frontend/src/utility/drive.ts | 26 +++++---
.../src/utility/image-effector/ImageEffector.ts | 14 ++---
packages/frontend/src/utility/watermark.ts | 23 +++++---
23 files changed, 196 insertions(+), 69 deletions(-)
(limited to 'packages/frontend/src/components/MkWatermarkEditorDialog.Layer.vue')
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 6f3d2b3853..17cdc7ca64 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -12049,6 +12049,14 @@ export interface Locale extends ILocale {
* 保存せずに終了しますか?
*/
"quitWithoutSaveConfirm": string;
+ /**
+ * このファイルは対応していません
+ */
+ "driveFileTypeWarn": string;
+ /**
+ * 画像ファイルを選択してください
+ */
+ "driveFileTypeWarnDescription": string;
/**
* ウォーターマークの編集
*/
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index d4bd2c3116..ed1f5354df 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -3227,6 +3227,8 @@ defaultPreset: "デフォルトのプリセット"
_watermarkEditor:
tip: "画像にクレジット情報などのウォーターマークを追加することができます。"
quitWithoutSaveConfirm: "保存せずに終了しますか?"
+ driveFileTypeWarn: "このファイルは対応していません"
+ driveFileTypeWarnDescription: "画像ファイルを選択してください"
title: "ウォーターマークの編集"
cover: "全体に被せる"
repeat: "敷き詰める"
diff --git a/packages/frontend/src/components/MkFormDialog.file.vue b/packages/frontend/src/components/MkFormDialog.file.vue
index a11075c342..182ff3ccf5 100644
--- a/packages/frontend/src/components/MkFormDialog.file.vue
+++ b/packages/frontend/src/components/MkFormDialog.file.vue
@@ -51,7 +51,10 @@ if (props.fileId) {
}
function selectButton(ev: MouseEvent) {
- selectFile(ev.currentTarget ?? ev.target).then(async (file) => {
+ selectFile({
+ anchorElement: ev.currentTarget ?? ev.target,
+ multiple: false,
+ }).then(async (file) => {
if (!file) return;
if (props.validate && !await props.validate(file)) return;
diff --git a/packages/frontend/src/components/MkImageEffectorDialog.vue b/packages/frontend/src/components/MkImageEffectorDialog.vue
index 997dd4d528..42502ba449 100644
--- a/packages/frontend/src/components/MkImageEffectorDialog.vue
+++ b/packages/frontend/src/components/MkImageEffectorDialog.vue
@@ -77,6 +77,7 @@ const dialog = useTemplateRef('dialog');
async function cancel() {
if (layers.length > 0) {
const { canceled } = await os.confirm({
+ type: 'warning',
text: i18n.ts._imageEffector.discardChangesConfirm,
});
if (canceled) return;
@@ -132,7 +133,7 @@ function onLayerDelete(layer: ImageEffectorLayer) {
const canvasEl = useTemplateRef('canvasEl');
-let renderer: ImageEffector | null = null;
+let renderer: ImageEffector