'slidechanged' event, added Reveal.addEventListener/Reveal.removeEventListener api...
authorHakim El Hattab <hakim.elhattab@gmail.com>
Fri, 4 May 2012 04:01:20 +0000 (00:01 -0400)
committerHakim El Hattab <hakim.elhattab@gmail.com>
Fri, 4 May 2012 04:01:20 +0000 (00:01 -0400)
README.md
index.html
js/reveal.js
js/reveal.min.js

index 20965a9c431dd8c6470dc99a4a89b1aa4f4dfe87..12ca7e403d1ea3b4531364064aef70cbe69b985a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -68,16 +68,27 @@ The Reveal class provides a minimal JavaScript API for controlling its navigatio
 
 ### States
 
-If you set ``data-state="someState"`` on a slide ``<section>``, "someState" will be applied as a class on the document element when that slide is opened. This allows you to apply broad style changes to the page based on the active slide.
+If you set ``data-state="somestate"`` on a slide ``<section>``, "somestate" will be applied as a class on the document element when that slide is opened. This allows you to apply broad style changes to the page based on the active slide.
 
 Furthermore you can also listen to these changes in state via JavaScript:
 
 ```
-document.addEventListener( 'someState', function() {
+Reveal.addEventListener( 'somestate', function() {
        // TODO: Sprinkle magic
 }, false );
 ```
 
+### Slide change event
+
+An 'slidechanged' event is fired each time the slide is changed (regardless of state). The event object holds the index of the current slide.
+
+```
+Reveal.addEventListener( 'slidechanged', function( event ) {
+       // event.indexh & event.indexv
+} );
+```
+
+
 ## Examples
 
 * http://lab.hakim.se/reveal-js/ (original)
