{"version":3,"file":"discourse-bbcode.js","names":["define","_exports","_discourseI18n","wrap","tag","attr","callback","startToken","finishToken","tagInfo","content","type","nesting","attrs","_default","setupMarkdownIt","md","ruler","inline","bbcode","push","trim","forEach","dir","block","token","before","state","i18n","after","replace","ol","lines","split","list","index","i","length","line","match","li","children","Object","defineProperty","value","setup","helper","allowList","custom","name","exec","registerOptions","opts","features","registerPlugin"],"sources":["discourse/plugins/discourse-bbcode/lib/discourse-markdown/bbcode.js"],"sourcesContent":["define(\"discourse/plugins/discourse-bbcode/lib/discourse-markdown/bbcode\", [\"exports\", \"discourse-i18n\"], function (_exports, _discourseI18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.setup = setup;\n  function wrap(tag, attr, callback) {\n    return function (startToken, finishToken, tagInfo) {\n      startToken.tag = finishToken.tag = tag;\n      startToken.content = finishToken.content = \"\";\n      startToken.type = \"bbcode_open\";\n      finishToken.type = \"bbcode_close\";\n      startToken.nesting = 1;\n      finishToken.nesting = -1;\n      startToken.attrs = [[attr, callback ? callback(tagInfo) : tagInfo.attrs._default]];\n    };\n  }\n  function setupMarkdownIt(md) {\n    const ruler = md.inline.bbcode.ruler;\n    ruler.push(\"size\", {\n      tag: \"size\",\n      wrap: wrap(\"span\", \"style\", tagInfo => \"font-size:\" + tagInfo.attrs._default.trim() + \"%\")\n    });\n    ruler.push(\"font\", {\n      tag: \"font\",\n      wrap: wrap(\"span\", \"style\", tagInfo => `font-family:'${tagInfo.attrs._default.trim()}'`)\n    });\n    ruler.push(\"color\", {\n      tag: \"color\",\n      wrap: wrap(\"span\", \"style\", tagInfo => \"color:\" + tagInfo.attrs._default.trim())\n    });\n    ruler.push(\"bgcolor\", {\n      tag: \"bgcolor\",\n      wrap: wrap(\"span\", \"style\", tagInfo => \"background-color:\" + tagInfo.attrs._default.trim())\n    });\n    ruler.push(\"highlight\", {\n      tag: \"highlight\",\n      wrap: \"span.highlight\"\n    });\n    ruler.push(\"small\", {\n      tag: \"small\",\n      wrap: wrap(\"span\", \"style\", () => \"font-size:x-small\")\n    });\n    ruler.push(\"aname\", {\n      tag: \"aname\",\n      wrap: wrap(\"a\", \"name\")\n    });\n    ruler.push(\"jumpto\", {\n      tag: \"jumpto\",\n      wrap: wrap(\"a\", \"href\", tagInfo => \"#\" + tagInfo.attrs._default)\n    });\n    [\"left\", \"right\", \"center\"].forEach(dir => {\n      md.block.bbcode.ruler.push(dir, {\n        tag: dir,\n        wrap: function (token) {\n          token.attrs = [[\"style\", \"text-align:\" + dir]];\n          return true;\n        }\n      });\n    });\n    md.block.bbcode.ruler.push(\"indent\", {\n      tag: \"indent\",\n      wrap: \"blockquote.indent\"\n    });\n    [\"ot\", \"edit\"].forEach(tag => {\n      md.block.bbcode.ruler.push(\"ot\", {\n        tag,\n        before: function (state) {\n          let token = state.push(\"sepquote_open\", \"div\", 1);\n          token.attrs = [[\"class\", \"sepquote\"]];\n          token = state.push(\"span_open\", \"span\", 1);\n          token.block = false;\n          token.attrs = [[\"class\", \"smallfont\"]];\n          token = state.push(\"text\", \"\", 0);\n          token.content = (0, _discourseI18n.i18n)(\"bbcode.\" + tag);\n          token = state.push(\"span_close\", \"span\", -1);\n          state.push(\"soft_break\", \"br\", 0);\n          state.push(\"soft_break\", \"br\", 0);\n        },\n        after: function (state) {\n          state.push(\"sepquote_close\", \"div\", -1);\n        }\n      });\n    });\n    [\"list\", \"ul\", \"ol\"].forEach(tag => {\n      md.block.bbcode.ruler.push(tag, {\n        tag,\n        replace: function (state, tagInfo, content) {\n          let ol = tag === \"ol\" || tag === \"list\" && tagInfo.attrs._default;\n          let token;\n          if (ol) {\n            token = state.push(\"ordered_list_open\", \"ol\", 1);\n            if (tagInfo.attrs._default) {\n              token.attrs = [[\"type\", tagInfo.attrs._default]];\n            }\n          } else {\n            state.push(\"bullet_list_open\", \"ul\", 1);\n          }\n          let lines = content.split(\"\\n\");\n          let list = [null];\n          let index = 0;\n          for (let i = 0; i < lines.length; i++) {\n            let line = lines[i];\n            let match = line.match(/^\\s*\\[?\\*\\]?(.*)/);\n            if (match) {\n              index++;\n              list[index] = match[1];\n              continue;\n            }\n            match = line.match(/\\s*\\[li\\](.*)\\[\\/li\\]\\s*$/);\n            if (match) {\n              index++;\n              list[index] = match[1];\n              continue;\n            }\n            if (list[index]) {\n              list[index] += \"\\n\" + line;\n            } else {\n              list[index] = line;\n            }\n          }\n          list.forEach(li => {\n            if (li !== null) {\n              state.push(\"list_item_open\", \"li\", 1);\n              // a bit lazy, we could use a block parser here\n              // but it means a lot of fussing with line marks\n              token = state.push(\"inline\", \"\", 0);\n              token.content = li;\n              token.children = [];\n              state.push(\"list_item_close\", \"li\", -1);\n            }\n          });\n          if (ol) {\n            state.push(\"ordered_list_close\", \"ol\", -1);\n          } else {\n            state.push(\"bullet_list_close\", \"ul\", -1);\n          }\n          return true;\n        }\n      });\n    });\n  }\n  function setup(helper) {\n    helper.allowList([\"div.highlight\", \"span.highlight\", \"div.sepquote\", \"span.smallfont\", \"blockquote.indent\", \"ol[type=*]\"]);\n    helper.allowList({\n      custom(tag, name, value) {\n        if (tag === \"span\" && name === \"style\") {\n          return /^(font-size:(xx-small|x-small|small|medium|large|x-large|xx-large|[0-9]{1,3}%)|background-color:#?[a-zA-Z0-9]+|color:#?[a-zA-Z0-9]+|font-family:'[a-zA-Z0-9\\s-]+')$/.exec(value);\n        }\n        if (tag === \"div\" && name === \"style\") {\n          return /^text-align:(center|left|right)$/.exec(value);\n        }\n      }\n    });\n    helper.registerOptions(opts => {\n      opts.features[\"bbcode\"] = true;\n    });\n    helper.registerPlugin(setupMarkdownIt);\n  }\n});"],"mappings":"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","ignoreList":[]}