ui-kit
Version:
user interface kit
60 lines (49 loc) • 1.32 kB
text/jade
:doc
@name FloatingTooltip
import './index.ess'
const noop = function(){}
const paddingTop = 50
var top = state.top
var left = state.left
var.
style = {
'top': `${top - paddingTop}px`,
'left': `${left}px`
}
var.
actions = {
onMouseMove: wrap(this.handleMouseMove),
onMouseEnter: wrap(this.handleMouseEnter),
onMouseOut: wrap(this.handleMouseOut)
}
.FloatingTooltip-inner(class={'FloatingTooltip-inner-hidden': !state.visible}, style=style ref='inner')
yield inner
yield content(actions, this)
:module
export function handleMouseEnter(cb, ev) {
this.setState({visible: true});
cb(ev);
}
export function handleMouseOut(cb, ev) {
this.setState({visible: false, top: null, left: null});
cb(ev);
}
export function handleMouseMove(cb, ev) {
var innerNode = this.refs.inner.getDOMNode ? this.refs.inner.getDOMNode() : this.refs.inner;
var innerNodeWidth = innerNode.offsetWidth;
var top = ev.clientY;
var left = ev.clientX - (innerNodeWidth / 2);
this.setState({
top: top,
left: left
});
cb(ev);
}
//-
//- return a function that takes an optional `cb`
//-
export function wrap(cb) {
return function(fn) {
return typeof fn !== 'function' ? cb.call(null, noop, fn) : cb.bind(null, fn);
};
}