103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
| /**
 | |
|  * Copyright © Magento, Inc. All rights reserved.
 | |
|  * See COPYING.txt for license details.
 | |
|  */
 | |
| 
 | |
| define([
 | |
|     'jquery',
 | |
|     'mage/template',
 | |
|     'Magento_Ui/js/modal/confirm',
 | |
|     'jquery-ui-modules/widget'
 | |
| ], function ($, mageTemplate, uiConfirm) {
 | |
|     'use strict';
 | |
| 
 | |
|     $.widget('mage.dataPost', {
 | |
|         options: {
 | |
|             formTemplate: '<form action="<%- data.action %>" method="post">' +
 | |
|             '<% _.each(data.data, function(value, index) { %>' +
 | |
|             '<input name="<%- index %>" value="<%- value %>">' +
 | |
|             '<% }) %></form>',
 | |
|             postTrigger: ['a[data-post]', 'button[data-post]', 'span[data-post]'],
 | |
|             formKeyInputSelector: 'input[name="form_key"]'
 | |
|         },
 | |
| 
 | |
|         /** @inheritdoc */
 | |
|         _create: function () {
 | |
|             this._bind();
 | |
|         },
 | |
| 
 | |
|         /** @inheritdoc */
 | |
|         _bind: function () {
 | |
|             var events = {};
 | |
| 
 | |
|             $.each(this.options.postTrigger, function (index, value) {
 | |
|                 events['click ' + value] = '_postDataAction';
 | |
|             });
 | |
| 
 | |
|             this._on(events);
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Handler for click.
 | |
|          *
 | |
|          * @param {Object} e
 | |
|          * @private
 | |
|          */
 | |
|         _postDataAction: function (e) {
 | |
|             var params = $(e.currentTarget).data('post');
 | |
| 
 | |
|             e.preventDefault();
 | |
|             this.postData(params);
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Data post action.
 | |
|          *
 | |
|          * @param {Object} params
 | |
|          */
 | |
|         postData: function (params) {
 | |
|             var formKey = $(this.options.formKeyInputSelector).val(),
 | |
|                 $form, input;
 | |
| 
 | |
|             if (formKey) {
 | |
|                 params.data['form_key'] = formKey;
 | |
|             }
 | |
| 
 | |
|             $form = $(mageTemplate(this.options.formTemplate, {
 | |
|                 data: params
 | |
|             }));
 | |
| 
 | |
|             if (params.files) {
 | |
|                 $form[0].enctype = 'multipart/form-data';
 | |
|                 $.each(params.files, function (key, files) {
 | |
|                     if (files instanceof FileList) {
 | |
|                         input = document.createElement('input');
 | |
|                         input.type = 'file';
 | |
|                         input.name = key;
 | |
|                         input.files = files;
 | |
|                         $form[0].appendChild(input);
 | |
|                     }
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|             if (params.data.confirmation) {
 | |
|                 uiConfirm({
 | |
|                     content: params.data.confirmationMessage,
 | |
|                     actions: {
 | |
|                         /** @inheritdoc */
 | |
|                         confirm: function () {
 | |
|                             $form.appendTo('body').hide().trigger('submit');
 | |
|                         }
 | |
|                     }
 | |
|                 });
 | |
|             } else {
 | |
|                 $form.appendTo('body').hide().trigger('submit');
 | |
|             }
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     $(document).dataPost();
 | |
| 
 | |
|     return $.mage.dataPost;
 | |
| });
 |