/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'mage/template',
'mage/utils/misc',
'mage/translate',
'jquery-ui-modules/dialog'
], function ($, mageTemplate, miscUtils) {
'use strict';
$.widget('mage.translateInline', $.ui.dialog, {
options: {
translateForm: {
template: '#translate-form-template',
data: {
id: 'translate-inline-form',
message: 'Please refresh the page to see your changes after submitting this form. ' +
'Note: browser cache refresh may be required'
}
},
autoOpen: false,
translateArea: null,
modal: true,
dialogClass: 'popup-window window-translate-inline',
width: '75%',
title: $.mage.__('Translate'),
height: 470,
position: {
my: 'left top',
at: 'center top',
of: 'body'
},
buttons: [{
text: $.mage.__('Submit'),
'class': 'action-primary',
/**
* Click
*/
click: function () {
$(this).translateInline('submit');
}
},
{
text: $.mage.__('Close'),
'class': 'action-close',
/**
* Click.
*/
click: function () {
$(this).translateInline('close');
}
}],
/**
* Open.
*/
open: function () {
var $uiDialog = $(this).closest('.ui-dialog'),
topMargin = $uiDialog.children('.ui-dialog-titlebar').outerHeight() + 45;
$uiDialog
.addClass('ui-dialog-active')
.css('margin-top', topMargin);
},
/**
* Close.
*/
close: function () {
$(this).closest('.ui-dialog').removeClass('ui-dialog-active');
}
},
/**
* Translate Inline creation
* @protected
*/
_create: function () {
var $translateArea = $(this.options.translateArea);
if (!$translateArea.length) {
$translateArea = $('body');
}
$translateArea.on('edit.editTrigger', $.proxy(this._onEdit, this));
this.tmpl = mageTemplate(this.options.translateForm.template);
this._super();
},
/**
* @param {*} templateData
* @return {*|jQuery|HTMLElement}
* @private
*/
_prepareContent: function (templateData) {
var data = $.extend({
items: templateData,
escape: miscUtils.escape
}, this.options.translateForm.data);
this.data = data;
return $(this.tmpl({
data: data
}));
},
/**
* Render translation form and open dialog
* @param {Object} e - object
* @protected
*/
_onEdit: function (e) {
this.target = e.target;
this.element.html(this._prepareContent($(e.target).data('translate')));
this.open(e);
},
/**
* Submit.
*/
submit: function () {
if (this.formIsSubmitted) {
return;
}
this._formSubmit();
},
/**
* Send ajax request on form submit
* @protected
*/
_formSubmit: function () {
var parameters = $.param({
area: this.options.area
}) + '&' + $('#' + this.options.translateForm.data.id).serialize();
this.formIsSubmitted = true;
$.ajax({
url: this.options.ajaxUrl,
type: 'POST',
data: parameters,
loaderContext: this.element,
showLoader: true
}).always($.proxy(this._formSubmitComplete, this));
},
/**
* @param {Object} response
* @private
*/
_formSubmitComplete: function (response) {
var responseJSON = response.responseJSON || response;
this.close();
this.formIsSubmitted = false;
$.mage.translate.add(responseJSON);
this._updatePlaceholder(responseJSON[this.data.items[0].original]);
},
/**
* @param {*} newValue
* @private
*/
_updatePlaceholder: function (newValue) {
var $target = $(this.target),
translateObject = $target.data('translate')[0];
translateObject.shown = newValue;
translateObject.translated = newValue;
$.mage.translate.add(this.data.items[0].original, newValue);
$target.html(newValue);
},
/**
* Destroy translateInline
*/
destroy: function () {
this.element.off('.editTrigger');
this._super();
}
});
return $.mage.translateInline;
});
|