danoniplus 42.1.1 → 42.2.0

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 : 2025/06/08
7
+ * Revised : 2025/06/15
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 42.1.1`;
12
- const g_revisedDate = `2025/06/08`;
11
+ const g_version = `Ver 42.2.0`;
12
+ const g_revisedDate = `2025/06/15`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -543,7 +543,7 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
543
543
  _value = escapeHtml(_value).replaceAll(`\n`, `<br>`);
544
544
  const colorCodePattern = /(#|0x)(?:[A-Fa-f0-9]{6}(?:[A-Fa-f0-9]{2})?|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{3})/g;
545
545
  if (_value === C_FLG_ON) {
546
- return `<span style="color:#66ff66">&#x2714; ON</span>`;
546
+ return `<span style="color:#66ff66">${g_emojiObj.checkMark} ON</span>`;
547
547
  } else if (colorCodePattern.test(_value)) {
548
548
  return _value.replace(colorCodePattern, (match) =>
549
549
  `<span style="color:${match.replace(`0x`, `#`)}">◆</span>${match.replace(`0x`, `#`)}`);
@@ -551,8 +551,8 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
551
551
  } else if (typeof _value === C_TYP_BOOLEAN) {
552
552
 
553
553
  // boolean値の色付け処理
554
- return (_value ? `<span style="color:#66ff66">&#x2714; true</span>` :
555
- `<span style="color:#ff9999">&#x274c; false</span>`);
554
+ return (_value ? `<span style="color:#66ff66">${g_emojiObj.checkMark} true</span>` :
555
+ `<span style="color:#ff9999">${g_emojiObj.crossMark} false</span>`);
556
556
 
557
557
  } else if (typeof _value === C_TYP_NUMBER) {
558
558
 
@@ -1206,6 +1206,7 @@ const reviseCssText = _str => {
1206
1206
  /*-----------------------------------------------------------*/
1207
1207
  /* 色・グラデーション設定 */
1208
1208
  /*-----------------------------------------------------------*/
1209
+ const g_ctx = document.createElement(`canvas`).getContext(`2d`);
1209
1210
 
1210
1211
  /**
1211
1212
  * 対象のカラーコードが明暗どちらかを判定 (true: 明色, false: 暗色)
@@ -1225,9 +1226,8 @@ const checkLightOrDark = _colorStr => {
1225
1226
  * @returns {string}
1226
1227
  */
1227
1228
  const colorNameToCode = _color => {
1228
- const cxt = document.createElement(`canvas`).getContext(`2d`);
1229
- cxt.fillStyle = _color;
1230
- return cxt.fillStyle;
1229
+ g_ctx.fillStyle = _color;
1230
+ return g_ctx.fillStyle;
1231
1231
  };
1232
1232
 
1233
1233
  /**
@@ -1365,11 +1365,24 @@ const getBasicFont = (_priorityFont = ``) =>
1365
1365
  * @returns {number}
1366
1366
  */
1367
1367
  const getStrWidth = (_str, _fontsize, _font) => {
1368
- const ctx = document.createElement(`canvas`).getContext(`2d`);
1369
- ctx.font = `${wUnit(_fontsize)} ${_font}`;
1370
- return ctx.measureText(unEscapeHtml(_str)).width;
1368
+ g_ctx.font = `${wUnit(_fontsize)} ${_font}`;
1369
+ return g_ctx.measureText(unEscapeHtml(_str)).width;
1371
1370
  };
1372
1371
 
1372
+ /**
1373
+ * Canvas上で使用する絵文字を取得
1374
+ * - HTMLのdiv要素に絵文字を設定することで、Canvas上で使用できるようにする
1375
+ * @param {string} _str
1376
+ * @returns {string}
1377
+ */
1378
+ const getEmojiForCanvas = _str => {
1379
+ const div = document.createElement(`div`);
1380
+ div.innerHTML = _str;
1381
+ const result = div.innerHTML;
1382
+ div.remove();
1383
+ return result;
1384
+ }
1385
+
1373
1386
  /**
1374
1387
  * 指定した横幅に合ったフォントサイズを取得
1375
1388
  * @param {string} _str
@@ -2560,10 +2573,21 @@ const initialControl = async () => {
2560
2573
 
2561
2574
  // 自動横幅拡張設定
2562
2575
  if (g_headerObj.autoSpread) {
2563
- const widthList = [g_sWidth, g_presetObj.autoMinWidth ?? g_keyObj.minWidth];
2564
- g_headerObj.keyLists.forEach(key => widthList.push(g_keyObj[`minWidth${key}`] ?? g_keyObj.minWidthDefault));
2576
+ g_sWidth = Math.max(g_sWidth, g_presetObj.autoMinWidth ?? g_keyObj.minWidth);
2577
+ g_headerObj.keyLists.forEach(key => {
2578
+ g_sWidth = Math.max(g_sWidth, g_keyObj[`minWidth${key}`] ?? g_keyObj.minWidthDefault);
2579
+
2580
+ // 別キーモード有効時は、別キーモード毎の横幅を拡張対象へ追加
2581
+ if (g_headerObj.transKeyUse) {
2582
+ for (let k = 1; hasVal(g_keyObj[`keyCtrl${key}_${k}`]); k++) {
2583
+ const anotherKey = g_keyObj[`transKey${key}_${k}`] ?? ``;
2584
+ if (anotherKey !== ``) {
2585
+ g_sWidth = Math.max(g_sWidth, g_keyObj[`minWidth${anotherKey}`] ?? g_keyObj.minWidthDefault);
2586
+ }
2587
+ }
2588
+ }
2589
+ });
2565
2590
 
2566
- g_sWidth = Math.max(...widthList);
2567
2591
  $id(`canvas-frame`).width = wUnit(g_sWidth);
2568
2592
  $id(`divRoot`).width = wUnit(g_sWidth);
2569
2593
  }
@@ -5067,10 +5091,10 @@ const titleInit = (_initFlg = false) => {
5067
5091
  createDivCss2Label(`lblComment`, ``, g_lblPosObj.lblComment_music),
5068
5092
 
5069
5093
  createDivCss2Label(`lblBgmVolume`, `BGM Volume`, g_lblPosObj.lblBgmVolume),
5070
- createCss2Button(`btnBgmMute`, g_stateObj.bgmMuteFlg ? `&#x1f507;` : `&#x1f50a;`, evt => {
5094
+ createCss2Button(`btnBgmMute`, g_stateObj.bgmMuteFlg ? g_emojiObj.muted : g_emojiObj.speaker, evt => {
5071
5095
  g_stateObj.bgmMuteFlg = !g_stateObj.bgmMuteFlg;
5072
5096
  g_stateObj.bgmMuteFlg ? pauseBGM() : playBGM(0);
5073
- evt.target.innerHTML = g_stateObj.bgmMuteFlg ? `&#x1f507;` : `&#x1f50a;`;
5097
+ evt.target.innerHTML = g_stateObj.bgmMuteFlg ? g_emojiObj.muted : g_emojiObj.speaker;
5074
5098
  }, g_lblPosObj.btnBgmMute, g_cssObj.button_Default),
5075
5099
  createCss2Button(`btnBgmVolume`, `${g_stateObj.bgmVolume}${g_lblNameObj.percent}`, () => setBGMVolume(),
5076
5100
  Object.assign({
@@ -5239,7 +5263,7 @@ const titleInit = (_initFlg = false) => {
5239
5263
  }), g_cssObj.button_Tweet),
5240
5264
 
5241
5265
  // セキュリティリンク
5242
- createCss2Button(`lnkComparison`, `&#x1f6e1;`, () => true,
5266
+ createCss2Button(`lnkComparison`, g_emojiObj.shield, () => true,
5243
5267
  Object.assign(g_lblPosObj.lnkComparison, {
5244
5268
  resetFunc: () => openLink(g_lblNameObj.securityUrl),
5245
5269
  }), g_cssObj.button_Tweet),
@@ -13994,7 +14018,8 @@ const resultInit = () => {
13994
14018
  { x: 280, dy: -15, hy: 0, siz: 20, color: `#999999`, align: C_ALIGN_CENTER });
13995
14019
  drawText(unEscapeHtml(mTitleForView[0]), { hy: 1 });
13996
14020
  drawText(unEscapeHtml(mTitleForView[1]), { hy: 2 });
13997
- drawText(`📝 ${unEscapeHtml(g_headerObj.tuning)} / 🎵 ${unEscapeHtml(artistName)}`, { hy: mTitleForView[1] !== `` ? 3 : 2, siz: 12 });
14021
+ drawText(`${getEmojiForCanvas(g_emojiObj.memo)} ${unEscapeHtml(g_headerObj.tuning)} / ${getEmojiForCanvas(g_emojiObj.musical)} ${unEscapeHtml(artistName)}`,
14022
+ { hy: mTitleForView[1] !== `` ? 3 : 2, siz: 12 });
13998
14023
  drawText(unEscapeHtml(difDataForImage), { hy: 4 });
13999
14024
 
14000
14025
  if (playStyleData.length > 60) {
@@ -14135,7 +14160,7 @@ const resultInit = () => {
14135
14160
  // リトライ
14136
14161
  resetCommonBtn(`btnRetry`, g_lblNameObj.b_retry, g_lblPosObj.btnRsRetry, loadMusic, g_cssObj.button_Reset),
14137
14162
 
14138
- createCss2Button(`btnCopyImage`, `📷`, () => true,
14163
+ createCss2Button(`btnCopyImage`, g_emojiObj.camera, () => true,
14139
14164
  Object.assign(g_lblPosObj.btnRsCopyImage, {
14140
14165
  resetFunc: () => copyResultImageData(g_msgInfoObj.I_0001),
14141
14166
  }), g_cssObj.button_Default_NoColor),
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2025/05/24 (v42.0.0)
8
+ * Revised : 2025/06/15 (v42.2.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -875,6 +875,18 @@ const g_escapeStr = {
875
875
  ]
876
876
  };
877
877
 
878
+ /** 絵文字管理用 */
879
+ const g_emojiObj = {
880
+ checkMark: `&#x2714;`, // チェックマーク (check mark)
881
+ crossMark: `&#x274c;`, // バツ (cross mark)
882
+ muted: `&#x1f507;`, // 無音のスピーカー (muted speaker)
883
+ speaker: `&#x1f50a;`, // 音量大のスピーカー (speaker high volume)
884
+ shield: `&#x1f6e1;`, // 盾 (shield)
885
+ memo: `&#x1f4dd;`, // メモ (memo)
886
+ musical: `&#x1f3b5;`, // 音符 (musical note)
887
+ camera: `&#x1f4f7;`, // カメラ (camera)
888
+ };
889
+
878
890
  /** 設定・オプション画面用共通 */
879
891
  const g_graphColorObj = {
880
892
  max: `#993333cc`,
@@ -3208,12 +3220,8 @@ const g_keyObj = {
3208
3220
  minWidth9B: 650,
3209
3221
  minWidth9i: 650,
3210
3222
  minWidth9d: 650,
3211
- minWidth9h: 650,
3212
- minWidth11: 650,
3213
- minWidth11L: 650,
3214
3223
  minWidth11i: 650,
3215
3224
  minWidth11j: 650,
3216
- minWidth12: 675,
3217
3225
  minWidth12i: 675,
3218
3226
  minWidth13: 650,
3219
3227
  minWidth16i: 650,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "42.1.1",
3
+ "version": "42.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {