From fc10c308225c9892b1778833cba32988968f3c44 Mon Sep 17 00:00:00 2001 From: Vadim Makeev Date: Mon, 8 Nov 2010 02:26:01 +0300 Subject: [PATCH] script refactoring --- scripts/script.js | 101 +++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/scripts/script.js b/scripts/script.js index c10fc38..d5df8d8 100755 --- a/scripts/script.js +++ b/scripts/script.js @@ -1,75 +1,74 @@ var url = document.location, - domSlides = document.querySelectorAll('section.slide'), - slides = [], backhash = {}, linkScreen = document.querySelector('link[title=screen]'), linkProjection = document.querySelector('link[title=projection]'), + shower = document.querySelector('div.shower'), + slides = document.querySelectorAll('section.slide'), + slideList = [], hashList = {}, fullscreen = false; -for(var i = 0, iLength = domSlides.length; i < iLength; i++) { - var id = domSlides[i].id; - slides[i] = '#' + id; - backhash['#' + id] = i; +for(var i = 0, slidesLength = slides.length; i < slidesLength; i++) { + var id = slides[i].id; + slideList[i] = '#' + id; + hashList['#' + id] = i; } -function enterFull() { - fullscreen = true; - updateView(); -} - -function exitFull() { - fullscreen = false; - updateView(); -} - -function toggleFull() { - if( window.fullScreen || // Firefox +function toggleFull(force) { + fullscreen = (typeof force == 'boolean') ? force : ( + window.fullScreen || // Firefox document.webkitFullScreen || // Webkit - screen.width == window.outerWidth && screen.height == window.outerHeight ) { - enterFull(); - } else { - exitFull(); - } + screen.width == window.outerWidth && screen.height == window.outerHeight + ); + updateView(); } function turnSlide(e) { if(!fullscreen) return; - var current = backhash[url.hash], - target, - command; - switch(e.which) { - case 33 : // PgUp - case 38 : // Up - case 37 : // Left - current--; - break; - case 34 : // PgDown - case 40 : // Down - case 39 : // Right - current++; - break; - case 32 : // Space - current += e.shiftKey ? -1 : 1; - break; - default: - return; + var current = hashList[url.hash], + target; + if(e.type == 'keyup') { // Key-Based + switch(e.which) { + case 33 : // PgUp + case 38 : // Up + case 37 : // Left + current--; + break; + case 34 : // PgDown + case 40 : // Down + case 39 : // Right + current++; + break; + case 32 : // Space + current += e.shiftKey ? -1 : 1; + break; + default: + return; + } + target = slideList[current]; + e.preventDefault(); + } + if(typeof e == 'number') { // Specific + target = slideList[e]; + } + if(typeof e == 'undefined') { // Next + target = slideList[current++]; } - target = slides[current]; - e.preventDefault(); if(target) url.hash = target; } function updateView() { linkScreen.disabled = fullscreen; linkProjection.disabled = !fullscreen; - if(fullscreen && !backhash[url.hash]) url.hash = slides[0]; + if(!hashList[url.hash]) turnSlide(0); } -domSlides[0].addEventListener('click', enterFull, false); - -window.addEventListener('DOMContentLoaded', toggleFull, false); -window.addEventListener('resize', toggleFull, false); +slides[0].addEventListener('click', function(){ + toggleFull(true); +}, false); document.addEventListener('keyup', turnSlide, false); document.addEventListener('keyup', function(e) { - if(e.which == 27) exitFull(); -}, false); \ No newline at end of file + if(e.which == 27) toggleFull(false); +}, false); + +window.addEventListener('resize', toggleFull, false); +window.addEventListener('DOMContentLoaded', toggleFull, false); \ No newline at end of file