danoniplus 37.6.1 → 37.7.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.
Files changed (2) hide show
  1. package/js/danoni_main.js +580 -351
  2. package/package.json +1 -1
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 : 2024/09/25
7
+ * Revised : 2024/10/06
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 37.6.1`;
12
- const g_revisedDate = `2024/09/25`;
11
+ const g_version = `Ver 37.7.0`;
12
+ const g_revisedDate = `2024/10/06`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -199,34 +199,37 @@ let g_canLoadDifInfoFlg = false;
199
199
  /**
200
200
  * div要素のstyleを取得
201
201
  * @param {string} _id
202
+ * @returns {CSSStyleDeclaration}
202
203
  */
203
204
  const $id = _id => document.getElementById(_id).style;
204
205
 
205
206
  /**
206
207
  * 複数のdiv子要素を親要素へ接続
207
- * @param {object} _baseObj
208
- * @param {...any} rest
208
+ * @param {Element} _baseObj
209
+ * @param {...any} [rest]
209
210
  */
210
211
  const multiAppend = (_baseObj, ...rest) => _baseObj.append(...rest);
211
212
 
212
213
  /**
213
214
  * 複数の属性をまとめて設定
214
- * @param {object} _baseObj
215
- * @param {...any} rest
215
+ * @param {Element} _baseObj
216
+ * @param {...any} [rest]
216
217
  */
217
218
  const setAttrs = (_baseObj, { ...rest } = {}) =>
218
219
  Object.keys(rest).forEach(property => _baseObj.setAttribute(property, rest[property]));
219
220
 
220
221
  /**
221
222
  * 属性値を数値に変換して取得
222
- * @param {object} _baseObj
223
+ * @param {Element} _baseObj
223
224
  * @param {string} _attrkey
225
+ * @returns {number}
224
226
  */
225
227
  const getNumAttr = (_baseObj, _attrkey) => parseFloat(_baseObj.getAttribute(_attrkey));
226
228
 
227
229
  /**
228
230
  * 文字列に埋め込まれた変数を展開
229
231
  * @param {string} _str
232
+ * @returns {string} 埋め込み後の変数
230
233
  */
231
234
  const convertStrToVal = _str => {
232
235
  const strs = _str.split(`}`).join(`{`).split(`{`);
@@ -241,6 +244,7 @@ const convertStrToVal = _str => {
241
244
  /**
242
245
  * 半角スペース、タブを文字列から除去
243
246
  * @param {string} _str
247
+ * @returns {string} 半角スペース、タブ除去後の文字列
244
248
  */
245
249
  const trimStr = _str => _str?.split(`\t`).join(``).replace(/^ +| +$/g, ``);
246
250
 
@@ -251,19 +255,24 @@ const trimStr = _str => _str?.split(`\t`).join(``).replace(/^ +| +$/g, ``);
251
255
  /**
252
256
  * 変数が存在するかどうかをチェック
253
257
  * @param {string} _data
254
- * @param {...any} strs
258
+ * @param {...any} [strs] 空とundefined以外で除外したい文字列
259
+ * @returns {boolean}
255
260
  */
256
261
  const hasVal = (_data, ...strs) => _data !== undefined && _data !== `` && (!strs || strs.every(str => _data !== str));
257
262
 
258
263
  /**
259
264
  * 変数が存在するかどうかをチェック(null無しを含む)
260
265
  * @param {string} _data
261
- * @param {...any} strs
266
+ * @param {...any} [strs]
267
+ * @returns {boolean}
262
268
  */
263
269
  const hasValN = (_data, ...strs) => hasVal(_data, ...strs) && _data !== null;
264
270
 
265
271
  /**
266
272
  * 文字列から他の型へ変換する処理群
273
+ * @param {string} _checkStr
274
+ * @param {string} _default
275
+ * @returns {number|boolean|string}
267
276
  */
268
277
  const g_convFunc = {
269
278
  float: (_checkStr, _default) => isNaN(parseFloat(_checkStr)) ? _default : parseFloat(_checkStr),
@@ -288,7 +297,8 @@ const g_convFunc = {
288
297
  * - 型に合わない場合は _default を返却するが、_default自体の型チェック・変換は行わない
289
298
  * @param {string} _checkStr
290
299
  * @param {string} _default
291
- * @param {string} _type
300
+ * @param {string} [_type='string']
301
+ * @returns
292
302
  */
293
303
  const setVal = (_checkStr, _default, _type = C_TYP_STRING) =>
294
304
  hasValN(_checkStr) ? g_convFunc[_type](_checkStr, _default) : _default;
@@ -296,34 +306,38 @@ const setVal = (_checkStr, _default, _type = C_TYP_STRING) =>
296
306
  /**
297
307
  * ブール値からON/OFFへ変換
298
308
  * @param {boolean} _condition
309
+ * @returns {string}
299
310
  */
300
311
  const boolToSwitch = _condition => _condition ? C_FLG_ON : C_FLG_OFF;
301
312
 
302
313
  /**
303
314
  * 単位付きの値を返却
304
315
  * @param {number} _val
305
- * @param {string} _unitName
306
- * @returns
316
+ * @param {string} [_unitName='px']
317
+ * @returns {string}
307
318
  */
308
319
  const wUnit = (_val, _unitName = `px`) => `${_val}${_unitName}`;
309
320
 
310
321
  /**
311
322
  * ブール値への変換
312
323
  * @param {string} _val
313
- * @param {boolean} _defaultVal
324
+ * @param {boolean} [_defaultVal=false]
325
+ * @returns {boolean}
314
326
  */
315
327
  const setBoolVal = (_val, _defaultVal = false) => hasValN(_val) ? g_convFunc.boolean(_val, _defaultVal) : _defaultVal;
316
328
 
317
329
  /**
318
330
  * 整数値への変換
319
331
  * @param {string} _val
320
- * @param {number} _defaultVal
332
+ * @param {number} [_defaultVal=0]
333
+ * @returns {number}
321
334
  */
322
335
  const setIntVal = (_val, _defaultVal = 0) => hasValN(_val) ? g_convFunc.number(_val, _defaultVal) : _defaultVal;
323
336
 
324
337
  /**
325
338
  * 先頭のみ大文字に変換(それ以降はそのまま)
326
339
  * @param {string} _str
340
+ * @returns {string}
327
341
  */
328
342
  const toCapitalize = _str => {
329
343
  if (!_str || typeof _str !== `string`) return _str;
@@ -333,37 +347,42 @@ const toCapitalize = _str => {
333
347
  /**
334
348
  * 0以上の数字に変換
335
349
  * @param {number} _num
336
- * @param {number} _init 0未満の場合に設定する値
350
+ * @param {number} [_init=0] 0未満の場合に設定する値
351
+ * @returns {number}
337
352
  */
338
353
  const roundZero = (_num, _init = 0) => _num < 0 ? _init : _num;
339
354
 
340
355
  /**
341
356
  * 配列から_targetに合致する配列位置を返す
342
357
  * 存在しない場合は0を返却
343
- * @param {array} _list
358
+ * @param {string[]} _list
344
359
  * @param {string} _target
360
+ * @returns {number}
345
361
  */
346
362
  const getCurrentNo = (_list, _target) => roundZero(_list.indexOf(_target));
347
363
 
348
364
  /**
349
365
  * 配列内に存在するかどうかをチェック
350
366
  * @param {string} _val
351
- * @param {array} _array
352
- * @param {number} _pos
367
+ * @param {string[]} _array
368
+ * @param {number} [_pos=0]
369
+ * @returns {boolean}
353
370
  */
354
371
  const hasValInArray = (_val, _array, _pos = 0) =>
355
372
  _array.findIndex(data => data[_pos] === _val) !== -1;
356
373
 
357
374
  /**
358
375
  * 配列が既定長以上かどうかをチェック
359
- * @param {array} _data
360
- * @param {number} _length
376
+ * @param {any[]} _data
377
+ * @param {number} [_length=1]
378
+ * @returns {boolean}
361
379
  */
362
380
  const hasArrayList = (_data, _length = 1) => _data?.length >= _length;
363
381
 
364
382
  /**
365
383
  * 改行コード区切りの配列展開
366
384
  * @param {string} _str
385
+ * @returns {string[]}
367
386
  */
368
387
  const splitLF = _str => _str?.split(`\r`).join(`\n`).split(`\n`);
369
388
 
@@ -371,7 +390,8 @@ const splitLF = _str => _str?.split(`\r`).join(`\n`).split(`\n`);
371
390
  * 改行コード区切りを本来の区切り文字に変換して配列展開
372
391
  * (改行区切りで間が空行だった場合は無効化)
373
392
  * @param {string} _str
374
- * @param {string} _delim
393
+ * @param {string} [_delim='$']
394
+ * @returns {string[]}
375
395
  */
376
396
  const splitLF2 = (_str, _delim = `$`) => splitLF(_str)?.filter(val => val !== ``).join(_delim).split(_delim);
377
397
 
@@ -379,48 +399,55 @@ const splitLF2 = (_str, _delim = `$`) => splitLF(_str)?.filter(val => val !== ``
379
399
  * カンマ区切り処理
380
400
  * (ただし、カンマ+半角スペースの組の場合は区切り文字と見做さない)
381
401
  * @param {string} _str
402
+ * @returns {string[]}
382
403
  */
383
404
  const splitComma = _str => _str?.split(`, `).join(`*comma* `).split(`,`);
384
405
 
385
406
  /**
386
407
  * 重複を排除した配列の生成
387
- * @param {array} _array1
388
- * @param {...any} _arrays
408
+ * @param {any[]} _array1
409
+ * @param {...any} [_arrays]
410
+ * @returns {any[]}
389
411
  */
390
412
  const makeDedupliArray = (_array1, ..._arrays) =>
391
413
  Array.from((new Set([..._array1, ..._arrays.flat()])).values()).filter(val => val !== undefined);
392
414
 
393
415
  /**
394
416
  * 二次元配列のコピー
395
- * @param {array2} _array2d
417
+ * @param {any[][]} _array2d
418
+ * @returns {any[][]}
396
419
  */
397
420
  const copyArray2d = _array2d => structuredClone(_array2d);
398
421
 
399
422
  /**
400
423
  * 配列データを合計
401
- * @param {array} _array
424
+ * @param {number[]} _array
425
+ * @returns {number}
402
426
  */
403
427
  const sumData = _array => _array.reduce((p, x) => p + x);
404
428
 
405
429
  /**
406
430
  * 特定の値で埋めた配列を作成
407
431
  * @param {number} _length
408
- * @param {any} _val
432
+ * @param {string|number} [_val=0]
433
+ * @returns {string[]|number[]}
409
434
  */
410
435
  const fillArray = (_length, _val = 0) => [...Array(_length)].fill(_val);
411
436
 
412
437
  /**
413
438
  * 最小配列長の配列を作成
414
- * @param {array} _array
439
+ * @param {any[]} _array
415
440
  * @param {number} _minLength
416
441
  * @param {number} _defaultVal
442
+ * @returns {string[]|number[]}
417
443
  */
418
444
  const makeBaseArray = (_array = [], _minLength, _defaultVal) => padArray(_array, fillArray(_minLength, _defaultVal));
419
445
 
420
446
  /**
421
447
  * ベースとする配列に対して別の配列で上書き
422
- * @param {array} _array
423
- * @param {array} _baseArray ベースとする配列
448
+ * @param {string[]|number[]} _array
449
+ * @param {string[]|number[]} _baseArray ベースとする配列
450
+ * @returns {string[]|number[]}
424
451
  */
425
452
  const padArray = (_array, _baseArray) => {
426
453
  _array?.filter(val => hasVal(val)).forEach((val, j) => _baseArray[j] = val);
@@ -433,8 +460,9 @@ const padArray = (_array, _baseArray) => {
433
460
  * ex. 上位3番目 (_num = 3) の場合
434
461
  * [1, 3, 2, 4, 6, 4, 5] -> [[4], [6], [3, 5]]
435
462
  * [9, 6, 9, 9, 8, 7, 5] -> [[0, 2, 3]]
436
- * @param {array} _array
437
- * @param {number} _num
463
+ * @param {number[]} _array
464
+ * @param {number} [_num=1]
465
+ * @returns {number[][]}
438
466
  */
439
467
  const getMaxValIdxs = (_array, _num = 1) => {
440
468
  let baseArray = _array.concat();
@@ -461,20 +489,29 @@ const getMaxValIdxs = (_array, _num = 1) => {
461
489
  /**
462
490
  * 部分一致検索(リストのいずれかに合致、大小文字問わず)
463
491
  * @param {string} _str 検索文字
464
- * @param {array} _list 検索リスト (英字は小文字にする必要あり)
465
- * @param {string} object.prefix 前方一致条件 (前方一致時は ^)
466
- * @param {string} object.suffix 後方一致条件 (後方一致時は $)
492
+ * @param {string[]} _list 検索リスト (英字は小文字にする必要あり)
493
+ * @param {string} [object.prefix=''] 前方一致条件 (前方一致時は ^)
494
+ * @param {string} [object.suffix=''] 後方一致条件 (後方一致時は $)
495
+ * @returns {boolean}
467
496
  */
468
497
  const listMatching = (_str, _list, { prefix = ``, suffix = `` } = {}) =>
469
498
  _list.findIndex(value => _str.toLowerCase().match(new RegExp(String.raw`${prefix}${value}${suffix}`, 'i'))) !== -1;
470
499
 
500
+ /**
501
+ * 前方・後方一致検索の組み合わせ(あいまい検索)
502
+ * @param {string} _str 検索文字
503
+ * @param {string[]} _headerList 前方一致させるリスト
504
+ * @param {string[]} _footerList 後方一致させるリスト
505
+ * @returns {boolean}
506
+ */
471
507
  const fuzzyListMatching = (_str, _headerList, _footerList) =>
472
508
  listMatching(_str, _headerList, { prefix: `^` }) || listMatching(_str, _footerList, { suffix: `$` });
473
509
 
474
510
  /**
475
511
  * 文字列の置換
476
512
  * @param {string} _str
477
- * @param {array} _pairs
513
+ * @param {string[][]} _pairs 置換ペア配列。[[置換前A,置換後A],[置換前B,置換後B]]の形式で指定
514
+ * @returns {string} 置換後文字列
478
515
  */
479
516
  const replaceStr = (_str, _pairs) => {
480
517
  let tmpStr = _str || ``;
@@ -485,31 +522,36 @@ const replaceStr = (_str, _pairs) => {
485
522
  /**
486
523
  * 文字列のエスケープ処理
487
524
  * @param {string} _str
488
- * @param {array} _escapeList
525
+ * @param {string[][]} [_escapeList=g_escapeStr.escape]
526
+ * @returns {string}
489
527
  */
490
528
  const escapeHtml = (_str, _escapeList = g_escapeStr.escape) => escapeHtmlForEnabledTag(replaceStr(_str, _escapeList));
491
529
 
492
530
  /**
493
531
  * 文字列のエスケープ処理(htmlタグ許容版)
494
532
  * @param {string} _str
533
+ * @returns {string}
495
534
  */
496
535
  const escapeHtmlForEnabledTag = _str => replaceStr(_str, g_escapeStr.escapeTag);
497
536
 
498
537
  /**
499
538
  * HTML Entityから元の文字に戻す
500
539
  * @param {string} _str
540
+ * @returns {string}
501
541
  */
502
542
  const unEscapeEmoji = _str => _str?.replace(/&#(.*?);/g, (_, p1) => String.fromCodePoint(`0${p1}`));
503
543
 
504
544
  /**
505
545
  * エスケープ文字を元の文字に戻す
506
546
  * @param {string} _str
547
+ * @returns {string}
507
548
  */
508
549
  const unEscapeHtml = _str => unEscapeEmoji(replaceStr(_str, g_escapeStr.unEscapeTag));
509
550
 
510
551
  /**
511
552
  * 配列の中身を全てエスケープ処理
512
- * @param {array} _array
553
+ * @param {string[]} _array
554
+ * @returns {string[]}
513
555
  */
514
556
  const escapeHtmlForArray = _array => _array.map(str => escapeHtml(str));
515
557
 
@@ -518,6 +560,7 @@ const escapeHtmlForArray = _array => _array.map(str => escapeHtml(str));
518
560
  * @param {number} _basePos
519
561
  * @param {number} _num
520
562
  * @param {number} _length
563
+ * @returns {number}
521
564
  */
522
565
  const nextPos = (_basePos, _num, _length) => (_basePos + _num + _length) % _length;
523
566
 
@@ -527,7 +570,8 @@ const nextPos = (_basePos, _num, _length) => (_basePos + _num + _length) % _leng
527
570
 
528
571
  /**
529
572
  * 特定キーコードを置換する処理
530
- * @param {object} _evt
573
+ * @param {KeyboardEvent} _evt
574
+ * @returns {string}
531
575
  */
532
576
  const transCode = _evt => {
533
577
  const evtCode = _evt.code;
@@ -540,20 +584,21 @@ const transCode = _evt => {
540
584
  /**
541
585
  * 特定キーをブロックする処理
542
586
  * @param {string} _setCode
587
+ * @returns {boolean}
543
588
  */
544
589
  const blockCode = _setCode => !C_BLOCK_KEYS.includes(_setCode);
545
590
 
546
-
547
591
  /*-----------------------------------------------------------*/
548
592
  /* ショートカット制御 */
549
593
  /*-----------------------------------------------------------*/
550
594
 
551
595
  /**
552
596
  * キーを押したときの動作(汎用)
553
- * @param {object} _evt
597
+ * @param {KeyboardEvent} _evt
554
598
  * @param {string} _displayName
555
599
  * @param {function} _func
556
600
  * @param {boolean} _dfEvtFlg
601
+ * @returns {boolean}
557
602
  */
558
603
  const commonKeyDown = (_evt, _displayName, _func = _code => { }, _dfEvtFlg) => {
559
604
  if (!_dfEvtFlg) {
@@ -586,7 +631,7 @@ const commonKeyDown = (_evt, _displayName, _func = _code => { }, _dfEvtFlg) => {
586
631
 
587
632
  /**
588
633
  * キーを離したときの動作(汎用)
589
- * @param {object} _evt
634
+ * @param {KeyboardEvent} _evt
590
635
  */
591
636
  const commonKeyUp = _evt => {
592
637
  g_inputKeyBuffer[g_kCdNameObj.metaLKey] = false;
@@ -598,13 +643,13 @@ const commonKeyUp = _evt => {
598
643
  * ショートカットキー表示
599
644
  * @param {object} _obj
600
645
  * @param {string} _settingLabel
601
- * @param {string} object.displayName
602
- * @param {string} object.dfLabel ショートカットキーの表示名
603
- * @param {string} object.targetLabel ショートカットキーを押したときのボタン名
604
- * @param {number} object.x
605
- * @param {number} object.y
606
- * @param {number} object.w
607
- * @param {number} object.siz
646
+ * @param {string} [object.displayName='option']
647
+ * @param {string} [object.dfLabel=''] ショートカットキーの表示名
648
+ * @param {string} [object.targetLabel='lnk${_settingLabel}R'] ショートカットキーを押したときのボタン名
649
+ * @param {number} [object.x=g_scViewObj.x]
650
+ * @param {number} [object.y=g_scViewObj.y]
651
+ * @param {number} [object.w=g_scViewObj.w]
652
+ * @param {number} [object.siz=g_scViewObj.siz]
608
653
  */
609
654
  const createScText = (_obj, _settingLabel, { displayName = `option`, dfLabel = ``, targetLabel = `lnk${_settingLabel}R`,
610
655
  x = g_scViewObj.x, y = g_scViewObj.y, w = g_scViewObj.w, siz = g_scViewObj.siz } = {}) => {
@@ -636,8 +681,8 @@ const createScTextCommon = _displayName =>
636
681
  * ショートカットキー有効化
637
682
  * @param {string} _displayName
638
683
  * @param {function} _func
639
- * @param {boolean} object.displayFlg
640
- * @param {boolean} object.dfEvtFlg
684
+ * @param {boolean} [object.displayFlg=true]
685
+ * @param {boolean} [object.dfEvtFlg=false]
641
686
  */
642
687
  const setShortcutEvent = (_displayName, _func = () => true, { displayFlg = true, dfEvtFlg = false } = {}) => {
643
688
  if (displayFlg) {
@@ -676,6 +721,7 @@ const openLink = _url => {
676
721
  /**
677
722
  * URLのフルパスを取得
678
723
  * @param {string} _url
724
+ * @returns {string}
679
725
  */
680
726
  const getFullPath = _url => {
681
727
  const link = document.createElement(`a`);
@@ -687,8 +733,8 @@ const getFullPath = _url => {
687
733
  * プリロードするファイルの設定
688
734
  * @param {string} _as
689
735
  * @param {string} _href
690
- * @param {string} _type
691
- * @param {string} _crossOrigin
736
+ * @param {string} [_type='']
737
+ * @param {string} [_crossOrigin='anonymous']
692
738
  */
693
739
  const preloadFile = (_as, _href, _type = ``, _crossOrigin = `anonymous`) => {
694
740
 
@@ -716,8 +762,9 @@ const preloadFile = (_as, _href, _type = ``, _crossOrigin = `anonymous`) => {
716
762
  * 外部jsファイルの読込 (Promise)
717
763
  * 読込可否を g_loadObj[ファイル名] で管理 (true: 読込成功, false: 読込失敗)
718
764
  * @param {string} _url
719
- * @param {boolean} _requiredFlg (default : true / 読込必須)
720
- * @param {string} _charset (default : UTF-8)
765
+ * @param {boolean} [_requiredFlg=true] 読込必須フラグ
766
+ * @param {string} [_charset='UTF-8']
767
+ * @returns {Promise<any>}
721
768
  */
722
769
  const loadScript2 = (_url, _requiredFlg = true, _charset = `UTF-8`) => {
723
770
  const baseUrl = _url.split(`?`)[0];
@@ -748,7 +795,8 @@ const loadScript2 = (_url, _requiredFlg = true, _charset = `UTF-8`) => {
748
795
  * CSSファイルの読み込み (Promise)
749
796
  * デフォルトは danoni_skin_default.css を読み込む
750
797
  * @param {url} _href
751
- * @param {string} object.crossOrigin
798
+ * @param {string} [object.crossOrigin='anonymous']
799
+ * @returns {Promise<any>}
752
800
  */
753
801
  const importCssFile2 = (_href, { crossOrigin = `anonymous` } = {}) => {
754
802
  const baseUrl = _href.split(`?`)[0];
@@ -775,8 +823,9 @@ const importCssFile2 = (_href, { crossOrigin = `anonymous` } = {}) => {
775
823
 
776
824
  /**
777
825
  * js, cssファイルの連続読込 (async function)
778
- * @param {array} _fileData
826
+ * @param {string[]} _fileData
779
827
  * @param {string} _loadType
828
+ * @returns {Promise<void>}
780
829
  */
781
830
  const loadMultipleFiles2 = async (_fileData, _loadType) => {
782
831
  await Promise.all(_fileData.map(async filePart => {
@@ -797,9 +846,9 @@ const loadMultipleFiles2 = async (_fileData, _loadType) => {
797
846
 
798
847
  /**
799
848
  * 与えられたパスより、キーワードとディレクトリに分割
800
- * 返却値:[ファイルキーワード, ルートディレクトリ]
801
849
  * @param {string} _fileName
802
- * @param {string} _directory
850
+ * @param {string} [_directory='']
851
+ * @returns {string[]} [ファイルキーワード, ルートディレクトリ]
803
852
  */
804
853
  const getFilePath = (_fileName, _directory = ``) => {
805
854
  let fullPath;
@@ -815,9 +864,9 @@ const getFilePath = (_fileName, _directory = ``) => {
815
864
  /**
816
865
  * 画像ファイルの存在チェック後、プリロードする処理
817
866
  * @param {string} _imgPath
818
- * @param {string} object.directory
819
- * @param {boolean} object.syncBackPath
820
- * @returns
867
+ * @param {string} [object.directory='']
868
+ * @param {boolean} [object.syncBackPath=true]
869
+ * @returns {string}
821
870
  */
822
871
  const preloadImgFile = (_imgPath, { directory = ``, syncBackPath = true } = {}) => {
823
872
 
@@ -835,7 +884,7 @@ const preloadImgFile = (_imgPath, { directory = ``, syncBackPath = true } = {})
835
884
  /**
836
885
  * 画像パス部分の取得
837
886
  * @param {string} _str
838
- * @returns
887
+ * @returns {string}
839
888
  */
840
889
  const getImageUrlPath = _str => {
841
890
  const matches = _str?.match(/url\("([^"]*)"\)/);
@@ -844,7 +893,8 @@ const getImageUrlPath = _str => {
844
893
 
845
894
  /**
846
895
  * カレントディレクトリを含む文字列を置換し、変更後の文字列を作成
847
- * @param {string} _str
896
+ * @param {string} _str
897
+ * @returns {string}
848
898
  */
849
899
  const reviseCssText = _str => {
850
900
  if (getImageUrlPath(_str) !== ``) {
@@ -862,6 +912,7 @@ const reviseCssText = _str => {
862
912
  /**
863
913
  * 対象のカラーコードが明暗どちらかを判定 (true: 明色, false: 暗色)
864
914
  * @param {string} _colorStr
915
+ * @returns {boolean}
865
916
  */
866
917
  const checkLightOrDark = _colorStr => {
867
918
  const r = parseInt(_colorStr.substring(1, 3), 16);
@@ -873,6 +924,7 @@ const checkLightOrDark = _colorStr => {
873
924
  /**
874
925
  * 色名をカラーコードに変換
875
926
  * @param {string} _color
927
+ * @returns {string}
876
928
  */
877
929
  const colorNameToCode = _color => {
878
930
  const cxt = document.createElement(`canvas`).getContext(`2d`);
@@ -883,24 +935,28 @@ const colorNameToCode = _color => {
883
935
  /**
884
936
  * 10進 -> 16進数変換 (カラーコード形式になるよう0埋め)
885
937
  * @param {number} _num
938
+ * @returns {string}
886
939
  */
887
940
  const byteToHex = _num => _num.toString(16).padStart(2, '0');
888
941
 
889
942
  /**
890
943
  * カラーコードかどうかを判定 (簡易版)
891
944
  * @param {string} _str
945
+ * @returns {boolean}
892
946
  */
893
947
  const isColorCd = _str => _str.substring(0, 1) === `#`;
894
948
 
895
949
  /**
896
950
  * CSSの位置表記系かどうかをチェック
897
951
  * @param {string} _str
952
+ * @returns {boolean}
898
953
  */
899
954
  const hasAnglePointInfo = _str => fuzzyListMatching(_str, g_checkStr.cssHeader, g_checkStr.cssFooter);
900
955
 
901
956
  /**
902
957
  * 色名をカラーコードへ変換 (元々カラーコードの場合は除外)
903
958
  * @param {string} _color 色名
959
+ * @returns {string}
904
960
  */
905
961
  const colorToHex = (_color) => {
906
962
 
@@ -922,16 +978,18 @@ const colorToHex = (_color) => {
922
978
  * カラーコードの前パディング (旧Option Editor対応)
923
979
  * @param {boolean} _useFlg
924
980
  * @param {string} _colorStr
981
+ * @returns {string}
925
982
  */
926
983
  const colorCdPadding = (_useFlg, _colorStr) => _useFlg ? `#${_colorStr.slice(1).padStart(6, `0`)}` : _colorStr;
927
984
 
928
985
  /**
929
986
  * グラデーション用のカラーフォーマットを作成
930
987
  * @param {string} _colorStr
931
- * @param {array} object._defaultColorgrd
932
- * @param {boolean} object._colorCdPaddingUse
933
- * @param {string} object._objType (normal: 汎用, titleMusic: タイトル曲名, titleArrow: タイトル矢印)
934
- * @param {boolean} object._shadowFlg
988
+ * @param {string[]} [object._defaultColorgrd=g_headerObj.defaultColorgrd]
989
+ * @param {boolean} [object._colorCdPaddingUse=false]
990
+ * @param {string} [object._objType='normal'] (normal: 汎用, titleMusic: タイトル曲名, titleArrow: タイトル矢印)
991
+ * @param {boolean} [object._shadowFlg=false]
992
+ * @returns {string}
935
993
  */
936
994
  const makeColorGradation = (_colorStr, { _defaultColorgrd = g_headerObj.defaultColorgrd,
937
995
  _colorCdPaddingUse = false, _objType = `normal`, _shadowFlg = false } = {}) => {
@@ -994,8 +1052,9 @@ const makeColorGradation = (_colorStr, { _defaultColorgrd = g_headerObj.defaultC
994
1052
  /*-----------------------------------------------------------*/
995
1053
 
996
1054
  /**
997
- * 画面共通のフォント設定
998
- * @param {string} _priorityFont
1055
+ * 画面共通のフォント設定 (font-family設定を作成)
1056
+ * @param {string} [_priorityFont=''] 優先させるフォント名
1057
+ * @returns {string}
999
1058
  */
1000
1059
  const getBasicFont = (_priorityFont = ``) =>
1001
1060
  [_priorityFont, g_headerObj.customFont, C_LBL_BASICFONT].filter(value => value !== ``).join(`,`);
@@ -1005,6 +1064,7 @@ const getBasicFont = (_priorityFont = ``) =>
1005
1064
  * @param {string} _str
1006
1065
  * @param {number} _fontsize
1007
1066
  * @param {string} _font
1067
+ * @returns {number}
1008
1068
  */
1009
1069
  const getStrWidth = (_str, _fontsize, _font) => {
1010
1070
  const ctx = document.createElement(`canvas`).getContext(`2d`);
@@ -1019,6 +1079,7 @@ const getStrWidth = (_str, _fontsize, _font) => {
1019
1079
  * @param {string} _font
1020
1080
  * @param {number} _maxFontsize
1021
1081
  * @param {number} _minFontsize
1082
+ * @returns {number}
1022
1083
  */
1023
1084
  const getFontSize = (_str, _maxWidth, _font = getBasicFont(), _maxFontsize = 64, _minFontsize = 5) => {
1024
1085
  for (let siz = _maxFontsize; siz >= _minFontsize; siz--) {
@@ -1033,8 +1094,9 @@ const getFontSize = (_str, _maxWidth, _font = getBasicFont(), _maxFontsize = 64,
1033
1094
  * 補足説明部分のラベル作成
1034
1095
  * @param {string} _id
1035
1096
  * @param {string} _str
1036
- * @param {string} object.altId
1037
- * @param {number} object.siz
1097
+ * @param {string} [object.altId=_id]
1098
+ * @param {number} [object.siz=g_limitObj.mainSiz]
1099
+ * @returns {HTMLDivElement}
1038
1100
  */
1039
1101
  const createDescDiv = (_id, _str, { altId = _id, siz = g_limitObj.mainSiz } = {}) =>
1040
1102
  createDivCss2Label(_id, _str, Object.assign(g_lblPosObj[altId], {
@@ -1046,15 +1108,15 @@ const createDescDiv = (_id, _str, { altId = _id, siz = g_limitObj.mainSiz } = {}
1046
1108
  /*-----------------------------------------------------------*/
1047
1109
 
1048
1110
  /**
1049
- * 図形の描画
1050
- * - div子要素の作成。呼び出しただけでは使用できないので、親divよりappendChildすること。
1051
- * - 詳細は @see {@link createButton} も参照のこと。
1111
+ * 図形の描画 (div要素)
1112
+ * - divに対してこの関数の返却値に対してappendすることで描画される
1052
1113
  * @param {string} _id
1053
1114
  * @param {number} _x
1054
1115
  * @param {number} _y
1055
1116
  * @param {number} _width
1056
1117
  * @param {number} _height
1057
- * @param {array} _classes
1118
+ * @param {string[]} _classes
1119
+ * @returns {HTMLDivElement}
1058
1120
  */
1059
1121
  const createDiv = (_id, _x, _y, _width, _height, _classes = []) => {
1060
1122
  const div = document.createElement(`div`);
@@ -1087,14 +1149,15 @@ const setUserSelect = (_style, _value = C_DIS_NONE) => {
1087
1149
  * 子div要素のラベル文字作成 (CSS版・拡張属性対応)
1088
1150
  * @param {string} _id
1089
1151
  * @param {string} _text
1090
- * @param {number} object.x
1091
- * @param {number} object.y
1092
- * @param {number} object.w
1093
- * @param {number} object.h
1094
- * @param {number} object.siz
1095
- * @param {number} object.align
1096
- * @param {...any} object.rest
1152
+ * @param {number} [object.x=0]
1153
+ * @param {number} [object.y=0]
1154
+ * @param {number} [object.w=g_limitObj.setLblWidth]
1155
+ * @param {number} [object.h=g_limitObj.setLblHeight]
1156
+ * @param {number} [object.siz=g_limitObj.setLblSiz]
1157
+ * @param {number} [object.align='center']
1158
+ * @param {...any} [object.rest]
1097
1159
  * @param {...any} _classes
1160
+ * @returns {HTMLDivElement}
1098
1161
  */
1099
1162
  const createDivCss2Label = (_id, _text, { x = 0, y = 0, w = g_limitObj.setLblWidth, h = g_limitObj.setLblHeight,
1100
1163
  siz = g_limitObj.setLblSiz, align = C_ALIGN_CENTER, ...rest } = {}, ..._classes) => {
@@ -1118,6 +1181,7 @@ const createDivCss2Label = (_id, _text, { x = 0, y = 0, w = g_limitObj.setLblWid
1118
1181
  * @param {number} _y
1119
1182
  * @param {number} _width
1120
1183
  * @param {number} _height
1184
+ * @returns {HTMLDivElement}
1121
1185
  */
1122
1186
  const createImg = (_id, _imgPath, _x, _y, _width, _height) => {
1123
1187
  const div = createDiv(_id, _x, _y, _width, _height);
@@ -1131,8 +1195,9 @@ const createImg = (_id, _imgPath, _x, _y, _width, _height) => {
1131
1195
  * @param {string} _parentObj
1132
1196
  * @param {string} _id
1133
1197
  * @param {function} _func
1134
- * @param {number} object.x
1135
- * @param {number} object.y
1198
+ * @param {number} [object.x=0]
1199
+ * @param {number} [object.y=0]
1200
+ * @returns {HTMLInputElement}
1136
1201
  */
1137
1202
  const createColorPicker = (_parentObj, _id, _func, { x = 0, y = 0 } = {}) => {
1138
1203
  const picker = document.createElement(`input`);
@@ -1149,15 +1214,15 @@ const createColorPicker = (_parentObj, _id, _func, { x = 0, y = 0 } = {}) => {
1149
1214
  /**
1150
1215
  * 色付きオブジェクトの作成 (拡張属性対応)
1151
1216
  * @param {string} _id
1152
- * @param {number} object.x
1153
- * @param {number} object.y
1154
- * @param {number} object.w
1155
- * @param {number} object.h
1156
- * @param {number} object.color
1157
- * @param {string} object.rotate
1158
- * @param {string} object.styleName
1159
- * @param {...any} object.rest
1217
+ * @param {number} [object.x=0]
1218
+ * @param {number} [object.y=0]
1219
+ * @param {number} [object.w=C_ARW_WIDTH]
1220
+ * @param {number} [object.h=C_ARW_WIDTH]
1221
+ * @param {string} [object.rotate='']
1222
+ * @param {string} [object.styleName='']
1223
+ * @param {...any} [object.rest]
1160
1224
  * @param {...any} _classes
1225
+ * @returns {HTMLDivElement}
1161
1226
  */
1162
1227
  const createColorObject2 = (_id,
1163
1228
  { x = 0, y = 0, w = C_ARW_WIDTH, h = C_ARW_WIDTH, rotate = ``, styleName = ``, ...rest } = {}, ..._classes) => {
@@ -1189,15 +1254,16 @@ const createColorObject2 = (_id,
1189
1254
  /**
1190
1255
  * 空スプライト(ムービークリップ相当)の作成
1191
1256
  * - 作成済みの場合はすでに作成済のスプライトを返却する
1192
- * @param {object} _parentObj 親スプライト
1257
+ * @param {HTMLDivElement} _parentObj 親スプライト
1193
1258
  * @param {string} _newObjId 作成する子スプライト名
1194
- * @param {number} object.x
1195
- * @param {number} object.y
1196
- * @param {number} object.w
1197
- * @param {number} object.h
1198
- * @param {string} object.title
1199
- * @param {...any} object.rest
1259
+ * @param {number} [object.x=0]
1260
+ * @param {number} [object.y=0]
1261
+ * @param {number} [object.w=g_sWidth]
1262
+ * @param {number} [object.h=g_sHeight]
1263
+ * @param {string} [object.title]
1264
+ * @param {...any} [object.rest]
1200
1265
  * @param {...any} _classes
1266
+ * @returns {HTMLDivElement}
1201
1267
  */
1202
1268
  const createEmptySprite = (_parentObj, _newObjId, { x = 0, y = 0, w = g_sWidth, h = g_sHeight, title = ``, ...rest } = {}, ..._classes) => {
1203
1269
  if (document.getElementById(_newObjId) !== null) {
@@ -1217,8 +1283,9 @@ const createEmptySprite = (_parentObj, _newObjId, { x = 0, y = 0, w = g_sWidth,
1217
1283
  /**
1218
1284
  * 階層スプライト(全体)の作成
1219
1285
  * @param {string} _baseName
1220
- * @param {number} _num
1221
- * @param {number} object.x
1286
+ * @param {number} _num 階層数
1287
+ * @param {number} [object.x=0]
1288
+ * @returns {HTMLDivElement}
1222
1289
  */
1223
1290
  const createMultipleSprite = (_baseName, _num, { x = 0 } = {}) => {
1224
1291
  const sprite = createEmptySprite(divRoot, _baseName);
@@ -1240,6 +1307,14 @@ const g_handler = (() => {
1240
1307
  let key = 0;
1241
1308
 
1242
1309
  return {
1310
+ /**
1311
+ * イベントリスナーへの追加
1312
+ * @param {EventTarget} _target
1313
+ * @param {string} _type
1314
+ * @param {EventListenerOrEventListenerObject} _listener
1315
+ * @param {boolean} [_capture=false]
1316
+ * @returns {number}
1317
+ */
1243
1318
  addListener: (_target, _type, _listener, _capture = false) => {
1244
1319
  _target.addEventListener(_type, _listener, _capture);
1245
1320
  events[key] = {
@@ -1250,6 +1325,10 @@ const g_handler = (() => {
1250
1325
  };
1251
1326
  return key++;
1252
1327
  },
1328
+ /**
1329
+ * イベントリスナーの削除
1330
+ * @param {number} key
1331
+ */
1253
1332
  removeListener: key => {
1254
1333
  if (key in events) {
1255
1334
  const e = events[key];
@@ -1290,18 +1369,18 @@ const deleteDiv = (_parentId, _idName) => {
1290
1369
  * @param {string} _id
1291
1370
  * @param {string} _text
1292
1371
  * @param {function} _func
1293
- * @param {number} object.x
1294
- * @param {number} object.y
1295
- * @param {number} object.w
1296
- * @param {number} object.h
1297
- * @param {number} object.siz
1298
- * @param {string} object.align
1299
- * @param {string} object.title ボタンオンマウス時のコメント
1300
- * @param {string} object.groupName 画面名 (g_btnWaitFrameで定義しているプロパティ名を指定)
1301
- * @param {boolean} object.initDisabledFlg ボタン有効化までの時間を設けるかどうか
1302
- * @param {function} object.resetFunc カスタム処理後に実行する処理
1303
- * @param {function} object.cxtFunc 右クリック時に実行する処理
1304
- * @param {...any} object.rest
1372
+ * @param {number} [object.x]
1373
+ * @param {number} [object.y]
1374
+ * @param {number} [object.w=g_btnWidth() / 3]
1375
+ * @param {number} [object.h=g_limitObj.btnHeight]
1376
+ * @param {number} [object.siz=g_limitObj.btnSiz]
1377
+ * @param {string} [object.align='center']
1378
+ * @param {string} [object.title] ボタンオンマウス時のコメント
1379
+ * @param {string} [object.groupName] 画面名 (g_btnWaitFrameで定義しているプロパティ名を指定)
1380
+ * @param {boolean} [object.initDisabledFlg=true] ボタン有効化までの時間を設けるかどうか
1381
+ * @param {function} [object.resetFunc] カスタム処理後に実行する処理
1382
+ * @param {function} [object.cxtFunc] 右クリック時に実行する処理
1383
+ * @param {...any} [object.rest]
1305
1384
  * @param {...any} _classes
1306
1385
  */
1307
1386
  const createCss2Button = (_id, _text, _func = () => true, {
@@ -1373,13 +1452,13 @@ const createCss2Button = (_id, _text, _func = () => true, {
1373
1452
  /**
1374
1453
  * オブジェクトのスタイル一括変更
1375
1454
  * @param {string} _id
1376
- * @param {number} object.x
1377
- * @param {number} object.y
1378
- * @param {number} object.w
1379
- * @param {number} object.h
1380
- * @param {string} object.align
1381
- * @param {string} object.title
1382
- * @param {...any} object.rest
1455
+ * @param {number} [object.x]
1456
+ * @param {number} [object.y]
1457
+ * @param {number} [object.w]
1458
+ * @param {number} [object.h]
1459
+ * @param {string} [object.align]
1460
+ * @param {string} [object.title]
1461
+ * @param {...any} [object.rest]
1383
1462
  */
1384
1463
  const changeStyle = (_id, { x, y, w, h, siz, align, title, ...rest } = {}) => {
1385
1464
  const div = document.getElementById(_id);
@@ -1410,7 +1489,7 @@ const changeStyle = (_id, { x, y, w, h, siz, align, title, ...rest } = {}) => {
1410
1489
  * @param {string} _titlename
1411
1490
  * @param {number} _x
1412
1491
  * @param {number} _y
1413
- * @param {...any} _classes
1492
+ * @param {...any} [_classes]
1414
1493
  */
1415
1494
  const getTitleDivLabel = (_id, _titlename, _x, _y, ..._classes) =>
1416
1495
  createDivCss2Label(_id, _titlename, { x: _x, y: _y, w: g_sWidth, h: 50, siz: g_limitObj.btnSiz }, ..._classes);
@@ -1429,9 +1508,9 @@ const resetKeyControl = () => {
1429
1508
 
1430
1509
  /**
1431
1510
  * Canvasのベース背景を作成
1432
- * @param {object} _ctx
1433
- * @param {number} object.w
1434
- * @param {number} object.h
1511
+ * @param {CanvasRenderingContext2D} _ctx
1512
+ * @param {number} [object.w=g_sWidth]
1513
+ * @param {number} [object.h=g_sHeight]
1435
1514
  */
1436
1515
  const makeBgCanvas = (_ctx, { w = g_sWidth, h = g_sHeight } = {}) => {
1437
1516
  const grd = _ctx.createLinearGradient(0, 0, 0, h);
@@ -1446,8 +1525,8 @@ const makeBgCanvas = (_ctx, { w = g_sWidth, h = g_sHeight } = {}) => {
1446
1525
  * - divオブジェクト(ボタンなど)はdivRoot配下で管理しているため、子要素のみを全削除している。
1447
1526
  * - dicRoot自体を削除しないよう注意すること。
1448
1527
  * - 再描画時に共通で表示する箇所はここで指定している。
1449
- * @param {boolean} _redrawFlg 画面横幅を再定義し、Canvas背景を再描画するかどうか
1450
- * @param {string} _customDisplayName 画面名(メイン画面: 'Main', それ以外: 空)
1528
+ * @param {boolean} [_redrawFlg=false] 画面横幅を再定義し、Canvas背景を再描画するかどうか
1529
+ * @param {string} [_customDisplayName=''] 画面名(メイン画面: 'Main', それ以外: 空)
1451
1530
  */
1452
1531
  const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
1453
1532
  resetKeyControl();
@@ -1521,7 +1600,6 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
1521
1600
 
1522
1601
  Object.keys(g_headerObj).filter(val => val.startsWith(`--`) && hasVal(g_headerObj[val])).forEach(prop =>
1523
1602
  document.documentElement.style.setProperty(prop, getCssCustomProperty(prop, g_headerObj[prop])));
1524
-
1525
1603
  }
1526
1604
  };
1527
1605
 
@@ -1529,6 +1607,7 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
1529
1607
  * CSSカスタムプロパティの値を作成
1530
1608
  * @param {string} _prop
1531
1609
  * @param {string} _propData
1610
+ * @returns {string}
1532
1611
  */
1533
1612
  const getCssCustomProperty = (_prop, _propData) =>
1534
1613
  document.documentElement.style.getPropertyValue(_propData) || (g_cssBkProperties[_propData] ?? (
@@ -1583,6 +1662,7 @@ const getCssCustomProperties = () => {
1583
1662
  * @param {string} _obj.animationName アニメーション名
1584
1663
  * @param {string} _obj.animationDuration アニメーションを動かす間隔(秒)
1585
1664
  * @param {number} _obj.opacity 画像の不透明度
1665
+ * @returns {string}
1586
1666
  */
1587
1667
  const makeSpriteImage = _obj => {
1588
1668
  let tmpInnerHTML = `<img src=${_obj.path} class="${_obj.class}" style="position:absolute;left:${wUnit(_obj.left)};top:${wUnit(_obj.top)}`;
@@ -1608,6 +1688,7 @@ const makeSpriteImage = _obj => {
1608
1688
  * @param {string} _obj.animationName アニメーション名
1609
1689
  * @param {string} _obj.animationDuration アニメーションを動かす間隔(秒)
1610
1690
  * @param {number} _obj.opacity テキストの不透明度
1691
+ * @returns {string}
1611
1692
  */
1612
1693
  const makeSpriteText = _obj => {
1613
1694
  let tmpInnerHTML = `<span class="${_obj.class}" style="display:inline-block;position:absolute;left:${wUnit(_obj.left)};top:${wUnit(_obj.top)}`;
@@ -1628,7 +1709,8 @@ const makeSpriteText = _obj => {
1628
1709
  /**
1629
1710
  * 多重配列の存在をチェックし、
1630
1711
  * 存在しない場合は作成、存在する場合は重複を避けて配列を新規作成
1631
- * @param {object, array} _obj
1712
+ * @param {any[][]} _obj
1713
+ * @returns [多重配列(初期化済),配列初期化済数]
1632
1714
  */
1633
1715
  const checkDuplicatedObjects = _obj => {
1634
1716
  let dataCnts = 0;
@@ -1651,6 +1733,7 @@ const checkDuplicatedObjects = _obj => {
1651
1733
  * 多層スプライトデータの作成処理
1652
1734
  * @param {string} _data
1653
1735
  * @param {function} _calcFrame
1736
+ * @returns [多層スプライトデータ, 最大深度]
1654
1737
  */
1655
1738
  const makeSpriteData = (_data, _calcFrame = _frame => _frame) => {
1656
1739
 
@@ -1738,7 +1821,7 @@ const makeSpriteData = (_data, _calcFrame = _frame => _frame) => {
1738
1821
  * スタイル変更データの作成処理
1739
1822
  * @param {string} _data
1740
1823
  * @param {function} _calcFrame
1741
- * @returns
1824
+ * @returns [多層スプライトデータ, 1(固定)]
1742
1825
  */
1743
1826
  const makeStyleData = (_data, _calcFrame = _frame => _frame) => {
1744
1827
  const spriteData = [];
@@ -1765,12 +1848,14 @@ const makeStyleData = (_data, _calcFrame = _frame => _frame) => {
1765
1848
  /**
1766
1849
  * 画像ファイルかどうかをチェック
1767
1850
  * @param {string} _str
1851
+ * @returns {boolean}
1768
1852
  */
1769
1853
  const checkImage = _str => listMatching(_str, g_imgExtensions, { prefix: `[.]`, suffix: `$` });
1770
1854
 
1771
1855
  /**
1772
1856
  * back/masktitle(result)において、ジャンプ先のフレーム数を取得
1773
1857
  * @param {string} _frames ジャンプ先のフレーム数情報。コロン指定でジャンプ先を確率で分岐 (ex. 300:1500:1500)
1858
+ * @returns {number}
1774
1859
  */
1775
1860
  const getSpriteJumpFrame = _frames => {
1776
1861
  const jumpFrames = _frames.split(`:`);
@@ -1782,7 +1867,7 @@ const getSpriteJumpFrame = _frames => {
1782
1867
  * 背景・マスクモーションの表示(共通処理)
1783
1868
  * @param {object} _spriteData
1784
1869
  * @param {string} _name
1785
- * @param {boolean} _condition
1870
+ * @param {boolean} [_condition=true]
1786
1871
  */
1787
1872
  const drawBaseSpriteData = (_spriteData, _name, _condition = true) => {
1788
1873
  const baseSprite = document.getElementById(`${_name}Sprite${_spriteData.depth}`);
@@ -1815,6 +1900,7 @@ const drawBaseSpriteData = (_spriteData, _name, _condition = true) => {
1815
1900
  * @param {number} _frame
1816
1901
  * @param {string} _displayName title / result
1817
1902
  * @param {string} _depthName back / mask
1903
+ * @returns {number}
1818
1904
  */
1819
1905
  const drawSpriteData = (_frame, _displayName, _depthName) => {
1820
1906
 
@@ -1854,6 +1940,7 @@ const drawMainSpriteData = (_frame, _depthName) =>
1854
1940
  * スタイル切替
1855
1941
  * @param {number} _frame
1856
1942
  * @param {string} _displayName
1943
+ * @returns {number}
1857
1944
  */
1858
1945
  const drawStyleData = (_frame, _displayName) => {
1859
1946
  g_headerObj[`style${toCapitalize(_displayName)}Data`][_frame].forEach(tmpObj =>
@@ -1992,6 +2079,7 @@ const copyTextToClipboard = async (_textVal, _msg) => {
1992
2079
  /**
1993
2080
  * 現在URLのクエリパラメータから指定した値を取得
1994
2081
  * @param {string} _name
2082
+ * @returns {string}
1995
2083
  */
1996
2084
  const getQueryParamVal = _name => {
1997
2085
  const param = new URL(location.href).searchParams.get(_name);
@@ -2000,6 +2088,7 @@ const getQueryParamVal = _name => {
2000
2088
 
2001
2089
  /**
2002
2090
  * ローディング文字用ラベルの作成
2091
+ * @returns {HTMLDivElement}
2003
2092
  */
2004
2093
  const getLoadingLabel = () => createDivCss2Label(`lblLoading`, g_lblNameObj.nowLoading, {
2005
2094
  x: 0, y: g_sHeight - 40, w: g_sWidth, h: g_limitObj.setLblHeight,
@@ -2009,6 +2098,7 @@ const getLoadingLabel = () => createDivCss2Label(`lblLoading`, g_lblNameObj.nowL
2009
2098
  /**
2010
2099
  * フレーム数を時間表示へ変換
2011
2100
  * @param {number} _frame
2101
+ * @returns {string}
2012
2102
  */
2013
2103
  const transFrameToTimer = _frame => {
2014
2104
  const minutes = Math.floor(_frame / g_fps / 60);
@@ -2020,6 +2110,7 @@ const transFrameToTimer = _frame => {
2020
2110
  * 疑似タイマー表記をフレーム数へ変換
2021
2111
  * |endFrame=1:35.20|
2022
2112
  * @param {string} _str
2113
+ * @returns {number|string}
2023
2114
  */
2024
2115
  const transTimerToFrame = _str => {
2025
2116
  if (_str.indexOf(`:`) !== -1) {
@@ -2277,6 +2368,7 @@ const loadLocalStorage = () => {
2277
2368
  /**
2278
2369
  * 譜面データを分割して値を取得
2279
2370
  * @param {string} _dos 譜面データ
2371
+ * @returns
2280
2372
  */
2281
2373
  const dosConvert = (_dos = ``) => {
2282
2374
 
@@ -2367,6 +2459,7 @@ const resetColorAndGauge = _scoreId => {
2367
2459
  * 譜面番号固定かつ譜面ファイル分割時に初期色情報を他譜面へコピー
2368
2460
  * @param {object} _baseObj
2369
2461
  * @param {number} _scoreId
2462
+ * @returns
2370
2463
  */
2371
2464
  const copySetColor = (_baseObj, _scoreId) => {
2372
2465
  const obj = {};
@@ -2382,6 +2475,7 @@ const copySetColor = (_baseObj, _scoreId) => {
2382
2475
  /**
2383
2476
  * MusicUrlの基本情報を取得
2384
2477
  * @param {number} _scoreId
2478
+ * @returns {string}
2385
2479
  */
2386
2480
  const getMusicUrl = _scoreId =>
2387
2481
  g_headerObj.musicUrls?.[g_headerObj.musicNos[_scoreId]] ?? g_headerObj.musicUrls?.[0] ?? `nosound.mp3`;
@@ -2492,8 +2586,8 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
2492
2586
  /**
2493
2587
  * ツール計算
2494
2588
  * @param {object} _scoreObj
2495
- * @param {array} _scoreObj.arrowData
2496
- * @param {array} _scoreObj.frzData
2589
+ * @param {number[][]} _scoreObj.arrowData
2590
+ * @param {number[][]} _scoreObj.frzData
2497
2591
  */
2498
2592
  const calcLevel = _scoreObj => {
2499
2593
  //--------------------------------------------------------------
@@ -2657,7 +2751,7 @@ const calcLevel = _scoreObj => {
2657
2751
  /**
2658
2752
  * ロケールを含んだヘッダーの優先度設定
2659
2753
  * @param {object} _obj
2660
- * @param {...any} _params
2754
+ * @param {...any} [_params]
2661
2755
  */
2662
2756
  const getHeader = (_obj, ..._params) => {
2663
2757
  let headerLocale, headerDf;
@@ -2671,12 +2765,14 @@ const getHeader = (_obj, ..._params) => {
2671
2765
  /**
2672
2766
  * ヘッダー名の互換設定
2673
2767
  * @param {string} _param
2768
+ * @returns {string[]}
2674
2769
  */
2675
2770
  const getHname = _param => [_param, _param.toLowerCase()];
2676
2771
 
2677
2772
  /**
2678
2773
  * 譜面ヘッダーの分解(スキン、jsファイルなどの設定)
2679
2774
  * @param {object} _dosObj
2775
+ * @returns
2680
2776
  */
2681
2777
  const preheaderConvert = _dosObj => {
2682
2778
 
@@ -2728,6 +2824,7 @@ const preheaderConvert = _dosObj => {
2728
2824
  /**
2729
2825
  * 譜面ヘッダーの分解(その他の設定)
2730
2826
  * @param {object} _dosObj 譜面データオブジェクト
2827
+ * @returns
2731
2828
  */
2732
2829
  const headerConvert = _dosObj => {
2733
2830
 
@@ -3387,7 +3484,8 @@ const headerConvert = _dosObj => {
3387
3484
  /**
3388
3485
  * 譜面リスト作成有無の状態を取得
3389
3486
  * @param {boolean} _headerFlg
3390
- * @param {array} _viewLists
3487
+ * @param {number[]} _viewLists
3488
+ * @returns {boolean}
3391
3489
  */
3392
3490
  const getDifSelectorUse = (_headerFlg, _viewLists = g_headerObj.viewLists) => setBoolVal(_headerFlg, _viewLists.length > 5);
3393
3491
 
@@ -3407,8 +3505,9 @@ const resetColorType = ({ _from = ``, _to = ``, _fromObj = g_headerObj, _toObj =
3407
3505
 
3408
3506
  /**
3409
3507
  * 配列にデータを先頭に追加
3410
- * @param {array} _arr
3508
+ * @param {string[]|number[]} _arr
3411
3509
  * @param {string} _target
3510
+ * @returns {string[]|number[]}
3412
3511
  */
3413
3512
  const addValtoArray = (_arr, _target) => {
3414
3513
  if (!_arr.includes(_target)) {
@@ -3420,12 +3519,14 @@ const addValtoArray = (_arr, _target) => {
3420
3519
  /**
3421
3520
  * 曲名(1行)の取得
3422
3521
  * @param {string} _musicName
3522
+ * @returns {string}
3423
3523
  */
3424
3524
  const getMusicNameSimple = _musicName => replaceStr(_musicName, g_escapeStr.musicNameSimple);
3425
3525
 
3426
3526
  /**
3427
3527
  * 曲名(複数行)の取得
3428
3528
  * @param {string} _musicName
3529
+ * @returns {string[]}
3429
3530
  */
3430
3531
  const getMusicNameMultiLine = _musicName => {
3431
3532
  const tmpName = replaceStr(_musicName, g_escapeStr.musicNameMultiLine).split(`<br>`);
@@ -3447,7 +3548,7 @@ const updateImgType = (_imgType, _initFlg = false) => {
3447
3548
  resetImgs(_imgType.name, _imgType.extension);
3448
3549
  reloadImgObj();
3449
3550
  Object.keys(g_imgObj).forEach(key => g_imgObj[key] = `${g_rootPath}${g_imgObj[key]}`);
3450
- if (_imgType[1] === undefined && g_presetObj.overrideExtension !== undefined) {
3551
+ if (_imgType.extension === undefined && g_presetObj.overrideExtension !== undefined) {
3451
3552
  Object.keys(g_imgObj).forEach(key => g_imgObj[key] = `${g_imgObj[key].slice(0, -3)}${g_presetObj.overrideExtension}`);
3452
3553
  }
3453
3554
  if (!g_isFile) {
@@ -3465,7 +3566,7 @@ const addGaugeFulls = _obj => _obj.map(key => g_gaugeOptionObj.customFulls[key]
3465
3566
  * 矢印・フリーズアロー色のデータ変換
3466
3567
  * @param {object} _baseObj
3467
3568
  * @param {object} _dosObj
3468
- * @param {string} object.scoreId
3569
+ * @param {string} [object.scoreId='']
3469
3570
  * @returns オブジェクト ※Object.assign(obj, resetBaseColorList(...))の形で呼び出しが必要
3470
3571
  */
3471
3572
  const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
@@ -3539,13 +3640,14 @@ const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
3539
3640
  /**
3540
3641
  * 矢印・フリーズアロー色のデータ展開
3541
3642
  * @param {string} _data
3542
- * @param {array} _colorInit
3643
+ * @param {string[]} _colorInit
3543
3644
  * @param {number} _colorInitLength
3544
- * @param {array} object._defaultColorgrd
3545
- * @param {boolean} object._colorCdPaddingUse
3546
- * @param {boolean} object._defaultFrzColorUse
3547
- * @param {string} object._objType
3548
- * @param {boolean} object._shadowFlg
3645
+ * @param {string[]} [object._defaultColorgrd=g_headerObj.defaultColorgrd]
3646
+ * @param {boolean} [object._colorCdPaddingUse=false]
3647
+ * @param {boolean} [object._defaultFrzColorUse=true]
3648
+ * @param {string} [object._objType='normal']
3649
+ * @param {boolean} [object._shadowFlg=false]
3650
+ * @returns {string[][]}
3549
3651
  */
3550
3652
  const setColorList = (_data, _colorInit, _colorInitLength,
3551
3653
  { _defaultColorgrd = g_headerObj.defaultColorgrd, _colorCdPaddingUse = false,
@@ -3615,7 +3717,7 @@ const setColorList = (_data, _colorInit, _colorInitLength,
3615
3717
  * 複合カスタムゲージの定義設定
3616
3718
  * |customGauge=Original::F,Normal::V,Escape::V|
3617
3719
  * @param {object} _dosObj
3618
- * @param {string} object.scoreId
3720
+ * @param {string} [object.scoreId=0]
3619
3721
  * @returns オブジェクト ※Object.assign(obj, resetCustomGauge(...))の形で呼び出しが必要
3620
3722
  */
3621
3723
  const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
@@ -3657,7 +3759,7 @@ const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
3657
3759
  * @param {object} _dosObj
3658
3760
  * @param {string} _name
3659
3761
  * @param {number} _difLength
3660
- * @param {string} object.scoreId
3762
+ * @param {string} [object.scoreId=0]
3661
3763
  */
3662
3764
  const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
3663
3765
 
@@ -3676,8 +3778,8 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
3676
3778
  /**
3677
3779
  * ゲージ別個別配列への値格納
3678
3780
  * @param {number} _scoreId
3679
- * @param {array} _gaugeDetails
3680
- * @param {boolean} _loopFlg
3781
+ * @param {string[]} _gaugeDetails
3782
+ * @returns {boolean}
3681
3783
  */
3682
3784
  const setGaugeDetails = (_scoreId, _gaugeDetails) => {
3683
3785
  if (_gaugeDetails[0] === `x`) {
@@ -3699,7 +3801,8 @@ const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
3699
3801
  /**
3700
3802
  * gaugeNormal2, gaugeEasy2などの個別設定があった場合にその値から配列を作成
3701
3803
  * @param {number} _scoreId
3702
- * @param {array} _defaultGaugeList
3804
+ * @param {number[]} _defaultGaugeList
3805
+ * @returns {number[]}
3703
3806
  */
3704
3807
  const getGaugeDetailList = (_scoreId, _defaultGaugeList) => {
3705
3808
  if (_scoreId > 0) {
@@ -3760,6 +3863,7 @@ const getKeyUnitName = _key => unEscapeHtml(escapeHtml(g_keyObj[`keyName${_key}`
3760
3863
  * 簡略指定ができるように、以下の記述を許容
3761
3864
  * 例) KeyD -> D, ArrowDown -> Down, AltLeft -> Alt
3762
3865
  * @param {string} _kCdN
3866
+ * @returns {number}
3763
3867
  */
3764
3868
  const getKeyCtrlVal = _kCdN => {
3765
3869
  const convVal = Object.keys(g_kCdN).findIndex(val =>
@@ -3770,7 +3874,8 @@ const getKeyCtrlVal = _kCdN => {
3770
3874
  /**
3771
3875
  * 一時的な追加キーの設定
3772
3876
  * @param {object} _dosObj
3773
- * @param {array} object.keyExtraList
3877
+ * @param {string[]} object.keyExtraList
3878
+ * @returns {string[]}
3774
3879
  */
3775
3880
  const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`) } = {}) => {
3776
3881
 
@@ -3797,6 +3902,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3797
3902
  /**
3798
3903
  * 略記記法を元の文字列に変換 (1...5 -> 1,2,3,4,5 / 3...+4 -> 3,4,5,6,7)
3799
3904
  * @param {string} _str
3905
+ * @returns {string}
3800
3906
  */
3801
3907
  const toFloatStr = _str => {
3802
3908
  const nums = _str?.split(`...`);
@@ -3818,6 +3924,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3818
3924
  /**
3819
3925
  * 略記記法を元の文字列に変換 (1@:5 -> 1,1,1,1,1 / onigiri!giko!c@:2 -> onigiri,giko,c,onigiri,giko,c)
3820
3926
  * @param {string} _str
3927
+ * @returns {string}
3821
3928
  */
3822
3929
  const toSameValStr = _str => {
3823
3930
  const nums = _str?.split(`@:`);
@@ -3831,6 +3938,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3831
3938
  * 例) 12_(0) -> 12_4
3832
3939
  * それ以外の文字列が来た場合は、そのままの値を戻す
3833
3940
  * @param {string} _str
3941
+ * @returns {string}
3834
3942
  */
3835
3943
  const getKeyPtnName = _str => {
3836
3944
  const regex = /\((\d+)\)/;
@@ -3848,7 +3956,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3848
3956
  * -> |div11x=7,13|pos11x=0,1,2,3,4,5,6,7,8,12,13|
3849
3957
  * @param {number} _num
3850
3958
  * @param {number} _divNum
3851
- * @returns
3959
+ * @returns {number}
3852
3960
  */
3853
3961
  const getKeyPosNum = (_num, _divNum = 0) => {
3854
3962
  if (!hasVal(_num) || (!_num.startsWith(`b`) && isNaN(parseFloat(_num)))) {
@@ -3862,6 +3970,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3862
3970
  * @param {string} _str
3863
3971
  * @param {string} _name
3864
3972
  * @param {function} _convFunc
3973
+ * @returns {string[]|number[]}
3865
3974
  */
3866
3975
  const expandKeyPtn = (_str, _name, _convFunc) => {
3867
3976
  const pos = _str.indexOf(`>`);
@@ -3883,7 +3992,7 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3883
3992
  * @param {string} object.errCd エラーコード
3884
3993
  * @param {boolean} object.baseCopyFlg コピー配列の準備可否
3885
3994
  * @param {function} object.loopFunc パターン別に処理する個別関数
3886
- * @returns 最小パターン数
3995
+ * @returns {number} 最小パターン数
3887
3996
  */
3888
3997
  const newKeyMultiParam = (_key, _name, _convFunc, { errCd = ``, baseCopyFlg = false, loopFunc = () => true } = {}) => {
3889
3998
  let tmpMinPatterns = 1;
@@ -4320,6 +4429,7 @@ const titleInit = () => {
4320
4429
  * @param {string} _id
4321
4430
  * @param {string} _text
4322
4431
  * @param {string} _url
4432
+ * @returns {HTMLDivElement}
4323
4433
  */
4324
4434
  const createCreditBtn = (_id, _text, _url) =>
4325
4435
  createCss2Button(_id, _text, () => true,
@@ -4450,8 +4560,8 @@ const titleInit = () => {
4450
4560
  /**
4451
4561
  * 警告用ウィンドウ(汎用)を表示
4452
4562
  * @param {string} _text
4453
- * @param {boolean} object.resetFlg 警告リストをクリアして再作成
4454
- * @param {boolean} object.backBtnUse Backボタンを付与
4563
+ * @param {boolean} [object.resetFlg=false] 警告リストをクリアして再作成
4564
+ * @param {boolean} [object.backBtnUse=false] Backボタンを付与
4455
4565
  */
4456
4566
  const makeWarningWindow = (_text = ``, { resetFlg = false, backBtnUse = false } = {}) => {
4457
4567
  const displayName = (g_currentPage === `initial` ? `title` : g_currentPage);
@@ -4478,7 +4588,7 @@ const makeWarningWindow = (_text = ``, { resetFlg = false, backBtnUse = false }
4478
4588
  * お知らせウィンドウ(汎用)を表示
4479
4589
  * @param {string} _text
4480
4590
  * @param {string} _animationName
4481
- * @param {string} object._backColor
4591
+ * @param {string} [object._backColor='#ccccff']
4482
4592
  */
4483
4593
  const makeInfoWindow = (_text, _animationName = ``, { _backColor = `#ccccff` } = {}) => {
4484
4594
  const lblWarning = setWindowStyle(`<p>${_text}</p>`, _backColor, `#000066`, C_ALIGN_CENTER);
@@ -4499,9 +4609,10 @@ const makeInfoWindow = (_text, _animationName = ``, { _backColor = `#ccccff` } =
4499
4609
  * @param {string} _bkColor
4500
4610
  * @param {string} _textColor
4501
4611
  * @param {string} _align
4502
- * @param {number} object._x
4503
- * @param {number} object._y
4504
- * @param {number} object._w
4612
+ * @param {number} [object._x=g_btnX()]
4613
+ * @param {number} [object._y=0]
4614
+ * @param {number} [object._w=g_btnWidth()]
4615
+ * @returns {HTMLDivElement}
4505
4616
  */
4506
4617
  const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT, { _x = g_btnX(), _y = 0, _w = g_btnWidth() } = {}) => {
4507
4618
 
@@ -4583,6 +4694,7 @@ const commonSettingBtn = _labelName => {
4583
4694
  /**
4584
4695
  * PLAYボタンの作成
4585
4696
  * @param {function} _func
4697
+ * @returns {HTMLDivElement}
4586
4698
  */
4587
4699
  const makePlayButton = _func => createCss2Button(`btnPlay`, g_lblNameObj.b_play, () => true,
4588
4700
  Object.assign(g_lblPosObj.btnPlay, {
@@ -4622,7 +4734,8 @@ const optionInit = () => {
4622
4734
 
4623
4735
  /**
4624
4736
  * 設定画面用スプライトリストの作成
4625
- * @param {array} _settingList (設定名、縦位置、縦位置差分、幅差分、高さ差分)を設定別にリスト化
4737
+ * @param {object} _settingList (設定名、縦位置、縦位置差分、幅差分、高さ差分)を設定別にリスト化
4738
+ * @returns
4626
4739
  */
4627
4740
  const setSpriteList = _settingList => {
4628
4741
  const optionWidth = (g_sWidth - 450) / 2;
@@ -4636,9 +4749,10 @@ const setSpriteList = _settingList => {
4636
4749
  };
4637
4750
 
4638
4751
  /**
4639
- * スライダー共通処理
4640
- * @param {object} _slider
4641
- * @param {object} _link
4752
+ * スライダー共通処理 (Fadein)
4753
+ * @param {HTMLInputElement} _slider
4754
+ * @param {HTMLDivElement} _link
4755
+ * @returns {string}
4642
4756
  */
4643
4757
  const inputSlider = (_slider, _link) => {
4644
4758
  const value = parseInt(_slider.value);
@@ -4647,9 +4761,10 @@ const inputSlider = (_slider, _link) => {
4647
4761
  };
4648
4762
 
4649
4763
  /**
4650
- * スライダー共通処理
4651
- * @param {object} _slider
4652
- * @param {object} _link
4764
+ * スライダー共通処理 (Appearance)
4765
+ * @param {HTMLInputElement} _slider
4766
+ * @param {HTMLDivElement} _link
4767
+ * @returns {string}
4653
4768
  */
4654
4769
  const inputSliderAppearance = (_slider, _link) => {
4655
4770
  const value = parseInt(_slider.value);
@@ -4673,6 +4788,7 @@ const resetDifWindow = () => {
4673
4788
  * 次の譜面番号を取得
4674
4789
  * @param {number} _scoreId
4675
4790
  * @param {number} _scrollNum
4791
+ * @returns {number}
4676
4792
  */
4677
4793
  const getNextDifficulty = (_scoreId, _scrollNum) => {
4678
4794
  const currentPosIdx = g_headerObj.viewLists.findIndex(val => val === _scoreId);
@@ -4693,7 +4809,7 @@ const nextDifficulty = (_scrollNum = 1) => {
4693
4809
 
4694
4810
  /**
4695
4811
  * 譜面リストの作成
4696
- * @param {object} _difList
4812
+ * @param {HTMLDivElement} _difList
4697
4813
  * @param {string} _targetKey
4698
4814
  */
4699
4815
  const makeDifList = (_difList, _targetKey = ``) => {
@@ -4747,7 +4863,7 @@ const makeDifBtn = (_scrollNum = 1) => {
4747
4863
 
4748
4864
  /**
4749
4865
  * 譜面変更セレクターの作成・再作成
4750
- * @param {string} _key
4866
+ * @param {string} [_key=''] 絞り込みするキー名(無指定で絞り込みしない)
4751
4867
  */
4752
4868
  const createDifWindow = (_key = ``) => {
4753
4869
  g_currentPage = `difSelector`;
@@ -4796,7 +4912,7 @@ const createDifWindow = (_key = ``) => {
4796
4912
 
4797
4913
  /**
4798
4914
  * 譜面変更ボタンを押したときの処理
4799
- * @param {number} _num
4915
+ * @param {number} [_num=1]
4800
4916
  */
4801
4917
  const changeDifficulty = (_num = 1) => {
4802
4918
  if (g_headerObj.difSelectorUse) {
@@ -4815,6 +4931,7 @@ const changeDifficulty = (_num = 1) => {
4815
4931
  /**
4816
4932
  * 譜面基礎データの取得
4817
4933
  * @param {number} _scoreId
4934
+ * @returns {{ arrowCnts: number, frzCnts: number, apm: number, playingTime: string }}
4818
4935
  */
4819
4936
  const getScoreBaseData = _scoreId => {
4820
4937
  const arrowCnts = sumData(g_detailObj.arrowCnt[_scoreId]);
@@ -4958,8 +5075,8 @@ const drawDensityGraph = _scoreId => {
4958
5075
  * @param {string} _name 表示する譜面明細のラベル
4959
5076
  * @param {string} _label
4960
5077
  * @param {string} _value
4961
- * @param {number} _pos 表示位置
4962
- * @param {string} _labelname
5078
+ * @param {number} [_pos=0] 表示位置
5079
+ * @param {string} [_labelname=_label]
4963
5080
  */
4964
5081
  const updateScoreDetailLabel = (_name, _label, _value, _pos = 0, _labelname = _label) => {
4965
5082
  const baseLabel = (_bLabel, _bLabelname, _bAlign) =>
@@ -4978,14 +5095,14 @@ const updateScoreDetailLabel = (_name, _label, _value, _pos = 0, _labelname = _l
4978
5095
 
4979
5096
  /**
4980
5097
  * グラフの縦軸を描画
4981
- * @param {object} _context
4982
- * @param {number} object._fixed y座標)目盛表記する小数桁数
4983
- * @param {string} object._mark y座標)目盛の単位
4984
- * @param {number} object._resolution y座標)明細分割数
4985
- * @param {number} object._a
4986
- * @param {number} object._b
4987
- * @param {number} object._min y座標)目盛の下限値
4988
- * @param {number} object._max y座標)目盛の上限値
5098
+ * @param {CanvasRenderingContext2D} _context
5099
+ * @param {number} [object._fixed=2] y座標)目盛表記する小数桁数
5100
+ * @param {string} [object._mark=''] y座標)目盛の単位
5101
+ * @param {number} [object._resolution=10] y座標)明細分割数
5102
+ * @param {number} [object._a=-90]
5103
+ * @param {number} [object._b=105]
5104
+ * @param {number} [object._min=0] y座標)目盛の下限値
5105
+ * @param {number} [object._max=2] y座標)目盛の上限値
4989
5106
  */
4990
5107
  const drawBaseLine = (_context, { _fixed = 2, _mark = ``, _resolution = 10, _a = -90, _b = 105, _min = 0, _max = 2 } = {}) => {
4991
5108
  _context.clearRect(0, 0, g_limitObj.graphWidth, g_limitObj.graphHeight);
@@ -5003,13 +5120,13 @@ const drawBaseLine = (_context, { _fixed = 2, _mark = ``, _resolution = 10, _a =
5003
5120
 
5004
5121
  /**
5005
5122
  * グラフ上に目盛を表示
5006
- * @param {object} _context
5123
+ * @param {CanvasRenderingContext2D} _context
5007
5124
  * @param {number} _y
5008
5125
  * @param {string} _lineType
5009
- * @param {number} object._fixed y座標)目盛表記する小数桁数
5010
- * @param {string} object._mark y座標)目盛の単位
5011
- * @param {number} object._a
5012
- * @param {number} object._b
5126
+ * @param {number} [object._fixed] y座標)目盛表記する小数桁数
5127
+ * @param {string} [object._mark] y座標)目盛の単位
5128
+ * @param {number} [object._a]
5129
+ * @param {number} [object._b]
5013
5130
  */
5014
5131
  const drawLine = (_context, _y, _lineType, { _fixed, _mark, _a, _b } = {}) => {
5015
5132
  const lineY = (_y - 1) * _a + _b;
@@ -5044,6 +5161,7 @@ const makeDifInfoLabels = _scoreId => {
5044
5161
  * @param {string} _lbl
5045
5162
  * @param {string} _data
5046
5163
  * @param {object} _obj
5164
+ * @returns {HTMLDivElement}
5047
5165
  */
5048
5166
  const makeDifInfoLabel = (_lbl, _data, { x = 130, y = 25, w = 125, h = 35, siz = g_limitObj.difSelectorSiz, ...rest } = {}) =>
5049
5167
  createDivCss2Label(_lbl, _data, { x, y, w, h, siz, align: C_ALIGN_LEFT, ...rest });
@@ -5521,6 +5639,7 @@ const createOptionWindow = _sprite => {
5521
5639
  * 譜面明細子画面・グラフの作成
5522
5640
  * @param {string} _name
5523
5641
  * @param {boolean} _graphUseFlg
5642
+ * @returns {HTMLDivElement}
5524
5643
  */
5525
5644
  const createScoreDetail = (_name, _graphUseFlg = true) => {
5526
5645
  const detailObj = createEmptySprite(scoreDetail, `detail${_name}`, g_windowObj.detailObj);
@@ -5775,18 +5894,18 @@ const createOptionWindow = _sprite => {
5775
5894
 
5776
5895
  /**
5777
5896
  * 汎用設定
5778
- * @param {object} _obj
5897
+ * @param {HTMLDivElement} _obj
5779
5898
  * @param {string} _settingName
5780
- * @param {string} object.unitName 設定名の単位
5781
- * @param {array} object.skipTerms ボタンの設定スキップ間隔(デフォルト:[1(外側), 1(内側), 1(最内側)])
5782
- * @param {boolean} object.hiddenBtn 隠しボタン(ショートカットキーのみ)の利用有無
5783
- * @param {function} object.addRFunc 右側のボタンを押したときの追加処理
5784
- * @param {function} object.addLFunc 左側のボタンを押したときの追加処理
5785
- * @param {string} object.settingLabel 設定名
5786
- * @param {string} object.displayName 画面名
5787
- * @param {string} object.scLabel ショートカットキーの表示名
5788
- * @param {number} object.roundNum 設定スキップ間隔の丸め基準数
5789
- * @param {number} object.adjY 設定ボタンのY座標位置
5899
+ * @param {string} [object.unitName=''] 設定名の単位
5900
+ * @param {number[]} [object.skipTerms] ボタンの設定スキップ間隔(デフォルト:[1(外側), 1(内側), 1(最内側)])
5901
+ * @param {boolean} [object.hiddenBtn=false] 隠しボタン(ショートカットキーのみ)の利用有無
5902
+ * @param {function} [object.addRFunc] 右側のボタンを押したときの追加処理
5903
+ * @param {function} [object.addLFunc] 左側のボタンを押したときの追加処理
5904
+ * @param {string} [object.settingLabel=_settingName] 設定名
5905
+ * @param {string} [object.displayName] 画面名
5906
+ * @param {string} [object.scLabel=''] ショートカットキーの表示名
5907
+ * @param {number} [object.roundNum=0] 設定スキップ間隔の丸め基準数
5908
+ * @param {number} [object.adjY=0] 設定ボタンのY座標位置
5790
5909
  */
5791
5910
  const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5792
5911
  skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = () => { }, addLFunc = addRFunc,
@@ -5860,6 +5979,7 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
5860
5979
  * @param {string} _settingName
5861
5980
  * @param {number} _adjY
5862
5981
  * @param {string} _settingLabel
5982
+ * @returns {HTMLDivElement}
5863
5983
  */
5864
5984
  const createLblSetting = (_settingName, _adjY = 0, _settingLabel = _settingName) => {
5865
5985
  const lbl = createDivCss2Label(`lbl${_settingName}`, g_lblNameObj[_settingLabel], {
@@ -5872,6 +5992,7 @@ const createLblSetting = (_settingName, _adjY = 0, _settingLabel = _settingName)
5872
5992
  /**
5873
5993
  * 設定名の置き換え処理
5874
5994
  * @param {string} _name
5995
+ * @returns {string}
5875
5996
  */
5876
5997
  const getStgDetailName = _name => {
5877
5998
  return g_lblNameObj[`u_${_name}`] !== undefined &&
@@ -5882,9 +6003,9 @@ const getStgDetailName = _name => {
5882
6003
  * 設定メイン・汎用
5883
6004
  * @param {number} _scrollNum
5884
6005
  * @param {string} _settingName
5885
- * @param {string} _unitName 設定の単位名
5886
- * @param {number} _roundNum 設定スキップ間隔の丸め基準数
5887
- * @param {function} object.func 設定ボタンを押した後の追加処理
6006
+ * @param {string} [_unitName] 設定の単位名
6007
+ * @param {number} [_roundNum] 設定スキップ間隔の丸め基準数
6008
+ * @param {function} [object.func] 設定ボタンを押した後の追加処理
5888
6009
  */
5889
6010
  const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { func = () => true } = {}) => {
5890
6011
  let settingNum = g_settings[`${_settingName}Num`];
@@ -5915,6 +6036,7 @@ const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { f
5915
6036
  * @param {string} _id
5916
6037
  * @param {number} _heightPos
5917
6038
  * @param {string} _defaultStr
6039
+ * @returns {HTMLDivElement}
5918
6040
  */
5919
6041
  const makeDisabledLabel = (_id, _heightPos, _defaultStr) =>
5920
6042
  createDivCss2Label(_id, _defaultStr, {
@@ -6066,6 +6188,7 @@ const setGauge = (_scrollNum, _gaugeInitFlg = false) => {
6066
6188
  * @param {number} _dmg
6067
6189
  * @param {number} _init
6068
6190
  * @param {string} _lifeValFlg
6191
+ * @returns {string}
6069
6192
  */
6070
6193
  const gaugeFormat = (_mode, _border, _rcv, _dmg, _init, _lifeValFlg) => {
6071
6194
  const initVal = g_headerObj.maxLifeVal * _init / 100;
@@ -6143,6 +6266,7 @@ const gaugeFormat = (_mode, _border, _rcv, _dmg, _init, _lifeValFlg) => {
6143
6266
  * @param {number} _dmg
6144
6267
  * @param {number} _init
6145
6268
  * @param {number} _allCnt
6269
+ * @returns {string[]}
6146
6270
  */
6147
6271
  const getAccuracy = (_border, _rcv, _dmg, _init, _allCnt) => {
6148
6272
  const justPoint = _rcv + _dmg > 0 ? Math.max(_border - _init + _dmg * _allCnt, 0) / (_rcv + _dmg) : 0;
@@ -6163,7 +6287,7 @@ const getAccuracy = (_border, _rcv, _dmg, _init, _allCnt) => {
6163
6287
 
6164
6288
  /**
6165
6289
  * 空押し判定の設定
6166
- * @param {object} _btn
6290
+ * @param {HTMLDivElement} _btn
6167
6291
  */
6168
6292
  const setExcessive = _btn => {
6169
6293
  g_settings.excessiveNum = (g_settings.excessiveNum + 1) % 2;
@@ -6219,26 +6343,21 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
6219
6343
  * @param {string} _name 初期設定文字
6220
6344
  * @param {number} _heightPos 上からの配置順
6221
6345
  * @param {function} _func 通常ボタン処理
6222
- * @param {number} object.x
6223
- * @param {number} object.y
6224
- * @param {number} object.w
6225
- * @param {number} object.h
6226
- * @param {number} object.siz
6227
- * @param {function} object.cxtFunc 右クリック時の処理
6228
- * @param {...any} object.rest
6346
+ * @param {number} [object.x]
6347
+ * @param {number} [object.y]
6348
+ * @param {number} [object.w]
6349
+ * @param {number} [object.h]
6350
+ * @param {number} [object.siz]
6351
+ * @param {function} [object.cxtFunc] 右クリック時の処理
6352
+ * @param {...any} [object.rest]
6229
6353
  * @param {...any} _classes 追加するクラス
6354
+ * @returns {HTMLDivElement}
6230
6355
  */
6231
- const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, siz, cxtFunc = () => true, ...rest } = {}, ..._classes) => {
6232
- const tmpObj = {
6233
- x: x ?? g_limitObj.setLblLeft,
6234
- y: y ?? g_limitObj.setLblHeight * _heightPos,
6235
- w: w ?? g_limitObj.setLblWidth,
6236
- h: h ?? g_limitObj.setLblHeight,
6237
- siz: siz ?? g_limitObj.setLblSiz,
6238
- cxtFunc: cxtFunc ?? (() => true),
6239
- };
6240
- return createCss2Button(_id, _name, _func, { ...tmpObj, ...rest }, g_cssObj.button_Default, ..._classes);
6241
- };
6356
+ const makeSettingLblCssButton = (_id, _name, _heightPos, _func, {
6357
+ x = g_limitObj.setLblLeft, y = g_limitObj.setLblHeight * _heightPos,
6358
+ w = g_limitObj.setLblWidth, h = g_limitObj.setLblHeight, siz = g_limitObj.setLblSiz,
6359
+ cxtFunc = () => true, ...rest } = {}, ..._classes) =>
6360
+ createCss2Button(_id, _name, _func, { x, y, w, h, siz, cxtFunc, ...rest }, g_cssObj.button_Default, ..._classes);
6242
6361
 
6243
6362
  /**
6244
6363
  * 譜面変更セレクター用ボタン
@@ -6246,15 +6365,19 @@ const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, si
6246
6365
  * @param {string} _name 初期設定文字
6247
6366
  * @param {number} _heightPos 上からの配置順
6248
6367
  * @param {function} _func
6249
- * @param {number} object.x
6250
- * @param {number} object.w
6251
- * @param {number} object.h
6252
- * @param {string} object.btnStyle
6253
- */
6254
- const makeDifLblCssButton = (_id, _name, _heightPos, _func,
6255
- { x = 0, w = g_limitObj.difSelectorWidth, h = g_limitObj.setLblHeight, btnStyle = `Default` } = {}) =>
6368
+ * @param {number} [object.x]
6369
+ * @param {number} [object.h]
6370
+ * @param {number} [object.y=h*_heightPos]
6371
+ * @param {number} [object.w]
6372
+ * @param {number} [object.siz]
6373
+ * @param {string} [object.btnStyle='Default']
6374
+ * @returns {HTMLDivElement}
6375
+ */
6376
+ const makeDifLblCssButton = (_id, _name, _heightPos, _func, {
6377
+ x = 0, h = g_limitObj.setLblHeight, y = h * _heightPos,
6378
+ w = g_limitObj.difSelectorWidth, siz = g_limitObj.difSelectorSiz, btnStyle = `Default` } = {}) =>
6256
6379
  createCss2Button(_id, _name, _func, {
6257
- x, y: h * _heightPos, w, h, siz: g_limitObj.difSelectorSiz, borderStyle: `solid`, title: g_msgObj[_id] ?? ``,
6380
+ x, y, w, h, siz, borderStyle: `solid`, title: g_msgObj[_id] ?? ``,
6258
6381
  }, g_cssObj[`button_${btnStyle}`], g_cssObj.button_ON);
6259
6382
 
6260
6383
  /**
@@ -6263,12 +6386,13 @@ const makeDifLblCssButton = (_id, _name, _heightPos, _func,
6263
6386
  * @param {string} _directionFlg 表示用ボタンのどちら側に置くかを設定。(R, RR:右、L, LL:左)
6264
6387
  * @param {number} _heightPos 上からの配置順
6265
6388
  * @param {function} _func
6266
- * @param {number} object.dx
6267
- * @param {number} object.dy
6268
- * @param {number} object.dw
6269
- * @param {number} object.dh
6270
- * @param {number} object.dsiz
6271
- * @param {string} object.visibility
6389
+ * @param {number} [object.dx=0]
6390
+ * @param {number} [object.dy=0]
6391
+ * @param {number} [object.dw=0]
6392
+ * @param {number} [object.dh=0]
6393
+ * @param {number} [object.dsiz=0]
6394
+ * @param {string} [object.visibility='visible']
6395
+ * @returns {HTMLDivElement}
6272
6396
  */
6273
6397
  const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible` } = {}) =>
6274
6398
  createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, {
@@ -6584,7 +6708,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
6584
6708
  /**
6585
6709
  * キーコンフィグ用の矢印色を取得
6586
6710
  * @param {number} _j
6587
- * @param {number} _colorPos
6711
+ * @param {number} _colorPos
6712
+ * @returns {string}
6588
6713
  */
6589
6714
  const getKeyConfigColor = (_j, _colorPos) => {
6590
6715
  let arrowColor = g_headerObj.setColor[_colorPos];
@@ -6612,6 +6737,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
6612
6737
  * @param {number} _len
6613
6738
  * @param {number} _j
6614
6739
  * @param {number} _scrollNum
6740
+ * @returns {number}
6615
6741
  */
6616
6742
  const changeTmpData = (_type, _len, _j, _scrollNum) => {
6617
6743
  const tmpNo = nextPos(g_keyObj[`${_type}${keyCtrlPtn}_${g_keycons[`${_type}GroupNum`]}`][_j], _scrollNum, _len);
@@ -6761,6 +6887,11 @@ const keyConfigInit = (_kcType = g_kcType) => {
6761
6887
  }
6762
6888
  }
6763
6889
  };
6890
+ /**
6891
+ * カラー・シャッフルグループ設定
6892
+ * @param {string} _type
6893
+ * @param {number} [_scrollNum=1]
6894
+ */
6764
6895
  const setGroup = (_type, _scrollNum = 1) => {
6765
6896
  g_keycons[`${_type}GroupNum`] = g_keycons[`${_type}Groups`][getNextNum(_scrollNum, `${_type}Groups`, g_keycons[`${_type}GroupNum`])];
6766
6897
  g_keyObj[`${_type}${keyCtrlPtn}`] = structuredClone(g_keyObj[`${_type}${keyCtrlPtn}_${g_keycons[`${_type}GroupNum`]}`]);
@@ -6774,15 +6905,15 @@ const keyConfigInit = (_kcType = g_kcType) => {
6774
6905
  * キーコンフィグ用設定ラベル
6775
6906
  * @param {string} _id
6776
6907
  * @param {string} _name
6777
- * @param {number} object.x
6778
- * @param {number} object.y
6779
- * @param {number} object.w
6780
- * @param {number} object.h
6781
- * @param {number} object.siz
6782
- * @param {string} object.align
6783
- * @param {...any} object.rest
6784
- * @param {...any} _classes
6785
- * @returns ラベル
6908
+ * @param {number} [object.x=g_btnX(5 / 6)]
6909
+ * @param {number} [object.y=0]
6910
+ * @param {number} [object.w=g_btnWidth(1 / 6)]
6911
+ * @param {number} [object.h=20]
6912
+ * @param {number} [object.siz=12]
6913
+ * @param {string} [object.align='left']
6914
+ * @param {...any} [object.rest]
6915
+ * @param {...any} _classes
6916
+ * @returns {HTMLDivElement}
6786
6917
  */
6787
6918
  const makeKCButtonHeader = (_id, _name, {
6788
6919
  x = g_btnX(5 / 6) - 30, y = 0, w = g_btnWidth(1 / 6), h = 20, siz = 12, align = C_ALIGN_LEFT, ...rest
@@ -6793,17 +6924,17 @@ const keyConfigInit = (_kcType = g_kcType) => {
6793
6924
  * @param {string} _id
6794
6925
  * @param {string} _text
6795
6926
  * @param {function} _func
6796
- * @param {number} object.x
6797
- * @param {number} object.y
6798
- * @param {number} object.w
6799
- * @param {number} object.h
6800
- * @param {number} object.siz
6801
- * @param {string} object.borderStyle
6802
- * @param {function} object.cxtFunc
6803
- * @param {...any} object.rest
6804
- * @param {string} _mainClass
6927
+ * @param {number} [object.x=g_btnX(5 / 6) - 20]
6928
+ * @param {number} [object.y=15]
6929
+ * @param {number} [object.w=g_btnWidth(1 / 6)]
6930
+ * @param {number} [object.h=18]
6931
+ * @param {number} [object.siz=g_limitObj.jdgCntsSiz]
6932
+ * @param {string} [object.borderStyle='solid']
6933
+ * @param {function} [object.cxtFunc]
6934
+ * @param {...any} [object.rest]
6935
+ * @param {string} [_mainClass=g_cssObj.button_RevOFF]
6805
6936
  * @param {...any} _classes
6806
- * @returns ボタン
6937
+ * @returns {HTMLDivElement}
6807
6938
  */
6808
6939
  const makeKCButton = (_id, _text, _func, { x = g_btnX(5 / 6) - 20, y = 15, w = g_btnWidth(1 / 6), h = 18,
6809
6940
  siz = g_limitObj.jdgCntsSiz, borderStyle = `solid`, cxtFunc, ...rest } = {}, _mainClass = g_cssObj.button_RevOFF, ..._classes) =>
@@ -6814,11 +6945,11 @@ const keyConfigInit = (_kcType = g_kcType) => {
6814
6945
  * @param {string} _id
6815
6946
  * @param {string} _directionFlg
6816
6947
  * @param {function} _func
6817
- * @param {number} object.x (x, y, w, h, siz)
6818
- * @param {number} object.y
6819
- * @param {number} object.w
6820
- * @param {number} object.h
6821
- * @param {number} object.siz
6948
+ * @param {number} [object.x=g_btnX(5 / 6) - 30]
6949
+ * @param {number} [object.y=15]
6950
+ * @param {number} [object.w=15]
6951
+ * @param {number} [object.h=20]
6952
+ * @param {number} [object.siz=g_limitObj.mainSiz]
6822
6953
  */
6823
6954
  const makeMiniKCButton = (_id, _directionFlg, _func, { x = g_btnX(5 / 6) - 30, y = 15, w = 15, h = 20, siz = g_limitObj.mainSiz } = {}) =>
6824
6955
  createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, { x, y, w, h, siz }, g_cssObj.button_Mini);
@@ -6826,9 +6957,9 @@ const keyConfigInit = (_kcType = g_kcType) => {
6826
6957
  /**
6827
6958
  * キーコンフィグ用グループ設定ラベル・ボタンの作成
6828
6959
  * @param {string} _type
6829
- * @param {number} object.baseX
6830
- * @param {number} object.baseY
6831
- * @param {string} object.cssName
6960
+ * @param {number} [object.baseX=g_btnX(5 / 6) - 20]
6961
+ * @param {number} [object.baseY=0]
6962
+ * @param {string} [object.cssName]
6832
6963
  */
6833
6964
  const makeGroupButton = (_type, { baseX = g_btnX(5 / 6) - 20, baseY = 0, cssName } = {}) => {
6834
6965
  if (g_headerObj[`${_type}Use`] && g_keycons[`${_type}Groups`].length > 1) {
@@ -6906,7 +7037,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
6906
7037
 
6907
7038
  /**
6908
7039
  * カーソル位置の変更
6909
- * @param {number} _nextj
7040
+ * @param {number} [_nextj] 次のカーソル位置
6910
7041
  */
6911
7042
  const changeConfigCursor = (_nextj = ++g_keycons.cursorNum % g_keycons.cursorNumList.length) => {
6912
7043
  g_keycons.cursorNum = _nextj;
@@ -6929,10 +7060,16 @@ const keyConfigInit = (_kcType = g_kcType) => {
6929
7060
  }
6930
7061
  }
6931
7062
  }
6932
-
6933
7063
  setKeyConfigCursor();
6934
7064
  };
6935
7065
 
7066
+ /**
7067
+ * 次のカーソル位置の取得
7068
+ * @param {number} _scrollNum
7069
+ * @param {string} _groupName
7070
+ * @param {string} _target
7071
+ * @returns {number}
7072
+ */
6936
7073
  const getNextNum = (_scrollNum, _groupName, _target) =>
6937
7074
  nextPos(g_keycons[_groupName].findIndex(value => value === _target), _scrollNum, g_keycons[_groupName].length);
6938
7075
 
@@ -7027,8 +7164,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
7027
7164
 
7028
7165
  /**
7029
7166
  * ColorTypeの制御
7030
- * @param {number} _scrollNum
7031
- * @param {boolean} _reloadFlg
7167
+ * @param {number} [_scrollNum=1]
7168
+ * @param {boolean} [_reloadFlg=true]
7032
7169
  */
7033
7170
  const setColorType = (_scrollNum = 1, _reloadFlg = true) => {
7034
7171
  const nextNum = getNextNum(_scrollNum, `colorTypes`, g_colorType);
@@ -7048,7 +7185,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
7048
7185
 
7049
7186
  /**
7050
7187
  * ImgTypeの制御
7051
- * @param {number} _scrollNum
7188
+ * @param {number} [_scrollNum=1]
7052
7189
  */
7053
7190
  const setImgType = (_scrollNum = 1) => {
7054
7191
  const nextNum = getNextNum(_scrollNum, `imgTypes`, g_imgType);
@@ -7115,8 +7252,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
7115
7252
  * @param {number} _j
7116
7253
  * @param {string} _type
7117
7254
  * @param {function} _func
7118
- * @param {number} object.x
7119
- * @param {number} object.y
7255
+ * @param {number} [object.x=0]
7256
+ * @param {number} [object.y=15]
7120
7257
  */
7121
7258
  const createColorPickWindow = (_j, _type, _func, { x = 0, y = 15 } = {}) =>
7122
7259
  createColorPicker(colorPickSprite, `pick${_type}${_j}`, _func, { x, y: y + 25 * _j });
@@ -7150,8 +7287,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
7150
7287
  * キーパターン検索
7151
7288
  * @param {number} _tempPtn
7152
7289
  * @param {number} _sign
7153
- * @param {boolean} _transKeyUse
7154
- * @param {boolean} _skipFlg
7290
+ * @param {boolean} [_transKeyUse=false]
7291
+ * @param {boolean} [_skipFlg=false]
7155
7292
  */
7156
7293
  const searchPattern = (_tempPtn, _sign, _transKeyUse = false, _skipFlg = false) => {
7157
7294
  let nextPtn = _tempPtn + _sign;
@@ -7191,8 +7328,8 @@ const keyConfigInit = (_kcType = g_kcType) => {
7191
7328
 
7192
7329
  /**
7193
7330
  * キーパターン変更時処理
7194
- * @param {number} _sign
7195
- * @param {boolean} _skipFlg
7331
+ * @param {number} [_sign=1]
7332
+ * @param {boolean} [_skipFlg=false]
7196
7333
  */
7197
7334
  const changePattern = (_sign = 1, _skipFlg = false) => {
7198
7335
 
@@ -7341,12 +7478,17 @@ const keyConfigInit = (_kcType = g_kcType) => {
7341
7478
  * 影矢印色の取得
7342
7479
  * @param {number} _colorPos
7343
7480
  * @param {string} _arrowColor
7481
+ * @returns {string}
7344
7482
  */
7345
7483
  const getShadowColor = (_colorPos, _arrowColor) => g_headerObj.setShadowColor[_colorPos] === `Default` ?
7346
7484
  _arrowColor : g_headerObj.setShadowColor[_colorPos];
7347
7485
 
7348
7486
  /**
7349
7487
  * キー数基礎情報の取得
7488
+ * @returns {{
7489
+ * keyCtrlPtn: string, keyNum: number, posMax: number,
7490
+ * divideCnt: number, keyGroupMaps: string[], keyGroupList: string[]
7491
+ * }}
7350
7492
  */
7351
7493
  const getKeyInfo = () => {
7352
7494
  const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
@@ -7403,7 +7545,7 @@ const changeSetColor = () => {
7403
7545
 
7404
7546
  /**
7405
7547
  * コンフィグの色変更
7406
- * @param {object} _obj
7548
+ * @param {HTMLDivElement} _obj
7407
7549
  * @param {string} _cssName
7408
7550
  */
7409
7551
  const changeConfigColor = (_obj, _cssName) => {
@@ -7415,7 +7557,7 @@ const changeConfigColor = (_obj, _cssName) => {
7415
7557
  * シャッフルグループの色変更
7416
7558
  * - デフォルト値と違う番号になった場合、色付けする
7417
7559
  * @param {string} _keyCtrlPtn キーコンフィグパターン
7418
- * @param {array} _vals シャッフルグループ番号(群)
7560
+ * @param {number[]} _vals シャッフルグループ番号(群)
7419
7561
  * @param {number} _j (-1: 全体に対して色付け, それ以外: 指定箇所のみ色付け)
7420
7562
  */
7421
7563
  const changeShuffleConfigColor = (_keyCtrlPtn, _vals, _j = -1) => {
@@ -7728,7 +7870,7 @@ const loadingScoreInit = async () => {
7728
7870
  * 譜面番号の取得
7729
7871
  * @param {number} _scoreId
7730
7872
  * @param {boolean} _scoreLockFlg
7731
- * @returns
7873
+ * @returns {number|string}
7732
7874
  */
7733
7875
  const setScoreIdHeader = (_scoreId = 0, _scoreLockFlg = false) => {
7734
7876
  if (!_scoreLockFlg && _scoreId > 0) {
@@ -7741,9 +7883,9 @@ const setScoreIdHeader = (_scoreId = 0, _scoreLockFlg = false) => {
7741
7883
 
7742
7884
  /**
7743
7885
  * 譜面ファイル番号の取得
7744
- * @param {number} _scoreId
7745
- * @param {boolean} _scoreLockFlg
7746
- * @returns
7886
+ * @param {number} [_scoreId=0]
7887
+ * @param {boolean} [_scoreLockFlg=false]
7888
+ * @returns {number|string}
7747
7889
  */
7748
7890
  const setDosIdHeader = (_scoreId = 0, _scoreLockFlg = false) => {
7749
7891
  if (_scoreLockFlg && g_headerObj.dosNos?.[_scoreId] > 0) {
@@ -7757,8 +7899,8 @@ const setDosIdHeader = (_scoreId = 0, _scoreLockFlg = false) => {
7757
7899
  /**
7758
7900
  * Mirror,Randomの適用
7759
7901
  * @param {number} _keyNum
7760
- * @param {array} _shuffleGroup
7761
- * @param {array} _style
7902
+ * @param {number[][]} _shuffleGroup
7903
+ * @param {number[][]} _style
7762
7904
  */
7763
7905
  const applyShuffle = (_keyNum, _shuffleGroup, _style) => {
7764
7906
  // 並べ替え用の配列を作成
@@ -7782,8 +7924,8 @@ const applyShuffle = (_keyNum, _shuffleGroup, _style) => {
7782
7924
  /**
7783
7925
  * Mirrorの適用
7784
7926
  * @param {number} _keyNum
7785
- * @param {array} _shuffleGroup
7786
- * @param {boolean} _swapFlg
7927
+ * @param {number[][]} _shuffleGroup
7928
+ * @param {boolean} [_swapFlg=false]
7787
7929
  */
7788
7930
  const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
7789
7931
 
@@ -7816,7 +7958,7 @@ const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
7816
7958
  /**
7817
7959
  * Turningの適用
7818
7960
  * @param {number} _keyNum
7819
- * @param {array} _shuffleGroup
7961
+ * @param {number[][]} _shuffleGroup
7820
7962
  */
7821
7963
  const applyTurning = (_keyNum, _shuffleGroup) => {
7822
7964
  const mirrorOrNot = _array => Math.random() >= 0.5 ? _array.reverse() : _array;
@@ -7830,7 +7972,7 @@ const applyTurning = (_keyNum, _shuffleGroup) => {
7830
7972
  /**
7831
7973
  * Randomの適用
7832
7974
  * @param {number} _keyNum
7833
- * @param {array} _shuffleGroup
7975
+ * @param {number[][]} _shuffleGroup
7834
7976
  */
7835
7977
  const applyRandom = (_keyNum, _shuffleGroup) => {
7836
7978
  // シャッフルグループごとにシャッフル(Fisher-Yates)
@@ -7847,7 +7989,7 @@ const applyRandom = (_keyNum, _shuffleGroup) => {
7847
7989
  /**
7848
7990
  * S-Randomの適用
7849
7991
  * @param {number} _keyNum
7850
- * @param {array} _shuffleGroup
7992
+ * @param {number[][]} _shuffleGroup
7851
7993
  * @param {string} _arrowHeader
7852
7994
  * @param {string} _frzHeader
7853
7995
  */
@@ -7941,9 +8083,10 @@ const applySRandom = (_keyNum, _shuffleGroup, _arrowHeader, _frzHeader) => {
7941
8083
  * @param {object} _dosObj
7942
8084
  * @param {number} _scoreId 譜面番号
7943
8085
  * @param {number} _preblankFrame 補完フレーム数
7944
- * @param {string} _dummyNo ダミー用譜面番号添え字
7945
- * @param {string} _keyCtrlPtn 選択キー及びパターン
7946
- * @param {boolean} _scoreAnalyzeFlg (default : false)
8086
+ * @param {string} [_dummyNo] ダミー用譜面番号添え字
8087
+ * @param {string} [_keyCtrlPtn] 選択キー及びパターン
8088
+ * @param {boolean} [_scoreAnalyzeFlg=false] 譜面詳細データのために必要分で読込を中断
8089
+ * @returns
7947
8090
  */
7948
8091
  const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
7949
8092
  _keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`, _scoreAnalyzeFlg = false) => {
@@ -7971,6 +8114,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
7971
8114
  /**
7972
8115
  * 矢印データの格納
7973
8116
  * @param {string} _data
8117
+ * @returns {number[]}
7974
8118
  */
7975
8119
  const storeArrowData = _data => hasVal(_data) ?
7976
8120
  splitLF(_data)?.join(``).split(`,`).filter(data => !isNaN(parseFloat(data))).map(data => calcFrame(data)).sort((_a, _b) => _a - _b) : [];
@@ -8004,6 +8148,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8004
8148
  * @param {string} _header
8005
8149
  * @param {number} _scoreNo
8006
8150
  * @param {string} _footer
8151
+ * @returns {number[]}
8007
8152
  */
8008
8153
  const setSpeedData = (_header, _scoreNo, _footer = `_data`) => {
8009
8154
  const dosSpeedData = getRefData(_header, `${_scoreNo}${_footer}`);
@@ -8034,6 +8179,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8034
8179
  /**
8035
8180
  * 個別・全体色変化データをマージして整列し、単純配列として返却
8036
8181
  * @param {string} _header
8182
+ * @returns {any[]}
8037
8183
  */
8038
8184
  const mergeColorData = (_header = ``) => {
8039
8185
  if (obj[`color${_header}Data`] === undefined) return [];
@@ -8046,6 +8192,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8046
8192
  * 後で個別・全体色変化をマージするため、二次元配列として返却
8047
8193
  * @param {string} _header
8048
8194
  * @param {number} _scoreNo
8195
+ * @returns {any[][]}
8049
8196
  */
8050
8197
  const setColorData = (_header, _scoreNo) => {
8051
8198
  const dosColorData = getRefData(_header, `${_scoreNo}_data`);
@@ -8148,6 +8295,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8148
8295
  * 矢印モーションデータの分解・格納(フレーム数, 矢印番号)
8149
8296
  * @param {string} _header
8150
8297
  * @param {number} _scoreNo
8298
+ * @returns {any[]}
8151
8299
  */
8152
8300
  const setCssMotionData = (_header, _scoreNo) => {
8153
8301
  const dosCssMotionData = getRefData(`${_header}Motion`, `${_scoreNo}_data`) || _dosObj[`${_header}Motion_data`];
@@ -8174,6 +8322,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8174
8322
  /**
8175
8323
  * スクロール変化データの分解
8176
8324
  * @param {number} _scoreNo
8325
+ * @returns {number[]}
8177
8326
  */
8178
8327
  const setScrollchData = (_scoreNo) => {
8179
8328
  const dosScrollchData = getRefData(`scrollch`, `${_scoreNo}_data`) || _dosObj.scrollch_data;
@@ -8201,6 +8350,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8201
8350
  * 例) |backA2_data=back_data| -> back_dataで定義された値を使用
8202
8351
  * @param {string} _header
8203
8352
  * @param {string} _dataName
8353
+ * @returns
8204
8354
  */
8205
8355
  const getRefData = (_header, _dataName) => {
8206
8356
  const data = _dosObj[`${_header}${_dataName}`];
@@ -8214,6 +8364,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8214
8364
  * 譜面データの優先順配列パターンの取得
8215
8365
  * @param {string} _type
8216
8366
  * @param {number} _scoreNo
8367
+ * @returns {string[]}
8217
8368
  */
8218
8369
  const getPriorityVal = (_type, _scoreNo) => [
8219
8370
  `${_type}${g_localeObj.val}${_scoreNo}_data`,
@@ -8224,7 +8375,8 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8224
8375
 
8225
8376
  /**
8226
8377
  * 歌詞表示、背景・マスクデータの優先順取得
8227
- * @param {array} _defaultHeaders
8378
+ * @param {string[]} _defaultHeaders
8379
+ * @returns {string[]}
8228
8380
  */
8229
8381
  const getPriorityHeader = (_defaultHeaders = []) => {
8230
8382
  if (_defaultHeaders.length > 0) {
@@ -8255,6 +8407,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8255
8407
  /**
8256
8408
  * 歌詞データの分解
8257
8409
  * @param {string} _scoreNo
8410
+ * @returns
8258
8411
  */
8259
8412
  const makeWordData = _scoreNo => {
8260
8413
  const wordDataList = [];
@@ -8294,6 +8447,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8294
8447
  * 多層歌詞データの格納処理
8295
8448
  * @param {object} _data
8296
8449
  * @param {boolean} _reverseFlg
8450
+ * @returns
8297
8451
  */
8298
8452
  const makeSpriteWordData = (_data, _reverseFlg = false) => {
8299
8453
  const wordData = [];
@@ -8353,7 +8507,8 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
8353
8507
  * 背景・マスク、スキン変更データの分解
8354
8508
  * @param {string} _header
8355
8509
  * @param {string} _scoreNo 譜面番号
8356
- * @param {array} object.resultTypes リザルトモーションの種類 (result, failedB, failedS)
8510
+ * @param {string[]} [object.resultTypes] リザルトモーションの種類 (result, failedB, failedS)
8511
+ * @returns
8357
8512
  */
8358
8513
  const makeBackgroundData = (_header, _scoreNo, { resultTypes = [] } = {}) => {
8359
8514
  const dataList = [];
@@ -8496,7 +8651,8 @@ const calcLifeVal = (_val, _allArrows) => Math.round(_val * g_headerObj.maxLifeV
8496
8651
  /**
8497
8652
  * 最終フレーム数の取得
8498
8653
  * @param {object} _dataObj
8499
- * @param {string} _keyCtrlPtn
8654
+ * @param {string} [_keyCtrlPtn]
8655
+ * @returns {number}
8500
8656
  */
8501
8657
  const getLastFrame = (_dataObj, _keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`) => {
8502
8658
 
@@ -8523,7 +8679,8 @@ const getLastFrame = (_dataObj, _keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj
8523
8679
  /**
8524
8680
  * 最初の矢印フレームの取得
8525
8681
  * @param {object} _dataObj
8526
- * @param {string} _keyCtrlPtn
8682
+ * @param {string} [_keyCtrlPtn]
8683
+ * @returns {number}
8527
8684
  */
8528
8685
  const getFirstArrowFrame = (_dataObj, _keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`) => {
8529
8686
 
@@ -8550,8 +8707,9 @@ const getFirstArrowFrame = (_dataObj, _keyCtrlPtn = `${g_keyObj.currentKey}_${g_
8550
8707
  /**
8551
8708
  * 開始フレームの取得
8552
8709
  * @param {number} _lastFrame
8553
- * @param {number} _fadein
8554
- * @param {number} _scoreId
8710
+ * @param {number} [_fadein=0]
8711
+ * @param {number} [_scoreId=g_scoreObj.scoreId]
8712
+ * @returns {number}
8555
8713
  */
8556
8714
  const getStartFrame = (_lastFrame, _fadein = 0, _scoreId = g_stateObj.scoreId) => {
8557
8715
  let frameNum = setIntVal(g_headerObj.startFrame?.[_scoreId], setIntVal(g_headerObj.startFrame?.[0], 0));
@@ -8565,6 +8723,7 @@ const getStartFrame = (_lastFrame, _fadein = 0, _scoreId = g_stateObj.scoreId) =
8565
8723
  * 各フレームごとの速度を格納
8566
8724
  * @param {object} _speedData
8567
8725
  * @param {number} _lastFrame
8726
+ * @returns {number[]}
8568
8727
  */
8569
8728
  const setSpeedOnFrame = (_speedData, _lastFrame) => {
8570
8729
 
@@ -8590,9 +8749,10 @@ const setMotionOnFrame = () => g_motionFunc[g_stateObj.motion](fillArray(g_heade
8590
8749
  /**
8591
8750
  * Boost用の適用関数
8592
8751
  * - ステップゾーンに近づくにつれて加速量を大きく/小さくする (16 → 85)
8593
- * @param {array} _frms
8752
+ * @param {number[]} _frms
8594
8753
  * @param {number} _spd
8595
- * @param {number} _pnFlg 正負(1 もしくは -1)
8754
+ * @param {number} [_pnFlg=1] 正負(1 もしくは -1)
8755
+ * @returns {number[]}
8596
8756
  */
8597
8757
  const getBoostTrace = (_frms, _spd, _pnFlg = 1) => {
8598
8758
  for (let j = C_MOTION_STD_POS + 1; j < C_MOTION_STD_POS + 70; j++) {
@@ -8604,7 +8764,8 @@ const getBoostTrace = (_frms, _spd, _pnFlg = 1) => {
8604
8764
  /**
8605
8765
  * Brake用の適用関数
8606
8766
  * - 初期は+2x、ステップゾーンに近づくにつれて加速量を下げる (20 → 34)
8607
- * @param {array} _frms
8767
+ * @param {number[]} _frms
8768
+ * @returns {number[]}
8608
8769
  */
8609
8770
  const getBrakeTrace = _frms => {
8610
8771
  for (let j = C_MOTION_STD_POS + 5; j < C_MOTION_STD_POS + 19; j++) {
@@ -8620,7 +8781,8 @@ const getBrakeTrace = _frms => {
8620
8781
  * 最初のフレームで出現する矢印が、ステップゾーンに到達するまでのフレーム数を取得
8621
8782
  * @param {number} _startFrame
8622
8783
  * @param {object} _speedOnFrame
8623
- * @param {object} _motionOnFrame
8784
+ * @param {object} _motionOnFrame
8785
+ * @returns {number}
8624
8786
  */
8625
8787
  const getFirstArrivalFrame = (_startFrame, _speedOnFrame, _motionOnFrame) => {
8626
8788
  let startY = 0;
@@ -8655,6 +8817,19 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8655
8817
  /** Motionの適用フレーム数 */
8656
8818
  g_workObj.motionFrame = [];
8657
8819
 
8820
+ /**
8821
+ * 矢印・フリーズアローのデータ格納処理
8822
+ * @param {number} _j
8823
+ * @param {number} _k
8824
+ * @param {number[]} _data
8825
+ * @param {number} _startPoint
8826
+ * @param {string} _header
8827
+ * @param {boolean} _frzFlg
8828
+ * @param {number} object.initY
8829
+ * @param {number} object.initBoostY
8830
+ * @param {number} object.arrivalFrame
8831
+ * @param {number} object.motionFrame
8832
+ */
8658
8833
  const setNotes = (_j, _k, _data, _startPoint, _header, _frzFlg = false, { initY, initBoostY, arrivalFrame, motionFrame } = {}) => {
8659
8834
  if (_startPoint >= 0) {
8660
8835
  const arrowAttrs = { pos: _j, initY, initBoostY, arrivalFrame, motionFrame };
@@ -8684,10 +8859,9 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8684
8859
  /**
8685
8860
  * 矢印・フリーズアローの出現位置計算
8686
8861
  * @param {number} _j
8687
- * @param {array} _data
8862
+ * @param {number[]} _data
8688
8863
  * @param {string} _header
8689
8864
  * @param {boolean} _frzFlg
8690
- * @returns
8691
8865
  */
8692
8866
  const calcNotes = (_j, _data, _header = ``, _frzFlg = false) => {
8693
8867
  if (_data === undefined) {
@@ -8855,6 +9029,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8855
9029
  * 歌詞表示、背景・マスク表示のフェードイン時調整処理
8856
9030
  * @param {string} _type
8857
9031
  * @param {object} _data
9032
+ * @returns
8858
9033
  */
8859
9034
  const calcAnimationData = (_type, _data) => {
8860
9035
 
@@ -8951,6 +9126,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
8951
9126
  * @param {number} _frame
8952
9127
  * @param {object} _speedOnFrame
8953
9128
  * @param {object} _motionOnFrame
9129
+ * @returns {{ frm: number, startY: number, arrivalFrm: number, motionFrm: number }}
8954
9130
  */
8955
9131
  const getArrowStartFrame = (_frame, _speedOnFrame, _motionOnFrame) => {
8956
9132
 
@@ -8979,6 +9155,7 @@ const getArrowStartFrame = (_frame, _speedOnFrame, _motionOnFrame) => {
8979
9155
  * @param {object} _speedOnFrame
8980
9156
  * @param {number} _startFrame
8981
9157
  * @param {number} _endFrame
9158
+ * @returns {number}
8982
9159
  */
8983
9160
  const getFrzLength = (_speedOnFrame, _startFrame, _endFrame) => {
8984
9161
  let frzLength = 0;
@@ -9174,8 +9351,8 @@ const pushCssMotions = (_header, _frame, _val, _styleName, _styleNameRev) => {
9174
9351
  * スクロール変化情報の格納
9175
9352
  * @param {string} _header
9176
9353
  * @param {number} _frameArrow
9177
- * @param {number} _frameStep
9178
9354
  * @param {number} _val
9355
+ * @param {number} _frameStep
9179
9356
  * @param {number} _scrollDir
9180
9357
  */
9181
9358
  const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir) => {
@@ -9388,6 +9565,7 @@ const getArrowSettings = () => {
9388
9565
  * @param {object} _localStorage 保存先のローカルストレージ名
9389
9566
  * @param {number} _keyNum
9390
9567
  * @param {string} _keyCtrlPtn
9568
+ * @returns {any[][]}
9391
9569
  */
9392
9570
  const setKeyCtrl = (_localStorage, _keyNum, _keyCtrlPtn) => {
9393
9571
  const localPtn = `${g_keyObj.currentKey}_-1`;
@@ -9555,7 +9733,7 @@ const mainInit = () => {
9555
9733
  ];
9556
9734
 
9557
9735
  // Appearanceのオプション適用時は一部描画を隠す
9558
- changeAppearanceFilter(g_stateObj.appearance, g_appearanceRanges.includes(g_stateObj.appearance) ?
9736
+ changeAppearanceFilter(g_appearanceRanges.includes(g_stateObj.appearance) ?
9559
9737
  g_hidSudObj.filterPos : g_hidSudObj.filterPosDefault[g_stateObj.appearance]);
9560
9738
 
9561
9739
  for (let j = 0; j < keyNum; j++) {
@@ -9875,17 +10053,15 @@ const mainInit = () => {
9875
10053
 
9876
10054
  // 曲中リトライ、タイトルバック
9877
10055
  if (setCode === g_kCdN[g_headerObj.keyRetry]) {
10056
+ g_audio.pause();
10057
+ clearTimeout(g_timeoutEvtId);
9878
10058
 
9879
10059
  if (g_isMac && keyIsShift()) {
9880
10060
  // Mac OS、IPad OSはDeleteキーが無いためShift+BSで代用
9881
- g_audio.pause();
9882
- clearTimeout(g_timeoutEvtId);
9883
10061
  titleInit();
9884
10062
 
9885
10063
  } else {
9886
10064
  // その他の環境では単にRetryに対応するキーのみで適用
9887
- g_audio.pause();
9888
- clearTimeout(g_timeoutEvtId);
9889
10065
  clearWindow();
9890
10066
  musicAfterLoaded();
9891
10067
  }
@@ -9904,12 +10080,12 @@ const mainInit = () => {
9904
10080
  }
9905
10081
 
9906
10082
  } else if (g_appearanceRanges.includes(g_stateObj.appearance) && g_stateObj.filterLock === C_FLG_OFF) {
10083
+ const MAX_FILTER_POS = 100;
10084
+ const MIN_FILTER_POS = 0;
9907
10085
  if (setCode === g_hidSudObj.pgDown[g_stateObj.appearance][g_stateObj.reverse]) {
9908
- changeAppearanceFilter(g_stateObj.appearance, g_hidSudObj.filterPos < 100 ?
9909
- g_hidSudObj.filterPos + 1 : g_hidSudObj.filterPos);
10086
+ changeAppearanceFilter(Math.min(g_hidSudObj.filterPos + 1, MAX_FILTER_POS));
9910
10087
  } else if (setCode === g_hidSudObj.pgUp[g_stateObj.appearance][g_stateObj.reverse]) {
9911
- changeAppearanceFilter(g_stateObj.appearance, g_hidSudObj.filterPos > 0 ?
9912
- g_hidSudObj.filterPos - 1 : g_hidSudObj.filterPos);
10088
+ changeAppearanceFilter(Math.max(g_hidSudObj.filterPos - 1, MIN_FILTER_POS));
9913
10089
  }
9914
10090
  }
9915
10091
  return blockCode(setCode);
@@ -10234,7 +10410,7 @@ const mainInit = () => {
10234
10410
 
10235
10411
  /**
10236
10412
  * 矢印生成
10237
- * @param {number} _attrs 矢印個別の属性
10413
+ * @param {object} _attrs 矢印個別の属性
10238
10414
  * (pos: 矢印種類, arrivalFrame: 到達フレーム数, initY: 初期表示位置,
10239
10415
  * initBoostY: Motion有効時の初期表示位置加算, motionFrame: アニメーション有効フレーム数)
10240
10416
  * @param {number} _arrowCnt 現在の判定矢印順
@@ -10255,13 +10431,29 @@ const mainInit = () => {
10255
10431
  const stepRoot = createEmptySprite(arrowSprite[dividePos], arrowName, {
10256
10432
  x: g_workObj.stepX[_j], y: firstPosY, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
10257
10433
  });
10434
+ /**
10435
+ * 矢印毎の属性情報
10436
+ */
10258
10437
  g_attrObj[arrowName] = {
10438
+ // 生存フレーム数
10259
10439
  cnt: _attrs.arrivalFrame + 1,
10440
+ // 生存フレーム数 (ストップ分除去、個別加速/Motionオプション用)
10260
10441
  boostCnt: _attrs.motionFrame,
10261
- boostSpd: g_workObj.boostSpd, dividePos: dividePos,
10262
- dir: g_workObj.scrollDir[_j], boostDir: g_workObj.boostDir,
10263
- prevY: firstPosY, y: firstPosY,
10442
+ // 個別加速量
10443
+ boostSpd: g_workObj.boostSpd,
10444
+ // ステップゾーン位置 (0: デフォルト, 1: リバース)
10445
+ dividePos: dividePos,
10446
+ // スクロール方向 (1: デフォルト, -1: リバース)
10447
+ dir: g_workObj.scrollDir[_j],
10448
+ // 個別加速方向 (1: 順方向加速, -1: 逆方向加速)
10449
+ boostDir: g_workObj.boostDir,
10450
+ // 前フレーム時の位置 (判定で使用)
10451
+ prevY: firstPosY,
10452
+ // 現フレーム時の位置
10453
+ y: firstPosY,
10264
10454
  };
10455
+ // 矢印色の設定
10456
+ // - 枠/塗りつぶし色: g_attrObj[arrowName].Arrow / ArrowShadow
10265
10457
  g_typeLists.arrowColor.forEach(val => g_attrObj[arrowName][`Arrow${val}`] = g_workObj[`${_name}${val}Colors`][_j]);
10266
10458
  arrowSprite[dividePos].appendChild(stepRoot);
10267
10459
 
@@ -10270,12 +10462,13 @@ const mainInit = () => {
10270
10462
  stepRoot.style.animationDuration = `${_attrs.arrivalFrame / g_fps}s`;
10271
10463
  }
10272
10464
 
10273
- // 内側塗りつぶし矢印は、下記の順で作成する。
10274
- // 後に作成するほど前面に表示される。
10275
-
10465
+ /**
10466
+ * 矢印オブジェクトの生成
10467
+ * - 後で生成されたものが手前に表示されるため、塗りつぶし ⇒ 枠の順で作成
10468
+ */
10276
10469
  // 矢印の内側を塗りつぶすか否か
10277
10470
  if (g_headerObj.setShadowColor[colorPos] !== ``) {
10278
- // 矢印の塗り部分
10471
+ // 矢印 (塗りつぶし)
10279
10472
  const arrShadow = createColorObject2(`${_name}Shadow${_j}_${_arrowCnt}`, {
10280
10473
  background: _shadowColor === `Default` ? _color : _shadowColor,
10281
10474
  rotate: g_workObj.arrowRtn[_j], styleName: `Shadow`,
@@ -10286,7 +10479,7 @@ const mainInit = () => {
10286
10479
  stepRoot.appendChild(arrShadow);
10287
10480
  }
10288
10481
 
10289
- // 矢印
10482
+ // 矢印 (枠)
10290
10483
  stepRoot.appendChild(createColorObject2(`${_name}Top${_j}_${_arrowCnt}`, {
10291
10484
  background: _color, rotate: g_workObj.arrowRtn[_j],
10292
10485
  }));
@@ -10319,7 +10512,7 @@ const mainInit = () => {
10319
10512
 
10320
10513
  /**
10321
10514
  * フリーズアロー生成
10322
- * @param {number} _attrs フリーズアロー個別の属性
10515
+ * @param {object} _attrs フリーズアロー個別の属性
10323
10516
  * (pos: 矢印種類, arrivalFrame: 到達フレーム数, initY: 初期表示位置,
10324
10517
  * initBoostY: Motion有効時の初期表示位置加算, motionFrame: アニメーション有効フレーム数)
10325
10518
  * @param {number} _arrowCnt 現在の判定フリーズアロー順
@@ -10341,13 +10534,40 @@ const mainInit = () => {
10341
10534
  const frzRoot = createEmptySprite(arrowSprite[dividePos], frzName, {
10342
10535
  x: g_workObj.stepX[_j], y: firstPosY, w: C_ARW_WIDTH, h: C_ARW_WIDTH + firstBarLength,
10343
10536
  });
10537
+ /**
10538
+ * フリーズアロー毎の属性情報
10539
+ */
10344
10540
  g_attrObj[frzName] = {
10541
+ // 生存フレーム数
10345
10542
  cnt: _attrs.arrivalFrame + 1,
10543
+ // 生存フレーム数 (ストップ分除去、個別加速/Motionオプション用)
10346
10544
  boostCnt: _attrs.motionFrame,
10347
- judgEndFlg: false, isMoving: true, frzBarLength: firstBarLength, keyUpFrame: 0,
10348
- boostSpd: g_workObj.boostSpd, dividePos: dividePos, dir: g_workObj.scrollDir[_j], boostDir: g_workObj.boostDir,
10349
- y: firstPosY, barY: C_ARW_WIDTH / 2 - firstBarLength * dividePos, btmY: firstBarLength * g_workObj.scrollDir[_j],
10545
+ // 判定終了フラグ (false: 未判定, true: 判定済)
10546
+ judgEndFlg: false,
10547
+ // 移動中フラグ (false: 押しっぱなしの状態, true: 移動中)
10548
+ isMoving: true,
10549
+ // フリーズアローの長さ
10550
+ frzBarLength: firstBarLength,
10551
+ // キーを離していたフレーム数 (基準値超えでNG判定)
10552
+ keyUpFrame: 0,
10553
+ // 個別加速量
10554
+ boostSpd: g_workObj.boostSpd,
10555
+ // ステップゾーン位置 (0: デフォルト, 1: リバース)
10556
+ dividePos: dividePos,
10557
+ // スクロール方向 (1: デフォルト, -1: リバース)
10558
+ dir: g_workObj.scrollDir[_j],
10559
+ // 個別加速方向 (1: 順方向加速, -1: 逆方向加速)
10560
+ boostDir: g_workObj.boostDir,
10561
+ // 現フレーム時のフリーズアロー本体の位置
10562
+ y: firstPosY,
10563
+ // フリーズアロー(帯)の相対位置
10564
+ barY: C_ARW_WIDTH / 2 - firstBarLength * dividePos,
10565
+ // フリーズアロー(対矢印)の相対位置
10566
+ btmY: firstBarLength * g_workObj.scrollDir[_j],
10350
10567
  };
10568
+ // フリーズアロー色の設定
10569
+ // - 通常時 (矢印枠/矢印塗りつぶし/帯): g_attrObj[frzName].Normal / NormalShadow / NormalBar
10570
+ // - ヒット時 (矢印枠/矢印塗りつぶし/帯): g_attrObj[frzName].Hit / HitShadow / HitBar
10351
10571
  g_typeLists.frzColor.forEach(val => g_attrObj[frzName][val] = g_workObj[`${_name}${val}Colors`][_j]);
10352
10572
  arrowSprite[dividePos].appendChild(frzRoot);
10353
10573
 
@@ -10357,8 +10577,10 @@ const mainInit = () => {
10357
10577
  }
10358
10578
  let shadowColor = _shadowColor === `Default` ? _normalColor : _shadowColor;
10359
10579
 
10360
- // フリーズアローは、下記の順で作成する。
10361
- // 後に作成するほど前面に表示される。
10580
+ /**
10581
+ * フリーズアローオブジェクトの生成
10582
+ * - 後で生成されたものが手前に表示されるため、以下の順で作成
10583
+ */
10362
10584
  multiAppend(frzRoot,
10363
10585
 
10364
10586
  // フリーズアロー帯(frzBar)
@@ -10717,32 +10939,32 @@ const mainInit = () => {
10717
10939
 
10718
10940
  /**
10719
10941
  * アルファマスクの再描画 (Appearance: Hidden+, Sudden+ 用)
10720
- * @param {string} _appearance
10721
10942
  * @param {number} _num
10722
10943
  */
10723
- const changeAppearanceFilter = (_appearance, _num = 10) => {
10944
+ const changeAppearanceFilter = (_num = 10) => {
10945
+ const MAX_FILTER_POS = 100;
10724
10946
  const topNum = g_hidSudObj[g_stateObj.appearance];
10725
10947
  const bottomNum = (g_hidSudObj[g_stateObj.appearance] + 1) % 2;
10726
- if (_appearance === `Hid&Sud+` && _num > 50) {
10727
- _num = 50;
10948
+ if (g_stateObj.appearance === `Hid&Sud+` && _num > MAX_FILTER_POS / 2) {
10949
+ _num = MAX_FILTER_POS / 2;
10728
10950
  }
10729
10951
 
10730
- const numPlus = (_appearance === `Hid&Sud+` ? _num : `0`);
10952
+ const numPlus = (g_stateObj.appearance === `Hid&Sud+` ? _num : 0);
10731
10953
  const topShape = `inset(${_num}% 0% ${numPlus}% 0%)`;
10732
10954
  const bottomShape = `inset(${numPlus}% 0% ${_num}% 0%)`;
10733
10955
 
10734
10956
  $id(`arrowSprite${topNum}`).clipPath = topShape;
10735
10957
  $id(`arrowSprite${bottomNum}`).clipPath = bottomShape;
10736
10958
 
10737
- $id(`filterBar0`).top = wUnit(g_posObj.arrowHeight * _num / 100 + g_stateObj.hitPosition);
10738
- $id(`filterBar1`).top = wUnit(g_posObj.arrowHeight * (100 - _num) / 100 - g_stateObj.hitPosition);
10959
+ $id(`filterBar0`).top = wUnit(g_posObj.arrowHeight * _num / MAX_FILTER_POS + g_stateObj.hitPosition);
10960
+ $id(`filterBar1`).top = wUnit(g_posObj.arrowHeight * (MAX_FILTER_POS - _num) / MAX_FILTER_POS - g_stateObj.hitPosition);
10739
10961
 
10740
- if (g_appearanceRanges.includes(_appearance)) {
10962
+ if (g_appearanceRanges.includes(g_stateObj.appearance)) {
10741
10963
  $id(`filterView`).top =
10742
10964
  $id(`filterBar${g_hidSudObj.std[g_stateObj.appearance][g_stateObj.reverse]}`).top;
10743
10965
  filterView.textContent = `${_num}%`;
10744
10966
 
10745
- if (_appearance !== `Hid&Sud+` && g_workObj.dividePos.every(v => v === g_workObj.dividePos[0])) {
10967
+ if (g_stateObj.appearance !== `Hid&Sud+` && g_workObj.dividePos.every(v => v === g_workObj.dividePos[0])) {
10746
10968
  $id(`filterBar${(g_hidSudObj.std[g_stateObj.appearance][g_stateObj.reverse] + 1) % 2}`).display = C_DIS_NONE;
10747
10969
  }
10748
10970
  g_hidSudObj.filterPos = _num;
@@ -10756,7 +10978,8 @@ const changeAppearanceFilter = (_appearance, _num = 10) => {
10756
10978
  * @param {string} _class
10757
10979
  * @param {number} _heightPos
10758
10980
  * @param {string|number} _text
10759
- * @param {string} _display 表示有無 (inherit: 表示 / none: 非表示)
10981
+ * @param {string} [_display='inherit'] 表示有無 (inherit: 表示 / none: 非表示)
10982
+ * @returns {HTMLDivElement}
10760
10983
  */
10761
10984
  const makeCounterSymbol = (_id, _x, _class, _heightPos, _text, _display = C_DIS_INHERIT) => {
10762
10985
  return createDivCss2Label(_id, _text, {
@@ -10770,7 +10993,7 @@ const makeCounterSymbol = (_id, _x, _class, _heightPos, _text, _display = C_DIS_
10770
10993
  * ステップゾーンの表示・非表示切替
10771
10994
  * @param {number} _j
10772
10995
  * @param {string} _display
10773
- * @param {number} _alpha
10996
+ * @param {number} [_alpha=1]
10774
10997
  */
10775
10998
  const appearStepZone = (_j, _display, _alpha = 1) => {
10776
10999
  $id(`stepRoot${_j}`).display = _display;
@@ -10780,8 +11003,8 @@ const appearStepZone = (_j, _display, _alpha = 1) => {
10780
11003
  /**
10781
11004
  * 部分キーのステップゾーン出現処理
10782
11005
  * @param {number} _j
10783
- * @param {array} _targets
10784
- * @param {array} _alphas ステップゾーン毎の可視状況 (style.opacity の値)
11006
+ * @param {string[]} _targets
11007
+ * @param {number[]} [_alphas] ステップゾーン毎の可視状況 (style.opacity の値)
10785
11008
  */
10786
11009
  const appearKeyTypes = (_j, _targets, _alphas = fillArray(_targets.length, 1)) => {
10787
11010
  appearStepZone(_j, C_DIS_NONE);
@@ -10794,8 +11017,8 @@ const appearKeyTypes = (_j, _targets, _alphas = fillArray(_targets.length, 1)) =
10794
11017
 
10795
11018
  /**
10796
11019
  * 個別・全体色変化
10797
- * @param {array} _mkColor
10798
- * @param {array} _mkColorCd
11020
+ * @param {number[]} _mkColor
11021
+ * @param {string[]} _mkColorCd
10799
11022
  * @param {string} _header
10800
11023
  * @param {string} _name
10801
11024
  */
@@ -10857,7 +11080,7 @@ const changeStepY = (_frameNum) =>
10857
11080
  * @param {number} _j
10858
11081
  * @param {number} _k
10859
11082
  * @param {string} _name
10860
- * @param {number} _difFrame
11083
+ * @param {number} [_difFrame=0]
10861
11084
  */
10862
11085
  const changeHitFrz = (_j, _k, _name, _difFrame = 0) => {
10863
11086
  const frzNo = `${_j}_${_k}`;
@@ -10894,6 +11117,7 @@ const changeHitFrz = (_j, _k, _name, _difFrame = 0) => {
10894
11117
  * フリーズアロー(ヒット時)の色変更
10895
11118
  * - 生成時以降で全体色変化がある場合はその値へ置き換える
10896
11119
  * @param {string} _type
11120
+ * @returns {string}
10897
11121
  */
10898
11122
  const getColor = (_type) => {
10899
11123
  const cColor = g_workObj[`${_name}${_type}Colors`][_j];
@@ -10943,11 +11167,13 @@ const changeFailedFrz = (_j, _k) => {
10943
11167
  /**
10944
11168
  * キーを押したかどうかを判定
10945
11169
  * @param {number} _keyCode
11170
+ * @returns {boolean}
10946
11171
  */
10947
11172
  const keyIsDown = _keyCode => g_inputKeyBuffer[_keyCode];
10948
11173
 
10949
11174
  /**
10950
11175
  * 押したキーがシフトキーかどうかを判定
11176
+ * @returns {boolean}
10951
11177
  */
10952
11178
  const keyIsShift = () => keyIsDown(g_kCdNameObj.shiftLKey) || keyIsDown(g_kCdNameObj.shiftRKey);
10953
11179
 
@@ -11064,7 +11290,7 @@ const displayDiff = (_difFrame, _fjdg = ``, _justFrames = g_headerObj.justFrames
11064
11290
 
11065
11291
  /**
11066
11292
  * ライフゲージバーの色、数値を変更
11067
- * @param {string} _state
11293
+ * @param {string} [_state='']
11068
11294
  */
11069
11295
  const changeLifeColor = (_state = ``) => {
11070
11296
  const lblLife = document.getElementById(`lblLife`);
@@ -11099,7 +11325,7 @@ const lifeRecovery = () => {
11099
11325
 
11100
11326
  /**
11101
11327
  * ゲージダメージ処理
11102
- * @param {boolean} _excessive 空押し判定有無
11328
+ * @param {boolean} [_excessive=false] 空押し判定有無
11103
11329
  */
11104
11330
  const lifeDamage = (_excessive = false) => {
11105
11331
  g_workObj.lifeVal -= g_workObj.lifeDmg * (_excessive ? 0.25 : 1);
@@ -11116,7 +11342,7 @@ const lifeDamage = (_excessive = false) => {
11116
11342
  * 判定キャラクタの表示、判定済矢印数・判定数のカウンタ
11117
11343
  * @param {string} _name
11118
11344
  * @param {string} _character
11119
- * @param {string} _fjdg
11345
+ * @param {string} [_fjdg='']
11120
11346
  */
11121
11347
  const changeJudgeCharacter = (_name, _character, _fjdg = ``) => {
11122
11348
  g_resultObj[_name]++;
@@ -11244,7 +11470,7 @@ const checkJudgment = (_difCnt) => {
11244
11470
  /**
11245
11471
  * クリア表示
11246
11472
  * @param {string} _state
11247
- * @returns
11473
+ * @returns {string}
11248
11474
  */
11249
11475
  const resultViewText = _state => _state === `` ? `` :
11250
11476
  `<span class="result_${toCapitalize(_state)}">${g_lblNameObj[_state]}</span>`;
@@ -11399,6 +11625,7 @@ const resultInit = () => {
11399
11625
  * @param {string} _flg
11400
11626
  * @param {string|boolean} _defaultSet デフォルト値
11401
11627
  * @param {string} _displayText
11628
+ * @returns {string}
11402
11629
  */
11403
11630
  const withOptions = (_flg, _defaultSet, _displayText = _flg) =>
11404
11631
  (_flg !== _defaultSet ? getStgDetailName(_displayText) : ``);
@@ -11472,11 +11699,11 @@ const resultInit = () => {
11472
11699
 
11473
11700
  /**
11474
11701
  * キャラクタ、スコア描画のID共通部、色CSS名、スコア変数名
11475
- * @param {number} pos 表示位置(縦)
11476
- * @param {string} id 表示用ラベルフッター
11477
- * @param {string} color CSS用ラベルフッター
11478
- * @param {string} label 表示名
11479
- * @param {string} dfColor 表示する文字のカラーコード (リザルト画像で使用)
11702
+ * @property {number} pos 表示位置(縦)
11703
+ * @property {string} id 表示用ラベルフッター
11704
+ * @property {string} color CSS用ラベルフッター
11705
+ * @property {string} label 表示名
11706
+ * @property {string} dfColor 表示する文字のカラーコード (リザルト画像で使用)
11480
11707
  */
11481
11708
  const jdgScoreObj = {
11482
11709
  ii: { pos: 0, id: `Ii`, color: `ii`, label: g_lblNameObj.j_ii, dfColor: `#66ffff`, },
@@ -11824,7 +12051,7 @@ const resultInit = () => {
11824
12051
  * @param {object} _posObj
11825
12052
  * @param {function} _func
11826
12053
  * @param {...any} _cssClass
11827
- * @returns
12054
+ * @returns {HTMLDivElement}
11828
12055
  */
11829
12056
  const resetCommonBtn = (_id, _name, _posObj, _func, _cssClass) =>
11830
12057
  createCss2Button(_id, _name, () => {
@@ -11948,7 +12175,7 @@ const resultInit = () => {
11948
12175
  * @param {string} object.tweetFrzJdg フリーズアロー判定状況
11949
12176
  * @param {string} object.tweetMaxCombo コンボ数状況
11950
12177
  * @param {string} object.baseTwitUrl X投稿用URL
11951
- * @returns
12178
+ * @returns {string}
11952
12179
  */
11953
12180
  const makeResultText = (_format, {
11954
12181
  hashTag, musicTitle, tweetDifData, tuning, rankMark, playStyleData,
@@ -11975,8 +12202,9 @@ const makeResultText = (_format, {
11975
12202
  * @param {number} _heightPos
11976
12203
  * @param {string} _text
11977
12204
  * @param {string} _align
11978
- * @param {number} object.w
11979
- * @param {number} object.siz
12205
+ * @param {number} [object.w=400]
12206
+ * @param {number} [object.siz=g_limitObj.mainSiz]
12207
+ * @returns {HTMLDivElement}
11980
12208
  */
11981
12209
  const makeCssResultPlayData = (_id, _x, _class, _heightPos, _text, _align = C_ALIGN_CENTER, { w = 400, siz = g_limitObj.mainSiz } = {}) =>
11982
12210
  createDivCss2Label(_id, _text, {
@@ -11991,6 +12219,7 @@ const makeCssResultPlayData = (_id, _x, _class, _heightPos, _text, _align = C_AL
11991
12219
  * @param {number} _heightPos
11992
12220
  * @param {string} _text
11993
12221
  * @param {string} _align
12222
+ * @returns {HTMLDivElement}
11994
12223
  */
11995
12224
  const makeCssResultSymbol = (_id, _x, _class, _heightPos, _text, _align = C_ALIGN_LEFT) =>
11996
12225
  makeCssResultPlayData(_id, _x, _class, _heightPos, _text, _align, { w: 150, siz: g_limitObj.jdgCntsSiz });