bmstu-mt-wp/shower.min.js

6 lines
7.0 KiB
JavaScript
Raw Normal View History

2013-01-20 01:52:56 +04:00
/**
* Shower HTML presentation engine: github.com/shower/shower
* @copyright 20102013 Vadim Makeev, pepelsbey.net
* @license MIT license: github.com/shower/shower/wiki/MIT-License
*/
2013-01-20 22:36:43 +04:00
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<c;h++)o[h].id||(o[h].id=h+1),a.push({id:o[h].id,hasInnerNavigation:null!==o[h].querySelector(".next"),hasTiming:r._getData(o[h],"timing")&&r._getData(o[h],"timing").indexOf(":")!==-1});return r._getTransform=function(){var t=Math.max(s.clientWidth/e.innerWidth,s.clientHeight/e.innerHeight);return"scale("+1/t+")"},r._applyTransform=function(e){return s.style.WebkitTransform=e,s.style.MozTransform=e,s.style.msTransform=e,s.style.OTransform=e,s.style.transform=e,!0},r._isNumber=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},r._normalizeSlideNumber=function(e){if(!r._isNumber(e))throw new Error("Gimme slide number as Number, baby!");return e<0&&(e=0),e>=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;n<s;++n)i=t.getElementById(a[n].id),n<e?(i.classList.remove("active"),i.classList.add("visited")):n>e?(i.classList.remove("visited"),i.classList.remove("active")):(i.classList.remove("visited"),i.classList.add("active"));return!0},r.clea