1 var SimpleWebSlides = new function () {
4 var _defered_custom = new Array();
5 var _initialized = false;
7 function push_following(t, i, v) {
8 if ((typeof t[i]) == 'undefined') {
12 if (l == 0 || !($.contains(t[i][l-1].get()[0], v.get()[0]))) {
17 function push(t, i, v) {
18 if ((typeof t[i]) == 'undefined') {
26 function init_canvas(canvas) {
27 var frames = new Array ();
29 canvas.find("*").each(function(i) {
31 if ($(this).hasClass("pause")) cur_frame++;
32 push_following(frames, cur_frame, $(this));
35 canvas.data("frames", { frames: frames,
37 custom: new Array() });
41 _self.getNumSlides = function () { return _total_slides; };
44 _self.registerCustom = function (i, f) {
45 if (_initialized) return;
46 //jQuery does not seem to work well
48 var scripts = document.getElementsByTagName("script");
49 var current = scripts[scripts.length-1];
51 var slide = $(current).parents(".slide");
52 if (slide.length == 0) {
53 console.log("no parent ?");
56 _defered_custom[_defered_custom.length] = { src: slide[0],
63 if (typeof(Storage)!=="undefined"){
64 _self.getCurrentSlide = function () {
65 //unary + casts to integer
66 var i = +(sessionStorage.current_slide);
67 if (!(i >= 0 && i < _self.getNumSlides())){
74 _self.setCurrentSlide = function (i) {
75 sessionStorage.current_slide = i;
79 var _current_slide = 0;
80 _self.getCurrentSlide = function () { return current_slide; };
81 _self.setCurrentSlide = function (i) { _current_slide = i; };
84 _self.firstSlide = function () { return 0; };
85 _self.lastSlide = function () { return _self.getNumSlides() - 1; };
86 _self.refresh = function () {
87 var cur = _self.getCurrentSlide();
88 $(".canvas").each (function (i) {
90 $(this).removeClass("other_slides").addClass("current_slide");
91 var info = $(this).data("frames");
92 var frames = info.frames;
93 var upto = info.current;
94 var custom = info.custom;
95 for(var j = 0; j < Math.max(frames.length, custom.length); j++) {
96 for (var k = 0; k < frames[j].length; k++) {
97 if (j < upto || frames[j][k].hasClass("footer")){
99 frames[j][k].removeClass("inactive_frame").addClass("active_frame");
101 } else if (j == upto) {
103 frames[j][k].removeClass("inactive_frame").addClass("current_frame");
106 frames[j][k].removeClass("active_frame").removeClass("current_frame").addClass("inactive_frame");
110 if (j == upto && (callbacks = custom[j])) {
111 for (var k = 0; k < callbacks.length; k++)
112 callbacks[k]($(this));
116 } else if ($(this).hasClass("current_slide")) {
117 $(this).removeClass("current_slide").addClass("other_slides");
123 _self.nextSlide = function () {
124 _self.setCurrentSlide(Math.min(_self.getCurrentSlide()+1,
128 _self.previousSlide = function () {
129 _self.setCurrentSlide(Math.max(_self.getCurrentSlide()-1,
130 _self.firstSlide()));
133 _self.getFrameInfo = function () {
135 var i = _self.getCurrentSlide();
136 var canvas = $($(".canvas")[i]);
137 var infos = canvas.data("frames");
140 _self.getCurrentFrame = function () { return _self.getFrameInfo().current; };
141 _self.setCurrentFrame = function (i) { _self.getFrameInfo().current = i; };
142 _self.firstFrame = function () { return 0; };
143 _self.lastFrame = function () { return _self.getFrameInfo().frames.length-1; };
145 _self.nextFrame = function () {
146 _self.setCurrentFrame(Math.min(_self.getCurrentFrame()+1,
150 _self.previousFrame = function () {
151 _self.setCurrentFrame(Math.max(_self.getCurrentFrame()-1,
152 _self.firstFrame()));
155 _self.next = function () {
156 var i = _self.getCurrentFrame();
157 if (i == _self.lastFrame())
163 _self.previous = function () {
164 var i = _self.getCurrentFrame();
165 if (i == _self.firstFrame())
166 _self.previousSlide();
168 _self.previousFrame();
172 _self.keyboardHandler = function (event) {
174 switch (event.which) {
185 case 1: /* mouse button 1 */
188 case 34: /* PgDown */
192 case 8: /* backspace */
198 _self.previousSlide();
206 var _init = function () {
207 _total_slides = $(".slide").length;
209 $(document).keydown(_self.keyboardHandler);
210 $(document).mousedown(_self.keyboardHandler);
212 var cur = _self.getCurrentSlide();
213 $(".slide").each (function (i) {
214 var elem = '<div class="footer"><span class="current_slide_num">' + (i+1);
215 elem += '</span><span class="slide_num_sep"/><span class="total_slide_num">';
216 elem += _self.getNumSlides() + '</span></div>';
217 if (!($(this).hasClass("nofooter"))) {
218 $(this).append($(elem));
220 var par = $(this).parent();
222 var canvas = $('<div class="canvas"/>');
223 canvas.append($(this));
226 canvas.addClass("current_slide").removeClass("other_slides");
228 canvas.addClass("other_slides").removeClass("current_slide");
233 for (var i = 0; i < _defered_custom.length; i++){
235 var custom = _defered_custom[i];
236 var canvas = $(custom.src).parents(".canvas");
237 if (canvas.length == 0) continue;
238 canvas = $(canvas[0]);
240 var info = canvas.data("frames");
242 push(info.custom, custom.frame, custom.fn);
249 _self.init = function () {
250 $(document).ready(_init);
255 SimpleWebSlides.init();