Initial commit.
[hacks/simpleWebSlides.git] / simpleWebSlides.js
1 var SimpleWebSlides = new function () {
2     var _self = this;
3     var _total_slides;
4     _self.getNumSlides = function () { return _total_slides; };
5
6     if (typeof(Storage)!=="undefined"){
7         _self.getCurrentSlide = function () {
8             //unary + casts to integer
9             var i = +(sessionStorage.current_slide);
10             if (!(i >= 0 && i < _self.getNumSlides())){
11                 return 0;
12             } else {
13                 return i;
14             };
15         };
16
17         _self.setCurrentSlide = function (i) {
18             sessionStorage.current_slide = i;
19         };
20
21     } else {
22         var _current_slide = 0;
23         _self.getCurrentSlide = function () { return current_slide; };
24         _self.setCurrentSlide = function (i) { _current_slide = i; };
25
26     };
27     _self.firstSlide = function () { return 0; };
28     _self.lastSlide = function () { return _self.getNumSlides() - 1; };
29     _self.refresh = function () {
30         var cur = _self.getCurrentSlide();
31         $(".slide").each (function (i) {
32             if (i == cur){
33                 $(this).removeClass("other_slides").addClass("current_slide");
34             } else if ($(this).hasClass("current_slide")) {
35                 $(this).removeClass("current_slide").addClass("other_slides");
36             };
37         });
38
39     };
40
41     _self.nextSlide = function () {
42         _self.setCurrentSlide(Math.min(_self.getCurrentSlide()+1,
43                                        _self.lastSlide()));
44     };
45
46     _self.previousSlide = function () {
47         _self.setCurrentSlide(Math.max(_self.getCurrentSlide()-1,
48                                       _self.firstSlide()));
49     };
50  
51     _self.keyboardHandler = function (event) {
52
53         switch (event.which) {
54         case 36:/* Home */
55             _self.firstSlide();
56             break;
57
58         case 35:/* End */
59             _self.lastSlide();
60             break;
61
62         case 32: /* space */
63         case 34: /* PgDown */
64         case 39: /* -> */
65         case 78: /* n */
66             _self.nextSlide();
67             break;
68         case 8: /* backspace */
69         case 33: /* PgUp */
70         case 37: /* <-   */
71         case 80: /* p */
72             _self.previousSlide();
73             break;
74         default:
75             return;
76         };
77         _self.refresh();
78     };
79
80     _self.init = function () {
81         _total_slides = $(".slide").length;
82
83         $(document).keydown(_self.keyboardHandler);
84
85         var cur = _self.getCurrentSlide();
86         $(".slide").each (function (i) {
87             if (i == cur) {
88                 $(this).addClass("current_slide").removeClass("other_slides");
89             } else {
90                 $(this).addClass("other_slides").removeClass("current_slide");
91             };
92             var elem = '<div class="footer"><span class="current_slide_num">' + (i+1);
93             elem += '</span><span class="slide_num_sep"/><span class="total_slide_num">';
94             elem += _self.getNumSlides() + '</span></div>';
95             if (!($(this).hasClass("nofooter"))) {
96                 $(this).append($(elem));
97             };
98         });
99     };
100
101 };
102
103
104 $(document).ready(SimpleWebSlides.init);