app/Plugin/ProductDisplayRank4/Resource/template/admin/Product/index_js.twig line 1

Open in your IDE?
  1. <script>
  2.     var product_ranks = {
  3.     {% for Product in pagination %}
  4.         {{ Product.id }} : {{ Product.display_rank }}{% if loop.last == false %},{% endif %}
  5.     {% endfor %}
  6.     };
  7.     // 並び順
  8.     var updateRankNumber = function(id, tracking_number, callback) {
  9.         $.ajax({
  10.             type: 'PUT',
  11.             url: '{{ url("product_display_rank4_admin_product_update_rank") }}',
  12.             data: {'id': id, 'rank': tracking_number}
  13.         }).done(function(data, textStatus, jqXHR) {
  14.             if (data['status'] == 'OK') {
  15.                 if (typeof callback == 'function') {
  16.                     callback();
  17.                 }
  18.             } else {
  19.                 alert('Update failed.');
  20.             }
  21.             return true;
  22.         }).fail(function(jqXHR, textStatus, errorThrown) {
  23.             var response = JSON.parse(jqXHR.responseText);
  24.             var messages = '';
  25.             for (var i = 0; i < response.messages.length; i++) {
  26.                 messages += response.messages[i] + "\n";
  27.             }
  28.             alert(messages);
  29.             return false;
  30.         });
  31.     };
  32.     $(function () {
  33.         $('#form_bulk thead tr th:last-child').before('<th class="border-top-0 pt-2 pb-2" >表示順<br><a href="{{ url('product_display_rank4_admin_config') }}" target="_blank">設定</th>')
  34.         $('#form_bulk tbody tr[id^=ex-product-]').each(function () {
  35.             var $tr = $(this)
  36.             var product_id = $tr.find('[name="ids[]"]').val()
  37.             var $insert = $('<td>')
  38.             $insert.append('<div class="input-group input-group-sm"><input class="update_rank_number" style="width: 70px;" type="number" data-product-id="' + product_id + '" value="' + product_ranks[product_id] + '"><span class="input-group-btn">\n' +
  39.                 '<button type="button" data-product-id=' + product_id + ' class="btn btn-default update_rank_button"><i class="fa fa-check fa-lg text-secondary" aria-hidden="true"></i></button></span></div>')
  40.             $tr.find('td').last().before($insert)
  41.         })
  42.         $('button.update_rank_button').prop('disabled', true);
  43.         // フォームに変更があったら更新ボタンを有効にする
  44.         $('input.update_rank_number').on('keyup change', function(event) {
  45.             var $input = $(this);
  46.             var $button = $input.closest('.input-group').find('button.update_rank_button');
  47.             console.log($button)
  48.             $button.prop('disabled', false);
  49.             $button.children('i')
  50.                 .removeClass('text-secondary')
  51.                 .addClass('text-success');
  52.         });
  53.         // enter キーで更新し、次のフォームへフォーカスを移動する
  54.         $('input.update_rank_number').on('keypress', function(event) {
  55.             var $input = $(this);
  56.             var $button = $input.closest('.input-group').find('button.update_rank_button');
  57.             var display_rank = $input.val();
  58.             var code = event.which ? event.which : event.keyCode;
  59.             if (code == 13) { // on press to enter
  60.                 var index = $('input.update_rank_number').index(this);
  61.                 var callback = function() {
  62.                     $button.prop('disabled', true);
  63.                     $button.children('i')
  64.                         .removeClass('text-success')
  65.                         .addClass('text-secondary');
  66.                     $('input.update_rank_number:gt(' + index + '):first').focus();
  67.                 };
  68.                 updateRankNumber($button.attr('data-product-id'),  display_rank, callback);
  69.                 event.preventDefault();
  70.             }
  71.         });
  72.         // 更新ボタンの制御
  73.         $('button.update_rank_button').on('click', function(event) {
  74.             event.preventDefault();
  75.             var $button = $(this);
  76.             var $target = $button.closest('.input-group').find('input.update_rank_number');
  77.             var display_rank = $target.val();
  78.             var callback = function() {
  79.                 $button.prop('disabled', true);
  80.                 $button.children('i')
  81.                     .removeClass('text-success')
  82.                     .addClass('text-secondary');
  83.             };
  84.             updateRankNumber($button.attr('data-product-id'),  display_rank, callback);
  85.         });
  86.     })
  87. </script>