danoniplus 47.6.0 → 47.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/js/danoni_main.js CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2026/05/12
7
+ * Revised : 2026/05/13
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 47.6.0`;
12
- const g_revisedDate = `2026/05/12`;
11
+ const g_version = `Ver 47.6.1`;
12
+ const g_revisedDate = `2026/05/13`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -10396,6 +10396,9 @@ const keyconfigKeyboardPreview = (() => {
10396
10396
  altFill: `#3e3e1a`, // 代替キー背景
10397
10397
  altStroke: `#777755`, // 代替キー枠
10398
10398
  altText: `#eeeecc`, // 代替キー文字
10399
+ shortcutFill: `#330011`, // ショートカットキー背景
10400
+ shortcutStroke: `#ff4466`, // ショートカットキー枠
10401
+ shortcutText: `#ffaacc`, // ショートカットキー文字
10399
10402
  bgFill: `#0d0d1a`, // Canvas 背景
10400
10403
  legendText: `#888899`, // 凡例テキスト
10401
10404
  };
@@ -10418,35 +10421,20 @@ const keyconfigKeyboardPreview = (() => {
10418
10421
  // キーレイアウト定義
10419
10422
  //
10420
10423
  // 各行: { offsetX, keys }
10421
- // offsetX : 行左端の水平オフセット(単位: BASE_KEY_W)。正の値 = 右にずらす。
10424
+ // offsetX : 行左端の水平オフセット(単位: BASE_KEY_W)。全行 0 で統一し、
10425
+ // L)Shift の幅で行頭位置を調整する。
10422
10426
  // keys : キー定義の配列
10423
10427
  //
10424
- // 各キー: { kc, w, h?, label? }
10428
+ // 各キー: { kc, w?, h?, label? }
10425
10429
  // kc : keyCode(数値)。-1 はスペーサー(描画・キャッシュなし)。
10426
10430
  // w : 幅倍率(BASE_KEY_W 基準。省略時 1)
10427
- // h : 高さ倍率(省略時 1)
10431
+ // h : 高さ倍率(BASE_KEY_H 基準。省略時 1)
10428
10432
  // label : 省略時は g_kCd[kc] を参照。g_kCd が空文字のキーや
10429
10433
  // 左右を区別したいキーに指定する。
10430
10434
  //
10431
10435
  // 右Shift/Ctrl/Alt は danoniplus 独自コード 256〜258 を使用。
10436
+ // Appli キーは 93 を使用(g_kCd[93] = `Appli`)。
10432
10437
  // -------------------------------------------------------------------------
10433
-
10434
- // メインキーボード部(Fn行 + 数字行 + QWERTY + ASDF + ZXCV + スペース行)
10435
- //
10436
- // 各行の offsetX 設計(1u = BASE_KEY_W):
10437
- // Fn行 0u Esc が左端
10438
- // 数字行 0u 229(IME/`) が左端
10439
- // QWERTY 0u Tab(1.5u) が左端、左端位置は数字行と揃う
10440
- // ASDF 0u CapsLk を 2.25u にして L)Shift 左端と揃える
10441
- // ZXCV 0.25u 標準キーボードの行オフセットを offsetX + L)Shift 拡大で再現
10442
- // スペース行 0u
10443
- //
10444
- // JIS と US の主な違い:
10445
- // 数字行: JIS は intlYen(220) あり、US はなし(BackSpace が広い)
10446
- // QWERTY: JIS は [ の右にスペーサー、US はなし(Enter が横長)
10447
- // ASDF : JIS は ¥(221) あり、US はなし(Enter が横長)
10448
- // ZXCV : JIS は intlRo(226) あり、US はなし(R)Shift が広い)
10449
- // Enter : JIS は縦長(h=2)、US は横長(h=1, w=2.25)
10450
10438
  /**
10451
10439
  * g_localeObj.val に応じた MAIN_ROWS を生成して返す。
10452
10440
  * drawBase / calcScale の都度呼び出し、locale 変化を反映する。
@@ -10460,18 +10448,18 @@ const keyconfigKeyboardPreview = (() => {
10460
10448
  {
10461
10449
  offsetX: 0,
10462
10450
  keys: [
10463
- { kc: 27 }, // Esc
10464
- { kc: -1, w: 0.5 }, // スペーサー
10451
+ { kc: 27 }, // Esc
10452
+ { kc: -1, w: 0.5 }, // スペーサー
10465
10453
  { kc: 112 }, { kc: 113 }, { kc: 114 }, { kc: 115 },
10466
- { kc: -1, w: 0.25 }, // スペーサー
10454
+ { kc: -1, w: 0.25 }, // スペーサー
10467
10455
  { kc: 116 }, { kc: 117 }, { kc: 118 }, { kc: 119 },
10468
- { kc: -1, w: 0.25 }, // スペーサー
10456
+ { kc: -1, w: 0.25 }, // スペーサー
10469
10457
  { kc: 120 }, { kc: 121 }, { kc: 122 }, { kc: 123 },
10470
10458
  ],
10471
10459
  },
10472
10460
  // Row1: 数字行
10473
- // JIS: ..., 222, 220(intlYen, 0.75u), BS(1.5u)
10474
- // US : ..., 222, BS(2.25u)
10461
+ // JIS: ..., 220(intlYen), BS
10462
+ // US : ..., BS
10475
10463
  {
10476
10464
  offsetX: 0,
10477
10465
  keys: [
@@ -10481,13 +10469,13 @@ const keyconfigKeyboardPreview = (() => {
10481
10469
  { kc: 55 }, { kc: 56 }, { kc: 57 },
10482
10470
  { kc: 48 }, { kc: 189 }, { kc: 222 },
10483
10471
  ...(isJa
10484
- ? [{ kc: 220, w: 0.75 }, { kc: 8, w: 1.5 }] // JIS: intlYen + BS
10485
- : [{ kc: 8, w: 2.25 }] // US : BS のみ(広い)
10472
+ ? [{ kc: 220, w: 0.75 }, { kc: 8 }] // JIS: intlYen + BS
10473
+ : [{ kc: 8, w: 1.7 }] // US : BS のみ(広い)
10486
10474
  ),
10487
10475
  ],
10488
10476
  },
10489
10477
  // Row2: QWERTY
10490
- // JIS: ..., [, スペーサー(0.5u), Enter(縦長 h=2, w=1.25)
10478
+ // JIS: ..., [, Enter(13)
10491
10479
  // US : ..., [, ]
10492
10480
  {
10493
10481
  offsetX: 0,
@@ -10498,46 +10486,49 @@ const keyconfigKeyboardPreview = (() => {
10498
10486
  { kc: 85 }, { kc: 73 }, { kc: 79 },
10499
10487
  { kc: 80 }, { kc: 192 },
10500
10488
  ...(isJa
10501
- ? [{ kc: 219 }, { kc: -1, w: 0.5 }, { kc: 13, w: 1.25, h: 2 }] // JIS: [, スペーサー, Enter縦長
10502
- : [{ kc: 219 }, { kc: 221 }] // US : [, ]
10489
+ ? [{ kc: 219 }, { kc: 13, w: 1.25, h: 2 }] // JIS: [, Enter縦長
10490
+ : [{ kc: 219 }, { kc: 221, w: 1.2 }] // US : [, ]
10503
10491
  ),
10504
10492
  ],
10505
10493
  },
10506
10494
  // Row3: ASDF
10507
10495
  // JIS: ..., L, ;, ', ¥(221)
10508
- // US : ..., L, ;, ' ¥なし(Enter が下まで伸びる縦長分を吸収)
10496
+ // US : ..., L, ;, ', Enter(13)
10509
10497
  {
10510
10498
  offsetX: 0,
10511
10499
  keys: [
10512
- { kc: 20, w: 2.25, label: `CapsLk` },
10500
+ { kc: 20, w: 1.75, label: `CapsLk` },
10513
10501
  { kc: 65 }, { kc: 83 }, { kc: 68 },
10514
10502
  { kc: 70 }, { kc: 71 }, { kc: 72 },
10515
10503
  { kc: 74 }, { kc: 75 }, { kc: 76 },
10516
10504
  { kc: 187 }, { kc: 186 },
10517
10505
  ...(isJa
10518
- ? [{ kc: 221 }] // JIS: ¥
10519
- : [{ kc: 13, w: 2.25 }] // US : Enter横長
10506
+ ? [{ kc: 221 }] // JIS: ¥
10507
+ : [{ kc: 13, w: 1.9 }] // US : Enter横長
10520
10508
  ),
10521
10509
  ],
10522
10510
  },
10523
- // Row4: ZXCV(標準配列は ASDF より約 0.25u 右にオフセット)
10524
- // JIS: ..., /, intlRo(226), R)Shift(1.25u)
10525
- // US : ..., /, R)Shift(2.5u)
10511
+ // Row4: ZXCV
10512
+ // L)Shift の幅で行頭位置を揃える
10513
+ // JIS: L)Shift, ..., intlRo(226), R)Shift
10514
+ // US : L)Shift, ..., R)Shift
10526
10515
  {
10527
- offsetX: 0.25,
10516
+ offsetX: 0,
10528
10517
  keys: [
10529
- { kc: 16, w: 2.5 },
10518
+ { kc: 16, w: 2.25 },
10530
10519
  { kc: 90 }, { kc: 88 }, { kc: 67 },
10531
10520
  { kc: 86 }, { kc: 66 }, { kc: 78 },
10532
10521
  { kc: 77 }, { kc: 188 }, { kc: 190 },
10533
10522
  { kc: 191 },
10534
10523
  ...(isJa
10535
- ? [{ kc: 226 }, { kc: 256, w: 1.25 }] // JIS: intlRo + R)Shift
10536
- : [{ kc: 256, w: 2.5 }] // US : R)Shift のみ(広い)
10524
+ ? [{ kc: 226 }, { kc: 256, w: 1.5 }] // JIS: intlRo + R)Shift
10525
+ : [{ kc: 256, w: 2.4 }] // US : R)Shift のみ(広い)
10537
10526
  ),
10538
10527
  ],
10539
10528
  },
10540
- // Row5: スペースバー行(JIS/US 共通)
10529
+ // Row5: スペースバー行
10530
+ // JIS: ..., NoConv(29), Space, Conv(28), カタカナひらがな(242), ...
10531
+ // US : ..., Space, ...
10541
10532
  {
10542
10533
  offsetX: 0,
10543
10534
  keys: [
@@ -10556,38 +10547,41 @@ const keyconfigKeyboardPreview = (() => {
10556
10547
  ]
10557
10548
  ),
10558
10549
  { kc: 258 },
10559
- { kc: 91 },
10560
- { kc: 257, w: 1.25 },
10550
+ { kc: 93 },
10551
+ ...(isJa
10552
+ ? [{ kc: 257, w: 1.2 }]
10553
+ : [{ kc: 257, w: 1.05 }]
10554
+ ),
10561
10555
  ],
10562
10556
  },
10563
10557
  ];
10564
10558
  };
10565
- // 編集キークラスター(Insert/Delete/Home/End/PgUp/PgDn + 矢印キー)
10559
+ // 編集キークラスター(PrintSc/ScrollLk/Pause/Insert/Delete/Home/End/PgUp/PgDn + 矢印キー)
10566
10560
  // MAIN_ROWS と行インデックスを揃えて配置する。空行はスキップされる。
10567
10561
  const NAV_ROWS = [
10568
10562
  { offsetX: 0, keys: [{ kc: 44, label: `PrintSc` }, { kc: 145, label: `ScrollLk` }, { kc: 19 }] }, // PrintSc ScrollLk Pause
10569
10563
  { offsetX: 0, keys: [{ kc: 45 }, { kc: 36 }, { kc: 33 }] }, // Insert Home PgUp
10570
10564
  { offsetX: 0, keys: [{ kc: 46 }, { kc: 35 }, { kc: 34 }] }, // Delete End PgDn
10571
- { offsetX: 0, keys: [] }, // ASDF行:空
10565
+ { offsetX: 0, keys: [] }, // ASDF行:空
10572
10566
  { offsetX: 0, keys: [{ kc: -1 }, { kc: 38 }, { kc: -1 }] }, // ↑
10573
10567
  { offsetX: 0, keys: [{ kc: 37 }, { kc: 40 }, { kc: 39 }] }, // ← ↓ →
10574
10568
  ];
10575
10569
 
10576
- // テンキー(Space行の下に余白を空けて横に羅列)
10570
+ // テンキー(MAIN_ROWS と行インデックスを揃えて配置。1行目は空行で Fn行に揃える)
10577
10571
  // kc は g_kCd 定義に従う: 96〜111=テンキー各種, 144=NumLk
10578
- // 標準テンキーレイアウト:
10572
+ // 標準テンキーレイアウト(2行目から):
10579
10573
  // [NumLk] [T/] [T*] [T-]
10580
10574
  // [T7][T8][T9] [T+]
10581
10575
  // [T4][T5][T6] [T+] ← T+ は縦2u
10582
10576
  // [T1][T2][T3] [TEnter]
10583
- // [ T0 ][T_] [TEnter] ← T0 は横2u、TEnter は縦2u
10577
+ // [ T0 ][T.] [TEnter] ← T0 は横2u、TEnter は縦2u
10584
10578
  const NUM_ROWS = [
10585
10579
  { offsetX: 0, keys: [] },
10586
- { offsetX: 0, keys: [{ kc: 144 }, { kc: 111 }, { kc: 106 }, { kc: 109 }] }, // NumLk T/ T* T-
10580
+ { offsetX: 0, keys: [{ kc: 144 }, { kc: 111 }, { kc: 106 }, { kc: 109 }] }, // NumLk T/ T* T-
10587
10581
  { offsetX: 0, keys: [{ kc: 103 }, { kc: 104 }, { kc: 105 }, { kc: 107, h: 2 }] }, // T7 T8 T9 T+(縦2u)
10588
- { offsetX: 0, keys: [{ kc: 100 }, { kc: 101 }, { kc: 102 }] }, // T4 T5 T6
10589
- { offsetX: 0, keys: [{ kc: 97 }, { kc: 98 }, { kc: 99 }, { kc: 108, h: 2 }] }, // T1 T2 T3 TEnter(縦2u)
10590
- { offsetX: 0, keys: [{ kc: 96, w: 2 }, { kc: 110 }] }, // T0(横2u) T.
10582
+ { offsetX: 0, keys: [{ kc: 100 }, { kc: 101 }, { kc: 102 }] }, // T4 T5 T6
10583
+ { offsetX: 0, keys: [{ kc: 97 }, { kc: 98 }, { kc: 99 }, { kc: 108, h: 2 }] }, // T1 T2 T3 TEnter(縦2u)
10584
+ { offsetX: 0, keys: [{ kc: 96, w: 2 }, { kc: 110 }] }, // T0(横2u) T.
10591
10585
  ];
10592
10586
 
10593
10587
  // -------------------------------------------------------------------------
@@ -10595,14 +10589,15 @@ const keyconfigKeyboardPreview = (() => {
10595
10589
  // -------------------------------------------------------------------------
10596
10590
  const _state = {
10597
10591
  visible: false,
10598
- mappedSet: new Set(), // メインキー(各矢印の index 0)
10599
- altSet: new Set(), // 代替キー(各矢印の index 1 以降)
10592
+ mappedSet: new Set(), // メインキー(各矢印の index 0)
10593
+ altSet: new Set(), // 代替キー(各矢印の index 1 以降)
10594
+ shortcutSet: new Set(), // プレイ中ショートカット(keyRetry / keyTitleBack / PgDn / PgUp)
10600
10595
  canvasBase: null,
10601
10596
  canvasMap: null,
10602
- keyRects: [], // { kc, x, y, w, h, label } — drawMap で照合するキャッシュ
10603
- scale: 1, // BASE_KEY_W/H に掛けるスケール係数
10604
- cvsW: 500, // 実際の Canvas 幅(スケール計算後)
10605
- cvsH: 240, // 実際の Canvas 高さ(スケール計算後)
10597
+ keyRects: [], // { kc, x, y, w, h, label } — drawMap で照合するキャッシュ
10598
+ scale: 1, // BASE_KEY_W/H に掛けるスケール係数
10599
+ cvsW: 500, // 実際の Canvas 幅(スケール計算後)
10600
+ cvsH: 240, // 実際の Canvas 高さ(スケール計算後)
10606
10601
  };
10607
10602
 
10608
10603
  // -------------------------------------------------------------------------
@@ -10629,7 +10624,7 @@ const keyconfigKeyboardPreview = (() => {
10629
10624
 
10630
10625
  const BASE_NAV_W = 3 * BASE_KEY_W + 2 * BASE_KEY_GAP; // NAV は 3列固定
10631
10626
  const BASE_ROW_H = MAIN_ROWS_LEN * (BASE_KEY_H + BASE_KEY_GAP) - BASE_KEY_GAP; // MAIN+NAV 分の高さ
10632
- const NUM_ROWS_LEN = 6; // テンキーの行数
10627
+ const NUM_ROWS_LEN = 6; // テンキーの行数(1行目は空行、2行目からテンキー配置)
10633
10628
  const NUM_GAP_H = BASE_KEY_H * 0.4; // テンキー上部の余白(基準キー高の40%)
10634
10629
  const BASE_NUM_ROW_H = NUM_ROWS_LEN * (BASE_KEY_H + BASE_KEY_GAP) - BASE_KEY_GAP; // テンキー部の高さ
10635
10630
  const BASE_NUM_W = 4 * BASE_KEY_W + 3 * BASE_KEY_GAP; // テンキー横幅(4列固定)
@@ -10833,16 +10828,19 @@ const keyconfigKeyboardPreview = (() => {
10833
10828
  ctx.textBaseline = `middle`;
10834
10829
 
10835
10830
  const drawLegend = (x, fill, stroke, label) => {
10836
- roundRect(ctx, x, ly, 10, 10, 2);
10831
+ roundRect(ctx, x, ly - 5, 10, 10, 2);
10837
10832
  ctx.fillStyle = fill; ctx.fill();
10838
10833
  ctx.strokeStyle = stroke; ctx.lineWidth = 1; ctx.stroke();
10839
10834
  ctx.fillStyle = C_COLOR.legendText;
10840
- ctx.fillText(label, x + 14, ly + 5);
10841
- };
10835
+ ctx.fillText(label, x + 14, ly);
10842
10836
 
10843
- drawLegend(8, C_COLOR.keyFill, C_COLOR.keyStroke, g_lblNameObj.unallocated);
10844
- drawLegend(95, C_COLOR.mappedFill, C_COLOR.mappedStroke, g_lblNameObj.allocated);
10845
- drawLegend(182, C_COLOR.altFill, C_COLOR.altStroke, g_lblNameObj.altAllocated);
10837
+ return 14 + ctx.measureText(label).width + 14;
10838
+ };
10839
+ let lx = 8;
10840
+ lx += drawLegend(lx, C_COLOR.keyFill, C_COLOR.keyStroke, g_lblNameObj.unallocated);
10841
+ lx += drawLegend(lx, C_COLOR.mappedFill, C_COLOR.mappedStroke, g_lblNameObj.allocated);
10842
+ lx += drawLegend(lx, C_COLOR.altFill, C_COLOR.altStroke, g_lblNameObj.altAllocated);
10843
+ lx += drawLegend(lx, C_COLOR.shortcutFill, C_COLOR.shortcutStroke, g_lblNameObj.shortcutKey);
10846
10844
  };
10847
10845
 
10848
10846
  /**
@@ -10865,7 +10863,7 @@ const keyconfigKeyboardPreview = (() => {
10865
10863
  ctx.scale(dpr, dpr);
10866
10864
  ctx.clearRect(0, 0, _state.cvsW, _state.cvsH);
10867
10865
 
10868
- // 代替キーを先に描画し、メインキーで上書きすることで優先度を表現
10866
+ // 優先度: ショートカット > メイン > 代替(後から描くほど優先)
10869
10867
  const drawKey = (fill, stroke, text) => rect => {
10870
10868
  const [primary, sub] = getKeyLabels(rect.kc, rect.label);
10871
10869
  roundRect(ctx, rect.x + 0.5, rect.y + 0.5, rect.w - 1, rect.h - 1, kr());
@@ -10877,13 +10875,22 @@ const keyconfigKeyboardPreview = (() => {
10877
10875
  drawKeyLabel(ctx, rect.x, rect.y, rect.w, rect.h, primary, sub, text, text);
10878
10876
  };
10879
10877
 
10878
+ // 1. 代替キー(メイン・ショートカットと重複しない場合のみ)
10880
10879
  _state.keyRects
10881
- .filter(rect => _state.altSet.has(rect.kc) && !_state.mappedSet.has(rect.kc))
10880
+ .filter(rect => _state.altSet.has(rect.kc)
10881
+ && !_state.mappedSet.has(rect.kc)
10882
+ && !_state.shortcutSet.has(rect.kc))
10882
10883
  .forEach(drawKey(C_COLOR.altFill, C_COLOR.altStroke, C_COLOR.altText));
10883
10884
 
10885
+ // 2. メインキー(ショートカットと重複しない場合のみ)
10884
10886
  _state.keyRects
10885
- .filter(rect => _state.mappedSet.has(rect.kc))
10887
+ .filter(rect => _state.mappedSet.has(rect.kc) && !_state.shortcutSet.has(rect.kc))
10886
10888
  .forEach(drawKey(C_COLOR.mappedFill, C_COLOR.mappedStroke, C_COLOR.mappedText));
10889
+
10890
+ // 3. ショートカット(常に最前面)
10891
+ _state.keyRects
10892
+ .filter(rect => _state.shortcutSet.has(rect.kc))
10893
+ .forEach(drawKey(C_COLOR.shortcutFill, C_COLOR.shortcutStroke, C_COLOR.shortcutText));
10887
10894
  };
10888
10895
 
10889
10896
  // -------------------------------------------------------------------------
@@ -10971,6 +10978,10 @@ const keyconfigKeyboardPreview = (() => {
10971
10978
 
10972
10979
  _state.mappedSet = new Set(ctrl.map(arr => arr[0]).filter(v => v > 0));
10973
10980
  _state.altSet = new Set(ctrl.flatMap(arr => arr.slice(1)).filter(v => v > 0));
10981
+ // プレイ中ショートカット: keyRetry / keyTitleBack は g_headerObj から取得、PgDn(34) / PgUp(33) は固定
10982
+ _state.shortcutSet = new Set(
10983
+ [g_headerObj.keyRetry, g_headerObj.keyTitleBack, 34, 33].filter(v => v > 0)
10984
+ );
10974
10985
  if (_state.visible) drawMap();
10975
10986
  };
10976
10987
 
@@ -10982,6 +10993,7 @@ const keyconfigKeyboardPreview = (() => {
10982
10993
  _state.visible = false;
10983
10994
  _state.mappedSet = new Set();
10984
10995
  _state.altSet = new Set();
10996
+ _state.shortcutSet = new Set();
10985
10997
  _state.keyRects = [];
10986
10998
  _state.canvasBase = null;
10987
10999
  _state.canvasMap = null;
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/05/12 (v47.6.0)
8
+ * Revised : 2026/05/13 (v47.6.1)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -4743,6 +4743,7 @@ const g_lang_lblNameObj = {
4743
4743
  unallocated: `未割当`,
4744
4744
  allocated: `割当済`,
4745
4745
  altAllocated: `代替キー`,
4746
+ shortcutKey: `ショートカットキー`,
4746
4747
 
4747
4748
  j_ii: "(・∀・)イイ!!",
4748
4749
  j_shakin: "(`・ω・)シャキン",
@@ -4798,6 +4799,7 @@ const g_lang_lblNameObj = {
4798
4799
  unallocated: `Unallocated`,
4799
4800
  allocated: `Allocated`,
4800
4801
  altAllocated: `Alternate Keys`,
4802
+ shortcutKey: `Shortcut Keys`,
4801
4803
 
4802
4804
  j_ii: ":D Perfect!!",
4803
4805
  j_shakin: ":) Great!",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "47.6.0",
3
+ "version": "47.6.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "jsdelivr": "./js/danoni_main.js",