app/template/default/Contact/form_js.twig line 1

Open in your IDE?
  1. {% block javascript %}
  2.     <script src="https://unpkg.com/filepond/dist/filepond.min.js"></script>
  3.     <script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.js"></script>
  4.     {% if type == 'coordinate_confirm' %}
  5.         <script>
  6.             $(function () {
  7.                 FilePond.registerPlugin(FilePondPluginImagePreview);
  8.                 // 共通のサーバーオプション設定
  9.                 var commonServerOptions = {
  10.                     server: {
  11.                         process: {
  12.                             url: '{{ path('coordinate_image_process', { id: form.vars.id }) }}',
  13.                             headers: {
  14.                                 'ECCUBE-CSRF-TOKEN': $('meta[name="eccube-csrf-token"]').attr('content'),
  15.                                 'X-Requested-With': 'XMLHttpRequest'
  16.                             }
  17.                         },
  18.                         load: {
  19.                             url: '{{ path('coordinate_image_load') }}',
  20.                             headers: {
  21.                                 'X-Requested-With': 'XMLHttpRequest'
  22.                             }
  23.                         },
  24.                         revert: {
  25.                             url: '{{ path('coordinate_image_revert') }}',
  26.                             headers: {
  27.                                 'ECCUBE-CSRF-TOKEN': $('meta[name="eccube-csrf-token"]').attr('content'),
  28.                                 'X-Requested-With': 'XMLHttpRequest'
  29.                             }
  30.                         }
  31.                     }
  32.                 };
  33.                 FilePond.setOptions(commonServerOptions);
  34.                 var inputFileElement = document.querySelector('input[type=file]');
  35.                 var pond = FilePond.create(inputFileElement, {
  36.                     allowFileTypeValidation: true,
  37.                     acceptedFileTypes: [
  38.                         'image/gif',
  39.                         'image/png',
  40.                         'image/jpeg'
  41.                     ],
  42.                     allowFileSizeValidation: true,
  43.                     maxFileSize: 10000000,
  44.                     allowBrowse: true,
  45.                     allowDrop: true,
  46.                     allowReorder: true,
  47.                     labelIdle: '<i class="fa fa-cloud-upload fa-3x text-ec-lightGray mx-3 align-middle" aria-hidden="true" style="font-size: 40px"></i>{{ 'admin.common.drag_and_drop_image_description'|trans }}<span class="filepond--label-action">{{ 'admin.common.file_select'|trans }}</span>',
  48.                     styleItemPanelAspectRatio: 0.5625,
  49.                     files: [
  50.                         {% for image in form.images %}
  51.                             {
  52.                                 source: '{{ image.vars.value }}',
  53.                                 options: {
  54.                                     type: 'local'
  55.                                 }
  56.                             },
  57.                         {% endfor %}
  58.                         // 追加してすぐの画像のロード. バリデーションエラーの場合など.
  59.                         {% for add_image in form.add_images %}
  60.                             {
  61.                                 source: '{{ add_image.vars.value }}',
  62.                                 options: {
  63.                                     type: 'local'
  64.                                 }
  65.                             },
  66.                         {% endfor %}
  67.                     ]
  68.                 });
  69.                 // 画像が追加されたら add_images にファイル名を追加する
  70.                 var proto_add = '{{ form_widget(form.add_images.vars.prototype) }}';
  71.                 pond.on('processfile', function(error, file) {
  72.                     if (error) {
  73.                         console.log(error);
  74.                     } else {
  75.                         $('#upload-zone').append(
  76.                             $(proto_add.replace(/__name__/g, file.id))
  77.                                 .val(file.serverId)
  78.                                 .addClass('add_images')
  79.                         );
  80.                     }
  81.                 });
  82.                 // 画像が削除されたら delete_images にファイル名を追加する
  83.                 var proto_del = '{{ form_widget(form.delete_images.vars.prototype) }}';
  84.                 pond.on('removefile', function(error, file) {
  85.                     if (error) {
  86.                         console.log(error);
  87.                     } else {
  88.                         // file.serverId にはアップロードしたファイル名が格納される.
  89.                         if (file.serverId) {
  90.                             $('#upload-zone').append(
  91.                                 $(proto_del.replace(/__name__/g, file.id))
  92.                                     .val(file.serverId)
  93.                                     .addClass('del_images')
  94.                             );
  95.                         }
  96.                         // 追加してすぐ削除した画像があれば削除する
  97.                         $('#upload-zone').find('#{{ form.vars.id }}_add_images_' + file.id).remove(); // 追加してすぐ削除した画像
  98.                         $('#upload-zone').find('.add_images[value="' + file.filename + '"]').remove(); // 追加後, バリデーションエラーが発生した後に削除した画像
  99.                     }
  100.                 });
  101.                 pond.on('initfile', function() {
  102.                     $('#product_image_error').hide();
  103.                 });
  104.                 pond.on('error', function(error, file) {
  105.                     var message = '{{ 'admin.common.upload_error'|trans }}';
  106.                     if (error.main !== undefined) {
  107.                         message = `${error.main}: ${error.sub}`;
  108.                     }
  109.                     $('#product_image_error')
  110.                         .show()
  111.                         .find('.form-error-message').text(message);
  112.                     // エラーメッセージが表示されてからプレビューエリアのエラーメッセージを非表示にする
  113.                     setTimeout(function() {
  114.                         $('.filepond--file-status').hide();
  115.                     }, 300);
  116.                 });
  117.                 // バリデーションエラーが出た場合に画像を保持するための hidden を追加しておく
  118.                 var proto_image = '{{ form_widget(form.images.vars.prototype) }}';
  119.                 {% for image in form.images %}
  120.                     $('#upload-zone').append(
  121.                         $(proto_image.replace(/__name__/g, '{{ loop.index0 }}'))
  122.                             .val('{{ image.vars.value }}')
  123.                             .addClass('images')
  124.                     );
  125.                 {% endfor %}
  126.                 {% for add_image in form.add_images %}
  127.                     $('#upload-zone').append(
  128.                         $('{{ form_widget(add_image) }}')
  129.                             .val('{{ add_image.vars.value }}')
  130.                             .addClass('add_images')
  131.                     );
  132.                 {% endfor %}
  133.                 {% for delete_image in form.delete_images %}
  134.                     $('#upload-zone').append(
  135.                         $('{{ form_widget(delete_image) }}').addClass('del_images')
  136.                     );
  137.                 {% endfor %}
  138.             });
  139.         </script>
  140.     {% endif %}
  141. {% endblock %}