import { withPluginApi } from "discourse/lib/plugin-api"; import { addBlockDecorateCallback, addTagDecorateCallback, } from "discourse/lib/to-markdown"; import applySpoiler from "discourse/plugins/spoiler-alert/lib/apply-spoiler"; function spoil(element) { element.querySelectorAll(".spoiler").forEach((spoiler) => { spoiler.classList.remove("spoiler"); spoiler.classList.add("spoiled"); applySpoiler(spoiler); }); } export function initializeSpoiler(api) { api.decorateCookedElement(spoil, { id: "spoiler-alert" }); api.addComposerToolbarPopupMenuOption({ icon: "magic", label: "spoiler.title", action: (toolbarEvent) => { toolbarEvent.applySurround("[spoiler]", "[/spoiler]", "spoiler_text", { multiline: false, useBlockMode: true, }); }, }); addTagDecorateCallback(function () { const { attributes } = this.element; if (/\bspoiled\b/.test(attributes.class)) { this.prefix = "[spoiler]"; this.suffix = "[/spoiler]"; } }); addBlockDecorateCallback(function (text) { const { name, attributes } = this.element; if (name === "div" && /\bspoiled\b/.test(attributes.class)) { this.prefix = "[spoiler]\n"; this.suffix = "\n[/spoiler]"; return text.trim(); } }); } export default { name: "spoiler-alert", initialize(container) { const siteSettings = container.lookup("service:site-settings"); if (siteSettings.spoiler_enabled) { withPluginApi("1.15.0", initializeSpoiler); } }, };