diff --git a/shower.min.js b/shower.min.js index c2bc87c..d37ea0e 100644 --- a/shower.min.js +++ b/shower.min.js @@ -3,4 +3,4 @@ * @copyright 2010–2013 Vadim Makeev, pepelsbey.net * @license MIT license: github.com/shower/shower/wiki/MIT-License */ -window.shower=function(window,document,undefined){var shower={},url=window.location,body=document.body,slides=document.querySelectorAll(".slide"),progress=document.querySelector("div.progress div"),slideList=[],timer,isHistoryApiSupported=!!(window.history&&history.pushState),l=slides.length,i;shower._getData=function(element,name){return element.dataset?element.dataset[name]:element.getAttribute("data-"+name)};for(i=0;i=slideList.length){slideNumber=slideList.length-1}return slideNumber};shower._getSlideIdByEl=function(el){while("BODY"!==el.nodeName&&"HTML"!==el.nodeName){if(el.classList.contains("slide")){return el.id}else{el=el.parentNode}}return""};shower._checkInteractiveElement=function(e){return"A"===e.target.nodeName};shower.getSlideNumber=function(slideId){var i=slideList.length-1,slideNumber;if(slideId===""){slideNumber=0}for(;i>=0;--i){if(slideId===slideList[i].id){slideNumber=i;break}}return slideNumber};shower.next=function(callback){var currentSlideNumber=shower.getCurrentSlideNumber(),ret=false;if(-1===currentSlideNumber||!slideList[currentSlideNumber].hasInnerNavigation||-1===shower.increaseInnerNavigation(currentSlideNumber)){shower.go(currentSlideNumber+1);ret=currentSlideNumber+2;if(typeof callback==="function"){callback()}}return ret};shower.previous=function(callback){var currentSlideNumber=shower.getCurrentSlideNumber(),ret=false;if(currentSlideNumber>0){ret=currentSlideNumber;shower.go(currentSlideNumber-1);if(typeof callback==="function"){callback()}}return ret};shower.first=function(callback){if(typeof callback==="function"){callback()}return shower.go(0)};shower.last=function(callback){if(typeof callback==="function"){callback()}return shower.go(slideList.length-1)};shower.enterSlideMode=function(callback){var currentSlideNumber=shower.getCurrentSlideNumber();if(currentSlideNumber===-1){currentSlideNumber=0}shower.go(currentSlideNumber);shower.showPresenterNotes(currentSlideNumber);if(shower.isListMode()&&isHistoryApiSupported){history.pushState(null,null,url.pathname+"?full"+shower.getSlideHash(currentSlideNumber))}body.classList.remove("list");body.classList.add("full");if(window.console&&window.console.clear){console.clear()}shower.updateProgress(currentSlideNumber);shower.updateCurrentAndPassedSlides(currentSlideNumber);shower.runSlideshowIfPresented(currentSlideNumber);if(typeof callback==="function"){callback()}return shower._applyTransform(shower._getTransform())};shower.enterListMode=function(callback){var currentSlideNumber=shower.getCurrentSlideNumber();body.classList.remove("full");body.classList.add("list");if(shower.isSlideMode()&&isHistoryApiSupported){history.pushState(null,null,url.pathname+shower.getSlideHash(currentSlideNumber))}shower.scrollToSlide(currentSlideNumber);if(typeof callback==="function"){callback()}return shower._applyTransform("none")};shower.toggleMode=function(callback){if(shower.isListMode()){shower.enterSlideMode()}else{shower.enterListMode()}if(typeof callback==="function"){callback()}return true};shower.getCurrentSlideNumber=function(){var i=slideList.length-1,currentSlideId=url.hash.substr(1);for(;i>=0;--i){if(currentSlideId===slideList[i].id){return i}}return-1};shower.scrollToSlide=function(slideNumber){var currentSlide,ret=false;if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}if(shower.isSlideMode()){throw new Error("You can't scroll to because you in slide mode. Please, switch to list mode.")}if(-1===slideNumber){return ret}if(slideList[slideNumber]){currentSlide=document.getElementById(slideList[slideNumber].id);window.scrollTo(0,currentSlide.offsetTop);ret=true}else{throw new Error("There is no slide with number "+slideNumber)}return ret};shower.isListMode=function(){return isHistoryApiSupported?!/^full.*/.test(url.search.substr(1)):body.classList.contains("list")};shower.isSlideMode=function(){return isHistoryApiSupported?/^full.*/.test(url.search.substr(1)):body.classList.contains("full")};shower.updateProgress=function(slideNumber){if(null===progress){return false}if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}progress.style.width=(100/(slideList.length-1)*shower._normalizeSlideNumber(slideNumber)).toFixed(2)+"%";return true};shower.updateCurrentAndPassedSlides=function(slideNumber){var i,slide,l=slideList.length;slideNumber=shower._normalizeSlideNumber(slideNumber);if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}for(i=0;islideNumber){slide.classList.remove("visited");slide.classList.remove("active")}else{slide.classList.remove("visited");slide.classList.add("active")}}return true};shower.showPresenterNotes=function(slideNumber){if(window.console){slideNumber=shower._normalizeSlideNumber(slideNumber);var slideId=slideList[slideNumber].id,nextSlideId=slideList[slideNumber+1]?slideList[slideNumber+1].id:null,notes=document.getElementById(slideId).querySelector("footer");if(notes){console.info(notes.innerHTML.replace(/\n\s+/g,"\n"))}if(nextSlideId){var next=document.getElementById(nextSlideId).querySelector("h2");if(next){next=next.innerHTML.replace(/^\s+|<[^>]+>/g,"");console.info("NEXT: "+next)}}}};shower.getSlideHash=function(slideNumber){if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}slideNumber=shower._normalizeSlideNumber(slideNumber);return"#"+slideList[slideNumber].id};shower.go=function(slideNumber,callback){if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}url.hash=shower.getSlideHash(slideNumber);if(shower.isSlideMode()){shower.updateProgress(slideNumber);shower.updateCurrentAndPassedSlides(slideNumber);shower.showPresenterNotes(slideNumber);if(typeof callback==="function"){callback()}}return slideNumber};shower.runSlideshowIfPresented=function(slideNumber){if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}slideNumber=shower._normalizeSlideNumber(slideNumber);clearTimeout(timer);if(slideList[slideNumber].hasTiming){var timing=shower._getData(document.getElementById(slideList[slideNumber].id),"timing").split(":");timing=parseInt(timing[0],10)*60*1e3+parseInt(timing[1],10)*1e3;timer=setTimeout(function(){shower.go(slideNumber+1);shower.runSlideshowIfPresented(slideNumber+1)},timing)}return true};shower.increaseInnerNavigation=function(slideNumber){var nextNodes,node,ret=-1;if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}if(slideList[slideNumber].hasInnerNavigation){nextNodes=document.getElementById(slideList[slideNumber].id).querySelectorAll(".next:not(.active)");if(0!==nextNodes.length){node=nextNodes[0];node.classList.add("active");ret=nextNodes.length-1}}return ret};window.addEventListener("DOMContentLoaded",function(){if(body.classList.contains("full")){shower.enterSlideMode()}},false);window.addEventListener("popstate",function(){if(shower.isListMode()){shower.enterListMode()}else{shower.enterSlideMode()}},false);window.addEventListener("resize",function(){if(shower.isSlideMode()){shower._applyTransform(shower._getTransform())}},false);document.addEventListener("keydown",function(e){if(e.altKey||e.ctrlKey||e.metaKey){return}var currentSlideNumber=shower.getCurrentSlideNumber(),innerNavigationCompleted=true;switch(e.which){case 116:e.preventDefault();if(shower.isListMode()){var slideNumber=e.shiftKey?currentSlideNumber:0;shower.go(slideNumber);shower.enterSlideMode()}else{shower.enterListMode()}break;case 13:if(shower.isListMode()&&-1!==currentSlideNumber){e.preventDefault();shower.enterSlideMode()}break;case 27:if(shower.isSlideMode()){e.preventDefault();shower.enterListMode()}break;case 33:case 38:case 37:case 72:case 75:e.preventDefault();shower.previous();break;case 34:case 40:case 39:case 76:case 74:e.preventDefault();if(shower.isSlideMode()){innerNavigationCompleted=!slideList[currentSlideNumber].hasInnerNavigation||-1===shower.increaseInnerNavigation(currentSlideNumber)}else{innerNavigationCompleted=true}if(-1===currentSlideNumber||innerNavigationCompleted){currentSlideNumber++;shower.go(currentSlideNumber);if(shower.isSlideMode()){shower.runSlideshowIfPresented(currentSlideNumber)}}break;case 36:e.preventDefault();shower.first();break;case 35:e.preventDefault();shower.last();break;case 9:case 32:e.preventDefault();shower[e.shiftKey?"previous":"next"]();break;default:}},false);document.addEventListener("click",function(e){if(shower.isListMode()&&shower._getSlideIdByEl(e.target)){e.preventDefault();shower.go(shower.getSlideNumber(shower._getSlideIdByEl(e.target)));shower.enterSlideMode()}},false);document.addEventListener("touchstart",function(e){if(shower._getSlideIdByEl(e.target)){if(shower.isSlideMode()&&!shower._checkInteractiveElement(e)){var x=e.touches[0].pageX;if(x>window.innerWidth/2){shower.next()}else{shower.previous()}}if(shower.isListMode()){shower.go(shower.getSlideNumber(shower._getSlideIdByEl(e.target)));shower.enterSlideMode()}}},false);document.addEventListener("touchmove",function(e){if(shower.isSlideMode()){e.preventDefault()}},false);return shower}(this,this.document); \ No newline at end of file + window.shower=function(e,t,n){var r={},i=e.location,s=t.body,o=t.querySelectorAll(".slide"),u=t.querySelector("div.progress div"),a=[],f,l=!!e.history&&!!history.pushState,c=o.length,h;r._getData=function(e,t){return e.dataset?e.dataset[t]:e.getAttribute("data-"+t)};for(h=0;h=a.length&&(e=a.length-1),e},r._getSlideIdByEl=function(e){while("BODY"!==e.nodeName&&"HTML"!==e.nodeName){if(e.classList.contains("slide"))return e.id;e=e.parentNode}return""},r._checkInteractiveElement=function(e){return"A"===e.target.nodeName},r.getSlideNumber=function(e){var t=a.length-1,n;e===""&&(n=0);for(;t>=0;--t)if(e===a[t].id){n=t;break}return n},r.go=function(e,t){if(!r._isNumber(e))throw new Error("Gimme slide number as Number, baby!");return i.hash=r.getSlideHash(e),r.isSlideMode()&&(r.showPresenterNotes(e),r.updateProgress(e),r.updateCurrentAndPassedSlides(e),r.runInnerNavigation(e)),typeof t=="function"&&t(),e},r.next=function(e){var t=r.getCurrentSlideNumber(),n=!1;return(-1===t||!a[t].hasInnerNavigation||!r.increaseInnerNavigation(t))&&t+2<=a.length&&(r.go(t+1),n=t+2),r.isSlideMode()&&r.runInnerNavigation(t+1),typeof e=="function"&&e(),n},r.previous=function(e){var t=r.getCurrentSlideNumber(),n=!1;return t>0&&(n=t,r.go(t-1),typeof e=="function"&&e()),n},r.first=function(e){return typeof e=="function"&&e(),r.go(0)},r.last=function(e){return typeof e=="function"&&e(),r.go(a.length-1)},r.enterSlideMode=function(e){var t=r.getCurrentSlideNumber();return s.classList.remove("list"),s.classList.add("full"),r.isListMode()&&l&&history.pushState(null,null,i.pathname+"?full"+r.getSlideHash(t)),r._applyTransform(r._getTransform()),typeof e=="function"&&e(),!0},r.enterListMode=function(e){s.classList.remove("full"),s.classList.add("list"),r.clearPresenterNotes();if(r.isListMode())return!1;var t=r.getCurrentSlideNumber();return clearTimeout(f),r.isSlideMode()&&l&&history.pushState(null,null,i.pathname+r.getSlideHash(t)),r.scrollToSlide(t),r._applyTransform("none"),typeof e=="function"&&e(),!0},r.toggleMode=function(e){return r.isListMode()?r.enterSlideMode():r.enterListMode(),typeof e=="function"&&e(),!0},r.getCurrentSlideNumber=function(){var e=a.length-1,t=i.hash.substr(1);for(;e>=0;--e)if(t===a[e].id)return e;return-1},r.scrollToSlide=function(n){var i,s=!1;if(!r._isNumber(n))throw new Error("Gimme slide number as Number, baby!");if(r.isSlideMode())throw new Error("You can't scroll to because you in slide mode. Please, switch to list mode.");if(-1===n)return s;if(!a[n])throw new Error("There is no slide with number "+n);return i=t.getElementById(a[n].id),e.scrollTo(0,i.offsetTop),s=!0,s},r.isListMode=function(){return l?!/^full.*/.test(i.search.substr(1)):s.classList.contains("list")},r.isSlideMode=function(){return l?/^full.*/.test(i.search.substr(1)):s.classList.contains("full")},r.updateProgress=function(e){if(null===u)return!1;if(!r._isNumber(e))throw new Error("Gimme slide number as Number, baby!");return u.style.width=(100/(a.length-1)*r._normalizeSlideNumber(e)).toFixed(2)+"%",!0},r.updateCurrentAndPassedSlides=function(e){var n,i,s=a.length;e=r._normalizeSlideNumber(e);if(!r._isNumber(e))throw new Error("Gimme slide number as Number, baby!");for(n=0;ne?(i.classList.remove("visited"),i.classList.remove("active")):(i.classList.remove("visited"),i.classList.add("active"));return!0},r.clearPresenterNotes=function(){e.console&&e.console.clear&&console.clear()},r.showPresenterNotes=function(n){r.clearPresenterNotes();if(e.console){n=r._normalizeSlideNumber(n);var i=a[n].id,s=a[n+1]?a[n+1].id:null,o=t.getElementById(i).querySelector("footer");o&&o.innerHTML&&console.info(o.innerHTML.replace(/\n\s+/g,"\n"));if(s){var u=t.getElementById(s).querySelector("h2");u&&(u=u.innerHTML.replace(/^\s+|<[^>]+>/g,""),console.info("NEXT: "+u))}}},r.getSlideHash=function(e){if(!r._isNumber(e))throw new Error("Gimme slide number as Number, baby!");return e=r._normalizeSlideNumber(e),"#"+a[e].id},r.runInnerNavigation=function(e){if(!r._isNumber(e))throw new Error("Gimme slide number as Number, baby!");e=r._normalizeSlideNumber(e),clearTimeout(f);if(a[e].hasTiming){var n=r._getData(t.getElementById(a[e].id),"timing").split(":");n=parseInt(n[0],10)*60*1e3+parseInt(n[1],10)*1e3,f=setTimeout(function(){r.next()},n)}return!0},r.increaseInnerNavigation=function(e){var n,i;if(!r._isNumber(e))throw new Error("Gimme slide number as Number, baby!");if(a[e].hasInnerNavigation){n=t.getElementById(a[e].id).querySelectorAll(".next:not(.active)");if(0!==n.length)return i=n[0],i.classList.add("active"),!0}return!1},e.addEventListener("DOMContentLoaded",function(){if(s.classList.contains("full")||r.isSlideMode())r.go(r.getCurrentSlideNumber()),r.enterSlideMode()},!1),e.addEventListener("popstate",function(){r.isListMode()?r.enterListMode():r.enterSlideMode()},!1),e.addEventListener("resize",function(){r.isSlideMode()&&r._applyTransform(r._getTransform())},!1),t.addEventListener("keydown",function(e){if(e.altKey||e.ctrlKey||e.metaKey)return;var t=r.getCurrentSlideNumber(),n=!0;switch(e.which){case 116:e.preventDefault();if(r.isListMode()){var i=e.shiftKey?t:0;r.go(i),r.enterSlideMode(),r.showPresenterNotes(i)}else r.enterListMode();break;case 13:r.isListMode()&&-1!==t&&(e.preventDefault(),r.enterSlideMode());break;case 27:r.isSlideMode()&&(e.preventDefault(),r.enterListMode());break;case 33:case 38:case 37:case 72:case 75:e.preventDefault(),r.previous();break;case 34:case 40:case 39:case 76:case 74:e.preventDefault(),r.next();break;case 36:e.preventDefault(),r.first();break;case 35:e.preventDefault(),r.last();break;case 9:case 32:e.preventDefault(),r[e.shiftKey?"previous":"next"]();break;default:}},!1),t.addEventListener("click",function(e){e.preventDefault();var t=r.getSlideNumber(r._getSlideIdByEl(e.target));r.isListMode()&&r._getSlideIdByEl(e.target)&&(r.go(t),r.enterSlideMode(),r.showPresenterNotes(t))},!1),t.addEventListener("touchstart",function(t){if(r._getSlideIdByEl(t.target)){if(r.isSlideMode()&&!r._checkInteractiveElement(t)){var n=t.touches[0].pageX;n>e.innerWidth/2?r.next():r.previous()}r.isListMode()&&(r.go(r.getSlideNumber(r._getSlideIdByEl(t.target))),r.enterSlideMode())}},!1),t.addEventListener("touchmove",function(e){r.isSlideMode()&&e.preventDefault()},!1),r}(this,this.document); \ No newline at end of file