GBrowse
view release on metacpan or search on metacpan
htdocs/js/balloon.js view on Meta::CPAN
window.clearTimeout(self.timeoutTooltip);
window.clearTimeout(self.timeoutFade);
window.clearTimeout(self.timeoutAutoClose);
if (balloonIsSticky) {
self.currentElement = null;
}
self.startX = 0;
self.startY = 0;
}
balloonIsVisible = false;
balloonIsSticky = false;
}
// Garbage collection
Balloon.prototype.cleanup = function() {
var self = currentBalloonClass;
var body;
if (self) {
body = self.parent ? self.parent
: self.parentID ? $(self.parentID) || document.body
: document.body;
}
else {
body = document.body;
}
var bubble = $('balloon');
var close = $('closeButton');
var cont = $('container');
if (bubble) { body.removeChild(bubble) }
if (close) { body.removeChild(close) }
if (cont) { body.removeChild(cont) }
}
// this function is meant to be called externally to clear
// any open balloons
hideAllTooltips = function() {
var self = currentBalloonClass;
if (!self) return;
window.clearTimeout(self.timeoutTooltip);
if (self.activeBalloon) self.setStyle(self.activeBalloon,'display','none');
balloonIsVisible = false;
balloonIsSticky = false;
currentBalloonClass = null;
}
// Track the active mouseover coordinates
Balloon.prototype.setActiveCoordinates = function(evt) {
var self = currentBalloonClass;
if (!self) {
return true;
}
var evt = evt || window.event || self.currentEvent;
if (!evt) {
return true;
}
// avoid silent NaN errors
self.hOffset = self.hOffset || 1;
self.vOffset = self.vOffset || 1;
self.stemHeight = self.stem && self.stemHeight ? (self.stemHeight|| 0) : 0;
var scrollTop = 0;
var scrollLeft = 0;
var XY = self.eventXY(evt);
adjustment = self.hOffset < 20 ? 10 : 0;
self.activeTop = scrollTop + XY[1] - adjustment - self.vOffset - self.stemHeight;
self.activeLeft = scrollLeft + XY[0] - adjustment - self.hOffset;
self.activeRight = scrollLeft + XY[0];
self.activeBottom = scrollTop + XY[1] + self.vOffset + 2*adjustment;
// dynamic positioning but only if the balloon is not sticky
// and cursor tracking is enabled
if (balloonIsVisible && !balloonIsSticky && self.trackCursor) {
var deltaX = Math.abs(self.activeLeft - self.startX);
var deltaY = Math.abs(self.activeTop - self.startY);
if (deltaX > self.stopTrackingX || deltaY > self.stopTrackingY) {
self.hideTooltip();
}
else {
self.adjustBalloonPosition();
}
}
return true;
}
Balloon.prototype.adjustBalloonPosition = function() {
var self = currentBalloonClass;
var b = self.activeBalloon;
var bwidth = self.getLoc(b,'width');
var bheight = self.getLoc(b,'height');
var btop = self.getLoc(b,'y1');
var bleft = self.getLoc(b,'x1');
if (self.hOrient == 'right') {
self.setStyle(b,'left',self.activeRight);
}
else if (self.hOrient == 'left') {
self.setStyle(b,'right',null);
var newLeft = self.activeLeft - bwidth;
self.setStyle(b,'left',newLeft);
}
if (self.vOrient == 'up') {
self.setStyle(b,'top',self.activeTop - bheight);
}
else if (self.vOrient == 'down') {
self.setStyle(b,'top',self.activeBottom);
}
}
////
// event XY and getEventTarget Functions based on examples by Peter-Paul
// Koch http://www.quirksmode.org/js/events_properties.html
Balloon.prototype.eventXY = function(event) {
( run in 0.452 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )