oxjs/source/Ox.UI/js/Window/Tooltip.js

107 lines
2.9 KiB
JavaScript
Raw Normal View History

2011-11-05 16:46:53 +00:00
'use strict';
2011-05-16 08:24:46 +00:00
/*@
2012-05-31 10:32:54 +00:00
Ox.Tooltip <f> Tooltip Object
2011-05-16 08:24:46 +00:00
options <o> Options object
self <o> Shared private variable
([options[, self]]) -> <o:Ox.Element> Tooltip Object
s@*/
2011-05-16 08:24:46 +00:00
2011-04-22 22:03:10 +00:00
Ox.Tooltip = function(options, self) {
self = self || {};
var that = Ox.Element({}, self)
2011-04-22 22:03:10 +00:00
.defaults({
2011-08-28 06:23:15 +00:00
animate: true, // fixme: shouldn't booleans be false by default?
2011-04-22 22:03:10 +00:00
title: ''
})
.options(options || {})
2012-05-28 16:21:00 +00:00
.update({
title: function() {
setTitle();
2012-05-28 21:03:48 +00:00
self.options.title === '' && that.detach();
2012-05-28 16:21:00 +00:00
}
})
2011-04-22 22:03:10 +00:00
.addClass('OxTooltip')
[Ox.isString(self.options.title) ? 'html' : 'append'](
self.options.title
);
self.options.animate && that.css({opacity: 0});
2011-04-22 22:03:10 +00:00
setTitle();
function setTitle() {
if (Ox.isString(self.options.title)) {
that.html(self.options.title);
} else {
that.empty().append(self.options.title);
}
}
2011-04-22 22:03:10 +00:00
2012-05-21 10:38:18 +00:00
/*@
hide <f> hide tooltip
() -> <o> hide tooltip
@*/
2011-04-22 22:03:10 +00:00
that.hide = function() {
var last = Ox.last(arguments);
2011-08-28 19:50:06 +00:00
if (self.options.title) {
if (self.options.animate) {
that.animate({
opacity: 0
}, 250, function() {
that.detach();
Ox.isFunction(last) && last();
2011-08-28 19:50:06 +00:00
});
} else {
that.detach();
2011-08-28 19:50:06 +00:00
}
2011-04-22 22:03:10 +00:00
}
return that;
};
2011-05-14 19:32:49 +00:00
// can pass event instead of x/y
2011-05-17 18:44:53 +00:00
// fixme: use this in widgets
2012-05-21 10:38:18 +00:00
/*@
show <f> show tooltip
(x, y) -> <o> show tooltip at x,y
2012-05-29 09:18:36 +00:00
(event) -> <o> show tooltip at event.clientX/clientY
2012-05-21 10:38:18 +00:00
@*/
2011-04-22 22:03:10 +00:00
that.show = function(x, y) {
var last = Ox.last(arguments),
left, top, width, height;
2011-08-28 19:50:06 +00:00
if (self.options.title) {
if (arguments.length == 1) {
2011-09-03 23:04:18 +00:00
self.x = arguments[0].clientX;
self.y = arguments[0].clientY;
} else {
2011-09-03 23:04:18 +00:00
self.x = x;
self.y = y;
2011-08-28 19:50:06 +00:00
}
$('.OxTooltip').detach(); // fixme: don't use DOM
2011-08-28 19:50:06 +00:00
that.appendTo(Ox.UI.$body);
width = that.width();
height = that.height();
2011-09-03 23:04:18 +00:00
left = Ox.limit(
self.x - Math.round(width / 2), 0, window.innerWidth - width - 8
2011-09-03 23:04:18 +00:00
);
top = self.y > window.innerHeight - height - 16
? self.y - 16 - height
: self.y + 16;
2011-08-28 19:50:06 +00:00
that.css({
left: left + 'px',
top: top + 'px'
});
self.options.animate && that.animate({
opacity: 1
}, 250, function() {
Ox.isFunction(last) && last();
});
2011-05-14 19:32:49 +00:00
}
2011-04-22 22:03:10 +00:00
return that;
};
return that;
};