207 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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();
 |