bmstu-mt-wp/shower.min.js

6 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Shower HTML presentation engine: github.com/shower/shower
* @copyright 20102013 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<l;i++){if(!slides[i].id){slides[i].id=i+1}slideList.push({id:slides[i].id,hasInnerNavigation:null!==slides[i].querySelector(".next"),hasTiming:shower._getData(slides[i],"timing")&&shower._getData(slides[i],"timing").indexOf(":")!==-1})}shower._getTransform=function(){var denominator=Math.max(body.clientWidth/window.innerWidth,body.clientHeight/window.innerHeight);return"scale("+1/denominator+")"};shower._applyTransform=function(transform){body.style.WebkitTransform=transform;body.style.MozTransform=transform;body.style.msTransform=transform;body.style.OTransform=transform;body.style.transform=transform;return true};shower._isNumber=function(arg){return!isNaN(parseFloat(arg))&&isFinite(arg)};shower._normalizeSlideNumber=function(slideNumber){if(!shower._isNumber(slideNumber)){throw new Error("Gimme slide number as Number, baby!")}if(slideNumber<0){slideNumber=0}if(slideNumber>=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;if(-1===currentSlideNumber||!slideList[currentSlideNumber].hasInnerNavigation||-1===shower.increaseInnerNavigation(currentSlideNumber)){shower.go(currentSlideNumber+1);ret=currentSlideNumber+2;if(typeof callback==="function"){callback()}}else{ret=false}return ret};shower.previous=function(callback){var currentSlideNumber=shower.getCurrentSlideNumber(),ret;if(currentSlideNumber>0){ret=currentSlideNumber;shower.go(currentSlideNumber-1);if(typeof callback==="function"){callback()}}else{ret=false}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;i<l;++i){slide=document.getElementById(slideList[i].id);if(i<slideNumber){slide.classList.remove("active");slide.classList.add("visited")}else if(i>slideNumber){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(shower.isSlideMode()){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);