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