WIP.
[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         $(".canvas").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             var elem = '<div class="footer"><span class="current_slide_num">' + (i+1);
88             elem += '</span><span class="slide_num_sep"/><span class="total_slide_num">';
89             elem += _self.getNumSlides() + '</span></div>';
90             if (!($(this).hasClass("nofooter"))) {
91                 $(this).append($(elem));
92             };
93             var par = $(this).parent();
94             $(this).remove();
95             var canvas = $('<div class="canvas"/>');
96             canvas.append($(this));
97             par.append(canvas);
98             if (i == cur) {
99                 canvas.addClass("current_slide").removeClass("other_slides");
100             } else {
101                 canvas.addClass("other_slides").removeClass("current_slide");
102             };
103
104         });
105     };
106
107 };
108
109
110 $(document).ready(SimpleWebSlides.init);