| 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.revealvar pluginOptions = {};if (typeof params.slides.reveal_options !== 'undefined') {  pluginOptions = params.slides.reveal_options;}pluginOptions = keysToCamelCase(pluginOptions);//enable menu by default if not setif (typeof pluginOptions.menu_enabled === 'undefined') {  pluginOptions.menu_enabled = true;}// configure menu if enabledif (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 readyReveal.on('slidechanged', function () {  renderMermaidSlides();});// render mermaid slides for slides that are ready on startupReveal.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();  });}
 |