#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
header('content-type: text/javascript');
ob_start('ob_gzhandler');
require('../../config.php');
require('../../includes/functions.php');
?>
/* Most of the code from Menéame by Ricardo Galli */
base_url = "";
// create the tooltip object
function tooltip(){}
// setup properties of tooltip object
tooltip.id="tooltip";
tooltip.main=null;
tooltip.offsetx = 10;
tooltip.offsety = 10;
tooltip.shoffsetx = 8;
tooltip.shoffsety = 8;
tooltip.x = 0;
tooltip.y = 0;
tooltip.tooltipShadow=null;
tooltip.tooltipText=null;
tooltip.title_saved='';
tooltip.saveonmouseover=null;
tooltip.timeout = null;
tooltip.active = false;
tooltip.cache = new JSOC();
tooltip.ie = (document.all)? true:false; // check if ie
if(tooltip.ie) tooltip.ie5 = (navigator.userAgent.indexOf('MSIE 5')>0);
else tooltip.ie5 = false;
tooltip.dom2 = ((document.getElementById) && !(tooltip.ie5))? true:false; // check the W3C DOM level2 compliance. ie4, ie5, ns4 are not dom level2 compliance !! grrrr >:-(
/**
* Open ToolTip. The title attribute of the htmlelement is the text of the tooltip
* Call this method on the mouseover event on your htmlelement
* ex :
*/
tooltip.show = function (event, text) {
// we save text of title attribute to avoid the showing of tooltip generated by browser
if (this.dom2 == false ) return false;
if (this.tooltipShadow == null) {
this.tooltipShadow = document.createElement("div");
this.tooltipShadow.setAttribute("id", "tooltip-shadow");
document.body.appendChild(tooltip.tooltipShadow);
this.tooltipText = document.createElement("div");
this.tooltipText.setAttribute("id", "tooltip-text");
document.body.appendChild(this.tooltipText);
}
this.saveonmouseover=document.onmousemove;
document.onmousemove = this.mouseMove;
this.mouseMove(event); // This already moves the div to the right position
this.setText(text);
this.tooltipText.style.visibility ="visible";
this.tooltipShadow.style.visibility ="visible";
this.active = true;
return false;
}
tooltip.setText = function (text) {
tooltip.tooltipShadow.style.width = 0+"px";
tooltip.tooltipShadow.style.height = 0+"px";
this.tooltipText.innerHTML=text;
setTimeout('tooltip.setShadow()', 1);
return false;
}
tooltip.setShadow = function () {
tooltip.tooltipShadow.style.width = tooltip.tooltipText.clientWidth+"px";
tooltip.tooltipShadow.style.height = tooltip.tooltipText.clientHeight+"px";
}
/**
* hide tooltip
* call this method on the mouseout event of the html element
* ex :
*/
tooltip.hide = function (event) {
if (this.dom2 == false) return false;
document.onmousemove=this.saveonmouseover;
this.saveonmouseover=null;
if (this.tooltipShadow != null ) {
this.tooltipText.style.visibility = "hidden";
this.tooltipShadow.style.visibility = "hidden";
this.tooltipText.innerHTML='';
}
this.active = false;
}
// Moves the tooltip element
tooltip.mouseMove = function (e) {
// we don't use "this", but tooltip because this method is assign to an event of document
// and so is dreferenced
if (tooltip.ie) {
tooltip.x = event.clientX;
tooltip.y = event.clientY;
} else {
tooltip.x = e.pageX;
tooltip.y = e.pageY;
}
tooltip.moveTo( tooltip.x +tooltip.offsetx , tooltip.y + tooltip.offsety);
}
// Move the tooltip element
tooltip.moveTo = function (xL,yL) {
if (this.ie) {
xL += document.documentElement.scrollLeft;
yL += document.documentElement.scrollTop;
}
if (this.tooltipText.clientWidth > 0 && document.documentElement.clientWidth > 0 && xL > document.documentElement.clientWidth * 0.55) {
xL = xL - this.tooltipText.clientWidth - 2*this.offsetx;
}
this.tooltipText.style.left = xL +"px";
this.tooltipText.style.top = yL +"px";
xLS = xL + this.shoffsetx;
yLS = yL + this.shoffsety;
this.tooltipShadow.style.left = xLS +"px";
this.tooltipShadow.style.top = yLS +"px";
}
// Show the content of a given comment
tooltip.c_show = function (event, type, element, link) {
// we save text of title attribute to avoid the showing of tooltip generated by browser
if (this.dom2 == false ) return false;
if (type == 'id') {
target_text = 'comment-' + element;
target_author = 'cauthor-'+element;
target = document.getElementById(target_text);
author_target = document.getElementById(target_author);
if (! target || ! author_target) {
this.ajax_delayed(event,'ajax/',element+"&link="+link);
return;
}
text = ''+author_target.innerHTML+'
'+target.innerHTML;
} else if (type == 'order') {
this.ajax_delayed(event,'ajax/',element+"&link="+link);
return;
} else {
text = element;
}
return this.show(event, text);
}
tooltip.clear = function (event) {
if (this.timeout != null) {
clearTimeout(this.timeout);
this.timeout = null;
}
this.hide(event);
}
tooltip.ajax_delayed = function (event, script, id, maxcache) {
maxcache = maxcache || 600000; // 10 minutes in cache
if (this.active) return false;
if ((object = this.cache.get(script+id)) != undefined) {
json = object[script+id];
var show = '';
if (json['type'] == 'profile') {
if (json['error']) show = ' ';
else {
if (json['realname']) show = ' ' + json['realname'] + '
';
if (json['url']) show += ' ' + json['url'] + '
';
if (json['location']) show += ' ' + json['location'] + '
';
if (json['bio']) show += ' ' + json['bio'] + '
';
show += ' ' + json['since'] + '
';
}
}
if (json.type == 'note') {
if (json.error !== undefined) show = ' ';
else {
var show = ' ' + json['text'] + '
';
}
}
tooltip.show(event, show);
} else {
this.show(event, '');
this.timeout = setTimeout("tooltip.ajax_request('"+script+"', '"+id+"', "+maxcache+")", 100);
}
}
tooltip.ajax_request = function(script, id, maxcache) {
var url = base_url + 'ajax/'+script+'?id='+id;
tooltip.timeout = null;
$.getJSON(url, function(json) {
tooltip.cache.set(script+id, json, {'ttl':maxcache});
var show = '';
if (json['type'] == 'profile') {
if (json['error']) show = ' ';
else {
if (json['realname']) show = ' ' + json['realname'] + '
';
if (json['url']) show += ' ' + json['url'] + '
';
if (json['location']) show += ' ' + json['location'] + '
';
if (json['bio']) show += ' ' + json['bio'] + '
';
show += ' ' + json['since'] + '
';
}
}
if (json.type == 'note') {
if (json.error !== undefined) var show = ' ';
else {
var show = ' ' + json['text'] + '
';
}
}
tooltip.setText(show);
});
}