Source: admin/javascript/engine/extensions/datatable_fixed_row_actions.js

/* --------------------------------------------------------------
 datatable_fixed_row_actions.js 2016-07-13
 Gambio GmbH
 http://www.gambio.de
 Copyright (c) 2016 Gambio GmbH
 Released under the GNU General Public License (Version 2)
 [http://www.gnu.org/licenses/gpl-2.0.html]
 --------------------------------------------------------------
 */

/**
 * ## Enable fixed table row actions that do not hide on mouse leave.
 * 
 * By default the actions will be hidden when on mouse leave event. This module will make sure that they 
 * stay visible.
 *
 * @module Admin/Extensions/datatable_fixed_row_actions
 */
gx.extensions.module('datatable_fixed_row_actions', [], function(data) {
	
	'use strict';
	
	// ------------------------------------------------------------------------
	// VARIABLES
	// ------------------------------------------------------------------------
	
	/**
	 * Module Selector
	 *
	 * @type {jQuery}
	 */
	const $this = $(this);
	
	/**
	 * Module Instance
	 *
	 * @type {Object}
	 */
	const module = {};
	
	// ------------------------------------------------------------------------
	// FUNCTIONS
	// ------------------------------------------------------------------------
	
	/**
	 * On Table Row Mouse Leave
	 *
	 * The dropdown must remain visible if it was open when the cursor leaves the table row.
	 */
	function _onTableRowMouseLeave() {
		const visibility = $(this).find('.btn-group.dropdown').hasClass('open') ? 'visible' : '';
		$(this).find('.actions .visible-on-hover').css('visibility', visibility);
	}
	
	/**
	 * On Bootstrap Dropdown Menu Toggle
	 *
	 * Remove any custom visibility set by this module whenever the user interacts with a dropdown toggle.
	 */
	function _onBootstrapDropdownToggle() {
		$this.find('.actions .visible-on-hover').css('visibility', '');
	}
	
	// ------------------------------------------------------------------------
	// INITIALIZATION
	// ------------------------------------------------------------------------
	
	module.init = function(done) {
		$this
			.on('mouseleave', 'tr', _onTableRowMouseLeave)
			.on('shown.bs.dropdown hidden.bs.dropdown', _onBootstrapDropdownToggle);
		
		done();
	};
	
	return module;
	
});