app/assets/javascripts/footnotes.js
// Be sure to first include
// <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
// via http://ignorethecode.net/blog/2010/04/20/footnotes/
// Usage:
//
// Blah de blah<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>
//
// <div class="footnotes">
// <ol>
// <li id="fn:1">More detail</li>
// </ol>
// </div>
$(document).ready(function() {
Footnotes.setup();
});
var Footnotes = {
footnotetimeout: false,
setup: function() {
var footnotelinks = $("a[rel='footnote']")
footnotelinks.unbind('mouseover',Footnotes.footnoteover);
footnotelinks.unbind('mouseout',Footnotes.footnoteoout);
footnotelinks.bind('mouseover',Footnotes.footnoteover);
footnotelinks.bind('mouseout',Footnotes.footnoteoout);
},
footnoteover: function() {
clearTimeout(Footnotes.footnotetimeout);
$('#footnotediv').stop();
$('#footnotediv').remove();
var id = $(this).attr('href').substr(1);
var position = $(this).offset();
var div = $(document.createElement('div'));
div.attr('id','footnotediv');
div.bind('mouseover',Footnotes.divover);
div.bind('mouseout',Footnotes.footnoteoout);
var el = document.getElementById(id);
div.html($(el).html());
div.css({
position:'absolute',
width:'400px',
opacity:0.98,
'text-align':'left',
border:'1px solid gray',
background:'white'
});
$(document.body).append(div);
var left = position.left;
if(left + 420 > $(window).width() + $(window).scrollLeft())
left = $(window).width() - 420 + $(window).scrollLeft();
var top = position.top+20;
if(top + div.height() > $(window).height() + $(window).scrollTop())
top = position.top - div.height() - 15;
div.css({
left:left,
top:top
});
},
footnoteoout: function() {
Footnotes.footnotetimeout = setTimeout(function() {
$('#footnotediv').animate({
opacity: 0
}, 600, function() {
$('#footnotediv').remove();
});
},100);
},
divover: function() {
clearTimeout(Footnotes.footnotetimeout);
$('#footnotediv').stop();
$('#footnotediv').css({
opacity: 0.9
});
}
}