0.7.6
This commit is contained in:
73
web/lib/ref/ref.js
Normal file
73
web/lib/ref/ref.js
Normal file
@@ -0,0 +1,73 @@
|
||||
window.addEventListener('load', function(){
|
||||
|
||||
var tip = document.createElement('div'),
|
||||
refs = document.querySelectorAll('.ref');
|
||||
|
||||
for(var i = 0, m = refs.length; i < m; i++){
|
||||
var kbds = refs[i].querySelectorAll('[data-toggle]'),
|
||||
tippable = refs[i].querySelectorAll('[data-tip],[h]'),
|
||||
tips = refs[i].querySelectorAll('div, t');
|
||||
|
||||
for(var j = 0, n = kbds.length; j < n; j++){
|
||||
if(kbds[j].parentNode !== refs[i])
|
||||
kbds[j].onclick = function(e){
|
||||
('exp' in this.dataset) ? delete this.dataset.exp : this.dataset.exp = 1;
|
||||
}
|
||||
}
|
||||
|
||||
[].filter.call(tips, function(node){
|
||||
return node.parentNode == refs[i];
|
||||
});
|
||||
|
||||
for(var j = 0, n = tippable.length; j < n; j++){
|
||||
tippable[j].tipRef = tips[tippable[j].dataset.tip] || tips[tippable[j].getAttribute('h')];
|
||||
tippable[j].onmouseover = function(){
|
||||
tip.className = 'ref visible';
|
||||
tip.innerHTML = this.tipRef.innerHTML;
|
||||
window.clearTimeout(tip.fadeOut);
|
||||
};
|
||||
tippable[j].onmouseout = function(){
|
||||
tip.className = 'ref visible fadingOut';
|
||||
tip.fadeOut = window.setTimeout(function(){
|
||||
tip.innerHTML = '';
|
||||
tip.className = '';
|
||||
}, 250);
|
||||
};
|
||||
}
|
||||
|
||||
refs[i].onmousemove = function(e){
|
||||
if(tip.className.indexOf('visible') < 0)
|
||||
return;
|
||||
tip.style.top = ((document.documentElement.clientHeight - e.clientY) < tip.offsetHeight + 20 ? Math.max(e.pageY - tip.offsetHeight, 0) : e.pageY) + 'px';
|
||||
tip.style.left = ((document.documentElement.clientWidth - e.clientX) < tip.offsetWidth + 20 ? Math.max(e.pageX - tip.offsetWidth, 0) : e.pageX) + 'px';
|
||||
};
|
||||
}
|
||||
|
||||
tip.id = 'rTip';
|
||||
document.body.appendChild(tip);
|
||||
|
||||
window.addEventListener('keydown', function(e){
|
||||
if((e.keyCode != 88) || (['input', 'textarea', 'select'].indexOf(e.target.tagName.toLowerCase()) > -1))
|
||||
return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if(e.ctrlKey && e.keyCode == 88){
|
||||
var d = refs[0].style.display !== 'none' ? 'none' : 'block';
|
||||
for(var i = 0, n = refs.length; i < n; i++)
|
||||
refs[i].style.display = d;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var kbds = document.querySelectorAll('.ref [data-toggle]'),
|
||||
m = kbds.length,
|
||||
partlyExp = document.querySelectorAll('.ref [data-toggle][data-exp]').length !== m;
|
||||
|
||||
for(var i = 0; i < m; i++)
|
||||
partlyExp ? (kbds[i].dataset.exp = 1) : (delete kbds[i].dataset.exp);
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user