{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/components/d3/graphviz-dot.js"],"names":["Morph","debounce","GraphvizDot","initialize","loaded","Promise","resolve","window","Viz","lively","loadJavaScriptThroughDOM","lively4url","updateViz","addEventListener","evt","onExtentChanged","useServer","getAttribute","getEngine","width","v","style","updateExtent","parseFloat","height","svgContainer","get","bounds","getBoundingClientRect","div","sourceContainer","querySelector","source","innerHTML","svgResultResp","fetch","replace","method","headers","graphtype","graphlayout","body","status","text","options","engine","totalMemory","e","setDotData","livelyExample","setAttribute","livelyMigrate","other"],"mappings":";;;;;;AAAOA,W;;AACEC,c,UAAAA,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAET;;;;;;AAOe,YAAMC,WAAN,SAA0BF,KAA1B,CAAgC;;AAE7C,cAAMG,UAAN,GAAmB;AACjB,eAAKC,MAAL,GAAc,IAAIC,OAAJ,CAAY,MAAOC,OAAP,IAAmB;AAAA;;AAC3C,gBAAI,CAACC,OAAOC,GAAZ,EAAiB;AACf,oBAAMC,OAAOC,wBAAP,CAAgC,UAAhC,EAA4CC,aAAa,sBAAzD,EAAiF,IAAjF,CAAN;AACD;AACD,iBAAKC,SAAL;AACA,iBAAKC,gBAAL,CAAsB,gBAAtB,EAAwC,aAAEC,GAAD,IAAS;AAChD,mBAAKC,eAAL,CAAqBD,GAArB;AACD,aAFuC,EAEpCb,QAFoC,kBAE3B,GAF2B,CAAxC;;AAIAK;AACD,WAVa,CAAd;AAWD;;AAEDU,oBAAY;AACV,iBAAO,KAAKC,YAAL,CAAkB,QAAlB,KAA+B,MAAtC;AACD;;AAEDC,oBAAY;AACV,iBAAQ,KAAKD,YAAL,CAAkB,QAAlB,KAA+B,KAAvC;AACD;;AAED,YAAIE,KAAJ,CAAUC,CAAV,EAAa;AACX,eAAKC,KAAL,CAAWF,KAAX,GAAmBC,IAAI,IAAvB;AACA,eAAKE,YAAL;AACA,iBAAOF,CAAP;AACD;;AAED,YAAID,KAAJ,GAAY;AACV,iBAAOI,WAAW,KAAKF,KAAL,CAAWF,KAAtB,CAAP;AACD;;AAED,YAAIK,MAAJ,CAAWJ,CAAX,EAAc;AACZ,eAAKC,KAAL,CAAWG,MAAX,GAAoBJ,IAAI,IAAxB;AACA,eAAKE,YAAL;AACA,iBAAOF,CAAP;AACD;;AAED,YAAII,MAAJ,GAAa;AACX,iBAAOD,WAAW,KAAKF,KAAL,CAAWG,MAAtB,CAAP;AACD;;AAEDF,uBAAe;AACb,cAAIG,eAAe,KAAKC,GAAL,CAAS,YAAT,CAAnB;AACAD,uBAAaJ,KAAb,CAAmBF,KAAnB,GAA2B,KAAKE,KAAL,CAAWF,KAAtC,CAFa,CAE+B;AAC5CM,uBAAaJ,KAAb,CAAmBG,MAAnB,GAA4B,KAAKH,KAAL,CAAWG,MAAvC;AACD;;AAGD,cAAMZ,SAAN,GAAkB;AAChB,eAAKU,YAAL;;AAEA,cAAIK,SAAS,KAAKC,qBAAL,EAAb;AACA,cAAIC,MAAM,KAAKH,GAAL,CAAS,QAAT,CAAV;;AAEA,cAAII,kBAAkB,KAAKC,aAAL,CAAmB,QAAnB,CAAtB;AACA,cAAID,eAAJ,EAAqB;AACnB,gBAAIE,SAAUF,gBAAgBG,SAA9B;AACD;AACD,cAAI,CAACD,MAAL,EAAa;;AAEbH,cAAII,SAAJ,GAAgB,0BAAhB;;AAEA,cAAI,KAAKjB,SAAL,EAAJ,EAAsB;AACpB,gBAAIkB,gBAAgB,MAAMC,MAAMxB,WAAWyB,OAAX,CAAmB,QAAnB,EAA4B,EAA5B,IAAiC,aAAvC,EAAsD;AAC9EC,sBAAQ,MADsE;AAE9EC,uBAAS;AACPC,2BAAW,KADJ;AAEPC,6BAAc,KAAKtB,SAAL;AAFP,eAFqE;AAM9EuB,oBAAMT;AANwE,aAAtD,CAA1B;AAQA,gBAAIE,cAAcQ,MAAd,IAAwB,GAA5B,EAAiC;AAC/Bb,kBAAII,SAAJ,GAAiB,MAAMC,cAAcS,IAAd,EAAvB;AACD,aAFD,MAEO;AACHd,kBAAII,SAAJ,GAAkB,WAAU,MAAMC,cAAcS,IAAd,EAAhB,CAAlB;AACH;AAGF,WAhBD,MAgBO;;AAEL,gBAAIC,UAAU;AACZC,sBAAQ,KAAK3B,SAAL,EADI;AAEZ4B,2BAAa,KAAK,IAAL,GAAY;AAFb,aAAd;;AAKA,gBAAI;AACFjB,kBAAII,SAAJ,GAAgBzB,IAAIwB,MAAJ,EAAYY,OAAZ,CAAhB;AACD,aAFD,CAEE,OAAMG,CAAN,EAAS;AACTlB,kBAAII,SAAJ,GAAgB,iBAAgBc,CAAE,iBAAlC;AACD;AACF;AACF;AACDhC,0BAAkB;AAChB;AACD;;AAEDiC,mBAAWhB,MAAX,EAAmB;AACjB,eAAKC,SAAL,GAAkB,2BAA0BD,MAAO,WAAnD;AACA,eAAKpB,SAAL;AACD;;AAED,cAAMqC,aAAN,GAAsB;AACpB,eAAKC,YAAL,CAAkB,QAAlB,EAA4B,OAA5B;AACA,eAAKF,UAAL,CAAiB;;;;;AAKjB;AACA;AACA;AACA;AACA;AATA,YAUA,KAAKpC,SAAL;AACD;;AAEDuC,sBAAcC,KAAd,EAAqB,CAEpB;AAzH4C;;yBAA1BlD,W","file":"graphviz-dot.js","sourcesContent":["import Morph from \"src/components/widgets/lively-morph.js\"\nimport { debounce } from \"utils\";\n\n/*MD # Plain GraphiViz Dot Wrapper Component \n\n![](graphviz-dot.png){width=200px}\n\nMD*/\n\n\nexport default class GraphvizDot extends Morph {\n\n  async initialize() {\n    this.loaded = new Promise(async (resolve) => {\n      if (!window.Viz) {\n        await lively.loadJavaScriptThroughDOM(\"GraphViz\", lively4url + \"/src/external/viz.js\", true)\n      }\n      this.updateViz()\n      this.addEventListener('extent-changed', ((evt) => {\n        this.onExtentChanged(evt);\n      })::debounce(500));\n\n      resolve()\n    })\n  }\n  \n  useServer() {\n    return this.getAttribute(\"server\") == \"true\"\n  }\n    \n  getEngine() {\n    return  this.getAttribute(\"engine\") || \"dot\"\n  }\n  \n  set width(v) {\n    this.style.width = v + \"px\"\n    this.updateExtent() \n    return v\n  }\n  \n  get width() {\n    return parseFloat(this.style.width)\n  }\n  \n  set height(v) {\n    this.style.height = v + \"px\"\n    this.updateExtent() \n    return v\n  }\n    \n  get height() {\n    return parseFloat(this.style.height)\n  }\n  \n  updateExtent() {\n    var svgContainer = this.get(\"#container\")\n    svgContainer.style.width = this.style.width // hard to find out how to do this in CSS, ... with \"relative\"\n    svgContainer.style.height = this.style.height \n  }\n  \n  \n  async updateViz() {\n    this.updateExtent()\n\n    var bounds = this.getBoundingClientRect()\n    var div = this.get(\"#graph\")\n    \n    var sourceContainer = this.querySelector(\"script\")\n    if (sourceContainer) {\n      var source  = sourceContainer.innerHTML\n    }\n    if (!source) return\n\n    div.innerHTML = \"layouting... wait for it\"\n    \n    if (this.useServer()) {\n      var svgResultResp = await fetch(lively4url.replace(/[^/]+$/,\"\") +\"/_graphviz/\", {\n        method: \"POST\",\n        headers: {\n          graphtype: \"svg\",\n          graphlayout:  this.getEngine()\n        },\n        body: source\n      })\n      if (svgResultResp.status == 200) {\n        div.innerHTML  = await svgResultResp.text()\n      } else {\n          div.innerHTML  =  \"ERROR\" + await svgResultResp.text()\n      }\n      \n      \n    } else {\n      \n      var options = {\n        engine: this.getEngine(),\n        totalMemory: 32 * 1024 * 1024 \n      }\n\n      try {\n        div.innerHTML = Viz(source, options)\n      } catch(e) {\n        div.innerHTML =`<lively-error>${e}</lively-error>`\n      }\n    }    \n  }\n  onExtentChanged() {\n    // this.updateViz()\n  }\n\n  setDotData(source) {\n    this.innerHTML = `<script type=\"graphviz\">${source}</script>`\n    this.updateViz()\n  }\n  \n  async livelyExample() {\n    this.setAttribute(\"engine\", \"neato\")\n    this.setDotData(`digraph {\n      a -> b\n      b -> c\n      c -> a}`)\n    \n    // this.innerHTML = `<script type=\"graphviz\">digraph {\n    //   a -> b\n    //   b -> c\n    //   c -> a}\n    // </script>`\n    this.updateViz()\n  }\n\n  livelyMigrate(other) {\n\n  }\n}\n"]}