From 0ba41b4c8da30405f346753a7f62ba8050ee5b89 Mon Sep 17 00:00:00 2001 From: Mark Przepiora Date: Sat, 31 Aug 2013 10:12:35 -0600 Subject: [PATCH 1/2] Store the current page number in the URL, which is updated upon each page switch, and the proper page is recalled upon a browser refresh --- resources/navigation.js | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/resources/navigation.js b/resources/navigation.js index 083e182..b957e25 100644 --- a/resources/navigation.js +++ b/resources/navigation.js @@ -10,6 +10,8 @@ function goBack() { wrapper.removeChild(lastSlide); wrapper.insertBefore(lastSlide, wrapper.firstChild); + + updateURL(); } /** @@ -24,10 +26,73 @@ function goForward() { wrapper.removeChild(firstSlide); wrapper.appendChild(firstSlide); + + updateURL(); +} + +/** + * Updates the current URL to include a hashtag of the current page number. + */ +function updateURL() { + window.history.replaceState( {} , null, '#' + currentPage() ); +} + +/** + * Returns the current page number of the presentation. + */ +function currentPage() { + return document.querySelector('#wrapper .slide').dataset.page; +} + +/** + * Returns a NodeList of each .slide element. + */ +function allSlides() { + return document.querySelectorAll('#wrapper .slide'); +} + +/** + * Give each slide a "page" data attribute. + */ +function setPageNumbers() { + var wrapper = document.querySelector('#wrapper'); + var pages = wrapper.querySelectorAll('section'); + + for (var i = 0; i < pages.length; ++i) { + var page = pages[i]; + page.dataset.page = i; + console.log(page, i); + } +} + +/** + * Go to the specified page of content. + */ +function goToPage(page) { + // Try to find the target slide. + var targetSlide = document.querySelector('#wrapper .slide[data-page="' + page + '"]'); + + // If it actually exists, go forward until we find it. + if (targetSlide) { + var numSlides = allSlides().length; + + for (var i = 0; currentPage() != page && i < numSlides; i++) { + goForward(); + } + } } window.onload = function () { + // Give each slide a "page" data attribute. + setPageNumbers(); + + // If the location hash specifies a page number, go to it. + var page = window.location.hash.slice(1); + if (page) { + goToPage(page); + } + document.onkeydown = function (e) { var kc = e.keyCode; From 2e7126cb96cde10e5b89dd6a73ceca316cc00831 Mon Sep 17 00:00:00 2001 From: Mark Przepiora Date: Sat, 31 Aug 2013 10:22:09 -0600 Subject: [PATCH 2/2] Remove console.log from code --- resources/navigation.js | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/navigation.js b/resources/navigation.js index b957e25..7c68663 100644 --- a/resources/navigation.js +++ b/resources/navigation.js @@ -61,7 +61,6 @@ function setPageNumbers() { for (var i = 0; i < pages.length; ++i) { var page = pages[i]; page.dataset.page = i; - console.log(page, i); } }