83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
|
(function ($) {
|
||
|
// Register namespace
|
||
|
$.extend(true, window, {
|
||
|
"Slick": {
|
||
|
"AutoTooltips": AutoTooltips
|
||
|
}
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* AutoTooltips plugin to show/hide tooltips when columns are too narrow to fit content.
|
||
|
* @constructor
|
||
|
* @param {boolean} [options.enableForCells=true] - Enable tooltip for grid cells
|
||
|
* @param {boolean} [options.enableForHeaderCells=false] - Enable tooltip for header cells
|
||
|
* @param {number} [options.maxToolTipLength=null] - The maximum length for a tooltip
|
||
|
*/
|
||
|
function AutoTooltips(options) {
|
||
|
var _grid;
|
||
|
var _self = this;
|
||
|
var _defaults = {
|
||
|
enableForCells: true,
|
||
|
enableForHeaderCells: false,
|
||
|
maxToolTipLength: null
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Initialize plugin.
|
||
|
*/
|
||
|
function init(grid) {
|
||
|
options = $.extend(true, {}, _defaults, options);
|
||
|
_grid = grid;
|
||
|
if (options.enableForCells) _grid.onMouseEnter.subscribe(handleMouseEnter);
|
||
|
if (options.enableForHeaderCells) _grid.onHeaderMouseEnter.subscribe(handleHeaderMouseEnter);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Destroy plugin.
|
||
|
*/
|
||
|
function destroy() {
|
||
|
if (options.enableForCells) _grid.onMouseEnter.unsubscribe(handleMouseEnter);
|
||
|
if (options.enableForHeaderCells) _grid.onHeaderMouseEnter.unsubscribe(handleHeaderMouseEnter);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Handle mouse entering grid cell to add/remove tooltip.
|
||
|
* @param {jQuery.Event} e - The event
|
||
|
*/
|
||
|
function handleMouseEnter(e) {
|
||
|
var cell = _grid.getCellFromEvent(e);
|
||
|
if (cell) {
|
||
|
var $node = $(_grid.getCellNode(cell.row, cell.cell));
|
||
|
var text;
|
||
|
if ($node.innerWidth() < $node[0].scrollWidth) {
|
||
|
text = $.trim($node.text());
|
||
|
if (options.maxToolTipLength && text.length > options.maxToolTipLength) {
|
||
|
text = text.substr(0, options.maxToolTipLength - 3) + "...";
|
||
|
}
|
||
|
} else {
|
||
|
text = "";
|
||
|
}
|
||
|
$node.attr("title", text);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Handle mouse entering header cell to add/remove tooltip.
|
||
|
* @param {jQuery.Event} e - The event
|
||
|
* @param {object} args.column - The column definition
|
||
|
*/
|
||
|
function handleHeaderMouseEnter(e, args) {
|
||
|
var column = args.column,
|
||
|
$node = $(e.target).closest(".slick-header-column");
|
||
|
if (!column.toolTip) {
|
||
|
$node.attr("title", ($node.innerWidth() < $node[0].scrollWidth) ? column.name : "");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Public API
|
||
|
$.extend(this, {
|
||
|
"init": init,
|
||
|
"destroy": destroy
|
||
|
});
|
||
|
}
|
||
|
})(jQuery);
|