195 lines
5.3 KiB
JavaScript
Executable File
195 lines
5.3 KiB
JavaScript
Executable File
/**
|
|
* 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;
|
|
});
|