{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eslint/src/components/widgets/lively-drawio.js"],"names":["Rasterize","Morph","ContextMenu","Files","pt","GitHub","Webhook","pako","XML","DrawioBranch","stringToBytes","str","arr","Array","length","i","charCodeAt","bytesToString","String","fromCharCode","LivelyDrawio","initialize","lively","loadJavaScriptThroughDOM","addEventListener","evt","onContextMenu","_attrObserver","MutationObserver","mutations","forEach","mutation","type","attributeChangedCallback","attributeName","oldValue","target","getAttribute","observe","attributes","update","attr","oldVal","newVal","updateGithubInfo","githubInfo","githubFileInfo","src","updateWebhook","webhook","user","repo","change","onWebhook","create","start","attachedCallback","detachedCallback","stop","commits","find","ea","modified","path","updateFromDrawIO","after","extractEncodedSource","doc","querySelector","textContent","extractSource","prettyPrint","encoded","data","atob","source","decodeURIComponent","inflateRaw","prettify","encodeSource","btoa","deflateRaw","encodeURIComponent","loadXML","s","fetch","then","r","text","DOMParser","parseFromString","saveXML","method","body","XMLSerializer","serializeToString","getSource","getGraphModel","setGraphModel","model","setSource","result","shiftKey","stopPropagation","preventDefault","link","composedPath","localName","menu","click","openBrowser","editAtDrawIO","exportAsPDF","openIn","document","url","get","innerHTML","self","GraphViewer","console","warn","root","Promise","resolve","createViewerForElement","e","log","container","query","containerBase","getURL","toString","replace","base","match","wrongBase","window","location","links","querySelectorAll","a","href","absoluteLink","removeAttribute","fixedRef","setAttribute","style","textDecoration","followPath","saveAsPng","baseURL","lively4url","svgElement","name","oldTransform","transform","oldTransformOrigin","transformOrigin","zoom","sleep","elementToURL","notify","sha","userAndRepository","gh","ensureBranch","branch","content","getContent","files","saveFile","parent","Error","drawioURL","setFile","githubPath","undefined","withSynctoolDo","comp","login","githubPrefix","iFrame","openComponentInWindow","setExtent","parentElement","setURL","targetURL","confirm","dataURL","getPDFDataURL","copyURLtoURL","navbar","filename","xform","config","format","bg","base64","embedXml","xml","Object","keys","map","key","join","convertToPDFRequest","headers","resp","livelyExample"],"mappings":"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","file":"lively-drawio.js","sourcesContent":["import Rasterize from \"src/client/rasterize.js\"\n/* globals GraphViewer */\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport ContextMenu from 'src/client/contextmenu.js'\n\nimport Files from \"src/client/files.js\"\nimport {pt} from 'src/client/graphics.js'\n\nimport GitHub from \"src/client/github.js\"\n\nconst DrawioBranch = \"drawio\"\nimport Webhook from \"src/client/webhook.js\"\n\n// import pako from \"https://jgraph.github.io/drawio-tools/tools/deflate/pako.min.js\"\nimport pako from \"src/external/drawio-pako.min.js\"\n\nimport XML from \"src/client/xml.js\"\n\nfunction stringToBytes(str) {\n    var arr = new Array(str.length);\n    for (var i = 0; i < str.length; i++){\n        arr[i] = str.charCodeAt(i);\n    }\n    return arr;\n}\n\nfunction bytesToString(arr) {\n    var str = '';\n    for (var i = 0; i < arr.length; i++){\n        str += String.fromCharCode(arr[i]);\n    }\n    return str;\n}\n\nexport default class LivelyDrawio extends Morph {\n  async initialize() {\n    await lively.loadJavaScriptThroughDOM(\"drawio\", \"https://www.draw.io/js/viewer.min.js\")\n    this.addEventListener('contextmenu', evt => this.onContextMenu(evt), false);  \n    this._attrObserver = new MutationObserver((mutations) => {\n      \n    // Install Attribute Observer\n    mutations.forEach((mutation) => {  \n        if(mutation.type == \"attributes\") {\n          // console.log(\"observation\", mutation.attributeName,mutation.target.getAttribute(mutation.attributeName));\n          this.attributeChangedCallback(\n            mutation.attributeName,\n            mutation.oldValue,\n            mutation.target.getAttribute(mutation.attributeName))\n        }\n      });\n    });\n    this._attrObserver.observe(this, { attributes: true });\n    \n    this.update()\n  }\n  \n  \n  attributeChangedCallback(attr, oldVal, newVal) {\n    this.update()\n  }\n  \n  async updateGithubInfo() {\n    this.githubInfo = await Files.githubFileInfo(this.src)\n  }\n  \n  async updateWebhook() {\n    if (this.githubInfo) {\n      this.webhook = new Webhook(this.githubInfo.user,  this.githubInfo.repo , \n                                 change => this.onWebhook(change))\n      await this.webhook.create()\n      this.webhook.start()\n    }\n  }\n  \n  attachedCallback() {\n    this.webhook && this.webhook.start()\n  }\n  \n  detachedCallback() {\n    this.webhook && this.webhook.stop()\n    \n  }\n\n  async onWebhook(change) {\n    if (!change || change.commits) return\n    if (change.commits.find(ea => \n          ea.modified.find(path => path == this.githubInfo.path))) {\n      this.updateFromDrawIO(change.after)\n    }\n  }\n  \n  extractEncodedSource(doc) {\n    return doc.querySelector(\"diagram\").textContent\n  }\n  \n  extractSource(doc, prettyPrint) {\n    let encoded = this.extractEncodedSource(doc),\n      data = atob(encoded),\n      source = decodeURIComponent(bytesToString(pako.inflateRaw(data)))\n    if (prettyPrint) {\n      return XML.prettify(source) \n    }\n    return source\n  }\n  \n  encodeSource(source) {\n    return btoa(bytesToString(pako.deflateRaw(encodeURIComponent(source))))\n  }\n  \n  async loadXML() {\n     var s = await fetch(this.src).then(r => r.text())\n     return new DOMParser().parseFromString(s, 'text/xml')\n  }\n\n  async saveXML(doc) {\n    return await fetch(this.src, {\n      method: \"PUT\",\n      body: new XMLSerializer().serializeToString(doc)\n    })\n  }\n\n  \n  async getSource(prettyPrint) {\n    return this.extractSource(await this.loadXML(), prettyPrint)\n  }\n  \n  async getGraphModel() {\n    var source = await this.getSource()\n      return new DOMParser().parseFromString(source, 'text/xml')\n  }\n\n  async setGraphModel(model) {\n    var source = new XMLSerializer().serializeToString(model)\n    return this.setSource(source)\n  }\n\n  \n  async setSource(source) {\n    let doc = await this.loadXML()\n    doc.querySelector(\"diagram\").textContent =  this.encodeSource(source) \n    var result = this.saveXML(doc)\n    this.update()\n    return result\n  }\n  \n  onContextMenu(evt) {\n    if (!evt.shiftKey) {\n      evt.stopPropagation();\n      evt.preventDefault();\n      \n      let link = evt.composedPath().find(ea => ea.localName == \"a\")\n      let menu;        \n      \n      if(link) {\n        menu = new ContextMenu(this, [\n              [\"open\", () => {\n                  link.click()   \n              },\"\", ''],\n          \n              [\"open in new browser\", () => {\n                // first try our fixed link\n                lively.openBrowser(link.getAttribute(\"data-href\") || link.getAttribute(\"href\"))  \n              },\"\", ''],\n          \n              \n          ]);\n      } else {\n        menu = new ContextMenu(this, [\n              // Is ugly, because we do it ourselfs... and we don't need it any more\n              // [\"save es png\", () => {\n              //     this.saveAsPng()   \n              // },\"\", '<i class=\"fa fa-file-image-o\" aria-hidden=\"true\"></i>'],\n              [\"edit @ drawio\", () => {\n                  this.editAtDrawIO()   \n              },\"\", '<i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>'],\n              [\"update from drawio\", () => {\n                  this.updateFromDrawIO()   \n              },\"\", '<i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>'],\n\n              [\"export as pdf\", () => {\n                  this.exportAsPDF()   \n              }, \"\", '<i class=\"fa fa-file-pdf-o\" aria-hidden=\"true\"></i>'],\n          ]);\n        \n      }\n      \n      menu.openIn(document.body, evt, this);\n      return \n    }\n  }\n  \n  \n  async update() {\n    if (!this.src) return\n    var url = this.src\n    this.get(\"#drawio\").innerHTML = `<div class=\"mxgraph\" style=\"border:1px solid transparent;\" data-mxgraph=\"{&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;target&quot;:&quot;blank&quot;,&quot;lightbox&quot;:false,&quot;nav&quot;:true,&quot;zoom&quot;:1,&quot;resize&quot;:true,&quot;toolbar&quot;:&quot;false&quot;,&quot;edit&quot;:&quot;_blank&quot;,&quot;url&quot;:&quot;${url}&quot;}\"></div>`\n  \n    if (!self.GraphViewer) {\n      console.warn(\"draw.io view not loaded\")\n    } else {\n      try {\n        var root = this.get(\".mxgraph\")\n        \n        try {\n          await new Promise(resolve => {\n              GraphViewer.createViewerForElement(root, resolve);\n          })\n        } catch(e) {\n          console.log(\"[draw.io] ERROR\", e)\n        }          \n  \n        // not needed, because we found the \"callback\"\n        // await lively.sleepUntil(() => this.get(\"svg\"), 2000, 10) \n        \n        // Custom fixLinks... \n        var container =   lively.query(this, \"lively-container\");\n        if (container) {\n          var containerBase = container.getURL().toString().replace(/[^/]*$/, \"\")\n          \n          var base = url.replace(/[^/]*$/, \"\");\n          \n          if (!base.match(/^[A-Za-z0-9]+\\:/)) {\n            base = containerBase + base // my base is relative...\n          }\n          \n\n          var wrongBase = window.location.toString().replace(/[^/]*$/, \"\");\n          var links = this.get(\"#drawio\").querySelectorAll(\"a\")\n          for(let a of links) {\n            let href= a.getAttribute(\"href\")\n            \n            if (!href) continue;\n            href = href.replace(wrongBase,\"\")\n\n            // console.log(\"[drawio] I guess this is better: \" + a.getAttribute(\"href\") + \" --> \" + href)\n                        \n            let absoluteLink = href.match(/^[A-Za-z0-9]+\\:/)\n            a.removeAttribute(\"href\") // #Hack, I don't know why we can't prevent this navigation.... last resort: remove the href\n            let fixedRef\n            if (absoluteLink) {\n               fixedRef = href\n            } else {\n                fixedRef = base + href\n            }\n            a.setAttribute(\"data-href\", fixedRef) // we fixed it\n            \n            \n            // a.style.border = \"1px solid blue\" // for DEV\n            \n            a.style.textDecoration = \"underline\"\n            lively.addEventListener(\"drawio\", a, \"click\", evt => {\n              // link => \n              evt.stopPropagation()\n              evt.preventDefault()\n              container.followPath(fixedRef)\n              return false\n            })\n            \n            // a.parentElement.appendChild(b, a)\n            // a.remove()\n          }\n        } else {\n          console.log(\"[drawio] no container found \")\n        }\n      } catch(e) {\n        console.log(\"DrawIO Error\", e)\n      }\n    }\n  }\n  \n  async saveAsPng() {\n    var container = lively.query(this, \"lively-container\");\n    if (container) {\n      var baseURL = container.getURL().toString().replace(/[^\\/]*$/,\"\");\n    } else {\n      baseURL = lively4url + \"/\"\n    }\n    var svgElement = this.get(\".geDiagramContainer svg\")\n    if (!svgElement) {\n      return lively.warn(\"Cannot export, because SVG element not found\")\n    }\n    var name = this.src.replace(/.*\\//,\"\").replace(/\\.xml$/,\".png\")\n    var oldTransform = svgElement.transform\n    var oldTransformOrigin = svgElement.transformOrigin\n    \n    var zoom = 3\n    svgElement.style.transform = `scale(${zoom})`\n    svgElement.style.transformOrigin = \"0 0\"\n    await lively.sleep(0)\n    try {\n      await Rasterize.elementToURL(svgElement, baseURL + name, 1)\n    } finally {\n      svgElement.style.transform = oldTransform\n      svgElement.style.transformOrigin = oldTransformOrigin\n    }\n    \n    if (container) {\n      container.get(\"lively-container-navbar\").update()\n    }\n    lively.notify(\"saved \" + name)\n  }\n  \n  get src() {\n    return this.getAttribute(\"src\")\n  }\n  set src(url) {\n    this.setAttribute(\"src\", url)\n    this.update()\n  }\n  \n  async updateFromDrawIO(sha) {\n    \n    var githubInfo = await Files.githubFileInfo(this.src)\n    if (githubInfo) {\n      var userAndRepository = githubInfo.user +\"/\" + githubInfo.repo\n      var gh = new GitHub(githubInfo.user, githubInfo.repo)\n\n      // create new branch where drawio edits go into....\n      await gh.ensureBranch(DrawioBranch, githubInfo.branch)\n      \n      \n      var content = await gh.getContent(githubInfo.path, sha || DrawioBranch)\n      // console.log(\"source: \", this.extractSource(content))\n      await lively.files.saveFile(this.src, content)      \n      await this.update()\n      lively.notify(\"updated \" + this.src)\n    }\n  }\n\n  async editAtDrawIO(parent) {\n    if (!this.src) throw new Error(\"src attribute not set\");\n\n    await this.updateGithubInfo()\n    await this.updateWebhook()\n\n    var drawioURL;\n    var githubInfo = await Files.githubFileInfo(this.src)\n    if (githubInfo) {\n      var userAndRepository = githubInfo.user +\"/\" + githubInfo.repo \n      var gh = new GitHub(githubInfo.user, githubInfo.repo)\n      \n      // create new branch where drawio edits go into....\n      await gh.ensureBranch(DrawioBranch, githubInfo.branch)\n      \n      var content = await fetch(this.src).then(r => r.text())\n      await gh.setFile(githubInfo.path, DrawioBranch, content)\n      var githubPath = userAndRepository + \"/\" +  DrawioBranch + \"/\" +githubInfo.path\n      drawioURL = \"https://www.draw.io/#H\" +encodeURIComponent(githubPath)\n    } else {\n      lively.notify(\"Please login to GitHub!\",  \"\", undefined, () => {\n        \n        lively.files.withSynctoolDo(comp => {\n          comp.login()\n        }, lively4url)\n      })\n      return\n    }\n    \n    \n    var githubPrefix = \"https://raw.githubusercontent.com/\"    \n    if (this.src.match(githubPrefix)) {\n      \n      \n      // JensLincke%2Fdrawio-figures%2Fmaster%2Fcontextjs_promises_01.xml\n      drawioURL = \"https://www.draw.io/#H\" +\n          encodeURIComponent(this.src.replace(githubPrefix, \"\"))\n    } \n    if (drawioURL) {\n        var iFrame = await(parent ? lively.create(\"lively-iframe\") : lively.openComponentInWindow(\"lively-iframe\"))\n        lively.setExtent(iFrame.parentElement, pt(1200,800))\n        iFrame.setURL(drawioURL)\n    } else {\n      lively.notify(\"editing not supported for\", this.src)\n    }\n  }\n\n  \n  async exportAsPDF() {\n    var targetURL = this.src.replace(/\\.[^.]+$/,\"\") + \".pdf\" // #Warning override without asking... yeah we need sharp tools!\n    if (await lively.confirm(\"save as \" + targetURL)) {\n      var dataURL = await this.getPDFDataURL()\n      // or maybe we should ask ...\n      await lively.files.copyURLtoURL(dataURL, targetURL)\n      lively.notify(\"finisihed exporting pdf\")\n      \n      var container = lively.query(this, \"lively-container\")\n      if (container) container.navbar().update()\n    }\n  }\n  \n  async getPDFDataURL() {\n    // var form =  new FormData();\n    var source = await fetch(this.src).then(r => r.text())\n    var filename = this.src.replace(/.*\\//,\"\")\n    \n    var xform = \"\"\n    var config = {\n      format: \"pdf\",\n      bg: \"#ffffff\",\n      base64: 1,\n      embedXml: 0,\n      xml: encodeURIComponent(source),\n      filename: filename\n    }\n    xform = Object.keys(config).map(key => {\n      return key + \"=\" + config[key] \n    }).join(\"&\")\n        \n    var convertToPDFRequest = fetch(\"https://exp.draw.io/ImageExport4/export\", {\n      method: \"POST\",\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded'\n      },\n      body: xform,\n    })\n    var resp = await convertToPDFRequest\n    var text = await resp.text()\n    var dataURL = \"data:application/pdf;base64,\"+text\n    return dataURL\n  \n  // fetch(\"data:application/pdf;base64,\"+text).then(r => r.blob()).then(blob => {\n  //   fetch(\"https://lively-kernel.org/lively4/lively4-jens/doc/figures/test.pdf\", \n  //     {\n  //       method: \"PUT\",\n  //       body: blob\n  //   })  \n  // })\n  }\n  \n  async livelyExample() {\n    // this.src = \"https://lively-kernel.org/lively4/lively4-jens/doc/figures/testdrawio.xml\"\n    this.src = \"https://raw.githubusercontent.com/JensLincke/drawio-figures/master/contextjs_promises_01.xml\"\n    // this.src = \"https://raw.githubusercontent.com/JensLincke/drawio-figures/master/contextjs_promises_02.xml\"\n    // this.edit = \"https://www.draw.io/#HJensLincke%2Fdrawio-figures%2Fmaster%2Fcontextjs_promises_01.xml\"\n  }\n  \n}"]}