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;
 | 
						|
});
 |