@@ -104,6 +115,9 @@ document.addEventListener( 'someState', function() {
 #### 1.3 (master)
 - Revised keyboard shortcuts, including ESC for overview, N for next, P for previous. Thanks [mahemoff](https://github.com/mahemoff)
 - Added support for looped presentations via config
+- Fixed IE9 fallback
+- Added event binding methods (Reveal.addEventListener, Reveal.removeEventListener)
+- Added 'slidechanged' event
 
 #### 1.2
 
index 7f291cf20c0043775289151d98139e3e79d91f64..f314cdb5d836686253a1838ad44c4eb94e853de9 100644 (file)
                                        <p>
                                                Additionally custom events can be triggered on a per slide basis by binding to the <code>data-state</code> name.
                                        </p>
-                                       <pre><code contenteditable style="font-size: 18px; margin-top: 20px;">document.addEventListener( 'customevent', function() {
+                                       <pre><code contenteditable style="font-size: 18px; margin-top: 20px;">Reveal.addEventListener( 'customevent', function() {
        alert( '"customevent" has fired' );
 } );
                                        </code></pre>
@@ -261,10 +261,16 @@ linkify( 'a' );
                                query[ a.split( '=' ).shift() ] = a.split( '=' ).pop();
                        } );
 
-                       document.addEventListener( 'customevent', function() {
+                       // Fires when a slide with data-state=customevent is activated
+                       Reveal.addEventListener( 'customevent', function() {
                                alert( '"customevent" has fired' );
                        } );
 
+                       // Fires each time a new slide is activated
+                       Reveal.addEventListener( 'slidechanged', function( event ) {
+                               // event.indexh & event.indexv
+                       } );
+
                        Reveal.initialize({
                                // Display controls in the bottom right corner
                                controls: true,
index 4761595f2ad0322ab8955556e6598820862df8ec..5b985b59bb913527c4716995e4a001f5b51d8131 100644 (file)
@@ -78,13 +78,13 @@ var Reveal = (function(){
                dom.controlsDown = document.querySelector( '#reveal .controls .down' );
 
                // Bind all view events
-               document.addEventListener('keydown', onDocumentKeyDown, false);
-               document.addEventListener('touchstart', onDocumentTouchStart, false);
-               window.addEventListener('hashchange', onWindowHashChange, false);
-               dom.controlsLeft.addEventListener('click', preventAndForward( navigateLeft ), false);
-               dom.controlsRight.addEventListener('click', preventAndForward( navigateRight ), false);
-               dom.controlsUp.addEventListener('click', preventAndForward( navigateUp ), false);
-               dom.controlsDown.addEventListener('click', preventAndForward( navigateDown ), false);
+               document.addEventListener( 'keydown', onDocumentKeyDown, false );
+               document.addEventListener( 'touchstart', onDocumentTouchStart, false );
+               window.addEventListener( 'hashchange', onWindowHashChange, false );
+               dom.controlsLeft.addEventListener( 'click', preventAndForward( navigateLeft ), false );
+               dom.controlsRight.addEventListener( 'click', preventAndForward( navigateRight ), false );
+               dom.controlsUp.addEventListener( 'click', preventAndForward( navigateUp ), false );
+               dom.controlsDown.addEventListener( 'click', preventAndForward( navigateDown ), false );
 
                // Copy options over to our config object
                extend( config, options );
@@ -504,10 +504,8 @@ var Reveal = (function(){
 
                        document.documentElement.classList.add( state[i] );
 
-                       // Dispatch custom event
-                       var event = document.createEvent( "HTMLEvents" );
-                       event.initEvent( state[i], true, true );
-                       document.dispatchEvent( event );
+                       // Dispatch custom event matching the state's name
+                       dispatchEvent( state[i] );
                }
 
                // Clean up the remaints of the previous state
@@ -529,6 +527,12 @@ var Reveal = (function(){
                
                clearTimeout( writeURLTimeout );
                writeURLTimeout = setTimeout( writeURL, 1500 );
+
+               // Dispatch an event notifying observers of the change in slide
+               dispatchEvent( 'slidechanged', {
+                       'indexh': indexh, 
+                       'indexv': indexv
+               } );
        }
 
        /**
@@ -596,6 +600,17 @@ var Reveal = (function(){
                }
        }
 
+       /**
+        * Dispatches an event of the specified type from the 
+        * #reveal DOM element.
+        */
+       function dispatchEvent( type, properties ) {
+               var event = document.createEvent( "HTMLEvents", 1, 2 );
+               event.initEvent( type, true, true );
+               extend( event, properties );
+               dom.wrapper.dispatchEvent( event );
+       }
+
        /**
         * Navigate to the next slide fragment.
         * 
@@ -736,7 +751,15 @@ var Reveal = (function(){
                navigateLeft: navigateLeft,
                navigateRight: navigateRight,
                navigateUp: navigateUp,
-               navigateDown: navigateDown
+               navigateDown: navigateDown,
+
+               // Forward event binding to the reveal DOM element
+               addEventListener: function( type, listener, useCapture ) {
+                       ( dom.wrapper || document.querySelector( '#reveal' ) ).addEventListener( type, listener, useCapture );
+               },
+               removeEventListener: function( type, listener, useCapture ) {
+                       ( dom.wrapper || document.querySelector( '#reveal' ) ).removeEventListener( type, listener, useCapture );
+               }
        };
        
 })();
index b0551241b44c61e86646e987b6ba096ac6ad58eb..d26ad76e4e65b16de2cf96e7a9152a75fcd41559 100644 (file)
@@ -5,45 +5,45 @@
  * 
  * Copyright (C) 2012 Hakim El Hattab, http://hakim.se
  */
-var Reveal=(function(){var i="#reveal .slides>section",a="#reveal .slides>section.present>section",j=0,c=0,E={controls:false,progress:false,history:false,loop:false,mouseWheel:true,rollingLinks:true,transition:"default",theme:"default"},K=[],d={},F=document.body.style.perspectiveProperty!==undefined||document.body.style.WebkitPerspective!==undefined||document.body.style.MozPerspective!==undefined||document.body.style.msPerspective!==undefined||document.body.style.OPerspective!==undefined,k=document.body.style.transformProperty!==undefined||document.body.style.WebkitTransform!==undefined||document.body.style.MozTransform!==undefined||document.body.style.msTransform!==undefined||document.body.style.OTransform!==undefined,t=0,w=0;
-function g(M){if(!k&&!F){document.body.setAttribute("class","no-transforms");return;}d.wrapper=document.querySelector("#reveal");d.progress=document.querySelector("#reveal .progress");
+var Reveal=(function(){var i="#reveal .slides>section",a="#reveal .slides>section.present>section",j=0,c=0,F={controls:false,progress:false,history:false,loop:false,mouseWheel:true,rollingLinks:true,transition:"default",theme:"default"},L=[],d={},G=document.body.style.perspectiveProperty!==undefined||document.body.style.WebkitPerspective!==undefined||document.body.style.MozPerspective!==undefined||document.body.style.msPerspective!==undefined||document.body.style.OPerspective!==undefined,k=document.body.style.transformProperty!==undefined||document.body.style.WebkitTransform!==undefined||document.body.style.MozTransform!==undefined||document.body.style.msTransform!==undefined||document.body.style.OTransform!==undefined,u=0,x=0;
+function g(N){if(!k&&!G){document.body.setAttribute("class","no-transforms");return;}d.wrapper=document.querySelector("#reveal");d.progress=document.querySelector("#reveal .progress");
 d.progressbar=document.querySelector("#reveal .progress span");d.controls=document.querySelector("#reveal .controls");d.controlsLeft=document.querySelector("#reveal .controls .left");
 d.controlsRight=document.querySelector("#reveal .controls .right");d.controlsUp=document.querySelector("#reveal .controls .up");d.controlsDown=document.querySelector("#reveal .controls .down");
-document.addEventListener("keydown",J,false);document.addEventListener("touchstart",u,false);window.addEventListener("hashchange",r,false);d.controlsLeft.addEventListener("click",m(v),false);
-d.controlsRight.addEventListener("click",m(h),false);d.controlsUp.addEventListener("click",m(p),false);d.controlsDown.addEventListener("click",m(y),false);
-o(E,M);if(F===false){E.transition="linear";}if(E.controls){d.controls.style.display="block";}if(E.progress){d.progress.style.display="block";}if(E.transition!=="default"){d.wrapper.classList.add(E.transition);
-}if(E.theme!=="default"){d.wrapper.classList.add(E.theme);}if(E.mouseWheel){document.addEventListener("DOMMouseScroll",l,false);document.addEventListener("mousewheel",l,false);
-}if(E.rollingLinks){B();}A();}function o(N,M){for(var O in M){N[O]=M[O];}}function m(M){return function(N){N.preventDefault();M.call();};}function J(N){if(N.target.contentEditable!="inherit"||N.shiftKey||N.altKey||N.ctrlKey||N.metaKey){return;
-}var M=false;switch(N.keyCode){case 80:case 33:G();M=true;break;case 78:case 32:case 34:s();M=true;break;case 72:case 37:v();M=true;break;case 76:case 39:h();
-M=true;break;case 75:case 38:p();M=true;break;case 74:case 40:y();M=true;break;}if(M){N.preventDefault();}else{if(N.keyCode===27&&F){if(H()){I();}else{z();
-}N.preventDefault();}}}function u(P){if(P.touches.length===1){if(P.target.tagName.toLowerCase()==="a"||P.target.tagName.toLowerCase()==="img"){return;}P.preventDefault();
-var N={x:P.touches[0].clientX,y:P.touches[0].clientY};var M=window.innerWidth*0.3;var O=window.innerHeight*0.3;if(N.x<M){v();}else{if(N.x>window.innerWidth-M){h();
-}else{if(N.y<O){p();}else{if(N.y>window.innerHeight-O){y();}}}}b();}}function l(M){clearTimeout(t);t=setTimeout(function(){var N=M.detail||-M.wheelDelta;
-if(N>0){s();}else{G();}},100);}function r(M){A();}function B(){if(F){var N=document.querySelectorAll("#reveal .slides section a:not(.image)");for(var O=0,M=N.length;
-O<M;O++){var P=N[O];if(P.textContent&&!P.querySelector("img")&&(!P.className||!P.classList.contains(P,"roll"))){P.classList.add("roll");P.innerHTML='<span data-title="'+P.text+'">'+P.innerHTML+"</span>";
-}}}}function z(){d.wrapper.classList.add("overview");var M=Array.prototype.slice.call(document.querySelectorAll(i));for(var R=0,P=M.length;R<P;R++){var O=M[R],V="translateZ(-2500px) translate("+((R-j)*105)+"%, 0%)";
-O.setAttribute("data-index-h",R);O.style.display="block";O.style.WebkitTransform=V;O.style.MozTransform=V;O.style.msTransform=V;O.style.OTransform=V;O.style.transform=V;
-if(!O.classList.contains("stack")){O.addEventListener("click",x,true);}var U=Array.prototype.slice.call(O.querySelectorAll("section"));for(var Q=0,N=U.length;
-Q<N;Q++){var T=U[Q],S="translate(0%, "+((Q-c)*105)+"%)";T.setAttribute("data-index-h",R);T.setAttribute("data-index-v",Q);T.style.display="block";T.style.WebkitTransform=S;
-T.style.MozTransform=S;T.style.msTransform=S;T.style.OTransform=S;T.style.transform=S;T.addEventListener("click",x,true);}}}function I(){d.wrapper.classList.remove("overview");
-var P=Array.prototype.slice.call(document.querySelectorAll("#reveal .slides section"));for(var O=0,M=P.length;O<M;O++){var N=P[O];N.style.WebkitTransform="";
-N.style.MozTransform="";N.style.msTransform="";N.style.OTransform="";N.style.transform="";N.removeEventListener("click",x);}b();}function H(){return d.wrapper.classList.contains("overview");
-}function x(M){if(H()){M.preventDefault();I();j=this.getAttribute("data-index-h");c=this.getAttribute("data-index-v");b();}}function L(N,P){var R=Array.prototype.slice.call(document.querySelectorAll(N)),S=R.length;
-if(S){if(E.loop){P%=S;if(P<0){P=S+P;}}P=Math.max(Math.min(P,S-1),0);for(var Q=0;Q<S;Q++){var M=R[Q];if(H()===false){var T=Math.abs((P-Q)%(S-3))||0;M.style.display=T>3?"none":"block";
-}R[Q].classList.remove("past");R[Q].classList.remove("present");R[Q].classList.remove("future");if(Q<P){R[Q].classList.add("past");}else{if(Q>P){R[Q].classList.add("future");
-}}if(M.querySelector("section")){R[Q].classList.add("stack");}}R[P].classList.add("present");var O=R[P].getAttribute("data-state");if(O){K=K.concat(O.split(" "));
-}}else{P=0;}return P;}function b(){var Q=K.concat();K.length=0;j=L(i,j);c=L(a,c);stateLoop:for(var O=0,M=K.length;O<M;O++){for(var N=0;N<Q.length;N++){if(Q[N]===K[O]){Q.splice(N,1);
-continue stateLoop;}}document.documentElement.classList.add(K[O]);var P=document.createEvent("HTMLEvents");P.initEvent(K[O],true,true);document.dispatchEvent(P);
-}while(Q.length){document.documentElement.classList.remove(Q.pop());}if(E.progress){d.progressbar.style.width=(j/(document.querySelectorAll(i).length-1))*window.innerWidth+"px";
-}if(H()){z();}n();clearTimeout(w);w=setTimeout(f,1500);}function n(){var M=e();[d.controlsLeft,d.controlsRight,d.controlsUp,d.controlsDown].forEach(function(N){N.classList.remove("enabled");
-});if(M.left){d.controlsLeft.classList.add("enabled");}if(M.right){d.controlsRight.classList.add("enabled");}if(M.up){d.controlsUp.classList.add("enabled");
-}if(M.down){d.controlsDown.classList.add("enabled");}}function e(){var M=document.querySelectorAll(i);var N=document.querySelectorAll(a);return{left:j>0,right:j<M.length-1,up:c>0,down:c<N.length-1};
-}function A(){var M=window.location.hash.slice(2).split("/");j=parseInt(M[0])||0;c=parseInt(M[1])||0;C(j,c);}function f(){if(E.history){var M="/";if(j>0||c>0){M+=j;
-}if(c>0){M+="/"+c;}window.location.hash=M;}}function q(){if(document.querySelector(a+".present")){var N=document.querySelectorAll(a+".present .fragment:not(.visible)");
-if(N.length){N[0].classList.add("visible");return true;}}else{var M=document.querySelectorAll(i+".present .fragment:not(.visible)");if(M.length){M[0].classList.add("visible");
-return true;}}return false;}function D(){if(document.querySelector(a+".present")){var N=document.querySelectorAll(a+".present .fragment.visible");if(N.length){N[N.length-1].classList.remove("visible");
-return true;}}else{var M=document.querySelectorAll(i+".present .fragment.visible");if(M.length){M[M.length-1].classList.remove("visible");return true;}}return false;
-}function C(N,M){j=N===undefined?j:N;c=M===undefined?c:M;b();}function v(){if(H()||D()===false){j--;c=0;b();}}function h(){if(H()||q()===false){j++;c=0;
-b();}}function p(){if(H()||D()===false){c--;b();}}function y(){if(H()||q()===false){c++;b();}}function G(){if(D()===false){if(e().up){p();}else{var M=document.querySelector("#reveal .slides>section.past:nth-child("+j+")");
-if(M){c=(M.querySelectorAll("section").length+1)||0;j--;b();}}}}function s(){if(q()===false){e().down?y():h();}}return{initialize:g,navigateTo:C,navigateLeft:v,navigateRight:h,navigateUp:p,navigateDown:y};
-})();
\ No newline at end of file
+document.addEventListener("keydown",K,false);document.addEventListener("touchstart",v,false);window.addEventListener("hashchange",s,false);d.controlsLeft.addEventListener("click",m(w),false);
+d.controlsRight.addEventListener("click",m(h),false);d.controlsUp.addEventListener("click",m(q),false);d.controlsDown.addEventListener("click",m(z),false);
+p(F,N);if(G===false){F.transition="linear";}if(F.controls){d.controls.style.display="block";}if(F.progress){d.progress.style.display="block";}if(F.transition!=="default"){d.wrapper.classList.add(F.transition);
+}if(F.theme!=="default"){d.wrapper.classList.add(F.theme);}if(F.mouseWheel){document.addEventListener("DOMMouseScroll",l,false);document.addEventListener("mousewheel",l,false);
+}if(F.rollingLinks){C();}B();}function p(O,N){for(var P in N){O[P]=N[P];}}function m(N){return function(O){O.preventDefault();N.call();};}function K(O){if(O.target.contentEditable!="inherit"||O.shiftKey||O.altKey||O.ctrlKey||O.metaKey){return;
+}var N=false;switch(O.keyCode){case 80:case 33:H();N=true;break;case 78:case 32:case 34:t();N=true;break;case 72:case 37:w();N=true;break;case 76:case 39:h();
+N=true;break;case 75:case 38:q();N=true;break;case 74:case 40:z();N=true;break;}if(N){O.preventDefault();}else{if(O.keyCode===27&&G){if(I()){J();}else{A();
+}O.preventDefault();}}}function v(Q){if(Q.touches.length===1){if(Q.target.tagName.toLowerCase()==="a"||Q.target.tagName.toLowerCase()==="img"){return;}Q.preventDefault();
+var O={x:Q.touches[0].clientX,y:Q.touches[0].clientY};var N=window.innerWidth*0.3;var P=window.innerHeight*0.3;if(O.x<N){w();}else{if(O.x>window.innerWidth-N){h();
+}else{if(O.y<P){q();}else{if(O.y>window.innerHeight-P){z();}}}}b();}}function l(N){clearTimeout(u);u=setTimeout(function(){var O=N.detail||-N.wheelDelta;
+if(O>0){t();}else{H();}},100);}function s(N){B();}function C(){if(G){var O=document.querySelectorAll("#reveal .slides section a:not(.image)");for(var P=0,N=O.length;
+P<N;P++){var Q=O[P];if(Q.textContent&&!Q.querySelector("img")&&(!Q.className||!Q.classList.contains(Q,"roll"))){Q.classList.add("roll");Q.innerHTML='<span data-title="'+Q.text+'">'+Q.innerHTML+"</span>";
+}}}}function A(){d.wrapper.classList.add("overview");var N=Array.prototype.slice.call(document.querySelectorAll(i));for(var S=0,Q=N.length;S<Q;S++){var P=N[S],W="translateZ(-2500px) translate("+((S-j)*105)+"%, 0%)";
+P.setAttribute("data-index-h",S);P.style.display="block";P.style.WebkitTransform=W;P.style.MozTransform=W;P.style.msTransform=W;P.style.OTransform=W;P.style.transform=W;
+if(!P.classList.contains("stack")){P.addEventListener("click",y,true);}var V=Array.prototype.slice.call(P.querySelectorAll("section"));for(var R=0,O=V.length;
+R<O;R++){var U=V[R],T="translate(0%, "+((R-c)*105)+"%)";U.setAttribute("data-index-h",S);U.setAttribute("data-index-v",R);U.style.display="block";U.style.WebkitTransform=T;
+U.style.MozTransform=T;U.style.msTransform=T;U.style.OTransform=T;U.style.transform=T;U.addEventListener("click",y,true);}}}function J(){d.wrapper.classList.remove("overview");
+var Q=Array.prototype.slice.call(document.querySelectorAll("#reveal .slides section"));for(var P=0,N=Q.length;P<N;P++){var O=Q[P];O.style.WebkitTransform="";
+O.style.MozTransform="";O.style.msTransform="";O.style.OTransform="";O.style.transform="";O.removeEventListener("click",y);}b();}function I(){return d.wrapper.classList.contains("overview");
+}function y(N){if(I()){N.preventDefault();J();j=this.getAttribute("data-index-h");c=this.getAttribute("data-index-v");b();}}function M(O,Q){var S=Array.prototype.slice.call(document.querySelectorAll(O)),T=S.length;
+if(T){if(F.loop){Q%=T;if(Q<0){Q=T+Q;}}Q=Math.max(Math.min(Q,T-1),0);for(var R=0;R<T;R++){var N=S[R];if(I()===false){var U=Math.abs((Q-R)%(T-3))||0;N.style.display=U>3?"none":"block";
+}S[R].classList.remove("past");S[R].classList.remove("present");S[R].classList.remove("future");if(R<Q){S[R].classList.add("past");}else{if(R>Q){S[R].classList.add("future");
+}}if(N.querySelector("section")){S[R].classList.add("stack");}}S[Q].classList.add("present");var P=S[Q].getAttribute("data-state");if(P){L=L.concat(P.split(" "));
+}}else{Q=0;}return Q;}function b(){var Q=L.concat();L.length=0;j=M(i,j);c=M(a,c);stateLoop:for(var P=0,N=L.length;P<N;P++){for(var O=0;O<Q.length;O++){if(Q[O]===L[P]){Q.splice(O,1);
+continue stateLoop;}}document.documentElement.classList.add(L[P]);n(L[P]);}while(Q.length){document.documentElement.classList.remove(Q.pop());}if(F.progress){d.progressbar.style.width=(j/(document.querySelectorAll(i).length-1))*window.innerWidth+"px";
+}if(I()){A();}o();clearTimeout(x);x=setTimeout(f,1500);n("slidechanged",{indexh:j,indexv:c});}function o(){var N=e();[d.controlsLeft,d.controlsRight,d.controlsUp,d.controlsDown].forEach(function(O){O.classList.remove("enabled");
+});if(N.left){d.controlsLeft.classList.add("enabled");}if(N.right){d.controlsRight.classList.add("enabled");}if(N.up){d.controlsUp.classList.add("enabled");
+}if(N.down){d.controlsDown.classList.add("enabled");}}function e(){var N=document.querySelectorAll(i);var O=document.querySelectorAll(a);return{left:j>0,right:j<N.length-1,up:c>0,down:c<O.length-1};
+}function B(){var N=window.location.hash.slice(2).split("/");j=parseInt(N[0])||0;c=parseInt(N[1])||0;D(j,c);}function f(){if(F.history){var N="/";if(j>0||c>0){N+=j;
+}if(c>0){N+="/"+c;}window.location.hash=N;}}function n(O,N){var P=document.createEvent("HTMLEvents",1,2);P.initEvent(O,true,true);p(P,N);d.wrapper.dispatchEvent(P);
+}function r(){if(document.querySelector(a+".present")){var O=document.querySelectorAll(a+".present .fragment:not(.visible)");if(O.length){O[0].classList.add("visible");
+return true;}}else{var N=document.querySelectorAll(i+".present .fragment:not(.visible)");if(N.length){N[0].classList.add("visible");return true;}}return false;
+}function E(){if(document.querySelector(a+".present")){var O=document.querySelectorAll(a+".present .fragment.visible");if(O.length){O[O.length-1].classList.remove("visible");
+return true;}}else{var N=document.querySelectorAll(i+".present .fragment.visible");if(N.length){N[N.length-1].classList.remove("visible");return true;}}return false;
+}function D(O,N){j=O===undefined?j:O;c=N===undefined?c:N;b();}function w(){if(I()||E()===false){j--;c=0;b();}}function h(){if(I()||r()===false){j++;c=0;
+b();}}function q(){if(I()||E()===false){c--;b();}}function z(){if(I()||r()===false){c++;b();}}function H(){if(E()===false){if(e().up){q();}else{var N=document.querySelector("#reveal .slides>section.past:nth-child("+j+")");
+if(N){c=(N.querySelectorAll("section").length+1)||0;j--;b();}}}}function t(){if(r()===false){e().down?z():h();}}return{initialize:g,navigateTo:D,navigateLeft:w,navigateRight:h,navigateUp:q,navigateDown:z,addEventListener:function(O,P,N){(d.wrapper||document.querySelector("#reveal")).addEventListener(O,P,N);
+},removeEventListener:function(O,P,N){(d.wrapper||document.querySelector("#reveal")).removeEventListener(O,P,N);}};})();
\ No newline at end of file