Preliminary support for animations.
[wolnelektury.git] / src / wolnelektury / static / js / book.js
1 $(function() {
2     function scrollToAnchor(anchor) {
3         if (anchor) {
4             var anchor_name = anchor.slice(1);
5             var element = $('a[name="' + anchor_name + '"]');
6             if (element.length > 0) {
7                 $.scrollTo(element, 500, {offset: {top: -50, left: 0}});
8                 foot_elem = $('#footnotes a[name="' + anchor_name + '"]');
9                 if (foot_elem.length > 0) {
10                     $(element).parent().highlightFade('yellow');
11                 }
12                 window.location.hash = anchor;
13             }
14         }
15     }
16
17     $.highlightFade.defaults.speed = 3000;
18     $('#toc').hide();
19     if ($('#toc li').length == 0) {
20         $('#menu li a[href="#toc"]').remove();
21     }
22     if ($('#themes li').length == 0) {
23         $('#menu li a[href="#themes"]').remove();
24     }
25     if ($('#nota_red').length == 0) {
26         $('#menu li a[href="#nota_red"]').remove();
27     }
28
29     // On page load, scroll to anchor
30     scrollToAnchor(window.location.hash)
31
32     $('#toc, #themes, #book-text').delegate('click', 'a', function(event) {
33         event.preventDefault();
34         $('#menu li a.selected').click();
35         scrollToAnchor($(this).attr('href'));
36     });
37
38     $('#menu li a.menu').toggle(function() {
39         $('#menu li a.selected').click();
40         $(this).addClass('selected');
41         $($(this).attr('href')).slideDown('fast');
42     }, function() {
43         $(this).removeClass('selected');
44         $($(this).attr('href')).slideUp('fast');
45     });
46     
47
48     if (window.getSelection) {
49         $('.theme-begin').click(function() {
50             var selection = window.getSelection();
51             selection.removeAllRanges();
52             var range = document.createRange();
53
54             var e = $(".theme-end[fid='" + $(this).attr('fid') + "']")[0];
55
56             if (e) {
57                 range.setStartAfter(this);
58                 range.setEndBefore(e);
59                 selection.addRange(range);
60             }
61         });
62     }
63
64 });