<head>
<title>SimpleWebSlides</title>
- <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=utf-8" />
<meta name="copyright"
content="Copyright © 2013 Kim Nguyễn" />
<script src="../simpleWebSlides.js" type="text/javascript" ></script>
<!-- Customize some templates and initialize -->
<script type="text/javascript">
-
+/*
SWS.Presentation.setTemplate('sws-slide-change',
SWS.Effects.slideChangeVerticalSlide);
+ SWS.Presentation.setTemplate('sws-slide-change',
+ SWS.Effects.slideChangeHorizontalSlide);
+ SWS.Presentation.setTemplate('sws-slide-change',
+ SWS.Effects.slideChangeFadeOutIn);
+*/
+ SWS.Presentation.setTemplate('sws-slide-change',
+ SWS.Effects.slideChangeHorizontalFlip);
SWS.Presentation.setTemplate('sws-object-deactivate',
SWS.Effects.objectDeactivateFadeOut);
<li class="sws-pause" >Theme to
your <span style='font-size:larger'>❤</span>'s content
with <em id="css">C S S</em>!</li>
- <li id="foo" class="sws-pause" >Create animations using Javascript & jQuery!</li>
+ <li class="sws-pause" >Create animations using Javascript & jQuery!</li>
+ <li class="sws-onslide-1_3_5_7">(I'm here every other frame)</li>
+ </ul>
<script type="text/javascript">
var zoom_title = function (canvas) {
var h1 = canvas.find("h1");
var old_size = h1.css('font-size');
- h1.animate({"font-size":"100pt" }, 300)
+ h1.animate({"font-size":"80pt" }, 300)
.animate({"font-size":old_size }, 300);
};
SWS.Presentation.registerCallback(3, zoom_title);
</script>
- </ul>
</div>
<div class="sws-slide">
<li class="sws-pause">Difficult to integrate several media
(videos, vector graphics, sounds,…)
</li>
- <script type="text/javascript">
- SWS.Presentation.registerCallback(2, zoom_title);
- SWS.Presentation.registerCallback(3, zoom_title);
- SWS.Presentation.registerCallback("slide", zoom_title);
- </script>
-
- <![CDATA[ ANCDE ]]>
</ul>
</div>
t[i][l] = v;
};
+ self.isEmpty = function (o) {
+ for(var _ in o) return false;
+ return true;
+ };
+
+ self.parseFrameSpec = function (s) {
+ var elems = s.split("_");
+ var result = {};
+ var min_last = 10000;
+ var max_value = -1;
+ for(var i = 0; i < elems.length; i++){
+ var bounds = elems[i].split("-");
+ if (bounds.length > 2 || bounds.length == 0) return {};
+ if (bounds.length == 1) bounds[1] = bounds[0];
+ var a = parseInt(bounds[0]);
+ var b = parseInt(bounds[1])
+ if (!isFinite(a) || !isFinite(b)) return {};
+ a = Math.min(a, 1000); // don't allow more than 1000 frames/slide
+ b = Math.min(b, 1000);
+ if (b > max_value) max_value = b;
+ for (var j = a; j <= b; j++)
+ result[j] = true;
+ };
+ return result;
+ };
self.slideActivate = function (o) {
if (!(o.hasClass("sws-active-slide"))){
if (!(o.hasClass("sws-active-object"))){
o.removeClass("sws-inactive-object").addClass("sws-active-object");
o.css({'visibility':'visible'});
+ return true;
};
+ return false;
};
self.objectDeactivate = function (o) {
- o.css({'visibility':'hidden', 'display':''});
if (!(o.hasClass("sws-inactive-object"))){
o.addClass("sws-inactive-object").removeClass("sws-active-object");
+ o.css({'visibility':'hidden'});
+ return true;
};
+ return false;
};
self.updateFooter = function (o) {
var footer = o.find(".sws-footer");
SWS.Effects = new function () {
var self = this;
+
self.objectDeactivateFadeOut = function (o) {
- o.fadeOut(150, function () { SWS.Utils.objectDeactivate(o)});
+ o.animate({'opacity': '0'}, 150,
+ function () { SWS.Utils.objectDeactivate(o)});
};
self.objectActivateFadeIn = function (o) {
- SWS.Utils.objectActivate(o);
- o.fadeIn(150);
+
+ if (SWS.Utils.objectActivate(o)){
+ o.animate({'opacity': '1' }, 150);
+ };
+
};
+ self.slideChangeHorizontalFlip = function (from, to){
+ var f = SWS.Presentation.getSlide(from);
+ var t = SWS.Presentation.getSlide(to);
+ f.animate({ 'left': '50%', 'width': '0pt', 'opacity':'0' }, 150,
+ function () {
+ SWS.Utils.slideDeactivate(f);
+ f.css({'left':'0%', 'width': '100%'});
+ t.css({ 'left': '50%', 'width': '0pt','opacity':'0' });
+ SWS.Utils.slideActivate(t);
+ t.animate({'left':'0%', 'width': '100%','opacity':'1'});
+ });
+ };
+ self.slideChangeFadeOutIn = function (from, to) {
+ var f = SWS.Presentation.getSlide(from);
+ var t = SWS.Presentation.getSlide(to);
+ f.animate({ 'opacity': '0'}, 150,
+ function () { SWS.Utils.slideDeactivate(f);
+ SWS.Utils.slideActivate(t);
+ t.css('opacity', '0');
+ t.animate({ 'opacity': '1'}, 150);
+ });
+ };
self.slideChangeHorizontalSlide = function (from, to) {
var f = SWS.Presentation.getSlide(from);
var t = SWS.Presentation.getSlide(to);
};
-/*
- Representation of intervals of positive integers.
-
-SWS.Interval = new function (init) {
-
- var self = this;
- self.data = new Array();
- self.parseString(s) {
- var elems = s.split("_");
- for(var i = 0; i < elems.length; i++){
- var bounds = elems[i].split("-");
- if (bounds.length > 2) continue;
- if (SWS.isUndefined(bounds[1])) bounds[1] = bounds[0];
- if (!(isFinite(bounds[0]) && isFinite(bounds[1]))) continue;
-
- self.add(+(bounds[0]), +(bounds[1]));
- };
-7C
- };
- self.add(x, y) {
- if (SWS.isUndefined(y) && isFinite(x)) self.add(x,x);
-
-
-
-
- };
-5B
-
-
- };
-};
-*/
SWS.Presentation = new function () {
var self = this;
+ //TODO move outside of the Presentation object
var templates = {};
- //TODO: clean-up;
var _total_slides;
var _initialized = false;
- var _animations_running = false;
+ var _disable_input_events = false;
var _slide_callbacks = new Array ();
self.lastSlide = function () { return self.getNumSlides() - 1; };
self.refresh = function () {
- /* block upcoming input event until all animation are finished */
- _animations_running = true;
+ /* block upcoming input event until all animations are finished */
+ _disable_input_events = true;
var canvas = $(".sws-canvas");
var from_slide_num = canvas.index($(".sws-active-slide"));
var to_slide_num = self.getCurrentSlide();
var watch_slide_anim = false;
var to_slide = $(canvas[to_slide_num]);
- var slide_change = !_initialized || (from_slide_num != to_slide_num);
+ var slide_change = (from_slide_num != to_slide_num);
var info = to_slide.data("sws-frame-info");
if (slide_change) {
var cur = info.current;
var custom = info.custom;
var real_slide = to_slide.children(".sws-slide");
- real_slide.find("*").add(real_slide).each (function (i) {
- var fcur = "f" + cur;
+
+ to_slide.children(".sws-slide").find("*").andSelf().each(function (i){
var frameset = $(this).data("sws-frame-set") || {};
- if (frameset[fcur])
+ if (frameset[cur])
templates['sws-object-activate']($(this));
else
templates['sws-object-deactivate']($(this));
};
to_watch.find("*").promise().done(function() {
- _animations_running = false;
+ _disable_input_events = false;
});
};
};
self.inputHandler = function (event) {
- if (_animations_running) return;
+ if (_disable_input_events) return;
switch (event.which) {
case 36:/* Home */
- self.firstSlide();
+ self.setCurrentSlide(self.firstSlide());
break;
case 35:/* End */
- self.lastSlide();
+ self.setCurrentSlide(self.lastSlide());
break;
case 32: /* space */
if (SWS.Utils.isUndefined(custom)) {
custom = new Array ();
};
+
for (var i = 0; i < custom.length; i++) {
- if (isFinite(custom[i].frame))
- SWS.Utils.push2(callbacks.at_frame, +(custom[i].frame), custom[i].fn);
- else if (custom[i].frame == "slide")
+ if (isFinite(custom[i].frame)){
+ var num = +(custom[i].frame);
+ if (num > last_frame) last_frame = num;
+ SWS.Utils.push2(callbacks.at_frame, num, custom[i].fn);
+ } else if (custom[i].frame == "slide")
callbacks.at_slide.push(custom[i].fn);
+ else {
+ var frame_set = SWS.Utils.parseFrameSpec(custom[i].frame);
+ for(var f in frame_set){
+ if (f > last_frame) last_frame = f;
+ SWS.Utils.push2(callbacks.at_frame, +(f), custom[i].fn);
+ };
+ }
};
- slide.find("*").add(slide).each(function(i) {
- if ($(this).filter('*[class*="sws-onslide-"]').length) {
- } else {
- if ($(this).hasClass("sws-pause")) cur_frame++;
- var o = {};
- for (var j = cur_frame; j <= last_frame; j++)
- o[ "f" + j ] = true;
- $(this).data("sws-frame-set", o);
+ var specials = slide.find('*[class*="sws-onslide-"]').find("*").andSelf();
+ specials.each(function(i) {
+ var cls = $(this).attr('class');
+ var idx = cls.indexOf("sws-onslide-");
+ if (idx >= 0) {
+ var end = cls.indexOf(" ", idx);
+ end = (end == -1) ? cls.length : end;
+ var spec = cls.substring(idx+12, end);
+ var o = SWS.Utils.parseFrameSpec(spec);
+ for(var f in o)
+ if (f > last_frame) last_frame = f;
+
+ if (!SWS.Utils.isEmpty(o))
+ $(this).data("sws-frame-set", o);
};
});
+ slide.find("*").andSelf().not(specials).each(function(i) {
+ if ($(this).hasClass("sws-pause")) cur_frame++;
+ var o = {};
+ for (var j = cur_frame; j <= last_frame; j++)
+ o[ j ] = true;
+ if (!SWS.Utils.isEmpty(o))
+ $(this).data("sws-frame-set", o);
+ });
+
canvas.data("sws-frame-info", { current: 0,
last: last_frame,
callbacks: callbacks