{"version":3,"sources":["settings.js","discourse/templates/connectors/after-topic-progress/d-toc-mini.js","discourse/connectors/after-topic-progress/d-toc-mini.js","discourse/templates/connectors/below-docs-topic/d-toc-wrapper.js","discourse/templates/connectors/topic-navigation/d-toc-wrapper.js","discourse/initializers/disco-toc-composer.js","discourse/initializers/disco-toc-main.js"],"names":["window","require","registerSettings","minimum_trust_level_to_create_TOC","composer_toc_text","table_of_contents_icon","anchor_icon","auto_TOC_categories","auto_TOC_tags","TOC_min_heading","theme_uploads","define","_exports","_templateFactory","Object","defineProperty","value","default","_default","createTemplateFactory","id","block","moduleName","isStrictMode","getObjectForTheme","actions","showTOCOverlay","document","querySelector","classList","toggle","_I18n","_pluginApi","settings","name","initialize","withPluginApi","api","currentUser","getCurrentUser","minimumTL","trust_level","translations","currentLocale","js","composer","contains_dtoc","modifyClass","pluginId","insertDtoc","this","get","applySurround","addToolbarPopupMenuOptionsCallback","controller","action","icon","label","key","condition","_domUtils","_offsetCalculator","_iconLibrary","_runloop","_utilities","autoTocCategoryIds","split","map","parseInt","autoTocTags","decorateCookedElement","el","helper","post","getModel","post_number","topicCategory","topic","category_id","topicTags","tags","hasTOCmarkup","tocCategory","includes","tocTag","some","tag","body","remove","dTocHeadingSelectors","headings","querySelectorAll","length","forEach","h","index","suffix","slugify","textContent","getAttribute","nodeName","setAttribute","add","insertTOC","later","onlyStream","afterAdopt","onAppEvent","args","updateTOCSidebar","postIndex","cleanupStream","removeEventListener","clickTOC","closestHeadingDistance","closestHeading","heading","distance","Math","abs","offset","top","headerOffset","scrollY","listItem","anchor","parentElement","selector","filter","result","matchesSelector","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","call","push","parentsUntil","liParent","dToc","createElement","innerHTML","t","iconHTML","existing","replaceChild","appendChild","buildTOC","Array","from","addEventListener","e","className","contains","target","closest","hasAttribute","scrollTo","behavior","preventDefault","rect","getBoundingClientRect","bottom","primaryH","tagName","primaryHeadings","n","nextIndex","primaryHeading","ul","li","buildItem","currentIndex","indexOf","subIndex","subUl","lastChild","subLi","node","clonedNode","cloneNode","toLowerCase","innerText","trim"],"mappings":"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","sourceRoot":"theme-23/","sourcesContent":["(function() {\n  if ('require' in window) {\n    require(\"discourse/lib/theme-settings-store\").registerSettings(23, {\"minimum_trust_level_to_create_TOC\":0,\"composer_toc_text\":\"This topic will contain a table of contents\",\"table_of_contents_icon\":\"align-left\",\"anchor_icon\":\"hashtag\",\"auto_TOC_categories\":\"5|7|6|8|4\",\"auto_TOC_tags\":\"\",\"TOC_min_heading\":3,\"theme_uploads\":{\"icons-sprite\":\"/uploads/default/original/1X/80ed408554201b1aea5b03b7b3a2ab0b0be0a012.svg\"}});\n  }\n})();\n","if ('define' in window) {\ndefine(\"discourse/theme-23/discourse/templates/connectors/after-topic-progress/d-toc-mini\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{d-button\n    class=\"btn-primary\"\n    action=(action \"showTOCOverlay\")\n    label=(theme-prefix \"table_of_contents\")\n  }}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[[1,[28,[35,0],null,[[\\\"class\\\",\\\"action\\\",\\\"label\\\"],[\\\"btn-primary\\\",[28,[37,1],[[30,0],\\\"showTOCOverlay\\\"],null],[28,[37,2],[23,\\\"table_of_contents\\\"],null]]]]]],[],false,[\\\"d-button\\\",\\\"action\\\",\\\"theme-prefix\\\"]]\",\n    \"moduleName\": \"discourse/theme-23/discourse/templates/connectors/after-topic-progress/d-toc-mini\",\n    \"isStrictMode\": false\n  });\n  _exports.default = _default;\n});\n}\n","if ('define' in window) {\ndefine(\"discourse/theme-23/connectors/after-topic-progress/d-toc-mini\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const settings = require(\"discourse/lib/theme-settings-store\").getObjectForTheme(23);\n  const themePrefix = key => `theme_translations.23.${key}`;\n  var _default = {\n    actions: {\n      showTOCOverlay() {\n        document.querySelector(\".d-toc-wrapper\").classList.toggle(\"overlay\");\n      }\n    }\n  };\n  _exports.default = _default;\n});\n}\n","if ('define' in window) {\ndefine(\"discourse/theme-23/discourse/templates/connectors/below-docs-topic/d-toc-wrapper\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! Docs TOC placeholder }}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[],[],false,[]]\",\n    \"moduleName\": \"discourse/theme-23/discourse/templates/connectors/below-docs-topic/d-toc-wrapper\",\n    \"isStrictMode\": false\n  });\n  _exports.default = _default;\n});\n}\n","if ('define' in window) {\ndefine(\"discourse/theme-23/discourse/templates/connectors/topic-navigation/d-toc-wrapper\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{! TOC placeholder }}\n  */\n  {\n    \"id\": null,\n    \"block\": \"[[],[],false,[]]\",\n    \"moduleName\": \"discourse/theme-23/discourse/templates/connectors/topic-navigation/d-toc-wrapper\",\n    \"isStrictMode\": false\n  });\n  _exports.default = _default;\n});\n}\n","if ('define' in window) {\ndefine(\"discourse/theme-23/initializers/disco-toc-composer\", [\"exports\", \"I18n\", \"discourse/lib/plugin-api\"], function (_exports, _I18n, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const settings = require(\"discourse/lib/theme-settings-store\").getObjectForTheme(23);\n  const themePrefix = key => `theme_translations.23.${key}`;\n  var _default = {\n    name: \"disco-toc-composer\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"1.0.0\", api => {\n        const currentUser = api.getCurrentUser();\n        if (!currentUser) {\n          return;\n        }\n        const minimumTL = settings.minimum_trust_level_to_create_TOC;\n        if (currentUser.trust_level >= minimumTL) {\n          if (!_I18n.default.translations[_I18n.default.currentLocale()].js.composer) {\n            _I18n.default.translations[_I18n.default.currentLocale()].js.composer = {};\n          }\n          _I18n.default.translations[_I18n.default.currentLocale()].js.composer.contains_dtoc = \" \";\n          api.modifyClass(\"controller:composer\", {\n            pluginId: \"DiscoTOC\",\n            actions: {\n              insertDtoc() {\n                this.get(\"toolbarEvent\").applySurround(`<div data-theme-toc=\"true\">`, `</div>`, \"contains_dtoc\");\n              }\n            }\n          });\n          api.addToolbarPopupMenuOptionsCallback(controller => {\n            return {\n              action: \"insertDtoc\",\n              icon: \"align-left\",\n              label: themePrefix(\"insert_table_of_contents\"),\n              condition: controller.get(\"model.topicFirstPost\")\n            };\n          });\n        }\n      });\n    }\n  };\n  _exports.default = _default;\n});\n}\n","if ('define' in window) {\ndefine(\"discourse/theme-23/initializers/disco-toc-main\", [\"exports\", \"discourse-common/utils/dom-utils\", \"discourse/lib/offset-calculator\", \"discourse-common/lib/icon-library\", \"@ember/runloop\", \"discourse/lib/utilities\", \"discourse/lib/plugin-api\", \"I18n\"], function (_exports, _domUtils, _offsetCalculator, _iconLibrary, _runloop, _utilities, _pluginApi, _I18n) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const settings = require(\"discourse/lib/theme-settings-store\").getObjectForTheme(23);\n  const themePrefix = key => `theme_translations.23.${key}`;\n  var _default = {\n    name: \"disco-toc-main\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"1.0.0\", api => {\n        const autoTocCategoryIds = settings.auto_TOC_categories.split(\"|\").map(id => parseInt(id, 10));\n        const autoTocTags = settings.auto_TOC_tags.split(\"|\");\n        api.decorateCookedElement((el, helper) => {\n          if (helper) {\n            const post = helper.getModel();\n            if (post?.post_number !== 1) {\n              return;\n            }\n            const topicCategory = helper.getModel().topic.category_id;\n            const topicTags = helper.getModel().topic.tags;\n            const hasTOCmarkup = el?.querySelector(`[data-theme-toc=\"true\"]`);\n            const tocCategory = autoTocCategoryIds?.includes(topicCategory);\n            const tocTag = topicTags?.some(tag => autoTocTags?.includes(tag));\n            if (!hasTOCmarkup && !tocCategory && !tocTag) {\n              document.body.classList.remove(\"d-toc-timeline-visible\");\n              return;\n            }\n            let dTocHeadingSelectors = \":scope > h1, :scope > h2, :scope > h3, :scope > h4, :scope > h5\";\n            const headings = el.querySelectorAll(dTocHeadingSelectors);\n            if (headings.length < settings.TOC_min_heading) {\n              return;\n            }\n            headings.forEach((h, index) => {\n              // suffix uses index for non-Latin languages\n              const suffix = (0, _utilities.slugify)(h.textContent) || index;\n              const id = h.getAttribute(\"id\") || (0, _utilities.slugify)(`toc-${h.nodeName}-${suffix}`);\n              h.setAttribute(\"id\", id);\n              h.setAttribute(\"data-d-toc\", id);\n              h.classList.add(\"d-toc-post-heading\");\n            });\n            el.classList.add(\"d-toc-cooked\");\n            if (document.querySelector(\".d-toc-wrapper\")) {\n              this.insertTOC(headings);\n            } else {\n              // try again if decoration happens while outlet is not rendered\n              // this is due to core resetting `canRender` for topic-navigation\n              // when transitioning between topics\n              (0, _runloop.later)(() => {\n                if (document.querySelector(\".d-toc-wrapper\")) {\n                  this.insertTOC(headings);\n                }\n              }, 300);\n            }\n          }\n        }, {\n          id: \"disco-toc\",\n          onlyStream: true,\n          afterAdopt: true\n        });\n        api.onAppEvent(\"topic:current-post-changed\", args => {\n          if (!document.querySelector(\".d-toc-cooked\")) {\n            return;\n          }\n          if (args.post.post_number === 1) {\n            document.body.classList.add(\"d-toc-timeline-visible\");\n          } else {\n            document.body.classList.remove(\"d-toc-timeline-visible\");\n          }\n        });\n        api.onAppEvent(\"docs-topic:current-post-scrolled\", () => {\n          this.updateTOCSidebar();\n        });\n        api.onAppEvent(\"topic:current-post-scrolled\", args => {\n          if (args.postIndex !== 1) {\n            return;\n          }\n          this.updateTOCSidebar();\n        });\n        api.cleanupStream(() => {\n          document.body.classList.remove(\"d-toc-timeline-visible\");\n          document.removeEventListener(\"click\", this.clickTOC, false);\n        });\n      });\n    },\n    updateTOCSidebar() {\n      if (!document.querySelector(\".d-toc-cooked\")) {\n        return;\n      }\n      const headings = document.querySelectorAll(\".d-toc-post-heading\");\n      let closestHeadingDistance = null;\n      let closestHeading = null;\n      headings.forEach(heading => {\n        const distance = Math.abs(_domUtils.default.offset(heading).top - (0, _offsetCalculator.headerOffset)() - window.scrollY);\n        if (closestHeadingDistance == null || distance < closestHeadingDistance) {\n          closestHeadingDistance = distance;\n          closestHeading = heading;\n        } else {\n          return false;\n        }\n      });\n      if (closestHeading) {\n        document.querySelectorAll(\"#d-toc li\").forEach(listItem => {\n          listItem.classList.remove(\"active\");\n          listItem.classList.remove(\"direct-active\");\n        });\n        const anchor = document.querySelector(`#d-toc a[data-d-toc=\"${closestHeading.getAttribute(\"id\")}\"]`);\n        if (!anchor) {\n          return;\n        }\n        anchor.parentElement.classList.add(\"direct-active\");\n        parentsUntil(anchor, \"#d-toc\", \".d-toc-item\").forEach(liParent => {\n          liParent.classList.add(\"active\");\n        });\n      }\n    },\n    insertTOC(headings) {\n      const dToc = document.createElement(\"div\");\n      dToc.classList.add(\"d-toc-main\");\n      dToc.innerHTML = `<div class=\"d-toc-icons\">\n              <a href=\"#\" class=\"scroll-to-bottom\" title=\"${_I18n.default.t(themePrefix(\"post_bottom_tooltip\"))}\">${(0, _iconLibrary.iconHTML)(\"downward\")}</a>\n              <a href=\"#\" class=\"d-toc-close\">${(0, _iconLibrary.iconHTML)(\"times\")}</a></div>`;\n      const existing = document.querySelector(\".d-toc-wrapper .d-toc-main\");\n      if (existing) {\n        document.querySelector(\".d-toc-wrapper\").replaceChild(dToc, existing);\n      } else {\n        document.querySelector(\".d-toc-wrapper\").appendChild(dToc);\n      }\n      const result = this.buildTOC(Array.from(headings));\n      document.querySelector(\".d-toc-main\").appendChild(result);\n      document.addEventListener(\"click\", this.clickTOC, false);\n    },\n    clickTOC(e) {\n      const classNames = [\"d-toc-timeline-visible\", \"archetype-docs-topic\"];\n      if (!classNames.some(className => document.body.classList.contains(className))) {\n        return;\n      }\n\n      // link to each heading\n      if (e.target.closest(\".d-toc-item\") && e.target.hasAttribute(\"data-d-toc\")) {\n        const target = `#${e.target.getAttribute(\"data-d-toc\")}`;\n        const scrollTo = _domUtils.default.offset(document.querySelector(`.d-toc-cooked ${target}`)).top;\n        window.scrollTo({\n          top: scrollTo - (0, _offsetCalculator.headerOffset)() - 10,\n          behavior: \"smooth\"\n        });\n        document.querySelector(\".d-toc-wrapper\").classList.remove(\"overlay\");\n        e.preventDefault();\n        return false;\n      }\n      if (e.target.closest(\"a\")) {\n        // link to first post bottom\n        if (e.target.closest(\"a\").classList.contains(\"scroll-to-bottom\")) {\n          const rect = document.querySelector(\".d-toc-cooked\").getBoundingClientRect();\n          if (rect) {\n            window.scrollTo({\n              top: rect.bottom + window.scrollY - (0, _offsetCalculator.headerOffset)() - 10,\n              behavior: \"smooth\"\n            });\n            e.preventDefault();\n            return false;\n          }\n        }\n\n        // close overlay\n        if (e.target.closest(\"a\").classList.contains(\"d-toc-close\")) {\n          document.querySelector(\".d-toc-wrapper\").classList.remove(\"overlay\");\n          e.preventDefault();\n          return false;\n        }\n      }\n      if (!document.querySelector(\".d-toc-wrapper.overlay\")) {\n        return;\n      }\n\n      // clicking outside overlay\n      if (!e.target.closest(\".d-toc-wrapper.overlay\")) {\n        document.querySelector(\".d-toc-wrapper\").classList.remove(\"overlay\");\n      }\n    },\n    buildTOC(headings) {\n      const result = document.createElement(\"div\");\n      result.setAttribute(\"id\", \"d-toc\");\n      const primaryH = headings[0].tagName;\n      const primaryHeadings = headings.filter(n => n.tagName === primaryH);\n      let nextIndex = headings.length;\n      primaryHeadings.forEach((primaryHeading, index) => {\n        const ul = document.createElement(\"ul\");\n        ul.classList.add(\"d-toc-heading\");\n        let li = this.buildItem(primaryHeading);\n        ul.appendChild(li);\n        const currentIndex = headings.indexOf(primaryHeading);\n        if (primaryHeadings[index + 1]) {\n          nextIndex = headings.indexOf(primaryHeadings[index + 1]);\n        } else {\n          nextIndex = headings.length;\n        }\n        headings.forEach((heading, subIndex) => {\n          if (subIndex > currentIndex && subIndex < nextIndex) {\n            let subUl = li.lastChild;\n            if (subUl.tagName !== \"UL\") {\n              subUl = subUl.appendChild(document.createElement(\"ul\"));\n              subUl.classList.add(\"d-toc-sublevel\");\n              li.appendChild(subUl);\n            }\n            let subLi = this.buildItem(heading);\n            subUl.appendChild(subLi);\n          }\n        });\n        result.appendChild(ul);\n      });\n      return result;\n    },\n    buildItem(node) {\n      let clonedNode = node.cloneNode(true);\n      clonedNode.querySelector(\"span.clicks\")?.remove();\n      const li = document.createElement(\"li\");\n      li.classList.add(\"d-toc-item\");\n      li.classList.add(`d-toc-${clonedNode.tagName.toLowerCase()}`);\n      const id = clonedNode.getAttribute(\"id\");\n      li.innerHTML = `<a href=\"#\" data-d-toc=\"${id}\"></a>`;\n      li.querySelector(\"a\").innerText = clonedNode.textContent.trim();\n      clonedNode.remove();\n      return li;\n    }\n  };\n  _exports.default = _default;\n  function parentsUntil(el, selector, filter) {\n    const result = [];\n    const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;\n\n    // match start from parent\n    el = el.parentElement;\n    while (el && !matchesSelector.call(el, selector)) {\n      if (!filter) {\n        result.push(el);\n      } else {\n        if (matchesSelector.call(el, filter)) {\n          result.push(el);\n        }\n      }\n      el = el.parentElement;\n    }\n    return result;\n  }\n});\n}\n"]}