/** * 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: '
' + '<% _.each(data.data, function(value, index) { %>' + '' + '<% }) %>
', 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().submit(); } } }); } else { $form.appendTo('body').hide().submit(); } } }); $(document).dataPost(); return $.mage.dataPost; });