1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'mage/template',
'Magento_Ui/js/modal/confirm',
'jquery/ui'
], 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().submit();
}
}
});
} else {
$form.appendTo('body').hide().submit();
}
}
});
$(document).dataPost();
return $.mage.dataPost;
});