216 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
| /**
 | |
|  * Copyright © Magento, Inc. All rights reserved.
 | |
|  * See COPYING.txt for license details.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @deprecated since version 2.2.0
 | |
|  */
 | |
| define([
 | |
|     'jquery',
 | |
|     'mage/template',
 | |
|     'jquery-ui-modules/widget'
 | |
| ], function ($, mageTemplate) {
 | |
|     'use strict';
 | |
| 
 | |
|     var editTriggerPrototype;
 | |
| 
 | |
|     $.widget('mage.editTrigger', {
 | |
|         options: {
 | |
|             img: '',
 | |
|             alt: '[TR]',
 | |
|             template: '#translate-inline-icon',
 | |
|             zIndex: 2000,
 | |
|             editSelector: '[data-translate]',
 | |
|             delay: 2000,
 | |
|             offsetTop: -3,
 | |
|             singleElement: true
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * editTriger creation
 | |
|          * @protected
 | |
|          */
 | |
|         _create: function () {
 | |
|             this.tmpl = mageTemplate(this.options.template);
 | |
|             this._initTrigger();
 | |
|             this._bind();
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @return {Object}
 | |
|          * @private
 | |
|          */
 | |
|         _getCss: function () {
 | |
|             return {
 | |
|                 position: 'absolute',
 | |
|                 cursor: 'pointer',
 | |
|                 display: 'none',
 | |
|                 'z-index': this.options.zIndex
 | |
|             };
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @param {*} appendTo
 | |
|          * @return {*|jQuery}
 | |
|          * @private
 | |
|          */
 | |
|         _createTrigger: function (appendTo) {
 | |
|             var tmpl = this.tmpl({
 | |
|                 data: this.options
 | |
|             });
 | |
| 
 | |
|             return $(tmpl)
 | |
|                 .css(this._getCss())
 | |
|                 .data('role', 'edit-trigger-element')
 | |
|                 .appendTo(appendTo);
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * @private
 | |
|          */
 | |
|         _initTrigger: function () {
 | |
|             this.trigger = this._createTrigger($('body'));
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Bind on mousemove event
 | |
|          * @protected
 | |
|          */
 | |
|         _bind: function () {
 | |
|             this.trigger.on('click.' + this.widgetName, $.proxy(this._onClick, this));
 | |
|             this.element.on('mousemove.' + this.widgetName, $.proxy(this._onMouseMove, this));
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Show editTriger
 | |
|          */
 | |
|         show: function () {
 | |
|             if (this.trigger.is(':hidden')) {
 | |
|                 this.trigger.show();
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Hide editTriger
 | |
|          */
 | |
|         hide: function () {
 | |
|             this.currentTarget = null;
 | |
| 
 | |
|             if (this.trigger && this.trigger.is(':visible')) {
 | |
|                 this.trigger.hide();
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Set editTriger position
 | |
|          * @protected
 | |
|          */
 | |
|         _setPosition: function (el) {
 | |
|             var offset = el.offset();
 | |
| 
 | |
|             this.trigger.css({
 | |
|                 top: offset.top + el.outerHeight() + this.options.offsetTop,
 | |
|                 left: offset.left
 | |
|             });
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Show/hide trigger on mouse move.
 | |
|          *
 | |
|          * @param {jQuery.Event} e
 | |
|          * @protected
 | |
|          */
 | |
|         _onMouseMove: function (e) {
 | |
|             var target = $(e.target),
 | |
|                 inner = target.find(this.options.editSelector);
 | |
| 
 | |
|             if ($(e.target).is('button') && inner.length) {
 | |
|                 target = inner;
 | |
|             } else if (!target.is(this.trigger) && !target.is(this.options.editSelector)) {
 | |
|                 target = target.parents(this.options.editSelector).first();
 | |
|             }
 | |
| 
 | |
|             if (target.length) {
 | |
|                 if (!target.is(this.trigger)) {
 | |
|                     this._setPosition(target);
 | |
|                     this.currentTarget = target;
 | |
|                 }
 | |
|                 this.show();
 | |
|             } else {
 | |
|                 this.hide();
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Trigger event "edit" on element for translate.
 | |
|          *
 | |
|          * @param {jQuery.Event} e
 | |
|          * @protected
 | |
|          */
 | |
|         _onClick: function (e) {
 | |
|             e.preventDefault();
 | |
|             e.stopImmediatePropagation();
 | |
|             $(this.currentTarget).trigger('edit.' + this.widgetName);
 | |
|             this.hide(true);
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Destroy editTriger
 | |
|          */
 | |
|         destroy: function () {
 | |
|             this.trigger.remove();
 | |
|             this.element.off('.' + this.widgetName);
 | |
| 
 | |
|             return $.Widget.prototype.destroy.call(this);
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     /**
 | |
|      * Extention for widget editTrigger - hide trigger with delay
 | |
|      */
 | |
|     editTriggerPrototype = $.mage.editTrigger.prototype;
 | |
| 
 | |
|     $.widget('mage.editTrigger', $.extend({}, editTriggerPrototype, {
 | |
|         /**
 | |
|          * Added clear timeout on trigger show
 | |
|          */
 | |
|         show: function () {
 | |
|             editTriggerPrototype.show.apply(this, arguments);
 | |
| 
 | |
|             if (this.options.delay) {
 | |
|                 this._clearTimer();
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Added setTimeout on trigger hide
 | |
|          */
 | |
|         hide: function (immediate) {
 | |
|             if (!immediate && this.options.delay) {
 | |
|                 if (!this.timer) {
 | |
|                     this.timer = setTimeout($.proxy(function () {
 | |
|                         editTriggerPrototype.hide.apply(this, arguments);
 | |
|                         this._clearTimer();
 | |
|                     }, this), this.options.delay);
 | |
|                 }
 | |
|             } else {
 | |
|                 editTriggerPrototype.hide.apply(this, arguments);
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Clear timer
 | |
|          * @protected
 | |
|          */
 | |
|         _clearTimer: function () {
 | |
|             if (this.timer) {
 | |
|                 clearTimeout(this.timer);
 | |
|                 this.timer = null;
 | |
|             }
 | |
|         }
 | |
|     }));
 | |
| 
 | |
|     return $.mage.editTrigger;
 | |
| });
 |