X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=simpleWebSlides.js;h=134369c23216e99dd7119b30a6e13f33192b3bcb;hb=d0dbcbd2b3d2020d41e929b17368d1a3ba388937;hp=71f8e642b2b78481ec6b770302456ac631520ac0;hpb=b1f6566ac20a78b0de684e0dc2ff296fed24a195;p=hacks%2FsimpleWebSlides.git diff --git a/simpleWebSlides.js b/simpleWebSlides.js index 71f8e64..134369c 100644 --- a/simpleWebSlides.js +++ b/simpleWebSlides.js @@ -1,8 +1,65 @@ var SimpleWebSlides = new function () { var _self = this; var _total_slides; + var _defered_custom = new Array(); + var _initialized = false; + + function push_following(t, i, v) { + if ((typeof t[i]) == 'undefined') { + t[i] = new Array(); + }; + var l = t[i].length; + if (l == 0 || !($.contains(t[i][l-1].get()[0], v.get()[0]))) { + t[i][l] = v; + }; + }; + + function push(t, i, v) { + if ((typeof t[i]) == 'undefined') { + t[i] = new Array(); + }; + var l = t[i].length; + t[i][l] = v; + }; + + + function init_canvas(canvas) { + var frames = new Array (); + var cur_frame = 0; + canvas.find("*").each(function(i) { + + if ($(this).hasClass("pause")) cur_frame++; + push_following(frames, cur_frame, $(this)); + + }); + canvas.data("frames", { frames: frames, + current: 0, + custom: new Array() }); + + }; + _self.getNumSlides = function () { return _total_slides; }; + + _self.registerCustom = function (i, f) { + if (_initialized) return; + //jQuery does not seem to work well + //on partial doms + var scripts = document.getElementsByTagName("script"); + var current = scripts[scripts.length-1]; + console.log(current); + var slide = $(current).parents(".slide"); + if (slide.length == 0) { + console.log("no parent ?"); + return; + } + _defered_custom[_defered_custom.length] = { src: slide[0], + fn: f, + frame: i }; + $(current).remove(); + + }; + if (typeof(Storage)!=="undefined"){ _self.getCurrentSlide = function () { //unary + casts to integer @@ -28,9 +85,34 @@ var SimpleWebSlides = new function () { _self.lastSlide = function () { return _self.getNumSlides() - 1; }; _self.refresh = function () { var cur = _self.getCurrentSlide(); - $(".slide").each (function (i) { + $(".canvas").each (function (i) { if (i == cur){ $(this).removeClass("other_slides").addClass("current_slide"); + var info = $(this).data("frames"); + var frames = info.frames; + var upto = info.current; + var custom = info.custom; + for(var j = 0; j < Math.max(frames.length, custom.length); j++) { + for (var k = 0; k < frames[j].length; k++) { + if (j < upto || frames[j][k].hasClass("footer")){ + + frames[j][k].removeClass("inactive_frame").addClass("active_frame"); + + } else if (j == upto) { + + frames[j][k].removeClass("inactive_frame").addClass("current_frame"); + + } else { + frames[j][k].removeClass("active_frame").removeClass("current_frame").addClass("inactive_frame"); + }; + }; + var callbacks; + if (j == upto && (callbacks = custom[j])) { + for (var k = 0; k < callbacks.length; k++) + callbacks[k]($(this)); + }; + }; + } else if ($(this).hasClass("current_slide")) { $(this).removeClass("current_slide").addClass("other_slides"); }; @@ -47,7 +129,46 @@ var SimpleWebSlides = new function () { _self.setCurrentSlide(Math.max(_self.getCurrentSlide()-1, _self.firstSlide())); }; - + + _self.getFrameInfo = function () { + + var i = _self.getCurrentSlide(); + var canvas = $($(".canvas")[i]); + var infos = canvas.data("frames"); + return infos; + }; + _self.getCurrentFrame = function () { return _self.getFrameInfo().current; }; + _self.setCurrentFrame = function (i) { _self.getFrameInfo().current = i; }; + _self.firstFrame = function () { return 0; }; + _self.lastFrame = function () { return _self.getFrameInfo().frames.length-1; }; + + _self.nextFrame = function () { + _self.setCurrentFrame(Math.min(_self.getCurrentFrame()+1, + _self.lastFrame())); + + }; + _self.previousFrame = function () { + _self.setCurrentFrame(Math.max(_self.getCurrentFrame()-1, + _self.firstFrame())); + }; + + _self.next = function () { + var i = _self.getCurrentFrame(); + if (i == _self.lastFrame()) + _self.nextSlide(); + else + _self.nextFrame(); + }; + + _self.previous = function () { + var i = _self.getCurrentFrame(); + if (i == _self.firstFrame()) + _self.previousSlide(); + else + _self.previousFrame(); + }; + + _self.keyboardHandler = function (event) { switch (event.which) { @@ -60,14 +181,19 @@ var SimpleWebSlides = new function () { break; case 32: /* space */ - case 34: /* PgDown */ case 39: /* -> */ + case 1: /* mouse button 1 */ + _self.next(); + break; + case 34: /* PgDown */ case 78: /* n */ _self.nextSlide(); break; case 8: /* backspace */ - case 33: /* PgUp */ case 37: /* <- */ + _self.previous(); + break; + case 33: /* PgUp */ case 80: /* p */ _self.previousSlide(); break; @@ -77,28 +203,53 @@ var SimpleWebSlides = new function () { _self.refresh(); }; - _self.init = function () { + var _init = function () { _total_slides = $(".slide").length; $(document).keydown(_self.keyboardHandler); + $(document).mousedown(_self.keyboardHandler); var cur = _self.getCurrentSlide(); $(".slide").each (function (i) { - if (i == cur) { - $(this).addClass("current_slide").removeClass("other_slides"); - } else { - $(this).addClass("other_slides").removeClass("current_slide"); - }; var elem = ''; if (!($(this).hasClass("nofooter"))) { $(this).append($(elem)); }; + var par = $(this).parent(); + $(this).remove(); + var canvas = $('
'); + canvas.append($(this)); + par.append(canvas); + if (i == cur) { + canvas.addClass("current_slide").removeClass("other_slides"); + } else { + canvas.addClass("other_slides").removeClass("current_slide"); + }; + init_canvas(canvas); + }); + for (var i = 0; i < _defered_custom.length; i++){ + + var custom = _defered_custom[i]; + var canvas = $(custom.src).parents(".canvas"); + if (canvas.length == 0) continue; + canvas = $(canvas[0]); + + var info = canvas.data("frames"); + + push(info.custom, custom.frame, custom.fn); + }; + _self.refresh(); + _initialized = true; + }; -}; + _self.init = function () { + $(document).ready(_init); + }; +}; -$(document).ready(SimpleWebSlides.init); +SimpleWebSlides.init(); \ No newline at end of file