discourse/plugins/discourse-graphviz/assets/javascripts/initializers/discourse-graphviz.js
dependabot[bot] e7d3c344d1
Build(deps-dev): Bump the lint group across 1 directory with 4 updates (#33881)
Bumps the lint group with 4 updates in the / directory:
[@discourse/lint-configs](https://github.com/discourse/lint-configs),
[ember-template-lint](https://github.com/ember-template-lint/ember-template-lint),
[eslint](https://github.com/eslint/eslint) and
[stylelint](https://github.com/stylelint/stylelint).


Updates `@discourse/lint-configs` from 2.22.0 to 2.28.0
- [Commits](https://github.com/discourse/lint-configs/commits)

Updates `ember-template-lint` from 7.7.0 to 7.9.1
- [Release
notes](https://github.com/ember-template-lint/ember-template-lint/releases)
-
[Changelog](https://github.com/ember-template-lint/ember-template-lint/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/ember-template-lint/ember-template-lint/commits)

Updates `eslint` from 9.27.0 to 9.32.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.27.0...v9.32.0)

Updates `stylelint` from 16.19.1 to 16.22.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
-
[Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
-
[Commits](https://github.com/stylelint/stylelint/compare/16.19.1...16.22.0)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Discourse CI <ci@ci.invalid>
Co-authored-by: Jarek Radosz <jarek@cvx.dev>
2025-07-28 18:02:41 +02:00

67 lines
1.8 KiB
JavaScript

import $ from "jquery";
import { escape } from "pretty-text/sanitizer";
import discourseDebounce from "discourse/lib/debounce";
import loadScript from "discourse/lib/load-script";
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "discourse-graphviz",
renderGraphs($containers) {
$containers.each((_, container) => {
const $container = $(container);
// if the container content has not yet been replaced
// do nothing
if (!$container.find("svg").length) {
this.renderGraph($container);
}
});
},
renderGraph($container) {
const graphDefinition = $container.text().trim();
const engine = $container.attr("data-engine");
const $spinner = $("<div class='spinner tiny'></div>");
$container.html($spinner);
loadScript("/plugins/discourse-graphviz/javascripts/viz-3.0.1.js").then(
() => {
$container.removeClass("is-loading");
try {
/* global vizRenderStringSync */
const svgChart = vizRenderStringSync(graphDefinition, {
format: "svg",
engine,
});
$container.html(svgChart);
} catch (e) {
const $error = $(
`<div class='graph-error'>${escape(e.message)}</div>`
);
$container.html($error);
}
}
);
},
initialize(container) {
const siteSettings = container.lookup("service:site-settings");
if (siteSettings.discourse_graphviz_enabled) {
withPluginApi((api) => {
api.decorateCooked(
($elem) => {
const $graphviz = $elem.find(".graphviz");
if ($graphviz.length) {
discourseDebounce(this, this.renderGraphs, $graphviz, 200);
}
},
{ id: "graphviz" }
);
});
}
},
};