| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
							- /*
 
-   global RevealMarkdown, RevealHighlight, RevealSearch, RevealNotes, RevealMath, RevealZoom, Reveal, mermaid, RevealMenu
 
- */
 
- import * as params from '@params';
 
- import {fixMermaid} from './wowchemy-utils';
 
- // Enable core slide features.
 
- var enabledPlugins = [RevealMarkdown, RevealHighlight, RevealSearch, RevealNotes, RevealMath, RevealZoom];
 
- const isObject = function (o) {
 
-   return o === Object(o) && !isArray(o) && typeof o !== 'function';
 
- };
 
- const isArray = function (a) {
 
-   return Array.isArray(a);
 
- };
 
- const toCamelCase = function (s) {
 
-   return s.replace(/([-_][a-z])/gi, function (term) {
 
-     return term.toUpperCase().replace('-', '').replace('_', '');
 
-   });
 
- };
 
- const keysToCamelCase = function (o) {
 
-   if (isObject(o)) {
 
-     const n = {};
 
-     Object.keys(o).forEach(function (k) {
 
-       n[toCamelCase(k)] = keysToCamelCase(o[k]);
 
-     });
 
-     return n;
 
-   } else if (isArray(o)) {
 
-     return o.map(function (i) {
 
-       return keysToCamelCase(i);
 
-     });
 
-   }
 
-   return o;
 
- };
 
- // reveal configurations can be included in front matter under slides.reveal
 
- var pluginOptions = {};
 
- if (typeof params.slides.reveal_options !== 'undefined') {
 
-   pluginOptions = params.slides.reveal_options;
 
- }
 
- pluginOptions = keysToCamelCase(pluginOptions);
 
- //enable menu by default if not set
 
- if (typeof pluginOptions.menu_enabled === 'undefined') {
 
-   pluginOptions.menu_enabled = true;
 
- }
 
- // configure menu if enabled
 
- if (pluginOptions.menu_enabled) {
 
-   enabledPlugins.push(RevealMenu);
 
- }
 
- pluginOptions['plugins'] = enabledPlugins;
 
- Reveal.initialize(pluginOptions);
 
- // The following functions are used to render Mermaid diagrams
 
- // after Reveal slides have been successfully loaded
 
- // since content of slides is lazy loaded, if diagrams are
 
- // rendered at start of presentation their sizes will be off
 
- // get all slides that are:
 
- // 1- data loaded
 
- // 2- display set to block
 
- // 3- has a mermaid element that is not processed (data-processed dne)
 
- function mermaidSlidesReadyToRender(mslide) {
 
-   var diag = mslide.querySelector('.mermaid');
 
-   if (diag) {
 
-     var background = mslide.slideBackgroundElement;
 
-     // render if we are 1 slide away horizontally
 
-     // current visible slide index
 
-     var currentHorizontalIndex = Reveal.getState()['indexh'];
 
-     // mermaid slide index
 
-     var diagramSlideIndex = Reveal.getIndices(mslide)['h'];
 
-     if (
 
-       // find slides with non-rendered mermaid tags
 
-       // these will not have the attribute data-processed
 
-       !diag.hasAttribute('data-processed') &&
 
-       // check also that reveal slide is already loaded
 
-       // reveal slides seem to be lazily loaded
 
-       // things could be easier if reveal had a slide-loaded event
 
-       background.hasAttribute('data-loaded') &&
 
-       // loaded slides must also have the display attribute set to block
 
-       background.style.display === 'block' &&
 
-       // render diagrams that are 1 slide away
 
-       diagramSlideIndex - currentHorizontalIndex <= 1
 
-     )
 
-       return mslide;
 
-   }
 
-   return null;
 
- }
 
- function renderMermaidSlides() {
 
-   // find all slides with diagrams that are ready to render
 
-   var diagramSlides = Reveal.getSlides().filter(mermaidSlidesReadyToRender);
 
-   // render the diagram for each slide with ready to render diagrams
 
-   diagramSlides.forEach(function (item) {
 
-     mermaid.init(item.querySelector('.mermaid'));
 
-   });
 
- }
 
- // render mermaid slides for slides that are ready
 
- Reveal.on('slidechanged', function () {
 
-   renderMermaidSlides();
 
- });
 
- // render mermaid slides for slides that are ready on startup
 
- Reveal.on('Ready', function () {
 
-   if (Reveal.isReady()) {
 
-     renderMermaidSlides();
 
-   }
 
- });
 
- // Disable Mermaid by default.
 
- if (typeof params.slides.diagram === 'undefined') {
 
-   params.slides.diagram = false;
 
- }
 
- // Configure Mermaid only if diagrams are enabled.
 
- if (params.slides.diagram) {
 
-   //mermaid options
 
-   // mermaid: front matter configuration can be used to set mermaid options
 
-   // You can also use directives (see mermaid documentation)
 
-   var mermaidOptions = {};
 
-   if (typeof params.slides.diagram_options !== 'undefined') {
 
-     mermaidOptions = params.slides.diagram_options;
 
-   }
 
-   // `startOnLoad` must be false since diagrams are lazily rendered.
 
-   mermaidOptions['startOnLoad'] = false;
 
-   mermaid.initialize(mermaidOptions);
 
-   // Fix Mermaid conflict with Hightlight JS.
 
-   document.addEventListener('DOMContentLoaded', function () {
 
-     fixMermaid(false);
 
-   });
 
- }
 
 
  |