Guest User

Untitled

a guest
Jun 18th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. var customSlideOrder = (function () {
  2. var me = {};
  3. let cycleMode = null;
  4.  
  5. function customNavigate(navigate) {
  6. const pos = Reveal.getIndices();
  7.  
  8. // use if's so keywords like "rightdown" are allowed
  9. if (navigate.includes("right")) {
  10. pos.h += 1
  11. }
  12. if (navigate.includes("left")) {
  13. pos.h -= 1
  14. }
  15. if (navigate.includes("up")) {
  16. pos.v -= 1
  17. }
  18. if (navigate.includes("down")) {
  19. pos.v += 1
  20. }
  21. if (navigate.includes(",") && (parseInt(navigate) !== NaN)) {
  22. // assume two numbers
  23. const splitNav = navigate.split(",");
  24. pos.h = splitNav[0];
  25. pos.v = splitNav[1];
  26. }
  27.  
  28. // slide
  29. Reveal.slide(pos.h, pos.v);
  30.  
  31. // add slide to history
  32. // window.slideStack.push({h: pos.h, v: pos.v});
  33. }
  34.  
  35. function slideCustom(event) {
  36. // ignore if there is a fragment -> and show fragment
  37. if (Reveal.nextFragment()) {
  38. return;
  39. }
  40.  
  41. // do not slide when impossible
  42. if (Reveal.isOverview() || Reveal.isPaused()) {
  43. return;
  44. }
  45.  
  46. const curr = Reveal.getCurrentSlide();
  47. const navigate = curr.dataset.navigate;
  48.  
  49. // default -> next slide
  50. if (!navigate) {
  51. return Reveal.next();
  52. }
  53.  
  54. customNavigate(navigate);
  55. }
  56.  
  57. function slidePrevious() {
  58. // ignore if there is a fragment -> and hide fragment
  59. if (Reveal.prevFragment()) {
  60. return;
  61. }
  62.  
  63. // remove current slide
  64. window.slideStack.pop();
  65.  
  66. const prevSlide = window.slideStack.pop();
  67. Reveal.slide(prevSlide.h, prevSlide.v);
  68.  
  69. // re-add current slide (only needed if you don't use the event below)
  70. // window.slideStack.push({h: prevSlide.h, v: prevSlide.v});
  71. }
  72.  
  73. // override keyboard keys for own way
  74. function switchMode() {
  75. if (cycleMode == "fixedSlides") {
  76. // switch to free mode
  77. Reveal.configure({
  78. keyboard: {
  79. // P - switches between modes
  80. 80: switchMode,
  81. // up
  82. 38: function () {
  83. customNavigate("up");
  84. },
  85. // left
  86. 37: function () {
  87. customNavigate("left");
  88. },
  89. // enter
  90. 13: slideCustom,
  91. // down
  92. 40: function () {
  93. customNavigate("down");
  94. },
  95. // right
  96. 39: function () {
  97. customNavigate("right");
  98. },
  99. }
  100. });
  101.  
  102. cycleMode = "free"
  103. } else {
  104. // switch to slides mode –> slides define way
  105. Reveal.configure({
  106. keyboard: {
  107. // P - switches between modes
  108. 80: switchMode,
  109. // up
  110. 38: slidePrevious,
  111. // left
  112. 37: slidePrevious,
  113. // enter
  114. 13: slideCustom,
  115. // down
  116. 40: slideCustom,
  117. // right
  118. 39: slideCustom
  119. }
  120. });
  121.  
  122. cycleMode = "fixedSlides";
  123. }
  124.  
  125. }
  126.  
  127. me.init = function () {
  128. // remember slide history for backwards slide
  129. window.slideStack = [{v: 0, h: 0}];
  130. // the code below, would also record manual slide changes in the history
  131. Reveal.addEventListener('slidechanged', function (event) {
  132. window.slideStack.push({h: event.indexh, v: event.indexv});
  133. });
  134.  
  135. // update slide number manually
  136. Reveal.addEventListener('slidechanged', function (event) {
  137. const elSlideNumber = document.querySelector(".slide-number");
  138. const slideNumber = event.currentSlide.dataset.number;
  139.  
  140. // hide slide number if not specified
  141. if (!slideNumber) {
  142. elSlideNumber.style.display = "none";
  143. return;
  144. }
  145.  
  146. elSlideNumber.style.display = "block";
  147. elSlideNumber.textContent = event.currentSlide.dataset.number;
  148. });
  149.  
  150. // configure after init
  151. setTimeout(me.configure, 1000);
  152. }
  153.  
  154. me.configure = function () {
  155. // need to enable slide number first, so reveal.js creates the DOM
  156. Reveal.configure({
  157. slideNumber: "c"
  158. });
  159.  
  160. switchMode();
  161.  
  162. // prevent slide number auto-update
  163. Reveal.configure({slideNumber: false});
  164. }
  165.  
  166. return me;
  167. })();
Add Comment
Please, Sign In to add comment