From 245efee894311bc2cafecf9f7fa61547013ac975 Mon Sep 17 00:00:00 2001 From: Adam Hepton Date: Tue, 25 Jun 2013 12:15:22 +0100 Subject: Support for notes within markdown --- plugin/markdown/markdown.js | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index 473666b..8366c50 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -28,7 +28,9 @@ }; var twrap = function(el) { - return ''; + var cnt = el.content || el; + cnt += el.asideContent ? ('') : ''; + return ''; }; var getForwardedAttributes = function(section) { @@ -40,7 +42,7 @@ value = attributes[i].value; // disregard attributes that are used for markdown loading/parsing - if( /data\-(markdown|separator|vertical)/gi.test( name ) ) continue; + if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue; if( value ) { result.push( name + '=' + value ); @@ -53,22 +55,27 @@ return result.join( ' ' ); } - var slidifyMarkdown = function(markdown, separator, vertical, attributes) { + var slidifyMarkdown = function(markdown, separator, vertical, notes, attributes) { separator = separator || '^\n---\n$'; var reSeparator = new RegExp(separator + (vertical ? '|' + vertical : ''), 'mg'), reHorSeparator = new RegExp(separator), + notesSeparator = new RegExp(notes, 'mg'), matches, + noteMatch, lastIndex = 0, isHorizontal, wasHorizontal = true, content, + asideContent, + slide, sectionStack = [], markdownSections = ''; // iterate until all blocks between separators are stacked up while( matches = reSeparator.exec(markdown) ) { + asideContent = null; // determine direction (horizontal by default) isHorizontal = reHorSeparator.test(matches[0]); @@ -80,18 +87,28 @@ // pluck slide content from markdown input content = markdown.substring(lastIndex, matches.index); + noteMatch = content.split(notesSeparator); + + if(noteMatch.length === 2) { + content = noteMatch[0]; + asideContent = noteMatch[1].trim(); + } + + slide = { + content: content, + asideContent: asideContent || "" + }; if( isHorizontal && wasHorizontal ) { // add to horizontal stack - sectionStack.push(content); + sectionStack.push(slide); } else { // add to vertical stack - sectionStack[sectionStack.length-1].push(content); + sectionStack[sectionStack.length-1].push(slide); } lastIndex = reSeparator.lastIndex; wasHorizontal = isHorizontal; - } // add the remaining slide @@ -99,15 +116,13 @@ // flatten the hierarchical stack, and insert
tags for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { - // horizontal - if( typeof sectionStack[k] === 'string' ) { - markdownSections += '
' + twrap( sectionStack[k] ) + '
'; - } // vertical - else { + if(sectionStack[k].propertyIsEnumerable(length) && typeof sectionStack[k].splice === "function") { markdownSections += '
' + '
' + sectionStack[k].map(twrap).join('
') + '
' + '
'; + } else { + markdownSections += '
' + twrap( sectionStack[k] ) + '
'; } } @@ -131,7 +146,7 @@ xhr.onreadystatechange = function () { if( xhr.readyState === 4 ) { if (xhr.status >= 200 && xhr.status < 300) { - section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), getForwardedAttributes(section) ); + section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), section.getAttribute('data-notes'), getForwardedAttributes(section) ); } else { section.outerHTML = '
ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status + '. Check your browser\'s JavaScript console for more details.' + @@ -150,7 +165,7 @@ } else if( section.getAttribute('data-separator') ) { var markdown = stripLeadingWhitespace(section); - section.outerHTML = slidifyMarkdown( markdown, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), getForwardedAttributes(section) ); + section.outerHTML = slidifyMarkdown( markdown, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), section.getAttribute('data-notes'), getForwardedAttributes(section) ); } } -- cgit v1.2.3 From ce0facf7b24bd43e8ca6e77f69fd2c651b840341 Mon Sep 17 00:00:00 2001 From: Emile 'iMil' Heitor Date: Tue, 23 Jul 2013 17:31:30 +0200 Subject: added custom charset support for external markdown file --- plugin/markdown/markdown.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index 473666b..9681cf1 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -128,6 +128,12 @@ var xhr = new XMLHttpRequest(), url = section.getAttribute('data-markdown'); + datacharset = section.getAttribute('data-charset'); + // see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes + if (datacharset != null && datacharset != '') { + xhr.overrideMimeType('text/html; charset=' + datacharset); + } + xhr.onreadystatechange = function () { if( xhr.readyState === 4 ) { if (xhr.status >= 200 && xhr.status < 300) { -- cgit v1.2.3 From 3ca598473b710d98e82d094f19d16d428cf2066e Mon Sep 17 00:00:00 2001 From: Emile 'iMil' Heitor Date: Tue, 23 Jul 2013 17:34:23 +0200 Subject: updated markdown example with data-charset --- plugin/markdown/example.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/example.html b/plugin/markdown/example.html index 1253cba..90ff134 100644 --- a/plugin/markdown/example.html +++ b/plugin/markdown/example.html @@ -16,8 +16,8 @@
- -
+ +
-- cgit v1.2.3 From 4c491e5eccd8533f45c4d3d18a04ac545babe351 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Wed, 24 Jul 2013 23:35:18 -0400 Subject: highlight charset option for external md in readme #537 --- README.md | 4 ++-- plugin/markdown/example.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'plugin') diff --git a/README.md b/README.md index 96f6b8c..f1a521e 100644 --- a/README.md +++ b/README.md @@ -52,10 +52,10 @@ This is based on [data-markdown](https://gist.github.com/1343518) from [Paul Iri #### External Markdown -You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file. +You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file. The ```data-charset``` attribute is optional and specifies which charset to use when loading the external file. ```html -
+
``` ### Configuration diff --git a/plugin/markdown/example.html b/plugin/markdown/example.html index 90ff134..ceed53f 100644 --- a/plugin/markdown/example.html +++ b/plugin/markdown/example.html @@ -16,8 +16,8 @@
- -
+ +
-- cgit v1.2.3 From 03385d7245f8c0428b5f8d8578022fb3a60fdd12 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Fri, 26 Jul 2013 09:48:21 -0400 Subject: simplify client side notes plugin --- plugin/notes/notes.html | 16 +++-------- plugin/notes/notes.js | 72 +++++++++++++++++-------------------------------- 2 files changed, 29 insertions(+), 59 deletions(-) (limited to 'plugin') diff --git a/plugin/notes/notes.html b/plugin/notes/notes.html index 8af43fb..9151663 100644 --- a/plugin/notes/notes.html +++ b/plugin/notes/notes.html @@ -173,6 +173,7 @@ window.addEventListener( 'message', function( event ) { var data = JSON.parse( event.data ); + // No need for updating the notes in case of fragment changes if ( data.notes !== undefined) { if( data.markdown ) { @@ -183,18 +184,9 @@ } } - // Showing and hiding fragments - if( data.fragment === 'next' ) { - currentSlide.contentWindow.Reveal.nextFragment(); - } - else if( data.fragment === 'prev' ) { - currentSlide.contentWindow.Reveal.prevFragment(); - } - else { - // Update the note slides - currentSlide.contentWindow.Reveal.slide( data.indexh, data.indexv ); - nextSlide.contentWindow.Reveal.slide( data.nextindexh, data.nextindexv ); - } + // Update the note slides + currentSlide.contentWindow.Reveal.slide( data.indexh, data.indexv, data.indexf ); + nextSlide.contentWindow.Reveal.slide( data.nextindexh, data.nextindexv ); }, false ); diff --git a/plugin/notes/notes.js b/plugin/notes/notes.js index 63de05a..9a82c3c 100644 --- a/plugin/notes/notes.js +++ b/plugin/notes/notes.js @@ -10,72 +10,50 @@ var RevealNotes = (function() { var notesPopup = window.open( jsFileLocation + 'notes.html', 'reveal.js - Notes', 'width=1120,height=850' ); // Fires when slide is changed - Reveal.addEventListener( 'slidechanged', function( event ) { - post('slidechanged'); - } ); + Reveal.addEventListener( 'slidechanged', post ); // Fires when a fragment is shown - Reveal.addEventListener( 'fragmentshown', function( event ) { - post('fragmentshown'); - } ); + Reveal.addEventListener( 'fragmentshown', post ); // Fires when a fragment is hidden - Reveal.addEventListener( 'fragmenthidden', function( event ) { - post('fragmenthidden'); - } ); + Reveal.addEventListener( 'fragmenthidden', post ); /** * Posts the current slide data to the notes window - * - * @param {String} eventType Expecting 'slidechanged', 'fragmentshown' - * or 'fragmenthidden' set in the events above to define the needed - * slideDate. */ - function post( eventType ) { + function post() { var slideElement = Reveal.getCurrentSlide(), + slideIndices = Reveal.getIndices(), messageData; - if( eventType === 'slidechanged' ) { - var notes = slideElement.querySelector( 'aside.notes' ), - indexh = Reveal.getIndices().h, - indexv = Reveal.getIndices().v, - nextindexh, - nextindexv; + var notes = slideElement.querySelector( 'aside.notes' ), + nextindexh, + nextindexv; - if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) { - nextindexh = indexh; - nextindexv = indexv + 1; - } else { - nextindexh = indexh + 1; - nextindexv = 0; - } - - messageData = { - notes : notes ? notes.innerHTML : '', - indexh : indexh, - indexv : indexv, - nextindexh : nextindexh, - nextindexv : nextindexv, - markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false - }; - } - else if( eventType === 'fragmentshown' ) { - messageData = { - fragment : 'next' - }; - } - else if( eventType === 'fragmenthidden' ) { - messageData = { - fragment : 'prev' - }; + if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) { + nextindexh = slideIndices.h; + nextindexv = slideIndices.v + 1; + } else { + nextindexh = slideIndices.h + 1; + nextindexv = 0; } + messageData = { + notes : notes ? notes.innerHTML : '', + indexh : slideIndices.h, + indexv : slideIndices.v, + indexf : slideIndices.f, + nextindexh : nextindexh, + nextindexv : nextindexv, + markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false + }; + notesPopup.postMessage( JSON.stringify( messageData ), '*' ); } // Navigate to the current slide when the notes are loaded notesPopup.addEventListener( 'load', function( event ) { - post('slidechanged'); + post(); }, false ); } -- cgit v1.2.3 From 53f1f110c8066b40c788b59e663d303446e3819d Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Fri, 26 Jul 2013 10:03:59 -0400 Subject: ensure notes window fragment states are mirrored in main window #538 --- js/reveal.js | 5 +++-- js/reveal.min.js | 4 ++-- plugin/notes/notes.html | 24 +++++++++++++++++++----- 3 files changed, 24 insertions(+), 9 deletions(-) (limited to 'plugin') diff --git a/js/reveal.js b/js/reveal.js index 41d3535..31639fa 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -1898,8 +1898,9 @@ var Reveal = (function(){ } if( !slide && currentSlide ) { - var visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' ); - if( visibleFragments.length ) { + var hasFragments = currentSlide.querySelectorAll( '.fragment' ).length > 0; + if( hasFragments ) { + var visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' ); f = visibleFragments.length; } } diff --git a/js/reveal.min.js b/js/reveal.min.js index ca60ebf..5e01073 100644 --- a/js/reveal.min.js +++ b/js/reveal.min.js @@ -1,8 +1,8 @@ /*! - * reveal.js 2.5.0 (2013-07-26, 09:32) + * reveal.js 2.5.0 (2013-07-26, 10:01) * http://lab.hakim.se/reveal-js * MIT licensed * * Copyright (C) 2013 Hakim El Hattab, http://hakim.se */ -var Reveal=function(){"use strict";function e(e){return zt||Yt?(window.addEventListener("load",k,!1),l(Ct,e),r(),o(),void 0):(document.body.setAttribute("class","no-transforms"),void 0)}function t(){if(Ot.theme=document.querySelector("#theme"),Ot.wrapper=document.querySelector(".reveal"),Ot.slides=document.querySelector(".reveal .slides"),document.querySelector(".reveal .backgrounds")||(Ot.background=document.createElement("div"),Ot.background.classList.add("backgrounds"),Ot.wrapper.appendChild(Ot.background)),!Ot.wrapper.querySelector(".progress")){var e=document.createElement("div");e.classList.add("progress"),e.innerHTML="",Ot.wrapper.appendChild(e)}if(!Ot.wrapper.querySelector(".controls")){var t=document.createElement("aside");t.classList.add("controls"),t.innerHTML='',Ot.wrapper.appendChild(t)}if(!Ot.wrapper.querySelector(".state-background")){var n=document.createElement("div");n.classList.add("state-background"),Ot.wrapper.appendChild(n)}if(!Ot.wrapper.querySelector(".pause-overlay")){var r=document.createElement("div");r.classList.add("pause-overlay"),Ot.wrapper.appendChild(r)}Ot.progress=document.querySelector(".reveal .progress"),Ot.progressbar=document.querySelector(".reveal .progress span"),Ct.controls&&(Ot.controls=document.querySelector(".reveal .controls"),Ot.controlsLeft=d(document.querySelectorAll(".navigate-left")),Ot.controlsRight=d(document.querySelectorAll(".navigate-right")),Ot.controlsUp=d(document.querySelectorAll(".navigate-up")),Ot.controlsDown=d(document.querySelectorAll(".navigate-down")),Ot.controlsPrev=d(document.querySelectorAll(".navigate-prev")),Ot.controlsNext=d(document.querySelectorAll(".navigate-next")))}function n(){function e(e,t){var n={background:e.getAttribute("data-background"),backgroundSize:e.getAttribute("data-background-size"),backgroundImage:e.getAttribute("data-background-image"),backgroundColor:e.getAttribute("data-background-color"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition")},r=document.createElement("div");return r.className="slide-background",n.background&&(/^(http|file|\/\/)/gi.test(n.background)||/\.(png|jpg|jpeg|gif|bmp)$/gi.test(n.background)?r.style.backgroundImage="url("+n.background+")":r.style.background=n.background),n.backgroundSize&&(r.style.backgroundSize=n.backgroundSize),n.backgroundImage&&(r.style.backgroundImage='url("'+n.backgroundImage+'")'),n.backgroundColor&&(r.style.backgroundColor=n.backgroundColor),n.backgroundRepeat&&(r.style.backgroundRepeat=n.backgroundRepeat),n.backgroundPosition&&(r.style.backgroundPosition=n.backgroundPosition),n.backgroundTransition&&r.setAttribute("data-background-transition",n.backgroundTransition),t.appendChild(r),r}v()&&document.body.classList.add("print-pdf"),Ot.background.innerHTML="",Ot.background.classList.add("no-transition"),d(document.querySelectorAll(Mt)).forEach(function(t){var n;n=v()?e(t,t):e(t,Ot.background),d(t.querySelectorAll("section")).forEach(function(t){v()?e(t,t):e(t,n)})})}function r(){/iphone|ipod|android/gi.test(navigator.userAgent)&&!/crios/gi.test(navigator.userAgent)&&(window.addEventListener("load",p,!1),window.addEventListener("orientationchange",p,!1))}function o(){function e(){n.length&&head.js.apply(null,n),a()}for(var t=[],n=[],r=0,o=Ct.dependencies.length;o>r;r++){var i=Ct.dependencies[r];(!i.condition||i.condition())&&(i.async?n.push(i.src):t.push(i.src),"function"==typeof i.callback&&head.ready(i.src.match(/([\w\d_\-]*)\.?js$|[^\\\/]*$/i)[0],i.callback))}t.length?(head.ready(e),head.js.apply(null,t)):e()}function a(){t(),i(),K(),setTimeout(function(){m("ready",{indexh:St,indexv:At,currentSlide:xt})},1)}function i(e){if(Ot.wrapper.classList.remove(Ct.transition),"object"==typeof e&&l(Ct,e),Yt===!1&&(Ct.transition="linear"),Ot.wrapper.classList.add(Ct.transition),Ot.wrapper.setAttribute("data-transition-speed",Ct.transitionSpeed),Ot.wrapper.setAttribute("data-background-transition",Ct.backgroundTransition),Ot.controls&&(Ot.controls.style.display=Ct.controls&&Ot.controls?"block":"none"),Ot.progress&&(Ot.progress.style.display=Ct.progress&&Ot.progress?"block":"none"),Ct.rtl?Ot.wrapper.classList.add("rtl"):Ot.wrapper.classList.remove("rtl"),Ct.center?Ot.wrapper.classList.add("center"):Ot.wrapper.classList.remove("center"),Ct.mouseWheel?(document.addEventListener("DOMMouseScroll",ft,!1),document.addEventListener("mousewheel",ft,!1)):(document.removeEventListener("DOMMouseScroll",ft,!1),document.removeEventListener("mousewheel",ft,!1)),Ct.rollingLinks?g():h(),Ct.previewLinks?y():(b(),y("[data-preview-link]")),Ct.theme&&Ot.theme){var t=Ot.theme.getAttribute("href"),n=/[^\/]*?(?=\.css)/,r=t.match(n)[0];Ct.theme!==r&&(t=t.replace(n,Ct.theme),Ot.theme.setAttribute("href",t))}Y()}function s(){Ft=!0,window.addEventListener("hashchange",wt,!1),window.addEventListener("resize",Lt,!1),Ct.touch&&(Ot.wrapper.addEventListener("touchstart",it,!1),Ot.wrapper.addEventListener("touchmove",st,!1),Ot.wrapper.addEventListener("touchend",ct,!1),window.navigator.msPointerEnabled&&(Ot.wrapper.addEventListener("MSPointerDown",lt,!1),Ot.wrapper.addEventListener("MSPointerMove",dt,!1),Ot.wrapper.addEventListener("MSPointerUp",ut,!1))),Ct.keyboard&&document.addEventListener("keydown",at,!1),Ct.progress&&Ot.progress&&Ot.progress.addEventListener("click",vt,!1),Ct.controls&&Ot.controls&&["touchstart","click"].forEach(function(e){Ot.controlsLeft.forEach(function(t){t.addEventListener(e,pt,!1)}),Ot.controlsRight.forEach(function(t){t.addEventListener(e,mt,!1)}),Ot.controlsUp.forEach(function(t){t.addEventListener(e,gt,!1)}),Ot.controlsDown.forEach(function(t){t.addEventListener(e,ht,!1)}),Ot.controlsPrev.forEach(function(t){t.addEventListener(e,yt,!1)}),Ot.controlsNext.forEach(function(t){t.addEventListener(e,bt,!1)})})}function c(){Ft=!1,document.removeEventListener("keydown",at,!1),window.removeEventListener("hashchange",wt,!1),window.removeEventListener("resize",Lt,!1),Ot.wrapper.removeEventListener("touchstart",it,!1),Ot.wrapper.removeEventListener("touchmove",st,!1),Ot.wrapper.removeEventListener("touchend",ct,!1),window.navigator.msPointerEnabled&&(Ot.wrapper.removeEventListener("MSPointerDown",lt,!1),Ot.wrapper.removeEventListener("MSPointerMove",dt,!1),Ot.wrapper.removeEventListener("MSPointerUp",ut,!1)),Ct.progress&&Ot.progress&&Ot.progress.removeEventListener("click",vt,!1),Ct.controls&&Ot.controls&&["touchstart","click"].forEach(function(e){Ot.controlsLeft.forEach(function(t){t.removeEventListener(e,pt,!1)}),Ot.controlsRight.forEach(function(t){t.removeEventListener(e,mt,!1)}),Ot.controlsUp.forEach(function(t){t.removeEventListener(e,gt,!1)}),Ot.controlsDown.forEach(function(t){t.removeEventListener(e,ht,!1)}),Ot.controlsPrev.forEach(function(t){t.removeEventListener(e,yt,!1)}),Ot.controlsNext.forEach(function(t){t.removeEventListener(e,bt,!1)})})}function l(e,t){for(var n in t)e[n]=t[n]}function d(e){return Array.prototype.slice.call(e)}function u(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}function f(e){var t=0;if(e){var n=0;d(e.childNodes).forEach(function(e){"number"==typeof e.offsetTop&&e.style&&("absolute"===e.style.position&&(n+=1),t=Math.max(t,e.offsetTop+e.offsetHeight))}),0===n&&(t=e.offsetHeight)}return t}function v(){return/print-pdf/gi.test(window.location.search)}function p(){0===window.orientation?(document.documentElement.style.overflow="scroll",document.body.style.height="120%"):(document.documentElement.style.overflow="",document.body.style.height="100%"),setTimeout(function(){window.scrollTo(0,1)},10)}function m(e,t){var n=document.createEvent("HTMLEvents",1,2);n.initEvent(e,!0,!0),l(n,t),Ot.wrapper.dispatchEvent(n)}function g(){if(Yt&&!("msPerspective"in document.body.style))for(var e=document.querySelectorAll(Tt+" a:not(.image)"),t=0,n=e.length;n>t;t++){var r=e[t];if(!(!r.textContent||r.querySelector("*")||r.className&&r.classList.contains(r,"roll"))){var o=document.createElement("span");o.setAttribute("data-title",r.text),o.innerHTML=r.innerHTML,r.classList.add("roll"),r.innerHTML="",r.appendChild(o)}}}function h(){for(var e=document.querySelectorAll(Tt+" a.roll"),t=0,n=e.length;n>t;t++){var r=e[t],o=r.querySelector("span");o&&(r.classList.remove("roll"),r.innerHTML=o.innerHTML)}}function y(e){var t=d(document.querySelectorAll(e?e:"a"));t.forEach(function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",kt,!1)})}function b(){var e=d(document.querySelectorAll("a"));e.forEach(function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",kt,!1)})}function w(e){L(),Ot.preview=document.createElement("div"),Ot.preview.classList.add("preview-link-overlay"),Ot.wrapper.appendChild(Ot.preview),Ot.preview.innerHTML=["
",'','',"
",'
','
','',"
"].join(""),Ot.preview.querySelector("iframe").addEventListener("load",function(){Ot.preview.classList.add("loaded")},!1),Ot.preview.querySelector(".close").addEventListener("click",function(e){L(),e.preventDefault()},!1),Ot.preview.querySelector(".external").addEventListener("click",function(){L()},!1),setTimeout(function(){Ot.preview.classList.add("visible")},1)}function L(){Ot.preview&&(Ot.preview.setAttribute("src",""),Ot.preview.parentNode.removeChild(Ot.preview),Ot.preview=null)}function E(e){var t=d(e);return t.forEach(function(e,t){e.hasAttribute("data-fragment-index")||e.setAttribute("data-fragment-index",t)}),t.sort(function(e,t){return e.getAttribute("data-fragment-index")-t.getAttribute("data-fragment-index")}),t}function k(){if(Ot.wrapper&&!v()){var e=Ot.wrapper.offsetWidth,t=Ot.wrapper.offsetHeight;e-=t*Ct.margin,t-=t*Ct.margin;var n=Ct.width,r=Ct.height;if("string"==typeof n&&/%$/.test(n)&&(n=parseInt(n,10)/100*e),"string"==typeof r&&/%$/.test(r)&&(r=parseInt(r,10)/100*t),Ot.slides.style.width=n+"px",Ot.slides.style.height=r+"px",It=Math.min(e/n,t/r),It=Math.max(It,Ct.minScale),It=Math.min(It,Ct.maxScale),void 0===Ot.slides.style.zoom||navigator.userAgent.match(/(iphone|ipod|ipad|android)/gi)){var o="translate(-50%, -50%) scale("+It+") translate(50%, 50%)";Ot.slides.style.WebkitTransform=o,Ot.slides.style.MozTransform=o,Ot.slides.style.msTransform=o,Ot.slides.style.OTransform=o,Ot.slides.style.transform=o}else Ot.slides.style.zoom=It;for(var a=d(document.querySelectorAll(Tt)),i=0,s=a.length;s>i;i++){var c=a[i];"none"!==c.style.display&&(c.style.top=Ct.center?c.classList.contains("stack")?0:Math.max(-(f(c)/2)-20,-r/2)+"px":"")}H()}}function S(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function A(e){if("object"==typeof e&&"function"==typeof e.setAttribute&&e.classList.contains("stack")){var t=e.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(e.getAttribute(t)||0,10)}return 0}function q(){if(Ct.overview){G();var e=Ot.wrapper.classList.contains("overview");Ot.wrapper.classList.add("overview"),Ot.wrapper.classList.remove("exit-overview"),clearTimeout(Ut),clearTimeout(jt),Ut=setTimeout(function(){for(var t=document.querySelectorAll(Mt),n=0,r=t.length;r>n;n++){var o=t[n],a=Ct.rtl?-105:105,i="translateZ(-2500px) translate("+(n-St)*a+"%, 0%)";if(o.setAttribute("data-index-h",n),o.style.display="block",o.style.WebkitTransform=i,o.style.MozTransform=i,o.style.msTransform=i,o.style.OTransform=i,o.style.transform=i,o.classList.contains("stack"))for(var s=o.querySelectorAll("section"),c=0,l=s.length;l>c;c++){var d=n===St?At:A(o),u=s[c],f="translate(0%, "+105*(c-d)+"%)";u.setAttribute("data-index-h",n),u.setAttribute("data-index-v",c),u.style.display="block",u.style.WebkitTransform=f,u.style.MozTransform=f,u.style.msTransform=f,u.style.OTransform=f,u.style.transform=f,u.addEventListener("click",Et,!0)}else o.addEventListener("click",Et,!0)}k(),e||m("overviewshown",{indexh:St,indexv:At,currentSlide:xt})},10)}}function x(){if(Ct.overview){clearTimeout(Ut),clearTimeout(jt),Ot.wrapper.classList.remove("overview"),Ot.wrapper.classList.add("exit-overview"),jt=setTimeout(function(){Ot.wrapper.classList.remove("exit-overview")},10);for(var e=d(document.querySelectorAll(Tt)),t=0,n=e.length;n>t;t++){var r=e[t];r.style.display="",r.style.WebkitTransform="",r.style.MozTransform="",r.style.msTransform="",r.style.OTransform="",r.style.transform="",r.removeEventListener("click",Et,!0)}O(St,At),B(),m("overviewhidden",{indexh:St,indexv:At,currentSlide:xt})}}function T(e){"boolean"==typeof e?e?q():x():M()?x():q()}function M(){return Ot.wrapper.classList.contains("overview")}function P(e){return e=e?e:xt,e&&!!e.parentNode.nodeName.match(/section/i)}function N(){var e=document.body,t=e.requestFullScreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullScreen;t&&t.apply(e)}function C(){var e=Ot.wrapper.classList.contains("paused");G(),Ot.wrapper.classList.add("paused"),e===!1&&m("paused")}function D(){var e=Ot.wrapper.classList.contains("paused");Ot.wrapper.classList.remove("paused"),B(),e&&m("resumed")}function R(){I()?D():C()}function I(){return Ot.wrapper.classList.contains("paused")}function O(e,t,n,r){qt=xt;var o=document.querySelectorAll(Mt);void 0===t&&(t=A(o[e])),qt&&qt.parentNode&&qt.parentNode.classList.contains("stack")&&S(qt.parentNode,At);var a=Rt.concat();Rt.length=0;var i=St,s=At;St=z(Mt,void 0===e?St:e),At=z(Pt,void 0===t?At:t),k();e:for(var c=0,l=Rt.length;l>c;c++){for(var u=0;a.length>u;u++)if(a[u]===Rt[c]){a.splice(u,1);continue e}document.documentElement.classList.add(Rt[c]),m(Rt[c])}for(;a.length;)document.documentElement.classList.remove(a.pop());M()&&q();var f=o[St],v=f.querySelectorAll("section");if(xt=v[At]||f,n!==void 0){var p=E(xt.querySelectorAll(".fragment"));d(p).forEach(function(e,t){n>t?e.classList.add("visible"):e.classList.remove("visible")})}var g=St!==i||At!==s;g?m("slidechanged",{indexh:St,indexv:At,previousSlide:qt,currentSlide:xt,origin:r}):qt=null,qt&&(qt.classList.remove("present"),document.querySelector(Nt).classList.contains("present")&&setTimeout(function(){var e,t=d(document.querySelectorAll(Mt+".stack"));for(e in t)t[e]&&S(t[e],0)},0)),g&&(_(qt),F(xt)),X(),H(),W(),$()}function Y(){c(),s(),k(),Dt=Ct.autoSlide,B(),n(),X(),H(),W()}function z(e,t){var n=d(document.querySelectorAll(e)),r=n.length;if(r){Ct.loop&&(t%=r,0>t&&(t=r+t)),t=Math.max(Math.min(t,r-1),0);for(var o=0;r>o;o++){var a=n[o];if(M()===!1){var i=Math.abs((t-o)%(r-3))||0;a.style.display=i>3?"none":"block"}var s=Ct.rtl&&!P(a);if(a.classList.remove("past"),a.classList.remove("present"),a.classList.remove("future"),a.setAttribute("hidden",""),t>o)a.classList.add(s?"future":"past");else if(o>t){a.classList.add(s?"past":"future");for(var c=d(a.querySelectorAll(".fragment.visible"));c.length;)c.pop().classList.remove("visible")}a.querySelector("section")&&a.classList.add("stack")}n[t].classList.add("present"),n[t].removeAttribute("hidden");var l=n[t].getAttribute("data-state");l&&(Rt=Rt.concat(l.split(" ")));var u=n[t].getAttribute("data-autoslide");Dt=u?parseInt(u,10):Ct.autoSlide,B()}else t=0;return t}function H(){if(Ct.progress&&Ot.progress){var e=d(document.querySelectorAll(Mt)),t=document.querySelectorAll(Tt+":not(.stack)").length,n=0;e:for(var r=0;e.length>r;r++){for(var o=e[r],a=d(o.querySelectorAll("section")),i=0;a.length>i;i++){if(a[i].classList.contains("present"))break e;n++}if(o.classList.contains("present"))break;o.classList.contains("stack")===!1&&n++}Ot.progressbar.style.width=n/(t-1)*window.innerWidth+"px"}}function X(){if(Ct.controls&&Ot.controls){var e=U(),t=j();Ot.controlsLeft.concat(Ot.controlsRight).concat(Ot.controlsUp).concat(Ot.controlsDown).concat(Ot.controlsPrev).concat(Ot.controlsNext).forEach(function(e){e.classList.remove("enabled"),e.classList.remove("fragmented")}),e.left&&Ot.controlsLeft.forEach(function(e){e.classList.add("enabled")}),e.right&&Ot.controlsRight.forEach(function(e){e.classList.add("enabled")}),e.up&&Ot.controlsUp.forEach(function(e){e.classList.add("enabled")}),e.down&&Ot.controlsDown.forEach(function(e){e.classList.add("enabled")}),(e.left||e.up)&&Ot.controlsPrev.forEach(function(e){e.classList.add("enabled")}),(e.right||e.down)&&Ot.controlsNext.forEach(function(e){e.classList.add("enabled")}),xt&&(t.prev&&Ot.controlsPrev.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Ot.controlsNext.forEach(function(e){e.classList.add("fragmented","enabled")}),P(xt)?(t.prev&&Ot.controlsUp.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Ot.controlsDown.forEach(function(e){e.classList.add("fragmented","enabled")})):(t.prev&&Ot.controlsLeft.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Ot.controlsRight.forEach(function(e){e.classList.add("fragmented","enabled")})))}}function W(){d(Ot.background.childNodes).forEach(function(e,t){var n=Ct.rtl?"future":"past",r=Ct.rtl?"past":"future";e.className="slide-background "+(St>t?n:t>St?r:"present"),d(e.childNodes).forEach(function(e,t){e.className="slide-background "+(At>t?"past":t>At?"future":"present")})}),setTimeout(function(){Ot.background.classList.remove("no-transition")},1)}function U(){var e=document.querySelectorAll(Mt),t=document.querySelectorAll(Pt),n={left:St>0||Ct.loop,right:e.length-1>St||Ct.loop,up:At>0,down:t.length-1>At};if(Ct.rtl){var r=n.left;n.left=n.right,n.right=r}return n}function j(){if(xt&&Ct.fragments){var e=xt.querySelectorAll(".fragment"),t=xt.querySelectorAll(".fragment:not(.visible)");return{prev:e.length-t.length>0,next:!!t.length}}return{prev:!1,next:!1}}function F(e){e&&(d(e.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-autoplay")&&e.play()}),d(e.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function(e){e.hasAttribute("data-autoplay")&&e.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*")}))}function _(e){e&&(d(e.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-ignore")||e.pause()}),d(e.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function(e){e.hasAttribute("data-ignore")||"function"!=typeof e.contentWindow.postMessage||e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")}))}function K(){var e=window.location.hash,t=e.slice(2).split("/"),n=e.replace(/#|\//gi,"");if(isNaN(parseInt(t[0],10))&&n.length){var r=document.querySelector("#"+n);if(r){var o=Reveal.getIndices(r);O(o.h,o.v)}else O(St,At)}else{var a=parseInt(t[0],10)||0,i=parseInt(t[1],10)||0;(a!==St||i!==At)&&O(a,i)}}function $(e){if(Ct.history)if(clearTimeout(Wt),"number"==typeof e)Wt=setTimeout($,e);else{var t="/";xt&&"string"==typeof xt.getAttribute("id")?t="/"+xt.getAttribute("id"):((St>0||At>0)&&(t+=St),At>0&&(t+="/"+At)),window.location.hash=t}}function V(e){var t,n=St,r=At;if(e){var o=P(e),a=o?e.parentNode:e,i=d(document.querySelectorAll(Mt));n=Math.max(i.indexOf(a),0),o&&(r=Math.max(d(e.parentNode.querySelectorAll("section")).indexOf(e),0))}if(!e&&xt){var s=xt.querySelectorAll(".fragment.visible");s.length&&(t=s.length)}return{h:n,v:r,f:t}}function Z(){if(xt&&Ct.fragments){var e=E(xt.querySelectorAll(".fragment:not(.visible)"));if(e.length){var t=e[0].getAttribute("data-fragment-index");return e=xt.querySelectorAll('.fragment[data-fragment-index="'+t+'"]'),d(e).forEach(function(e){e.classList.add("visible")}),m("fragmentshown",{fragment:e[0],fragments:e}),X(),!0}}return!1}function Q(){if(xt&&Ct.fragments){var e=E(xt.querySelectorAll(".fragment.visible"));if(e.length){var t=e[e.length-1].getAttribute("data-fragment-index");return e=xt.querySelectorAll('.fragment[data-fragment-index="'+t+'"]'),d(e).forEach(function(e){e.classList.remove("visible")}),m("fragmenthidden",{fragment:e[0],fragments:e}),X(),!0}}return!1}function B(){clearTimeout(Xt),!Dt||I()||M()||(Xt=setTimeout(ot,Dt))}function G(){clearTimeout(Xt)}function J(){Ct.rtl?(M()||Z()===!1)&&U().left&&O(St+1):(M()||Q()===!1)&&U().left&&O(St-1)}function et(){Ct.rtl?(M()||Q()===!1)&&U().right&&O(St-1):(M()||Z()===!1)&&U().right&&O(St+1)}function tt(){(M()||Q()===!1)&&U().up&&O(St,At-1)}function nt(){(M()||Z()===!1)&&U().down&&O(St,At+1)}function rt(){if(Q()===!1)if(U().up)tt();else{var e=document.querySelector(Mt+".past:nth-child("+St+")");if(e){var t=e.querySelectorAll("section").length-1||void 0,n=St-1;O(n,t)}}}function ot(){Z()===!1&&(U().down?nt():et()),B()}function at(e){document.activeElement;var t=!(!document.activeElement||!document.activeElement.type&&!document.activeElement.href&&"inherit"===document.activeElement.contentEditable);if(!(t||e.shiftKey&&32!==e.keyCode||e.altKey||e.ctrlKey||e.metaKey)){if(I()&&-1===[66,190,191].indexOf(e.keyCode))return!1;var n=!1;if("object"==typeof Ct.keyboard)for(var r in Ct.keyboard)if(parseInt(r,10)===e.keyCode){var o=Ct.keyboard[r];"function"==typeof o?o.apply(null,[e]):"string"==typeof o&&"function"==typeof Reveal[o]&&Reveal[o].call(),n=!0}if(n===!1)switch(n=!0,e.keyCode){case 80:case 33:rt();break;case 78:case 34:ot();break;case 72:case 37:J();break;case 76:case 39:et();break;case 75:case 38:tt();break;case 74:case 40:nt();break;case 36:O(0);break;case 35:O(Number.MAX_VALUE);break;case 32:M()?x():e.shiftKey?rt():ot();break;case 13:M()?x():n=!1;break;case 66:case 190:case 191:R();break;case 70:N();break;default:n=!1}n?e.preventDefault():27!==e.keyCode&&79!==e.keyCode||!Yt||(T(),e.preventDefault()),B()}}function it(e){_t.startX=e.touches[0].clientX,_t.startY=e.touches[0].clientY,_t.startCount=e.touches.length,2===e.touches.length&&Ct.overview&&(_t.startSpan=u({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:_t.startX,y:_t.startY}))}function st(e){if(_t.handled)navigator.userAgent.match(/android/gi)&&e.preventDefault();else{var t=e.touches[0].clientX,n=e.touches[0].clientY;if(2===e.touches.length&&2===_t.startCount&&Ct.overview){var r=u({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:_t.startX,y:_t.startY});Math.abs(_t.startSpan-r)>_t.threshold&&(_t.handled=!0,_t.startSpan>r?q():x()),e.preventDefault()}else if(1===e.touches.length&&2!==_t.startCount){var o=t-_t.startX,a=n-_t.startY;o>_t.threshold&&Math.abs(o)>Math.abs(a)?(_t.handled=!0,J()):-_t.threshold>o&&Math.abs(o)>Math.abs(a)?(_t.handled=!0,et()):a>_t.threshold?(_t.handled=!0,tt()):-_t.threshold>a&&(_t.handled=!0,nt()),e.preventDefault()}}}function ct(){_t.handled=!1}function lt(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],it(e))}function dt(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],st(e))}function ut(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],ct(e))}function ft(e){if(Date.now()-Ht>600){Ht=Date.now();var t=e.detail||-e.wheelDelta;t>0?ot():rt()}}function vt(e){e.preventDefault();var t=d(document.querySelectorAll(Mt)).length,n=Math.floor(e.clientX/Ot.wrapper.offsetWidth*t);O(n)}function pt(e){e.preventDefault(),J()}function mt(e){e.preventDefault(),et()}function gt(e){e.preventDefault(),tt()}function ht(e){e.preventDefault(),nt()}function yt(e){e.preventDefault(),rt()}function bt(e){e.preventDefault(),ot()}function wt(){K()}function Lt(){k()}function Et(e){if(Ft&&M()){e.preventDefault();for(var t=e.target;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled")&&(x(),t.nodeName.match(/section/gi))){var n=parseInt(t.getAttribute("data-index-h"),10),r=parseInt(t.getAttribute("data-index-v"),10);O(n,r)}}}function kt(e){var t=e.target.getAttribute("href");t&&(w(t),e.preventDefault())}var St,At,qt,xt,Tt=".reveal .slides section",Mt=".reveal .slides>section",Pt=".reveal .slides>section.present>section",Nt=".reveal .slides>section:first-child",Ct={width:960,height:700,margin:.1,minScale:.2,maxScale:1,controls:!0,progress:!0,history:!1,keyboard:!0,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,fragments:!0,autoSlide:0,mouseWheel:!1,rollingLinks:!1,previewLinks:!1,theme:null,transition:"default",transitionSpeed:"default",backgroundTransition:"default",dependencies:[]},Dt=0,Rt=[],It=1,Ot={},Yt="WebkitPerspective"in document.body.style||"MozPerspective"in document.body.style||"msPerspective"in document.body.style||"OPerspective"in document.body.style||"perspective"in document.body.style,zt="WebkitTransform"in document.body.style||"MozTransform"in document.body.style||"msTransform"in document.body.style||"OTransform"in document.body.style||"transform"in document.body.style,Ht=0,Xt=0,Wt=0,Ut=0,jt=0,Ft=!1,_t={startX:0,startY:0,startSpan:0,startCount:0,handled:!1,threshold:80};return{initialize:e,configure:i,sync:Y,slide:O,left:J,right:et,up:tt,down:nt,prev:rt,next:ot,prevFragment:Q,nextFragment:Z,navigateTo:O,navigateLeft:J,navigateRight:et,navigateUp:tt,navigateDown:nt,navigatePrev:rt,navigateNext:ot,layout:k,availableRoutes:U,availableFragments:j,toggleOverview:T,togglePause:R,isOverview:M,isPaused:I,addEventListeners:s,removeEventListeners:c,getIndices:V,getSlide:function(e,t){var n=document.querySelectorAll(Mt)[e],r=n&&n.querySelectorAll("section");return t!==void 0?r?r[t]:void 0:n},getPreviousSlide:function(){return qt},getCurrentSlide:function(){return xt},getScale:function(){return It},getConfig:function(){return Ct},getQueryHash:function(){var e={};return location.search.replace(/[A-Z0-9]+?=(\w*)/gi,function(t){e[t.split("=").shift()]=t.split("=").pop()}),e},isFirstSlide:function(){return null==document.querySelector(Tt+".past")?!0:!1},isLastSlide:function(){return xt&&xt.classList.contains(".stack")?null==xt.querySelector(Tt+".future")?!0:!1:null==document.querySelector(Tt+".future")?!0:!1},addEventListener:function(e,t,n){"addEventListener"in window&&(Ot.wrapper||document.querySelector(".reveal")).addEventListener(e,t,n)},removeEventListener:function(e,t,n){"addEventListener"in window&&(Ot.wrapper||document.querySelector(".reveal")).removeEventListener(e,t,n)}}}(); \ No newline at end of file +var Reveal=function(){"use strict";function e(e){return zt||Yt?(window.addEventListener("load",k,!1),l(Ct,e),r(),o(),void 0):(document.body.setAttribute("class","no-transforms"),void 0)}function t(){if(Ot.theme=document.querySelector("#theme"),Ot.wrapper=document.querySelector(".reveal"),Ot.slides=document.querySelector(".reveal .slides"),document.querySelector(".reveal .backgrounds")||(Ot.background=document.createElement("div"),Ot.background.classList.add("backgrounds"),Ot.wrapper.appendChild(Ot.background)),!Ot.wrapper.querySelector(".progress")){var e=document.createElement("div");e.classList.add("progress"),e.innerHTML="",Ot.wrapper.appendChild(e)}if(!Ot.wrapper.querySelector(".controls")){var t=document.createElement("aside");t.classList.add("controls"),t.innerHTML='',Ot.wrapper.appendChild(t)}if(!Ot.wrapper.querySelector(".state-background")){var n=document.createElement("div");n.classList.add("state-background"),Ot.wrapper.appendChild(n)}if(!Ot.wrapper.querySelector(".pause-overlay")){var r=document.createElement("div");r.classList.add("pause-overlay"),Ot.wrapper.appendChild(r)}Ot.progress=document.querySelector(".reveal .progress"),Ot.progressbar=document.querySelector(".reveal .progress span"),Ct.controls&&(Ot.controls=document.querySelector(".reveal .controls"),Ot.controlsLeft=d(document.querySelectorAll(".navigate-left")),Ot.controlsRight=d(document.querySelectorAll(".navigate-right")),Ot.controlsUp=d(document.querySelectorAll(".navigate-up")),Ot.controlsDown=d(document.querySelectorAll(".navigate-down")),Ot.controlsPrev=d(document.querySelectorAll(".navigate-prev")),Ot.controlsNext=d(document.querySelectorAll(".navigate-next")))}function n(){function e(e,t){var n={background:e.getAttribute("data-background"),backgroundSize:e.getAttribute("data-background-size"),backgroundImage:e.getAttribute("data-background-image"),backgroundColor:e.getAttribute("data-background-color"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition")},r=document.createElement("div");return r.className="slide-background",n.background&&(/^(http|file|\/\/)/gi.test(n.background)||/\.(png|jpg|jpeg|gif|bmp)$/gi.test(n.background)?r.style.backgroundImage="url("+n.background+")":r.style.background=n.background),n.backgroundSize&&(r.style.backgroundSize=n.backgroundSize),n.backgroundImage&&(r.style.backgroundImage='url("'+n.backgroundImage+'")'),n.backgroundColor&&(r.style.backgroundColor=n.backgroundColor),n.backgroundRepeat&&(r.style.backgroundRepeat=n.backgroundRepeat),n.backgroundPosition&&(r.style.backgroundPosition=n.backgroundPosition),n.backgroundTransition&&r.setAttribute("data-background-transition",n.backgroundTransition),t.appendChild(r),r}v()&&document.body.classList.add("print-pdf"),Ot.background.innerHTML="",Ot.background.classList.add("no-transition"),d(document.querySelectorAll(Mt)).forEach(function(t){var n;n=v()?e(t,t):e(t,Ot.background),d(t.querySelectorAll("section")).forEach(function(t){v()?e(t,t):e(t,n)})})}function r(){/iphone|ipod|android/gi.test(navigator.userAgent)&&!/crios/gi.test(navigator.userAgent)&&(window.addEventListener("load",p,!1),window.addEventListener("orientationchange",p,!1))}function o(){function e(){n.length&&head.js.apply(null,n),a()}for(var t=[],n=[],r=0,o=Ct.dependencies.length;o>r;r++){var i=Ct.dependencies[r];(!i.condition||i.condition())&&(i.async?n.push(i.src):t.push(i.src),"function"==typeof i.callback&&head.ready(i.src.match(/([\w\d_\-]*)\.?js$|[^\\\/]*$/i)[0],i.callback))}t.length?(head.ready(e),head.js.apply(null,t)):e()}function a(){t(),i(),K(),setTimeout(function(){m("ready",{indexh:St,indexv:At,currentSlide:xt})},1)}function i(e){if(Ot.wrapper.classList.remove(Ct.transition),"object"==typeof e&&l(Ct,e),Yt===!1&&(Ct.transition="linear"),Ot.wrapper.classList.add(Ct.transition),Ot.wrapper.setAttribute("data-transition-speed",Ct.transitionSpeed),Ot.wrapper.setAttribute("data-background-transition",Ct.backgroundTransition),Ot.controls&&(Ot.controls.style.display=Ct.controls&&Ot.controls?"block":"none"),Ot.progress&&(Ot.progress.style.display=Ct.progress&&Ot.progress?"block":"none"),Ct.rtl?Ot.wrapper.classList.add("rtl"):Ot.wrapper.classList.remove("rtl"),Ct.center?Ot.wrapper.classList.add("center"):Ot.wrapper.classList.remove("center"),Ct.mouseWheel?(document.addEventListener("DOMMouseScroll",ft,!1),document.addEventListener("mousewheel",ft,!1)):(document.removeEventListener("DOMMouseScroll",ft,!1),document.removeEventListener("mousewheel",ft,!1)),Ct.rollingLinks?g():h(),Ct.previewLinks?y():(b(),y("[data-preview-link]")),Ct.theme&&Ot.theme){var t=Ot.theme.getAttribute("href"),n=/[^\/]*?(?=\.css)/,r=t.match(n)[0];Ct.theme!==r&&(t=t.replace(n,Ct.theme),Ot.theme.setAttribute("href",t))}Y()}function s(){Ft=!0,window.addEventListener("hashchange",wt,!1),window.addEventListener("resize",Lt,!1),Ct.touch&&(Ot.wrapper.addEventListener("touchstart",it,!1),Ot.wrapper.addEventListener("touchmove",st,!1),Ot.wrapper.addEventListener("touchend",ct,!1),window.navigator.msPointerEnabled&&(Ot.wrapper.addEventListener("MSPointerDown",lt,!1),Ot.wrapper.addEventListener("MSPointerMove",dt,!1),Ot.wrapper.addEventListener("MSPointerUp",ut,!1))),Ct.keyboard&&document.addEventListener("keydown",at,!1),Ct.progress&&Ot.progress&&Ot.progress.addEventListener("click",vt,!1),Ct.controls&&Ot.controls&&["touchstart","click"].forEach(function(e){Ot.controlsLeft.forEach(function(t){t.addEventListener(e,pt,!1)}),Ot.controlsRight.forEach(function(t){t.addEventListener(e,mt,!1)}),Ot.controlsUp.forEach(function(t){t.addEventListener(e,gt,!1)}),Ot.controlsDown.forEach(function(t){t.addEventListener(e,ht,!1)}),Ot.controlsPrev.forEach(function(t){t.addEventListener(e,yt,!1)}),Ot.controlsNext.forEach(function(t){t.addEventListener(e,bt,!1)})})}function c(){Ft=!1,document.removeEventListener("keydown",at,!1),window.removeEventListener("hashchange",wt,!1),window.removeEventListener("resize",Lt,!1),Ot.wrapper.removeEventListener("touchstart",it,!1),Ot.wrapper.removeEventListener("touchmove",st,!1),Ot.wrapper.removeEventListener("touchend",ct,!1),window.navigator.msPointerEnabled&&(Ot.wrapper.removeEventListener("MSPointerDown",lt,!1),Ot.wrapper.removeEventListener("MSPointerMove",dt,!1),Ot.wrapper.removeEventListener("MSPointerUp",ut,!1)),Ct.progress&&Ot.progress&&Ot.progress.removeEventListener("click",vt,!1),Ct.controls&&Ot.controls&&["touchstart","click"].forEach(function(e){Ot.controlsLeft.forEach(function(t){t.removeEventListener(e,pt,!1)}),Ot.controlsRight.forEach(function(t){t.removeEventListener(e,mt,!1)}),Ot.controlsUp.forEach(function(t){t.removeEventListener(e,gt,!1)}),Ot.controlsDown.forEach(function(t){t.removeEventListener(e,ht,!1)}),Ot.controlsPrev.forEach(function(t){t.removeEventListener(e,yt,!1)}),Ot.controlsNext.forEach(function(t){t.removeEventListener(e,bt,!1)})})}function l(e,t){for(var n in t)e[n]=t[n]}function d(e){return Array.prototype.slice.call(e)}function u(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}function f(e){var t=0;if(e){var n=0;d(e.childNodes).forEach(function(e){"number"==typeof e.offsetTop&&e.style&&("absolute"===e.style.position&&(n+=1),t=Math.max(t,e.offsetTop+e.offsetHeight))}),0===n&&(t=e.offsetHeight)}return t}function v(){return/print-pdf/gi.test(window.location.search)}function p(){0===window.orientation?(document.documentElement.style.overflow="scroll",document.body.style.height="120%"):(document.documentElement.style.overflow="",document.body.style.height="100%"),setTimeout(function(){window.scrollTo(0,1)},10)}function m(e,t){var n=document.createEvent("HTMLEvents",1,2);n.initEvent(e,!0,!0),l(n,t),Ot.wrapper.dispatchEvent(n)}function g(){if(Yt&&!("msPerspective"in document.body.style))for(var e=document.querySelectorAll(Tt+" a:not(.image)"),t=0,n=e.length;n>t;t++){var r=e[t];if(!(!r.textContent||r.querySelector("*")||r.className&&r.classList.contains(r,"roll"))){var o=document.createElement("span");o.setAttribute("data-title",r.text),o.innerHTML=r.innerHTML,r.classList.add("roll"),r.innerHTML="",r.appendChild(o)}}}function h(){for(var e=document.querySelectorAll(Tt+" a.roll"),t=0,n=e.length;n>t;t++){var r=e[t],o=r.querySelector("span");o&&(r.classList.remove("roll"),r.innerHTML=o.innerHTML)}}function y(e){var t=d(document.querySelectorAll(e?e:"a"));t.forEach(function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",kt,!1)})}function b(){var e=d(document.querySelectorAll("a"));e.forEach(function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",kt,!1)})}function w(e){L(),Ot.preview=document.createElement("div"),Ot.preview.classList.add("preview-link-overlay"),Ot.wrapper.appendChild(Ot.preview),Ot.preview.innerHTML=["
",'','',"
",'
','
','',"
"].join(""),Ot.preview.querySelector("iframe").addEventListener("load",function(){Ot.preview.classList.add("loaded")},!1),Ot.preview.querySelector(".close").addEventListener("click",function(e){L(),e.preventDefault()},!1),Ot.preview.querySelector(".external").addEventListener("click",function(){L()},!1),setTimeout(function(){Ot.preview.classList.add("visible")},1)}function L(){Ot.preview&&(Ot.preview.setAttribute("src",""),Ot.preview.parentNode.removeChild(Ot.preview),Ot.preview=null)}function E(e){var t=d(e);return t.forEach(function(e,t){e.hasAttribute("data-fragment-index")||e.setAttribute("data-fragment-index",t)}),t.sort(function(e,t){return e.getAttribute("data-fragment-index")-t.getAttribute("data-fragment-index")}),t}function k(){if(Ot.wrapper&&!v()){var e=Ot.wrapper.offsetWidth,t=Ot.wrapper.offsetHeight;e-=t*Ct.margin,t-=t*Ct.margin;var n=Ct.width,r=Ct.height;if("string"==typeof n&&/%$/.test(n)&&(n=parseInt(n,10)/100*e),"string"==typeof r&&/%$/.test(r)&&(r=parseInt(r,10)/100*t),Ot.slides.style.width=n+"px",Ot.slides.style.height=r+"px",It=Math.min(e/n,t/r),It=Math.max(It,Ct.minScale),It=Math.min(It,Ct.maxScale),void 0===Ot.slides.style.zoom||navigator.userAgent.match(/(iphone|ipod|ipad|android)/gi)){var o="translate(-50%, -50%) scale("+It+") translate(50%, 50%)";Ot.slides.style.WebkitTransform=o,Ot.slides.style.MozTransform=o,Ot.slides.style.msTransform=o,Ot.slides.style.OTransform=o,Ot.slides.style.transform=o}else Ot.slides.style.zoom=It;for(var a=d(document.querySelectorAll(Tt)),i=0,s=a.length;s>i;i++){var c=a[i];"none"!==c.style.display&&(c.style.top=Ct.center?c.classList.contains("stack")?0:Math.max(-(f(c)/2)-20,-r/2)+"px":"")}H()}}function S(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function A(e){if("object"==typeof e&&"function"==typeof e.setAttribute&&e.classList.contains("stack")){var t=e.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(e.getAttribute(t)||0,10)}return 0}function q(){if(Ct.overview){G();var e=Ot.wrapper.classList.contains("overview");Ot.wrapper.classList.add("overview"),Ot.wrapper.classList.remove("exit-overview"),clearTimeout(Ut),clearTimeout(jt),Ut=setTimeout(function(){for(var t=document.querySelectorAll(Mt),n=0,r=t.length;r>n;n++){var o=t[n],a=Ct.rtl?-105:105,i="translateZ(-2500px) translate("+(n-St)*a+"%, 0%)";if(o.setAttribute("data-index-h",n),o.style.display="block",o.style.WebkitTransform=i,o.style.MozTransform=i,o.style.msTransform=i,o.style.OTransform=i,o.style.transform=i,o.classList.contains("stack"))for(var s=o.querySelectorAll("section"),c=0,l=s.length;l>c;c++){var d=n===St?At:A(o),u=s[c],f="translate(0%, "+105*(c-d)+"%)";u.setAttribute("data-index-h",n),u.setAttribute("data-index-v",c),u.style.display="block",u.style.WebkitTransform=f,u.style.MozTransform=f,u.style.msTransform=f,u.style.OTransform=f,u.style.transform=f,u.addEventListener("click",Et,!0)}else o.addEventListener("click",Et,!0)}k(),e||m("overviewshown",{indexh:St,indexv:At,currentSlide:xt})},10)}}function x(){if(Ct.overview){clearTimeout(Ut),clearTimeout(jt),Ot.wrapper.classList.remove("overview"),Ot.wrapper.classList.add("exit-overview"),jt=setTimeout(function(){Ot.wrapper.classList.remove("exit-overview")},10);for(var e=d(document.querySelectorAll(Tt)),t=0,n=e.length;n>t;t++){var r=e[t];r.style.display="",r.style.WebkitTransform="",r.style.MozTransform="",r.style.msTransform="",r.style.OTransform="",r.style.transform="",r.removeEventListener("click",Et,!0)}O(St,At),B(),m("overviewhidden",{indexh:St,indexv:At,currentSlide:xt})}}function T(e){"boolean"==typeof e?e?q():x():M()?x():q()}function M(){return Ot.wrapper.classList.contains("overview")}function P(e){return e=e?e:xt,e&&!!e.parentNode.nodeName.match(/section/i)}function N(){var e=document.body,t=e.requestFullScreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullScreen;t&&t.apply(e)}function C(){var e=Ot.wrapper.classList.contains("paused");G(),Ot.wrapper.classList.add("paused"),e===!1&&m("paused")}function D(){var e=Ot.wrapper.classList.contains("paused");Ot.wrapper.classList.remove("paused"),B(),e&&m("resumed")}function R(){I()?D():C()}function I(){return Ot.wrapper.classList.contains("paused")}function O(e,t,n,r){qt=xt;var o=document.querySelectorAll(Mt);void 0===t&&(t=A(o[e])),qt&&qt.parentNode&&qt.parentNode.classList.contains("stack")&&S(qt.parentNode,At);var a=Rt.concat();Rt.length=0;var i=St,s=At;St=z(Mt,void 0===e?St:e),At=z(Pt,void 0===t?At:t),k();e:for(var c=0,l=Rt.length;l>c;c++){for(var u=0;a.length>u;u++)if(a[u]===Rt[c]){a.splice(u,1);continue e}document.documentElement.classList.add(Rt[c]),m(Rt[c])}for(;a.length;)document.documentElement.classList.remove(a.pop());M()&&q();var f=o[St],v=f.querySelectorAll("section");if(xt=v[At]||f,n!==void 0){var p=E(xt.querySelectorAll(".fragment"));d(p).forEach(function(e,t){n>t?e.classList.add("visible"):e.classList.remove("visible")})}var g=St!==i||At!==s;g?m("slidechanged",{indexh:St,indexv:At,previousSlide:qt,currentSlide:xt,origin:r}):qt=null,qt&&(qt.classList.remove("present"),document.querySelector(Nt).classList.contains("present")&&setTimeout(function(){var e,t=d(document.querySelectorAll(Mt+".stack"));for(e in t)t[e]&&S(t[e],0)},0)),g&&(_(qt),F(xt)),X(),H(),W(),$()}function Y(){c(),s(),k(),Dt=Ct.autoSlide,B(),n(),X(),H(),W()}function z(e,t){var n=d(document.querySelectorAll(e)),r=n.length;if(r){Ct.loop&&(t%=r,0>t&&(t=r+t)),t=Math.max(Math.min(t,r-1),0);for(var o=0;r>o;o++){var a=n[o];if(M()===!1){var i=Math.abs((t-o)%(r-3))||0;a.style.display=i>3?"none":"block"}var s=Ct.rtl&&!P(a);if(a.classList.remove("past"),a.classList.remove("present"),a.classList.remove("future"),a.setAttribute("hidden",""),t>o)a.classList.add(s?"future":"past");else if(o>t){a.classList.add(s?"past":"future");for(var c=d(a.querySelectorAll(".fragment.visible"));c.length;)c.pop().classList.remove("visible")}a.querySelector("section")&&a.classList.add("stack")}n[t].classList.add("present"),n[t].removeAttribute("hidden");var l=n[t].getAttribute("data-state");l&&(Rt=Rt.concat(l.split(" ")));var u=n[t].getAttribute("data-autoslide");Dt=u?parseInt(u,10):Ct.autoSlide,B()}else t=0;return t}function H(){if(Ct.progress&&Ot.progress){var e=d(document.querySelectorAll(Mt)),t=document.querySelectorAll(Tt+":not(.stack)").length,n=0;e:for(var r=0;e.length>r;r++){for(var o=e[r],a=d(o.querySelectorAll("section")),i=0;a.length>i;i++){if(a[i].classList.contains("present"))break e;n++}if(o.classList.contains("present"))break;o.classList.contains("stack")===!1&&n++}Ot.progressbar.style.width=n/(t-1)*window.innerWidth+"px"}}function X(){if(Ct.controls&&Ot.controls){var e=U(),t=j();Ot.controlsLeft.concat(Ot.controlsRight).concat(Ot.controlsUp).concat(Ot.controlsDown).concat(Ot.controlsPrev).concat(Ot.controlsNext).forEach(function(e){e.classList.remove("enabled"),e.classList.remove("fragmented")}),e.left&&Ot.controlsLeft.forEach(function(e){e.classList.add("enabled")}),e.right&&Ot.controlsRight.forEach(function(e){e.classList.add("enabled")}),e.up&&Ot.controlsUp.forEach(function(e){e.classList.add("enabled")}),e.down&&Ot.controlsDown.forEach(function(e){e.classList.add("enabled")}),(e.left||e.up)&&Ot.controlsPrev.forEach(function(e){e.classList.add("enabled")}),(e.right||e.down)&&Ot.controlsNext.forEach(function(e){e.classList.add("enabled")}),xt&&(t.prev&&Ot.controlsPrev.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Ot.controlsNext.forEach(function(e){e.classList.add("fragmented","enabled")}),P(xt)?(t.prev&&Ot.controlsUp.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Ot.controlsDown.forEach(function(e){e.classList.add("fragmented","enabled")})):(t.prev&&Ot.controlsLeft.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Ot.controlsRight.forEach(function(e){e.classList.add("fragmented","enabled")})))}}function W(){d(Ot.background.childNodes).forEach(function(e,t){var n=Ct.rtl?"future":"past",r=Ct.rtl?"past":"future";e.className="slide-background "+(St>t?n:t>St?r:"present"),d(e.childNodes).forEach(function(e,t){e.className="slide-background "+(At>t?"past":t>At?"future":"present")})}),setTimeout(function(){Ot.background.classList.remove("no-transition")},1)}function U(){var e=document.querySelectorAll(Mt),t=document.querySelectorAll(Pt),n={left:St>0||Ct.loop,right:e.length-1>St||Ct.loop,up:At>0,down:t.length-1>At};if(Ct.rtl){var r=n.left;n.left=n.right,n.right=r}return n}function j(){if(xt&&Ct.fragments){var e=xt.querySelectorAll(".fragment"),t=xt.querySelectorAll(".fragment:not(.visible)");return{prev:e.length-t.length>0,next:!!t.length}}return{prev:!1,next:!1}}function F(e){e&&(d(e.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-autoplay")&&e.play()}),d(e.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function(e){e.hasAttribute("data-autoplay")&&e.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*")}))}function _(e){e&&(d(e.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-ignore")||e.pause()}),d(e.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function(e){e.hasAttribute("data-ignore")||"function"!=typeof e.contentWindow.postMessage||e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")}))}function K(){var e=window.location.hash,t=e.slice(2).split("/"),n=e.replace(/#|\//gi,"");if(isNaN(parseInt(t[0],10))&&n.length){var r=document.querySelector("#"+n);if(r){var o=Reveal.getIndices(r);O(o.h,o.v)}else O(St,At)}else{var a=parseInt(t[0],10)||0,i=parseInt(t[1],10)||0;(a!==St||i!==At)&&O(a,i)}}function $(e){if(Ct.history)if(clearTimeout(Wt),"number"==typeof e)Wt=setTimeout($,e);else{var t="/";xt&&"string"==typeof xt.getAttribute("id")?t="/"+xt.getAttribute("id"):((St>0||At>0)&&(t+=St),At>0&&(t+="/"+At)),window.location.hash=t}}function V(e){var t,n=St,r=At;if(e){var o=P(e),a=o?e.parentNode:e,i=d(document.querySelectorAll(Mt));n=Math.max(i.indexOf(a),0),o&&(r=Math.max(d(e.parentNode.querySelectorAll("section")).indexOf(e),0))}if(!e&&xt){var s=xt.querySelectorAll(".fragment").length>0;if(s){var c=xt.querySelectorAll(".fragment.visible");t=c.length}}return{h:n,v:r,f:t}}function Z(){if(xt&&Ct.fragments){var e=E(xt.querySelectorAll(".fragment:not(.visible)"));if(e.length){var t=e[0].getAttribute("data-fragment-index");return e=xt.querySelectorAll('.fragment[data-fragment-index="'+t+'"]'),d(e).forEach(function(e){e.classList.add("visible")}),m("fragmentshown",{fragment:e[0],fragments:e}),X(),!0}}return!1}function Q(){if(xt&&Ct.fragments){var e=E(xt.querySelectorAll(".fragment.visible"));if(e.length){var t=e[e.length-1].getAttribute("data-fragment-index");return e=xt.querySelectorAll('.fragment[data-fragment-index="'+t+'"]'),d(e).forEach(function(e){e.classList.remove("visible")}),m("fragmenthidden",{fragment:e[0],fragments:e}),X(),!0}}return!1}function B(){clearTimeout(Xt),!Dt||I()||M()||(Xt=setTimeout(ot,Dt))}function G(){clearTimeout(Xt)}function J(){Ct.rtl?(M()||Z()===!1)&&U().left&&O(St+1):(M()||Q()===!1)&&U().left&&O(St-1)}function et(){Ct.rtl?(M()||Q()===!1)&&U().right&&O(St-1):(M()||Z()===!1)&&U().right&&O(St+1)}function tt(){(M()||Q()===!1)&&U().up&&O(St,At-1)}function nt(){(M()||Z()===!1)&&U().down&&O(St,At+1)}function rt(){if(Q()===!1)if(U().up)tt();else{var e=document.querySelector(Mt+".past:nth-child("+St+")");if(e){var t=e.querySelectorAll("section").length-1||void 0,n=St-1;O(n,t)}}}function ot(){Z()===!1&&(U().down?nt():et()),B()}function at(e){document.activeElement;var t=!(!document.activeElement||!document.activeElement.type&&!document.activeElement.href&&"inherit"===document.activeElement.contentEditable);if(!(t||e.shiftKey&&32!==e.keyCode||e.altKey||e.ctrlKey||e.metaKey)){if(I()&&-1===[66,190,191].indexOf(e.keyCode))return!1;var n=!1;if("object"==typeof Ct.keyboard)for(var r in Ct.keyboard)if(parseInt(r,10)===e.keyCode){var o=Ct.keyboard[r];"function"==typeof o?o.apply(null,[e]):"string"==typeof o&&"function"==typeof Reveal[o]&&Reveal[o].call(),n=!0}if(n===!1)switch(n=!0,e.keyCode){case 80:case 33:rt();break;case 78:case 34:ot();break;case 72:case 37:J();break;case 76:case 39:et();break;case 75:case 38:tt();break;case 74:case 40:nt();break;case 36:O(0);break;case 35:O(Number.MAX_VALUE);break;case 32:M()?x():e.shiftKey?rt():ot();break;case 13:M()?x():n=!1;break;case 66:case 190:case 191:R();break;case 70:N();break;default:n=!1}n?e.preventDefault():27!==e.keyCode&&79!==e.keyCode||!Yt||(T(),e.preventDefault()),B()}}function it(e){_t.startX=e.touches[0].clientX,_t.startY=e.touches[0].clientY,_t.startCount=e.touches.length,2===e.touches.length&&Ct.overview&&(_t.startSpan=u({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:_t.startX,y:_t.startY}))}function st(e){if(_t.handled)navigator.userAgent.match(/android/gi)&&e.preventDefault();else{var t=e.touches[0].clientX,n=e.touches[0].clientY;if(2===e.touches.length&&2===_t.startCount&&Ct.overview){var r=u({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:_t.startX,y:_t.startY});Math.abs(_t.startSpan-r)>_t.threshold&&(_t.handled=!0,_t.startSpan>r?q():x()),e.preventDefault()}else if(1===e.touches.length&&2!==_t.startCount){var o=t-_t.startX,a=n-_t.startY;o>_t.threshold&&Math.abs(o)>Math.abs(a)?(_t.handled=!0,J()):-_t.threshold>o&&Math.abs(o)>Math.abs(a)?(_t.handled=!0,et()):a>_t.threshold?(_t.handled=!0,tt()):-_t.threshold>a&&(_t.handled=!0,nt()),e.preventDefault()}}}function ct(){_t.handled=!1}function lt(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],it(e))}function dt(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],st(e))}function ut(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],ct(e))}function ft(e){if(Date.now()-Ht>600){Ht=Date.now();var t=e.detail||-e.wheelDelta;t>0?ot():rt()}}function vt(e){e.preventDefault();var t=d(document.querySelectorAll(Mt)).length,n=Math.floor(e.clientX/Ot.wrapper.offsetWidth*t);O(n)}function pt(e){e.preventDefault(),J()}function mt(e){e.preventDefault(),et()}function gt(e){e.preventDefault(),tt()}function ht(e){e.preventDefault(),nt()}function yt(e){e.preventDefault(),rt()}function bt(e){e.preventDefault(),ot()}function wt(){K()}function Lt(){k()}function Et(e){if(Ft&&M()){e.preventDefault();for(var t=e.target;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled")&&(x(),t.nodeName.match(/section/gi))){var n=parseInt(t.getAttribute("data-index-h"),10),r=parseInt(t.getAttribute("data-index-v"),10);O(n,r)}}}function kt(e){var t=e.target.getAttribute("href");t&&(w(t),e.preventDefault())}var St,At,qt,xt,Tt=".reveal .slides section",Mt=".reveal .slides>section",Pt=".reveal .slides>section.present>section",Nt=".reveal .slides>section:first-child",Ct={width:960,height:700,margin:.1,minScale:.2,maxScale:1,controls:!0,progress:!0,history:!1,keyboard:!0,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,fragments:!0,autoSlide:0,mouseWheel:!1,rollingLinks:!1,previewLinks:!1,theme:null,transition:"default",transitionSpeed:"default",backgroundTransition:"default",dependencies:[]},Dt=0,Rt=[],It=1,Ot={},Yt="WebkitPerspective"in document.body.style||"MozPerspective"in document.body.style||"msPerspective"in document.body.style||"OPerspective"in document.body.style||"perspective"in document.body.style,zt="WebkitTransform"in document.body.style||"MozTransform"in document.body.style||"msTransform"in document.body.style||"OTransform"in document.body.style||"transform"in document.body.style,Ht=0,Xt=0,Wt=0,Ut=0,jt=0,Ft=!1,_t={startX:0,startY:0,startSpan:0,startCount:0,handled:!1,threshold:80};return{initialize:e,configure:i,sync:Y,slide:O,left:J,right:et,up:tt,down:nt,prev:rt,next:ot,prevFragment:Q,nextFragment:Z,navigateTo:O,navigateLeft:J,navigateRight:et,navigateUp:tt,navigateDown:nt,navigatePrev:rt,navigateNext:ot,layout:k,availableRoutes:U,availableFragments:j,toggleOverview:T,togglePause:R,isOverview:M,isPaused:I,addEventListeners:s,removeEventListeners:c,getIndices:V,getSlide:function(e,t){var n=document.querySelectorAll(Mt)[e],r=n&&n.querySelectorAll("section");return t!==void 0?r?r[t]:void 0:n},getPreviousSlide:function(){return qt},getCurrentSlide:function(){return xt},getScale:function(){return It},getConfig:function(){return Ct},getQueryHash:function(){var e={};return location.search.replace(/[A-Z0-9]+?=(\w*)/gi,function(t){e[t.split("=").shift()]=t.split("=").pop()}),e},isFirstSlide:function(){return null==document.querySelector(Tt+".past")?!0:!1},isLastSlide:function(){return xt&&xt.classList.contains(".stack")?null==xt.querySelector(Tt+".future")?!0:!1:null==document.querySelector(Tt+".future")?!0:!1},addEventListener:function(e,t,n){"addEventListener"in window&&(Ot.wrapper||document.querySelector(".reveal")).addEventListener(e,t,n)},removeEventListener:function(e,t,n){"addEventListener"in window&&(Ot.wrapper||document.querySelector(".reveal")).removeEventListener(e,t,n)}}}(); \ No newline at end of file diff --git a/plugin/notes/notes.html b/plugin/notes/notes.html index 9151663..0ef285b 100644 --- a/plugin/notes/notes.html +++ b/plugin/notes/notes.html @@ -169,7 +169,8 @@ var notes = document.getElementById( 'notes' ), currentSlide = document.getElementById( 'current-slide' ), - nextSlide = document.getElementById( 'next-slide' ); + nextSlide = document.getElementById( 'next-slide' ), + silenced = false; window.addEventListener( 'message', function( event ) { var data = JSON.parse( event.data ); @@ -184,10 +185,14 @@ } } + silenced = true; + // Update the note slides currentSlide.contentWindow.Reveal.slide( data.indexh, data.indexv, data.indexf ); nextSlide.contentWindow.Reveal.slide( data.nextindexh, data.nextindexv ); + silenced = false; + }, false ); var start = new Date(), @@ -218,12 +223,21 @@ }, 1000 ); - // Navigate the main window when the notes slide changes - currentSlide.contentWindow.Reveal.addEventListener( 'slidechanged', function( event ) { + // Broadcasts the state of the notes window to synchronize + // the main window + function synchronizeMainWindow() { - window.opener.Reveal.slide( event.indexh, event.indexv ); + if( !silenced ) { + var indices = currentSlide.contentWindow.Reveal.getIndices(); + window.opener.Reveal.slide( indices.h, indices.v, indices.f ); + } + + } - } ); + // Navigate the main window when the notes slide changes + currentSlide.contentWindow.Reveal.addEventListener( 'slidechanged', synchronizeMainWindow ); + currentSlide.contentWindow.Reveal.addEventListener( 'fragmentshown', synchronizeMainWindow ); + currentSlide.contentWindow.Reveal.addEventListener( 'fragmenthidden', synchronizeMainWindow ); } else { -- cgit v1.2.3 From efbcab57f74891a060320af1c9e2e3c039febc5a Mon Sep 17 00:00:00 2001 From: Riceball LEE Date: Wed, 31 Jul 2013 06:48:09 +0800 Subject: * [bug] fixed render markdown file error like this: ```html
``` --- plugin/markdown/markdown.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index 473666b..dcab2fa 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -6,6 +6,14 @@ throw 'The reveal.js Markdown plugin requires marked to be loaded'; } + if (typeof hljs !== 'undefined') { + marked.setOptions({ + highlight: function (lang, code) { + return hljs.highlightAuto(lang, code).value; + } + }); + } + var stripLeadingWhitespace = function(section) { var template = section.querySelector( 'script' ); @@ -28,7 +36,7 @@ }; var twrap = function(el) { - return ''; + return marked(el); }; var getForwardedAttributes = function(section) { @@ -51,7 +59,7 @@ } return result.join( ' ' ); - } + }; var slidifyMarkdown = function(markdown, separator, vertical, attributes) { @@ -101,12 +109,12 @@ for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { // horizontal if( typeof sectionStack[k] === 'string' ) { - markdownSections += '
' + twrap( sectionStack[k] ) + '
'; + markdownSections += '
' + twrap( sectionStack[k] ) + '
'; } // vertical else { markdownSections += '
' + - '
' + sectionStack[k].map(twrap).join('
') + '
' + + '
' + sectionStack[k].map(twrap).join('
') + '
' + '
'; } } -- cgit v1.2.3 From 32818e0149fd5b3bfb8586a818a7aa63660b1619 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Sun, 11 Aug 2013 16:37:17 -0400 Subject: move leap styles to js #554 --- css/reveal.css | 9 --------- css/reveal.min.css | 2 +- plugin/leap/leap.js | 3 +++ 3 files changed, 4 insertions(+), 10 deletions(-) (limited to 'plugin') diff --git a/css/reveal.css b/css/reveal.css index 02dd566..f51f966 100644 --- a/css/reveal.css +++ b/css/reveal.css @@ -1621,12 +1621,3 @@ body { } -/********************************************* - * LEAP PLUGIN - *********************************************/ - -#leap { - position: absolute; - z-index: 50; - visibility: hidden; -} diff --git a/css/reveal.min.css b/css/reveal.min.css index 2f0ca4d..1bf0b03 100644 --- a/css/reveal.min.css +++ b/css/reveal.min.css @@ -4,4 +4,4 @@ * MIT licensed * * Copyright (C) 2013 Hakim El Hattab, http://hakim.se - */ html,body,.reveal div,.reveal span,.reveal applet,.reveal object,.reveal iframe,.reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal h5,.reveal h6,.reveal p,.reveal blockquote,.reveal pre,.reveal a,.reveal abbr,.reveal acronym,.reveal address,.reveal big,.reveal cite,.reveal code,.reveal del,.reveal dfn,.reveal em,.reveal img,.reveal ins,.reveal kbd,.reveal q,.reveal s,.reveal samp,.reveal small,.reveal strike,.reveal strong,.reveal sub,.reveal sup,.reveal tt,.reveal var,.reveal b,.reveal u,.reveal i,.reveal center,.reveal dl,.reveal dt,.reveal dd,.reveal ol,.reveal ul,.reveal li,.reveal fieldset,.reveal form,.reveal label,.reveal legend,.reveal table,.reveal caption,.reveal tbody,.reveal tfoot,.reveal thead,.reveal tr,.reveal th,.reveal td,.reveal article,.reveal aside,.reveal canvas,.reveal details,.reveal embed,.reveal figure,.reveal figcaption,.reveal footer,.reveal header,.reveal hgroup,.reveal menu,.reveal nav,.reveal output,.reveal ruby,.reveal section,.reveal summary,.reveal time,.reveal mark,.reveal audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}.reveal article,.reveal aside,.reveal details,.reveal figcaption,.reveal figure,.reveal footer,.reveal header,.reveal hgroup,.reveal menu,.reveal nav,.reveal section{display:block}html,body{width:100%;height:100%;overflow:hidden}body{position:relative;line-height:1}::selection{background:#FF5E99;color:#fff;text-shadow:none}.reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal h5,.reveal h6{-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto;word-wrap:break-word;line-height:1}.reveal h1{font-size:3.77em}.reveal h2{font-size:2.11em}.reveal h3{font-size:1.55em}.reveal h4{font-size:1em}.reveal .slides section .fragment{opacity:0;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.reveal .slides section .fragment.visible{opacity:1}.reveal .slides section .fragment.grow{opacity:1}.reveal .slides section .fragment.grow.visible{-webkit-transform:scale(1.3);-moz-transform:scale(1.3);-ms-transform:scale(1.3);-o-transform:scale(1.3);transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1}.reveal .slides section .fragment.shrink.visible{-webkit-transform:scale(0.7);-moz-transform:scale(0.7);-ms-transform:scale(0.7);-o-transform:scale(0.7);transform:scale(0.7)}.reveal .slides section .fragment.zoom-in{opacity:0;-webkit-transform:scale(0.1);-moz-transform:scale(0.1);-ms-transform:scale(0.1);-o-transform:scale(0.1);transform:scale(0.1)}.reveal .slides section .fragment.zoom-in.visible{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.reveal .slides section .fragment.roll-in{opacity:0;-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-ms-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.reveal .slides section .fragment.roll-in.visible{opacity:1;-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-ms-transform:rotateX(0);-o-transform:rotateX(0);transform:rotateX(0)}.reveal .slides section .fragment.fade-out{opacity:1}.reveal .slides section .fragment.fade-out.visible{opacity:0}.reveal .slides section .fragment.semi-fade-out{opacity:1}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5}.reveal .slides section .fragment.highlight-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-blue{opacity:1}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal:after{content:'';font-style:italic}.reveal iframe{z-index:1}.reveal img,.reveal video,.reveal iframe{max-width:95%;max-height:95%}.reveal a{position:relative}.reveal strong,.reveal b{font-weight:700}.reveal em,.reveal i{font-style:italic}.reveal ol,.reveal ul{display:inline-block;text-align:left;margin:0 0 0 1em}.reveal ol{list-style-type:decimal}.reveal ul{list-style-type:disc}.reveal ul ul{list-style-type:square}.reveal ul ul ul{list-style-type:circle}.reveal ul ul,.reveal ul ol,.reveal ol ol,.reveal ol ul{display:block;margin-left:40px}.reveal p{margin-bottom:10px;line-height:1.2em}.reveal q,.reveal blockquote{quotes:none}.reveal blockquote{display:block;position:relative;width:70%;margin:5px auto;padding:5px;font-style:italic;background:rgba(255,255,255,.05);box-shadow:0 0 2px rgba(0,0,0,.2)}.reveal blockquote p:first-child,.reveal blockquote p:last-child{display:inline-block}.reveal q{font-style:italic}.reveal pre{display:block;position:relative;width:90%;margin:15px auto;text-align:left;font-size:.55em;font-family:monospace;line-height:1.2em;word-wrap:break-word;box-shadow:0 0 6px rgba(0,0,0,.3)}.reveal code{font-family:monospace}.reveal pre code{padding:5px;overflow:auto;max-height:400px;word-wrap:normal}.reveal table th,.reveal table td{text-align:left;padding-right:.3em}.reveal table th{text-shadow:#fff 1px 1px 2px}.reveal sup{vertical-align:super}.reveal sub{vertical-align:sub}.reveal small{display:inline-block;font-size:.6em;line-height:1.2em;vertical-align:top}.reveal small *{vertical-align:top}.reveal .controls{display:none;position:fixed;width:110px;height:110px;z-index:30;right:10px;bottom:10px}.reveal .controls div{position:absolute;opacity:.05;width:0;height:0;border:12px solid transparent;-moz-transform:scale(.9999);-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.reveal .controls div.enabled{opacity:.7;cursor:pointer}.reveal .controls div.enabled:active{margin-top:1px}.reveal .controls div.navigate-left{top:42px;border-right-width:22px;border-right-color:#eee}.reveal .controls div.navigate-left.fragmented{opacity:.3}.reveal .controls div.navigate-right{left:74px;top:42px;border-left-width:22px;border-left-color:#eee}.reveal .controls div.navigate-right.fragmented{opacity:.3}.reveal .controls div.navigate-up{left:42px;border-bottom-width:22px;border-bottom-color:#eee}.reveal .controls div.navigate-up.fragmented{opacity:.3}.reveal .controls div.navigate-down{left:42px;top:74px;border-top-width:22px;border-top-color:#eee}.reveal .controls div.navigate-down.fragmented{opacity:.3}.reveal .progress{position:fixed;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10}.reveal .progress:after{content:'';display:'block';position:absolute;height:20px;width:100%;top:-20px}.reveal .progress span{display:block;height:100%;width:0;-webkit-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-o-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);transition:width 800ms cubic-bezier(0.26,.86,.44,.985)}.reveal{position:relative;width:100%;height:100%;-ms-touch-action:none}.reveal .slides{position:absolute;width:100%;height:100%;left:50%;top:50%;overflow:visible;z-index:1;text-align:center;-webkit-transition:-webkit-perspective .4s ease;-moz-transition:-moz-perspective .4s ease;-ms-transition:-ms-perspective .4s ease;-o-transition:-o-perspective .4s ease;transition:perspective .4s ease;-webkit-perspective:600px;-moz-perspective:600px;-ms-perspective:600px;perspective:600px;-webkit-perspective-origin:0 -100px;-moz-perspective-origin:0 -100px;-ms-perspective-origin:0 -100px;perspective-origin:0 -100px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;padding:20px 0;z-index:10;line-height:1.2em;font-weight:400;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:-webkit-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-webkit-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:-moz-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-moz-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:-ms-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-ms-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-o-transition:-o-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-o-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);transition:transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal[data-transition-speed=slow] .slides section{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal .slides section[data-transition-speed=fast]{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal .slides section[data-transition-speed=slow]{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal .slides>section{left:-50%;top:-50%}.reveal .slides>section.stack{padding-top:0;padding-bottom:0}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:auto!important}.reveal .slides>section[data-transition=default].past,.reveal .slides>section.past{display:block;opacity:0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section.future{display:block;opacity:0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section.past{display:block;opacity:0;-webkit-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);-moz-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);-ms-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section.future{display:block;opacity:0;-webkit-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);-moz-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);-ms-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides>section[data-transition=concave].past,.reveal.concave .slides>section.past{-webkit-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal.concave .slides>section.future{-webkit-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal.concave .slides>section>section.past{-webkit-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);-moz-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);-ms-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal.concave .slides>section>section.future{-webkit-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);-moz-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);-ms-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides>section[data-transition=zoom].past,.reveal.zoom .slides>section.past{opacity:0;visibility:hidden;-webkit-transform:scale(16);-moz-transform:scale(16);-ms-transform:scale(16);-o-transform:scale(16);transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal.zoom .slides>section.future{opacity:0;visibility:hidden;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal.zoom .slides>section>section.past{-webkit-transform:translate(0,-150%);-moz-transform:translate(0,-150%);-ms-transform:translate(0,-150%);-o-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=zoom].future,.reveal.zoom .slides>section>section.future{-webkit-transform:translate(0,150%);-moz-transform:translate(0,150%);-ms-transform:translate(0,150%);-o-transform:translate(0,150%);transform:translate(0,150%)}.reveal.linear section{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=linear].past,.reveal.linear .slides>section.past{-webkit-transform:translate(-150%,0);-moz-transform:translate(-150%,0);-ms-transform:translate(-150%,0);-o-transform:translate(-150%,0);transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal.linear .slides>section.future{-webkit-transform:translate(150%,0);-moz-transform:translate(150%,0);-ms-transform:translate(150%,0);-o-transform:translate(150%,0);transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal.linear .slides>section>section.past{-webkit-transform:translate(0,-150%);-moz-transform:translate(0,-150%);-ms-transform:translate(0,-150%);-o-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal.linear .slides>section>section.future{-webkit-transform:translate(0,150%);-moz-transform:translate(0,150%);-ms-transform:translate(0,150%);-o-transform:translate(0,150%);transform:translate(0,150%)}.reveal.cube .slides{-webkit-perspective:1300px;-moz-perspective:1300px;-ms-perspective:1300px;perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.reveal.center.cube .slides section{min-height:auto}.reveal.cube .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;-webkit-transform:translateZ(-20px);-moz-transform:translateZ(-20px);-ms-transform:translateZ(-20px);-o-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg);-moz-transform:translateZ(-90px) rotateX(65deg);-ms-transform:translateZ(-90px) rotateX(65deg);-o-transform:translateZ(-90px) rotateX(65deg);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0}.reveal.cube .slides>section.past{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg);-moz-transform:translate3d(-100%,0,0) rotateY(-90deg);-ms-transform:translate3d(-100%,0,0) rotateY(-90deg);transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg);-moz-transform:translate3d(100%,0,0) rotateY(90deg);-ms-transform:translate3d(100%,0,0) rotateY(90deg);transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,-100%,0) rotateX(90deg);-moz-transform:translate3d(0,-100%,0) rotateX(90deg);-ms-transform:translate3d(0,-100%,0) rotateX(90deg);transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,100%,0) rotateX(-90deg);-moz-transform:translate3d(0,100%,0) rotateX(-90deg);-ms-transform:translate3d(0,100%,0) rotateX(-90deg);transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{-webkit-perspective-origin:0 50%;-moz-perspective-origin:0 50%;-ms-perspective-origin:0 50%;perspective-origin:0 50%;-webkit-perspective:3000px;-moz-perspective:3000px;-ms-perspective:3000px;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);-webkit-transform:translateZ(-20px);-moz-transform:translateZ(-20px);-ms-transform:translateZ(-20px);-o-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0}.reveal.page .slides>section.past{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(-40%,0,0) rotateY(-80deg);-moz-transform:translate3d(-40%,0,0) rotateY(-80deg);-ms-transform:translate3d(-40%,0,0) rotateY(-80deg);transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,-40%,0) rotateX(80deg);-moz-transform:translate3d(0,-40%,0) rotateX(80deg);-ms-transform:translate3d(0,-40%,0) rotateX(80deg);transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section,.reveal.fade .slides>section>section{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-ms-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section,.reveal.fade.exit-overview .slides section,.reveal.fade.exit-overview .slides>section>section{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal.overview .slides{-webkit-perspective-origin:0 0;-moz-perspective-origin:0 0;-ms-perspective-origin:0 0;perspective-origin:0 0;-webkit-perspective:700px;-moz-perspective:700px;-ms-perspective:700px;perspective:700px}.reveal.overview .slides section{height:600px;top:-300px!important;overflow:hidden;opacity:1!important;visibility:visible!important;cursor:pointer;background:rgba(0,0,0,.1)}.reveal.overview .slides section .fragment{opacity:1}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides section>section{opacity:1;cursor:pointer}.reveal.overview .slides section:hover{background:rgba(0,0,0,.3)}.reveal.overview .slides section.present{background:rgba(0,0,0,.3)}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0;overflow:visible}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;-ms-transition:all 1s ease;-o-transition:all 1s ease;transition:all 1s ease}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.no-transforms{overflow-y:auto}.no-transforms .reveal .slides{position:relative;width:80%;height:auto!important;top:0;left:50%;margin:0;text-align:center}.no-transforms .reveal .controls,.no-transforms .reveal .progress{display:none!important}.no-transforms .reveal .slides section{display:block!important;opacity:1!important;position:relative!important;height:auto;min-height:auto;top:0;left:-50%;margin:70px 0;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.no-transforms .reveal .slides section section{left:0}.reveal .no-transition,.reveal .no-transition *{-webkit-transition:none!important;-moz-transition:none!important;-ms-transition:none!important;-o-transition:none!important;transition:none!important}.reveal .state-background{position:absolute;width:100%;height:100%;background:rgba(0,0,0,0);-webkit-transition:background 800ms ease;-moz-transition:background 800ms ease;-ms-transition:background 800ms ease;-o-transition:background 800ms ease;transition:background 800ms ease}.alert .reveal .state-background{background:rgba(200,50,30,.6)}.soothe .reveal .state-background{background:rgba(50,200,90,.4)}.blackout .reveal .state-background{background:rgba(0,0,0,.6)}.whiteout .reveal .state-background{background:rgba(255,255,255,.6)}.cobalt .reveal .state-background{background:rgba(22,152,213,.6)}.mint .reveal .state-background{background:rgba(22,213,75,.6)}.submerge .reveal .state-background{background:rgba(12,25,77,.6)}.lila .reveal .state-background{background:rgba(180,50,140,.6)}.sunset .reveal .state-background{background:rgba(255,122,0,.6)}.reveal>.backgrounds{position:absolute;width:100%;height:100%}.reveal .slide-background{position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;background-color:rgba(0,0,0,0);background-position:50% 50%;background-repeat:no-repeat;background-size:cover;-webkit-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);-o-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);transition:all 600ms cubic-bezier(0.26,.86,.44,.985)}.reveal .slide-background.present{opacity:1;visibility:visible}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal[data-background-transition=none]>.backgrounds .slide-background,.reveal>.backgrounds .slide-background[data-background-transition=none]{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal[data-background-transition=slide]>.backgrounds .slide-background,.reveal>.backgrounds .slide-background[data-background-transition=slide]{opacity:1;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition-duration:800ms;-moz-transition-duration:800ms;-ms-transition-duration:800ms;-o-transition-duration:800ms;transition-duration:800ms}.reveal[data-background-transition=slide]>.backgrounds .slide-background.past,.reveal>.backgrounds .slide-background.past[data-background-transition=slide]{-webkit-transform:translate(-100%,0);-moz-transform:translate(-100%,0);-ms-transform:translate(-100%,0);-o-transform:translate(-100%,0);transform:translate(-100%,0)}.reveal[data-background-transition=slide]>.backgrounds .slide-background.future,.reveal>.backgrounds .slide-background.future[data-background-transition=slide]{-webkit-transform:translate(100%,0);-moz-transform:translate(100%,0);-ms-transform:translate(100%,0);-o-transform:translate(100%,0);transform:translate(100%,0)}.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past,.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide]{-webkit-transform:translate(0,-100%);-moz-transform:translate(0,-100%);-ms-transform:translate(0,-100%);-o-transform:translate(0,-100%);transform:translate(0,-100%)}.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future,.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide]{-webkit-transform:translate(0,100%);-moz-transform:translate(0,100%);-ms-transform:translate(0,100%);-o-transform:translate(0,100%);transform:translate(0,100%)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl pre,.reveal.rtl code{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{float:right}.reveal .preview-link-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);opacity:0;visibility:hidden;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease}.reveal .preview-link-overlay.visible{opacity:1;visibility:visible}.reveal .preview-link-overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease}.reveal .preview-link-overlay header{position:absolute;left:0;top:0;width:100%;height:40px;z-index:2;border-bottom:1px solid #222}.reveal .preview-link-overlay header a{display:inline-block;width:40px;height:40px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal .preview-link-overlay header a:hover{opacity:1}.reveal .preview-link-overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal .preview-link-overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal .preview-link-overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal .preview-link-overlay .viewport{position:absolute;top:40px;right:0;bottom:0;left:0}.reveal .preview-link-overlay .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease}.reveal .preview-link-overlay.loaded .viewport iframe{opacity:1;visibility:visible}.reveal .preview-link-overlay.loaded .spinner{opacity:0;visibility:hidden;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);transform:scale(0.2)}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;-webkit-perspective:400px;-moz-perspective:400px;-ms-perspective:400px;perspective:400px;-webkit-perspective-origin:50% 50%;-moz-perspective-origin:50% 50%;-ms-perspective-origin:50% 50%;perspective-origin:50% 50%}.reveal .roll:hover{background:0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;-ms-transition:all 400ms ease;transition:all 400ms ease;-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);-webkit-transform:translate3d(0px,0,-45px) rotateX(90deg);-moz-transform:translate3d(0px,0,-45px) rotateX(90deg);-ms-transform:translate3d(0px,0,-45px) rotateX(90deg);transform:translate3d(0px,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:translate3d(0px,110%,0) rotateX(-90deg);-moz-transform:translate3d(0px,110%,0) rotateX(-90deg);-ms-transform:translate3d(0px,110%,0) rotateX(-90deg);transform:translate3d(0px,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.zoomed .reveal *,.zoomed .reveal :before,.zoomed .reveal :after{-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;transform:none!important;-webkit-backface-visibility:visible!important;-moz-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .progress,.zoomed .reveal .controls{opacity:0}.zoomed .reveal .roll span{background:0}.zoomed .reveal .roll span:after{visibility:hidden}#leap{position:absolute;z-index:50;visibility:hidden} \ No newline at end of file + */ html,body,.reveal div,.reveal span,.reveal applet,.reveal object,.reveal iframe,.reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal h5,.reveal h6,.reveal p,.reveal blockquote,.reveal pre,.reveal a,.reveal abbr,.reveal acronym,.reveal address,.reveal big,.reveal cite,.reveal code,.reveal del,.reveal dfn,.reveal em,.reveal img,.reveal ins,.reveal kbd,.reveal q,.reveal s,.reveal samp,.reveal small,.reveal strike,.reveal strong,.reveal sub,.reveal sup,.reveal tt,.reveal var,.reveal b,.reveal u,.reveal i,.reveal center,.reveal dl,.reveal dt,.reveal dd,.reveal ol,.reveal ul,.reveal li,.reveal fieldset,.reveal form,.reveal label,.reveal legend,.reveal table,.reveal caption,.reveal tbody,.reveal tfoot,.reveal thead,.reveal tr,.reveal th,.reveal td,.reveal article,.reveal aside,.reveal canvas,.reveal details,.reveal embed,.reveal figure,.reveal figcaption,.reveal footer,.reveal header,.reveal hgroup,.reveal menu,.reveal nav,.reveal output,.reveal ruby,.reveal section,.reveal summary,.reveal time,.reveal mark,.reveal audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}.reveal article,.reveal aside,.reveal details,.reveal figcaption,.reveal figure,.reveal footer,.reveal header,.reveal hgroup,.reveal menu,.reveal nav,.reveal section{display:block}html,body{width:100%;height:100%;overflow:hidden}body{position:relative;line-height:1}::selection{background:#FF5E99;color:#fff;text-shadow:none}.reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal h5,.reveal h6{-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto;word-wrap:break-word;line-height:1}.reveal h1{font-size:3.77em}.reveal h2{font-size:2.11em}.reveal h3{font-size:1.55em}.reveal h4{font-size:1em}.reveal .slides section .fragment{opacity:0;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.reveal .slides section .fragment.visible{opacity:1}.reveal .slides section .fragment.grow{opacity:1}.reveal .slides section .fragment.grow.visible{-webkit-transform:scale(1.3);-moz-transform:scale(1.3);-ms-transform:scale(1.3);-o-transform:scale(1.3);transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1}.reveal .slides section .fragment.shrink.visible{-webkit-transform:scale(0.7);-moz-transform:scale(0.7);-ms-transform:scale(0.7);-o-transform:scale(0.7);transform:scale(0.7)}.reveal .slides section .fragment.zoom-in{opacity:0;-webkit-transform:scale(0.1);-moz-transform:scale(0.1);-ms-transform:scale(0.1);-o-transform:scale(0.1);transform:scale(0.1)}.reveal .slides section .fragment.zoom-in.visible{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.reveal .slides section .fragment.roll-in{opacity:0;-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-ms-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.reveal .slides section .fragment.roll-in.visible{opacity:1;-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-ms-transform:rotateX(0);-o-transform:rotateX(0);transform:rotateX(0)}.reveal .slides section .fragment.fade-out{opacity:1}.reveal .slides section .fragment.fade-out.visible{opacity:0}.reveal .slides section .fragment.semi-fade-out{opacity:1}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5}.reveal .slides section .fragment.highlight-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-blue{opacity:1}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal:after{content:'';font-style:italic}.reveal iframe{z-index:1}.reveal img,.reveal video,.reveal iframe{max-width:95%;max-height:95%}.reveal a{position:relative}.reveal strong,.reveal b{font-weight:700}.reveal em,.reveal i{font-style:italic}.reveal ol,.reveal ul{display:inline-block;text-align:left;margin:0 0 0 1em}.reveal ol{list-style-type:decimal}.reveal ul{list-style-type:disc}.reveal ul ul{list-style-type:square}.reveal ul ul ul{list-style-type:circle}.reveal ul ul,.reveal ul ol,.reveal ol ol,.reveal ol ul{display:block;margin-left:40px}.reveal p{margin-bottom:10px;line-height:1.2em}.reveal q,.reveal blockquote{quotes:none}.reveal blockquote{display:block;position:relative;width:70%;margin:5px auto;padding:5px;font-style:italic;background:rgba(255,255,255,.05);box-shadow:0 0 2px rgba(0,0,0,.2)}.reveal blockquote p:first-child,.reveal blockquote p:last-child{display:inline-block}.reveal q{font-style:italic}.reveal pre{display:block;position:relative;width:90%;margin:15px auto;text-align:left;font-size:.55em;font-family:monospace;line-height:1.2em;word-wrap:break-word;box-shadow:0 0 6px rgba(0,0,0,.3)}.reveal code{font-family:monospace}.reveal pre code{padding:5px;overflow:auto;max-height:400px;word-wrap:normal}.reveal table th,.reveal table td{text-align:left;padding-right:.3em}.reveal table th{text-shadow:#fff 1px 1px 2px}.reveal sup{vertical-align:super}.reveal sub{vertical-align:sub}.reveal small{display:inline-block;font-size:.6em;line-height:1.2em;vertical-align:top}.reveal small *{vertical-align:top}.reveal .controls{display:none;position:fixed;width:110px;height:110px;z-index:30;right:10px;bottom:10px}.reveal .controls div{position:absolute;opacity:.05;width:0;height:0;border:12px solid transparent;-moz-transform:scale(.9999);-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.reveal .controls div.enabled{opacity:.7;cursor:pointer}.reveal .controls div.enabled:active{margin-top:1px}.reveal .controls div.navigate-left{top:42px;border-right-width:22px;border-right-color:#eee}.reveal .controls div.navigate-left.fragmented{opacity:.3}.reveal .controls div.navigate-right{left:74px;top:42px;border-left-width:22px;border-left-color:#eee}.reveal .controls div.navigate-right.fragmented{opacity:.3}.reveal .controls div.navigate-up{left:42px;border-bottom-width:22px;border-bottom-color:#eee}.reveal .controls div.navigate-up.fragmented{opacity:.3}.reveal .controls div.navigate-down{left:42px;top:74px;border-top-width:22px;border-top-color:#eee}.reveal .controls div.navigate-down.fragmented{opacity:.3}.reveal .progress{position:fixed;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10}.reveal .progress:after{content:'';display:'block';position:absolute;height:20px;width:100%;top:-20px}.reveal .progress span{display:block;height:100%;width:0;-webkit-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-o-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);transition:width 800ms cubic-bezier(0.26,.86,.44,.985)}.reveal{position:relative;width:100%;height:100%;-ms-touch-action:none}.reveal .slides{position:absolute;width:100%;height:100%;left:50%;top:50%;overflow:visible;z-index:1;text-align:center;-webkit-transition:-webkit-perspective .4s ease;-moz-transition:-moz-perspective .4s ease;-ms-transition:-ms-perspective .4s ease;-o-transition:-o-perspective .4s ease;transition:perspective .4s ease;-webkit-perspective:600px;-moz-perspective:600px;-ms-perspective:600px;perspective:600px;-webkit-perspective-origin:0 -100px;-moz-perspective-origin:0 -100px;-ms-perspective-origin:0 -100px;perspective-origin:0 -100px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;padding:20px 0;z-index:10;line-height:1.2em;font-weight:400;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:-webkit-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-webkit-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:-moz-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-moz-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:-ms-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-ms-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-o-transition:-o-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-o-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);transition:transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal[data-transition-speed=slow] .slides section{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal .slides section[data-transition-speed=fast]{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal .slides section[data-transition-speed=slow]{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal .slides>section{left:-50%;top:-50%}.reveal .slides>section.stack{padding-top:0;padding-bottom:0}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:auto!important}.reveal .slides>section[data-transition=default].past,.reveal .slides>section.past{display:block;opacity:0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section.future{display:block;opacity:0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section.past{display:block;opacity:0;-webkit-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);-moz-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);-ms-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section.future{display:block;opacity:0;-webkit-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);-moz-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);-ms-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides>section[data-transition=concave].past,.reveal.concave .slides>section.past{-webkit-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal.concave .slides>section.future{-webkit-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal.concave .slides>section>section.past{-webkit-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);-moz-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);-ms-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal.concave .slides>section>section.future{-webkit-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);-moz-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);-ms-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides>section[data-transition=zoom].past,.reveal.zoom .slides>section.past{opacity:0;visibility:hidden;-webkit-transform:scale(16);-moz-transform:scale(16);-ms-transform:scale(16);-o-transform:scale(16);transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal.zoom .slides>section.future{opacity:0;visibility:hidden;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal.zoom .slides>section>section.past{-webkit-transform:translate(0,-150%);-moz-transform:translate(0,-150%);-ms-transform:translate(0,-150%);-o-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=zoom].future,.reveal.zoom .slides>section>section.future{-webkit-transform:translate(0,150%);-moz-transform:translate(0,150%);-ms-transform:translate(0,150%);-o-transform:translate(0,150%);transform:translate(0,150%)}.reveal.linear section{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=linear].past,.reveal.linear .slides>section.past{-webkit-transform:translate(-150%,0);-moz-transform:translate(-150%,0);-ms-transform:translate(-150%,0);-o-transform:translate(-150%,0);transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal.linear .slides>section.future{-webkit-transform:translate(150%,0);-moz-transform:translate(150%,0);-ms-transform:translate(150%,0);-o-transform:translate(150%,0);transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal.linear .slides>section>section.past{-webkit-transform:translate(0,-150%);-moz-transform:translate(0,-150%);-ms-transform:translate(0,-150%);-o-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal.linear .slides>section>section.future{-webkit-transform:translate(0,150%);-moz-transform:translate(0,150%);-ms-transform:translate(0,150%);-o-transform:translate(0,150%);transform:translate(0,150%)}.reveal.cube .slides{-webkit-perspective:1300px;-moz-perspective:1300px;-ms-perspective:1300px;perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.reveal.center.cube .slides section{min-height:auto}.reveal.cube .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;-webkit-transform:translateZ(-20px);-moz-transform:translateZ(-20px);-ms-transform:translateZ(-20px);-o-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg);-moz-transform:translateZ(-90px) rotateX(65deg);-ms-transform:translateZ(-90px) rotateX(65deg);-o-transform:translateZ(-90px) rotateX(65deg);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0}.reveal.cube .slides>section.past{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg);-moz-transform:translate3d(-100%,0,0) rotateY(-90deg);-ms-transform:translate3d(-100%,0,0) rotateY(-90deg);transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg);-moz-transform:translate3d(100%,0,0) rotateY(90deg);-ms-transform:translate3d(100%,0,0) rotateY(90deg);transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,-100%,0) rotateX(90deg);-moz-transform:translate3d(0,-100%,0) rotateX(90deg);-ms-transform:translate3d(0,-100%,0) rotateX(90deg);transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,100%,0) rotateX(-90deg);-moz-transform:translate3d(0,100%,0) rotateX(-90deg);-ms-transform:translate3d(0,100%,0) rotateX(-90deg);transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{-webkit-perspective-origin:0 50%;-moz-perspective-origin:0 50%;-ms-perspective-origin:0 50%;perspective-origin:0 50%;-webkit-perspective:3000px;-moz-perspective:3000px;-ms-perspective:3000px;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);-webkit-transform:translateZ(-20px);-moz-transform:translateZ(-20px);-ms-transform:translateZ(-20px);-o-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0}.reveal.page .slides>section.past{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(-40%,0,0) rotateY(-80deg);-moz-transform:translate3d(-40%,0,0) rotateY(-80deg);-ms-transform:translate3d(-40%,0,0) rotateY(-80deg);transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,-40%,0) rotateX(80deg);-moz-transform:translate3d(0,-40%,0) rotateX(80deg);-ms-transform:translate3d(0,-40%,0) rotateX(80deg);transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section,.reveal.fade .slides>section>section{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-ms-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section,.reveal.fade.exit-overview .slides section,.reveal.fade.exit-overview .slides>section>section{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal.overview .slides{-webkit-perspective-origin:0 0;-moz-perspective-origin:0 0;-ms-perspective-origin:0 0;perspective-origin:0 0;-webkit-perspective:700px;-moz-perspective:700px;-ms-perspective:700px;perspective:700px}.reveal.overview .slides section{height:600px;top:-300px!important;overflow:hidden;opacity:1!important;visibility:visible!important;cursor:pointer;background:rgba(0,0,0,.1)}.reveal.overview .slides section .fragment{opacity:1}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides section>section{opacity:1;cursor:pointer}.reveal.overview .slides section:hover{background:rgba(0,0,0,.3)}.reveal.overview .slides section.present{background:rgba(0,0,0,.3)}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0;overflow:visible}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;-ms-transition:all 1s ease;-o-transition:all 1s ease;transition:all 1s ease}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.no-transforms{overflow-y:auto}.no-transforms .reveal .slides{position:relative;width:80%;height:auto!important;top:0;left:50%;margin:0;text-align:center}.no-transforms .reveal .controls,.no-transforms .reveal .progress{display:none!important}.no-transforms .reveal .slides section{display:block!important;opacity:1!important;position:relative!important;height:auto;min-height:auto;top:0;left:-50%;margin:70px 0;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.no-transforms .reveal .slides section section{left:0}.reveal .no-transition,.reveal .no-transition *{-webkit-transition:none!important;-moz-transition:none!important;-ms-transition:none!important;-o-transition:none!important;transition:none!important}.reveal .state-background{position:absolute;width:100%;height:100%;background:rgba(0,0,0,0);-webkit-transition:background 800ms ease;-moz-transition:background 800ms ease;-ms-transition:background 800ms ease;-o-transition:background 800ms ease;transition:background 800ms ease}.alert .reveal .state-background{background:rgba(200,50,30,.6)}.soothe .reveal .state-background{background:rgba(50,200,90,.4)}.blackout .reveal .state-background{background:rgba(0,0,0,.6)}.whiteout .reveal .state-background{background:rgba(255,255,255,.6)}.cobalt .reveal .state-background{background:rgba(22,152,213,.6)}.mint .reveal .state-background{background:rgba(22,213,75,.6)}.submerge .reveal .state-background{background:rgba(12,25,77,.6)}.lila .reveal .state-background{background:rgba(180,50,140,.6)}.sunset .reveal .state-background{background:rgba(255,122,0,.6)}.reveal>.backgrounds{position:absolute;width:100%;height:100%}.reveal .slide-background{position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;background-color:rgba(0,0,0,0);background-position:50% 50%;background-repeat:no-repeat;background-size:cover;-webkit-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);-o-transition:all 600ms cubic-bezier(0.26,.86,.44,.985);transition:all 600ms cubic-bezier(0.26,.86,.44,.985)}.reveal .slide-background.present{opacity:1;visibility:visible}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal[data-background-transition=none]>.backgrounds .slide-background,.reveal>.backgrounds .slide-background[data-background-transition=none]{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal[data-background-transition=slide]>.backgrounds .slide-background,.reveal>.backgrounds .slide-background[data-background-transition=slide]{opacity:1;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition-duration:800ms;-moz-transition-duration:800ms;-ms-transition-duration:800ms;-o-transition-duration:800ms;transition-duration:800ms}.reveal[data-background-transition=slide]>.backgrounds .slide-background.past,.reveal>.backgrounds .slide-background.past[data-background-transition=slide]{-webkit-transform:translate(-100%,0);-moz-transform:translate(-100%,0);-ms-transform:translate(-100%,0);-o-transform:translate(-100%,0);transform:translate(-100%,0)}.reveal[data-background-transition=slide]>.backgrounds .slide-background.future,.reveal>.backgrounds .slide-background.future[data-background-transition=slide]{-webkit-transform:translate(100%,0);-moz-transform:translate(100%,0);-ms-transform:translate(100%,0);-o-transform:translate(100%,0);transform:translate(100%,0)}.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past,.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide]{-webkit-transform:translate(0,-100%);-moz-transform:translate(0,-100%);-ms-transform:translate(0,-100%);-o-transform:translate(0,-100%);transform:translate(0,-100%)}.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future,.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide]{-webkit-transform:translate(0,100%);-moz-transform:translate(0,100%);-ms-transform:translate(0,100%);-o-transform:translate(0,100%);transform:translate(0,100%)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl pre,.reveal.rtl code{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{float:right}.reveal .preview-link-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);opacity:0;visibility:hidden;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease}.reveal .preview-link-overlay.visible{opacity:1;visibility:visible}.reveal .preview-link-overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease}.reveal .preview-link-overlay header{position:absolute;left:0;top:0;width:100%;height:40px;z-index:2;border-bottom:1px solid #222}.reveal .preview-link-overlay header a{display:inline-block;width:40px;height:40px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal .preview-link-overlay header a:hover{opacity:1}.reveal .preview-link-overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal .preview-link-overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal .preview-link-overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal .preview-link-overlay .viewport{position:absolute;top:40px;right:0;bottom:0;left:0}.reveal .preview-link-overlay .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease}.reveal .preview-link-overlay.loaded .viewport iframe{opacity:1;visibility:visible}.reveal .preview-link-overlay.loaded .spinner{opacity:0;visibility:hidden;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);transform:scale(0.2)}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;-webkit-perspective:400px;-moz-perspective:400px;-ms-perspective:400px;perspective:400px;-webkit-perspective-origin:50% 50%;-moz-perspective-origin:50% 50%;-ms-perspective-origin:50% 50%;perspective-origin:50% 50%}.reveal .roll:hover{background:0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;-ms-transition:all 400ms ease;transition:all 400ms ease;-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);-webkit-transform:translate3d(0px,0,-45px) rotateX(90deg);-moz-transform:translate3d(0px,0,-45px) rotateX(90deg);-ms-transform:translate3d(0px,0,-45px) rotateX(90deg);transform:translate3d(0px,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:translate3d(0px,110%,0) rotateX(-90deg);-moz-transform:translate3d(0px,110%,0) rotateX(-90deg);-ms-transform:translate3d(0px,110%,0) rotateX(-90deg);transform:translate3d(0px,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.zoomed .reveal *,.zoomed .reveal :before,.zoomed .reveal :after{-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;transform:none!important;-webkit-backface-visibility:visible!important;-moz-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .progress,.zoomed .reveal .controls{opacity:0}.zoomed .reveal .roll span{background:0}.zoomed .reveal .roll span:after{visibility:hidden} \ No newline at end of file diff --git a/plugin/leap/leap.js b/plugin/leap/leap.js index 8ba0063..9d5271a 100644 --- a/plugin/leap/leap.js +++ b/plugin/leap/leap.js @@ -48,6 +48,9 @@ var b=right.criteria;if(a!==b){if(a>b||a===void 0)return 1;if(a + + + + + + reveal.js - The HTML Presentation Framework + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

Reveal.js Math Plugin

+
+ +
+ \[\begin{aligned} + \dot{x} & = \sigma(y-x) \\ + \dot{y} & = \rho x - y - xz \\ + \dot{z} & = -\beta z + xy + \end{aligned} \] +
+ +
+ +
+ + + + + + + + diff --git a/plugin/math/math.js b/plugin/math/math.js new file mode 100755 index 0000000..3efe321 --- /dev/null +++ b/plugin/math/math.js @@ -0,0 +1,37 @@ +/** + * A plugin which enables rendering of math equations inside + * of reveal.js slides. Essentially a thin wrapper for MathJax. + * + * @author Hakim El Hattab + */ +(function(){ + + var head = document.querySelector( 'head' ); + var script = document.createElement( 'script' ); + script.type = 'text/javascript'; + script.src = 'http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_SVG-full'; + + // Detect when the script has loaded + script.onload = onScriptLoad; + script.onreadystatechange = function() { + if ( this.readyState === 'loaded' ) { + onScriptLoad.call(); + } + } + + head.appendChild( script ); + + function onScriptLoad() { + + MathJax.Hub.Config({ + messageStyle: 'none', + tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] } + }); + + Reveal.addEventListener( 'slidechanged', function( event ) { + MathJax.Hub.Rerender(); + } ); + + } + +})(); -- cgit v1.2.3 From 9984cb1f2189b489afd7b05077c319fd123365af Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Mon, 12 Aug 2013 09:27:23 -0400 Subject: limit scope of mathjax rerender #531 --- plugin/math/math.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugin') diff --git a/plugin/math/math.js b/plugin/math/math.js index 3efe321..30dd38c 100755 --- a/plugin/math/math.js +++ b/plugin/math/math.js @@ -29,7 +29,7 @@ }); Reveal.addEventListener( 'slidechanged', function( event ) { - MathJax.Hub.Rerender(); + MathJax.Hub.Update( event.currentSlide ); } ); } -- cgit v1.2.3 From 69f7c0c69338a966841b3ecd4bd97df00bf28dbb Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Mon, 12 Aug 2013 22:42:14 -0400 Subject: updates to mathjax plugin, incl more examples #531 --- examples/math.html | 38 ++++++++++++++++++++++++++++++++------ plugin/math/math.js | 13 ++++++++++++- 2 files changed, 44 insertions(+), 7 deletions(-) (limited to 'plugin') diff --git a/examples/math.html b/examples/math.html index 49d4952..67fa546 100644 --- a/examples/math.html +++ b/examples/math.html @@ -15,7 +15,7 @@ - + @@ -32,11 +32,12 @@
-

Reveal.js Math Plugin

+

reveal.js Math Plugin

+

A thin wrapper for MathJax

-

The Lorenz Equations

+

The Lorenz Equations

\[\begin{aligned} \dot{x} & = \sigma(y-x) \\ \dot{y} & = \rho x - y - xz \\ @@ -45,13 +46,13 @@
-

The Cauchy-Schwarz Inequality

+

The Cauchy-Schwarz Inequality

\[ \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \]
-

A Cross Product Formula

+

A Cross Product Formula

\[\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ @@ -61,13 +62,36 @@
-

An Identity of Ramanujan

+

The probability of getting \(k\) heads when flipping \(n\) coins is

+ + \[P(E) = {n \choose k} p^k (1-p)^{ n-k} \] +
+ +
+

An Identity of Ramanujan

\[ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\ldots} } } } \]
+
+

A Rogers-Ramanujan Identity

+ + \[ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = + \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}\] +
+ +
+

Maxwell’s Equations

+ + \[ \begin{aligned} + \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\ + \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\ + \nabla \cdot \vec{\mathbf{B}} & = 0 \end{aligned} + \] +
+
@@ -78,6 +102,8 @@
@@ -185,10 +187,7 @@ }, dependencies: [ - { src: '../lib/js/classList.js', condition: function() { return !document.body.classList; } }, - { src: '../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, - { src: '../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, - { src: '../plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, + { src: '../lib/js/classList.js' }, { src: '../plugin/math/math.js', async: true } ] }); diff --git a/plugin/math/math.js b/plugin/math/math.js index 78856a5..d021fdc 100755 --- a/plugin/math/math.js +++ b/plugin/math/math.js @@ -6,37 +6,28 @@ */ var RevealMath = window.RevealMath || (function(){ - var loaded = false; - var config = Reveal.getConfig().math || {}; config.host = config.host || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js'; config.mode = config.mode || 'TeX-AMS_HTML-full'; loadScript( config.host + '?config=' + config.mode, function() { - // Conditioned just in case both onload and readystate fire - if( loaded === false ) { - loaded = true; - - MathJax.Hub.Config({ - messageStyle: 'none', - tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] } - }); + MathJax.Hub.Config({ + messageStyle: 'none', + tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] } + }); - // Process any math inside of the current slide when navigating, - // this is needed since it's not possible to typeset equations - // within invisible elements (far future or past). - Reveal.addEventListener( 'slidechanged', function( event ) { + // Process any math inside of the current slide when navigating, + // this is needed since it's not possible to typeset equations + // within invisible elements (far future or past). + Reveal.addEventListener( 'slidechanged', function( event ) { - // This will only typeset equations that have not yet been - // processed, as well as equations that have change since - // last being processed. - MathJax.Hub.Update( event.currentSlide, function() { - Reveal.layout(); - } ); + // This will only typeset equations that have not yet been + // processed, as well as equations that have change since + // last being processed. + MathJax.Hub.Update( event.currentSlide ); - } ); - } + } ); } ); -- cgit v1.2.3 From b17e285164bb17b920e8759ccb2891e147a0397e Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Tue, 13 Aug 2013 08:53:31 -0400 Subject: mathjax plugin updates #531 --- examples/math.html | 4 ++-- plugin/math/math.js | 23 ++++++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) (limited to 'plugin') diff --git a/examples/math.html b/examples/math.html index 7d3eba2..867c45e 100644 --- a/examples/math.html +++ b/examples/math.html @@ -182,8 +182,8 @@ transition: 'linear', math: { - // host: 'http://cdn.mathjax.org/mathjax/latest/MathJax.js', - mode: 'TeX-AMS_HTML-full' + // mathjax: 'http://cdn.mathjax.org/mathjax/latest/MathJax.js', + dialect: 'TeX-AMS_HTML-full' }, dependencies: [ diff --git a/plugin/math/math.js b/plugin/math/math.js index d021fdc..104d0e5 100755 --- a/plugin/math/math.js +++ b/plugin/math/math.js @@ -7,25 +7,26 @@ var RevealMath = window.RevealMath || (function(){ var config = Reveal.getConfig().math || {}; - config.host = config.host || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js'; - config.mode = config.mode || 'TeX-AMS_HTML-full'; + config.mathjax = config.mathjax || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js'; + config.dialect = config.dialect || 'TeX-AMS_HTML-full'; - loadScript( config.host + '?config=' + config.mode, function() { + loadScript( config.mathjax + '?config=' + config.dialect, function() { MathJax.Hub.Config({ messageStyle: 'none', - tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] } + tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] }, + skipStartupTypeset: true }); - // Process any math inside of the current slide when navigating, - // this is needed since it's not possible to typeset equations - // within invisible elements (far future or past). + // Typeset followed by an immediate reveal.js layout since + // the typesetting process could affect slide height + MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] ); + MathJax.Hub.Queue( Reveal.layout ); + + // Reprocess equations in slides when they turn visible Reveal.addEventListener( 'slidechanged', function( event ) { - // This will only typeset equations that have not yet been - // processed, as well as equations that have change since - // last being processed. - MathJax.Hub.Update( event.currentSlide ); + MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] ); } ); -- cgit v1.2.3 From 2bed5833ca87d7f127513acabee05971277e0f94 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Fri, 16 Aug 2013 09:30:22 -0400 Subject: remove pointless .call() --- plugin/math/math.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugin') diff --git a/plugin/math/math.js b/plugin/math/math.js index 104d0e5..4e3402e 100755 --- a/plugin/math/math.js +++ b/plugin/math/math.js @@ -52,7 +52,7 @@ var RevealMath = window.RevealMath || (function(){ // IE script.onreadystatechange = function() { if ( this.readyState === 'loaded' ) { - finish.call(); + finish(); } } -- cgit v1.2.3 From c9853233ae51e84f589797991dbd69dfac103471 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Sun, 18 Aug 2013 14:13:55 -0400 Subject: rename math plugin config option --- examples/math.html | 2 +- plugin/math/math.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'plugin') diff --git a/examples/math.html b/examples/math.html index 867c45e..b0f0763 100644 --- a/examples/math.html +++ b/examples/math.html @@ -183,7 +183,7 @@ math: { // mathjax: 'http://cdn.mathjax.org/mathjax/latest/MathJax.js', - dialect: 'TeX-AMS_HTML-full' + config: 'TeX-AMS_HTML-full' }, dependencies: [ diff --git a/plugin/math/math.js b/plugin/math/math.js index 4e3402e..d55d9d1 100755 --- a/plugin/math/math.js +++ b/plugin/math/math.js @@ -6,11 +6,11 @@ */ var RevealMath = window.RevealMath || (function(){ - var config = Reveal.getConfig().math || {}; - config.mathjax = config.mathjax || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js'; - config.dialect = config.dialect || 'TeX-AMS_HTML-full'; + var options = Reveal.getConfig().math || {}; + options.mathjax = options.mathjax || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js'; + options.config = options.config || 'TeX-AMS_HTML-full'; - loadScript( config.mathjax + '?config=' + config.dialect, function() { + loadScript( options.mathjax + '?config=' + options.config, function() { MathJax.Hub.Config({ messageStyle: 'none', -- cgit v1.2.3 From b968dfef1534afb26c42d652234f32aafaeb65ff Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Fri, 23 Aug 2013 17:49:19 -0400 Subject: update markdown plugin formatting to match reveal.js core --- plugin/markdown/markdown.js | 373 +++++++++++++++++++++++--------------------- 1 file changed, 192 insertions(+), 181 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index bc771e7..68b534b 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -2,219 +2,230 @@ // Modified by Hakim to handle Markdown indented with tabs (function(){ - if( typeof marked === 'undefined' ) { - throw 'The reveal.js Markdown plugin requires marked to be loaded'; - } - - if (typeof hljs !== 'undefined') { - marked.setOptions({ - highlight: function (lang, code) { - return hljs.highlightAuto(lang, code).value; - } - }); - } - - var stripLeadingWhitespace = function(section) { - - var template = section.querySelector( 'script' ); - - // strip leading whitespace so it isn't evaluated as code - var text = ( template || section ).textContent; - - var leadingWs = text.match(/^\n?(\s*)/)[1].length, - leadingTabs = text.match(/^\n?(\t*)/)[1].length; - - if( leadingTabs > 0 ) { - text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); - } - else if( leadingWs > 1 ) { - text = text.replace( new RegExp('\\n? {' + leadingWs + '}','g'), '\n' ); - } - - return text; - - }; - - var twrap = function(el) { - var content = el.content || el; - content += el.asideContent ? ('') : ''; - return ''; - }; - - var getForwardedAttributes = function(section) { - var attributes = section.attributes; - var result = []; - - for( var i = 0, len = attributes.length; i < len; i++ ) { - var name = attributes[i].name, - value = attributes[i].value; - - // disregard attributes that are used for markdown loading/parsing - if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue; - - if( value ) { - result.push( name + '=' + value ); - } - else { - result.push( name ); - } - } - - return result.join( ' ' ); - }; - - var slidifyMarkdown = function(markdown, separator, vertical, notes, attributes) { - - separator = separator || '^\n---\n$'; - notes = notes || 'note:'; - - var separatorRegex = new RegExp( separator + ( vertical ? '|' + vertical : '' ), 'mg' ), - horizontalSeparatorRegex = new RegExp( separator ), - notesSeparatorRegex = new RegExp( notes, 'mgi' ), - matches, - noteMatch, - lastIndex = 0, - isHorizontal, - wasHorizontal = true, - content, - asideContent, - slide, - sectionStack = [], - markdownSections = ''; - - // iterate until all blocks between separators are stacked up - while( matches = separatorRegex.exec( markdown ) ) { - asideContent = null; - - // determine direction (horizontal by default) - isHorizontal = horizontalSeparatorRegex.test( matches[0] ); - - if( !isHorizontal && wasHorizontal ) { - // create vertical stack - sectionStack.push( [] ); - } - - // pluck slide content from markdown input - content = markdown.substring( lastIndex, matches.index ); - noteMatch = content.split( notesSeparatorRegex ); - - if( noteMatch.length === 2 ) { - content = noteMatch[0]; - asideContent = noteMatch[1].trim(); - } + if( typeof marked === 'undefined' ) { + throw 'The reveal.js Markdown plugin requires marked to be loaded'; + } - slide = { - content: content, - asideContent: asideContent || "" - }; + if( typeof hljs !== 'undefined' ) { + marked.setOptions({ + highlight: function( lang, code ) { + return hljs.highlightAuto( lang, code ).value; + } + }); + } - if( isHorizontal && wasHorizontal ) { - // add to horizontal stack - sectionStack.push(slide); - } else { - // add to vertical stack - sectionStack[sectionStack.length-1].push(slide); - } + var stripLeadingWhitespace = function( section ) { - lastIndex = separatorRegex.lastIndex; - wasHorizontal = isHorizontal; - } + var template = section.querySelector( 'script' ); - // add the remaining slide - (wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1]).push(markdown.substring(lastIndex)); + // strip leading whitespace so it isn't evaluated as code + var text = ( template || section ).textContent; - // flatten the hierarchical stack, and insert
tags - for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { - // vertical - if( sectionStack[k].propertyIsEnumerable(length) && typeof sectionStack[k].splice === 'function' ) { - markdownSections += '
' + - '
' + sectionStack[k].map(twrap).join('
') + '
' + - '
'; - } else { - markdownSections += '
' + twrap( sectionStack[k] ) + '
'; - } - } + var leadingWs = text.match( /^\n?(\s*)/ )[1].length, + leadingTabs = text.match( /^\n?(\t*)/ )[1].length; - return markdownSections; - }; + if( leadingTabs > 0 ) { + text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); + } + else if( leadingWs > 1 ) { + text = text.replace( new RegExp('\\n? {' + leadingWs + '}','g'), '\n' ); + } - var querySlidingMarkdown = function() { + return text; - var sections = document.querySelectorAll( '[data-markdown]'), - section; + }; - for( var j = 0, jlen = sections.length; j < jlen; j++ ) { + var twrap = function( el ) { - section = sections[j]; + var content = el.content || el; + + if( el.asideContent ) { + content += ''; + } + + return ''; + + }; + + var getForwardedAttributes = function( section ) { - if( section.getAttribute('data-markdown').length ) { + var attributes = section.attributes; + var result = []; - var xhr = new XMLHttpRequest(), - url = section.getAttribute('data-markdown'); + for( var i = 0, len = attributes.length; i < len; i++ ) { + var name = attributes[i].name, + value = attributes[i].value; - datacharset = section.getAttribute('data-charset'); - // see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes - if (datacharset != null && datacharset != '') { - xhr.overrideMimeType('text/html; charset=' + datacharset); - } + // disregard attributes that are used for markdown loading/parsing + if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue; - xhr.onreadystatechange = function () { - if( xhr.readyState === 4 ) { - if (xhr.status >= 200 && xhr.status < 300) { - section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), section.getAttribute('data-notes'), getForwardedAttributes(section) ); - } else { - section.outerHTML = '
ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status + - '. Check your browser\'s JavaScript console for more details.' + - '

Remember that you need to serve the presentation HTML from a HTTP server and the Markdown file must be there too.

'; - } - } - }; + if( value ) { + result.push( name + '=' + value ); + } + else { + result.push( name ); + } + } - xhr.open('GET', url, false); - try { - xhr.send(); - } catch (e) { - alert('Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e); - } + return result.join( ' ' ); - } else if( section.getAttribute('data-separator') ) { + }; - var markdown = stripLeadingWhitespace(section); - section.outerHTML = slidifyMarkdown( markdown, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), section.getAttribute('data-notes'), getForwardedAttributes(section) ); + var slidifyMarkdown = function( markdown, separator, vertical, notes, attributes ) { - } - } + separator = separator || '^\n---\n$'; + notes = notes || 'note:'; - }; + var separatorRegex = new RegExp( separator + ( vertical ? '|' + vertical : '' ), 'mg' ), + horizontalSeparatorRegex = new RegExp( separator ), + notesSeparatorRegex = new RegExp( notes, 'mgi' ), + matches, + noteMatch, + lastIndex = 0, + isHorizontal, + wasHorizontal = true, + content, + asideContent, + slide, + sectionStack = [], + markdownSections = ''; + + // iterate until all blocks between separators are stacked up + while( matches = separatorRegex.exec( markdown ) ) { + asideContent = null; - var queryMarkdownSlides = function() { + // determine direction (horizontal by default) + isHorizontal = horizontalSeparatorRegex.test( matches[0] ); - var sections = document.querySelectorAll( '[data-markdown]'); + if( !isHorizontal && wasHorizontal ) { + // create vertical stack + sectionStack.push( [] ); + } - for( var j = 0, jlen = sections.length; j < jlen; j++ ) { + // pluck slide content from markdown input + content = markdown.substring( lastIndex, matches.index ); + noteMatch = content.split( notesSeparatorRegex ); - makeHtml(sections[j]); + if( noteMatch.length === 2 ) { + content = noteMatch[0]; + asideContent = noteMatch[1].trim(); + } - } + slide = { + content: content, + asideContent: asideContent || '' + }; - }; + if( isHorizontal && wasHorizontal ) { + // add to horizontal stack + sectionStack.push(slide); + } else { + // add to vertical stack + sectionStack[sectionStack.length-1].push(slide); + } - var makeHtml = function(section) { + lastIndex = separatorRegex.lastIndex; + wasHorizontal = isHorizontal; + } - var notes = section.querySelector( 'aside.notes' ); + // add the remaining slide + (wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1]).push(markdown.substring(lastIndex)); - var markdown = stripLeadingWhitespace(section); + // flatten the hierarchical stack, and insert
tags + for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { + // vertical + if( sectionStack[k].propertyIsEnumerable( length ) && typeof sectionStack[k].splice === 'function' ) { + markdownSections += '
' + + '
' + sectionStack[k].map( twrap ).join( '
' ) + '
' + + '
'; + } else { + markdownSections += '
' + twrap( sectionStack[k] ) + '
'; + } + } - section.innerHTML = marked(markdown); + return markdownSections; + }; - if( notes ) { - section.appendChild( notes ); - } + var queryExternalMarkdown = function() { - }; + var sections = document.querySelectorAll( '[data-markdown]'), + section; - querySlidingMarkdown(); + for( var j = 0, jlen = sections.length; j < jlen; j++ ) { - queryMarkdownSlides(); + section = sections[j]; + + if( section.getAttribute( 'data-markdown' ).length ) { + + var xhr = new XMLHttpRequest(), + url = section.getAttribute( 'data-markdown' ); + + datacharset = section.getAttribute( 'data-charset' ); + + // see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes + if( datacharset != null && datacharset != '' ) { + xhr.overrideMimeType( 'text/html; charset=' + datacharset ); + } + + xhr.onreadystatechange = function() { + if( xhr.readyState === 4 ) { + if ( xhr.status >= 200 && xhr.status < 300 ) { + section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute( 'data-separator' ), section.getAttribute( 'data-vertical' ), section.getAttribute( 'data-notes' ), getForwardedAttributes( section ) ); + } + else { + section.outerHTML = '
ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status + + '. Check your browser\'s JavaScript console for more details.' + + '

Remember that you need to serve the presentation HTML from a HTTP server and the Markdown file must be there too.

'; + } + } + }; + + xhr.open( 'GET', url, false ); + + try { + xhr.send(); + } + catch ( e ) { + alert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e ); + } + + } else if( section.getAttribute( 'data-separator' ) ) { + + var markdown = stripLeadingWhitespace( section ); + section.outerHTML = slidifyMarkdown( markdown, section.getAttribute( 'data-separator' ), section.getAttribute( 'data-vertical' ), section.getAttribute( 'data-notes' ), getForwardedAttributes( section ) ); + + } + } + + }; + + var queryMarkdownSlides = function() { + + var sections = document.querySelectorAll( '[data-markdown]'); + + for( var j = 0, jlen = sections.length; j < jlen; j++ ) { + + makeHtml( sections[j] ); + + } + + }; + + var makeHtml = function( section ) { + + var notes = section.querySelector( 'aside.notes' ); + + var markdown = stripLeadingWhitespace( section ); + + section.innerHTML = marked( markdown ); + + if( notes ) { + section.appendChild( notes ); + } + + }; + + queryExternalMarkdown(); + queryMarkdownSlides(); })(); -- cgit v1.2.3 From 4350c0024fed73032c9eb77e3f8af277d30047de Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Fri, 23 Aug 2013 17:51:20 -0400 Subject: standardize way of declaring functions --- plugin/markdown/markdown.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index 68b534b..e3fe0f8 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -14,7 +14,7 @@ }); } - var stripLeadingWhitespace = function( section ) { + function stripLeadingWhitespace( section ) { var template = section.querySelector( 'script' ); @@ -35,7 +35,7 @@ }; - var twrap = function( el ) { + function twrap( el ) { var content = el.content || el; @@ -47,7 +47,7 @@ }; - var getForwardedAttributes = function( section ) { + function getForwardedAttributes( section ) { var attributes = section.attributes; var result = []; @@ -71,7 +71,7 @@ }; - var slidifyMarkdown = function( markdown, separator, vertical, notes, attributes ) { + function slidifyMarkdown( markdown, separator, vertical, notes, attributes ) { separator = separator || '^\n---\n$'; notes = notes || 'note:'; @@ -146,7 +146,7 @@ return markdownSections; }; - var queryExternalMarkdown = function() { + function queryExternalMarkdown() { var sections = document.querySelectorAll( '[data-markdown]'), section; @@ -199,7 +199,7 @@ }; - var queryMarkdownSlides = function() { + function queryMarkdownSlides() { var sections = document.querySelectorAll( '[data-markdown]'); @@ -211,7 +211,7 @@ }; - var makeHtml = function( section ) { + function makeHtml( section ) { var notes = section.querySelector( 'aside.notes' ); -- cgit v1.2.3 From 1c5da37ca633699e82e4f1b94506adb26b32250d Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Sat, 24 Aug 2013 10:03:34 -0400 Subject: more markdown plugin refactoring --- plugin/markdown/markdown.js | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index e3fe0f8..a5852c0 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -1,5 +1,8 @@ -// From https://gist.github.com/1343518 -// Modified by Hakim to handle Markdown indented with tabs +/** + * The reveal.js markdown plugin. Handles parsing of + * markdown inside of presentations as well as loading + * of external markdown documents. + */ (function(){ if( typeof marked === 'undefined' ) { @@ -35,12 +38,12 @@ }; - function twrap( el ) { + function createSlide( data ) { - var content = el.content || el; + var content = data.content || data; - if( el.asideContent ) { - content += ''; + if( data.notes ) { + content += ''; } return ''; @@ -71,28 +74,28 @@ }; - function slidifyMarkdown( markdown, separator, vertical, notes, attributes ) { + function slidifyMarkdown( markdown, separator, verticalSeparator, noteSeparator, attributes ) { separator = separator || '^\n---\n$'; - notes = notes || 'note:'; + noteSeparator = noteSeparator || 'note:'; - var separatorRegex = new RegExp( separator + ( vertical ? '|' + vertical : '' ), 'mg' ), + var separatorRegex = new RegExp( separator + ( verticalSeparator ? '|' + verticalSeparator : '' ), 'mg' ), horizontalSeparatorRegex = new RegExp( separator ), - notesSeparatorRegex = new RegExp( notes, 'mgi' ), + notesSeparatorRegex = new RegExp( noteSeparator, 'mgi' ), matches, noteMatch, lastIndex = 0, isHorizontal, wasHorizontal = true, content, - asideContent, + notes, slide, sectionStack = [], markdownSections = ''; // iterate until all blocks between separators are stacked up while( matches = separatorRegex.exec( markdown ) ) { - asideContent = null; + notes = null; // determine direction (horizontal by default) isHorizontal = horizontalSeparatorRegex.test( matches[0] ); @@ -108,20 +111,20 @@ if( noteMatch.length === 2 ) { content = noteMatch[0]; - asideContent = noteMatch[1].trim(); + notes = noteMatch[1].trim(); } slide = { content: content, - asideContent: asideContent || '' + notes: notes || '' }; if( isHorizontal && wasHorizontal ) { // add to horizontal stack - sectionStack.push(slide); + sectionStack.push( slide ); } else { // add to vertical stack - sectionStack[sectionStack.length-1].push(slide); + sectionStack[sectionStack.length-1].push( slide ); } lastIndex = separatorRegex.lastIndex; @@ -129,17 +132,17 @@ } // add the remaining slide - (wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1]).push(markdown.substring(lastIndex)); + ( wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1] ).push( markdown.substring( lastIndex ) ); // flatten the hierarchical stack, and insert
tags for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { // vertical if( sectionStack[k].propertyIsEnumerable( length ) && typeof sectionStack[k].splice === 'function' ) { markdownSections += '
' + - '
' + sectionStack[k].map( twrap ).join( '
' ) + '
' + + '
' + sectionStack[k].map( createSlide ).join( '
' ) + '
' + '
'; } else { - markdownSections += '
' + twrap( sectionStack[k] ) + '
'; + markdownSections += '
' + createSlide( sectionStack[k] ) + '
'; } } -- cgit v1.2.3 From 7f85c2138603d5c869c3c9a3713bfa0b1e7a08f8 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Sat, 24 Aug 2013 10:39:15 -0400 Subject: markdown refactoring; comments, renamed functions, shorter argument lists --- plugin/markdown/markdown.js | 149 +++++++++++++++++++++++++++----------------- 1 file changed, 93 insertions(+), 56 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index a5852c0..552b32c 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -17,7 +17,11 @@ }); } - function stripLeadingWhitespace( section ) { + /** + * Retrieves the markdown contents of a slide section + * element. Normalizes leading tabs/whitespace. + */ + function getMarkdownFromSlide( section ) { var template = section.querySelector( 'script' ); @@ -36,20 +40,14 @@ return text; - }; - - function createSlide( data ) { - - var content = data.content || data; - - if( data.notes ) { - content += ''; - } - - return ''; - - }; + } + /** + * Given a markdown slide section element, this will + * return all arguments that aren't related to markdown + * parsing. Used to forward any other user-defined arguments + * to the output markdown slide. + */ function getForwardedAttributes( section ) { var attributes = section.attributes; @@ -72,17 +70,39 @@ return result.join( ' ' ); - }; + } + + /** + * Helper function for constructing a markdown slide. + */ + function createMarkdownSlide( data ) { + + var content = data.content || data; + + if( data.notes ) { + content += ''; + } + + return ''; + + } + + /** + * Parses a data string into multiple slides based + * on the passed in separator arguments. + */ + function slidifyMarkdown( markdown, options ) { - function slidifyMarkdown( markdown, separator, verticalSeparator, noteSeparator, attributes ) { + options = options || {}; + options.separator = options.separator || '^\n---\n$'; + options.notesSeparator = options.notesSeparator || 'note:'; + options.attributes = options.attributes || ''; - separator = separator || '^\n---\n$'; - noteSeparator = noteSeparator || 'note:'; + var separatorRegex = new RegExp( options.separator + ( options.verticalSeparator ? '|' + options.verticalSeparator : '' ), 'mg' ), + horizontalSeparatorRegex = new RegExp( options.separator ), + notesSeparatorRegex = new RegExp( options.notesSeparator, 'mgi' ); - var separatorRegex = new RegExp( separator + ( verticalSeparator ? '|' + verticalSeparator : '' ), 'mg' ), - horizontalSeparatorRegex = new RegExp( separator ), - notesSeparatorRegex = new RegExp( noteSeparator, 'mgi' ), - matches, + var matches, noteMatch, lastIndex = 0, isHorizontal, @@ -90,8 +110,7 @@ content, notes, slide, - sectionStack = [], - markdownSections = ''; + sectionStack = []; // iterate until all blocks between separators are stacked up while( matches = separatorRegex.exec( markdown ) ) { @@ -122,7 +141,8 @@ if( isHorizontal && wasHorizontal ) { // add to horizontal stack sectionStack.push( slide ); - } else { + } + else { // add to vertical stack sectionStack[sectionStack.length-1].push( slide ); } @@ -134,22 +154,26 @@ // add the remaining slide ( wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1] ).push( markdown.substring( lastIndex ) ); + var markdownSections = ''; + // flatten the hierarchical stack, and insert
tags for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { // vertical if( sectionStack[k].propertyIsEnumerable( length ) && typeof sectionStack[k].splice === 'function' ) { - markdownSections += '
' + - '
' + sectionStack[k].map( createSlide ).join( '
' ) + '
' + + markdownSections += '
' + + '
' + sectionStack[k].map( createMarkdownSlide ).join( '
' ) + '
' + '
'; - } else { - markdownSections += '
' + createSlide( sectionStack[k] ) + '
'; + } + else { + markdownSections += '
' + createMarkdownSlide( sectionStack[k] ) + '
'; } } return markdownSections; - }; - function queryExternalMarkdown() { + } + + function loadExternalMarkdown() { var sections = document.querySelectorAll( '[data-markdown]'), section; @@ -173,12 +197,23 @@ xhr.onreadystatechange = function() { if( xhr.readyState === 4 ) { if ( xhr.status >= 200 && xhr.status < 300 ) { - section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute( 'data-separator' ), section.getAttribute( 'data-vertical' ), section.getAttribute( 'data-notes' ), getForwardedAttributes( section ) ); + + section.outerHTML = slidifyMarkdown( xhr.responseText, { + separator: section.getAttribute( 'data-separator' ), + verticalSeparator: section.getAttribute( 'data-vertical' ), + notesSeparator: section.getAttribute( 'data-notes' ), + attributes: getForwardedAttributes( section ) + }); + } else { - section.outerHTML = '
ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status + - '. Check your browser\'s JavaScript console for more details.' + - '

Remember that you need to serve the presentation HTML from a HTTP server and the Markdown file must be there too.

'; + + section.outerHTML = '
' + + 'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' + + 'Check your browser\'s JavaScript console for more details.' + + '

Remember that you need to serve the presentation HTML from a HTTP server.

' + + '
'; + } } }; @@ -192,43 +227,45 @@ alert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e ); } - } else if( section.getAttribute( 'data-separator' ) ) { + } + else if( section.getAttribute( 'data-separator' ) ) { - var markdown = stripLeadingWhitespace( section ); - section.outerHTML = slidifyMarkdown( markdown, section.getAttribute( 'data-separator' ), section.getAttribute( 'data-vertical' ), section.getAttribute( 'data-notes' ), getForwardedAttributes( section ) ); + section.outerHTML = slidifyMarkdown( getMarkdownFromSlide( section ), { + separator: section.getAttribute( 'data-separator' ), + verticalSeparator: section.getAttribute( 'data-vertical' ), + notesSeparator: section.getAttribute( 'data-notes' ), + attributes: getForwardedAttributes( section ) + }); } } - }; + } - function queryMarkdownSlides() { + function convertMarkdownToHTML() { var sections = document.querySelectorAll( '[data-markdown]'); - for( var j = 0, jlen = sections.length; j < jlen; j++ ) { + for( var i = 0, len = sections.length; i < len; i++ ) { - makeHtml( sections[j] ); + var section = sections[i]; - } + var notes = section.querySelector( 'aside.notes' ); + var markdown = getMarkdownFromSlide( section ); - }; + section.innerHTML = marked( markdown ); - function makeHtml( section ) { - - var notes = section.querySelector( 'aside.notes' ); - - var markdown = stripLeadingWhitespace( section ); - - section.innerHTML = marked( markdown ); + // If there were notes, we need to re-add them after + // having overwritten the section's HTML + if( notes ) { + section.appendChild( notes ); + } - if( notes ) { - section.appendChild( notes ); } - }; + } - queryExternalMarkdown(); - queryMarkdownSlides(); + loadExternalMarkdown(); + convertMarkdownToHTML(); })(); -- cgit v1.2.3 From 7e629936e576ea3205d391070d10bbc26ed8e120 Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Sat, 24 Aug 2013 11:06:52 -0400 Subject: always use 'i' as iterator --- plugin/markdown/markdown.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'plugin') diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js index 552b32c..31d22f1 100755 --- a/plugin/markdown/markdown.js +++ b/plugin/markdown/markdown.js @@ -157,15 +157,15 @@ var markdownSections = ''; // flatten the hierarchical stack, and insert
tags - for( var k = 0, klen = sectionStack.length; k < klen; k++ ) { + for( var i = 0, len = sectionStack.length; i < len; i++ ) { // vertical - if( sectionStack[k].propertyIsEnumerable( length ) && typeof sectionStack[k].splice === 'function' ) { + if( sectionStack[i].propertyIsEnumerable( length ) && typeof sectionStack[i].splice === 'function' ) { markdownSections += '
' + - '
' + sectionStack[k].map( createMarkdownSlide ).join( '
' ) + '
' + + '
' + sectionStack[i].map( createMarkdownSlide ).join( '
' ) + '
' + '
'; } else { - markdownSections += '
' + createMarkdownSlide( sectionStack[k] ) + '
'; + markdownSections += '
' + createMarkdownSlide( sectionStack[i] ) + '
'; } } @@ -178,9 +178,9 @@ var sections = document.querySelectorAll( '[data-markdown]'), section; - for( var j = 0, jlen = sections.length; j < jlen; j++ ) { + for( var i = 0, len = sections.length; i < len; i++ ) { - section = sections[j]; + section = sections[i]; if( section.getAttribute( 'data-markdown' ).length ) { -- cgit v1.2.3