PageSourceSearch

https://www.p-portal.go.jp/pps-web-biz/resources/app/javascript/common/functions.js

js p-portal.go.jp collected 2026-10-03 21:38:29 UTC 24,080 bytes, 636 lines download raw bytes

1$(function () {
2  // ----------
3  // フォントサイズ切り替え
4  // 
5  // フォントサイズ切り替え(ロード時)
6  var font_size = localStorage.getItem('font-size');
7  if (font_size) {
8    $('[data-role="font-size-change"] input[type="radio"][value="' + font_size + '"]').prop('checked', true);
9    $('html').removeClass('size-m size-l size-ll').addClass(font_size);
10  }
11
12  // フォントサイズ切り替え(トグル)
13  $('[data-role="font-size-change"] input[type="radio"]').on('click', function (e) {
14    var $current_target = $(e.currentTarget);
15    var font_size = $current_target.val();
16    localStorage.setItem('font-size', font_size);
17    $('html').removeClass('size-m size-l size-ll').addClass(font_size);
18    // 左右位置設定
19    $('[data-role="tooltip"]').each(function (i, o) {
20      setTooltipPos($(o));
21    });
22  });
23
24
25  // ----------
26  // ダミーリンク(href="#")時のスクロール対応
27  // 
28  $('a[href="#"]').click(function () {
29    //console.log($(this).parent().attr('id'));
30    if ($(this).parent().attr('id') == 'pagetop') {
31      // 無効にしない
32    } else {
33      return false;
34    }
35  });
36
37
38  // ----------
39  // pagetop
40  // 
41  var $pagetop = $('#pagetop');
42  var $operation_btns = $('#operation_btns');
43
44  // operationボタンがない場合は位置を少し下げる
45  if (!$operation_btns.length) {
46    if ($operation_btns.hasClass('fixed')) {
47      $pagetop.addClass('no-operation-btns');
48    }
49  } else {
50    // operationボタンが固定の場合は位置を上げる
51    if ($operation_btns.hasClass('fixed')) {
52      $pagetop.addClass('fixed-operation-btns');
53    }
54  }
55
56  // pagetop スクロールしたら表示する
57  $pagetop.hide();
58  showPagetopBtn();
59  $(window).scroll(function () {
60    showPagetopBtn();
61  });
62
63  function showPagetopBtn() {
64    //スクロール位置が100でボタンを表示
65    if ($(this).scrollTop() > 50) {
66      $pagetop.fadeIn();
67    } else {
68      $pagetop.fadeOut();
69    }
70  }
71
72
73  // ----------
74  // saie-nav アコーディオン
75  // 
76  $('[data-role="side-nav-acc"] a').on('click', function (e) {
77    var $current_target = $(e.currentTarget);
78    var $next_target = $current_target.next('ul');
79    if ($current_target.hasClass('open')) {
80      $current_target.removeClass('open').addClass('close');
81      $next_target.slideUp('fast', function () {
82        $next_target.removeClass('open').addClass('close');
83      });
84      return false;
85    } else if ($current_target.hasClass('close')) {
86      $current_target.removeClass('close').addClass('open');
87      $next_target.slideDown('fast', function () {
88        $next_target.removeClass('close').addClass('open');
89      });
90      return false;
91    }
92  });
93
94
95  // ----------
96  // tab
97  // 
98  $('[data-role="tab-change"]').on('click', function (e) {
99    var $current_target = $(e.currentTarget);
100    var target_id = $current_target.attr('href');
101    var $target = $(target_id);
102    history.pushState(null, null, target_id);
103
104    $current_target.addClass('selected').parent('li').siblings('li').children('a').removeClass('selected');
105    $target.removeClass('hide').addClass('show').siblings('.tab-content').removeClass('show').addClass('hide');
106    return false;
107  });
108
109
110  // ----------
111  // tooltip
112  // 
113
114  // tooltip表示
115  $('[data-role="tooltip"]').on('click', function (e) {
116    var $current_target = $(e.currentTarget);
117    var $target_wrap = $current_target.closest('.tooltip-wrap');
118    // 左右位置設定
119    setTooltipPos($current_target);
120    // 表示
121    if ($target_wrap.hasClass('show')) {
122      $target_wrap.removeClass('show').addClass('hide');
123    } else {
124      $target_wrap.removeClass('hide').addClass('show');
125    }
126    return false;
127  });
128
129  // tooltip非表示
130  $('[data-role="tooltip-close"]').on('click', function (e) {
131    var $current_target = $(e.currentTarget);
132    var $target_wrap = $current_target.closest('.tooltip-wrap.show');
133    $target_wrap.removeClass('show').addClass('hide');
134    return false;
135  });
136
137  // 左右位置判定/設定
138  function setTooltipPos($target) {
139    $target.next('.tooltip').removeClass('right');
140    if (($(window).width() / 2) < $target.offset().left) {
141      // 右半分
142      $target.next('.tooltip').addClass('right');
143    }
144  }
145
146
147  // ----------
148  // 開閉
149  // 
150  $('[data-role="expand"]').on('click', function (e) {
151    var $current_target = $(e.currentTarget);
152    var $next_target = $current_target.next('[data-role="expand-content"]');
153    var arr_expand_text = $current_target.data('expandText').split(',');
154    if ($current_target.hasClass('open')) {
155      $current_target.text(arr_expand_text[1]);
156      $current_target.removeClass('open').addClass('close');
157      $next_target.slideUp('fast', function () {
158        $next_target.removeClass('open').addClass('close');
159      });
160    } else if ($current_target.hasClass('close')) {
161      $current_target.text(arr_expand_text[0]);
162      $current_target.removeClass('close').addClass('open');
163      $next_target.slideDown('fast', function () {
164        $next_target.removeClass('close').addClass('open');
165      });
166    }
167  });
168
169
170  // ----------
171  // ラジオボタン/セレクトでenable/disabled切り替え
172  // 
173  $('[data-role*="enable-change"] input[type="radio"], [data-role*="enable-change"] select').on('change', function (e) {
174    var $current_target = $(e.currentTarget);
175    var $current_wrap = $current_target.closest('[data-role*="enable-change"]');
176    var arr_target_id = $current_wrap.data('enableChangeTarget').split(',');
177    for (let i in arr_target_id) {
178      let enable_change = ($current_target.prop('tagName') == 'SELECT') ? $current_target.children('option:selected').data('enableChange') : $current_target.data('enableChange');
179      let $target = $('[data-enable-change-id="' + arr_target_id[i] + '"]');
180      if (enable_change == '') {
181        $target.prop('disabled', false);
182        $target.parent('.frm-datepicker, .frm-datepicker-b').removeClass('disabled');
183      } else {
184        $target.prop('disabled', true);
185        $target.parent('.frm-datepicker, .frm-datepicker-b').addClass('disabled');
186      }
187    }
188    if ($current_wrap.data('enableChangeRelatedTarget')) {
189      let arr_related_target_id = $current_wrap.data('enableChangeRelatedTarget').split(',');
190      for (let i in arr_related_target_id) {
191        let enable_change = ($current_target.prop('tagName') == 'SELECT') ? $current_target.children('option:selected').data('enableChange') : $current_target.data('enableChange');
192        let $target = $('[data-enable-change-related-id="' + arr_related_target_id[i] + '"]');
193        if (enable_change == '') {
194          $target.prop('disabled', true);
195          $target.parent('.frm-datepicker, .frm-datepicker-b').removeClass('disabled');
196        } else {
197          $target.prop('disabled', false);
198          $target.parent('.frm-datepicker, .frm-datepicker-b').addClass('disabled');
199        }
200      }
201    }
202  });
203
204
205  // ----------
206  // 全チェック
207  // 
208  $('[data-role*="all-check"] input[type="checkbox"][data-all-check]').on('click', function (e) {
209    var $current_target = $(e.currentTarget);
210    var $current_wrap = $current_target.closest('[data-role*="all-check"]');
211    // 全チェック
212    if ($current_target.is(':checked') && $current_target.data('allCheck') == 'all') {
213      $current_wrap.find('input[type="checkbox"][data-all-check]').prop('checked', true);
214    } else if (!$current_target.is(':checked') && $current_target.data('allCheck') == 'all') {
215      $current_wrap.find('input[type="checkbox"][data-all-check]').prop('checked', false);
216    }
217    // 個別のチェック時に全チェックボックスON/OFF
218    if ($current_wrap.find('input[type="checkbox"][data-all-check!="all"]').length ==
219      $current_wrap.find('input[type="checkbox"][data-all-check!="all"]:checked').length) {
220      $current_wrap.find('input[type="checkbox"][data-all-check="all"]').prop('checked', true);
221    } else {
222      $current_wrap.find('input[type="checkbox"][data-all-check="all"]').prop('checked', false);
223    }
224  });
225
226
227  // ----------
228  // ボタンクリックで全チェック
229  // 
230  $('[data-role*="all-check-toggle"]').on('click', function (e) {
231    var $current_target = $(e.currentTarget);
232    var target_id = $current_target.data('allCheckToggleTarget');
233    var $target_table = $('[data-all-check-toggle-id="' + target_id + '"]');
234    if ($current_target.data('role') == 'all-check-toggle-on') {
235      $target_table.find('input[type="checkbox"][data-all-check-toggle]').prop('checked', true);
236    } else if ($current_target.data('role') == 'all-check-toggle-off') {
237      $target_table.find('input[type="checkbox"][data-all-check-toggle]').prop('checked', false);
238    }
239  });
240
241
242  // ----------
243  // チェックでenable/disabled切り替え
244  // 
245  $('[data-role*="check-enable-change"] input[type="checkbox"]').on('change', function (e) {
246    var $current_target = $(e.currentTarget);
247    var $current_wrap = $current_target.closest('[data-role*="check-enable-change"]');
248    var arr_target_id = $current_wrap.data('checkEnableChangeTarget').split(',');
249    for (var i in arr_target_id) {
250      let $target = $('[data-check-enable-change-id="' + arr_target_id[i] + '"]');
251      if ($current_wrap.find('input[type="checkbox"][data-all-check!="all"]:checked').length > 0) {
252        $target.prop('disabled', false);
253        $target.parent('.frm-datepicker, .frm-datepicker-b').addClass('disabled');
254      } else {
255        $target.prop('disabled', true);
256        $target.parent('.frm-datepicker, .frm-datepicker-b').removeClass('disabled');
257      }
258    }
259  });
260
261  $('[data-role*="check-count"] input[type="checkbox"]').on('change', function (e) {
262    var $current_target = $(e.currentTarget);
263    var $current_wrap = $current_target.closest('[data-role*="check-count"]');
264    var arr_target_id = $current_wrap.data('checkCountTarget').split(',');
265    for (var i in arr_target_id) {
266      $('[data-check-count-id="' + arr_target_id[i] + '"]').text($current_wrap.find('input[type="checkbox"][data-all-check!="all"]:checked').length);
267    }
268  });
269
270
271  // ----------
272  // チェック:どちらか一方のグループしかチェックできないようにする
273  // 
274  $('[data-check-group]').on('click', function (e) {
275    var $current_target = $(e.currentTarget);
276    var current_group = $current_target.data('checkGroup');
277    var $group_target = $('[name="' + $current_target.attr('name') + '"]');
278    $group_target.each(function (i, o) {
279      if (current_group != $(o).data('checkGroup')) {
280        $(o).prop('checked', false);
281      }
282    });
283  });
284
285
286
287  // ----------
288  // ラジオ+チェック
289  // 選択していないラジオボタン配下のチェックボックスはチェックを外す
290  // 
291  $('[data-radio-check-group-target]').on('click', function (e) {
292    var $current_target = $(e.currentTarget);
293    var current_data = $current_target.data('radioCheckGroupTarget');
294    var current_group = current_data.split(',')[0];
295    var current_group_child = current_data.split(',')[1];
296    var $group_target = $('[name="' + current_group + '"]');
297    if ($group_target) {
298      $group_target.each(function (i, o) {
299        if ($(o).data('radioCheckGroup') != current_group_child) {
300          $(o).prop('checked', false);
301        }
302      });
303    }
304  });
305
306  $('[data-radio-check-group]').on('click', function (e) {
307    var $current_target = $(e.currentTarget);
308    $('[data-radio-check-group-target*=",' + $current_target.data('radioCheckGroup') + '"]').trigger('click');
309  });
310
311  $('[data-all-radio-check-group-target').on('click', function (e) {
312    var $current_target = $(e.currentTarget);
313    $('[data-radio-check-group-target*=",' + $current_target.data('allRadioCheckGroupTarget') + '"]').trigger('click');
314  });
315
316
317
318  // ----------
319  // セレクトでenable/disabled切り替え
320  // 
321  $('[data-role*="group-state-change"]').on('change', function (e) {
322    var $current_target = $(e.currentTarget);
323    var current_id = $current_target.data('groupStateChangeId');
324    var arr_target_id = $current_target.data('groupStateChangeTarget').split(',');
325    var current_index = arr_target_id.indexOf(current_id);
326    var enable_change = $current_target.children('option:selected').data('groupStateChange');
327    if (enable_change == '') {
328      // 自分の次をenabledにする
329      $('[data-group-state-change-id="' + arr_target_id[current_index + 1] + '"]').prop('disabled', false);
330      // 自分以降のセレクトの選択状態を判定してenable/disabled切り替え
331      //(最後のセレクトは対象外)
332      for (var i = (current_index + 1); i < (arr_target_id.length - 1); i++) {
333        if ($('[data-group-state-change-id="' + arr_target_id[i] + '"]').children('option:selected').data('groupStateChange') == '') {
334          $('[data-group-state-change-id="' + arr_target_id[i + 1] + '"]').prop('disabled', false);
335        }
336      }
337    } else {
338      // 自分以降すべてdisabledにする
339      for (var j = (current_index + 1); j < arr_target_id.length; j++) {
340        $('[data-group-state-change-id="' + arr_target_id[j] + '"]').prop('disabled', true);
341      }
342    }
343  });
344
345
346  // ----------
347  // 表組/カード切り替え
348  // 
349  $('[data-role="table-change"] input[type="radio"]').on('change', function (e) {
350    var $current_target = $(e.currentTarget);
351    var $current_wrap = $current_target.closest('[data-role="table-change"]');
352    var target_id = $current_wrap.data('tableChangeTarget');
353    var $target = $('[data-table-change-id="' + target_id + '"]');
354    var table_type = $current_target.val();
355    if (table_type == 'list') {  // 通常のテーブル
356      $target.removeClass('card');
357    } else if (table_type == 'card') {  // カード型
358      $target.addClass('card');
359    }
360  });
361
362
363  // ----------
364  // 表組:行開閉
365  // 
366  $('[data-role="expand-tr"]').on('click', function (e) {
367    var $current_target = $(e.currentTarget);
368    var $parent_target = $current_target.closest('tr');
369    var $target_wrap = $parent_target.next('[data-role="expand-tr-content"]');
370    var $target = $target_wrap.find('td > div');
371    if ($current_target.hasClass('open')) {
372      $current_target.removeClass('open').addClass('close');
373      $target.slideUp('fast', function () {
374        $target_wrap.removeClass('open').addClass('close').hide();
375      });
376      if ($parent_target.find('[data-span]').length > 0) {
377        $parent_target.find('[data-span]').each(function (i, o) {
378          $(o).addClass('border-bottom-none').removeData('span').removeAttr('data-span');
379        });
380      }
381    } else if ($current_target.hasClass('close')) {
382      $current_target.removeClass('close').addClass('open');
383      $target_wrap.removeClass('close').addClass('open').show();
384      $target.slideDown('fast');
385      if ($parent_target.find('.border-bottom-none').length > 0) {
386        $parent_target.find('.border-bottom-none').each(function (i, o) {
387          $(o).removeClass('border-bottom-none').data('span', '').attr('data-span', '');
388        });
389      }
390    }
391  });
392
393
394  // ----------
395  // グローバルナビ:表示/非表示
396  // 
397  $('[data-role="global-nav-toggle"]').on('click', function (e) {
398    var $current_target = $(e.currentTarget);
399    var $target = $current_target.next('.global-nav-child');
400    var $nav_btn = $('.show[data-role="global-nav-toggle"]');
401    var $overlay = $('.global-nav-overlay[data-role="global-nav-close"]');
402    var $btn_nav_close = $target.find('.btn-global-nav-close[data-role="global-nav-close"]');
403    // すべて閉じる
404    if (!$current_target.hasClass('show')) {
405      $nav_btn.removeClass('show');
406      $nav_btn.next('.global-nav-child.show').slideUp('fast', function () {
407        $(this).removeClass('show');
408      });
409    }
410    // 個別に表示/非表示
411    if ($current_target.hasClass('show')) {
412      $current_target.removeClass('show');
413      $target.slideUp('fast', function () {
414        $target.removeClass('show');
415      });
416      $overlay.fadeOut('fast', function () {
417        $overlay.removeClass('show');
418      });
419      $btn_nav_close.fadeOut('fast');
420    } else {
421      $current_target.addClass('show');
422      $target.slideDown('fast', function () {
423        $target.addClass('show');
424      });
425      $overlay.fadeIn('fast', function () {
426        $overlay.addClass('show');
427      });
428      $btn_nav_close.fadeIn('fast');
429    }
430    return false;
431  });
432
433  // overlay
434  $('[data-role="global-nav-close"]').on('click', function () {
435    var $nav_btn = $('.show[data-role="global-nav-toggle"]');
436    var $target = $nav_btn.next('.global-nav-child.show');
437    var $overlay = $('.global-nav-overlay.show[data-role="global-nav-close"]');
438    var $btn_nav_close = $('.btn-global-nav-close[data-role="global-nav-close"]');
439    // すべて閉じる
440    $nav_btn.removeClass('show');
441    $target.slideUp('fast', function () {
442      $target.removeClass('show');
443    });
444    $overlay.fadeOut('fast', function () {
445      $overlay.removeClass('show');
446    });
447    $btn_nav_close.fadeOut('fast');
448  });
449
450
451  // ----------
452  // モーダル:表示/非表示
453  // 
454  // 表示
455  $('[data-role="modal-open"]').on('click', function (e) {
456    var $current_target = $(e.currentTarget);
457    var target_id = $current_target.data('modalTargetId');
458    var $target = $('[data-modal-id="' + target_id + '"]');
459    var arr_modal_option = $target.data('modalOption').split(',');
460    var obj_option = {};
461    for (var i in arr_modal_option) {
462      let option = arr_modal_option[i].split(':');
463      obj_option[option[0]] = option[1];
464    }
465    $target.children('.modal').css(obj_option);
466    $target.fadeIn('fast').removeClass('close').addClass('open');
467    //
468    $target.find('.btn-modal-close:eq(0)').focus();
469  });
470
471  // 非表示
472  $('[data-role="modal-close"]').on('click', function (e) {
473    var $current_target = $(e.currentTarget);
474    var $target = $current_target.closest('.modal-overlay');
475    $target.fadeOut('fast', function () {
476      $target.removeClass('open').addClass('close');
477    });
478  });
479
480  // モーダル内のイベント伝搬をストップ
481  $('.modal').on('click', function (e) {
482    e.stopPropagation();
483  });
484
485
486  // ----------
487  // 製品画像のプレビュー切り替え
488  // 
489  $('[data-role="product-preview"]').on('click', function (e) {
490    var $current_target = $(e.currentTarget);
491    var $current_target_li = $current_target.closest('li');
492    var target_id = $current_target.attr('href').replace('#', '');
493    var $target = $('[data-product-preview-id="' + target_id + '"]');
494    // サムネイル切り替え
495    $current_target_li.removeClass('hide').addClass('show').siblings().removeClass('show').addClass('hide');
496    // プレビュー切り替え
497    $target.removeClass('hide').addClass('show').siblings().removeClass('show').addClass('hide');
498    //
499    history.pushState(null, null, '#' + target_id);
500    return false;
501  });
502
503
504
505  // ----------
506  // サジェスト
507  // 
508  // 表示
509  $('[data-role="datalist-input"]').on('focus', function (e) {
510    var $current_target = $(e.currentTarget);
511    var target_id = $current_target.data('datalistTargetId');
512    var $target = $('[data-datalist-id="' + target_id + '"]');
513    var target_style = {
514      top: ($current_target.offset().top + $current_target.outerHeight()),
515      left: $current_target.offset().left,
516      width: $current_target.outerWidth()
517    };
518    $target.css(target_style).removeClass('hide').addClass('show');
519  });
520
521  // 非表示
522  $(document).on('click', function (e) {
523    var $target = $(e.target);
524    if ($($target).closest('[data-role="datalist-input"],[data-role="datalist"]').length == 0) {
525      $('[data-role="datalist"]').removeClass('show').addClass('hide');
526    }
527  });
528
529  // データinput
530  $('[data-role="datalist"] button').on('click', function (e) {
531    var $current_target = $(e.currentTarget);
532    var $parent_target = $current_target.closest('[data-datalist-id]');
533    var target_id = $parent_target.data('datalistId');
534    var $target = $('[data-datalist-target-id="' + target_id + '"]');
535    $target.val($current_target.val()).focus();
536    // 非表示
537    $parent_target.removeClass('show').addClass('hide');
538  });
539
540  // キー押下で項目移動
541  $(window).on('keydown', function (e) {
542    if ($('[data-role="datalist"].show').length > 0) {
543      if ($('[data-role="datalist"].show').find('button:focus').length == 0) {
544        if (e.keyCode === 38) { // 上キー
545          $('[data-role="datalist"].show').find('button:last').focus();
546          return false;
547        }
548        if (e.keyCode === 40) { // 下キー
549          $('[data-role="datalist"].show').find('button:first').focus();
550          return false;
551        }
552      } else {
553        if (e.keyCode === 38) { // 上キー
554          $('[data-role="datalist"].show').find('button:focus').parent().prev().find('button').focus();
555          return false;
556        }
557        if (e.keyCode === 40) { // 下キー
558          $('[data-role="datalist"].show').find('button:focus').parent().next().find('button').focus();
559          return false;
560        }
561      }
562    }
563  });
564
565
566  // ----------
567  // 通知メッセージ(toast):表示/非表示
568  // 
569  // 表示
570  $('[data-role="toast-open"]').on('click', function (e) {
571    var $current_target = $(e.currentTarget);
572    var target_id = $current_target.data('toastTargetId');
573    var $target = $('[data-toast-id="' + target_id + '"]');
574    $target.fadeIn('fast').removeClass('close').addClass('open');
575    //
576    $target.find('.btn-toast-close:eq(0)').focus();
577  });
578
579  // 非表示
580  $('[data-role="toast-close"]').on('click', function (e) {
581    var $current_target = $(e.currentTarget);
582    var $target = $current_target.closest('.message-wrap.toast');
583    $target.fadeOut('fast', function () {
584      $target.removeClass('open').addClass('close');
585    });
586  });
587
588
589  // ----------
590  // DateaPicker (jQuery UI)
591  // 
592  $.datepicker.setDefaults(
593    $.datepicker.regional['jp'] = {
594      closeText: '閉じる',
595      prevText: '<前',
596      nextText: '次>',
597      currentText: '今日',
598      monthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
599      monthNamesShort: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
600      dayNames: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],
601      dayNamesShort: ['日', '月', '火', '水', '木', '金', '土'],
602      dayNamesMin: ['日', '月', '火', '水', '木', '金', '土'],
603      weekHeader: '週',
604      dateFormat: 'yy/mm/dd',
605      changeYear: true,
606      changeMonth: true,
607      firstDay: 0,
608      isRTL: false,
609      showMonthAfterYear: true,
610      yearSuffix: 'å¹´',
611      numberOfMonths: 3,
612      showCurrentAtPos: 0,
613      maxDate: '9999/12/31',
614    });
615  $('[data-role="datepicker-1month"]').datepicker({
616    changeYear: true,
617    changeMonth: true,
618    dateFormat: 'yy/mm/dd',
619    numberOfMonths: 1,
620    stepMonths: 1
621  });
622  $('[data-role="datepicker-2month"]').datepicker({
623    changeYear: true,
624    changeMonth: true,
625    dateFormat: 'yy/mm/dd',
626    numberOfMonths: 2,
627    stepMonths: 2
628  });
629  $('[data-role="datepicker-3month"]').datepicker({
630    changeYear: true,
631    changeMonth: true,
632    dateFormat: 'yy/mm/dd',
633    numberOfMonths: 3,
634    stepMonths: 3
635  });
636});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.