text: require('../css/extra.css');
  require('../css/site.css');
  
  import { md, updateLastChange, finishView } from './extra';
  
  import { preventXSS } from './render';
  
  const body = $(".slides").text();
  
  createtime = lastchangeui.time.attr('data-createtime');
  lastchangetime = lastchangeui.time.attr('data-updatetime');
  updateLastChange();
  const url = window.location.pathname;
  $('.ui-edit').attr('href', `${url}/edit`);
  
  $(document).ready(() => {
      //tooltip
      $('[data-toggle="tooltip"]').tooltip();
  });
  
  function extend() {
      const target = {};
  
      for (const source of arguments) {
          for (const key in source) {
              if (source.hasOwnProperty(key)) {
                  target[key] = source[key];
              }
          }
      }
  
      return target;
  }
  
  // Optional libraries used to extend on reveal.js
  const deps = [{
      src: `${serverurl}/build/reveal.js/lib/js/classList.js`,
      condition() {
          return !document.body.classList;
      }
  }, {
      src: `${serverurl}/js/reveal-markdown.js`,
      callback() {
          const slideOptions = {
              separator: '^(\r\n?|\n)---(\r\n?|\n)$',
              verticalSeparator: '^(\r\n?|\n)----(\r\n?|\n)$'
          };
          const slides = RevealMarkdown.slidify(body, slideOptions);
          $(".slides").html(slides);
          RevealMarkdown.initialize();
          $(".slides").show();
      }
  }, {
      src: `${serverurl}/build/reveal.js/plugin/notes/notes.js`,
      async: true,
      condition() {
          return !!document.body.classList;
      }
  }];
  
  // default options to init reveal.js
  const defaultOptions = {
      controls: true,
      progress: true,
      slideNumber: true,
      history: true,
      center: true,
      transition: 'none',
      dependencies: deps
  };
  
  // options from yaml meta
  const meta = JSON.parse($("#meta").text());
  var options = meta.slideOptions || {};
  
  const view = $('.reveal');
  
  //text language
  if (meta.lang && typeof meta.lang == "string") {
      view.attr('lang', meta.lang);
  } else {
      view.removeAttr('lang');
  }
  //text direction
  if (meta.dir && typeof meta.dir == "string" && meta.dir == "rtl") {
      options.rtl = true;
  } else {
      options.rtl = false;
  }
  //breaks
  if (typeof meta.breaks === 'boolean' && !meta.breaks) {
      md.options.breaks = false;
  } else {
      md.options.breaks = true;
  }
  
  // options from URL query string
  const queryOptions = Reveal.getQueryHash() || {};
  
  var options = extend(defaultOptions, options, queryOptions);
  Reveal.initialize(options);
  
  window.viewAjaxCallback = () => {
      Reveal.layout();
  };
  
  function renderSlide(event) {
      if (window.location.search.match( /print-pdf/gi )) {
          const slides = $('.slides');
          var title = document.title;
          finishView(slides);
          document.title = title;
          Reveal.layout();
      } else {
          const markdown = $(event.currentSlide);
          if (!markdown.attr('data-rendered')) {
              var title = document.title;
              finishView(markdown);
              markdown.attr('data-rendered', 'true');
              document.title = title;
              Reveal.layout();
          }
      }
  }
  
  Reveal.addEventListener('ready', event => {
      renderSlide(event);
      const markdown = $(event.currentSlide);
      // force browser redraw
      setTimeout(() => {
          markdown.hide().show(0);
      }, 0);
  });
  Reveal.addEventListener('slidechanged', renderSlide);
  
  const isMacLike = navigator.platform.match(/(Mac|iPhone|iPod|iPad)/i) ? true : false;
  
  if (!isMacLike) $('.container').addClass('hidescrollbar');
  