diff --git a/CHANGELOG.md b/CHANGELOG.md index b072de50b9..9cceb6e432 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,7 @@ - Fix: `notes/mentions` で場合によっては並び順が正しく返されない問題を修正 - Fix: SystemWebhook設定でsecretを空に出来ない問題を修正 - Fix: 削除されたユーザーがチャットメッセージにリアクションしている場合`chat/history`などでエラーになる問題を修正 +- Fix: Pageのアイキャッチ画像をドライブから消してもPageごと消えないように ## 2025.7.0 diff --git a/locales/index.d.ts b/locales/index.d.ts index 20735c9e66..cefe4df0bd 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -6633,7 +6633,7 @@ export interface Locale extends ILocale { /** * アクティビティを表示する */ - "showActivityiesForVisitor": string; + "showActivitiesForVisitor": string; "_userGeneratedContentsVisibilityForVisitor": { /** * 全て公開 diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 6b591227f0..31859cb2fa 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1685,7 +1685,7 @@ _serverSettings: restartServerSetupWizardConfirm_text: "現在の一部の設定はリセットされます。" entrancePageStyle: "エントランスページのスタイル" showTimelineForVisitor: "タイムラインを表示する" - showActivityiesForVisitor: "アクティビティを表示する" + showActivitiesForVisitor: "アクティビティを表示する" _userGeneratedContentsVisibilityForVisitor: all: "全て公開" diff --git a/packages/backend/migration/1756062689648-NonCascadingPageEyeCatching.js b/packages/backend/migration/1756062689648-NonCascadingPageEyeCatching.js new file mode 100644 index 0000000000..8554cc4304 --- /dev/null +++ b/packages/backend/migration/1756062689648-NonCascadingPageEyeCatching.js @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class NonCascadingPageEyeCatching1756062689648 { + name = 'NonCascadingPageEyeCatching1756062689648' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_a9ca79ad939bf06066b81c9d3aa"`); + await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_a9ca79ad939bf06066b81c9d3aa" FOREIGN KEY ("eyeCatchingImageId") REFERENCES "drive_file"("id") ON DELETE SET NULL ON UPDATE NO ACTION`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_a9ca79ad939bf06066b81c9d3aa"`); + await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_a9ca79ad939bf06066b81c9d3aa" FOREIGN KEY ("eyeCatchingImageId") REFERENCES "drive_file"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + } +} diff --git a/packages/backend/src/models/Page.ts b/packages/backend/src/models/Page.ts index 0b59e7a92c..d112a66c04 100644 --- a/packages/backend/src/models/Page.ts +++ b/packages/backend/src/models/Page.ts @@ -69,7 +69,7 @@ export class MiPage { public eyeCatchingImageId: MiDriveFile['id'] | null; @ManyToOne(type => MiDriveFile, { - onDelete: 'CASCADE', + onDelete: 'SET NULL', }) @JoinColumn() public eyeCatchingImage: MiDriveFile | null; diff --git a/packages/frontend/src/components/MkAnimBg.vue b/packages/frontend/src/components/MkAnimBg.vue index e57fbcdee3..82606c9aa4 100644 --- a/packages/frontend/src/components/MkAnimBg.vue +++ b/packages/frontend/src/components/MkAnimBg.vue @@ -44,7 +44,7 @@ function initShaderProgram(gl: WebGLRenderingContext, vsSource: string, fsSource const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource); const shaderProgram = gl.createProgram(); - if (shaderProgram == null || vertexShader == null || fragmentShader == null) return null; + if (vertexShader == null || fragmentShader == null) return null; gl.attachShader(shaderProgram, vertexShader); gl.attachShader(shaderProgram, fragmentShader); @@ -71,8 +71,10 @@ onMounted(() => { canvas.width = width; canvas.height = height; - const gl = canvas.getContext('webgl', { premultipliedAlpha: true }); - if (gl == null) return; + const maybeGl = canvas.getContext('webgl', { premultipliedAlpha: true }); + if (maybeGl == null) return; + + const gl = maybeGl; gl.clearColor(0.0, 0.0, 0.0, 0.0); gl.clear(gl.COLOR_BUFFER_BIT); @@ -229,8 +231,8 @@ onMounted(() => { gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.DYNAMIC_DRAW); if (isChromatic()) { - gl!.uniform1f(u_time, 0); - gl!.drawArrays(gl!.TRIANGLE_STRIP, 0, 4); + gl.uniform1f(u_time, 0); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); } else { function render(timeStamp: number) { let sizeChanged = false; @@ -249,8 +251,8 @@ onMounted(() => { gl.viewport(0, 0, width, height); } - gl!.uniform1f(u_time, timeStamp); - gl!.drawArrays(gl!.TRIANGLE_STRIP, 0, 4); + gl.uniform1f(u_time, timeStamp); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); handle = window.requestAnimationFrame(render); } diff --git a/packages/frontend/src/components/MkDrive.vue b/packages/frontend/src/components/MkDrive.vue index 8a33dfb842..25c10a65cf 100644 --- a/packages/frontend/src/components/MkDrive.vue +++ b/packages/frontend/src/components/MkDrive.vue @@ -363,7 +363,7 @@ function onDrop(ev: DragEvent) { //#endregion } -function onUploadRequested(files: File[], folder: Misskey.entities.DriveFolder | null) { +function onUploadRequested(files: File[], folder?: Misskey.entities.DriveFolder | null) { os.launchUploader(files, { folderId: folder?.id ?? null, }); diff --git a/packages/frontend/src/components/MkDriveFileThumbnail.vue b/packages/frontend/src/components/MkDriveFileThumbnail.vue index 88afdef114..3933421fc0 100644 --- a/packages/frontend/src/components/MkDriveFileThumbnail.vue +++ b/packages/frontend/src/components/MkDriveFileThumbnail.vue @@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only :forceBlurhash="forceBlurhash" />

diff --git a/packages/frontend/src/components/MkLink.vue b/packages/frontend/src/components/MkLink.vue index 309ef727da..1959f97565 100644 --- a/packages/frontend/src/components/MkLink.vue +++ b/packages/frontend/src/components/MkLink.vue @@ -17,11 +17,11 @@ SPDX-License-Identifier: AGPL-3.0-only