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
$(".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");
};
_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) {
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;
_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) {
} 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