From 7c94547e7161b47e4d360bebd4489e5ad3cc09a3 Mon Sep 17 00:00:00 2001 From: tickle Date: Wed, 17 Jun 2026 16:17:44 +0900 Subject: [PATCH 01/14] Updated Security.md --- SECURITY.md | 68 ++++++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 6f8c1adb..64511119 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,7 +21,7 @@ | v48 | :heavy_check_mark: | [v48.5.1](https://github.com/cwtickle/danoniplus/releases/tag/v48.5.1) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-latest) | 2026-05-17 | (At Release v51) | | v47 | :heavy_check_mark: | [v47.6.5](https://github.com/cwtickle/danoniplus/releases/tag/v47.6.5) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v47) | 2026-04-19 | (At Release v50) | | v46 | :warning: | [v46.7.3](https://github.com/cwtickle/danoniplus/releases/tag/v46.7.3) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v46) | 2026-03-12 | (At Release v49) | -| v45 | :x: | [v45.5.13 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v45.5.13) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v45) | 2026-02-26 | 2026-05-17 | +| v45 | :x: | [v45.5.13 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v45.5.13) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v45) | 2026-02-26 | 2026-05-17 / Launched v48 | | v44 :anchor: | :heavy_check_mark: | [v44.5.17](https://github.com/cwtickle/danoniplus/releases/tag/v44.5.17) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v44) | 2026-02-07 | (At Release v53) |
@@ -29,41 +29,41 @@ | Version | Supported | Latest Version | Logs | First Release | End of Support | | ------------ | --------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------- | -------------- | -| v43 | :x: | [v43.6.12 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v43.6.12) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v43) | 2025-09-15 | 2026-03-12 | -| v42 | :x: | [v42.5.13 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v42.5.13) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v42) | 2025-05-24 | 2026-02-26 | -| v41 | :x: | [v41.4.16 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v41.4.16) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v41) | 2025-04-12 | 2026-02-07 | -| v40 | :x: | [v40.7.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v40.7.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v40) | 2025-03-01 | 2025-09-15 | -| v39 :anchor: | :x: | [v39.8.23 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v39.8.23) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v39) | 2025-02-01 | 2026-05-17 | -| v38 | :x: | [v38.3.4 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v38.3.4) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v38) | 2024-11-04 | 2025-04-12 | -| v37 | :x: | [v37.8.9 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v37.8.9) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v37) | 2024-06-15 | 2025-03-01 | -| v36 | :x: | [v36.6.11 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v36.6.11) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v36) | 2024-04-15 | 2025-02-01 | -| v35 | :x: | [v35.5.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v35.5.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v35) | 2024-01-28 | 2024-11-04 | -| v34 :anchor: | :x: | [v34.7.17 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v34.7.17) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v34) | 2023-09-24 | 2025-09-15 | -| v33 | :x: | [v33.7.8 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v33.7.8) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v33) | 2023-07-29 | 2024-04-15 | -| v32 | :x: | [v32.7.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v32.7.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v32) | 2023-05-07 | 2024-01-28 | -| v31 | :x: | [v31.7.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v31.7.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v31) | 2023-03-20 | 2023-09-24 | -| v30 | :x: | [v30.6.3 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v30.6.3) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v30) | 2023-02-10 | 2023-07-29 | -| v29 :anchor: | :x: | [v29.4.15 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v29.4.15) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v29) | 2022-11-05 | 2024-11-04 | -| v28 | :x: | [v28.6.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v28.6.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v28) | 2022-08-21 | 2023-03-20 | -| v27 | :x: | [v27.8.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v27.8.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v27) | 2022-03-18 | 2023-02-10 | -| v26 | :x: | [v26.7.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v26.7.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v26) | 2022-01-30 | 2022-11-05 | -| v25 | :x: | [v25.5.10 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v25.5.10) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v25) | 2022-01-04 | 2022-08-21 | -| v24 :anchor: | :x: | [v24.6.19 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v24.6.19) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v24) | 2021-10-24 | 2023-07-29 | -| v23 | :x: | [v23.5.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v23.5.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v23) | 2021-09-04 | 2022-01-30 | -| v22 | :x: | [v22.5.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v22.5.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v22) | 2021-04-28 | 2022-01-04 | -| v21 | :x: | [v21.5.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v21.5.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v21) | 2021-03-12 | 2021-10-24 | -| v20 | :x: | [v20.5.4 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v20.5.4) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v20) | 2021-02-12 | 2021-09-04 | -| v19 :anchor: | :x: | [v19.5.17 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v19.5.17) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v19) | 2021-01-17 | 2022-08-21 | -| v18 | :x: | [v18.9.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v18.9.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v18) | 2020-10-25 | 2021-03-12 | -| v17 | :x: | [v17.5.9 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v17.5.9) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v17) | 2020-09-27 | 2021-02-12 | -| v16 | :x: | [v16.4.10 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v16.4.10) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v16) | 2020-08-06 | 2021-01-17 | -| v15 | :x: | [v15.7.5 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v15.7.5) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v15) | 2020-05-13 | 2020-10-25 | -| v14 :anchor: | :x: | [v14.5.21 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v14.5.21) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v14) | 2020-04-29 | 2021-09-04 | -| v13 | :x: | [v13.6.8 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v13.6.8) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v13) | 2020-03-29 | 2020-08-06 | -| v12 | :x: | [v12.3.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v12.3.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v12) | 2020-02-09 | 2020-05-13 | +| v43 | :x: | [v43.6.12 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v43.6.12) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v43) | 2025-09-15 | 2026-03-12 / Launched v46 | +| v42 | :x: | [v42.5.13 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v42.5.13) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v42) | 2025-05-24 | 2026-02-26 / Launched v45 | +| v41 | :x: | [v41.4.16 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v41.4.16) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v41) | 2025-04-12 | 2026-02-07 / Launched v44 | +| v40 | :x: | [v40.7.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v40.7.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v40) | 2025-03-01 | 2025-09-15 / Launched v43 | +| v39 :anchor: | :x: | [v39.8.23 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v39.8.23) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v39) | 2025-02-01 | 2026-05-17 / Launched **v48** | +| v38 | :x: | [v38.3.4 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v38.3.4) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v38) | 2024-11-04 | 2025-04-12 / Launched v41 | +| v37 | :x: | [v37.8.9 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v37.8.9) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v37) | 2024-06-15 | 2025-03-01 / Launched v40 | +| v36 | :x: | [v36.6.11 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v36.6.11) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v36) | 2024-04-15 | 2025-02-01 / Launched v39 | +| v35 | :x: | [v35.5.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v35.5.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v35) | 2024-01-28 | 2024-11-04 / Launched v38 | +| v34 :anchor: | :x: | [v34.7.17 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v34.7.17) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v34) | 2023-09-24 | 2025-09-15 / Launched **v43** | +| v33 | :x: | [v33.7.8 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v33.7.8) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v33) | 2023-07-29 | 2024-04-15 / Launched v36 | +| v32 | :x: | [v32.7.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v32.7.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v32) | 2023-05-07 | 2024-01-28 / Launched v35 | +| v31 | :x: | [v31.7.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v31.7.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v31) | 2023-03-20 | 2023-09-24 / Launched v34 | +| v30 | :x: | [v30.6.3 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v30.6.3) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v30) | 2023-02-10 | 2023-07-29 / Launched v33 | +| v29 :anchor: | :x: | [v29.4.15 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v29.4.15) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v29) | 2022-11-05 | 2024-11-04 / Launched **v38** | +| v28 | :x: | [v28.6.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v28.6.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v28) | 2022-08-21 | 2023-03-20 / Launched v31 | +| v27 | :x: | [v27.8.7 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v27.8.7) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v27) | 2022-03-18 | 2023-02-10 / Launched v30 | +| v26 | :x: | [v26.7.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v26.7.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v26) | 2022-01-30 | 2022-11-05 / Launched v29 | +| v25 | :x: | [v25.5.10 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v25.5.10) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v25) | 2022-01-04 | 2022-08-21 / Launched v28 | +| v24 :anchor: | :x: | [v24.6.19 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v24.6.19) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v24) | 2021-10-24 | 2023-07-29 / Launched **v33** | +| v23 | :x: | [v23.5.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v23.5.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v23) | 2021-09-04 | 2022-01-30 / Launched v26 | +| v22 | :x: | [v22.5.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v22.5.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v22) | 2021-04-28 | 2022-01-04 / Launched v25 | +| v21 | :x: | [v21.5.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v21.5.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v21) | 2021-03-12 | 2021-10-24 / Launched v24 | +| v20 | :x: | [v20.5.4 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v20.5.4) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v20) | 2021-02-12 | 2021-09-04 / Launched v23 | +| v19 :anchor: | :x: | [v19.5.17 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v19.5.17) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v19) | 2021-01-17 | 2022-08-21 / Launched **v28** | +| v18 | :x: | [v18.9.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v18.9.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v18) | 2020-10-25 | 2021-03-12 / Launched v21 | +| v17 | :x: | [v17.5.9 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v17.5.9) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v17) | 2020-09-27 | 2021-02-12 / Launched v20 | +| v16 | :x: | [v16.4.10 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v16.4.10) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v16) | 2020-08-06 | 2021-01-17 / Launched v19 | +| v15 | :x: | [v15.7.5 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v15.7.5) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v15) | 2020-05-13 | 2020-10-25 / Launched v18 | +| v14 :anchor: | :x: | [v14.5.21 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v14.5.21) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v14) | 2020-04-29 | 2021-09-04 / Launched **v23** | +| v13 | :x: | [v13.6.8 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v13.6.8) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v13) | 2020-03-29 | 2020-08-06 / Launched v16 | +| v12 | :x: | [v12.3.6 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v12.3.6) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v12) | 2020-02-09 | 2020-05-13 / Launched v15 | | v11 | :x: | [v11.4.5 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v11.4.5) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v11) | 2019-12-14 | 2020-04-18 | | v10 | :x: | [v10.5.5 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v10.5.5) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v10) | 2019-11-04 | 2020-02-10 | -| v9 :anchor: | :x: | [v9.4.27 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v9.4.27) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v9) | 2019-10-08 | 2021-01-17 | +| v9 :anchor: | :x: | [v9.4.27 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v9.4.27) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v9) | 2019-10-08 | 2021-01-17 / Launched **v19** | | v8 | :x: | [v8.7.10 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v8.7.10) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v8) | 2019-09-08 | 2019-12-14 | | v7 | :x: | [v7.9.13 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v7.9.13) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v7) | 2019-07-08 | 2019-11-04 | | v6 | :x: | [v6.6.13 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v6.6.13) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v6) | 2019-06-22 | 2019-11-04 | From df43aa0e46507f79586571f21567db420e11cb27 Mon Sep 17 00:00:00 2001 From: tickle Date: Sun, 21 Jun 2026 09:47:43 +0900 Subject: [PATCH 02/14] =?UTF-8?q?improve:=208key=EF=BC=88=E3=83=91?= =?UTF-8?q?=E3=82=BF=E3=83=BC=E3=83=B32=EF=BC=89=E3=81=AE=E4=BB=95?= =?UTF-8?q?=E6=A7=98=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/lib/danoni_constants.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index e3715a52..8e3d8ad4 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -3597,7 +3597,7 @@ const g_keyObj = { // - _0 の数字部分をカウントアップすることで実現できる。 keyCtrl5_1: [[`Space`], [`Left`], [`Down`], [`Up`], [`Right`]], keyCtrl7_1: [[`S`], [`E`], [`F`], [`Space`, `G`, `H`], [`J`], [`I`], [`L`]], - keyCtrl8_1: [[`Enter`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`]], + keyCtrl8_1: [[`Tab`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`]], keyCtrl9A_1: [[`S`], [`D`], [`E`, `R`], [`F`], [`Space`], [`Left`], [`Down`], [`Up`], [`Right`]], keyCtrl9i_1: [[`A`], [`S`], [`D`], [`F`], [`Space`], [`Left`], [`Down`], [`Up`], [`Right`]], keyCtrl11_1: [[`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`], [`Left`], [`Down`], [`Up`], [`Right`]], @@ -3658,7 +3658,7 @@ const g_keyObj = { // ショートカットキーコード keyRetry: 8, // 8: Backspace keyRetry8_0: 9, // 9: Tab - keyRetry8_1: 9, + keyRetry8_1: 8, // 8: Backspace keyRetry11j_0: 123, // 123: F12 keyTitleBack: 46, // 46: Delete From e8e02eee02cef3b660d6c1cec0dce4ad129cba1a Mon Sep 17 00:00:00 2001 From: tickle Date: Sun, 21 Jun 2026 10:08:23 +0900 Subject: [PATCH 03/14] =?UTF-8?q?improve:=2015A/15B=E3=82=92=E5=88=86?= =?UTF-8?q?=E9=9B=A2=E3=80=81=E4=BF=9D=E5=AD=98=E3=81=97=E3=81=9F=E3=82=AD?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=82=BF=E3=83=BC=E3=83=B3=E3=81=8C=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88=E3=81=AB?= =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB=E3=81=AA=E3=82=8B=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 3 +++ js/lib/danoni_constants.js | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index f3d86943..7c0d9be0 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -8998,6 +8998,9 @@ const setExcessive = (_btn, _val) => { const getKeyCtrl = (_localStorage, _extraKeyName = ``) => { g_keyObj.storagePtn = _localStorage[`keyCtrlPtn${_extraKeyName}`]; const basePtn = `${g_keyObj.currentKey}_${g_keyObj.storagePtn}`; + if (g_keyObj[`keyCtrl${basePtn}`] === undefined || hasVal(g_keyObj[`transKey${basePtn}`])) { + return; + } const baseKeyNum = g_keyObj[`${g_keyObj.defaultProp}${basePtn}`].length; if (_localStorage[`keyCtrl${_extraKeyName}`]?.[0].length > 0) { diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index 8e3d8ad4..417e5f7c 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -3666,9 +3666,8 @@ const g_keyObj = { // 別キー transKey8_2: '12', - transKey15A_1: '', - transKey15B_0: '', - transKey15B_1: '', + transKey15A_1: '15B', // 15A/15Bはキーパターンをコピーして生成するため、transKeyを明示的に指定 + transKey15B_0: '', // 15A/15Bはキーパターンをコピーして生成するため、transKeyを明示的に指定 // キー置換用(ParaFla版との互換) keyTransPattern: { From a7e2ed1bbd0a4709709d2fd02126489316af56d9 Mon Sep 17 00:00:00 2001 From: tickle Date: Sun, 21 Jun 2026 17:01:44 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat:=20=E3=82=AD=E3=83=BC=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=95=E3=82=A3=E3=82=B0=E7=94=BB=E9=9D=A2=E3=81=AB?= =?UTF-8?q?=E3=82=AD=E3=83=BC=E5=89=B2=E3=82=8A=E5=BD=93=E3=81=A6=E3=82=92?= =?UTF-8?q?=E7=84=A1=E5=8A=B9=E3=81=AB=E3=81=99=E3=82=8B=E3=83=A2=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 63 ++++++++++++++++++++++++++++++++------ js/lib/danoni_constants.js | 10 ++++++ 2 files changed, 64 insertions(+), 9 deletions(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index 7c0d9be0..f314658d 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -5602,6 +5602,7 @@ const titleInit = (_initFlg = false) => { }); const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`; + g_stateObj.keyLockFlg = false; // 譜面初期情報ロード許可フラグ // (初回読み込み時はローカルストレージのロードが必要なため、 @@ -10239,11 +10240,24 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { * @param {number} _scrollNum */ const changeTmpColor = (_j, _scrollNum = 1) => { - changeTmpData(`color`, g_headerObj.setColor.length, _j, _scrollNum); - const arrowColor = getKeyConfigColor(_j, g_keyObj[`color${keyCtrlPtn}`][_j]); - $id(`arrow${_j}`).background = arrowColor; - $id(`arrowShadow${_j}`).background = getShadowColor(g_keyObj[`color${keyCtrlPtn}`][_j], arrowColor); + const changeTmpOneColor = _idx => { + changeTmpData(`color`, g_headerObj.setColor.length, _idx, _scrollNum); + const arrowColor = getKeyConfigColor(_j, g_keyObj[`color${keyCtrlPtn}`][_idx]); + $id(`arrow${_idx}`).background = arrowColor; + $id(`arrowShadow${_idx}`).background = getShadowColor(g_keyObj[`color${keyCtrlPtn}`][_idx], arrowColor); + }; + if (g_stateObj.keyLockFlg && keyIsShift()) { + const tmpList = []; + g_keyObj[`color${keyCtrlPtn}`].forEach((val, idx) => { + if (val === g_keyObj[`color${keyCtrlPtn}`][_j]) { + tmpList.push(idx); + } + }); + tmpList.forEach(idx => changeTmpOneColor(idx)); + } else { + changeTmpOneColor(_j); + } adjustScrollPoint(parseFloat($id(`arrow${_j}`).left)); }; @@ -10253,10 +10267,23 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { * @param {number} _scrollNum */ const changeTmpShuffleNum = (_j, _scrollNum = 1) => { - const tmpShuffle = changeTmpData(`shuffle`, g_keyObj[`keyCtrl${keyCtrlPtn}`].length - 1, _j, _scrollNum); - document.getElementById(`sArrow${_j}`).textContent = tmpShuffle + 1; + const changeTmpOneShuffle = _idx => { + const tmpShuffle = changeTmpData(`shuffle`, g_keyObj[`keyCtrl${keyCtrlPtn}`].length - 1, _idx, _scrollNum); + document.getElementById(`sArrow${_idx}`).textContent = tmpShuffle + 1; + changeShuffleConfigColor(keyCtrlPtn, g_keyObj[`shuffle${keyCtrlPtn}_${g_keycons.shuffleGroupNum}`][_idx], _idx); + }; - changeShuffleConfigColor(keyCtrlPtn, g_keyObj[`shuffle${keyCtrlPtn}_${g_keycons.shuffleGroupNum}`][_j], _j); + if (g_stateObj.keyLockFlg && keyIsShift()) { + const tmpList = []; + g_keyObj[`shuffle${keyCtrlPtn}`].forEach((val, idx) => { + if (val === g_keyObj[`shuffle${keyCtrlPtn}`][_j]) { + tmpList.push(idx); + } + }); + tmpList.forEach(idx => changeTmpOneShuffle(idx)); + } else { + changeTmpOneShuffle(_j); + } adjustScrollPoint(parseFloat($id(`arrow${_j}`).left)); }; @@ -10944,17 +10971,29 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { } }, g_lblPosObj.btnKcReset, g_cssObj.button_Reset), + createCss2Button(`btnKeyLock`, getKeyLockName(), () => { + g_stateObj.keyLockFlg = !g_stateObj.keyLockFlg; + makeInfoWindow(g_msgInfoObj.I_0012.split(`{0}`).join(boolToSwitch(!g_stateObj.keyLockFlg)), `leftToRightFade`); + btnKeyLock.innerHTML = getKeyLockName(); + }, g_lblPosObj.btnKcKeyLock, g_cssObj.button_Mini), + // プレイ開始 makePlayButton(() => loadMusic()) ); // キーボード押下時処理 setShortcutEvent(g_currentPage, (kbCode) => { + const C_KEY_ESCAPE = 27; + const C_KEY_IME = 229; const keyCdObj = document.getElementById(`keycon${g_currentj}_${g_currentk}`); let setKey = g_kCdN.findIndex(kCd => kCd === kbCode); - const C_KEY_ESCAPE = 27; - const C_KEY_IME = 229; + if (g_stateObj.keyLockFlg) { + if (setKey === C_KEY_ESCAPE) { + btnBack.click(); + } + return; + } // 全角切替、BackSpace、Deleteキー、Escキーは割り当て禁止 // また、直前と同じキーを押した場合(BackSpaceを除く)はキー操作を無効にする @@ -11040,6 +11079,10 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { document.oncontextmenu = () => false; }; +const getKeyLockName = () => + `${g_lblNameObj.b_keyLock}${g_stateObj.keyLockFlg ? g_emojiObj.locked : g_emojiObj.unlocked}`; + + /** * キーボードレイアウトプレビュー(Canvas版) * @@ -11615,6 +11658,8 @@ const keyconfigKeyboardPreview = (() => { _state.visible = !_state.visible; area.style.display = _state.visible ? `block` : `none`; + g_stateObj.keyLockFlg = _state.visible; + btnKeyLock.innerHTML = getKeyLockName(); if (_state.visible) refresh(); }; diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index 417e5f7c..5145b913 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -640,6 +640,9 @@ const updateWindowSiz = () => { x: g_btnX() + Math.floor((g_btnWidth() - 80) / 2), y: 3, w: 80, h: 18, siz: 11, title: g_msgObj.displayPreview, }, + btnKcKeyLock: { + x: g_btnX() + Math.floor((g_btnWidth() - 80) / 2) + 100, y: 3, w: 80, h: 18, siz: 11, + }, btnKcBack: { x: g_btnX(1 / 3), y: g_sHeight - 75, @@ -1062,6 +1065,8 @@ const g_emojiObj = { memo: `📝`, // メモ (memo) musical: `🎵`, // 音符 (musical note) camera: `📷`, // カメラ (camera) + locked: `🔒`, // 鍵 (locked) + unlocked: `🔓`, // 鍵開 (unlocked) }; /** 設定・オプション画面用共通 */ @@ -1284,6 +1289,8 @@ const g_stateObj = { rotateEnabled: true, flatStepHeight: C_ARW_WIDTH, + keyLockFlg: false, + dm_environment: C_FLG_OFF, dm_highscores: C_FLG_OFF, dm_customKey: C_FLG_OFF, @@ -4460,6 +4467,7 @@ const g_lang_msgInfoObj = { I_0006: `ローカルストレージ情報をクリップボードにコピーしました!`, I_0007: `オブジェクト情報をクリップボードにコピーしました!`, I_0011: `指定した部分キーが未定義のため、画面表示できません。設定を見直してください。`, + I_0012: `キー割り当てモードを{0}に変更しました。`, }, En: { W_0001: `Your browser is not guaranteed to work.
@@ -4510,6 +4518,7 @@ const g_lang_msgInfoObj = { I_0006: `Local storage information copied to clipboard!`, I_0007: `Object information copied to clipboard!`, I_0011: `The specified partial key is undefined and cannot be displayed on the screen. Please review your settings.`, + I_0012: `Key assignment mode changed to {0}.`, }, }; @@ -4565,6 +4574,7 @@ const g_lblNameObj = { b_close: `Close`, b_cReset: `Reset`, b_precond: `Precondition`, + b_keyLock: `KeyLock`, Difficulty: `Difficulty`, Speed: `Speed`, From 4420116ef30032b55866a61217316b018d69b862 Mon Sep 17 00:00:00 2001 From: tickle Date: Sun, 21 Jun 2026 17:14:14 +0900 Subject: [PATCH 05/14] =?UTF-8?q?refactor:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E5=86=85=E5=AE=B9=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index f314658d..8259ac0d 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -10242,7 +10242,7 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { const changeTmpColor = (_j, _scrollNum = 1) => { const changeTmpOneColor = _idx => { changeTmpData(`color`, g_headerObj.setColor.length, _idx, _scrollNum); - const arrowColor = getKeyConfigColor(_j, g_keyObj[`color${keyCtrlPtn}`][_idx]); + const arrowColor = getKeyConfigColor(_idx, g_keyObj[`color${keyCtrlPtn}`][_idx]); $id(`arrow${_idx}`).background = arrowColor; $id(`arrowShadow${_idx}`).background = getShadowColor(g_keyObj[`color${keyCtrlPtn}`][_idx], arrowColor); }; From 8c6e83d7b768bacc9ab6843fb12ce7349c079759 Mon Sep 17 00:00:00 2001 From: tickle Date: Sun, 21 Jun 2026 20:04:16 +0900 Subject: [PATCH 06/14] =?UTF-8?q?change:=20=E3=82=AD=E3=83=BC=E5=89=B2?= =?UTF-8?q?=E3=82=8A=E5=BD=93=E3=81=A6=E7=84=A1=E5=8A=B9=E5=8C=96=E7=94=A8?= =?UTF-8?q?=E3=81=AE=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 25 +++++++++++++++++++------ js/lib/danoni_constants.js | 2 ++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index 8259ac0d..c1cb8f78 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -10109,8 +10109,7 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { `
${g_lblNameObj.key}
${g_lblNameObj.config}
` .replace(/[\t\n]/g, ``), 0, 15, g_cssObj.flex_centering), - createDescDiv(`kcDesc`, g_lblNameObj.kcDesc.split(`{0}`).join(g_kCd[C_KEY_RETRY]) - .split(`{1}:`).join(g_isMac ? `` : `Delete:`)), + createDescDiv(`kcDesc`, getKcDescMsg()), createDescDiv(`kcShuffleDesc`, g_headerObj.shuffleUse && g_settings.shuffles.filter(val => val.endsWith(`+`)).length > 0 @@ -10974,12 +10973,13 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { createCss2Button(`btnKeyLock`, getKeyLockName(), () => { g_stateObj.keyLockFlg = !g_stateObj.keyLockFlg; makeInfoWindow(g_msgInfoObj.I_0012.split(`{0}`).join(boolToSwitch(!g_stateObj.keyLockFlg)), `leftToRightFade`); - btnKeyLock.innerHTML = getKeyLockName(); + toggleKcDesc(); }, g_lblPosObj.btnKcKeyLock, g_cssObj.button_Mini), // プレイ開始 makePlayButton(() => loadMusic()) ); + toggleKcDesc(); // キーボード押下時処理 setShortcutEvent(g_currentPage, (kbCode) => { @@ -11079,10 +11079,24 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { document.oncontextmenu = () => false; }; +const toggleKcDesc = () => { + if (document.getElementById(`kcDesc`) !== null) { + kcDesc.textContent = getKcDescMsg(); + kcDesc.style.fontSize = wUnit(getFontSize2(kcDesc.textContent, g_lblPosObj.kcDesc.w, { maxSiz: g_limitObj.mainSiz })); + kcDesc.classList.remove(g_cssObj.title_base, g_cssObj.keyconfig_Defaultkey); + kcDesc.classList.add(g_stateObj.keyLockFlg ? g_cssObj.keyconfig_Defaultkey : g_cssObj.title_base); + btnKeyLock.innerHTML = getKeyLockName(); + } +}; + +const getKcDescMsg = () => + g_stateObj.keyLockFlg + ? g_lblNameObj.kcNonDesc + : g_lblNameObj.kcDesc.split(`{0}`).join(g_kCd[C_KEY_RETRY]).split(`{1}:`).join(g_isMac ? `` : `Delete:`); + const getKeyLockName = () => `${g_lblNameObj.b_keyLock}${g_stateObj.keyLockFlg ? g_emojiObj.locked : g_emojiObj.unlocked}`; - /** * キーボードレイアウトプレビュー(Canvas版) * @@ -11659,8 +11673,7 @@ const keyconfigKeyboardPreview = (() => { _state.visible = !_state.visible; area.style.display = _state.visible ? `block` : `none`; g_stateObj.keyLockFlg = _state.visible; - btnKeyLock.innerHTML = getKeyLockName(); - + toggleKcDesc(); if (_state.visible) refresh(); }; diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index 5145b913..e8926c7d 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -4827,6 +4827,7 @@ const g_lang_lblNameObj = { dataDeleteONDesc: `セーフモード適用中はデータ消去は行えません。変更するにはセーフモードを解除してください`, kcDesc: `[{0}:スキップ / {1}:(代替キーのみ)キー無効化]`, + kcNonDesc: `キー割り当て無効化中です。解除するには「KeyLock」を押してください`, kcShuffleDesc: `番号をクリックでシャッフルグループ、矢印をクリックでカラーグループを変更`, kcNoShuffleDesc: `矢印をクリックでカラーグループを変更`, sdDesc: `[クリックでON/OFFを切替、灰色でOFF]`, @@ -4890,6 +4891,7 @@ const g_lang_lblNameObj = { dataDeleteONDesc: `Data erasure cannot be performed while safe mode is applied.
Please deactivate the safe mode to change the data.`, kcDesc: `[{0}:Skip / {1}:Key invalidation (Alternate keys only)]`, + kcNonDesc: `Key assignments are currently disabled. Press "KeyLock" to disable this setting.`, kcShuffleDesc: `Click the number to change the shuffle group, and click the arrow to change the color.`, kcNoShuffleDesc: `Click the arrow to change the color group.`, sdDesc: `[Click to switch, gray to OFF]`, From 04702a6bcdf81a8dc74c7bb0c6a88eaf4867010e Mon Sep 17 00:00:00 2001 From: tickle Date: Sun, 21 Jun 2026 21:35:24 +0900 Subject: [PATCH 07/14] =?UTF-8?q?improve:=20KeyLock=E3=83=9C=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E8=AA=AC=E6=98=8E=E6=96=87=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/lib/danoni_constants.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index e8926c7d..59f2eeef 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -642,6 +642,7 @@ const updateWindowSiz = () => { }, btnKcKeyLock: { x: g_btnX() + Math.floor((g_btnWidth() - 80) / 2) + 100, y: 3, w: 80, h: 18, siz: 11, + title: g_msgObj.keyLock, }, btnKcBack: { @@ -5063,6 +5064,7 @@ const g_lang_msgObj = { stepRtnGroup: `矢印などノーツの種類、回転に関するパターンを切り替えます。\nあらかじめ設定されている場合のみ変更可能です。`, kcReset: `対応するキーの割り当てを元に戻します。`, kcPreview: `キーボードレイアウトのプレビューを表示/非表示します。`, + keyLock: `キー割り当ての有効/無効を切り替えます。\n無効化時はシフトキー+番号/矢印クリックで同一グループの矢印群をまとめてグループ変更できます。`, pickArrow: `色番号ごとの矢印色(枠、塗りつぶし)、通常時のフリーズアロー色(枠、帯)を\nカラーピッカーから選んで変更できます。`, pickColorR: `設定する矢印色の種類を切り替えます。`, @@ -5170,6 +5172,7 @@ const g_lang_msgObj = { stepRtnGroup: `Switches the type of notes, such as arrows, and the pattern regarding rotation.\nThis can only be changed if it has been set in advance.`, kcReset: `Restores the corresponding key assignments.`, kcPreview: `Show/hide the preview of the keyboard layout.`, + keyLock: `Toggles key assignments on or off. \nWhen disabled, you can use the Shift key plus a number or arrow key \nto change the group of all arrows in the same group at once.`, pickArrow: `Change the frame or fill of arrow color and the frame or bar of normal freeze-arrow color\nfor each color number from the color picker.`, pickColorR: `Switches the arrow color type to be set.`, From ee020b010d9660c02132b5911799d80218bb9f29 Mon Sep 17 00:00:00 2001 From: tickle Date: Sun, 21 Jun 2026 21:54:12 +0900 Subject: [PATCH 08/14] =?UTF-8?q?change:=20KeyLock=E3=83=9C=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E4=BD=8D=E7=BD=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/lib/danoni_constants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index 59f2eeef..ac1d8397 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -641,7 +641,7 @@ const updateWindowSiz = () => { title: g_msgObj.displayPreview, }, btnKcKeyLock: { - x: g_btnX() + Math.floor((g_btnWidth() - 80) / 2) + 100, y: 3, w: 80, h: 18, siz: 11, + x: g_btnX() + Math.floor((g_btnWidth() - 80) / 2) + 90, y: 3, w: 80, h: 18, siz: 11, title: g_msgObj.keyLock, }, From 15208ff5e4a7ddd818f504f07a0f83a394239104 Mon Sep 17 00:00:00 2001 From: tickle Date: Mon, 22 Jun 2026 20:49:14 +0900 Subject: [PATCH 09/14] =?UTF-8?q?feat:=20=E8=AD=9C=E9=9D=A2=E5=90=8D?= =?UTF-8?q?=E3=81=AE=E8=A4=87=E6=95=B0=E8=A1=8C=E5=AF=BE=E5=BF=9C=E3=80=81?= =?UTF-8?q?=E3=83=98=E3=83=AB=E3=83=97=E3=83=9C=E3=82=BF=E3=83=B3=E3=81=AB?= =?UTF-8?q?=E3=82=88=E3=82=8B=E8=AD=9C=E9=9D=A2=E5=90=8D=E3=81=AE=E5=B9=85?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 99 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 75 insertions(+), 24 deletions(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index c1cb8f78..e03cfd18 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -1492,6 +1492,53 @@ const getEmojiForCanvas = _str => { return result; }; +/** + * 複数行に跨る可能性のある文字列を、改行タグ付きの文字列とフォントサイズに変換 + * @param {string} _targetStr + * @param {number} _maxWidth + * @param {object} object + * @param {string} [object.font=getBasicFont()] + * @param {number} [object.maxSiz=14] + * @param {number} [object.minSiz=5] + * @param {number} [object.maxSizMulti=maxSiz] + * @param {string} [object.prefix=''] + * @param {number} [object.len=30] + * @param {string} [object.delim=' '] + * @returns {[string, number]} + */ +const getFontSizeMulti = (_targetStr, _maxWidth, { font = getBasicFont(), + maxSiz = 14, minSiz = 5, maxSizMulti = maxSiz, prefix = ``, len = 30, delim = ` ` } = {}) => { + + // _targetStr が長い場合のみ、その中身を 2つ に分解する + if (_targetStr.length > len) { + let breakNum = -1; + const halfIndex = Math.floor(_targetStr.length / 2); + + // 文字列の中央から前に向かってスペースを探す + for (let j = halfIndex; j > 0; j--) { + if (_targetStr[j] === ' ') { + breakNum = j; + break; + } + } + // スペースがなければ、中央(よりやや左)で強制分割 + if (breakNum === -1) { + breakNum = halfIndex; + } + const isSpace = _targetStr[breakNum] === ' '; + const firstPart = _targetStr.slice(0, breakNum); + const secondPart = _targetStr.slice(isSpace ? breakNum + 1 : breakNum); + + // 難易度名の中に
を仕込む + _targetStr = `${firstPart}
${secondPart}`; + } + + // 3. 最終的な文字列を結合(prefix と難易度名の1つ目の塊が1行目になる) + const fullStr = `${prefix}${_targetStr}`; + + return [fullStr, getFontSize2(fullStr, _maxWidth, { font, maxSiz: _targetStr.includes(`
`) ? maxSizMulti : maxSiz, minSiz })]; +}; + /** * 指定した横幅に合ったフォントサイズを取得 * @param {string} _str @@ -1502,8 +1549,16 @@ const getEmojiForCanvas = _str => { * @returns {number} */ const getFontSize2 = (_str, _maxWidth, { font = getBasicFont(), maxSiz = 14, minSiz = 5 } = {}) => { + // 文字列を改行で分割(null/undefined 対策も含む) + const lines = _str ? _str.split('
') : []; + if (lines.length === 0) return maxSiz; + + // 大きいサイズから順に試す for (let siz = maxSiz; siz >= minSiz; siz--) { - if (_maxWidth >= getStrWidth(getLongestStr(_str?.split(`
`)), siz, font)) { + // すべての行が _maxWidth 以内に収まるかチェック + const isFitAllLines = lines.every(line => _maxWidth >= getStrWidth(line, siz, font)); + + if (isFitAllLines) { return siz; } } @@ -8134,12 +8189,17 @@ const setDifficulty = (_initFlg) => { // 3. 名称の設定 // 譜面名設定 (Difficulty) - const difWidth = parseFloat(lnkDifficulty.style.width); + const difWidth = parseFloat(lnkDifficulty.style.width) - 20; const transKeyName = getTransKeyName(); const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey)); - const difNames = [`${getKeyName(g_keyObj.currentKey)}${transKeyName} ${keyUnitName} / ${g_headerObj.difLabels[g_stateObj.scoreId]}`]; - lnkDifficulty.style.fontSize = wUnit(getFontSize2(difNames[0], difWidth, { maxSiz: g_limitObj.setLblSiz })); + const prefix = `${getKeyName(g_keyObj.currentKey)}${transKeyName} ${keyUnitName} / `; + let difLabel = `${g_headerObj.difLabels[g_stateObj.scoreId]}`; + + const [difName, difSiz] = getFontSizeMulti(difLabel, difWidth, { maxSiz: g_limitObj.setLblSiz, prefix }); + lnkDifficulty.style.fontSize = wUnit(difSiz); + + const difNames = [difName]; if (g_headerObj.makerView) { difNames.push(`(${g_headerObj.creatorNames[g_stateObj.scoreId]})`); difNames.forEach((difName, j) => { @@ -16786,7 +16846,8 @@ const resultInit = () => { makeCssResultPlayData(`lblMusicData`, dataRX, g_cssObj.result_style, 0, mTitleForView[0]), makeCssResultPlayData(`lblMusicData2`, dataRX, g_cssObj.result_style, 1, mTitleForView[1]), makeCssResultPlayData(`lblDifficulty`, lblRX, g_cssObj.result_lbl, 2, g_lblNameObj.rt_Difficulty, C_ALIGN_LEFT), - makeCssResultPlayData(`lblDifData`, dataRX, g_cssObj.result_style, 2, settingData.difData), + makeCssResultPlayData(`lblDifData`, dataRX, g_cssObj.result_style, 2, settingData.difData, C_ALIGN_CENTER, + { siz: getFontSize2(settingData.difData, 350) }), makeCssResultPlayData(`lblStyle`, lblRX, g_cssObj.result_lbl, 3, g_lblNameObj.rt_Style, C_ALIGN_LEFT), makeCssResultPlayData(`lblStyleData`, dataRX, g_cssObj.result_style, 3, settingData.playStyleData), makeCssResultPlayData(`lblDisplay`, lblRX, g_cssObj.result_lbl, 4, g_lblNameObj.rt_Display, C_ALIGN_LEFT), @@ -16795,21 +16856,9 @@ const resultInit = () => { ); // 設定項目が多い場合に2行に分解して表示する処理 - let playStyleBreakNum = lblStyleData.textContent.length; - if (lblStyleData.textContent.length > 60) { - for (let j = Math.floor(lblStyleData.textContent.length / 2); j > 0; j--) { - if (lblStyleData.textContent[j] === `,`) { - playStyleBreakNum = j + 2; - break; - } - } - lblStyleData.style.top = `${parseFloat(lblStyleData.style.top) - 3}px`; - lblStyleData.innerHTML = `${lblStyleData.textContent.slice(0, playStyleBreakNum)}
` + - `${lblStyleData.textContent.slice(playStyleBreakNum)}`; - lblStyleData.style.fontSize = `${getFontSize2(lblStyleData.textContent.slice(0, playStyleBreakNum), 350, { maxSiz: 10 })}px`; - } else { - lblStyleData.style.fontSize = `${getFontSize2(lblStyleData.textContent, 350)}px`; - } + const [styleStr, styleSiz] = getFontSizeMulti(settingData.playStyleData, 350, { maxSizMulti: 10, len: 60 }); + lblStyleData.innerHTML = styleStr; + lblStyleData.style.fontSize = wUnit(styleSiz); /** * キャラクタ、スコア描画のID共通部、色CSS名、スコア変数名 @@ -17243,6 +17292,7 @@ const resultInit = () => { const artistName = g_headerObj.artistNames[g_headerObj.musicNos[g_stateObj.scoreId]] || g_headerObj.artistName; const logicalWidth = 400; const logicalHeight = g_sHeight - 90; + const flapWidth = 370; canvas.id = `resultImage`; canvas.width = logicalWidth * g_dpr; @@ -17271,13 +17321,14 @@ const resultInit = () => { drawText(unEscapeHtml(mTitleForView[1]), { hy: 2 }); drawText(`${getEmojiForCanvas(g_emojiObj.memo)} ${unEscapeHtml(g_headerObj.tuning)} / ${getEmojiForCanvas(g_emojiObj.musical)} ${unEscapeHtml(artistName)}`, { hy: mTitleForView[1] !== `` ? 3 : 2, siz: 12 }); - drawText(unEscapeHtml(settingData.difDataForImage), { hy: 4 }); + drawText(unEscapeHtml(settingData.difDataForImage), { hy: 4, siz: getFontSize2(settingData.difDataForImage, flapWidth) }); if (settingData.playStyleData.length > 60) { - drawText(settingData.playStyleData.slice(0, playStyleBreakNum), { hy: 5, siz: getFontSize2(settingData.playStyleData.slice(0, playStyleBreakNum), 370) }); - drawText(settingData.playStyleData.slice(playStyleBreakNum), { hy: 6, siz: getFontSize2(settingData.playStyleData.slice(playStyleBreakNum), 370) }); + const strs = styleStr.split(`
`); + drawText(strs[0], { hy: 5, siz: getFontSize2(strs[0], flapWidth) }); + drawText(strs[1], { hy: 6, siz: getFontSize2(strs[1], flapWidth) }); } else { - drawText(settingData.playStyleData, { hy: 5, siz: getFontSize2(settingData.playStyleData, 370, { maxSiz: 15 }) }); + drawText(settingData.playStyleData, { hy: 5, siz: getFontSize2(settingData.playStyleData, flapWidth, { maxSiz: 15 }) }); } Object.keys(jdgScoreObj).forEach(score => { drawText(g_lblNameObj[`j_${score}`], { hy: 7 + jdgScoreObj[score].pos, color: jdgScoreObj[score].dfColor }); From 9830f923d70273f9ba23358802f86193f0d60f65 Mon Sep 17 00:00:00 2001 From: tickle Date: Mon, 22 Jun 2026 21:05:53 +0900 Subject: [PATCH 10/14] =?UTF-8?q?refactor:=20=E3=83=AC=E3=83=93=E3=83=A5?= =?UTF-8?q?=E3=83=BC=E5=86=85=E5=AE=B9=E3=82=92=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index e03cfd18..bccf06f0 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -1516,7 +1516,7 @@ const getFontSizeMulti = (_targetStr, _maxWidth, { font = getBasicFont(), // 文字列の中央から前に向かってスペースを探す for (let j = halfIndex; j > 0; j--) { - if (_targetStr[j] === ' ') { + if (_targetStr[j] === delim) { breakNum = j; break; } @@ -1525,9 +1525,9 @@ const getFontSizeMulti = (_targetStr, _maxWidth, { font = getBasicFont(), if (breakNum === -1) { breakNum = halfIndex; } - const isSpace = _targetStr[breakNum] === ' '; + const isSpace = _targetStr[breakNum] === delim; const firstPart = _targetStr.slice(0, breakNum); - const secondPart = _targetStr.slice(isSpace ? breakNum + 1 : breakNum); + const secondPart = _targetStr.slice(isSpace ? breakNum + delim.length : breakNum); // 難易度名の中に
を仕込む _targetStr = `${firstPart}
${secondPart}`; From 685d1b9124db392de72fa885495b18d77fe1ec44 Mon Sep 17 00:00:00 2001 From: tickle Date: Mon, 22 Jun 2026 21:50:05 +0900 Subject: [PATCH 11/14] =?UTF-8?q?change:=20=E8=AD=9C=E9=9D=A2=E9=81=B8?= =?UTF-8?q?=E6=8A=9E=E3=83=AA=E3=82=B9=E3=83=88=E3=81=A7=E8=AD=9C=E9=9D=A2?= =?UTF-8?q?=E5=90=8D=E3=81=8C=E9=95=B7=E3=81=84=E5=A0=B4=E5=90=88=E3=81=B8?= =?UTF-8?q?=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index bccf06f0..7b207ab4 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -7235,12 +7235,21 @@ const makeDifList = (_difList, _targetKey = ``) => { g_headerObj.viewLists.forEach(j => { const keyLabel = g_headerObj.keyLabels[j]; if (_targetKey === `` || keyLabel === _targetKey) { - let text = `${getKeyName(keyLabel)} / ${g_headerObj.difLabels[j]}`; + + // 譜面名の表示 + const prefix = `${getKeyName(keyLabel)} / `; + let text = `${g_headerObj.difLabels[j]}`; if (g_headerObj.makerView) { text += ` (${g_headerObj.creatorNames[j]})`; } - _difList.appendChild(makeDifLblCssButton(`dif${k}`, text, k, () => nextDifficulty(j - g_stateObj.scoreId), - { btnStyle: (j === g_stateObj.scoreId ? `Setting` : `Default`) })); + // キー種と譜面名に分割し、譜面名が長すぎる場合は二段に分割して表示 + const [difText, difSiz] = getFontSizeMulti(text, g_limitObj.difSelectorWidth, { + maxSiz: g_limitObj.difSelectorSiz, maxSizMulti: 9, prefix, + }) + _difList.appendChild(makeDifLblCssButton(`dif${k}`, difText, k, () => nextDifficulty(j - g_stateObj.scoreId), { + btnStyle: (j === g_stateObj.scoreId ? `Setting` : `Default`), siz: difSiz, + })); + document.getElementById(`dif${k}`).style.lineHeight = `9px`; if (j === g_stateObj.scoreId) { pos = k + 6.5 * (g_sHeight - 239) / 261; curk = k; From f3f182537c6ed2999765f1e0d1b1bf1808960e51 Mon Sep 17 00:00:00 2001 From: tickle Date: Mon, 22 Jun 2026 22:04:46 +0900 Subject: [PATCH 12/14] =?UTF-8?q?change:=20=E6=8A=98=E3=82=8A=E8=BF=94?= =?UTF-8?q?=E3=81=97=E6=96=87=E5=AD=97=E3=81=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index 7b207ab4..d5274671 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -1507,7 +1507,7 @@ const getEmojiForCanvas = _str => { * @returns {[string, number]} */ const getFontSizeMulti = (_targetStr, _maxWidth, { font = getBasicFont(), - maxSiz = 14, minSiz = 5, maxSizMulti = maxSiz, prefix = ``, len = 30, delim = ` ` } = {}) => { + maxSiz = 14, minSiz = 5, maxSizMulti = maxSiz, prefix = ``, len = 20, delim = ` ` } = {}) => { // _targetStr が長い場合のみ、その中身を 2つ に分解する if (_targetStr.length > len) { @@ -7244,7 +7244,7 @@ const makeDifList = (_difList, _targetKey = ``) => { } // キー種と譜面名に分割し、譜面名が長すぎる場合は二段に分割して表示 const [difText, difSiz] = getFontSizeMulti(text, g_limitObj.difSelectorWidth, { - maxSiz: g_limitObj.difSelectorSiz, maxSizMulti: 9, prefix, + maxSiz: g_limitObj.difSelectorSiz, maxSizMulti: 9, prefix, len: 30, }) _difList.appendChild(makeDifLblCssButton(`dif${k}`, difText, k, () => nextDifficulty(j - g_stateObj.scoreId), { btnStyle: (j === g_stateObj.scoreId ? `Setting` : `Default`), siz: difSiz, From 32fbc2eec734f1b9e1570da490d7a381b78e467d Mon Sep 17 00:00:00 2001 From: tickle Date: Tue, 23 Jun 2026 21:24:37 +0900 Subject: [PATCH 13/14] =?UTF-8?q?improve:=20=E3=82=AD=E3=83=BC=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=95=E3=82=A3=E3=82=B0=E7=94=BB=E9=9D=A2=E3=81=AE?= =?UTF-8?q?=E3=82=AD=E3=83=BC=E3=83=9C=E3=83=BC=E3=83=89=E3=83=97=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6?= =?UTF-8?q?=E3=80=81=E3=82=AD=E3=83=BC=E3=83=91=E3=82=BF=E3=83=BC=E3=83=B3?= =?UTF-8?q?=E3=82=84ImgType=E3=81=8C=E5=A4=89=E3=82=8F=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=82=82=E8=A1=A8=E7=A4=BA=E3=82=92=E7=B6=AD=E6=8C=81=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/danoni_main.js | 11 ++++++++++- js/lib/danoni_constants.js | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/js/danoni_main.js b/js/danoni_main.js index d5274671..7e907f98 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -5657,7 +5657,6 @@ const titleInit = (_initFlg = false) => { }); const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`; - g_stateObj.keyLockFlg = false; // 譜面初期情報ロード許可フラグ // (初回読み込み時はローカルストレージのロードが必要なため、 @@ -10171,6 +10170,11 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { // 譜面初期情報ロード許可フラグ g_canLoadDifInfoFlg = false; + if (_initFlg) { + g_stateObj.keyLockFlg = false; + g_stateObj.kbPreviewFlg = false; + } + multiAppend(divRoot, // キーコンフィグ画面タイトル @@ -11143,6 +11147,10 @@ const keyConfigInit = (_kcType = g_kcType, _initFlg = false) => { }) ); + if (g_stateObj.kbPreviewFlg) { + btnKbPreview.click(); + } + safeExecuteCustomHooks(`g_skinJsObj.keyconfig`, g_skinJsObj.keyconfig); document.onkeyup = evt => commonKeyUp(evt); document.oncontextmenu = () => false; @@ -11741,6 +11749,7 @@ const keyconfigKeyboardPreview = (() => { _state.visible = !_state.visible; area.style.display = _state.visible ? `block` : `none`; + g_stateObj.kbPreviewFlg = _state.visible; g_stateObj.keyLockFlg = _state.visible; toggleKcDesc(); if (_state.visible) refresh(); diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index ac1d8397..5f5e2c22 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -1291,6 +1291,7 @@ const g_stateObj = { flatStepHeight: C_ARW_WIDTH, keyLockFlg: false, + kbPreviewFlg: false, dm_environment: C_FLG_OFF, dm_highscores: C_FLG_OFF, From 2d669d89420c6701ec40af0aff7db7c636a282d8 Mon Sep 17 00:00:00 2001 From: tickle Date: Tue, 23 Jun 2026 22:11:56 +0900 Subject: [PATCH 14/14] =?UTF-8?q?[ver49.0.0]=20=E3=82=AD=E3=83=BC=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=95=E3=82=A3=E3=82=B0=E7=94=BB=E9=9D=A2=E3=81=AB?= =?UTF-8?q?=E3=82=AD=E3=83=BC=E5=89=B2=E3=82=8A=E5=BD=93=E3=81=A6=E3=82=92?= =?UTF-8?q?=E7=84=A1=E5=8A=B9=E3=81=AB=E3=81=99=E3=82=8B=E3=83=A2=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E8=BF=BD=E5=8A=A0=20=E4=BB=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SECURITY.md | 9 +++++---- js/danoni_main.js | 6 +++--- js/lib/danoni_constants.js | 2 +- package.json | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 64511119..1060f486 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ - 修正対象のバージョンは下記の通りです。 - 基本的には、同一メジャーバージョンの最新版がサポート対象です。 -- v1 ~ v43, v45 は**更新を終了しました。** +- v1 ~ v43, v45 ~ v46 は**更新を終了しました。** v46 の対応終了時期は v49 リリース開始時を予定しています。(変更可能性あり) バージョン別の更新継続可否は現状、[ライフサイクルポリシー](https://github.com/cwtickle/danoniplus/wiki/LifecyclePolicy)に従います。 - 各バージョンの概要は[更新情報](https://github.com/cwtickle/danoniplus/wiki/UpdateInfo)に記載しています。 @@ -18,9 +18,10 @@ | Version | Supported | Latest Version | Logs | First Release | End of Support | | ------------ | ------------------ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------- | ---------------- | -| v48 | :heavy_check_mark: | [v48.5.1](https://github.com/cwtickle/danoniplus/releases/tag/v48.5.1) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-latest) | 2026-05-17 | (At Release v51) | -| v47 | :heavy_check_mark: | [v47.6.5](https://github.com/cwtickle/danoniplus/releases/tag/v47.6.5) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v47) | 2026-04-19 | (At Release v50) | -| v46 | :warning: | [v46.7.3](https://github.com/cwtickle/danoniplus/releases/tag/v46.7.3) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v46) | 2026-03-12 | (At Release v49) | +| v49 :anchor: | :heavy_check_mark: | [v49.0.0](https://github.com/cwtickle/danoniplus/releases/tag/v49.0.0) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-latest) | 2026-06-23 | (At Release v58) | +| v48 | :heavy_check_mark: | [v48.5.2](https://github.com/cwtickle/danoniplus/releases/tag/v48.5.2) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v48) | 2026-05-17 | (At Release v51) | +| v47 | :warning: | [v47.6.5](https://github.com/cwtickle/danoniplus/releases/tag/v47.6.5) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v47) | 2026-04-19 | (At Release v50) | +| v46 | :x: | [v46.7.3 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v46.7.3) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v46) | 2026-03-12 | 2026-06-23 / Launched v49 | | v45 | :x: | [v45.5.13 (final)](https://github.com/cwtickle/danoniplus/releases/tag/v45.5.13) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v45) | 2026-02-26 | 2026-05-17 / Launched v48 | | v44 :anchor: | :heavy_check_mark: | [v44.5.17](https://github.com/cwtickle/danoniplus/releases/tag/v44.5.17) | [:memo:](https://github.com/cwtickle/danoniplus/wiki/Changelog-v44) | 2026-02-07 | (At Release v53) | diff --git a/js/danoni_main.js b/js/danoni_main.js index 7e907f98..455dec54 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -4,12 +4,12 @@ * * Source by tickle * Created : 2018/10/08 - * Revised : 2026/06/15 + * Revised : 2026/06/23 * * https://github.com/cwtickle/danoniplus */ -const g_version = `Ver 48.5.1`; -const g_revisedDate = `2026/06/15`; +const g_version = `Ver 49.0.0`; +const g_revisedDate = `2026/06/23`; // カスタム用バージョン (danoni_custom.js 等で指定可) let g_localVersion = ``; diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index 5f5e2c22..d2d4e061 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -5,7 +5,7 @@ * * Source by tickle * Created : 2019/11/19 - * Revised : 2026/06/14 (v48.5.0) + * Revised : 2026/06/23 (v49.0.0) * * https://github.com/cwtickle/danoniplus */ diff --git a/package.json b/package.json index 96e47032..08f71250 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "danoniplus", - "version": "48.5.1", + "version": "49.0.0", "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game", "main": "./js/danoni_main.js", "jsdelivr": "./js/danoni_main.js",