{"version":3,"file":"discourse-graphviz.js","names":["define","_exports","Object","defineProperty","value","setup","helper","markdownIt","allowList","registerOptions","opts","siteSettings","features","graphviz","discourse_graphviz_enabled","registerPlugin","md","options","discourse","block","bbcode","ruler","push","tag","replace","state","tagInfo","content","token","escaped","utils","escapeHtml","inputEngine","attrs","engine","includes","svgOnly","svg","_jquery","_sanitizer","_debounce","_loadScript","_pluginApi","default","name","renderGraphs","$containers","each","_","container","$container","find","length","this","renderGraph","graphDefinition","text","trim","attr","$spinner","html","then","removeClass","svgChart","vizRenderStringSync","format","e","$error","escape","message","initialize","lookup","withPluginApi","api","decorateCooked","$elem","$graphviz","id"],"sources":["discourse/plugins/discourse-graphviz/discourse-markdown/discourse-graphviz.js","discourse/plugins/discourse-graphviz/initializers/discourse-graphviz.js"],"sourcesContent":["define(\"discourse/plugins/discourse-graphviz/discourse-markdown/discourse-graphviz\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.setup = setup;\n  function setup(helper) {\n    if (!helper.markdownIt) {\n      return;\n    }\n    helper.allowList([\"div.graphviz\", \"div.graphviz.is-loading\", \"div.graphviz-svg\"]);\n    helper.registerOptions((opts, siteSettings) => {\n      opts.features.graphviz = siteSettings.discourse_graphviz_enabled;\n    });\n    helper.registerPlugin(md => {\n      if (md.options.discourse.features.graphviz) {\n        md.block.bbcode.ruler.push(\"graphviz\", {\n          tag: \"graphviz\",\n          replace(state, tagInfo, content) {\n            const engines = [\"dot\", \"neato\", \"circo\", \"fdp\", \"osage\", \"twopi\"];\n            const token = state.push(\"html_raw\", \"\", 0);\n            const escaped = state.md.utils.escapeHtml(content);\n            const inputEngine = state.md.utils.escapeHtml(tagInfo.attrs.engine);\n            const engine = engines.includes(inputEngine) ? `data-engine='${inputEngine}'` : \"data-engine='dot'\";\n            let svgOnly = \"\";\n            if (tagInfo.attrs.svg === \"true\") {\n              svgOnly = \" graphviz-svg\";\n            } else if (tagInfo.attrs.svg === \"false\") {\n              svgOnly = \" graphviz-no-svg\";\n            }\n            token.content = `<div class=\"graphviz is-loading${svgOnly}\" ${engine}>\\n${escaped}\\n</div>\\n`;\n            return true;\n          }\n        });\n      }\n    });\n  }\n});","define(\"discourse/plugins/discourse-graphviz/initializers/discourse-graphviz\", [\"exports\", \"jquery\", \"pretty-text/sanitizer\", \"discourse/lib/debounce\", \"discourse/lib/load-script\", \"discourse/lib/plugin-api\"], function (_exports, _jquery, _sanitizer, _debounce, _loadScript, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _exports.default = {\n    name: \"discourse-graphviz\",\n    renderGraphs($containers) {\n      $containers.each((_, container) => {\n        const $container = (0, _jquery.default)(container);\n\n        // if the container content has not yet been replaced\n        // do nothing\n        if (!$container.find(\"svg\").length) {\n          this.renderGraph($container);\n        }\n      });\n    },\n    renderGraph($container) {\n      const graphDefinition = $container.text().trim();\n      const engine = $container.attr(\"data-engine\");\n      const $spinner = (0, _jquery.default)(\"<div class='spinner tiny'></div>\");\n      $container.html($spinner);\n      (0, _loadScript.default)(\"/plugins/discourse-graphviz/javascripts/viz-3.0.1.js\").then(() => {\n        $container.removeClass(\"is-loading\");\n        try {\n          /* global vizRenderStringSync */\n          const svgChart = vizRenderStringSync(graphDefinition, {\n            format: \"svg\",\n            engine\n          });\n          $container.html(svgChart);\n        } catch (e) {\n          const $error = (0, _jquery.default)(`<div class='graph-error'>${(0, _sanitizer.escape)(e.message)}</div>`);\n          $container.html($error);\n        }\n      });\n    },\n    initialize(container) {\n      const siteSettings = container.lookup(\"service:site-settings\");\n      if (siteSettings.discourse_graphviz_enabled) {\n        (0, _pluginApi.withPluginApi)(api => {\n          api.decorateCooked($elem => {\n            const $graphviz = $elem.find(\".graphviz\");\n            if ($graphviz.length) {\n              (0, _debounce.default)(this, this.renderGraphs, $graphviz, 200);\n            }\n          }, {\n            id: \"graphviz\"\n          });\n        });\n      }\n    }\n  };\n});"],"mappings":"AAAAA,OAAA,kGAAAC,GACA;AAEAC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAAI,MACA,SAAAC,GACA,IAAAA,EAAAC,WACA;AAEAD,EAAAE,UAAA,+DACAF,EAAAG,gBAAA,CAAAC,EAAAC,KACAD,EAAAE,SAAAC,SAAAF,EAAAG,6BAEAR,EAAAS,eAAAC,IACAA,EAAAC,QAAAC,UAAAN,SAAAC,UACAG,EAAAG,MAAAC,OAAAC,MAAAC,KAAA,YACAC,IAAA,WACA,OAAAC,CAAAC,EAAAC,EAAAC,GACA,MACAC,EAAAH,EAAAH,KAAA,iBACAO,EAAAJ,EAAAT,GAAAc,MAAAC,WAAAJ,GACAK,EAAAP,EAAAT,GAAAc,MAAAC,WAAAL,EAAAO,MAAAC,QACAA,EAJA,8CAIAC,SAAAH,GAAA,gBAAAA,KAAA;AACA,IAAAI,EAAA;AAOA,MANA,SAAAV,EAAAO,MAAAI,IACAD,EAAA,gBACA,UAAAV,EAAAO,MAAAI,MACAD,EAAA,oBAEAR,EAAAD,QAAA,kCAAAS,MAAAF,OAAAL,eACA,CACA,KAIA,C,GCrCA7B,OAAA,6MAAAC,EAAAqC,EAAAC,EAAAC,EAAAC,EAAAC,GACA;AAEAxC,OAAAC,eAAAF,EAAA,cACAG,OAAA,IAEAH,EAAA0C,aAAA;AACA1C,EAAA0C,QAAA,CACAC,KAAA,qBACA,YAAAC,CAAAC,GACAA,EAAAC,KAAA,CAAAC,EAAAC,KACA,MAAAC,GAAA,EAAAZ,EAAAK,SAAAM;AAIAC,EAAAC,KAAA,OAAAC,QACAC,KAAAC,YAAAJ,IAGA,EACA,WAAAI,CAAAJ,GACA,MAAAK,EAAAL,EAAAM,OAAAC,OACAvB,EAAAgB,EAAAQ,KAAA,eACAC,GAAA,EAAArB,EAAAK,SAAA;AACAO,EAAAU,KAAAD,IACA,EAAAlB,EAAAE,SAAA,wDAAAkB,KAAA,KACAX,EAAAY,YAAA;AACA,IAEA,MAAAC,EAAAC,oBAAAT,EAAA,CACAU,OAAA,MACA/B;AAEAgB,EAAAU,KAAAG,EACA,OAAAG,GACA,MAAAC,GAAA,EAAA7B,EAAAK,SAAA,+BAAAJ,EAAA6B,QAAAF,EAAAG;AACAnB,EAAAU,KAAAO,EACA,GAEA,EACA,UAAAG,CAAArB,GACAA,EAAAsB,OAAA,yBACAzD,6BACA,EAAA4B,EAAA8B,eAAAC,IACAA,EAAAC,eAAAC,IACA,MAAAC,EAAAD,EAAAxB,KAAA;AACAyB,EAAAxB,SACA,EAAAZ,EAAAG,SAAAU,UAAAR,aAAA+B,EAAA,MAEA,CACAC,GAAA,cAIA,E","ignoreList":[]}