Files
ChocolateyPackages/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ExportHtml/js/annotation.js

207 lines
6.8 KiB
JavaScript

/*jshint globalstrict: true*/
"use strict";
var win_attr = {
get_center : function (dim) {
var c = {
'x' : (win_attr.get_size('x')/2),
'y' : (win_attr.get_size('y')/2)
};
return ((dim) ? c[dim] : c);
},
get_size : function(dir) {
dir = (dir === 'x') ? 'Width' : 'Height';
return ((window['inner'+dir]) ?
window['inner'+dir] :
((window.document.documentElement && window.document.documentElement['client'+dir]) ?
window.document.documentElement['client'+dir] :
window.document.body['client'+dir]
)
);
}
},
position_el = {
center : function (el, dim) {
var c = win_attr.get_center(),
top = (c.y - (el.offsetHeight/2)),
left = (c.x - (el.offsetWidth/2));
if (dim == null || dim === 'y') el.style.top = (top < 0) ? 0 + 'px' : top + 'px';
if (dim == null || dim === 'x') el.style.left = (left < 0) ? 0 + 'px' : left + 'px';
},
set : function (el, x, y) {
var left, top;
if (typeof x === "undefined") x = null;
if (typeof y === "undefined") y = null;
if (y === 'center') {
position_el.center(el, 'y');
} else if (y === 'top') {
el.style.top = 0 + 'px';
} else if (y === 'bottom') {
top = (win_attr.get_size('y') - (el.offsetHeight));
el.style.top = (top < 0) ? 0 + 'px' : top + 'px';
} else if (y.match(/^[\d]+(%|px|em|mm|cm|in|pt|pc)$/) != null) {
el.style.top = y;
}
if (x === "center") {
position_el.center(el, 'x');
} else if (x === 'left') {
el.style.left = 0 + 'px';
} else if (x === 'right') {
left = (win_attr.get_size('x') - (el.offsetWidth));
el.style.left = (left < 0) ? 0 + 'px' : left + 'px';
} else if (x.match(/^[\d]+(%|px|em|mm|cm|in|pt|pc)$/) != null) {
el.style.left = x;
}
}
};
function position_table(el) {
var x, y,
sel = document.getElementById('dock'),
option = sel.options[sel.selectedIndex].value;
switch(option) {
case "0": x = 'center'; y = 'center'; break;
case "1": x = 'center'; y = 'top'; break;
case "2": x = 'center'; y = 'bottom'; break;
case "3": x = 'left'; y = 'center'; break;
case "4": x = 'right'; y = 'center'; break;
case "5": x = 'left'; y = 'top'; break;
case "6": x = 'right'; y = 'top'; break;
case "7": x = 'left'; y = 'bottom'; break;
case "8": x = 'right'; y = 'bottom'; break;
default: break;
}
setTimeout(function () {position_el.set(el, x, y); el.style.visibility = 'visible';}, 300);
}
function toggle_annotations() {
var comments_div = document.getElementById('comment_list'),
mode = comments_div.style.display;
if (mode == 'none') {
comments_div.style.display = 'block';
position_table(comments_div);
} else {
comments_div.style.visibility = 'hidden';
comments_div.style.display = 'none';
}
}
function dock_table() {
var comments_div = document.getElementById('comment_list');
position_table(comments_div);
}
function scroll_to_line(value) {
var pos = 0,
el = document.getElementById(value);
window.scrollTo(0, 0);
while(el) {
pos += el.offsetTop;
el = el.offsetParent;
}
pos -= win_attr.get_center('y');
if (pos < 0) {
pos = 0;
}
window.scrollTo(0, pos);
}
// Tooltips from http://www.scriptiny.com/2008/06/javascript-tooltip/
var tooltip = function() {
var id = 'tooltip',
top = 3,
left = 3,
maxw = 300,
speed = 10,
timer = 20,
endalpha = 95,
alpha = 0,
ie = document.all ? true : false,
tt, t, c, b, h;
return{
annotation_list: {},
init: function() {
var i, comment, comments, len;
comments = document.querySelectorAll("div.annotation_comment");
len = comments.length;
for (i = 0; i < len; i++) {
comment = comments[i];
if ("textContent" in comment) {
tooltip.annotation_list[i] = comment.textContent;
} else {
tooltip.annotation_list[i] = comment.innerText;
}
}
},
show:function(v, w) {
if(tt == null) {
tt = document.createElement('div');
tt.setAttribute('id', id);
document.body.appendChild(tt);
tt.style.opacity = 0;
tt.style.filter = 'alpha(opacity=0)';
document.onmousemove = this.pos;
}
tt.style.display = 'block';
tt.innerHTML = v in tooltip.annotation_list ? tooltip.annotation_list[v] : '?';
tt.style.width = w ? w + 'px' : 'auto';
if(!w && ie){
tt.style.width = tt.offsetWidth;
}
if(tt.offsetWidth > maxw){
tt.style.width = maxw + 'px';
}
h = parseInt(tt.offsetHeight, 10) + top;
clearInterval(tt.timer);
tooltip.instantshow(true);
// tt.timer = setInterval(function(){tooltip.fade(1);}, timer);
},
pos:function(e) {
var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY,
l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
tt.style.top = (u - h) + 'px';
tt.style.left = (l + left) + 'px';
},
instantshow: function(show) {
if (show === true) {
tt.style.opacity = endalpha * 0.01;
tt.style.filter = 'alpha(opacity=' + endalpha + ')';
} else {
tt.style.display = 'none';
}
},
fade:function(d) {
var a = alpha, i;
if((a != endalpha && d == 1) || (a !== 0 && d == -1)){
i = speed;
if(endalpha - a < speed && d == 1){
i = endalpha - a;
}else if(alpha < speed && d == -1){
i = a;
}
alpha = a + (i * d);
tt.style.opacity = alpha * 0.01;
tt.style.filter = 'alpha(opacity=' + alpha + ')';
}else{
clearInterval(tt.timer);
if(d == -1){
tt.style.display = 'none';
}
}
},
hide:function() {
clearInterval(tt.timer);
tooltip.instantshow(false);
// tt.timer = setInterval(function(){tooltip.fade(-1);},timer);
}
};
}();
tooltip.init();