1 var SimpleWebSlides = new function () {
5 var _defered_custom = new Array();
6 var _initialized = false;
7 var _animations_running = false;
9 function push_following(t, i, v) {
10 if ((typeof t[i]) == 'undefined') {
14 if (l == 0 || !($.contains(t[i][l-1].get()[0], v.get()[0]))) {
19 function push(t, i, v) {
20 if ((typeof t[i]) == 'undefined') {
28 function init_canvas(canvas) {
29 var frames = new Array ();
31 canvas.find("*").each(function(i) {
33 if ($(this).hasClass("sws-pause")) cur_frame++;
34 push_following(frames, cur_frame, $(this));
37 canvas.data("sws-frames", { frames: frames,
39 custom: new Array() });
43 _self.getNumSlides = function () { return _total_slides; };
46 _self.registerCustom = function (i, f) {
47 if (_initialized) return;
48 //jQuery does not seem to work well
50 var scripts = document.getElementsByTagName("script");
51 var current = scripts[scripts.length-1];
53 var slide = $(current).parents(".sws-slide");
54 if (slide.length == 0) {
55 console.log("no parent ?");
58 _defered_custom[_defered_custom.length] = { src: slide[0],
65 if (typeof(Storage)!=="undefined"){
66 _self.getCurrentSlide = function () {
67 //unary + casts to integer
68 var i = +(sessionStorage.current_slide);
69 if (!(i >= 0 && i < _self.getNumSlides())){
76 _self.setCurrentSlide = function (i) {
77 sessionStorage.current_slide = i;
81 var _current_slide = 0;
82 _self.getCurrentSlide = function () { return current_slide; };
83 _self.setCurrentSlide = function (i) { _current_slide = i; };
86 _self.firstSlide = function () { return 0; };
87 _self.lastSlide = function () { return _self.getNumSlides() - 1; };
89 _self.refresh = function () {
91 var cur = _self.getCurrentSlide();
92 $(".sws-canvas").each (function (i) {
94 $(this).removeClass("sws-inactive-slide").addClass("sws-active-slide");
95 var info = $(this).data("sws-frames");
96 var frames = info.frames;
97 var upto = info.current;
98 var custom = info.custom;
99 for(var j = 0; j < Math.max(frames.length, custom.length); j++) {
100 for (var k = 0; k < frames[j].length; k++) {
101 if (j <= upto || frames[j][k].hasClass("sws-footer")){
104 .removeClass("sws-inactive-frame")
105 .addClass("sws-active-frame");
108 .removeClass("sws-active-frame")
109 .addClass("sws-inactive-frame");
113 if (j == upto && (callbacks = custom[j])) {
114 for (var k = 0; k < callbacks.length; k++)
115 callbacks[k]($(this));
119 _animation_running = true;
120 $(this).find("*").promise().done(function() {
121 _animation_running = false;
123 } else if ($(this).hasClass("sws-active-slide")) {
124 $(this).removeClass("sws-active-slide").addClass("sws-inactive-slide");
131 _self.nextSlide = function () {
132 _self.setCurrentSlide(Math.min(_self.getCurrentSlide()+1,
136 _self.previousSlide = function () {
137 _self.setCurrentSlide(Math.max(_self.getCurrentSlide()-1,
138 _self.firstSlide()));
141 _self.getFrameInfo = function () {
143 var i = _self.getCurrentSlide();
144 var canvas = $($(".sws-canvas")[i]);
145 var infos = canvas.data("sws-frames");
148 _self.getCurrentFrame = function () { return _self.getFrameInfo().current; };
149 _self.setCurrentFrame = function (i) { _self.getFrameInfo().current = i; };
150 _self.firstFrame = function () { return 0; };
151 _self.lastFrame = function () { return _self.getFrameInfo().frames.length-1; };
153 _self.nextFrame = function () {
154 _self.setCurrentFrame(Math.min(_self.getCurrentFrame()+1,
158 _self.previousFrame = function () {
159 _self.setCurrentFrame(Math.max(_self.getCurrentFrame()-1,
160 _self.firstFrame()));
163 _self.next = function () {
164 var i = _self.getCurrentFrame();
165 if (i == _self.lastFrame())
171 _self.previous = function () {
172 var i = _self.getCurrentFrame();
173 if (i == _self.firstFrame())
174 _self.previousSlide();
176 _self.previousFrame();
180 _self.keyboardHandler = function (event) {
181 if (_animation_running) return;
182 switch (event.which) {
193 case 1: /* mouse button 1 */
196 case 34: /* PgDown */
200 case 8: /* backspace */
206 _self.previousSlide();
214 var _init = function () {
215 _total_slides = $(".sws-slide").length;
217 $(document).keydown(_self.keyboardHandler);
218 $(document).mousedown(_self.keyboardHandler);
220 var cur = _self.getCurrentSlide();
221 $(".sws-slide").each (function (i) {
222 var elem = '<div class="sws-footer"><span class="sws-current-slide-num">' + (i+1);
223 elem += '</span><span class="sws-slide-num-sep"/><span class="sws-total-slide-num">';
224 elem += _self.getNumSlides() + '</span></div>';
225 if (!($(this).hasClass("sws-option-nofooter"))) {
226 $(this).append($(elem));
228 var par = $(this).parent();
230 var canvas = $('<div class="sws-canvas"/>');
231 canvas.append($(this));
235 .addClass("sws-active-slide")
236 .removeClass("sws-inacitve-slide");
239 .addClass("sws-inactive-slide")
240 .removeClass("sws-active-slide");
245 for (var i = 0; i < _defered_custom.length; i++){
247 var custom = _defered_custom[i];
248 var canvas = $(custom.src).parents(".sws-canvas");
249 if (canvas.length == 0) continue;
250 canvas = $(canvas[0]);
252 var info = canvas.data("sws-frames");
254 push(info.custom, custom.frame, custom.fn);
261 _self.init = function () {
262 $(document).ready(_init);
267 SimpleWebSlides.init();