{"version":3,"file":"discourse-details.js","names":["define","_exports","_jquery","_pluginApi","_discourseI18n","_richEditorExtension","initializeDetails","api","decorateCooked","$elem","default","id","addComposerToolbarPopupMenuOption","action","toolbarEvent","applySurround","i18n","multiline","icon","label","registerRichEditorExtension","Object","defineProperty","value","name","initialize","withPluginApi","setup","helper","allowList","registerPlugin","md","block","bbcode","ruler","push","rule","tag","before","state","tagInfo","attrs","details","open","content","after","extension","nodeSpec","group","selectable","defining","isolating","parseDOM","toDOM","node","undefined","summary","parse","bbcode_open","token","openNode","schema","nodes","attrGet","bbcode_close","closeNode","serializeNode","renderContent","write","parent","hasSummary","childCount","forEach","child","text","replace","inAutolink","finalState","plugins","props","handleClickOn","view","pos","nodePos","type","doc","nodeAt","dispatch","tr","setNodeMarkup"],"sources":["discourse/plugins/discourse-details/initializers/apply-details.js","discourse/plugins/discourse-details/lib/discourse-markdown/details.js","discourse/plugins/discourse-details/lib/rich-editor-extension.js"],"sourcesContent":["define(\"discourse/plugins/discourse-details/initializers/apply-details\", [\"exports\", \"jquery\", \"discourse/lib/plugin-api\", \"discourse-i18n\", \"discourse/plugins/discourse-details/lib/rich-editor-extension\"], function (_exports, _jquery, _pluginApi, _discourseI18n, _richEditorExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function initializeDetails(api) {\n    api.decorateCooked($elem => (0, _jquery.default)(\"details\", $elem), {\n      id: \"discourse-details\"\n    });\n    api.addComposerToolbarPopupMenuOption({\n      action: function (toolbarEvent) {\n        toolbarEvent.applySurround(\"\\n\" + `[details=\"${(0, _discourseI18n.i18n)(\"composer.details_title\")}\"]` + \"\\n\", \"\\n[/details]\\n\", \"details_text\", {\n          multiline: false\n        });\n      },\n      icon: \"caret-right\",\n      label: \"details.title\"\n    });\n    api.registerRichEditorExtension(_richEditorExtension.default);\n  }\n  var _default = _exports.default = {\n    name: \"apply-details\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(initializeDetails);\n    }\n  };\n});","define(\"discourse/plugins/discourse-details/lib/discourse-markdown/details\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.setup = setup;\n  const rule = {\n    tag: \"details\",\n    before(state, tagInfo) {\n      const attrs = tagInfo.attrs;\n      const details = state.push(\"bbcode_open\", \"details\", 1);\n      state.push(\"bbcode_open\", \"summary\", 1);\n      if (attrs.open === \"\") {\n        details.attrs = [[\"open\", \"\"]];\n      }\n      let token = state.push(\"text\", \"\", 0);\n      token.content = attrs[\"_default\"] || \"\";\n      state.push(\"bbcode_close\", \"summary\", -1);\n    },\n    after(state) {\n      state.push(\"bbcode_close\", \"details\", -1);\n    }\n  };\n  function setup(helper) {\n    helper.allowList([\"summary\", \"summary[title]\", \"details\", \"details[open]\", \"details.elided\"]);\n    helper.registerPlugin(md => {\n      md.block.bbcode.ruler.push(\"details\", rule);\n    });\n  }\n});","define(\"discourse/plugins/discourse-details/lib/rich-editor-extension\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  /** @type {RichEditorExtension} */\n  const extension = {\n    nodeSpec: {\n      details: {\n        attrs: {\n          open: {\n            default: true\n          }\n        },\n        content: \"summary block+\",\n        group: \"block\",\n        selectable: true,\n        defining: true,\n        isolating: true,\n        parseDOM: [{\n          tag: \"details\"\n        }],\n        toDOM: node => [\"details\", {\n          open: node.attrs.open || undefined\n        }, 0]\n      },\n      summary: {\n        content: \"inline*\",\n        parseDOM: [{\n          tag: \"summary\"\n        }],\n        toDOM: () => [\"summary\", 0]\n      }\n    },\n    parse: {\n      bbcode_open(state, token) {\n        if (token.tag === \"details\") {\n          state.openNode(state.schema.nodes.details, {\n            open: token.attrGet(\"open\") !== null\n          });\n          return true;\n        }\n        if (token.tag === \"summary\") {\n          state.openNode(state.schema.nodes.summary);\n          return true;\n        }\n      },\n      bbcode_close(state, token) {\n        if (token.tag === \"details\" || token.tag === \"summary\") {\n          state.closeNode();\n          return true;\n        }\n      }\n    },\n    serializeNode: {\n      details(state, node) {\n        state.renderContent(node);\n        state.write(\"[/details]\\n\\n\");\n      },\n      summary(state, node, parent) {\n        let hasSummary = false;\n        // If the [details] tag has no summary.\n        if (node.content.childCount === 0) {\n          state.write(\"[details\");\n        } else {\n          hasSummary = true;\n          state.write('[details=\"');\n          node.content.forEach(child => child.text && state.text(child.text.replace(/\"/g, \"“\"), state.inAutolink));\n        }\n        let finalState = `${parent.attrs.open ? \" open\" : \"\"}]\\n`;\n        if (hasSummary) {\n          finalState = `\"${finalState}`;\n        }\n        state.write(finalState);\n      }\n    },\n    plugins: {\n      props: {\n        handleClickOn(view, pos, node, nodePos) {\n          // if the click position in the document is not the first within the summary node\n          if (pos > nodePos + 1 || node.type.name !== \"summary\") {\n            return false;\n          }\n          const details = view.state.doc.nodeAt(nodePos - 1);\n          view.dispatch(view.state.tr.setNodeMarkup(nodePos - 1, null, {\n            open: !details.attrs.open\n          }));\n          return true;\n        }\n      }\n    }\n  };\n  var _default = _exports.default = extension;\n});"],"mappings":"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","ignoreList":[]}