{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-constraints/src/components/widgets/lively-presentation.js"],"names":["Morph","pt","LivelyPresentation","initialize","registerButtons","lively","html","registerKeys","addChooseList","get","slides","map","ea","index","h","querySelector","item","toString","textContent","style","target","evt","setSlide","onLeftDown","prevSlide","preventDefault","stopPropagation","onRightDown","nextSlide","onPrintButton","print","onPrevButton","onNextButton","onGotoButton","onFullscreenButton","toggleFullscreen","container","query","presentation","slide","fullscreen","parents","allParents","document","body","querySelectorAll","forEach","includes","display","documentElement","webkitRequestFullScreen","Element","ALLOW_KEYBOARD_INPUT","sleep","isFullscreen","onFullscreen","slideBounds","getBoundingClientRect","scaleX","window","innerWidth","width","scaleY","innerHeight","height","minScale","Math","min","setPosition","transformOrigin","transform","scaledBounds","backgroundColor","webkitCancelFullScreen","parentElement","focus","newSlide","createElement","classList","add","appendChild","convertSiblings","content","Array","from","childNodes","tagName","contains","remove","loaded","gotoSlideAt","n","length","currentSlideNumber","indexOf","updateContainerURLForSlideNumber","nextSlideNumber","baseURL","getURL","replace","nextURL","setPathAttributeAndInput","history","push","start","all","update","updatePageNumber","showAllSlides","i","pageNumber","oldBody","bodyCSS","cssText","printId","originals","Map","id","set","setAttribute","innerHTML","getAttribute","original","replacement","attachShadow","mode","shadowRoot","replaceChild","config","ctx","logo","img","src","pageNumbers","div"],"mappings":"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","file":"lively-presentation.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport {pt}  from 'src/client/graphics.js'\n\nexport default class LivelyPresentation extends Morph {\n  \n  async initialize() {\n    this.registerButtons();\n    lively.html.registerKeys(this);\n    \n    lively.html.addChooseList(this.get(\"#gotoButton\"), () => {\n      return this.slides().map((ea, index) => {\n        var h = ea.querySelector(\"h1,h2,h3,h4\") \n        var item = {\n          toString: () => \"Slide \" + index + \": \" + (h ? h.textContent : \"\"),\n          style: \"color: black\",\n          target: ea,\n        }\n        return item\n      })\n    }, (evt, item) => {\n      this.setSlide(item.target)\n    })\n  }\n\n  onLeftDown(evt) {\n    this.prevSlide()     \n    evt.preventDefault() \n    evt.stopPropagation() \n  }\n  \n  onRightDown(evt) {\n    this.nextSlide()\n    evt.preventDefault() \n    evt.stopPropagation() \n  }\n  \n  onPrintButton() {\n    this.print()\n  }\n  \n  onPrevButton() {\n    this.prevSlide() \n  }\n  \n  onNextButton() {\n    this.nextSlide() \n  }\n\n  \n  onGotoButton() {\n//    lively.notify(\"goto\")\n  }\n  \n  onFullscreenButton() {\n    this.toggleFullscreen()\n  }\n\n  async toggleFullscreen() {\n    var container = lively.query(this, \"lively-container\")\n    var presentation = this;\n    var slide = this.slide\n    presentation.fullscreen = !presentation.fullscreen\n    if (presentation.fullscreen) {    \n      \n      \n      var parents = lively.allParents(this, [], true)\n      // hide all windows\n      document.body.querySelectorAll(\"lively-window\").forEach(ea => {\n        if (!parents.includes(ea))  {\n          ea.style.display = \"none\"\n        }\n      })\n      \n      document.documentElement.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)\n      await lively.sleep(100) // wait for fullscreen\n\n      if (container && !container.isFullscreen()) {\n        // container.hideNavbar()\n        container.onFullscreen()\n      }\n      var slideBounds = slide.getBoundingClientRect()\n      \n      var scaleX = (window.innerWidth - 10)/ slideBounds.width\n      var scaleY = (window.innerHeight - 10)/ slideBounds.height\n      var minScale = Math.min(scaleY, scaleX)\n      lively.setPosition( presentation, pt(0,0))\n      presentation.style.transformOrigin = \"0px 0px\"\n      presentation.style.transform = `scale(${minScale * 1})`\n\n      await lively.sleep(10) // wait for rendering\n      var scaledBounds = slide.getBoundingClientRect();\n      lively.setPosition(presentation, \n        pt((window.innerWidth - scaledBounds.width) / 2,\n        ((window.innerHeight - scaledBounds.height) / 2)) )\n\n      container.style.backgroundColor = \"black\"\n    } else {\n      \n      // unhide windows again\n      document.body.querySelectorAll(\"lively-window\").forEach(ea => {\n        ea.style.display = \"\"\n      })\n      document.webkitCancelFullScreen()\n      if (container && container.isFullscreen()) {\n        container.onFullscreen()\n        // container.showNavbar()\n      }\n      presentation.style.transform = \"\"\n      lively.setPosition(presentation, pt(0,0))\n      container.style.backgroundColor = \"\"\n      \n      if (container) {\n        container.parentElement.focus() \n      }\n    }\n  }\n  \n  newSlide() {\n    this.slide = document.createElement(\"div\")\n    this.slide.classList.add(\"lively-slide\")\n    this.appendChild(this.slide)\n  }\n  \n  convertSiblings() {\n    var content = this.parentElement \n    if (!content) return;\n    this.newSlide()\n    Array.from(content.childNodes).forEach(ea => {\n      if (ea.tagName == \"LIVELY-PRESENTATION\") return;\n      if (ea.classList && ea.classList.contains(\"lively-slide\")) return;\n      if (ea.tagName === \"HR\") {\n        this.newSlide() \n        ea.remove()\n      } else {\n        this.slide.appendChild(ea)\n      }\n    })\n    this.loaded\n  }\n\n  gotoSlideAt(n) {\n    var slides = this.slides()\n    if (n < 0) {\n      n = slides.length - 1\n    }\n    this.setSlide(slides[n])\n  }\n  \n  currentSlideNumber() {\n    return this.slides().indexOf(this.slide)\n  }\n  \n  updateContainerURLForSlideNumber(nextSlideNumber) {\n    var container = lively.query(this, \"lively-container\")\n    if (container) {\n      var baseURL =  container.getURL().toString().replace(/\\#.*/,\"\")\n      var nextURL = baseURL + \"#@\" +nextSlideNumber\n      container.setPathAttributeAndInput(nextURL)\n      container.history().push(nextURL);\n    }\n  }\n  \n  nextSlide() {\n    var nextSlideNumber = this.currentSlideNumber() + 1\n    this.updateContainerURLForSlideNumber(nextSlideNumber)\n    this.gotoSlideAt(nextSlideNumber)\n  }\n\n  prevSlide() {\n    var nextSlideNumber = this.currentSlideNumber() - 1\n    this.updateContainerURLForSlideNumber(nextSlideNumber)\n    this.gotoSlideAt(nextSlideNumber)\n  }\n  \n  slides() {\n    return Array.from(this.querySelectorAll(\".lively-slide\"))\n  }\n  \n  start() {\n    this.setSlide(this.slides()[0])\n  }\n  \n  setSlide(slide) {\n    var all = this.slides()\n    all.forEach(ea => ea.style.display = \"none\")\n    if (slide) {\n      slide.style.display = \"block\"  \n    }\n    this.slide = slide\n    if (this.slide) {\n      // #Hack, #TODO move it into drawio\n      this.slide.querySelectorAll(\"lively-drawio\").forEach(ea => ea.update()) \n      this.updatePageNumber()\n    }\n  }\n  \n  showAllSlides() {\n    var i=1;\n    this.slides().forEach(ea => {\n      ea.style.display = \"block\"\n      lively.setPosition(ea, pt(0,0), \"relative\") \n      var pageNumber = ea.querySelector(\".page-number\")\n      if (pageNumber) pageNumber.textContent = i++\n    })\n  }\n    \n  async print() {\n    var currentSlideNumber = this.currentSlideNumber() \n    this.showAllSlides()\n\n    window.oldBody = Array.from(document.body.childNodes)\n    var bodyCSS = document.body.style.cssText\n\n    try {\n      // give lively-scripts id's so, we can rescue the content...\n      var printId = 0\n      var originals = new Map()\n      this.querySelectorAll(\"lively-script\").forEach(ea => {\n        var id = \"\" + printId++\n        originals.set(id, ea)\n        ea.setAttribute(\"print-id\", id)\n      })\n\n      document.body.innerHTML = this.innerHTML\n        .replace(/<lively-script/g,\"<lively-no-script\")\n        .replace(/<\\/lively-script/g,\"</lively-no-script\")\n      \n      Array.from(document.body.querySelectorAll(\"lively-no-script\")).forEach(ea => {\n        var id = ea.getAttribute(\"print-id\")\n        var original = originals.get(id, ea)\n        if (original) {\n          var replacement = <div>hello</div>\n          replacement.attachShadow({mode: 'open'})\n          replacement.shadowRoot.innerHTML = original.get(\"#result\").innerHTML\n          ea.parentElement.replaceChild(replacement, ea)\n        }\n      })\n\n      document.body.style = \"\"\n\n      await lively.sleep(1000)\n\n      window.print()\n\n      // await lively.sleep(1000)    \n      // await lively.confirm(\"finished printing?\")\n    } finally {\n      // I'll be back\n      document.body.innerHTML = \"\" // tabula raza\n      document.body.style = bodyCSS\n      window.oldBody.forEach(ea => document.body.appendChild(ea))\n      this.gotoSlideAt(currentSlideNumber)  \n    }\n  }  \n  \n  updatePageNumber() {\n    if (!this.slide) return;\n    var pageNumber = this.slide.querySelector(\".page-number\")\n    if (pageNumber) pageNumber.textContent = this.currentSlideNumber()\n  }\n  \n  static async config(ctx, config={}) {\n    await lively.sleep(500)\n    var presentation = lively.query(ctx, \"lively-presentation\")\n    if (presentation && presentation.slides) {\n      presentation.slides().forEach(ea => {\n        if(config.logo) {\n          var img = document.createElement(\"img\")\n          img.classList.add(\"logo\")\n          img.src=config.logo \n          img.setAttribute(\"width\", \"50px\")\n          ea.appendChild(img)          \n        }\n        if (config.pageNumbers) {\n          var div = document.createElement(\"div\")\n          div.classList.add(\"page-number\")\n          ea.appendChild(div)          \n        }\n      });\n    }\n  }\n}"]}