modules/ui/tooltip.js (83 lines of code) (raw):
import { utilFunctor } from '../util/util';
import { t } from '../core/localizer';
import { uiPopover } from './popover';
export function uiTooltip(klass) {
var tooltip = uiPopover((klass || '') + ' tooltip')
.displayType('hover');
var _title = function() {
var title = this.getAttribute('data-original-title');
if (title) {
return title;
} else {
title = this.getAttribute('title');
this.removeAttribute('title');
this.setAttribute('data-original-title', title);
}
return title;
};
var _heading = utilFunctor(null);
var _keys = utilFunctor(null);
tooltip.title = function(val) {
if (!arguments.length) return _title;
_title = utilFunctor(val);
return tooltip;
};
tooltip.heading = function(val) {
if (!arguments.length) return _heading;
_heading = utilFunctor(val);
return tooltip;
};
tooltip.keys = function(val) {
if (!arguments.length) return _keys;
_keys = utilFunctor(val);
return tooltip;
};
tooltip.content(function() {
var heading = _heading.apply(this, arguments);
var text = _title.apply(this, arguments);
var keys = _keys.apply(this, arguments);
return function(selection) {
var headingSelect = selection
.selectAll('.tooltip-heading')
.data(heading ? [heading] :[]);
headingSelect.exit()
.remove();
headingSelect.enter()
.append('div')
.attr('class', 'tooltip-heading')
.merge(headingSelect)
.html(heading);
var textSelect = selection
.selectAll('.tooltip-text')
.data(text ? [text] :[]);
textSelect.exit()
.remove();
textSelect.enter()
.append('div')
.attr('class', 'tooltip-text')
.merge(textSelect)
.html(text);
var keyhintWrap = selection
.selectAll('.keyhint-wrap')
.data(keys && keys.length ? [0] : []);
keyhintWrap.exit()
.remove();
var keyhintWrapEnter = keyhintWrap.enter()
.append('div')
.attr('class', 'keyhint-wrap');
keyhintWrapEnter
.append('span')
.html(t.html('tooltip_keyhint'));
keyhintWrap = keyhintWrapEnter.merge(keyhintWrap);
keyhintWrap.selectAll('kbd.shortcut')
.data(keys && keys.length ? keys : [])
.enter()
.append('kbd')
.attr('class', 'shortcut')
.html(function(d) {
return d;
});
};
});
return tooltip;
}