{"version":3,"file":"spoiler-alert.js","names":["define","_exports","_pluginApi","_toMarkdown","_applySpoiler","_richEditorExtension","spoil","element","querySelectorAll","forEach","spoiler","classList","remove","add","default","initializeSpoiler","api","decorateCookedElement","id","addComposerToolbarPopupMenuOption","icon","active","state","inSpoiler","showActiveIcon","label","action","toolbarEvent","commands","toggleSpoiler","applySurround","multiline","useBlockMode","addTagDecorateCallback","attributes","this","test","class","prefix","suffix","addBlockDecorateCallback","text","name","trim","registerRichEditorExtension","Object","defineProperty","value","initialize","container","lookup","spoiler_enabled","withPluginApi","_discourseI18n","_setSpoilerHidden","addEventListener","event","key","INTERACTIVE_SELECTOR","join","setAttributes","entries","removeAttribute","setAttribute","role","tabindex","i18n","Array","from","children","e","getAttribute","_setSpoilerVisible","preventDefault","defaultPrevented","target","closest","isInteractive","window","getSelection","setup","helper","allowList","registerOptions","opts","siteSettings","features","registerPlugin","md","inline","bbcode","ruler","push","tag","wrap","block","SPOILER_NODES","extension","nodeSpec","attrs","blurred","group","content","createGapCursor","parseDOM","toDOM","inline_spoiler","parse","bbcode_spoiler","wrap_bbcode","token","nesting","attrGet","openNode","schema","nodes","top","type","closeNode","serializeNode","node","write","renderContent","renderInline","inputRules","pmState","TextSelection","match","handler","start","end","textNode","atStart","doc","resolve","parentOffset","tr","replaceWith","createAndFill","paragraph","setSelection","create","nodeSize","utils","some","nodeType","inNode","pmCommands","dispatch","view","selection","empty","$from","$to","depth","includes","spoilerStart","before","spoilerEnd","spoilerNode","endOfTextblock","replaceSelectionWith","pos","parent","size","isBlock","wrapIn","slice","openStart","openEnd","child","plugins","Plugin","pmView","Decoration","DecorationSet","props","decorations","getState","init","config","descendants","apply","set","oldState","newState","getMeta","map","mapping","selectionSet","docChanged","nodeStart","nodeEnd","to"],"sources":["discourse/plugins/spoiler-alert/initializers/spoiler-alert.js","discourse/plugins/spoiler-alert/lib/apply-spoiler.js","discourse/plugins/spoiler-alert/lib/discourse-markdown/spoiler-alert.js","discourse/plugins/spoiler-alert/lib/rich-editor-extension.js"],"sourcesContent":["define(\"discourse/plugins/spoiler-alert/initializers/spoiler-alert\", [\"exports\", \"discourse/lib/plugin-api\", \"discourse/lib/to-markdown\", \"discourse/plugins/spoiler-alert/lib/apply-spoiler\", \"discourse/plugins/spoiler-alert/lib/rich-editor-extension\"], function (_exports, _pluginApi, _toMarkdown, _applySpoiler, _richEditorExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initializeSpoiler = initializeSpoiler;\n  function spoil(element) {\n    element.querySelectorAll(\".spoiler\").forEach(spoiler => {\n      spoiler.classList.remove(\"spoiler\");\n      spoiler.classList.add(\"spoiled\");\n      (0, _applySpoiler.default)(spoiler);\n    });\n  }\n  function initializeSpoiler(api) {\n    api.decorateCookedElement(spoil, {\n      id: \"spoiler-alert\"\n    });\n    api.addComposerToolbarPopupMenuOption({\n      icon: \"wand-magic\",\n      active: ({\n        state\n      }) => state.inSpoiler,\n      showActiveIcon: true,\n      label: \"spoiler.title\",\n      action: toolbarEvent => {\n        if (toolbarEvent.commands) {\n          toolbarEvent.commands.toggleSpoiler();\n        } else {\n          toolbarEvent.applySurround(\"[spoiler]\", \"[/spoiler]\", \"spoiler_text\", {\n            multiline: false,\n            useBlockMode: true\n          });\n        }\n      }\n    });\n    (0, _toMarkdown.addTagDecorateCallback)(function () {\n      const {\n        attributes\n      } = this.element;\n      if (/\\bspoiled\\b/.test(attributes.class)) {\n        this.prefix = \"[spoiler]\";\n        this.suffix = \"[/spoiler]\";\n      }\n    });\n    (0, _toMarkdown.addBlockDecorateCallback)(function (text) {\n      const {\n        name,\n        attributes\n      } = this.element;\n      if (name === \"div\" && /\\bspoiled\\b/.test(attributes.class)) {\n        this.prefix = \"[spoiler]\\n\";\n        this.suffix = \"\\n[/spoiler]\";\n        return text.trim();\n      }\n    });\n    api.registerRichEditorExtension(_richEditorExtension.default);\n  }\n  var _default = _exports.default = {\n    name: \"spoiler-alert\",\n    initialize(container) {\n      const siteSettings = container.lookup(\"service:site-settings\");\n      if (siteSettings.spoiler_enabled) {\n        (0, _pluginApi.withPluginApi)(initializeSpoiler);\n      }\n    }\n  };\n});","define(\"discourse/plugins/spoiler-alert/lib/apply-spoiler\", [\"exports\", \"discourse-i18n\"], function (_exports, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = applySpoiler;\n  const INTERACTIVE_SELECTOR = [\"a\", \"area\", \"audio\", \"button\", \"details\", \"embed\", \"iframe\", \"img.animated\", \"input\", \"map\", \"object\", \"option\", \"portal\", \"select\", \"textarea\", \"track\", \"video\", \".lightbox\"].join(\", \");\n  function isInteractive(event) {\n    return event.defaultPrevented || event.target.closest(INTERACTIVE_SELECTOR);\n  }\n  function noTextSelected() {\n    return window.getSelection() + \"\" === \"\";\n  }\n  function setAttributes(element, attributes) {\n    Object.entries(attributes).forEach(([key, value]) => {\n      if (value === null) {\n        element.removeAttribute(key);\n      } else {\n        element.setAttribute(key, value);\n      }\n    });\n  }\n  function _setSpoilerHidden(element) {\n    const spoilerHiddenAttributes = {\n      role: \"button\",\n      tabindex: \"0\",\n      \"data-spoiler-state\": \"blurred\",\n      \"aria-expanded\": false,\n      \"aria-label\": (0, _discourseI18n.i18n)(\"spoiler.label.show\"),\n      \"aria-live\": \"polite\"\n    };\n\n    // Set default attributes & classes on spoiler\n    setAttributes(element, spoilerHiddenAttributes);\n    element.classList.add(\"spoiler-blurred\");\n\n    // Set aria-hidden for all children of the spoiler\n    Array.from(element.children).forEach(e => {\n      e.setAttribute(\"aria-hidden\", true);\n    });\n  }\n  function _setSpoilerVisible(element) {\n    const spoilerVisibleAttributes = {\n      \"data-spoiler-state\": \"revealed\",\n      \"aria-expanded\": true,\n      \"aria-label\": null,\n      role: null\n    };\n\n    // Set attributes & classes for when spoiler is visible\n    setAttributes(element, spoilerVisibleAttributes);\n    element.classList.remove(\"spoiler-blurred\");\n\n    // Remove aria-hidden for all children of the spoiler when visible\n    Array.from(element.children).forEach(e => {\n      e.removeAttribute(\"aria-hidden\");\n    });\n  }\n  function toggleSpoiler(event, element) {\n    if (element.getAttribute(\"data-spoiler-state\") === \"blurred\") {\n      _setSpoilerVisible(element);\n      event.preventDefault();\n    } else if (!isInteractive(event) && noTextSelected()) {\n      _setSpoilerHidden(element);\n    }\n  }\n  function applySpoiler(element) {\n    _setSpoilerHidden(element);\n    element.addEventListener(\"click\", event => {\n      toggleSpoiler(event, element);\n    });\n    element.addEventListener(\"keydown\", event => {\n      if (event.key === \"Enter\") {\n        toggleSpoiler(event, element);\n      }\n    });\n  }\n});","define(\"discourse/plugins/spoiler-alert/lib/discourse-markdown/spoiler-alert\", [\"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    helper.allowList([\"span.spoiler\", \"div.spoiler\"]);\n    helper.registerOptions((opts, siteSettings) => {\n      opts.features[\"spoiler-alert\"] = !!siteSettings.spoiler_enabled;\n    });\n    helper.registerPlugin(md => {\n      md.inline.bbcode.ruler.push(\"spoiler\", {\n        tag: \"spoiler\",\n        wrap: \"span.spoiler\"\n      });\n      md.block.bbcode.ruler.push(\"spoiler\", {\n        tag: \"spoiler\",\n        wrap: \"div.spoiler\"\n      });\n    });\n  }\n});","define(\"discourse/plugins/spoiler-alert/lib/rich-editor-extension\", [\"exports\", \"discourse-i18n\"], function (_exports, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SPOILER_NODES = [\"inline_spoiler\", \"spoiler\"];\n\n  /** @type {RichEditorExtension} */\n  const extension = {\n    nodeSpec: {\n      spoiler: {\n        attrs: {\n          blurred: {\n            default: true\n          }\n        },\n        group: \"block\",\n        content: \"block+\",\n        createGapCursor: true,\n        parseDOM: [{\n          tag: \"div.spoiled\"\n        }],\n        toDOM: () => [\"div\", {\n          class: \"spoiled\"\n        }, 0]\n      },\n      inline_spoiler: {\n        attrs: {\n          blurred: {\n            default: true\n          }\n        },\n        group: \"inline\",\n        inline: true,\n        content: \"inline*\",\n        parseDOM: [{\n          tag: \"span.spoiled\"\n        }],\n        toDOM: () => [\"span\", {\n          class: \"spoiled\"\n        }, 0]\n      }\n    },\n    parse: {\n      bbcode_spoiler: {\n        block: \"inline_spoiler\"\n      },\n      wrap_bbcode(state, token) {\n        if (token.nesting === 1 && token.attrGet(\"class\") === \"spoiler\") {\n          state.openNode(state.schema.nodes.spoiler);\n          return true;\n        } else if (token.nesting === -1 && state.top().type.name === \"spoiler\") {\n          state.closeNode();\n          return true;\n        }\n      }\n    },\n    serializeNode: {\n      spoiler(state, node) {\n        state.write(\"[spoiler]\\n\");\n        state.renderContent(node);\n        state.write(\"[/spoiler]\\n\\n\");\n      },\n      inline_spoiler(state, node) {\n        state.write(\"[spoiler]\");\n        state.renderInline(node);\n        state.write(\"[/spoiler]\");\n      }\n    },\n    inputRules: ({\n      pmState: {\n        TextSelection\n      }\n    }) => ({\n      match: /\\[spoiler\\]$/,\n      handler: (state, match, start, end) => {\n        const {\n          schema\n        } = state;\n        const textNode = schema.text((0, _discourseI18n.i18n)(\"composer.spoiler_text\"));\n        const atStart = state.doc.resolve(start).parentOffset === 0;\n        const tr = state.tr;\n        if (atStart) {\n          tr.replaceWith(start - 1, end, schema.nodes.spoiler.createAndFill(null, schema.nodes.paragraph.createAndFill(null, textNode)));\n        } else {\n          tr.replaceWith(start, end, schema.nodes.inline_spoiler.createAndFill(null, textNode));\n        }\n        return tr.setSelection(TextSelection.create(tr.doc, start + 1, start + 1 + textNode.nodeSize));\n      }\n    }),\n    state: ({\n      utils,\n      schema\n    }, state) => ({\n      inSpoiler: SPOILER_NODES.some(nodeType => utils.inNode(state, schema.nodes[nodeType]))\n    }),\n    commands: ({\n      schema,\n      utils,\n      pmState: {\n        TextSelection\n      },\n      pmCommands\n    }) => ({\n      toggleSpoiler() {\n        return (state, dispatch, view) => {\n          const {\n            selection\n          } = state;\n          const {\n            empty,\n            $from,\n            $to\n          } = selection;\n          const inSpoiler = SPOILER_NODES.some(nodeType => utils.inNode(state, schema.nodes[nodeType]));\n          if (inSpoiler) {\n            // Find the nearest spoiler node and unwrap it by replacing with its contents\n            for (let depth = $from.depth; depth > 0; depth--) {\n              const node = $from.node(depth);\n              if (SPOILER_NODES.includes(node.type.name)) {\n                const spoilerStart = $from.before(depth);\n                const spoilerEnd = spoilerStart + node.nodeSize;\n\n                // Extract content and replace spoiler with it\n                const tr = state.tr.replaceWith(spoilerStart, spoilerEnd, node.content);\n                dispatch?.(tr);\n                return true;\n              }\n            }\n            return false;\n          }\n\n          // For empty selection, create spoiler with placeholder text\n          if (empty) {\n            const textNode = schema.text((0, _discourseI18n.i18n)(\"composer.spoiler_text\"));\n            const isBlockSpoiler = view.endOfTextblock(\"backward\");\n            const spoilerNode = isBlockSpoiler ? schema.nodes.spoiler.createAndFill(null, schema.nodes.paragraph.createAndFill(null, textNode)) : schema.nodes.inline_spoiler.createAndFill(null, textNode);\n            const tr = state.tr.replaceSelectionWith(spoilerNode);\n            tr.setSelection(TextSelection.create(tr.doc, $from.pos + 1, $from.pos + 1 + textNode.nodeSize));\n            dispatch?.(tr);\n            return true;\n          }\n          const isBlockNodeSelection = $from.parent === $to.parent && $from.parentOffset === 0 && $to.parentOffset === $from.parent.content.size && $from.parent.isBlock && $from.depth > 0;\n          if (isBlockNodeSelection) {\n            return pmCommands.wrapIn(schema.nodes.spoiler)(state, dispatch);\n          }\n          const slice = selection.content();\n          const isInlineSelection = slice.openStart > 0 || slice.openEnd > 0;\n          if (isInlineSelection) {\n            const content = [];\n            slice.content.forEach(node => node.isBlock ? node.content.forEach(child => content.push(child)) : content.push(node));\n            const spoilerNode = schema.nodes.inline_spoiler.createAndFill(null, content);\n            const tr = state.tr.replaceWith($from.pos, $to.pos, spoilerNode);\n            tr.setSelection(TextSelection.create(tr.doc, $from.pos + 1, $from.pos + 1 + spoilerNode.content.size));\n            dispatch?.(tr);\n            return true;\n          } else {\n            return pmCommands.wrapIn(schema.nodes.spoiler)(state, tr => {\n              tr.setSelection(TextSelection.create(tr.doc, $from.pos + 2, $to.pos));\n              dispatch?.(tr);\n            });\n          }\n        };\n      }\n    }),\n    plugins({\n      pmState: {\n        Plugin\n      },\n      pmView: {\n        Decoration,\n        DecorationSet\n      }\n    }) {\n      return new Plugin({\n        props: {\n          decorations(state) {\n            return this.getState(state);\n          }\n        },\n        state: {\n          init(config, state) {\n            // Initially blur all spoilers\n            const decorations = [];\n            state.doc.descendants((node, pos) => {\n              if (SPOILER_NODES.includes(node.type.name)) {\n                decorations.push(Decoration.node(pos, pos + node.nodeSize, {\n                  class: \"spoiler-blurred\"\n                }));\n              }\n              return true;\n            });\n            return DecorationSet.create(state.doc, decorations);\n          },\n          apply(tr, set, oldState, newState) {\n            // If there's a meta update, use it (for manual updates)\n            if (tr.getMeta(this)) {\n              return tr.getMeta(this);\n            }\n\n            // Map existing decorations through the transaction\n            set = set.map(tr.mapping, tr.doc);\n\n            // Only recalculate if selection changed (which includes document changes that affect selection)\n            if (tr.selectionSet || tr.docChanged) {\n              const decorations = [];\n              const {\n                selection\n              } = newState;\n              newState.doc.descendants((node, pos) => {\n                if (SPOILER_NODES.includes(node.type.name)) {\n                  const nodeStart = pos;\n                  const nodeEnd = pos + node.nodeSize;\n                  const cursorInSpoiler = selection.from > nodeStart && selection.from < nodeEnd || selection.to > nodeStart && selection.to < nodeEnd || selection.from <= nodeStart && selection.to >= nodeEnd;\n                  if (!cursorInSpoiler) {\n                    decorations.push(Decoration.node(nodeStart, nodeEnd, {\n                      class: \"spoiler-blurred\"\n                    }));\n                  }\n                }\n                return true;\n              });\n              return DecorationSet.create(newState.doc, decorations);\n            }\n            return set;\n          }\n        }\n      });\n    }\n  };\n  var _default = _exports.default = extension;\n});"],"mappings":"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","ignoreList":[]}