From 8e5fcb891f8baa720f7f2bcfe4deb86c6a09ca84 Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Sun, 28 Apr 2024 23:45:27 +0100 Subject: [PATCH 1/8] Support Widget display for categories, such as Statistics Widget, Custom Html Widget, Afrux Forum Widgets --- extend.php | 6 +++- js/dist/admin.js | 2 +- js/dist/admin.js.map | 2 +- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- js/src/admin/index.js | 25 ++++++++++++++ js/src/forum/components/CategoriesPage.tsx | 36 ++++++++++++++++--- js/src/forum/index.js | 40 +++++++++++++++------- resources/locale/en.yml | 11 ++++++ 9 files changed, 104 insertions(+), 22 deletions(-) diff --git a/extend.php b/extend.php index 111275e..f08081a 100644 --- a/extend.php +++ b/extend.php @@ -39,7 +39,11 @@ ->serializeToForum('categories.parentRemoveDescription', 'askvortsov-categories.parent-remove-description', 'boolval') ->serializeToForum('categories.parentRemoveStats', 'askvortsov-categories.parent-remove-stats', 'boolval') ->serializeToForum('categories.parentRemoveLastDiscussion', 'askvortsov-categories.parent-remove-last-discussion', 'boolval') - ->serializeToForum('categories.childBareIcon', 'askvortsov-categories.child-bare-icon', 'boolval', true), + ->serializeToForum('categories.childBareIcon', 'askvortsov-categories.child-bare-icon', 'boolval', true) + ->serializeToForum('categories.widgetHeader', 'askvortsov-categories.widget-header', 'boolval', false) + ->serializeToForum('categories.widgetRight', 'askvortsov-categories.widget-right', 'boolval', false) + ->serializeToForum('categories.widgetLeft', 'askvortsov-categories.widget-left', 'boolval', false) + ->serializeToForum('categories.widgetFooter', 'askvortsov-categories.widget-footer', 'boolval', false), (new Extend\ApiController(ListTagsController::class)) ->addOptionalInclude('lastPostedDiscussion.lastPostedUser'), diff --git a/js/dist/admin.js b/js/dist/admin.js index 7401485..fc5dc6a 100644 --- a/js/dist/admin.js +++ b/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var s in a)e.o(a,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:a[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const a=flarum.core.compat["common/extend"],s=flarum.core.compat["admin/components/BasicsPage"];var r=e.n(s);app.initializers.add("askvortsov/flarum-categories",(function(){app.extensionData.for("askvortsov-categories").registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.nav"))}),10).registerSetting({setting:"askvortsov-categories.keep-tags-nav",label:app.translator.trans("askvortsov-categories.admin.labels.keep_tags_nav"),type:"switch"},9).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.layout"))})).registerSetting({setting:"askvortsov-categories.full-page-desktop",label:app.translator.trans("askvortsov-categories.admin.labels.full_page_desktop"),help:app.translator.trans("askvortsov-categories.admin.help.full_page_desktop"),type:"switch"}).registerSetting({setting:"askvortsov-categories.compact-mobile",label:app.translator.trans("askvortsov-categories.admin.labels.compact_mobile_mode"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.parent_display"))})).registerSetting({setting:"askvortsov-categories.parent-remove-icon",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_icon"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-description",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_description"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-stats",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_stats"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-last-discussion",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_last_discussion"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.child_display"))})).registerSetting({setting:"askvortsov-categories.child-bare-icon",label:app.translator.trans("askvortsov-categories.admin.labels.child_bare_icon"),help:app.translator.trans("askvortsov-categories.admin.help.child_bare_icon"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.performance"))})).registerSetting({setting:"askvortsov-categories.small-forum-optimized",label:app.translator.trans("askvortsov-categories.admin.labels.small_forum_optimized"),help:app.translator.trans("askvortsov-categories.admin.help.small_forum_optimized"),type:"switch"}),(0,a.extend)(r().prototype,"homePageItems",(function(e){e.add("categories",{path:"/categories",label:app.translator.trans("askvortsov-categories.admin.basics.categories_label")})}))}))})(),module.exports=t})(); +(()=>{var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var s in a)e.o(a,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:a[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const a=flarum.core.compat["common/extend"],s=flarum.core.compat["admin/components/BasicsPage"];var r=e.n(s);app.initializers.add("askvortsov/flarum-categories",(function(){app.extensionData.for("askvortsov-categories").registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.nav"))}),10).registerSetting({setting:"askvortsov-categories.keep-tags-nav",label:app.translator.trans("askvortsov-categories.admin.labels.keep_tags_nav"),type:"switch"},9).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.layout"))})).registerSetting({setting:"askvortsov-categories.full-page-desktop",label:app.translator.trans("askvortsov-categories.admin.labels.full_page_desktop"),help:app.translator.trans("askvortsov-categories.admin.help.full_page_desktop"),type:"switch"}).registerSetting({setting:"askvortsov-categories.compact-mobile",label:app.translator.trans("askvortsov-categories.admin.labels.compact_mobile_mode"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.parent_display"))})).registerSetting({setting:"askvortsov-categories.parent-remove-icon",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_icon"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-description",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_description"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-stats",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_stats"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-last-discussion",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_last_discussion"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.child_display"))})).registerSetting({setting:"askvortsov-categories.child-bare-icon",label:app.translator.trans("askvortsov-categories.admin.labels.child_bare_icon"),help:app.translator.trans("askvortsov-categories.admin.help.child_bare_icon"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.performance"))})).registerSetting({setting:"askvortsov-categories.small-forum-optimized",label:app.translator.trans("askvortsov-categories.admin.labels.small_forum_optimized"),help:app.translator.trans("askvortsov-categories.admin.help.small_forum_optimized"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.widgets"),m("div",{class:"helpText"},app.translator.trans("askvortsov-categories.admin.help.widgets")))})).registerSetting({setting:"askvortsov-categories.widget-header",label:app.translator.trans("askvortsov-categories.admin.labels.widget_header"),help:app.translator.trans("askvortsov-categories.admin.help.widget_header"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-left",label:app.translator.trans("askvortsov-categories.admin.labels.widget_left"),help:app.translator.trans("askvortsov-categories.admin.help.widget_left"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-right",label:app.translator.trans("askvortsov-categories.admin.labels.widget_right"),help:app.translator.trans("askvortsov-categories.admin.help.widget_right"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-footer",label:app.translator.trans("askvortsov-categories.admin.labels.widget_footer"),help:app.translator.trans("askvortsov-categories.admin.help.widget_footer"),type:"switch"}),(0,a.extend)(r().prototype,"homePageItems",(function(e){e.add("categories",{path:"/categories",label:app.translator.trans("askvortsov-categories.admin.basics.categories_label")})}))}))})(),module.exports=t})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map index 3fdd343..6ca84b9 100644 --- a/js/dist/admin.js.map +++ b/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,+B,aCGxDC,IAAIC,aAAaC,IAAI,gCAAgC,WACnDF,IAAIG,cAAa,IACV,yBACJC,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,4CAAqD,GAAE,IACrIJ,gBACC,CACEK,QAAS,sCACTC,MAAOV,IAAIO,WAAWC,MAAM,oDAC5BG,KAAM,UAER,GAEDP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,+CAAwD,IACtIJ,gBAAgB,CACfK,QAAS,0CACTC,MAAOV,IAAIO,WAAWC,MAAM,wDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,sDAC3BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,uCACTC,MAAOV,IAAIO,WAAWC,MAAM,0DAC5BG,KAAM,WAEPP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,uDAAgE,IAC9IJ,gBAAgB,CACfK,QAAS,2CACTC,MAAOV,IAAIO,WAAWC,MAAM,yDAC5BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,kDACTC,MAAOV,IAAIO,WAAWC,MAAM,gEAC5BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,4CACTC,MAAOV,IAAIO,WAAWC,MAAM,0DAC5BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,sDACTC,MAAOV,IAAIO,WAAWC,MAAM,oEAC5BG,KAAM,WAEPP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,sDAA+D,IAC7IJ,gBAAgB,CACfK,QAAS,wCACTC,MAAOV,IAAIO,WAAWC,MAAM,sDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,oDAC3BG,KAAM,WAEPP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,oDAA6D,IAC3IJ,gBAAgB,CACfK,QAAS,8CACTC,MAAOV,IAAIO,WAAWC,MAAM,4DAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,0DAC3BG,KAAM,YAGVE,EAAAA,EAAAA,QAAOC,IAAAA,UAAsB,iBAAiB,SAACC,GAC7CA,EAAMb,IAAI,aAAc,CACtBc,KAAM,cACNN,MAAOV,IAAIO,WAAWC,MAAM,wDAEhC,GACF,G","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['admin/components/BasicsPage']\"","webpack://@askvortsov/flarum-categories/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/BasicsPage'];","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\n\napp.initializers.add('askvortsov/flarum-categories', () => {\n app.extensionData\n .for('askvortsov-categories')\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.nav')}, 10)\n .registerSetting(\n {\n setting: 'askvortsov-categories.keep-tags-nav',\n label: app.translator.trans('askvortsov-categories.admin.labels.keep_tags_nav'),\n type: 'switch',\n },\n 9\n )\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.layout')})\n .registerSetting({\n setting: 'askvortsov-categories.full-page-desktop',\n label: app.translator.trans('askvortsov-categories.admin.labels.full_page_desktop'),\n help: app.translator.trans('askvortsov-categories.admin.help.full_page_desktop'),\n type: 'switch',\n })\n .registerSetting({\n setting: 'askvortsov-categories.compact-mobile',\n label: app.translator.trans('askvortsov-categories.admin.labels.compact_mobile_mode'),\n type: 'switch',\n })\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.parent_display')})\n .registerSetting({\n setting: 'askvortsov-categories.parent-remove-icon',\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_icon'),\n type: 'switch',\n })\n .registerSetting({\n setting: 'askvortsov-categories.parent-remove-description',\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_description'),\n type: 'switch',\n })\n .registerSetting({\n setting: 'askvortsov-categories.parent-remove-stats',\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_stats'),\n type: 'switch',\n })\n .registerSetting({\n setting: 'askvortsov-categories.parent-remove-last-discussion',\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_last_discussion'),\n type: 'switch',\n })\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.child_display')})\n .registerSetting({\n setting: 'askvortsov-categories.child-bare-icon',\n label: app.translator.trans('askvortsov-categories.admin.labels.child_bare_icon'),\n help: app.translator.trans('askvortsov-categories.admin.help.child_bare_icon'),\n type: 'switch',\n })\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.performance')})\n .registerSetting({\n setting: 'askvortsov-categories.small-forum-optimized',\n label: app.translator.trans('askvortsov-categories.admin.labels.small_forum_optimized'),\n help: app.translator.trans('askvortsov-categories.admin.help.small_forum_optimized'),\n type: 'switch',\n });\n\n extend(BasicsPage.prototype, 'homePageItems', (items) => {\n items.add('categories', {\n path: '/categories',\n label: app.translator.trans('askvortsov-categories.admin.basics.categories_label'),\n });\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","initializers","add","extensionData","registerSetting","m","class","translator","trans","setting","label","type","help","extend","BasicsPage","items","path"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['admin/components/BasicsPage']\"","webpack://@askvortsov/flarum-categories/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/BasicsPage'];","import { extend } from 'flarum/common/extend';\r\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.extensionData\r\n .for('askvortsov-categories')\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.nav')}, 10)\r\n .registerSetting(\r\n {\r\n setting: 'askvortsov-categories.keep-tags-nav',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.keep_tags_nav'),\r\n type: 'switch',\r\n },\r\n 9\r\n )\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.layout')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.full-page-desktop',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.full_page_desktop'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.full_page_desktop'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.compact-mobile',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.compact_mobile_mode'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.parent_display')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-icon',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_icon'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-description',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_description'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-stats',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_stats'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-last-discussion',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_last_discussion'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.child_display')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.child-bare-icon',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.child_bare_icon'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.child_bare_icon'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.performance')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.small-forum-optimized',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.small_forum_optimized'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.small_forum_optimized'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.widgets')}
{app.translator.trans('askvortsov-categories.admin.help.widgets')}
)\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-header',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_header'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_header'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-left',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_left'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_left'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-right',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_right'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_right'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-footer',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_footer'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_footer'),\r\n type: 'switch',\r\n });\r\n\r\n extend(BasicsPage.prototype, 'homePageItems', (items) => {\r\n items.add('categories', {\r\n path: '/categories',\r\n label: app.translator.trans('askvortsov-categories.admin.basics.categories_label'),\r\n });\r\n });\r\n});\r\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","initializers","add","extensionData","registerSetting","m","class","translator","trans","setting","label","type","help","extend","BasicsPage","items","path"],"sourceRoot":""} \ No newline at end of file diff --git a/js/dist/forum.js b/js/dist/forum.js index e8c61ae..edb1309 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>at});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var n=t.n(r);const i=flarum.core.compat["common/Model"];var c=t.n(i);const l=flarum.core.compat["tags/models/Tag"];var u=t.n(l);function d(t,a){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},d(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,d(t,a)}const p=flarum.core.compat["forum/app"];var h=t.n(p);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const y=flarum.core.compat["common/components/LoadingIndicator"];var C=t.n(y);const b=flarum.core.compat["common/helpers/listItems"];var w=t.n(b);const T=flarum.core.compat["common/utils/ItemList"];var k=t.n(T);const N=flarum.core.compat["common/utils/extractText"];var P=t.n(N);const I=flarum.core.compat["common/utils/classList"];var L=t.n(I);const D=flarum.core.compat["tags/utils/sortTags"];var A=t.n(D);const M=flarum.core.compat["tags/helpers/tagLabel"];var x=t.n(M);const _=flarum.core.compat["common/Component"];var S=t.n(_);const O=flarum.core.compat["common/components/Link"];var U=t.n(O);const B=flarum.core.compat["common/helpers/icon"];var j=t.n(B),V=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:L()("StatWidget",{"Categories-compactMobileModeEnabled":!!h().forum.attribute("categories.compactMobile")})},this.content().toArray())},o.content=function(){var t=new(k());return t.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),t.add("label",m("div",{class:"StatWidget-label"},m("span",{className:"Categories-showOnMobile"},j()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),t},a}(S());const W=flarum.core.compat["common/helpers/avatar"];var E=t.n(W);const R=flarum.core.compat["common/helpers/username"];var F=t.n(R);const z=flarum.core.compat["common/helpers/humanTime"];var G=t.n(z);const q=flarum.core.compat["common/utils/string"],H=flarum.core.compat["forum/components/UserCard"];var J=t.n(H),K=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s{var t={n:a=>{var e=a&&a.__esModule?()=>a.default:()=>a;return t.d(e,{a:e}),e},d:(a,e)=>{for(var o in e)t.o(e,o)&&!t.o(a,o)&&Object.defineProperty(a,o,{enumerable:!0,get:e[o]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>at});const e=flarum.core.compat["common/extend"],o=flarum.core.compat["forum/components/IndexPage"];var s=t.n(o);const r=flarum.core.compat["common/components/LinkButton"];var n=t.n(r);const i=flarum.core.compat["common/Model"];var c=t.n(i);const l=flarum.core.compat["tags/models/Tag"];var u=t.n(l);function d(t,a){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},d(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,d(t,a)}const p=flarum.core.compat["forum/app"];var h=t.n(p);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const y=flarum.core.compat["common/components/LoadingIndicator"];var C=t.n(y);const b=flarum.core.compat["common/helpers/listItems"];var w=t.n(b);const T=flarum.core.compat["common/utils/ItemList"];var k=t.n(T);const N=flarum.core.compat["common/utils/extractText"];var I=t.n(N);const P=flarum.core.compat["common/utils/classList"];var L=t.n(P);const A=flarum.core.compat["tags/utils/sortTags"];var D=t.n(A);const x=flarum.core.compat["tags/helpers/tagLabel"];var M=t.n(x);const _=flarum.core.compat["common/Component"];var S=t.n(_);const O=flarum.core.compat["common/components/Link"];var U=t.n(O);const B=flarum.core.compat["common/helpers/icon"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var e=a.prototype;return e.view=function(){return m("div",{class:L()("StatWidget",{"Categories-compactMobileModeEnabled":!!h().forum.attribute("categories.compactMobile")})},this.content().toArray())},e.content=function(){var t=new(k());return t.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),t.add("label",m("div",{class:"StatWidget-label"},m("span",{className:"Categories-showOnMobile"},W()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),t},a}(S());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q),K=function(t){function a(){for(var a,e=arguments.length,o=new Array(e),s=0;s1&&a.children[1].children&&a.children[1].children.forEach((function(a,e){a.attrs.className||(h().forum.attribute("categories.widgetHeader")&&0==e?t.add("header-widget",a,100):h().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",a,0))})),t},e.contentItems=function(){var t=new(k()),a=this.tags.filter((function(t){return null!==t.position()})),e=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:h().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,w()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},a.map((function(t){return Q.component({model:t})}))),e.length?m("div",{className:"TagCloud"},e.map((function(t){return[M()(t,{link:!0})," "]}))):""),50),h().forum.attribute("categories.widgetRight")){var o=s().prototype.view();o.children.length>1&&o.children[1].children.length>1&&3===o.children[1].children[1].children.length&&t.add("widget",o.children[1].children[1].children[2],0)}return t},e.oncreate=function(a){t.prototype.oncreate.call(this,a),h().setTitle(I()(h().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},a}(v());const Y=flarum.core.compat["tags/forum/components/TagsPage"];var Z=t.n(Y);function tt(t,a){var e=app.forum.attribute("categories.keepTagsNav"),o=app.current.matches(X)||app.current.matches(Z());for(var s in t.items)a(s)&&(s.startsWith("tag")?"tags"==s?e||t.remove(s):o&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:X},u().prototype.postCount=c().attribute("postCount"),(0,e.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(n(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(X)||app.current.matches(Z())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(n(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),tt(t,(function(t){return t.startsWith("tag")})),t})),(0,e.extend)(s().prototype,"sidebarItems",(function(t){tt(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const at={"components/CategoriesPage":X,"components/Category":Q,"components/LastDiscussionWidget":K,"components/StatWidget":j}})(),module.exports=a})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index 43ba34b..6523903 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","import Component from 'flarum/common/Component';\nimport icon from 'flarum/common/helpers/icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport classList from 'flarum/common/utils/classList';\nimport app from 'flarum/forum/app';\n\nimport type Mithril from 'mithril';\n\ninterface Attrs {\n count: number;\n icon: string;\n label: Mithril.Children;\n}\n\nexport default class StatWidget extends Component {\n view() {\n return (\n
\n {this.content().toArray()}\n
\n );\n }\n\n content() {\n const items = new ItemList();\n\n items.add('count',
{this.attrs.count}
, 100);\n items.add(\n 'label',\n
\n {icon(this.attrs.icon)}\n {this.attrs.label}\n
,\n 80\n );\n\n return items;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport { truncate } from 'flarum/common/utils/string';\nimport Link from 'flarum/common/components/Link';\nimport UserCard from 'flarum/forum/components/UserCard';\nimport type Discussion from 'flarum/common/models/Discussion';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport type Mithril from 'mithril';\n\ninterface Attrs {\n discussion: Discussion;\n}\n\nexport default class LastDiscussionWidget extends Component {\n /**\n * Whether or not the user hover card is visible.\n */\n cardVisible!: boolean;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.cardVisible = false;\n }\n\n view() {\n const discussion = this.attrs.discussion;\n\n if (!discussion) {\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\n }\n\n const user = discussion.lastPostedUser();\n\n return (\n \n {this.content().toArray()}\n \n );\n }\n\n content() {\n const items = new ItemList();\n\n const discussion = this.attrs.discussion;\n const user = discussion.lastPostedUser();\n\n items.add(\n 'avatar',\n \n {!!user && avatar(user)}\n ,\n 100\n );\n\n items.add(\n 'mainContent',\n
\n
\n {humanTime(discussion.lastPostedAt()!)}{' '}\n \n \n |\n \n {username(user)}\n \n
\n
{truncate(discussion.title(), 26)}
\n
,\n 50\n );\n\n let card: Mithril.Children = null;\n\n if (user && this.cardVisible) {\n card = UserCard.component({\n user,\n className: 'UserCard--popover',\n controlsButtonClassName: 'Button Button--icon Button--flat',\n });\n }\n\n items.add('card',
{card}
, 10);\n\n return items;\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n let timeout: number;\n\n this.$()\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\n clearTimeout(timeout);\n timeout = window.setTimeout(this.showCard.bind(this), 300);\n })\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\n clearTimeout(timeout);\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\n });\n }\n\n onremove(vnode): void {\n super.onremove(vnode);\n\n this.$().off('mouseover mouseout');\n }\n\n /**\n * Show the user card.\n */\n showCard() {\n this.cardVisible = true;\n\n m.redraw();\n\n setTimeout(() => this.$('.UserCard').addClass('in'));\n }\n\n /**\n * Hide the user card.\n */\n hideCard() {\n $('.UserCard').removeClass('in');\n this.cardVisible = false;\n m.redraw();\n }\n}\n","import Component from 'flarum/common/Component';\nimport Link from 'flarum/common/components/Link';\n\nimport icon from 'flarum/common/helpers/icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport sortTags from 'flarum/tags/utils/sortTags';\n\nimport StatWidget from './StatWidget';\nimport LastDiscussionWidget from './LastDiscussionWidget';\nimport app from 'flarum/forum/app';\nimport classList from 'flarum/common/utils/classList';\n\nimport type Mithril from 'mithril';\n\ninterface Attrs {\n model: any;\n parent: any;\n}\n\n/*\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\n * https://github.com/datlechin/flarum-tag-passwords\n * \n */\ninterface TagLocked {\n icon: icon;\n text: string;\n isVisible: boolean;\n}\n\nexport default class Category extends Component {\n tag!: any;\n isChild!: boolean;\n collapsed!: boolean;\n compactMobileMode!: boolean;\n tagLocked!: TagLocked;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n this.tag = this.attrs.model;\n\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\n\n this.collapsed = false;\n\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\n if (typeof this.tag.isUnlocked == 'function') {\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\n this.tagLocked = {\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\n };\n }\n }\n\n window.addEventListener('resize', function () {\n m.redraw();\n });\n }\n\n view() {\n const tag = this.tag;\n\n if (!tag) {\n return null;\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\n return null;\n }\n\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\n\n return (\n \n {this.categoryItems().toArray()}\n \n );\n }\n\n categoryItems() {\n const items = new ItemList();\n const tag = this.tag;\n\n const children = this.isChild ? [] : sortTags(tag.children() || []);\n\n items.add(\n 'link',\n \n {this.contentItems().toArray()}\n ,\n 100\n );\n\n if (!this.compactMobileMode && !this.isChild) {\n items.add(\n 'children',\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\n 10\n );\n }\n\n return items;\n }\n\n contentItems() {\n const items = new ItemList();\n\n const tag = this.tag;\n const children = this.isChild ? [] : sortTags(tag.children() || []);\n\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\n\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\n\n const childrenInContent = !this.isChild && this.compactMobileMode;\n\n if (childrenInContent && !this.collapsed) {\n items.add(\n 'children',\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\n 10\n );\n }\n\n return items;\n }\n\n alignStartItems() {\n const items = new ItemList();\n\n const tag = this.tag;\n const children = this.isChild ? [] : sortTags(tag.children() || []);\n\n items.add('icon', {this.iconItems().toArray()}, 100);\n\n items.add('main',
{this.mainItems().toArray()}
, 50);\n\n if (!!children.length) {\n items.add(\n 'toggleArrow',\n {\n this.toggleArrow(e);\n }}\n >\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\n ,\n 10\n );\n }\n\n return items;\n }\n\n alignEndItems() {\n const items = new ItemList();\n\n if (this.tagLocked) {\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\n return items;\n }\n\n const tag = this.tag;\n\n items.add('stats',
{this.statItems().toArray()}
, 100);\n\n items.add(\n 'lastDiscussion',\n
{this.lastDiscussionItems().toArray()}
,\n 50\n );\n\n return items;\n }\n\n lockedItems() {\n const items = new ItemList();\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\n items.add(\n 'icon',\n \n {\n \n }\n {this.tagLocked.icon}\n ,\n 10\n );\n items.add(\n 'LockedText',\n
{this.tagLocked.text}
,\n 50\n );\n return items;\n }\n\n iconItems() {\n const items = new ItemList();\n\n if (this.tag.icon() && this.isChild) {\n const style: Record = {};\n\n let iconClasses = 'fa-stack-1x CategoryIcon';\n\n if (app.forum.attribute('categories.childBareIcon')) {\n iconClasses += ' NoBackgroundCategoryIcon';\n style.color = '#fafafa';\n } else {\n style.color = this.tag.color();\n }\n\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\n\n items.add(\n 'icon',\n \n {!!app.forum.attribute('categories.childBareIcon') && (\n \n )}\n {icon(this.tag.icon(), { className: iconClasses, style: style })}\n ,\n 10\n );\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\n\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\n }\n\n return items;\n }\n\n mainItems() {\n const items = new ItemList();\n\n items.add('name',

{this.tag.name()}

, 15);\n\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\n items.add('description',
{this.tag.description()}
, 10);\n }\n\n return items;\n }\n\n statItems() {\n const items = new ItemList();\n\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\n items.add(\n 'discussionCount',\n StatWidget.component({\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\n icon: 'fas fa-file-alt',\n }),\n 15\n );\n\n items.add(\n 'postCount',\n StatWidget.component({\n count: Intl.NumberFormat().format(this.tag.postCount()),\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\n icon: 'fas fa-comment',\n }),\n 10\n );\n }\n\n return items;\n }\n\n lastDiscussionItems() {\n const items = new ItemList();\n\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\n items.add(\n 'lastDiscussion',\n LastDiscussionWidget.component({\n discussion: this.tag.lastPostedDiscussion(),\n }),\n 10\n );\n }\n\n return items;\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\n $(this).addClass('hover');\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\n }\n });\n\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\n $(this).removeClass('hover');\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\n }\n });\n }\n\n onremove(vnode: Mithril.VnodeDOM): void {\n super.onremove(vnode);\n\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\n }\n\n toggleArrow(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.collapsed = !this.collapsed;\n m.redraw();\n }\n}\n","import app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport classList from 'flarum/common/utils/classList';\n\nimport sortTags from 'flarum/tags/utils/sortTags';\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\n\nimport Category from './Category';\n\nexport default class CategoriesPage extends Page {\n tags!: any[];\n loading!: boolean;\n\n oninit(vnode) {\n super.oninit(vnode);\n\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\n\n this.tags = [];\n\n const preloaded = app.preloadedApiDocument();\n\n if (preloaded) {\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\n return;\n }\n\n this.loading = true;\n\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\n\n this.loading = false;\n\n m.redraw();\n });\n }\n\n view() {\n if (this.loading) {\n return ;\n }\n\n const classes = ['CategoriesPage'];\n\n return
{this.pageItems().toArray()}
;\n }\n\n pageItems() {\n const items = new ItemList();\n\n items.add('hero', IndexPage.prototype.hero(), 100);\n\n items.add(\n 'container',\n
\n {this.containerItems().toArray()}\n
,\n 50\n );\n\n return items;\n }\n\n containerItems() {\n const items = new ItemList();\n\n const pinned = this.tags.filter((tag) => tag.position() !== null);\n const cloud = this.tags.filter((tag) => tag.position() === null);\n\n items.add(\n 'sideNav',\n ,\n 100\n );\n\n items.add(\n 'categoriesList',\n
\n
    \n {pinned.map((tag) => {\n return Category.component({ model: tag });\n })}\n
\n\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\n
,\n 50\n );\n\n return items;\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport Model from 'flarum/common/Model';\nimport Tag from 'flarum/tags/models/Tag';\nimport CategoriesPage from './components/CategoriesPage';\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\nimport Category from './components/Category';\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\nimport StatWidget from './components/StatWidget';\n\nfunction pruneIndexNav(items, func) {\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\n\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\n for (const item in items.items) {\n if (func(item)) {\n if(item == 'tags') {\n /*\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\n */\n if (!isTagsPageVisible) {\n items.remove(item);\n }\n } else {\n /*\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\n */\n if (isCustomTagsHidden) {\n items.remove(item);\n }\n }\n }\n }\n}\n\napp.initializers.add('askvortsov/flarum-categories', () => {\n app.routes.categories = {\n path: '/categories',\n component: CategoriesPage,\n };\n\n Tag.prototype.postCount = Model.attribute('postCount');\n\n extend(IndexPage.prototype, 'navItems', function (items) {\n items.add(\n 'categories',\n \n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\n ,\n -9.5\n );\n\n if (items.has('moreTags')) {\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\n }\n\n pruneIndexNav(items, (item) => item.startsWith('tag'));\n\n return items;\n });\n\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\n return items;\n });\n});\n\nexport default {\n 'components/CategoriesPage': CategoriesPage,\n 'components/Category': Category,\n 'components/LastDiscussionWidget': LastDiscussionWidget,\n 'components/StatWidget': StatWidget,\n};\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","content","toArray","items","ItemList","add","attrs","count","className","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","tag","isChild","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","backgroundColor","color","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace","startsWith"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = 'fa-stack-1x CategoryIcon';\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n iconClasses += ' NoBackgroundCategoryIcon';\r\n style.color = '#fafafa';\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: iconClasses, style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n const classes = ['CategoriesPage', 'container'];\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container', this.containerItems().toArray(), 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\r\n 'container',\r\n
\r\n {this.contentItems().toArray()}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","content","toArray","items","ItemList","add","attrs","count","className","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","tag","isChild","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","backgroundColor","color","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/admin/index.js b/js/src/admin/index.js index ef35752..aa224fc 100644 --- a/js/src/admin/index.js +++ b/js/src/admin/index.js @@ -59,6 +59,31 @@ app.initializers.add('askvortsov/flarum-categories', () => { label: app.translator.trans('askvortsov-categories.admin.labels.small_forum_optimized'), help: app.translator.trans('askvortsov-categories.admin.help.small_forum_optimized'), type: 'switch', + }) + .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.widgets')}
{app.translator.trans('askvortsov-categories.admin.help.widgets')}
) + .registerSetting({ + setting: 'askvortsov-categories.widget-header', + label: app.translator.trans('askvortsov-categories.admin.labels.widget_header'), + help: app.translator.trans('askvortsov-categories.admin.help.widget_header'), + type: 'switch', + }) + .registerSetting({ + setting: 'askvortsov-categories.widget-left', + label: app.translator.trans('askvortsov-categories.admin.labels.widget_left'), + help: app.translator.trans('askvortsov-categories.admin.help.widget_left'), + type: 'switch', + }) + .registerSetting({ + setting: 'askvortsov-categories.widget-right', + label: app.translator.trans('askvortsov-categories.admin.labels.widget_right'), + help: app.translator.trans('askvortsov-categories.admin.help.widget_right'), + type: 'switch', + }) + .registerSetting({ + setting: 'askvortsov-categories.widget-footer', + label: app.translator.trans('askvortsov-categories.admin.labels.widget_footer'), + help: app.translator.trans('askvortsov-categories.admin.help.widget_footer'), + type: 'switch', }); extend(BasicsPage.prototype, 'homePageItems', (items) => { diff --git a/js/src/forum/components/CategoriesPage.tsx b/js/src/forum/components/CategoriesPage.tsx index 99dc3e1..2f9cbe6 100644 --- a/js/src/forum/components/CategoriesPage.tsx +++ b/js/src/forum/components/CategoriesPage.tsx @@ -46,7 +46,7 @@ export default class CategoriesPage extends Page { return ; } - const classes = ['CategoriesPage']; + const classes = ['CategoriesPage', 'container']; return
{this.pageItems().toArray()}
; } @@ -56,18 +56,38 @@ export default class CategoriesPage extends Page { items.add('hero', IndexPage.prototype.hero(), 100); + items.add('container', this.containerItems().toArray(), 50); + + return items; + } + + containerItems() { + const items = new ItemList(); + const indexPage = IndexPage.prototype.view(); items.add( 'container',
- {this.containerItems().toArray()} + {this.contentItems().toArray()}
, 50 ); - + // Only check for widget for the header and footer if enable in the settings + if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) { + indexPage.children[1].children.forEach((child, index) => { + if (!child.attrs.className) { + // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer + if (app.forum.attribute('categories.widgetHeader') && index == 0) { + items.add('header-widget', child, 100); + } else if (app.forum.attribute('categories.widgetFooter')) { + items.add('footer-widget', child, 0); + } + } + }); + } return items; } - containerItems() { + contentItems() { const items = new ItemList(); const pinned = this.tags.filter((tag) => tag.position() !== null); @@ -94,7 +114,13 @@ export default class CategoriesPage extends Page { , 50 ); - + // Only check for widget for the right if enable in the settings + if (app.forum.attribute('categories.widgetRight')) { + const indexPage = IndexPage.prototype.view(); + if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) { + items.add('widget', indexPage.children[1].children[1].children[2], 0); + } + } return items; } diff --git a/js/src/forum/index.js b/js/src/forum/index.js index e32f1c7..5162f1f 100644 --- a/js/src/forum/index.js +++ b/js/src/forum/index.js @@ -8,6 +8,8 @@ import TagsPage from 'flarum/tags/forum/components/TagsPage'; import Category from './components/Category'; import LastDiscussionWidget from './components/LastDiscussionWidget'; import StatWidget from './components/StatWidget'; +import sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets'; + function pruneIndexNav(items, func) { const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav'); @@ -15,24 +17,34 @@ function pruneIndexNav(items, func) { const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)); for (const item in items.items) { if (func(item)) { - if(item == 'tags') { - /* - * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings. - * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on - */ - if (!isTagsPageVisible) { - items.remove(item); + if(item.startsWith('tag')) { + if(item == 'tags') { + /* + * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings. + * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on + */ + if (!isTagsPageVisible) { + items.remove(item); + } + } else { + /* + * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage + */ + if (isCustomTagsHidden) { + items.remove(item); + } } } else { /* - * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage + * Remove widget on the left side if disabled from settings */ - if (isCustomTagsHidden) { + if (!app.forum.attribute('categories.widgetLeft')) { items.remove(item); } } } } + return items; } app.initializers.add('askvortsov/flarum-categories', () => { @@ -52,8 +64,13 @@ app.initializers.add('askvortsov/flarum-categories', () => { -9.5 ); - if (items.has('moreTags')) { - items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')}); + if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) { + // There is not need to display More Tags button for Categories or Tags Page + items.remove('moreTags'); + } else { + if (items.has('moreTags')) { + items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')}); + } } pruneIndexNav(items, (item) => item.startsWith('tag')); @@ -63,7 +80,6 @@ app.initializers.add('askvortsov/flarum-categories', () => { extend(IndexPage.prototype, 'sidebarItems', function (items) { pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav'); - return items; }); }); diff --git a/resources/locale/en.yml b/resources/locale/en.yml index b544c27..db1b08f 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -12,16 +12,27 @@ askvortsov-categories: parent_remove_stats: Hide stats for top-level tags? parent_remove_last_discussion: Hide most recent discussions for top-level tags? small_forum_optimized: Optimize for small forums? + widget_header: Header + widget_right: Right Sidebar + widget_left: Left Sidebar + widget_footer: Footer help: child_bare_icon: Should icons on child categories be displayed without a circular background? full_page_desktop: Should the sidebar nav menu be collapsed to a row (like on the traditional tags page)? This will also hide widgets (such as Friends of Flarum Forum Statistics) from the categories page navbar. small_forum_optimized: This will give more accurate discussion/post counts, but will slow medium and large forums dramatically. + widgets: Continue to use widgets on the Categories Page, for example Statistics Widget, Custom Html Widget, Forum Stats Widget. + widget_header: Example Afrux Forum Widgets (such as News Widget, Forum Stats Widget, Top Posters Widget, Online Users Widget). + widget_right: Example Afrux Forum Widgets, Custom Html Widget + widget_left: Example Forum Statistics Widget, Afrux Forum Widgets + widget_footer: Example Afrux Forum Widgets + headings: nav: Navigation layout: Layout parent_display: Parent Category Display child_display: Child Category Display performance: Performance + widgets: Widgets Display title: Categories Settings forum: From efbfb1143e8a902df351cb5d207787d2cacb3f92 Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Mon, 29 Apr 2024 03:32:41 +0100 Subject: [PATCH 2/8] Fix #25 Use textContrastClass to switch between white and black font color depending on the color of the tag and amend the style of the sub heading with filter brightness for different color contrast --- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- js/src/forum/components/Category.tsx | 17 +++++--- .../forum/components/LastDiscussionWidget.tsx | 15 +++++-- js/src/forum/components/StatWidget.tsx | 3 +- resources/less/forum.less | 43 ------------------- 6 files changed, 28 insertions(+), 54 deletions(-) diff --git a/js/dist/forum.js b/js/dist/forum.js index edb1309..56dd401 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var e=a&&a.__esModule?()=>a.default:()=>a;return t.d(e,{a:e}),e},d:(a,e)=>{for(var o in e)t.o(e,o)&&!t.o(a,o)&&Object.defineProperty(a,o,{enumerable:!0,get:e[o]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>at});const e=flarum.core.compat["common/extend"],o=flarum.core.compat["forum/components/IndexPage"];var s=t.n(o);const r=flarum.core.compat["common/components/LinkButton"];var n=t.n(r);const i=flarum.core.compat["common/Model"];var c=t.n(i);const l=flarum.core.compat["tags/models/Tag"];var u=t.n(l);function d(t,a){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},d(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,d(t,a)}const p=flarum.core.compat["forum/app"];var h=t.n(p);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const y=flarum.core.compat["common/components/LoadingIndicator"];var C=t.n(y);const b=flarum.core.compat["common/helpers/listItems"];var w=t.n(b);const T=flarum.core.compat["common/utils/ItemList"];var k=t.n(T);const N=flarum.core.compat["common/utils/extractText"];var I=t.n(N);const P=flarum.core.compat["common/utils/classList"];var L=t.n(P);const A=flarum.core.compat["tags/utils/sortTags"];var D=t.n(A);const x=flarum.core.compat["tags/helpers/tagLabel"];var M=t.n(x);const _=flarum.core.compat["common/Component"];var S=t.n(_);const O=flarum.core.compat["common/components/Link"];var U=t.n(O);const B=flarum.core.compat["common/helpers/icon"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var e=a.prototype;return e.view=function(){return m("div",{class:L()("StatWidget",{"Categories-compactMobileModeEnabled":!!h().forum.attribute("categories.compactMobile")})},this.content().toArray())},e.content=function(){var t=new(k());return t.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),t.add("label",m("div",{class:"StatWidget-label"},m("span",{className:"Categories-showOnMobile"},W()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),t},a}(S());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q),K=function(t){function a(){for(var a,e=arguments.length,o=new Array(e),s=0;s1&&a.children[1].children&&a.children[1].children.forEach((function(a,e){a.attrs.className||(h().forum.attribute("categories.widgetHeader")&&0==e?t.add("header-widget",a,100):h().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",a,0))})),t},e.contentItems=function(){var t=new(k()),a=this.tags.filter((function(t){return null!==t.position()})),e=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:h().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,w()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},a.map((function(t){return Q.component({model:t})}))),e.length?m("div",{className:"TagCloud"},e.map((function(t){return[M()(t,{link:!0})," "]}))):""),50),h().forum.attribute("categories.widgetRight")){var o=s().prototype.view();o.children.length>1&&o.children[1].children.length>1&&3===o.children[1].children[1].children.length&&t.add("widget",o.children[1].children[1].children[2],0)}return t},e.oncreate=function(a){t.prototype.oncreate.call(this,a),h().setTitle(I()(h().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},a}(v());const Y=flarum.core.compat["tags/forum/components/TagsPage"];var Z=t.n(Y);function tt(t,a){var e=app.forum.attribute("categories.keepTagsNav"),o=app.current.matches(X)||app.current.matches(Z());for(var s in t.items)a(s)&&(s.startsWith("tag")?"tags"==s?e||t.remove(s):o&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:X},u().prototype.postCount=c().attribute("postCount"),(0,e.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(n(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(X)||app.current.matches(Z())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(n(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),tt(t,(function(t){return t.startsWith("tag")})),t})),(0,e.extend)(s().prototype,"sidebarItems",(function(t){tt(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const at={"components/CategoriesPage":X,"components/Category":Q,"components/LastDiscussionWidget":K,"components/StatWidget":j}})(),module.exports=a})(); +(()=>{var t={n:e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a}),a},d:(e,a)=>{for(var o in a)t.o(a,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{"use strict";t.r(e),t.d(e,{default:()=>ot});const a=flarum.core.compat["common/extend"],o=flarum.core.compat["forum/components/IndexPage"];var s=t.n(o);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function g(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,u(t,e)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const y=flarum.core.compat["common/components/LoadingIndicator"];var C=t.n(y);const b=flarum.core.compat["common/helpers/listItems"];var w=t.n(b);const T=flarum.core.compat["common/utils/ItemList"];var k=t.n(T);const N=flarum.core.compat["common/utils/extractText"];var I=t.n(N);const P=flarum.core.compat["common/utils/classList"];var L=t.n(P);const x=flarum.core.compat["tags/utils/sortTags"];var A=t.n(x);const D=flarum.core.compat["tags/helpers/tagLabel"];var M=t.n(D);const _=flarum.core.compat["common/Component"];var S=t.n(_);const O=flarum.core.compat["common/components/Link"];var U=t.n(O);const B=flarum.core.compat["common/helpers/icon"];var W=t.n(B),j=function(t){function e(){return t.apply(this,arguments)||this}g(e,t);var a=e.prototype;return a.view=function(){return m("div",{class:L()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")})},this.content().toArray())},a.content=function(){var t=new(k());return t.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),t.add("label",m("div",{class:"StatWidget-label",style:this.attrs.filter},m("span",{className:"Categories-showOnMobile"},W()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),t},e}(S());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function e(){for(var e,a=arguments.length,o=new Array(a),s=0;s1&&e.children[1].children&&e.children[1].children.forEach((function(e,a){e.attrs.className||(p().forum.attribute("categories.widgetHeader")&&0==a?t.add("header-widget",e,100):p().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",e,0))})),t},a.contentItems=function(){var t=new(k()),e=this.tags.filter((function(t){return null!==t.position()})),a=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:p().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,w()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},e.map((function(t){return Y.component({model:t})}))),a.length?m("div",{className:"TagCloud"},a.map((function(t){return[M()(t,{link:!0})," "]}))):""),50),p().forum.attribute("categories.widgetRight")){var o=s().prototype.view();o.children.length>1&&o.children[1].children.length>1&&3===o.children[1].children[1].children.length&&t.add("widget",o.children[1].children[1].children[2],0)}return t},a.oncreate=function(e){t.prototype.oncreate.call(this,e),p().setTitle(I()(p().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},e}(v());const tt=flarum.core.compat["tags/forum/components/TagsPage"];var et=t.n(tt);function at(t,e){var a=app.forum.attribute("categories.keepTagsNav"),o=app.current.matches(Z)||app.current.matches(et());for(var s in t.items)e(s)&&(s.startsWith("tag")?"tags"==s?a||t.remove(s):o&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:Z},d().prototype.postCount=c().attribute("postCount"),(0,a.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(i(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(Z)||app.current.matches(et())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(i(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),at(t,(function(t){return t.startsWith("tag")})),t})),(0,a.extend)(s().prototype,"sidebarItems",(function(t){at(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const ot={"components/CategoriesPage":Z,"components/Category":Y,"components/LastDiscussionWidget":X,"components/StatWidget":j}})(),module.exports=e})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index 6523903..4aa3bad 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = 'fa-stack-1x CategoryIcon';\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n iconClasses += ' NoBackgroundCategoryIcon';\r\n style.color = '#fafafa';\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: iconClasses, style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n const classes = ['CategoriesPage', 'container'];\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container', this.containerItems().toArray(), 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\r\n 'container',\r\n
\r\n {this.contentItems().toArray()}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","content","toArray","items","ItemList","add","attrs","count","className","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","tag","isChild","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","backgroundColor","color","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n filter: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n const colorClass = this.attrs.selectedTag.isChild ? 'text-contrast--dark': textContrastClass(this.attrs.selectedTag.tag.color());\r\n const colorFilter = colorClass == 'text-contrast--light'? \"filter: brightness(85%);\": \"filter: brightness(200%);\";\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n const colorFilter = this.isChild ? 'text-contrast--dark' : textContrastClass(tag.color())\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = 'fa-stack-1x CategoryIcon';\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n iconClasses += ' NoBackgroundCategoryIcon';\r\n style.color = '#fafafa';\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: iconClasses, style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n const filter = textContrastClass(this.tag.color()) == 'text-contrast--light'? \"filter: brightness(85%);\": \"filter: brightness(200%);\";\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n filter: filter,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n filter: filter,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n const classes = ['CategoriesPage', 'container'];\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container', this.containerItems().toArray(), 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\r\n 'container',\r\n
\r\n {this.contentItems().toArray()}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","content","toArray","items","ItemList","add","attrs","count","style","filter","className","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","colorClass","selectedTag","isChild","textContrastClass","tag","color","colorFilter","extractText","username","avatar","humanTime","lastPostedAt","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","backgroundColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/forum/components/Category.tsx b/js/src/forum/components/Category.tsx index 85f89b1..8729126 100644 --- a/js/src/forum/components/Category.tsx +++ b/js/src/forum/components/Category.tsx @@ -9,6 +9,7 @@ import StatWidget from './StatWidget'; import LastDiscussionWidget from './LastDiscussionWidget'; import app from 'flarum/forum/app'; import classList from 'flarum/common/utils/classList'; +import textContrastClass from 'flarum/common/helpers/textContrastClass'; import type Mithril from 'mithril'; @@ -120,10 +121,10 @@ export default class Category extends Component { const tag = this.tag; const children = this.isChild ? [] : sortTags(tag.children() || []); + const colorFilter = this.isChild ? 'text-contrast--dark' : textContrastClass(tag.color()) + items.add('alignStart',
{this.alignStartItems().toArray()}
, 100); - items.add('alignStart',
{this.alignStartItems().toArray()}
, 100); - - items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50); + items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50); const childrenInContent = !this.isChild && this.compactMobileMode; @@ -250,7 +251,7 @@ export default class Category extends Component { items.add('name',

{this.tag.name()}

, 15); if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) { - items.add('description',
{this.tag.description()}
, 10); + items.add('description',
{this.tag.description()}
, 10); } return items; @@ -258,7 +259,7 @@ export default class Category extends Component { statItems() { const items = new ItemList(); - + const filter = textContrastClass(this.tag.color()) == 'text-contrast--light'? "filter: brightness(85%);": "filter: brightness(200%);"; if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) { items.add( 'discussionCount', @@ -266,6 +267,7 @@ export default class Category extends Component { count: Intl.NumberFormat().format(this.tag.discussionCount()), label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'), icon: 'fas fa-file-alt', + filter: filter, }), 15 ); @@ -276,6 +278,7 @@ export default class Category extends Component { count: Intl.NumberFormat().format(this.tag.postCount()), label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'), icon: 'fas fa-comment', + filter: filter, }), 10 ); @@ -292,6 +295,10 @@ export default class Category extends Component { 'lastDiscussion', LastDiscussionWidget.component({ discussion: this.tag.lastPostedDiscussion(), + selectedTag: { + tag: this.tag, + isChild: this.isChild, + } }), 10 ); diff --git a/js/src/forum/components/LastDiscussionWidget.tsx b/js/src/forum/components/LastDiscussionWidget.tsx index 18c517e..a513008 100644 --- a/js/src/forum/components/LastDiscussionWidget.tsx +++ b/js/src/forum/components/LastDiscussionWidget.tsx @@ -9,10 +9,17 @@ import UserCard from 'flarum/forum/components/UserCard'; import type Discussion from 'flarum/common/models/Discussion'; import ItemList from 'flarum/common/utils/ItemList'; import extractText from 'flarum/common/utils/extractText'; +import Tag from 'flarum/tags/models/Tag'; +import classList from 'flarum/common/utils/classList'; import type Mithril from 'mithril'; +import textContrastClass from 'flarum/common/helpers/textContrastClass'; interface Attrs { discussion: Discussion; + selectedTag: { + tag: Tag; + isChild: boolean; + } } export default class LastDiscussionWidget extends Component { @@ -48,6 +55,8 @@ export default class LastDiscussionWidget extends Component { const discussion = this.attrs.discussion; const user = discussion.lastPostedUser(); + const colorClass = this.attrs.selectedTag.isChild ? 'text-contrast--dark': textContrastClass(this.attrs.selectedTag.tag.color()); + const colorFilter = colorClass == 'text-contrast--light'? "filter: brightness(85%);": "filter: brightness(200%);"; items.add( 'avatar', @@ -59,10 +68,10 @@ export default class LastDiscussionWidget extends Component { items.add( 'mainContent', -
-
+
+
{humanTime(discussion.lastPostedAt()!)}{' '} - + | diff --git a/js/src/forum/components/StatWidget.tsx b/js/src/forum/components/StatWidget.tsx index b461ba5..53d25fe 100644 --- a/js/src/forum/components/StatWidget.tsx +++ b/js/src/forum/components/StatWidget.tsx @@ -10,6 +10,7 @@ interface Attrs { count: number; icon: string; label: Mithril.Children; + filter: string; } export default class StatWidget extends Component { @@ -27,7 +28,7 @@ export default class StatWidget extends Component { items.add('count',
{this.attrs.count}
, 100); items.add( 'label', -
+
{icon(this.attrs.icon)} {this.attrs.label}
, diff --git a/resources/less/forum.less b/resources/less/forum.less index c8a5845..184baf7 100644 --- a/resources/less/forum.less +++ b/resources/less/forum.less @@ -244,7 +244,6 @@ // Systems .TagCategory { list-style: none; - color: @categories-color-white; .TagCategory-content { padding: 15px 20px; @@ -253,7 +252,6 @@ justify-content: space-between; background-color: @primary-color; text-decoration: none !important; - color: @categories-color-highlighted; box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.18), 0 3px 10px 0 rgba(0, 0, 0, 0.15); @@ -302,7 +300,6 @@ .TagCategory-description { margin-top: 0.5em; - color: @categories-color-muted; overflow-wrap: break-word; } } @@ -324,17 +321,12 @@ .TagCategory.SubCategory { .TagCategory-content { - color: @categories-sub-color-highlighted; padding: 10px 20px; margin: 5px 0; background-color: @categories-sub-color-background; box-shadow: 0 2px 4px 0em rgba(0, 0, 0, 0.04), 0 3px 10px 0 rgba(0, 0, 0, 0.07); - .TagCategory-main .TagCategory-description { - color: @categories-sub-color-muted; - } - .TagCategory-name { font-size: 18px; } @@ -382,10 +374,6 @@ .StatWidget-count { font-weight: 550; } - - .StatWidget-label { - color: @categories-color-white-muted; - } } } @@ -394,9 +382,6 @@ border-right: 2px solid @categories-sub-color-more-muted; display: flex; } - .StatWidget-label { - color: @categories-sub-color-muted; - } } .TagCategory-lastDiscussion.empty .LastDiscussion { @@ -406,7 +391,6 @@ .LockedText { display: flex; align-items: center; - color: @categories-color-highlighted; .LockedText-content, .LockedText-topRow, @@ -414,7 +398,6 @@ display: flex; } .LockedText-topRow { - color: @categories-color-white; font-weight: 550; } } @@ -422,7 +405,6 @@ .LastDiscussion { display: flex; align-items: center; - color: @categories-color-highlighted; .LastDiscussion-userCardContainer { display: block; @@ -466,41 +448,16 @@ } .LastDiscussion-topRow { - color: @categories-color-white; font-weight: 550; } .LastDiscussion-bottomRow { - color: @categories-color-white-muted; - .LastDiscussion-usernameLink, .username, time { display: contents; } - .LastDiscussion-usernameLink { - color: @categories-color-white-muted; - } - } -} - -.TagCategory.SubCategory { - .TagCategory-lastDiscussion.empty { - .LastDiscussion { - color: @categories-sub-color-highlighted; - } - } - .LastDiscussion { - .LastDiscussion-topRow { - color: @categories-sub-color-highlighted; - } - .LastDiscussion-bottomRow { - color: @categories-sub-color-muted; - .LastDiscussion-usernameLink { - color: @categories-sub-color-muted; - } - } } } From e8d7b05dcfd80cad99fee14329eb531351111dc8 Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Mon, 29 Apr 2024 21:14:01 +0100 Subject: [PATCH 3/8] Redo dark theme support, removed declared colors and use css names to match with forum.js Added 2 style theming for both parent and child tags --- extend.php | 4 +- js/dist/admin.js | 2 +- js/dist/admin.js.map | 2 +- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- js/src/admin/index.js | 11 +++ js/src/forum/components/CategoriesPage.tsx | 2 +- js/src/forum/components/Category.tsx | 94 ++++++++++++++----- .../forum/components/LastDiscussionWidget.tsx | 18 +++- js/src/forum/components/StatWidget.tsx | 6 +- resources/less/forum.less | 74 +++++---------- resources/locale/en.yml | 5 +- 12 files changed, 134 insertions(+), 88 deletions(-) diff --git a/extend.php b/extend.php index f08081a..211df5a 100644 --- a/extend.php +++ b/extend.php @@ -43,7 +43,9 @@ ->serializeToForum('categories.widgetHeader', 'askvortsov-categories.widget-header', 'boolval', false) ->serializeToForum('categories.widgetRight', 'askvortsov-categories.widget-right', 'boolval', false) ->serializeToForum('categories.widgetLeft', 'askvortsov-categories.widget-left', 'boolval', false) - ->serializeToForum('categories.widgetFooter', 'askvortsov-categories.widget-footer', 'boolval', false), + ->serializeToForum('categories.widgetFooter', 'askvortsov-categories.widget-footer', 'boolval', false) + ->serializeToForum('categories.enablePrimaryTagColor', 'askvortsov-categories.enable-primary-tag-color', 'boolval', true) + ->serializeToForum('categories.enablePrimaryChildTagColor', 'askvortsov-categories.enable-primary-child-tag-color', 'boolval', false), (new Extend\ApiController(ListTagsController::class)) ->addOptionalInclude('lastPostedDiscussion.lastPostedUser'), diff --git a/js/dist/admin.js b/js/dist/admin.js index fc5dc6a..52b55ba 100644 --- a/js/dist/admin.js +++ b/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var s in a)e.o(a,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:a[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const a=flarum.core.compat["common/extend"],s=flarum.core.compat["admin/components/BasicsPage"];var r=e.n(s);app.initializers.add("askvortsov/flarum-categories",(function(){app.extensionData.for("askvortsov-categories").registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.nav"))}),10).registerSetting({setting:"askvortsov-categories.keep-tags-nav",label:app.translator.trans("askvortsov-categories.admin.labels.keep_tags_nav"),type:"switch"},9).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.layout"))})).registerSetting({setting:"askvortsov-categories.full-page-desktop",label:app.translator.trans("askvortsov-categories.admin.labels.full_page_desktop"),help:app.translator.trans("askvortsov-categories.admin.help.full_page_desktop"),type:"switch"}).registerSetting({setting:"askvortsov-categories.compact-mobile",label:app.translator.trans("askvortsov-categories.admin.labels.compact_mobile_mode"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.parent_display"))})).registerSetting({setting:"askvortsov-categories.parent-remove-icon",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_icon"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-description",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_description"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-stats",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_stats"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-last-discussion",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_last_discussion"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.child_display"))})).registerSetting({setting:"askvortsov-categories.child-bare-icon",label:app.translator.trans("askvortsov-categories.admin.labels.child_bare_icon"),help:app.translator.trans("askvortsov-categories.admin.help.child_bare_icon"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.performance"))})).registerSetting({setting:"askvortsov-categories.small-forum-optimized",label:app.translator.trans("askvortsov-categories.admin.labels.small_forum_optimized"),help:app.translator.trans("askvortsov-categories.admin.help.small_forum_optimized"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.widgets"),m("div",{class:"helpText"},app.translator.trans("askvortsov-categories.admin.help.widgets")))})).registerSetting({setting:"askvortsov-categories.widget-header",label:app.translator.trans("askvortsov-categories.admin.labels.widget_header"),help:app.translator.trans("askvortsov-categories.admin.help.widget_header"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-left",label:app.translator.trans("askvortsov-categories.admin.labels.widget_left"),help:app.translator.trans("askvortsov-categories.admin.help.widget_left"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-right",label:app.translator.trans("askvortsov-categories.admin.labels.widget_right"),help:app.translator.trans("askvortsov-categories.admin.help.widget_right"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-footer",label:app.translator.trans("askvortsov-categories.admin.labels.widget_footer"),help:app.translator.trans("askvortsov-categories.admin.help.widget_footer"),type:"switch"}),(0,a.extend)(r().prototype,"homePageItems",(function(e){e.add("categories",{path:"/categories",label:app.translator.trans("askvortsov-categories.admin.basics.categories_label")})}))}))})(),module.exports=t})(); +(()=>{var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var s in a)e.o(a,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:a[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const a=flarum.core.compat["common/extend"],s=flarum.core.compat["admin/components/BasicsPage"];var r=e.n(s);app.initializers.add("askvortsov/flarum-categories",(function(){app.extensionData.for("askvortsov-categories").registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.nav"))}),10).registerSetting({setting:"askvortsov-categories.keep-tags-nav",label:app.translator.trans("askvortsov-categories.admin.labels.keep_tags_nav"),type:"switch"},9).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.layout"))})).registerSetting({setting:"askvortsov-categories.full-page-desktop",label:app.translator.trans("askvortsov-categories.admin.labels.full_page_desktop"),help:app.translator.trans("askvortsov-categories.admin.help.full_page_desktop"),type:"switch"}).registerSetting({setting:"askvortsov-categories.compact-mobile",label:app.translator.trans("askvortsov-categories.admin.labels.compact_mobile_mode"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.parent_display"))})).registerSetting({setting:"askvortsov-categories.parent-remove-icon",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_icon"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-description",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_description"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-stats",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_stats"),type:"switch"}).registerSetting({setting:"askvortsov-categories.parent-remove-last-discussion",label:app.translator.trans("askvortsov-categories.admin.labels.parent_remove_last_discussion"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.child_display"))})).registerSetting({setting:"askvortsov-categories.child-bare-icon",label:app.translator.trans("askvortsov-categories.admin.labels.child_bare_icon"),help:app.translator.trans("askvortsov-categories.admin.help.child_bare_icon"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.performance"))})).registerSetting({setting:"askvortsov-categories.small-forum-optimized",label:app.translator.trans("askvortsov-categories.admin.labels.small_forum_optimized"),help:app.translator.trans("askvortsov-categories.admin.help.small_forum_optimized"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.colors"),m("div",{class:"helpText"},app.translator.trans("askvortsov-categories.admin.help.colors")))})).registerSetting({setting:"askvortsov-categories.enable-primary-tag-color",label:app.translator.trans("askvortsov-categories.admin.labels.enable_primary_tag_color"),type:"switch"}).registerSetting({setting:"askvortsov-categories.enable-primary-child-tag-color",label:app.translator.trans("askvortsov-categories.admin.labels.enable_primary_child_tag_color"),type:"switch"}).registerSetting((function(){return m("legend",{class:"categories-legend"},app.translator.trans("askvortsov-categories.admin.headings.widgets"),m("div",{class:"helpText"},app.translator.trans("askvortsov-categories.admin.help.widgets")))})).registerSetting({setting:"askvortsov-categories.widget-header",label:app.translator.trans("askvortsov-categories.admin.labels.widget_header"),help:app.translator.trans("askvortsov-categories.admin.help.widget_header"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-left",label:app.translator.trans("askvortsov-categories.admin.labels.widget_left"),help:app.translator.trans("askvortsov-categories.admin.help.widget_left"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-right",label:app.translator.trans("askvortsov-categories.admin.labels.widget_right"),help:app.translator.trans("askvortsov-categories.admin.help.widget_right"),type:"switch"}).registerSetting({setting:"askvortsov-categories.widget-footer",label:app.translator.trans("askvortsov-categories.admin.labels.widget_footer"),help:app.translator.trans("askvortsov-categories.admin.help.widget_footer"),type:"switch"}),(0,a.extend)(r().prototype,"homePageItems",(function(e){e.add("categories",{path:"/categories",label:app.translator.trans("askvortsov-categories.admin.basics.categories_label")})}))}))})(),module.exports=t})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map index 6ca84b9..0219aa7 100644 --- a/js/dist/admin.js.map +++ b/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,+B,aCGxDC,IAAIC,aAAaC,IAAI,gCAAgC,WACnDF,IAAIG,cAAa,IACV,yBACJC,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,4CAAqD,GAAE,IACrIJ,gBACC,CACEK,QAAS,sCACTC,MAAOV,IAAIO,WAAWC,MAAM,oDAC5BG,KAAM,UAER,GAEDP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,+CAAwD,IACtIJ,gBAAgB,CACfK,QAAS,0CACTC,MAAOV,IAAIO,WAAWC,MAAM,wDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,sDAC3BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,uCACTC,MAAOV,IAAIO,WAAWC,MAAM,0DAC5BG,KAAM,WAEPP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,uDAAgE,IAC9IJ,gBAAgB,CACfK,QAAS,2CACTC,MAAOV,IAAIO,WAAWC,MAAM,yDAC5BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,kDACTC,MAAOV,IAAIO,WAAWC,MAAM,gEAC5BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,4CACTC,MAAOV,IAAIO,WAAWC,MAAM,0DAC5BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,sDACTC,MAAOV,IAAIO,WAAWC,MAAM,oEAC5BG,KAAM,WAEPP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,sDAA+D,IAC7IJ,gBAAgB,CACfK,QAAS,wCACTC,MAAOV,IAAIO,WAAWC,MAAM,sDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,oDAC3BG,KAAM,WAEPP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,oDAA6D,IAC3IJ,gBAAgB,CACfK,QAAS,8CACTC,MAAOV,IAAIO,WAAWC,MAAM,4DAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,0DAC3BG,KAAM,WAEPP,iBAAgB,kBAAMC,EAAA,UAAQC,MAAM,qBAAqBN,IAAIO,WAAWC,MAAM,gDAAgDH,EAAA,OAAKC,MAAM,YAAYN,IAAIO,WAAWC,MAAM,6CAA2D,IACrOJ,gBAAgB,CACfK,QAAS,sCACTC,MAAOV,IAAIO,WAAWC,MAAM,oDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,kDAC3BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,oCACTC,MAAOV,IAAIO,WAAWC,MAAM,kDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,gDAC3BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,qCACTC,MAAOV,IAAIO,WAAWC,MAAM,mDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,iDAC3BG,KAAM,WAEPP,gBAAgB,CACfK,QAAS,sCACTC,MAAOV,IAAIO,WAAWC,MAAM,oDAC5BI,KAAMZ,IAAIO,WAAWC,MAAM,kDAC3BG,KAAM,YAGVE,EAAAA,EAAAA,QAAOC,IAAAA,UAAsB,iBAAiB,SAACC,GAC7CA,EAAMb,IAAI,aAAc,CACtBc,KAAM,cACNN,MAAOV,IAAIO,WAAWC,MAAM,wDAEhC,GACF,G","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['admin/components/BasicsPage']\"","webpack://@askvortsov/flarum-categories/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/BasicsPage'];","import { extend } from 'flarum/common/extend';\r\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.extensionData\r\n .for('askvortsov-categories')\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.nav')}, 10)\r\n .registerSetting(\r\n {\r\n setting: 'askvortsov-categories.keep-tags-nav',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.keep_tags_nav'),\r\n type: 'switch',\r\n },\r\n 9\r\n )\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.layout')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.full-page-desktop',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.full_page_desktop'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.full_page_desktop'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.compact-mobile',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.compact_mobile_mode'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.parent_display')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-icon',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_icon'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-description',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_description'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-stats',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_stats'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-last-discussion',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_last_discussion'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.child_display')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.child-bare-icon',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.child_bare_icon'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.child_bare_icon'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.performance')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.small-forum-optimized',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.small_forum_optimized'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.small_forum_optimized'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.widgets')}
{app.translator.trans('askvortsov-categories.admin.help.widgets')}
)\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-header',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_header'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_header'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-left',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_left'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_left'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-right',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_right'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_right'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-footer',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_footer'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_footer'),\r\n type: 'switch',\r\n });\r\n\r\n extend(BasicsPage.prototype, 'homePageItems', (items) => {\r\n items.add('categories', {\r\n path: '/categories',\r\n label: app.translator.trans('askvortsov-categories.admin.basics.categories_label'),\r\n });\r\n });\r\n});\r\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","initializers","add","extensionData","registerSetting","m","class","translator","trans","setting","label","type","help","extend","BasicsPage","items","path"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['admin/components/BasicsPage']\"","webpack://@askvortsov/flarum-categories/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/components/BasicsPage'];","import { extend } from 'flarum/common/extend';\r\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.extensionData\r\n .for('askvortsov-categories')\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.nav')}, 10)\r\n .registerSetting(\r\n {\r\n setting: 'askvortsov-categories.keep-tags-nav',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.keep_tags_nav'),\r\n type: 'switch',\r\n },\r\n 9\r\n )\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.layout')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.full-page-desktop',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.full_page_desktop'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.full_page_desktop'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.compact-mobile',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.compact_mobile_mode'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.parent_display')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-icon',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_icon'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-description',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_description'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-stats',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_stats'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.parent-remove-last-discussion',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.parent_remove_last_discussion'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.child_display')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.child-bare-icon',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.child_bare_icon'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.child_bare_icon'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.performance')})\r\n .registerSetting({\r\n setting: 'askvortsov-categories.small-forum-optimized',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.small_forum_optimized'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.small_forum_optimized'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.colors')}
{app.translator.trans('askvortsov-categories.admin.help.colors')}
)\r\n .registerSetting({\r\n setting: 'askvortsov-categories.enable-primary-tag-color',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.enable_primary_tag_color'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.enable-primary-child-tag-color',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.enable_primary_child_tag_color'),\r\n type: 'switch',\r\n })\r\n .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.widgets')}
{app.translator.trans('askvortsov-categories.admin.help.widgets')}
)\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-header',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_header'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_header'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-left',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_left'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_left'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-right',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_right'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_right'),\r\n type: 'switch',\r\n })\r\n .registerSetting({\r\n setting: 'askvortsov-categories.widget-footer',\r\n label: app.translator.trans('askvortsov-categories.admin.labels.widget_footer'),\r\n help: app.translator.trans('askvortsov-categories.admin.help.widget_footer'),\r\n type: 'switch',\r\n });\r\n\r\n extend(BasicsPage.prototype, 'homePageItems', (items) => {\r\n items.add('categories', {\r\n path: '/categories',\r\n label: app.translator.trans('askvortsov-categories.admin.basics.categories_label'),\r\n });\r\n });\r\n});\r\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","initializers","add","extensionData","registerSetting","m","class","translator","trans","setting","label","type","help","extend","BasicsPage","items","path"],"sourceRoot":""} \ No newline at end of file diff --git a/js/dist/forum.js b/js/dist/forum.js index 56dd401..7ad7b79 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a}),a},d:(e,a)=>{for(var o in a)t.o(a,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{"use strict";t.r(e),t.d(e,{default:()=>ot});const a=flarum.core.compat["common/extend"],o=flarum.core.compat["forum/components/IndexPage"];var s=t.n(o);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function g(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,u(t,e)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const y=flarum.core.compat["common/components/LoadingIndicator"];var C=t.n(y);const b=flarum.core.compat["common/helpers/listItems"];var w=t.n(b);const T=flarum.core.compat["common/utils/ItemList"];var k=t.n(T);const N=flarum.core.compat["common/utils/extractText"];var I=t.n(N);const P=flarum.core.compat["common/utils/classList"];var L=t.n(P);const x=flarum.core.compat["tags/utils/sortTags"];var A=t.n(x);const D=flarum.core.compat["tags/helpers/tagLabel"];var M=t.n(D);const _=flarum.core.compat["common/Component"];var S=t.n(_);const O=flarum.core.compat["common/components/Link"];var U=t.n(O);const B=flarum.core.compat["common/helpers/icon"];var W=t.n(B),j=function(t){function e(){return t.apply(this,arguments)||this}g(e,t);var a=e.prototype;return a.view=function(){return m("div",{class:L()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")})},this.content().toArray())},a.content=function(){var t=new(k());return t.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),t.add("label",m("div",{class:"StatWidget-label",style:this.attrs.filter},m("span",{className:"Categories-showOnMobile"},W()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),t},e}(S());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function e(){for(var e,a=arguments.length,o=new Array(a),s=0;s1&&e.children[1].children&&e.children[1].children.forEach((function(e,a){e.attrs.className||(p().forum.attribute("categories.widgetHeader")&&0==a?t.add("header-widget",e,100):p().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",e,0))})),t},a.contentItems=function(){var t=new(k()),e=this.tags.filter((function(t){return null!==t.position()})),a=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:p().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,w()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},e.map((function(t){return Y.component({model:t})}))),a.length?m("div",{className:"TagCloud"},a.map((function(t){return[M()(t,{link:!0})," "]}))):""),50),p().forum.attribute("categories.widgetRight")){var o=s().prototype.view();o.children.length>1&&o.children[1].children.length>1&&3===o.children[1].children[1].children.length&&t.add("widget",o.children[1].children[1].children[2],0)}return t},a.oncreate=function(e){t.prototype.oncreate.call(this,e),p().setTitle(I()(p().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},e}(v());const tt=flarum.core.compat["tags/forum/components/TagsPage"];var et=t.n(tt);function at(t,e){var a=app.forum.attribute("categories.keepTagsNav"),o=app.current.matches(Z)||app.current.matches(et());for(var s in t.items)e(s)&&(s.startsWith("tag")?"tags"==s?a||t.remove(s):o&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:Z},d().prototype.postCount=c().attribute("postCount"),(0,a.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(i(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(Z)||app.current.matches(et())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(i(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),at(t,(function(t){return t.startsWith("tag")})),t})),(0,a.extend)(s().prototype,"sidebarItems",(function(t){at(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const ot={"components/CategoriesPage":Z,"components/Category":Y,"components/LastDiscussionWidget":X,"components/StatWidget":j}})(),module.exports=e})(); +(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>et});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["common/utils/classList"];var L=t.n(I);const x=flarum.core.compat["tags/utils/sortTags"];var A=t.n(x);const D=flarum.core.compat["tags/helpers/tagLabel"];var M=t.n(D);const _=flarum.core.compat["common/Component"];var S=t.n(_);const O=flarum.core.compat["common/components/Link"];var U=t.n(O);const B=flarum.core.compat["common/helpers/icon"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:L()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},W()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(S());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s1&&a.children[1].children&&a.children[1].children.forEach((function(a,o){a.attrs.className||(p().forum.attribute("categories.widgetHeader")&&0==o?t.add("header-widget",a,100):p().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",a,0))})),t},o.contentItems=function(){var t=new(P()),a=this.tags.filter((function(t){return null!==t.position()})),o=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:p().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,T()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},a.map((function(t){return Y.component({model:t,enablePrimaryTagColor:p().forum.attribute("categories.enablePrimaryTagColor"),enablePrimaryChildTagColor:p().forum.attribute("categories.enablePrimaryChildTagColor")})}))),o.length?m("div",{className:"TagCloud"},o.map((function(t){return[M()(t,{link:!0})," "]}))):""),50),p().forum.attribute("categories.widgetRight")){var e=s().prototype.view();e.children.length>1&&e.children[1].children.length>1&&3===e.children[1].children[1].children.length&&t.add("widget",e.children[1].children[1].children[2],0)}return t},o.oncreate=function(a){t.prototype.oncreate.call(this,a),p().setTitle(N()(p().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},a}(v());const tt=flarum.core.compat["tags/forum/components/TagsPage"];var at=t.n(tt);function ot(t,a){var o=app.forum.attribute("categories.keepTagsNav"),e=app.current.matches(Z)||app.current.matches(at());for(var s in t.items)a(s)&&(s.startsWith("tag")?"tags"==s?o||t.remove(s):e&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:Z},d().prototype.postCount=c().attribute("postCount"),(0,o.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(i(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(Z)||app.current.matches(at())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(i(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),ot(t,(function(t){return t.startsWith("tag")})),t})),(0,o.extend)(s().prototype,"sidebarItems",(function(t){ot(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const et={"components/CategoriesPage":Z,"components/Category":Y,"components/LastDiscussionWidget":X,"components/StatWidget":j}})(),module.exports=a})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index 4aa3bad..a2eae7d 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n filter: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n const colorClass = this.attrs.selectedTag.isChild ? 'text-contrast--dark': textContrastClass(this.attrs.selectedTag.tag.color());\r\n const colorFilter = colorClass == 'text-contrast--light'? \"filter: brightness(85%);\": \"filter: brightness(200%);\";\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n const colorFilter = this.isChild ? 'text-contrast--dark' : textContrastClass(tag.color())\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this })])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const tag = this.tag;\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = 'fa-stack-1x CategoryIcon';\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n iconClasses += ' NoBackgroundCategoryIcon';\r\n style.color = '#fafafa';\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: iconClasses, style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n const filter = textContrastClass(this.tag.color()) == 'text-contrast--light'? \"filter: brightness(85%);\": \"filter: brightness(200%);\";\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n filter: filter,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n filter: filter,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n const classes = ['CategoriesPage', 'container'];\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container', this.containerItems().toArray(), 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\r\n 'container',\r\n
\r\n {this.contentItems().toArray()}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","content","toArray","items","ItemList","add","attrs","count","style","filter","className","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","colorClass","selectedTag","isChild","textContrastClass","tag","color","colorFilter","extractText","username","avatar","humanTime","lastPostedAt","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","backgroundColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n const classes = ['CategoriesPage', 'container'];\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container', this.containerItems().toArray(), 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\r\n 'container',\r\n
\r\n {this.contentItems().toArray()}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/admin/index.js b/js/src/admin/index.js index aa224fc..d14e03e 100644 --- a/js/src/admin/index.js +++ b/js/src/admin/index.js @@ -60,6 +60,17 @@ app.initializers.add('askvortsov/flarum-categories', () => { help: app.translator.trans('askvortsov-categories.admin.help.small_forum_optimized'), type: 'switch', }) + .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.colors')}
{app.translator.trans('askvortsov-categories.admin.help.colors')}
) + .registerSetting({ + setting: 'askvortsov-categories.enable-primary-tag-color', + label: app.translator.trans('askvortsov-categories.admin.labels.enable_primary_tag_color'), + type: 'switch', + }) + .registerSetting({ + setting: 'askvortsov-categories.enable-primary-child-tag-color', + label: app.translator.trans('askvortsov-categories.admin.labels.enable_primary_child_tag_color'), + type: 'switch', + }) .registerSetting(() => {app.translator.trans('askvortsov-categories.admin.headings.widgets')}
{app.translator.trans('askvortsov-categories.admin.help.widgets')}
) .registerSetting({ setting: 'askvortsov-categories.widget-header', diff --git a/js/src/forum/components/CategoriesPage.tsx b/js/src/forum/components/CategoriesPage.tsx index 2f9cbe6..3dd01c3 100644 --- a/js/src/forum/components/CategoriesPage.tsx +++ b/js/src/forum/components/CategoriesPage.tsx @@ -106,7 +106,7 @@ export default class CategoriesPage extends Page {
    {pinned.map((tag) => { - return Category.component({ model: tag }); + return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') }); })}
diff --git a/js/src/forum/components/Category.tsx b/js/src/forum/components/Category.tsx index 8729126..116560b 100644 --- a/js/src/forum/components/Category.tsx +++ b/js/src/forum/components/Category.tsx @@ -16,6 +16,8 @@ import type Mithril from 'mithril'; interface Attrs { model: any; parent: any; + enablePrimaryTagColor: boolean; + enablePrimaryChildTagColor: boolean; } /* @@ -93,11 +95,19 @@ export default class Category extends Component { const children = this.isChild ? [] : sortTags(tag.children() || []); + let style: Record = {}; + if (this.isChild) { + if (this.attrs.enablePrimaryChildTagColor) { + style.backgroundColor = this.tag.color(); + } + } else if (this.attrs.enablePrimaryTagColor) { + style.backgroundColor = this.tag.color(); + } items.add( 'link', {this.contentItems().toArray()} @@ -108,7 +118,7 @@ export default class Category extends Component { if (!this.compactMobileMode && !this.isChild) { items.add( 'children', -
    {children.map((child) => [Category.component({ model: child, parent: this })])}
, +
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
, 10 ); } @@ -119,19 +129,23 @@ export default class Category extends Component { contentItems() { const items = new ItemList(); - const tag = this.tag; - const children = this.isChild ? [] : sortTags(tag.children() || []); - const colorFilter = this.isChild ? 'text-contrast--dark' : textContrastClass(tag.color()) - items.add('alignStart',
{this.alignStartItems().toArray()}
, 100); + const children = this.isChild ? [] : sortTags(this.tag.children() || []); + + let className = 'auto-color-text'; + if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) { + className = textContrastClass(this.tag.color()); + } - items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50); + items.add('alignStart',
{this.alignStartItems().toArray()}
, 100); + + items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50); const childrenInContent = !this.isChild && this.compactMobileMode; if (childrenInContent && !this.collapsed) { items.add( 'children', -
    {children.map((child) => [Category.component({ model: child, parent: this })])}
, +
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
, 10 ); } @@ -142,10 +156,16 @@ export default class Category extends Component { alignStartItems() { const items = new ItemList(); - const tag = this.tag; - const children = this.isChild ? [] : sortTags(tag.children() || []); - - items.add('icon', {this.iconItems().toArray()}, 100); + const children = this.isChild ? [] : sortTags(this.tag.children() || []); + let style: Record = {}; + if (this.isChild) { + if (!this.attrs.enablePrimaryChildTagColor) { + style.color = this.tag.color(); + } + } else if (!this.attrs.enablePrimaryTagColor) { + style.color = this.tag.color(); + } + items.add('icon', {this.iconItems().toArray()}, 100); items.add('main',
{this.mainItems().toArray()}
, 50); @@ -215,24 +235,31 @@ export default class Category extends Component { if (this.tag.icon() && this.isChild) { const style: Record = {}; - let iconClasses = 'fa-stack-1x CategoryIcon'; + let iconClasses = ['fa-stack-1x CategoryIcon']; if (app.forum.attribute('categories.childBareIcon')) { - iconClasses += ' NoBackgroundCategoryIcon'; - style.color = '#fafafa'; + if (this.attrs.enablePrimaryChildTagColor) { + style.color = this.tag.color(); + } else { + iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color'); + } } else { - style.color = this.tag.color(); + if (this.attrs.enablePrimaryChildTagColor) { + iconClasses.push(textContrastClass(this.tag.color())); + } else { + style.color = this.tag.color(); + } } - const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x'; + const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x'; items.add( 'icon', - + {!!app.forum.attribute('categories.childBareIcon') && ( - + )} - {icon(this.tag.icon(), { className: iconClasses, style: style })} + {icon(this.tag.icon(), { className: classList(iconClasses), style: style })} , 10 ); @@ -249,9 +276,17 @@ export default class Category extends Component { const items = new ItemList(); items.add('name',

{this.tag.name()}

, 15); - + + let className = 'auto-color-text'; + if (this.isChild) { + if (this.attrs.enablePrimaryChildTagColor) { + className = textContrastClass(this.tag.color())+'muted'; + } + } else if (this.attrs.enablePrimaryTagColor) { + className = textContrastClass(this.tag.color())+'muted'; + } if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) { - items.add('description',
{this.tag.description()}
, 10); + items.add('description',
{this.tag.description()}
, 10); } return items; @@ -259,7 +294,15 @@ export default class Category extends Component { statItems() { const items = new ItemList(); - const filter = textContrastClass(this.tag.color()) == 'text-contrast--light'? "filter: brightness(85%);": "filter: brightness(200%);"; + let className = 'auto-color-text'; + + if (this.isChild) { + if (this.attrs.enablePrimaryChildTagColor) { + className = textContrastClass(this.tag.color()); + } + } else if (this.attrs.enablePrimaryTagColor) { + className = textContrastClass(this.tag.color()); + } if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) { items.add( 'discussionCount', @@ -267,7 +310,7 @@ export default class Category extends Component { count: Intl.NumberFormat().format(this.tag.discussionCount()), label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'), icon: 'fas fa-file-alt', - filter: filter, + className: className, }), 15 ); @@ -278,7 +321,7 @@ export default class Category extends Component { count: Intl.NumberFormat().format(this.tag.postCount()), label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'), icon: 'fas fa-comment', - filter: filter, + className: className, }), 10 ); @@ -298,6 +341,7 @@ export default class Category extends Component { selectedTag: { tag: this.tag, isChild: this.isChild, + isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor } }), 10 diff --git a/js/src/forum/components/LastDiscussionWidget.tsx b/js/src/forum/components/LastDiscussionWidget.tsx index a513008..f79eaf7 100644 --- a/js/src/forum/components/LastDiscussionWidget.tsx +++ b/js/src/forum/components/LastDiscussionWidget.tsx @@ -19,6 +19,7 @@ interface Attrs { selectedTag: { tag: Tag; isChild: boolean; + isBackgroundTagColored: boolean; } } @@ -55,8 +56,15 @@ export default class LastDiscussionWidget extends Component { const discussion = this.attrs.discussion; const user = discussion.lastPostedUser(); - const colorClass = this.attrs.selectedTag.isChild ? 'text-contrast--dark': textContrastClass(this.attrs.selectedTag.tag.color()); - const colorFilter = colorClass == 'text-contrast--light'? "filter: brightness(85%);": "filter: brightness(200%);"; + let className = 'auto-color-text'; + + if (this.attrs.selectedTag.isChild) { + if (this.attrs.selectedTag.isBackgroundTagColored) { + className = textContrastClass(this.attrs.selectedTag.tag.color()); + } + } else if (this.attrs.selectedTag.isBackgroundTagColored) { + className = textContrastClass(this.attrs.selectedTag.tag.color()); + } items.add( 'avatar', @@ -68,10 +76,10 @@ export default class LastDiscussionWidget extends Component { items.add( 'mainContent', -
-
+
+
{humanTime(discussion.lastPostedAt()!)}{' '} - + | diff --git a/js/src/forum/components/StatWidget.tsx b/js/src/forum/components/StatWidget.tsx index 53d25fe..505c820 100644 --- a/js/src/forum/components/StatWidget.tsx +++ b/js/src/forum/components/StatWidget.tsx @@ -10,13 +10,13 @@ interface Attrs { count: number; icon: string; label: Mithril.Children; - filter: string; + className: string; } export default class StatWidget extends Component { view() { return ( -
+
{this.content().toArray()}
); @@ -28,7 +28,7 @@ export default class StatWidget extends Component { items.add('count',
{this.attrs.count}
, 100); items.add( 'label', -
+
{icon(this.attrs.icon)} {this.attrs.label}
, diff --git a/resources/less/forum.less b/resources/less/forum.less index 184baf7..6c47952 100644 --- a/resources/less/forum.less +++ b/resources/less/forum.less @@ -1,37 +1,27 @@ // Variables +@categories-color-white-muted: darken(white, 11%); +@categories-color-white-more-muted: darken(white, 25%); +@categories-color-black-muted: lighten(black, 15%); +@control-bg-light: darken(@control-bg, 5%); -@categories-color-white: darken(#fff, 2%); -@categories-color-white-slightly-muted: darken(@categories-color-white, 5%); -@categories-color-white-muted: darken(@categories-color-white, 11%); -@categories-color-white-more-muted: darken(@categories-color-white, 25%); - -@categories-color-highlighted: @categories-color-white; -@categories-color-muted: @categories-color-white-muted; - -// Dark colors (for nightmode workaround) -@categories-sub-dark-color-background: lighten(#000, 20%); -@categories-sub-dark-color-background-hover: lighten(#000, 30%); -@categories-sub-dark-color-highlighted: darken(@categories-color-white, 5%); -@categories-sub-dark-color-muted: darken(@categories-color-white, 11%); -@categories-sub-dark-color-more-muted: darken(@categories-color-white, 25%); - -.define-colors(@config-dark-mode); -.define-colors(false) { - @categories-sub-color-background: darken(#fff, 10%); - @categories-sub-color-background-hover: darken(#fff, 15%); - @categories-sub-color-highlighted: lighten(#000, 5%); - @categories-sub-color-muted: lighten(@categories-sub-color-highlighted, 30%); - @categories-sub-color-more-muted: lighten( - @categories-sub-color-highlighted, - 75% - ); +.text-contrast--lightmuted { + color: @categories-color-white-muted; } -.define-colors(true) { - @categories-sub-color-background: @categories-sub-dark-color-background; - @categories-sub-color-background-hover: @categories-sub-dark-color-background-hover; - @categories-sub-color-highlighted: @categories-sub-dark-color-highlighted; - @categories-sub-color-muted: @categories-sub-dark-color-muted; - @categories-sub-color-more-muted: @categories-sub-dark-color-more-muted; + +.text-contrast--darkmuted { + color: @categories-color-black-muted; +} + +.auto-child-color { + color: @control-bg-light; +} + +.auto-color-text { + color: @text-color; +} + +.auto-color-textmuted { + color: @muted-color; } .Categories-showOnMobile { @@ -250,7 +240,7 @@ border-radius: 6px; display: flex; justify-content: space-between; - background-color: @primary-color; + background-color: @control-bg; text-decoration: none !important; box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.18), 0 3px 10px 0 rgba(0, 0, 0, 0.15); @@ -323,7 +313,7 @@ .TagCategory-content { padding: 10px 20px; margin: 5px 0; - background-color: @categories-sub-color-background; + background-color: @control-bg-light; box-shadow: 0 2px 4px 0em rgba(0, 0, 0, 0.04), 0 3px 10px 0 rgba(0, 0, 0, 0.07); @@ -331,19 +321,6 @@ font-size: 18px; } - .TagCategory-icon { - .CategoryIcon { - color: @categories-sub-color-background; - } - - .CategoryIcon.NoBackgroundCategoryIcon { - color: @categories-sub-color-highlighted; - } - } - - &.hover:hover { - background-color: @categories-sub-color-background-hover; - } } &:first-child { @@ -379,7 +356,7 @@ .TagCategory.SubCategory { .StatWidget { - border-right: 2px solid @categories-sub-color-more-muted; + border-right: 2px solid @categories-color-white-more-muted; display: flex; } } @@ -609,6 +586,7 @@ .ParentCategory.compactMobile { > .TagCategory-content { padding: 10px 15px; + background-color: @control-bg; > :nth-child(1) { order: 1; @@ -666,7 +644,7 @@ .TagCategory-content { flex-direction: row; padding: 7px 15px; - background-color: fade(@categories-sub-color-background, 65%); + background-color: @control-bg-light; margin-right: 30px; } .TagCategory-name { diff --git a/resources/locale/en.yml b/resources/locale/en.yml index db1b08f..ccf2ec9 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -12,6 +12,8 @@ askvortsov-categories: parent_remove_stats: Hide stats for top-level tags? parent_remove_last_discussion: Hide most recent discussions for top-level tags? small_forum_optimized: Optimize for small forums? + enable_primary_tag_color: Enable Primary Tag Color? + enable_primary_child_tag_color: Enable Primary Tag Child Color? widget_header: Header widget_right: Right Sidebar widget_left: Left Sidebar @@ -25,7 +27,7 @@ askvortsov-categories: widget_right: Example Afrux Forum Widgets, Custom Html Widget widget_left: Example Forum Statistics Widget, Afrux Forum Widgets widget_footer: Example Afrux Forum Widgets - + colors: Display page with choice of Tag colous headings: nav: Navigation layout: Layout @@ -33,6 +35,7 @@ askvortsov-categories: child_display: Child Category Display performance: Performance widgets: Widgets Display + colors: Color Scheme title: Categories Settings forum: From 643832454294c18ad19109bcc9252f0a57b0aa33 Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Thu, 2 May 2024 00:16:33 +0100 Subject: [PATCH 4/8] Fix typo and rephrase sentence --- resources/locale/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/locale/en.yml b/resources/locale/en.yml index ccf2ec9..2742484 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -27,7 +27,7 @@ askvortsov-categories: widget_right: Example Afrux Forum Widgets, Custom Html Widget widget_left: Example Forum Statistics Widget, Afrux Forum Widgets widget_footer: Example Afrux Forum Widgets - colors: Display page with choice of Tag colous + colors: Display page with the Tags chosen colors headings: nav: Navigation layout: Layout From 3ed40652068debfcab256be17b9566c835e7adb7 Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Thu, 9 May 2024 23:47:22 +0100 Subject: [PATCH 5/8] Fix ordering of ItemList --- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- js/src/forum/components/CategoriesPage.tsx | 15 ++++----------- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/js/dist/forum.js b/js/dist/forum.js index 7ad7b79..8dc0c5c 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>et});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["common/utils/classList"];var L=t.n(I);const x=flarum.core.compat["tags/utils/sortTags"];var A=t.n(x);const D=flarum.core.compat["tags/helpers/tagLabel"];var M=t.n(D);const _=flarum.core.compat["common/Component"];var S=t.n(_);const O=flarum.core.compat["common/components/Link"];var U=t.n(O);const B=flarum.core.compat["common/helpers/icon"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:L()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},W()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(S());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s1&&a.children[1].children&&a.children[1].children.forEach((function(a,o){a.attrs.className||(p().forum.attribute("categories.widgetHeader")&&0==o?t.add("header-widget",a,100):p().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",a,0))})),t},o.contentItems=function(){var t=new(P()),a=this.tags.filter((function(t){return null!==t.position()})),o=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:p().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,T()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},a.map((function(t){return Y.component({model:t,enablePrimaryTagColor:p().forum.attribute("categories.enablePrimaryTagColor"),enablePrimaryChildTagColor:p().forum.attribute("categories.enablePrimaryChildTagColor")})}))),o.length?m("div",{className:"TagCloud"},o.map((function(t){return[M()(t,{link:!0})," "]}))):""),50),p().forum.attribute("categories.widgetRight")){var e=s().prototype.view();e.children.length>1&&e.children[1].children.length>1&&3===e.children[1].children[1].children.length&&t.add("widget",e.children[1].children[1].children[2],0)}return t},o.oncreate=function(a){t.prototype.oncreate.call(this,a),p().setTitle(N()(p().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},a}(v());const tt=flarum.core.compat["tags/forum/components/TagsPage"];var at=t.n(tt);function ot(t,a){var o=app.forum.attribute("categories.keepTagsNav"),e=app.current.matches(Z)||app.current.matches(at());for(var s in t.items)a(s)&&(s.startsWith("tag")?"tags"==s?o||t.remove(s):e&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:Z},d().prototype.postCount=c().attribute("postCount"),(0,o.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(i(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(Z)||app.current.matches(at())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(i(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),ot(t,(function(t){return t.startsWith("tag")})),t})),(0,o.extend)(s().prototype,"sidebarItems",(function(t){ot(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const et={"components/CategoriesPage":Z,"components/Category":Y,"components/LastDiscussionWidget":X,"components/StatWidget":j}})(),module.exports=a})(); +(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>et});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["tags/utils/sortTags"];var L=t.n(I);const x=flarum.core.compat["tags/helpers/tagLabel"];var A=t.n(x);const D=flarum.core.compat["common/Component"];var M=t.n(D);const _=flarum.core.compat["common/components/Link"];var S=t.n(_);const O=flarum.core.compat["common/helpers/icon"];var U=t.n(O);const B=flarum.core.compat["common/utils/classList"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:W()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},U()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(M());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s1&&a.children[1].children&&a.children[1].children.forEach((function(a,o){a.attrs.className||(p().forum.attribute("categories.widgetHeader")&&0==o?t.add("header-widget",a,100):p().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",a,0))})),t},o.contentItems=function(){var t=new(P()),a=this.tags.filter((function(t){return null!==t.position()})),o=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:p().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,T()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},a.map((function(t){return Y.component({model:t,enablePrimaryTagColor:p().forum.attribute("categories.enablePrimaryTagColor"),enablePrimaryChildTagColor:p().forum.attribute("categories.enablePrimaryChildTagColor")})}))),o.length?m("div",{className:"TagCloud"},o.map((function(t){return[A()(t,{link:!0})," "]}))):""),50),p().forum.attribute("categories.widgetRight")){var e=s().prototype.view();e.children.length>1&&e.children[1].children.length>1&&3===e.children[1].children[1].children.length&&t.add("widget",e.children[1].children[1].children[2],0)}return t},o.oncreate=function(a){t.prototype.oncreate.call(this,a),p().setTitle(N()(p().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},a}(v());const tt=flarum.core.compat["tags/forum/components/TagsPage"];var at=t.n(tt);function ot(t,a){var o=app.forum.attribute("categories.keepTagsNav"),e=app.current.matches(Z)||app.current.matches(at());for(var s in t.items)a(s)&&(s.startsWith("tag")?"tags"==s?o||t.remove(s):e&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:Z},d().prototype.postCount=c().attribute("postCount"),(0,o.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(i(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(Z)||app.current.matches(at())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(i(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),ot(t,(function(t){return t.startsWith("tag")})),t})),(0,o.extend)(s().prototype,"sidebarItems",(function(t){ot(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const et={"components/CategoriesPage":Z,"components/Category":Y,"components/LastDiscussionWidget":X,"components/StatWidget":j}})(),module.exports=a})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index a2eae7d..9c31a3d 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n const classes = ['CategoriesPage', 'container'];\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container', this.containerItems().toArray(), 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\r\n 'container',\r\n
\r\n {this.contentItems().toArray()}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,uDCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,8B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,mB,aCAzC,SAASC,EAAgBhB,EAAGiB,GAKzC,OAJAD,EAAkBf,OAAOiB,eAAiBjB,OAAOiB,eAAeC,OAAS,SAAyBnB,EAAGiB,GAEnG,OADAjB,EAAEoB,UAAYH,EACPjB,CACT,EACOgB,EAAgBhB,EAAGiB,EAC5B,CCLe,SAASI,EAAeC,EAAUC,GAC/CD,EAASf,UAAYN,OAAOuB,OAAOD,EAAWhB,WAC9Ce,EAASf,UAAUkB,YAAcH,EACjCJ,EAAeI,EAAUC,EAC3B,CCLA,MAAM,EAA+BV,OAAOC,KAAKC,OAAO,a,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,sC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,yB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,yB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,oB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCenCW,EAAU,SAAAC,GAAA,SAAAD,IAAA,OAAAC,EAAAC,MAAA,KAAAC,YAAA,KAAAR,EAAAK,EAAAC,GAAA,IAAAG,EAAAJ,EAAAnB,UAuB5B,OAvB4BuB,EAC7BC,KAAA,WACE,OACEC,EAAA,OAAKC,MAAOC,IAAU,aAAc,CAAE,wCAAyCC,IAAAA,MAAAA,UAAoB,6BAA+BC,KAAKC,MAAMC,YAC1IF,KAAKG,UAAUC,UAGtB,EAACV,EAEDS,QAAA,WAAU,IAAAE,EACFC,EAAQ,IAAIC,KAYlB,OAVAD,EAAME,IAAI,QAASZ,EAAA,OAAKC,MAAM,oBAAoBG,KAAKC,MAAMQ,OAAc,KAC3EH,EAAME,IACJ,QACAZ,EAAA,QAAAS,EAAA,CAAKR,MAAM,qBAAkB,MAAQG,KAAKC,MAAMC,UAAU,QAAOG,GAC/DT,EAAA,QAAMM,UAAU,2BAA2BQ,IAAKV,KAAKC,MAAMS,OAC3Dd,EAAA,QAAMM,UAAU,2BAA2BF,KAAKC,MAAMU,QAExD,IAGKL,CACT,EAAChB,CAAA,CAvB4B,CAASsB,KCfxC,MAAM,EAA+BnC,OAAOC,KAAKC,OAAO,yB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,2B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,6B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,oC,aCyBnCkC,EAAoB,SAAAtB,GAAA,SAAAsB,IAAA,QAAAC,EAAAC,EAAAtB,UAAAuB,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAA1B,UAAA0B,GAI5B,OAJ4BL,EAAAvB,EAAAlB,KAAAmB,MAAAD,EAAA,OAAA6B,OAAAH,KAAA,MAIvCI,iBAAW,EAAAP,CAAA,CAJ4B7B,EAAA4B,EAAAtB,GAI5B,IAAAG,EAAAmB,EAAA1C,UAuHV,OAvHUuB,EAEX4B,OAAA,SAAOC,GACLhC,EAAApB,UAAMmD,OAAMjD,KAAC,KAAAkD,GAEbvB,KAAKqB,aAAc,CACrB,EAAC3B,EAEDC,KAAA,WAAO,IAAA6B,EACCC,EAAazB,KAAKC,MAAMwB,WAE9B,OAAKA,GAIQA,EAAWC,iBAGtB9B,EAAC+B,IAAI,CAAC9B,MAAM,iBAAiB+B,KAAM7B,IAAAA,MAAAA,WAAqB0B,EAAuC,OAA7BD,EAAEC,EAAWI,kBAAgBL,EAAI,IAChGxB,KAAKG,UAAUC,YAPXR,EAAA,OAAKC,MAAM,kBAAkBE,IAAAA,WAAAA,MAAqB,qEAU7D,EAACL,EAEDS,QAAA,WACE,IAAMG,EAAQ,IAAIC,KAEZkB,EAAazB,KAAKC,MAAMwB,WACxBK,EAAOL,EAAWC,iBACpBxB,EAAY,kBAEZF,KAAKC,MAAM8B,YAAYC,QACrBhC,KAAKC,MAAM8B,YAAYE,yBACzB/B,EAAYgC,IAAkBlC,KAAKC,MAAM8B,YAAYI,IAAIC,UAM7D9B,EAAME,IACJ,SACAZ,EAAC+B,IAAI,CAACzB,UAAU,wBAAwB0B,KAAME,EAAO/B,IAAAA,MAAAA,KAAe+B,GAAQ,IAAK,aAAYO,IAAYC,IAASR,OAC7GA,GAAQS,IAAOT,IAEpB,KAGFxB,EAAME,IACJ,cACAZ,EAAA,OAAKC,MAAOC,IAAU,yBAA0BI,IAC9CN,EAAA,OAAKC,MAAOC,IAAU,2BAA4BI,EAAU,UACzDsC,IAAUf,EAAWgB,gBAAkB,IACxC7C,EAAC+B,IAAI,CAACzB,UAAWJ,IAAU,8BAA+BI,EAAU,SAAW0B,KAAME,EAAO/B,IAAAA,MAAAA,KAAe+B,GAAQ,KACjHlC,EAAA,QAAM8C,MAAO,CAAEC,QAAS,SAAUC,OAAQ,SAAWC,KAAK,gBAAe,KAGxEP,IAASR,KAGdlC,EAAA,OAAKC,MAAM,0BAAyBiD,EAAAA,EAAAA,UAASrB,EAAWsB,QAAS,MAEnE,IAGF,IAAIC,EAAyB,KAY7B,OAVIlB,GAAQ9B,KAAKqB,cACf2B,EAAOC,IAAAA,UAAmB,CACxBnB,KAAAA,EACA5B,UAAW,oBACXgD,wBAAyB,sCAI7B5C,EAAME,IAAI,OAAQZ,EAAA,OAAKC,MAAM,oCAAoCmD,GAAa,IAEvE1C,CACT,EAACZ,EAEDyD,SAAA,SAAS5B,GAAO,IAGV6B,EAHUC,EAAA,KACd9D,EAAApB,UAAMgF,SAAQ9E,KAAC,KAAAkD,GAIfvB,KAAKsD,IACFC,GAAG,YAAa,sFAAsF,WACrGC,aAAaJ,GACbA,EAAUK,OAAOC,WAAWL,EAAKM,SAAS5E,KAAKsE,GAAO,IACxD,IACCE,GAAG,WAAY,sFAAsF,WACpGC,aAAaJ,GACbA,EAAUK,OAAOC,WAAWL,EAAKO,SAAS7E,KAAKsE,GAAO,IACxD,GACJ,EAAC3D,EAEDmE,SAAA,SAAStC,GACPhC,EAAApB,UAAM0F,SAAQxF,KAAC,KAAAkD,GAEfvB,KAAKsD,IAAIQ,IAAI,qBACf,EAEApE,EAGAiE,SAAA,WAAW,IAAAI,EAAA,KACT/D,KAAKqB,aAAc,EAEnBzB,EAAEoE,SAEFN,YAAW,kBAAMK,EAAKT,EAAE,aAAaW,SAAS,KAAK,GACrD,EAEAvE,EAGAkE,SAAA,WACEN,EAAE,aAAaY,YAAY,MAC3BlE,KAAKqB,aAAc,EACnBzB,EAAEoE,QACJ,EAACnD,CAAA,CA3HsC,CAASD,KCS7BuD,EAAQ,SAAA5E,GAAA,SAAA4E,IAAA,QAAArD,EAAAC,EAAAtB,UAAAuB,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAA1B,UAAA0B,GAKlB,OALkBL,EAAAvB,EAAAlB,KAAAmB,MAAAD,EAAA,OAAA6B,OAAAH,KAAA,MAC3BkB,SAAG,EAAArB,EACHkB,aAAO,EAAAlB,EACPsD,eAAS,EAAAtD,EACTuD,uBAAiB,EAAAvD,EACjBwD,eAAS,EAAAxD,CAAA,CALkB7B,EAAAkF,EAAA5E,GAKlB,IAAAG,EAAAyE,EAAAhG,UAwVR,OAxVQuB,EAET4B,OAAA,SAAOC,GACLhC,EAAApB,UAAMmD,OAAMjD,KAAC,KAAAkD,GAEbvB,KAAKmC,IAAMnC,KAAKC,MAAMsE,MAEtBvE,KAAKgC,QAA+B,MAArBhC,KAAKC,MAAMuE,QAAuCC,MAArBzE,KAAKC,MAAMuE,OAEvDxE,KAAKoE,WAAY,EAGiB,mBAAvBpE,KAAKmC,IAAIuC,cACb1E,KAAKmC,IAAIwC,qBAAsB3E,KAAKmC,IAAIyC,uBAA2B5E,KAAKmC,IAAIuC,eAC/E1E,KAAKsE,UAAY,CACf5D,KAAMV,KAAKmC,IAAIyC,sBAAwBlE,IAAK,eAAiBA,IAAK,oBAClEmE,KAAM7E,KAAKmC,IAAIyC,sBAAwB7E,IAAAA,WAAAA,MAAqB,8DAAgEA,IAAAA,WAAAA,MAAqB,2DACjJ+E,UAA4D,GAAjD9E,KAAKmC,IAAI4C,wCAK1BtB,OAAOuB,iBAAiB,UAAU,WAChCpF,EAAEoE,QACJ,GACF,EAACtE,EAEDC,KAAA,WACE,IAAMwC,EAAMnC,KAAKmC,IAEjB,OAAKA,EAEMnC,KAAKsE,YAActE,KAAKsE,UAAUQ,UAEpC,MAGT9E,KAAKqE,oBAAsBtE,IAAAA,MAAAA,UAAoB,4BAG7CH,EAAA,MACEM,UAAWJ,IAAU,cAAe,eAAeqC,EAAI8C,OAAU,CAC/DC,YAAalF,KAAKgC,QAClBmD,gBAAiBnF,KAAKgC,QACtBoD,cAAepF,KAAKqE,qBAGrBrE,KAAKqF,gBAAgBjF,YAhBjB,IAmBX,EAACV,EAED2F,cAAA,WAAgB,IAAAhC,EAAA,KACR/C,EAAQ,IAAIC,KACZ4B,EAAMnC,KAAKmC,IAEXmD,EAAWtF,KAAKgC,QAAU,GAAKuD,IAASpD,EAAImD,YAAc,IAE5D5C,EAAiC,CAAC,EA4BtC,OA3BI1C,KAAKgC,QACHhC,KAAKC,MAAMuF,6BACb9C,EAAM+C,gBAAkBzF,KAAKmC,IAAIC,SAE1BpC,KAAKC,MAAMyF,wBACpBhD,EAAM+C,gBAAkBzF,KAAKmC,IAAIC,SAEnC9B,EAAME,IACJ,OACAZ,EAAC+B,IAAI,CACHzB,UAAS,wBAAyBH,IAAAA,MAAAA,UAAoB,4BAA6B,gBAAkB,IAAE,wBAAyBoC,EAAI8C,OACpIvC,MAAOA,EACPd,KAAM7B,IAAAA,MAAAA,IAAcoC,IAEnBnC,KAAK2F,eAAevF,WAEvB,KAGGJ,KAAKqE,mBAAsBrE,KAAKgC,SACnC1B,EAAME,IACJ,WACAZ,EAAA,MAAIM,UAAU,0BAA0BoF,EAASM,KAAI,SAACC,GAAK,MAAK,CAAC1B,EAAS2B,UAAU,CAAEvB,MAAOsB,EAAOrB,OAAQnB,EAAMmC,2BAA4BnC,EAAKpD,MAAMuF,6BAA6B,KACtL,IAIGlF,CACT,EAACZ,EAEDiG,aAAA,WAAe,IAAA5B,EAAA,KACPzD,EAAQ,IAAIC,KAEZ+E,EAAWtF,KAAKgC,QAAU,GAAKuD,IAASvF,KAAKmC,IAAImD,YAAc,IAEjEpF,EAAY,kBAmBhB,OAlBIF,KAAKC,MAAMyF,uBAA0B1F,KAAKgC,SAAWhC,KAAKC,MAAMuF,8BAClEtF,EAAagC,IAAkBlC,KAAKmC,IAAIC,UAG1C9B,EAAME,IAAI,aAAcZ,EAAA,OAAKM,UAAWJ,IAAU,yBAA0BI,IAAaF,KAAK+F,kBAAkB3F,WAAkB,KAElIE,EAAME,IAAI,WAAYZ,EAAA,OAAKM,UAAWJ,IAAU,uBAAwBI,IAAaF,KAAKgG,gBAAgB5F,WAAkB,KAEjGJ,KAAKgC,SAAWhC,KAAKqE,oBAEtBrE,KAAKoE,WAC7B9D,EAAME,IACJ,WACAZ,EAAA,MAAIM,UAAU,0BAA0BoF,EAASM,KAAI,SAACC,GAAK,MAAK,CAAC1B,EAAS2B,UAAU,CAAEvB,MAAOsB,EAAOrB,OAAQT,EAAMyB,2BAA4BzB,EAAK9D,MAAMuF,6BAA6B,KACtL,IAIGlF,CACT,EAACZ,EAEDqG,gBAAA,WAAkB,IAAAE,EAAA,KACV3F,EAAQ,IAAIC,KAEZ+E,EAAWtF,KAAKgC,QAAU,GAAKuD,IAASvF,KAAKmC,IAAImD,YAAc,IACjE5C,EAAiC,CAAC,EA2BtC,OA1BI1C,KAAKgC,QACFhC,KAAKC,MAAMuF,6BACd9C,EAAMN,MAAQpC,KAAKmC,IAAIC,SAEfpC,KAAKC,MAAMyF,wBACrBhD,EAAMN,MAAQpC,KAAKmC,IAAIC,SAEzB9B,EAAME,IAAI,OAAQZ,EAAA,QAAMM,UAAU,mBAAmBwC,MAAOA,GAAQ1C,KAAKkG,YAAY9F,WAAmB,KAExGE,EAAME,IAAI,OAAQZ,EAAA,OAAKM,UAAU,oBAAoBF,KAAKmG,YAAY/F,WAAkB,IAElFkF,EAAStE,QACbV,EAAME,IACJ,cACAZ,EAAA,UACEM,UAAU,2CACVkG,QAAS,SAACC,GACRJ,EAAKK,YAAYD,EACnB,GAEC3F,IAAKV,KAAKoE,UAAY,oBAAsB,oBAE/C,IAIG9D,CACT,EAACZ,EAEDsG,cAAA,WACE,IAAM1F,EAAQ,IAAIC,KAElB,GAAIP,KAAKsE,UAEP,OADAhE,EAAME,IAAI,SAAUZ,EAAA,OAAKM,UAAU,sBAAsBF,KAAKuG,cAAcnG,WAAkB,KACvFE,EAGT,IAAM6B,EAAMnC,KAAKmC,IAUjB,OARA7B,EAAME,IAAI,QAASZ,EAAA,OAAKM,UAAU,oCAAoCF,KAAKwG,YAAYpG,WAAkB,KAEzGE,EAAME,IACJ,iBACAZ,EAAA,OAAKM,UAAWJ,IAAU,6BAA8B,CAAE2G,OAAQtE,EAAIuE,0BAA4B1G,KAAK2G,sBAAsBvG,WAC7H,IAGKE,CACT,EAACZ,EAED6G,YAAA,WACE,IAAMjG,EAAQ,IAAIC,KACZqG,EAAU5G,KAAKqE,kBAAoB,iBAAmB,iBAgB5D,OAfA/D,EAAME,IACJ,OACAZ,EAAA,QAAMM,UAAW0G,GAEbhH,EAAA,KAAGM,UAAU,cAAcwC,MAAO,CAAEN,MAAOpC,KAAKmC,IAAIC,WAErDpC,KAAKsE,UAAU5D,MAElB,IAEFJ,EAAME,IACJ,aACAZ,EAAA,OAAKM,UAAWJ,IAAU,2BAA4BE,KAAKsE,UAAUO,MACrE,IAEKvE,CACT,EAACZ,EAEDwG,UAAA,WACE,IAAM5F,EAAQ,IAAIC,KAElB,GAAIP,KAAKmC,IAAIzB,QAAUV,KAAKgC,QAAS,CACnC,IAAMU,EAAiC,CAAC,EAEpCmE,EAAc,CAAC,4BAEf9G,IAAAA,MAAAA,UAAoB,4BAClBC,KAAKC,MAAMuF,2BACb9C,EAAMN,MAAQpC,KAAKmC,IAAIC,QAEvByE,EAAYC,KAAK,2BAA4B,oBAG3C9G,KAAKC,MAAMuF,2BACbqB,EAAYC,KAAK5E,IAAkBlC,KAAKmC,IAAIC,UAE5CM,EAAMN,MAAQpC,KAAKmC,IAAIC,QAI3B,IAAMlC,EAAYF,KAAKqE,kBAAoB,iBAAmB,iBAE9D/D,EAAME,IACJ,OACAZ,EAAA,QAAMM,UAAWA,KACZH,IAAAA,MAAAA,UAAoB,6BACrBH,EAAA,KAAGM,UAAU,2CAA2CwC,MAAO1C,KAAKC,MAAMuF,2BAA2B,CAAC,EAAE,CAAEpD,MAAOpC,KAAKmC,IAAIC,WAE3H1B,IAAKV,KAAKmC,IAAIzB,OAAQ,CAAER,UAAWJ,IAAU+G,GAAcnE,MAAOA,KAErE,GAEJ,MAAO,GAAI1C,KAAKmC,IAAIzB,SAAWX,IAAAA,MAAAA,UAAoB,+BAAgC,CACjF,IAAM6G,EAAU5G,KAAKqE,kBAAoB,iBAAmB,iBAE5D/D,EAAME,IAAI,OAAQZ,EAAA,QAAMM,UAAW0G,GAAUlG,IAAKV,KAAKmC,IAAIzB,OAAQ,CAAER,UAAW,8BAAuC,GACzH,CAEA,OAAOI,CACT,EAACZ,EAEDyG,UAAA,WACE,IAAM7F,EAAQ,IAAIC,KAElBD,EAAME,IAAI,OAAQZ,EAAA,MAAIM,UAAU,oBAAoBF,KAAKmC,IAAI4E,QAAc,IAE3E,IAAI7G,EAAY,kBAYhB,OAXIF,KAAKgC,QACHhC,KAAKC,MAAMuF,6BACbtF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,SAAS,SAEzCpC,KAAKC,MAAMyF,wBACpBxF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,SAAS,UAE9CpC,KAAKmC,IAAI6E,gBAAkBhH,KAAKgC,SAAYjC,IAAAA,MAAAA,UAAoB,uCAClEO,EAAME,IAAI,cAAeZ,EAAA,OAAKM,UAAWJ,IAAU,0BAA2BI,IAAaF,KAAKmC,IAAI6E,eAAsB,IAGrH1G,CACT,EAACZ,EAED8G,UAAA,WACE,IAAMlG,EAAQ,IAAIC,KACdL,EAAY,kBAiChB,OA/BIF,KAAKgC,QACHhC,KAAKC,MAAMuF,6BACbtF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,UAEhCpC,KAAKC,MAAMyF,wBACpBxF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,WAErCpC,KAAKgC,SAAYjC,IAAAA,MAAAA,UAAoB,kCACvCO,EAAME,IACJ,kBACAlB,EAAWwG,UAAU,CACnBrF,MAAOwG,KAAKC,eAAeC,OAAOnH,KAAKmC,IAAIiF,mBAC3CzG,MAAOZ,IAAAA,WAAAA,MAAqB,6DAC5BW,KAAM,kBACNR,UAAWA,IAEb,IAGFI,EAAME,IACJ,YACAlB,EAAWwG,UAAU,CACnBrF,MAAOwG,KAAKC,eAAeC,OAAOnH,KAAKmC,IAAIkF,aAC3C1G,MAAOZ,IAAAA,WAAAA,MAAqB,uDAC5BW,KAAM,iBACNR,UAAWA,IAEb,KAIGI,CACT,EAACZ,EAEDiH,oBAAA,WACE,IAAMrG,EAAQ,IAAIC,KAiBlB,OAfIP,KAAKgC,SAAYjC,IAAAA,MAAAA,UAAoB,0CACvCO,EAAME,IACJ,iBACAK,EAAqBiF,UAAU,CAC7BrE,WAAYzB,KAAKmC,IAAIuE,uBACrB3E,YAAa,CACXI,IAAKnC,KAAKmC,IACVH,QAAShC,KAAKgC,QACdC,uBAAwBjC,KAAKgC,QAAShC,KAAKC,MAAMuF,2BAA4BxF,KAAKC,MAAMyF,yBAG5F,IAIGpF,CACT,EAACZ,EAEDyD,SAAA,SAAS5B,GACPhC,EAAApB,UAAMgF,SAAQ9E,KAAC,KAAAkD,GAEfvB,KAAKsD,EAAE,iDAAiDC,GAAG,cAAc,SAAU8C,GACjF/C,EAAEtD,MAAMiE,SAAS,UACbX,EAAEtD,MAAMwE,SAAS8C,SAAS,gBAAkBhE,EAAEtD,MAAMsH,SAAS,6BAC/DhE,EAAEtD,MAAMuH,QAAQ,mBAAmBjC,SAAS,wBAAwBpB,YAAY,QAEpF,IAEAlE,KAAKsD,EAAE,iDAAiDC,GAAG,cAAc,SAAU8C,GACjF/C,EAAEtD,MAAMkE,YAAY,UAChBZ,EAAEtD,MAAMwE,SAAS8C,SAAS,gBAAkBhE,EAAEtD,MAAMsH,SAAS,6BAC/DhE,EAAEtD,MAAMuH,QAAQ,mBAAmBjC,SAAS,wBAAwBrB,SAAS,QAEjF,GACF,EAACvE,EAEDmE,SAAA,SAAStC,GACPhC,EAAApB,UAAM0F,SAAQxF,KAAC,KAAAkD,GAEfvB,KAAKsD,EAAE,iDAAiDQ,IAAI,cAC5D9D,KAAKsD,EAAE,iDAAiDQ,IAAI,aAC9D,EAACpE,EAED4G,YAAA,SAAYD,GACVA,EAAEmB,iBACFnB,EAAEoB,kBACFzH,KAAKoE,WAAapE,KAAKoE,UACvBxE,EAAEoE,QACJ,EAACG,CAAA,CA7V0B,CAASvD,KCpBjB8G,EAAc,SAAAC,GAAA,SAAAD,IAAA,QAAA5G,EAAAC,EAAAtB,UAAAuB,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAA1B,UAAA0B,GAE1B,OAF0BL,EAAA6G,EAAAtJ,KAAAmB,MAAAmI,EAAA,OAAAvG,OAAAH,KAAA,MACjC2G,UAAI,EAAA9G,EACJ+G,aAAO,EAAA/G,CAAA,CAF0B7B,EAAAyI,EAAAC,GAE1B,IAAAjI,EAAAgI,EAAAvJ,UA2GN,OA3GMuB,EAEP4B,OAAA,SAAOC,GAAO,IAAA8B,EAAA,KACZsE,EAAAxJ,UAAMmD,OAAMjD,KAAC,KAAAkD,GAEbxB,IAAAA,QAAAA,KAAiB,aAAcsC,IAAYtC,IAAAA,WAAAA,MAAqB,iEAEhEC,KAAK4H,KAAO,GAEZ,IAAME,EAAY/H,IAAAA,uBAEd+H,EACF9H,KAAK4H,KAAOrC,IAASuC,EAAUC,QAAO,SAAC5F,GAAQ,OAAMA,EAAIH,SAAS,MAIpEhC,KAAK6H,SAAU,EAEf9H,IAAAA,QAAAA,KAAiB,CAAC,SAAU,WAAY,uBAAwB,wCAAwCiI,MAAK,WAC3G3E,EAAKuE,KAAOrC,IAASxF,IAAAA,MAAAA,IAAc,QAAQgI,QAAO,SAAC5F,GAAG,OAAMA,EAAIH,SAAS,KAEzEqB,EAAKwE,SAAU,EAEfjI,EAAEoE,QACJ,IACF,EAACtE,EAEDC,KAAA,WACE,OAAIK,KAAK6H,QACAjI,EAACqI,IAAgB,MAGnBrI,EAAA,OAAKM,UAAU,kBAAkBF,KAAKkI,YAAY9H,UAC3D,EAACV,EAEDwI,UAAA,WACE,IAAM5H,EAAQ,IAAIC,KAMlB,OAJAD,EAAME,IAAI,OAAQ2H,IAAAA,UAAAA,OAA4B,KAE9C7H,EAAME,IAAI,YAAaZ,EAAA,OAAKC,MAAM,aAAaG,KAAKoI,iBAAiBhI,WAAkB,IAEhFE,CACT,EAACZ,EAED0I,eAAA,WACE,IAAM9H,EAAQ,IAAIC,KACZ8H,EAAYF,IAAAA,UAAAA,OAgBlB,OAfA7H,EAAME,IAAI,mBAAoBZ,EAAA,OAAKC,MAAOE,IAAAA,MAAAA,UAAoB,8BAAgC,kBAAoB,oBAAqBC,KAAK2F,eAAevF,WAAkB,KAGxKL,IAAAA,MAAAA,UAAoB,4BAA8BA,IAAAA,MAAAA,UAAoB,6BAA+BsI,EAAU/C,SAAStE,OAAS,GAAKqH,EAAU/C,SAAS,GAAGA,UAC/J+C,EAAU/C,SAAS,GAAGA,SAASgD,SAAQ,SAACzC,EAAO0C,GACxC1C,EAAM5F,MAAMC,YAEXH,IAAAA,MAAAA,UAAoB,4BAAuC,GAATwI,EACpDjI,EAAME,IAAI,gBAAiBqF,EAAO,KACzB9F,IAAAA,MAAAA,UAAoB,4BAC7BO,EAAME,IAAI,gBAAiBqF,EAAO,GAGxC,IAEKvF,CACT,EAACZ,EAEDiG,aAAA,WACE,IAAMrF,EAAQ,IAAIC,KAEZiI,EAASxI,KAAK4H,KAAKG,QAAO,SAAC5F,GAAG,OAAwB,OAAnBA,EAAIsG,UAAmB,IAC1DC,EAAQ1I,KAAK4H,KAAKG,QAAO,SAAC5F,GAAG,OAAwB,OAAnBA,EAAIsG,UAAmB,IAwB/D,GAtBAnI,EAAME,IACJ,UACEZ,EAAA,OAAKM,UAAWH,IAAAA,MAAAA,UAAoB,8BAAgC,0CAA4C,4CAC9GH,EAAA,UAAK+I,IAAUR,IAAAA,UAAAA,eAAmC/H,aAEtD,KAGFE,EAAME,IACJ,iBACAZ,EAAA,OAAKM,UAAU,wCACbN,EAAA,MAAIM,UAAU,mBACXsI,EAAO5C,KAAI,SAACzD,GACX,OAAOgC,EAAS2B,UAAU,CAAEvB,MAAOpC,EAAKuD,sBAAuB3F,IAAAA,MAAAA,UAAoB,oCAAqCyF,2BAA4BzF,IAAAA,MAAAA,UAAoB,0CAC1K,KAGD2I,EAAM1H,OAASpB,EAAA,OAAKM,UAAU,YAAYwI,EAAM9C,KAAI,SAACzD,GAAG,MAAK,CAACyG,IAASzG,EAAK,CAAE0G,MAAM,IAAS,IAAI,KAAW,IAE/G,IAGE9I,IAAAA,MAAAA,UAAoB,0BAA2B,CACjD,IAAMsI,EAAYF,IAAAA,UAAAA,OACdE,EAAU/C,SAAStE,OAAS,GAAKqH,EAAU/C,SAAS,GAAGA,SAAStE,OAAS,GAA2D,IAAtDqH,EAAU/C,SAAS,GAAGA,SAAS,GAAGA,SAAStE,QAC3HV,EAAME,IAAI,SAAU6H,EAAU/C,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAAI,EAEvE,CACA,OAAOhF,CACT,EAACZ,EAEDyD,SAAA,SAAS5B,GACPoG,EAAAxJ,UAAMgF,SAAQ9E,KAAC,KAAAkD,GAEfxB,IAAAA,SAAasC,IAAYtC,IAAAA,WAAAA,MAAqB,+DAChD,EAAC2H,CAAA,CA7GgC,CAASoB,KCd5C,MAAM,GAA+BrK,OAAOC,KAAKC,OAAO,kC,eCaxD,SAASoK,GAAczI,EAAO0I,GAC5B,IAAMC,EAAoBlJ,IAAImJ,MAAMC,UAAU,0BAExCC,EAAsBrJ,IAAIsJ,QAAQC,QAAQ5B,IAAmB3H,IAAIsJ,QAAQC,QAAQC,MACvF,IAAK,IAAMC,KAAQlJ,EAAMA,MACnB0I,EAAKQ,KACJA,EAAKC,WAAW,OACN,QAARD,EAKIP,GACH3I,EAAMoJ,OAAOF,GAMXJ,GACF9I,EAAMoJ,OAAOF,GAOZzJ,IAAImJ,MAAMC,UAAU,0BACvB7I,EAAMoJ,OAAOF,IAKrB,OAAOlJ,CACT,CC/CqC7B,OAAOC,KAAKC,OAAO,gEDiDxDoB,IAAI4J,aAAanJ,IAAI,gCAAgC,WACnDT,IAAI6J,OAAOC,WAAa,CACtBC,KAAM,cACNhE,UAAW4B,GAGbqC,IAAAA,UAAAA,UAA0BC,IAAAA,UAAgB,cAE1CC,EAAAA,EAAAA,QAAO9B,IAAAA,UAAqB,YAAY,SAAU7H,GAoBhD,OAnBAA,EAAME,IACJ,aACAZ,EAACsK,IAAU,CAACxJ,KAAK,iBAAiBkB,KAAM7B,IAAIoK,MAAM,eAC/CpK,IAAIqK,WAAWC,MAAM,uDAEvB,KAGCtK,IAAIsJ,QAAQC,QAAQ5B,IAAmB3H,IAAIsJ,QAAQC,QAAQC,MAE7DjJ,EAAMoJ,OAAO,YAETpJ,EAAMgK,IAAI,aACZhK,EAAMiK,QAAQ,WAAY3K,EAACsK,IAAU,CAACtI,KAAM7B,IAAIoK,MAAM,eAAgBpK,IAAIqK,WAAWC,MAAM,uCAI/FtB,GAAczI,GAAO,SAACkJ,GAAI,OAAKA,EAAKC,WAAW,MAAM,IAE9CnJ,CACT,KAEA2J,EAAAA,EAAAA,QAAO9B,IAAAA,UAAqB,gBAAgB,SAAU7H,GACpDyI,GAAczI,GAAO,SAACkJ,GAAI,MAAc,kBAATA,GAAqC,QAATA,CAAc,GAC3E,GACF,IAEA,UACE,4BAA6B9B,EAC7B,sBAAuBvD,EACvB,kCAAmCtD,EACnC,wBAAyBvB,E","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container',
{this.containerItems().toArray()}
, 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\"sideNavContainer\",
{this.contentItems().toArray()}
, 50);\r\n\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/forum/components/CategoriesPage.tsx b/js/src/forum/components/CategoriesPage.tsx index 3dd01c3..edcb759 100644 --- a/js/src/forum/components/CategoriesPage.tsx +++ b/js/src/forum/components/CategoriesPage.tsx @@ -46,9 +46,7 @@ export default class CategoriesPage extends Page { return ; } - const classes = ['CategoriesPage', 'container']; - - return
{this.pageItems().toArray()}
; + return
{this.pageItems().toArray()}
; } pageItems() { @@ -56,7 +54,7 @@ export default class CategoriesPage extends Page { items.add('hero', IndexPage.prototype.hero(), 100); - items.add('container', this.containerItems().toArray(), 50); + items.add('container',
{this.containerItems().toArray()}
, 50); return items; } @@ -64,13 +62,8 @@ export default class CategoriesPage extends Page { containerItems() { const items = new ItemList(); const indexPage = IndexPage.prototype.view(); - items.add( - 'container', -
- {this.contentItems().toArray()} -
, - 50 - ); + items.add("sideNavContainer",
{this.contentItems().toArray()}
, 50); + // Only check for widget for the header and footer if enable in the settings if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) { indexPage.children[1].children.forEach((child, index) => { From b738e449d95ac8c534161fdcb452808a6c867f7d Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Fri, 10 May 2024 02:58:25 +0100 Subject: [PATCH 6/8] Improved widget container finder with the add findWidgetContainer function. POSITION_ANY = No position check POSITION_FIRST = First container only POSITION_AFTER_FIRST = After the first container --- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- js/src/forum/components/CategoriesPage.tsx | 73 +++++++++++++++++----- 3 files changed, 58 insertions(+), 19 deletions(-) diff --git a/js/dist/forum.js b/js/dist/forum.js index 8dc0c5c..bc5b22a 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>et});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["tags/utils/sortTags"];var L=t.n(I);const x=flarum.core.compat["tags/helpers/tagLabel"];var A=t.n(x);const D=flarum.core.compat["common/Component"];var M=t.n(D);const _=flarum.core.compat["common/components/Link"];var S=t.n(_);const O=flarum.core.compat["common/helpers/icon"];var U=t.n(O);const B=flarum.core.compat["common/utils/classList"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:W()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},U()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(M());const E=flarum.core.compat["common/helpers/avatar"];var R=t.n(E);const V=flarum.core.compat["common/helpers/username"];var F=t.n(V);const z=flarum.core.compat["common/helpers/humanTime"];var H=t.n(z);const G=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s1&&a.children[1].children&&a.children[1].children.forEach((function(a,o){a.attrs.className||(p().forum.attribute("categories.widgetHeader")&&0==o?t.add("header-widget",a,100):p().forum.attribute("categories.widgetFooter")&&t.add("footer-widget",a,0))})),t},o.contentItems=function(){var t=new(P()),a=this.tags.filter((function(t){return null!==t.position()})),o=this.tags.filter((function(t){return null===t.position()}));if(t.add("sideNav",m("nav",{className:p().forum.attribute("categories.fullPageDesktop")?"CategoriesPage-nav IndexPage-nav topNav":"CategoriesPage-nav IndexPage-nav sideNav"},m("ul",null,T()(s().prototype.sidebarItems().toArray()))),100),t.add("categoriesList",m("div",{className:"CategoriesPage-content sideNavOffset"},m("ol",{className:"TagCategoryList"},a.map((function(t){return Y.component({model:t,enablePrimaryTagColor:p().forum.attribute("categories.enablePrimaryTagColor"),enablePrimaryChildTagColor:p().forum.attribute("categories.enablePrimaryChildTagColor")})}))),o.length?m("div",{className:"TagCloud"},o.map((function(t){return[A()(t,{link:!0})," "]}))):""),50),p().forum.attribute("categories.widgetRight")){var e=s().prototype.view();e.children.length>1&&e.children[1].children.length>1&&3===e.children[1].children[1].children.length&&t.add("widget",e.children[1].children[1].children[2],0)}return t},o.oncreate=function(a){t.prototype.oncreate.call(this,a),p().setTitle(N()(p().translator.trans("askvortsov-categories.forum.all_categories.meta_title_text")))},a}(v());const tt=flarum.core.compat["tags/forum/components/TagsPage"];var at=t.n(tt);function ot(t,a){var o=app.forum.attribute("categories.keepTagsNav"),e=app.current.matches(Z)||app.current.matches(at());for(var s in t.items)a(s)&&(s.startsWith("tag")?"tags"==s?o||t.remove(s):e&&t.remove(s):app.forum.attribute("categories.widgetLeft")||t.remove(s));return t}flarum.core.compat["extensions/afrux-forum-widgets-core/common/utils/sortWidgets"],app.initializers.add("askvortsov/flarum-categories",(function(){app.routes.categories={path:"/categories",component:Z},d().prototype.postCount=c().attribute("postCount"),(0,o.extend)(s().prototype,"navItems",(function(t){return t.add("categories",m(i(),{icon:"fas fa-th-list",href:app.route("categories")},app.translator.trans("askvortsov-categories.forum.index.categories_link")),-9.5),app.current.matches(Z)||app.current.matches(at())?t.remove("moreTags"):t.has("moreTags")&&t.replace("moreTags",m(i(),{href:app.route("categories")},app.translator.trans("flarum-tags.forum.index.more_link"))),ot(t,(function(t){return t.startsWith("tag")})),t})),(0,o.extend)(s().prototype,"sidebarItems",(function(t){ot(t,(function(t){return"newDiscussion"!==t&&"nav"!==t}))}))}));const et={"components/CategoriesPage":Z,"components/Category":Y,"components/LastDiscussionWidget":X,"components/StatWidget":j}})(),module.exports=a})(); +(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>nt});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["tags/utils/sortTags"];var L=t.n(I);const x=flarum.core.compat["tags/helpers/tagLabel"];var A=t.n(x);const D=flarum.core.compat["common/Component"];var M=t.n(D);const _=flarum.core.compat["common/components/Link"];var S=t.n(_);const O=flarum.core.compat["common/helpers/icon"];var U=t.n(O);const B=flarum.core.compat["common/utils/classList"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:W()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},U()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(M());const R=flarum.core.compat["common/helpers/avatar"];var V=t.n(R);const E=flarum.core.compat["common/helpers/username"];var F=t.n(E);const z=flarum.core.compat["common/helpers/humanTime"];var G=t.n(z);const H=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0)&&(c=!0),c)return(o+=1)==a.length?r:ot(r,a,o,e)}}}var et=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport classList from 'flarum/common/utils/classList';\r\n\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container',
{this.containerItems().toArray()}
, 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n items.add(\"sideNavContainer\",
{this.contentItems().toArray()}
, 50);\r\n\r\n // Only check for widget for the header and footer if enable in the settings\r\n if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) {\r\n indexPage.children[1].children.forEach((child, index) => {\r\n if (!child.attrs.className) {\r\n // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer\r\n if (app.forum.attribute('categories.widgetHeader') && index == 0) {\r\n items.add('header-widget', child, 100);\r\n } else if (app.forum.attribute('categories.widgetFooter')) {\r\n items.add('footer-widget', child, 0);\r\n }\r\n }\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for widget for the right if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) {\r\n items.add('widget', indexPage.children[1].children[1].children[2], 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","forEach","index","pinned","position","cloud","listItems","tagLabel","link","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,uDCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,8B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,mB,aCAzC,SAASC,EAAgBhB,EAAGiB,GAKzC,OAJAD,EAAkBf,OAAOiB,eAAiBjB,OAAOiB,eAAeC,OAAS,SAAyBnB,EAAGiB,GAEnG,OADAjB,EAAEoB,UAAYH,EACPjB,CACT,EACOgB,EAAgBhB,EAAGiB,EAC5B,CCLe,SAASI,EAAeC,EAAUC,GAC/CD,EAASf,UAAYN,OAAOuB,OAAOD,EAAWhB,WAC9Ce,EAASf,UAAUkB,YAAcH,EACjCJ,EAAeI,EAAUC,EAC3B,CCLA,MAAM,EAA+BV,OAAOC,KAAKC,OAAO,a,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,sC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,yB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,yB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,oB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCenCW,EAAU,SAAAC,GAAA,SAAAD,IAAA,OAAAC,EAAAC,MAAA,KAAAC,YAAA,KAAAR,EAAAK,EAAAC,GAAA,IAAAG,EAAAJ,EAAAnB,UAuB5B,OAvB4BuB,EAC7BC,KAAA,WACE,OACEC,EAAA,OAAKC,MAAOC,IAAU,aAAc,CAAE,wCAAyCC,IAAAA,MAAAA,UAAoB,6BAA+BC,KAAKC,MAAMC,YAC1IF,KAAKG,UAAUC,UAGtB,EAACV,EAEDS,QAAA,WAAU,IAAAE,EACFC,EAAQ,IAAIC,KAYlB,OAVAD,EAAME,IAAI,QAASZ,EAAA,OAAKC,MAAM,oBAAoBG,KAAKC,MAAMQ,OAAc,KAC3EH,EAAME,IACJ,QACAZ,EAAA,QAAAS,EAAA,CAAKR,MAAM,qBAAkB,MAAQG,KAAKC,MAAMC,UAAU,QAAOG,GAC/DT,EAAA,QAAMM,UAAU,2BAA2BQ,IAAKV,KAAKC,MAAMS,OAC3Dd,EAAA,QAAMM,UAAU,2BAA2BF,KAAKC,MAAMU,QAExD,IAGKL,CACT,EAAChB,CAAA,CAvB4B,CAASsB,KCfxC,MAAM,EAA+BnC,OAAOC,KAAKC,OAAO,yB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,2B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,6B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,oC,aCyBnCkC,EAAoB,SAAAtB,GAAA,SAAAsB,IAAA,QAAAC,EAAAC,EAAAtB,UAAAuB,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAA1B,UAAA0B,GAI5B,OAJ4BL,EAAAvB,EAAAlB,KAAAmB,MAAAD,EAAA,OAAA6B,OAAAH,KAAA,MAIvCI,iBAAW,EAAAP,CAAA,CAJ4B7B,EAAA4B,EAAAtB,GAI5B,IAAAG,EAAAmB,EAAA1C,UAuHV,OAvHUuB,EAEX4B,OAAA,SAAOC,GACLhC,EAAApB,UAAMmD,OAAMjD,KAAC,KAAAkD,GAEbvB,KAAKqB,aAAc,CACrB,EAAC3B,EAEDC,KAAA,WAAO,IAAA6B,EACCC,EAAazB,KAAKC,MAAMwB,WAE9B,OAAKA,GAIQA,EAAWC,iBAGtB9B,EAAC+B,IAAI,CAAC9B,MAAM,iBAAiB+B,KAAM7B,IAAAA,MAAAA,WAAqB0B,EAAuC,OAA7BD,EAAEC,EAAWI,kBAAgBL,EAAI,IAChGxB,KAAKG,UAAUC,YAPXR,EAAA,OAAKC,MAAM,kBAAkBE,IAAAA,WAAAA,MAAqB,qEAU7D,EAACL,EAEDS,QAAA,WACE,IAAMG,EAAQ,IAAIC,KAEZkB,EAAazB,KAAKC,MAAMwB,WACxBK,EAAOL,EAAWC,iBACpBxB,EAAY,kBAEZF,KAAKC,MAAM8B,YAAYC,QACrBhC,KAAKC,MAAM8B,YAAYE,yBACzB/B,EAAYgC,IAAkBlC,KAAKC,MAAM8B,YAAYI,IAAIC,UAM7D9B,EAAME,IACJ,SACAZ,EAAC+B,IAAI,CAACzB,UAAU,wBAAwB0B,KAAME,EAAO/B,IAAAA,MAAAA,KAAe+B,GAAQ,IAAK,aAAYO,IAAYC,IAASR,OAC7GA,GAAQS,IAAOT,IAEpB,KAGFxB,EAAME,IACJ,cACAZ,EAAA,OAAKC,MAAOC,IAAU,yBAA0BI,IAC9CN,EAAA,OAAKC,MAAOC,IAAU,2BAA4BI,EAAU,UACzDsC,IAAUf,EAAWgB,gBAAkB,IACxC7C,EAAC+B,IAAI,CAACzB,UAAWJ,IAAU,8BAA+BI,EAAU,SAAW0B,KAAME,EAAO/B,IAAAA,MAAAA,KAAe+B,GAAQ,KACjHlC,EAAA,QAAM8C,MAAO,CAAEC,QAAS,SAAUC,OAAQ,SAAWC,KAAK,gBAAe,KAGxEP,IAASR,KAGdlC,EAAA,OAAKC,MAAM,0BAAyBiD,EAAAA,EAAAA,UAASrB,EAAWsB,QAAS,MAEnE,IAGF,IAAIC,EAAyB,KAY7B,OAVIlB,GAAQ9B,KAAKqB,cACf2B,EAAOC,IAAAA,UAAmB,CACxBnB,KAAAA,EACA5B,UAAW,oBACXgD,wBAAyB,sCAI7B5C,EAAME,IAAI,OAAQZ,EAAA,OAAKC,MAAM,oCAAoCmD,GAAa,IAEvE1C,CACT,EAACZ,EAEDyD,SAAA,SAAS5B,GAAO,IAGV6B,EAHUC,EAAA,KACd9D,EAAApB,UAAMgF,SAAQ9E,KAAC,KAAAkD,GAIfvB,KAAKsD,IACFC,GAAG,YAAa,sFAAsF,WACrGC,aAAaJ,GACbA,EAAUK,OAAOC,WAAWL,EAAKM,SAAS5E,KAAKsE,GAAO,IACxD,IACCE,GAAG,WAAY,sFAAsF,WACpGC,aAAaJ,GACbA,EAAUK,OAAOC,WAAWL,EAAKO,SAAS7E,KAAKsE,GAAO,IACxD,GACJ,EAAC3D,EAEDmE,SAAA,SAAStC,GACPhC,EAAApB,UAAM0F,SAAQxF,KAAC,KAAAkD,GAEfvB,KAAKsD,IAAIQ,IAAI,qBACf,EAEApE,EAGAiE,SAAA,WAAW,IAAAI,EAAA,KACT/D,KAAKqB,aAAc,EAEnBzB,EAAEoE,SAEFN,YAAW,kBAAMK,EAAKT,EAAE,aAAaW,SAAS,KAAK,GACrD,EAEAvE,EAGAkE,SAAA,WACEN,EAAE,aAAaY,YAAY,MAC3BlE,KAAKqB,aAAc,EACnBzB,EAAEoE,QACJ,EAACnD,CAAA,CA3HsC,CAASD,KCS7BuD,EAAQ,SAAA5E,GAAA,SAAA4E,IAAA,QAAArD,EAAAC,EAAAtB,UAAAuB,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAA1B,UAAA0B,GAKlB,OALkBL,EAAAvB,EAAAlB,KAAAmB,MAAAD,EAAA,OAAA6B,OAAAH,KAAA,MAC3BkB,SAAG,EAAArB,EACHkB,aAAO,EAAAlB,EACPsD,eAAS,EAAAtD,EACTuD,uBAAiB,EAAAvD,EACjBwD,eAAS,EAAAxD,CAAA,CALkB7B,EAAAkF,EAAA5E,GAKlB,IAAAG,EAAAyE,EAAAhG,UAwVR,OAxVQuB,EAET4B,OAAA,SAAOC,GACLhC,EAAApB,UAAMmD,OAAMjD,KAAC,KAAAkD,GAEbvB,KAAKmC,IAAMnC,KAAKC,MAAMsE,MAEtBvE,KAAKgC,QAA+B,MAArBhC,KAAKC,MAAMuE,QAAuCC,MAArBzE,KAAKC,MAAMuE,OAEvDxE,KAAKoE,WAAY,EAGiB,mBAAvBpE,KAAKmC,IAAIuC,cACb1E,KAAKmC,IAAIwC,qBAAsB3E,KAAKmC,IAAIyC,uBAA2B5E,KAAKmC,IAAIuC,eAC/E1E,KAAKsE,UAAY,CACf5D,KAAMV,KAAKmC,IAAIyC,sBAAwBlE,IAAK,eAAiBA,IAAK,oBAClEmE,KAAM7E,KAAKmC,IAAIyC,sBAAwB7E,IAAAA,WAAAA,MAAqB,8DAAgEA,IAAAA,WAAAA,MAAqB,2DACjJ+E,UAA4D,GAAjD9E,KAAKmC,IAAI4C,wCAK1BtB,OAAOuB,iBAAiB,UAAU,WAChCpF,EAAEoE,QACJ,GACF,EAACtE,EAEDC,KAAA,WACE,IAAMwC,EAAMnC,KAAKmC,IAEjB,OAAKA,EAEMnC,KAAKsE,YAActE,KAAKsE,UAAUQ,UAEpC,MAGT9E,KAAKqE,oBAAsBtE,IAAAA,MAAAA,UAAoB,4BAG7CH,EAAA,MACEM,UAAWJ,IAAU,cAAe,eAAeqC,EAAI8C,OAAU,CAC/DC,YAAalF,KAAKgC,QAClBmD,gBAAiBnF,KAAKgC,QACtBoD,cAAepF,KAAKqE,qBAGrBrE,KAAKqF,gBAAgBjF,YAhBjB,IAmBX,EAACV,EAED2F,cAAA,WAAgB,IAAAhC,EAAA,KACR/C,EAAQ,IAAIC,KACZ4B,EAAMnC,KAAKmC,IAEXmD,EAAWtF,KAAKgC,QAAU,GAAKuD,IAASpD,EAAImD,YAAc,IAE5D5C,EAAiC,CAAC,EA4BtC,OA3BI1C,KAAKgC,QACHhC,KAAKC,MAAMuF,6BACb9C,EAAM+C,gBAAkBzF,KAAKmC,IAAIC,SAE1BpC,KAAKC,MAAMyF,wBACpBhD,EAAM+C,gBAAkBzF,KAAKmC,IAAIC,SAEnC9B,EAAME,IACJ,OACAZ,EAAC+B,IAAI,CACHzB,UAAS,wBAAyBH,IAAAA,MAAAA,UAAoB,4BAA6B,gBAAkB,IAAE,wBAAyBoC,EAAI8C,OACpIvC,MAAOA,EACPd,KAAM7B,IAAAA,MAAAA,IAAcoC,IAEnBnC,KAAK2F,eAAevF,WAEvB,KAGGJ,KAAKqE,mBAAsBrE,KAAKgC,SACnC1B,EAAME,IACJ,WACAZ,EAAA,MAAIM,UAAU,0BAA0BoF,EAASM,KAAI,SAACC,GAAK,MAAK,CAAC1B,EAAS2B,UAAU,CAAEvB,MAAOsB,EAAOrB,OAAQnB,EAAMmC,2BAA4BnC,EAAKpD,MAAMuF,6BAA6B,KACtL,IAIGlF,CACT,EAACZ,EAEDiG,aAAA,WAAe,IAAA5B,EAAA,KACPzD,EAAQ,IAAIC,KAEZ+E,EAAWtF,KAAKgC,QAAU,GAAKuD,IAASvF,KAAKmC,IAAImD,YAAc,IAEjEpF,EAAY,kBAmBhB,OAlBIF,KAAKC,MAAMyF,uBAA0B1F,KAAKgC,SAAWhC,KAAKC,MAAMuF,8BAClEtF,EAAagC,IAAkBlC,KAAKmC,IAAIC,UAG1C9B,EAAME,IAAI,aAAcZ,EAAA,OAAKM,UAAWJ,IAAU,yBAA0BI,IAAaF,KAAK+F,kBAAkB3F,WAAkB,KAElIE,EAAME,IAAI,WAAYZ,EAAA,OAAKM,UAAWJ,IAAU,uBAAwBI,IAAaF,KAAKgG,gBAAgB5F,WAAkB,KAEjGJ,KAAKgC,SAAWhC,KAAKqE,oBAEtBrE,KAAKoE,WAC7B9D,EAAME,IACJ,WACAZ,EAAA,MAAIM,UAAU,0BAA0BoF,EAASM,KAAI,SAACC,GAAK,MAAK,CAAC1B,EAAS2B,UAAU,CAAEvB,MAAOsB,EAAOrB,OAAQT,EAAMyB,2BAA4BzB,EAAK9D,MAAMuF,6BAA6B,KACtL,IAIGlF,CACT,EAACZ,EAEDqG,gBAAA,WAAkB,IAAAE,EAAA,KACV3F,EAAQ,IAAIC,KAEZ+E,EAAWtF,KAAKgC,QAAU,GAAKuD,IAASvF,KAAKmC,IAAImD,YAAc,IACjE5C,EAAiC,CAAC,EA2BtC,OA1BI1C,KAAKgC,QACFhC,KAAKC,MAAMuF,6BACd9C,EAAMN,MAAQpC,KAAKmC,IAAIC,SAEfpC,KAAKC,MAAMyF,wBACrBhD,EAAMN,MAAQpC,KAAKmC,IAAIC,SAEzB9B,EAAME,IAAI,OAAQZ,EAAA,QAAMM,UAAU,mBAAmBwC,MAAOA,GAAQ1C,KAAKkG,YAAY9F,WAAmB,KAExGE,EAAME,IAAI,OAAQZ,EAAA,OAAKM,UAAU,oBAAoBF,KAAKmG,YAAY/F,WAAkB,IAElFkF,EAAStE,QACbV,EAAME,IACJ,cACAZ,EAAA,UACEM,UAAU,2CACVkG,QAAS,SAACC,GACRJ,EAAKK,YAAYD,EACnB,GAEC3F,IAAKV,KAAKoE,UAAY,oBAAsB,oBAE/C,IAIG9D,CACT,EAACZ,EAEDsG,cAAA,WACE,IAAM1F,EAAQ,IAAIC,KAElB,GAAIP,KAAKsE,UAEP,OADAhE,EAAME,IAAI,SAAUZ,EAAA,OAAKM,UAAU,sBAAsBF,KAAKuG,cAAcnG,WAAkB,KACvFE,EAGT,IAAM6B,EAAMnC,KAAKmC,IAUjB,OARA7B,EAAME,IAAI,QAASZ,EAAA,OAAKM,UAAU,oCAAoCF,KAAKwG,YAAYpG,WAAkB,KAEzGE,EAAME,IACJ,iBACAZ,EAAA,OAAKM,UAAWJ,IAAU,6BAA8B,CAAE2G,OAAQtE,EAAIuE,0BAA4B1G,KAAK2G,sBAAsBvG,WAC7H,IAGKE,CACT,EAACZ,EAED6G,YAAA,WACE,IAAMjG,EAAQ,IAAIC,KACZqG,EAAU5G,KAAKqE,kBAAoB,iBAAmB,iBAgB5D,OAfA/D,EAAME,IACJ,OACAZ,EAAA,QAAMM,UAAW0G,GAEbhH,EAAA,KAAGM,UAAU,cAAcwC,MAAO,CAAEN,MAAOpC,KAAKmC,IAAIC,WAErDpC,KAAKsE,UAAU5D,MAElB,IAEFJ,EAAME,IACJ,aACAZ,EAAA,OAAKM,UAAWJ,IAAU,2BAA4BE,KAAKsE,UAAUO,MACrE,IAEKvE,CACT,EAACZ,EAEDwG,UAAA,WACE,IAAM5F,EAAQ,IAAIC,KAElB,GAAIP,KAAKmC,IAAIzB,QAAUV,KAAKgC,QAAS,CACnC,IAAMU,EAAiC,CAAC,EAEpCmE,EAAc,CAAC,4BAEf9G,IAAAA,MAAAA,UAAoB,4BAClBC,KAAKC,MAAMuF,2BACb9C,EAAMN,MAAQpC,KAAKmC,IAAIC,QAEvByE,EAAYC,KAAK,2BAA4B,oBAG3C9G,KAAKC,MAAMuF,2BACbqB,EAAYC,KAAK5E,IAAkBlC,KAAKmC,IAAIC,UAE5CM,EAAMN,MAAQpC,KAAKmC,IAAIC,QAI3B,IAAMlC,EAAYF,KAAKqE,kBAAoB,iBAAmB,iBAE9D/D,EAAME,IACJ,OACAZ,EAAA,QAAMM,UAAWA,KACZH,IAAAA,MAAAA,UAAoB,6BACrBH,EAAA,KAAGM,UAAU,2CAA2CwC,MAAO1C,KAAKC,MAAMuF,2BAA2B,CAAC,EAAE,CAAEpD,MAAOpC,KAAKmC,IAAIC,WAE3H1B,IAAKV,KAAKmC,IAAIzB,OAAQ,CAAER,UAAWJ,IAAU+G,GAAcnE,MAAOA,KAErE,GAEJ,MAAO,GAAI1C,KAAKmC,IAAIzB,SAAWX,IAAAA,MAAAA,UAAoB,+BAAgC,CACjF,IAAM6G,EAAU5G,KAAKqE,kBAAoB,iBAAmB,iBAE5D/D,EAAME,IAAI,OAAQZ,EAAA,QAAMM,UAAW0G,GAAUlG,IAAKV,KAAKmC,IAAIzB,OAAQ,CAAER,UAAW,8BAAuC,GACzH,CAEA,OAAOI,CACT,EAACZ,EAEDyG,UAAA,WACE,IAAM7F,EAAQ,IAAIC,KAElBD,EAAME,IAAI,OAAQZ,EAAA,MAAIM,UAAU,oBAAoBF,KAAKmC,IAAI4E,QAAc,IAE3E,IAAI7G,EAAY,kBAYhB,OAXIF,KAAKgC,QACHhC,KAAKC,MAAMuF,6BACbtF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,SAAS,SAEzCpC,KAAKC,MAAMyF,wBACpBxF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,SAAS,UAE9CpC,KAAKmC,IAAI6E,gBAAkBhH,KAAKgC,SAAYjC,IAAAA,MAAAA,UAAoB,uCAClEO,EAAME,IAAI,cAAeZ,EAAA,OAAKM,UAAWJ,IAAU,0BAA2BI,IAAaF,KAAKmC,IAAI6E,eAAsB,IAGrH1G,CACT,EAACZ,EAED8G,UAAA,WACE,IAAMlG,EAAQ,IAAIC,KACdL,EAAY,kBAiChB,OA/BIF,KAAKgC,QACHhC,KAAKC,MAAMuF,6BACbtF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,UAEhCpC,KAAKC,MAAMyF,wBACpBxF,EAAYgC,IAAkBlC,KAAKmC,IAAIC,WAErCpC,KAAKgC,SAAYjC,IAAAA,MAAAA,UAAoB,kCACvCO,EAAME,IACJ,kBACAlB,EAAWwG,UAAU,CACnBrF,MAAOwG,KAAKC,eAAeC,OAAOnH,KAAKmC,IAAIiF,mBAC3CzG,MAAOZ,IAAAA,WAAAA,MAAqB,6DAC5BW,KAAM,kBACNR,UAAWA,IAEb,IAGFI,EAAME,IACJ,YACAlB,EAAWwG,UAAU,CACnBrF,MAAOwG,KAAKC,eAAeC,OAAOnH,KAAKmC,IAAIkF,aAC3C1G,MAAOZ,IAAAA,WAAAA,MAAqB,uDAC5BW,KAAM,iBACNR,UAAWA,IAEb,KAIGI,CACT,EAACZ,EAEDiH,oBAAA,WACE,IAAMrG,EAAQ,IAAIC,KAiBlB,OAfIP,KAAKgC,SAAYjC,IAAAA,MAAAA,UAAoB,0CACvCO,EAAME,IACJ,iBACAK,EAAqBiF,UAAU,CAC7BrE,WAAYzB,KAAKmC,IAAIuE,uBACrB3E,YAAa,CACXI,IAAKnC,KAAKmC,IACVH,QAAShC,KAAKgC,QACdC,uBAAwBjC,KAAKgC,QAAShC,KAAKC,MAAMuF,2BAA4BxF,KAAKC,MAAMyF,yBAG5F,IAIGpF,CACT,EAACZ,EAEDyD,SAAA,SAAS5B,GACPhC,EAAApB,UAAMgF,SAAQ9E,KAAC,KAAAkD,GAEfvB,KAAKsD,EAAE,iDAAiDC,GAAG,cAAc,SAAU8C,GACjF/C,EAAEtD,MAAMiE,SAAS,UACbX,EAAEtD,MAAMwE,SAAS8C,SAAS,gBAAkBhE,EAAEtD,MAAMsH,SAAS,6BAC/DhE,EAAEtD,MAAMuH,QAAQ,mBAAmBjC,SAAS,wBAAwBpB,YAAY,QAEpF,IAEAlE,KAAKsD,EAAE,iDAAiDC,GAAG,cAAc,SAAU8C,GACjF/C,EAAEtD,MAAMkE,YAAY,UAChBZ,EAAEtD,MAAMwE,SAAS8C,SAAS,gBAAkBhE,EAAEtD,MAAMsH,SAAS,6BAC/DhE,EAAEtD,MAAMuH,QAAQ,mBAAmBjC,SAAS,wBAAwBrB,SAAS,QAEjF,GACF,EAACvE,EAEDmE,SAAA,SAAStC,GACPhC,EAAApB,UAAM0F,SAAQxF,KAAC,KAAAkD,GAEfvB,KAAKsD,EAAE,iDAAiDQ,IAAI,cAC5D9D,KAAKsD,EAAE,iDAAiDQ,IAAI,aAC9D,EAACpE,EAED4G,YAAA,SAAYD,GACVA,EAAEmB,iBACFnB,EAAEoB,kBACFzH,KAAKoE,WAAapE,KAAKoE,UACvBxE,EAAEoE,QACJ,EAACG,CAAA,CA7V0B,CAASvD,KCfhC8G,EAAe,EACfC,GAAiB,EACjBC,GAAuB,EAE7B,SAASC,GAAoBC,EAAMC,EAAYC,EAAgBC,GAC7D,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAKxC,SAAStE,OAAQkH,IAAK,CAC7C,IAAMrC,EAAQiC,EAAKxC,SAAS4C,GACtBC,EAAgBJ,EAAWC,GAC3BI,IAAmBvC,EAAM5F,MAAMC,YAA6D,IAAlD2F,EAAM5F,MAAMC,UAAUmI,QAAQF,GAC9E,GAAIC,GAAoBD,GAAiBtC,EAAM5F,MAAMC,UAAW,CAC9D,IAAIoI,GAAU,EAQd,IAPIL,IAAaP,GAAgBU,GAEtBH,IAAaN,IAAuB,GAALO,GAE/BD,IAAaL,IAAwBM,EAAI,KAHlDI,GAAU,GAMRA,EAEF,OADAN,GAAkB,IACID,EAAW/G,OAExB6E,EAEAgC,GAAoBhC,EAAOkC,EAAYC,EAAgBC,EAGpE,CACF,CACF,CAAC,IAEoBM,GAAc,SAAAC,GAAA,SAAAD,IAAA,QAAAzH,EAAAC,EAAAtB,UAAAuB,OAAAC,EAAA,IAAAC,MAAAH,GAAAI,EAAA,EAAAA,EAAAJ,EAAAI,IAAAF,EAAAE,GAAA1B,UAAA0B,GAE1B,OAF0BL,EAAA0H,EAAAnK,KAAAmB,MAAAgJ,EAAA,OAAApH,OAAAH,KAAA,MACjCwH,UAAI,EAAA3H,EACJ4H,aAAO,EAAA5H,CAAA,CAF0B7B,EAAAsJ,EAAAC,GAE1B,IAAA9I,EAAA6I,EAAApK,UA8GN,OA9GMuB,EAEP4B,OAAA,SAAOC,GAAO,IAAA8B,EAAA,KACZmF,EAAArK,UAAMmD,OAAMjD,KAAC,KAAAkD,GAEbxB,IAAAA,QAAAA,KAAiB,aAAcsC,IAAYtC,IAAAA,WAAAA,MAAqB,iEAEhEC,KAAKyI,KAAO,GAEZ,IAAME,EAAY5I,IAAAA,uBAEd4I,EACF3I,KAAKyI,KAAOlD,IAASoD,EAAUC,QAAO,SAACzG,GAAQ,OAAMA,EAAIH,SAAS,MAIpEhC,KAAK0I,SAAU,EAEf3I,IAAAA,QAAAA,KAAiB,CAAC,SAAU,WAAY,uBAAwB,wCAAwC8I,MAAK,WAC3GxF,EAAKoF,KAAOlD,IAASxF,IAAAA,MAAAA,IAAc,QAAQ6I,QAAO,SAACzG,GAAG,OAAMA,EAAIH,SAAS,KAEzEqB,EAAKqF,SAAU,EAEf9I,EAAEoE,QACJ,IACF,EAACtE,EAEDC,KAAA,WACE,OAAIK,KAAK0I,QACA9I,EAACkJ,IAAgB,MAGnBlJ,EAAA,OAAKM,UAAU,kBAAkBF,KAAK+I,YAAY3I,UAC3D,EAACV,EAEDqJ,UAAA,WACE,IAAMzI,EAAQ,IAAIC,KAMlB,OAJAD,EAAME,IAAI,OAAQwI,IAAAA,UAAAA,OAA4B,KAE9C1I,EAAME,IAAI,YAAaZ,EAAA,OAAKC,MAAM,aAAaG,KAAKiJ,iBAAiB7I,WAAkB,IAEhFE,CACT,EAACZ,EAEDuJ,eAAA,WACE,IAAM3I,EAAQ,IAAIC,KACZ2I,EAAYF,IAAAA,UAAAA,OAElB,GAAIjJ,IAAAA,MAAAA,UAAoB,2BAA4B,CAClD,IAAMoJ,EAAmBtB,GAAoBqB,EAAW,CAAC,iBAAazE,GAAY,EAAGkD,IACjFwB,GACF7I,EAAME,IAAI,gBAAiB2I,EAAmB,IAElD,CAKA,GAHA7I,EAAME,IAAI,mBAAoBZ,EAAA,OAAKC,MAAOE,IAAAA,MAAAA,UAAoB,8BAAgC,kBAAoB,oBAAqBC,KAAK2F,eAAevF,WAAkB,IAGzKL,IAAAA,MAAAA,UAAoB,2BAA4B,CAClD,IAAMqJ,EAAmBvB,GAAoBqB,EAAW,CAAC,iBAAazE,GAAY,EAAGmD,IACjFwB,GACF9I,EAAME,IAAI,gBAAiB4I,EAAmB,EAElD,CACA,OAAO9I,CACT,EAACZ,EAEDiG,aAAA,WACE,IAAMrF,EAAQ,IAAIC,KAEZ8I,EAASrJ,KAAKyI,KAAKG,QAAO,SAACzG,GAAG,OAAwB,OAAnBA,EAAI8F,UAAmB,IAC1DqB,EAAQtJ,KAAKyI,KAAKG,QAAO,SAACzG,GAAG,OAAwB,OAAnBA,EAAI8F,UAAmB,IAwB/D,GAtBA3H,EAAME,IACJ,UACEZ,EAAA,OAAKM,UAAWH,IAAAA,MAAAA,UAAoB,8BAAgC,0CAA4C,4CAC9GH,EAAA,UAAK2J,IAAUP,IAAAA,UAAAA,eAAmC5I,aAEtD,KAGFE,EAAME,IACJ,iBACAZ,EAAA,OAAKM,UAAU,wCACbN,EAAA,MAAIM,UAAU,mBACXmJ,EAAOzD,KAAI,SAACzD,GACX,OAAOgC,EAAS2B,UAAU,CAAEvB,MAAOpC,EAAKuD,sBAAuB3F,IAAAA,MAAAA,UAAoB,oCAAqCyF,2BAA4BzF,IAAAA,MAAAA,UAAoB,0CAC1K,KAGDuJ,EAAMtI,OAASpB,EAAA,OAAKM,UAAU,YAAYoJ,EAAM1D,KAAI,SAACzD,GAAG,MAAK,CAACqH,IAASrH,EAAK,CAAEsH,MAAM,IAAS,IAAI,KAAW,IAE/G,IAGE1J,IAAAA,MAAAA,UAAoB,0BAA2B,CACjD,IACM2J,EAAa7B,GADDmB,IAAAA,UAAAA,OACgC,CAAC,YAAY,wBAAoBvE,GAAY,EAAGiD,GAC9FgC,GACFpJ,EAAME,IAAI,SAAUkJ,EAAa,EAErC,CACA,OAAOpJ,CACT,EAACZ,EAEDyD,SAAA,SAAS5B,GACPiH,EAAArK,UAAMgF,SAAQ9E,KAAC,KAAAkD,GAEfxB,IAAAA,SAAasC,IAAYtC,IAAAA,WAAAA,MAAqB,+DAChD,EAACwI,CAAA,CAhHgC,CAASoB,KClD5C,MAAM,GAA+BlL,OAAOC,KAAKC,OAAO,kC,eCaxD,SAASiL,GAActJ,EAAOuJ,GAC5B,IAAMC,EAAoB/J,IAAIgK,MAAMC,UAAU,0BAExCC,EAAsBlK,IAAImK,QAAQC,QAAQ5B,KAAmBxI,IAAImK,QAAQC,QAAQC,MACvF,IAAK,IAAMC,KAAQ/J,EAAMA,MACnBuJ,EAAKQ,KACJA,EAAKC,WAAW,OACN,QAARD,EAKIP,GACHxJ,EAAMiK,OAAOF,GAMXJ,GACF3J,EAAMiK,OAAOF,GAOZtK,IAAIgK,MAAMC,UAAU,0BACvB1J,EAAMiK,OAAOF,IAKrB,OAAO/J,CACT,CC/CqC7B,OAAOC,KAAKC,OAAO,gEDiDxDoB,IAAIyK,aAAahK,IAAI,gCAAgC,WACnDT,IAAI0K,OAAOC,WAAa,CACtBC,KAAM,cACN7E,UAAWyC,IAGbqC,IAAAA,UAAAA,UAA0BC,IAAAA,UAAgB,cAE1CC,EAAAA,EAAAA,QAAO9B,IAAAA,UAAqB,YAAY,SAAU1I,GAoBhD,OAnBAA,EAAME,IACJ,aACAZ,EAACmL,IAAU,CAACrK,KAAK,iBAAiBkB,KAAM7B,IAAIiL,MAAM,eAC/CjL,IAAIkL,WAAWC,MAAM,uDAEvB,KAGCnL,IAAImK,QAAQC,QAAQ5B,KAAmBxI,IAAImK,QAAQC,QAAQC,MAE7D9J,EAAMiK,OAAO,YAETjK,EAAM6K,IAAI,aACZ7K,EAAM8K,QAAQ,WAAYxL,EAACmL,IAAU,CAACnJ,KAAM7B,IAAIiL,MAAM,eAAgBjL,IAAIkL,WAAWC,MAAM,uCAI/FtB,GAActJ,GAAO,SAAC+J,GAAI,OAAKA,EAAKC,WAAW,MAAM,IAE9ChK,CACT,KAEAwK,EAAAA,EAAAA,QAAO9B,IAAAA,UAAqB,gBAAgB,SAAU1I,GACpDsJ,GAActJ,GAAO,SAAC+J,GAAI,MAAc,kBAATA,GAAqC,QAATA,CAAc,GAC3E,GACF,IAEA,UACE,4BAA6B9B,GAC7B,sBAAuBpE,EACvB,kCAAmCtD,EACnC,wBAAyBvB,E","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\n/*\r\n* Used for finding the correct location of widget containers, widget has undefined className which is used to compare and find.\r\n* position types:\r\n* POSITION_ANY = No position check (Used for Right Side Widget)\r\n* POSITION_FIRST = First container only (Used for Header Widget)\r\n* POSITION_AFTER_FIRST = After the first container (Used for the Footer Widget)\r\n*/\r\nconst POSITION_ANY = 0;\r\nconst POSITION_FIRST = 1;\r\nconst POSITION_AFTER_FIRST = 2;\r\n\r\nfunction findWidgetContainer(vdom, classNames, classNameIndex, position) {\r\n for (let i = 0; i < vdom.children.length; i++) {\r\n const child = vdom.children[i];\r\n const findClassName = classNames[classNameIndex];\r\n const isClassNameMatch = child.attrs.className? child.attrs.className.indexOf(findClassName) !== -1: false;\r\n if (isClassNameMatch || findClassName == child.attrs.className) {\r\n let isValid = false;\r\n if (position === POSITION_ANY || isClassNameMatch) {\r\n isValid = true;\r\n } else if (position === POSITION_FIRST && i == 0) {\r\n isValid = true;\r\n } else if (position === POSITION_AFTER_FIRST && i > 0) {\r\n isValid = true;\r\n }\r\n if (isValid) {\r\n classNameIndex += 1;\r\n if (classNameIndex == classNames.length) {\r\n // Found the last container from the classNames array\r\n return child;\r\n } else {\r\n return findWidgetContainer(child, classNames, classNameIndex, position);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container',
{this.containerItems().toArray()}
, 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n // Only check for header widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetHeader')) {\r\n const foundHeaderWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_FIRST);\r\n if (foundHeaderWidget) {\r\n items.add('header-widget', foundHeaderWidget, 100);\r\n }\r\n }\r\n\r\n items.add(\"sideNavContainer\",
{this.contentItems().toArray()}
, 50);\r\n\r\n // Only check for footer widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetFooter')) {\r\n const foundFooterWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_AFTER_FIRST);\r\n if (foundFooterWidget) {\r\n items.add('footer-widget', foundFooterWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for right side widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n const foundWidget= findWidgetContainer(indexPage, ['container','sideNavContainer', undefined], 0, POSITION_ANY);\r\n if (foundWidget) {\r\n items.add('widget', foundWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","POSITION_ANY","POSITION_FIRST","POSITION_AFTER_FIRST","findWidgetContainer","vdom","classNames","classNameIndex","position","i","findClassName","isClassNameMatch","indexOf","isValid","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","foundHeaderWidget","foundFooterWidget","pinned","cloud","listItems","tagLabel","link","foundWidget","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/forum/components/CategoriesPage.tsx b/js/src/forum/components/CategoriesPage.tsx index edcb759..3b0761a 100644 --- a/js/src/forum/components/CategoriesPage.tsx +++ b/js/src/forum/components/CategoriesPage.tsx @@ -5,13 +5,49 @@ import IndexPage from 'flarum/forum/components/IndexPage'; import listItems from 'flarum/common/helpers/listItems'; import ItemList from 'flarum/common/utils/ItemList'; import extractText from 'flarum/common/utils/extractText'; -import classList from 'flarum/common/utils/classList'; - import sortTags from 'flarum/tags/utils/sortTags'; import tagLabel from 'flarum/tags/helpers/tagLabel'; import Category from './Category'; +/* +* Used for finding the correct location of widget containers, widget has undefined className which is used to compare and find. +* position types: +* POSITION_ANY = No position check (Used for Right Side Widget) +* POSITION_FIRST = First container only (Used for Header Widget) +* POSITION_AFTER_FIRST = After the first container (Used for the Footer Widget) +*/ +const POSITION_ANY = 0; +const POSITION_FIRST = 1; +const POSITION_AFTER_FIRST = 2; + +function findWidgetContainer(vdom, classNames, classNameIndex, position) { + for (let i = 0; i < vdom.children.length; i++) { + const child = vdom.children[i]; + const findClassName = classNames[classNameIndex]; + const isClassNameMatch = child.attrs.className? child.attrs.className.indexOf(findClassName) !== -1: false; + if (isClassNameMatch || findClassName == child.attrs.className) { + let isValid = false; + if (position === POSITION_ANY || isClassNameMatch) { + isValid = true; + } else if (position === POSITION_FIRST && i == 0) { + isValid = true; + } else if (position === POSITION_AFTER_FIRST && i > 0) { + isValid = true; + } + if (isValid) { + classNameIndex += 1; + if (classNameIndex == classNames.length) { + // Found the last container from the classNames array + return child; + } else { + return findWidgetContainer(child, classNames, classNameIndex, position); + } + } + } + } +} + export default class CategoriesPage extends Page { tags!: any[]; loading!: boolean; @@ -62,20 +98,22 @@ export default class CategoriesPage extends Page { containerItems() { const items = new ItemList(); const indexPage = IndexPage.prototype.view(); + // Only check for header widget if enable in the settings + if (app.forum.attribute('categories.widgetHeader')) { + const foundHeaderWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_FIRST); + if (foundHeaderWidget) { + items.add('header-widget', foundHeaderWidget, 100); + } + } + items.add("sideNavContainer",
{this.contentItems().toArray()}
, 50); - // Only check for widget for the header and footer if enable in the settings - if ((app.forum.attribute('categories.widgetHeader') || app.forum.attribute('categories.widgetFooter')) && indexPage.children.length > 1 && indexPage.children[1].children) { - indexPage.children[1].children.forEach((child, index) => { - if (!child.attrs.className) { - // Oddly only sideNavContainer className is shown, which should be ignored. The widget must be added by assuming the first is header and the last footer - if (app.forum.attribute('categories.widgetHeader') && index == 0) { - items.add('header-widget', child, 100); - } else if (app.forum.attribute('categories.widgetFooter')) { - items.add('footer-widget', child, 0); - } - } - }); + // Only check for footer widget if enable in the settings + if (app.forum.attribute('categories.widgetFooter')) { + const foundFooterWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_AFTER_FIRST); + if (foundFooterWidget) { + items.add('footer-widget', foundFooterWidget, 0); + } } return items; } @@ -107,11 +145,12 @@ export default class CategoriesPage extends Page {
, 50 ); - // Only check for widget for the right if enable in the settings + // Only check for right side widget if enable in the settings if (app.forum.attribute('categories.widgetRight')) { const indexPage = IndexPage.prototype.view(); - if (indexPage.children.length > 1 && indexPage.children[1].children.length > 1 && indexPage.children[1].children[1].children.length === 3) { - items.add('widget', indexPage.children[1].children[1].children[2], 0); + const foundWidget= findWidgetContainer(indexPage, ['container','sideNavContainer', undefined], 0, POSITION_ANY); + if (foundWidget) { + items.add('widget', foundWidget, 0); } } return items; From 116e4c2d5e830d945e9520dfa34827baa83a57c3 Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Fri, 10 May 2024 14:28:26 +0100 Subject: [PATCH 7/8] Add new helper lastDiscussionAvatar, to support 'Anonymous' users that were last poster --- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- .../forum/components/LastDiscussionWidget.tsx | 7 ++---- js/src/forum/helpers/lastDiscussionAvatar.js | 22 +++++++++++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 js/src/forum/helpers/lastDiscussionAvatar.js diff --git a/js/dist/forum.js b/js/dist/forum.js index bc5b22a..c2d0649 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>nt});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["tags/utils/sortTags"];var L=t.n(I);const x=flarum.core.compat["tags/helpers/tagLabel"];var A=t.n(x);const D=flarum.core.compat["common/Component"];var M=t.n(D);const _=flarum.core.compat["common/components/Link"];var S=t.n(_);const O=flarum.core.compat["common/helpers/icon"];var U=t.n(O);const B=flarum.core.compat["common/utils/classList"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:W()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},U()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(M());const R=flarum.core.compat["common/helpers/avatar"];var V=t.n(R);const E=flarum.core.compat["common/helpers/username"];var F=t.n(E);const z=flarum.core.compat["common/helpers/humanTime"];var G=t.n(z);const H=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var J=t.n(q);const K=flarum.core.compat["common/helpers/textContrastClass"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0)&&(c=!0),c)return(o+=1)==a.length?r:ot(r,a,o,e)}}}var et=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>nt});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["tags/utils/sortTags"];var L=t.n(I);const x=flarum.core.compat["tags/helpers/tagLabel"];var A=t.n(x);const D=flarum.core.compat["common/Component"];var M=t.n(D);const _=flarum.core.compat["common/components/Link"];var S=t.n(_);const O=flarum.core.compat["common/helpers/icon"];var U=t.n(O);const B=flarum.core.compat["common/utils/classList"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:W()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},U()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(M());const R=flarum.core.compat["common/helpers/username"];var V=t.n(R);const E=flarum.core.compat["common/helpers/humanTime"];var F=t.n(E);const z=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var G=t.n(q);const H=flarum.core.compat["common/helpers/textContrastClass"];var J=t.n(H);const K=flarum.core.compat["common/helpers/avatar"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0&&(o=N()(V()(t)),e=Q()(t)),e||(o="Anonymous",e=m("span",{class:"Avatar Avatar--anonymous",loading:"lazy"},U()("fas fa-question"))),m(S(),{className:"LastDiscussion-avatar",href:t?app.route.user(t):"#","aria-label":o},e)}(o),100),t.add("mainContent",m("div",{class:W()("LastDiscussion-content",e)},m("div",{class:W()("LastDiscussion-bottomRow",e+"muted")},F()(a.lastPostedAt())," ",m(S(),{className:W()("LastDiscussion-usernameLink",e+"muted"),href:o?p().route.user(o):"#"},m("span",{style:{display:"inline",margin:"0 4px"},role:"presentation"},"|"),V()(o))),m("div",{class:"LastDiscussion-topRow"},(0,z.truncate)(a.title(),26))),50);var s=null;return o&&this.cardVisible&&(s=G().component({user:o,className:"UserCard--popover",controlsButtonClassName:"Button Button--icon Button--flat"})),t.add("card",m("div",{class:"LastDiscussion-userCardContainer"},s),10),t},o.oncreate=function(a){var o,e=this;t.prototype.oncreate.call(this,a),this.$().on("mouseover",".LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard",(function(){clearTimeout(o),o=window.setTimeout(e.showCard.bind(e),300)})).on("mouseout",".LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard",(function(){clearTimeout(o),o=window.setTimeout(e.hideCard.bind(e),150)}))},o.onremove=function(a){t.prototype.onremove.call(this,a),this.$().off("mouseover mouseout")},o.showCard=function(){var t=this;this.cardVisible=!0,m.redraw(),setTimeout((function(){return t.$(".UserCard").addClass("in")}))},o.hideCard=function(){$(".UserCard").removeClass("in"),this.cardVisible=!1,m.redraw()},a}(M()),Y=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0)&&(c=!0),c)return(o+=1)==a.length?r:ot(r,a,o,e)}}}var et=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n \r\n {!!user && avatar(user)}\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\n/*\r\n* Used for finding the correct location of widget containers, widget has undefined className which is used to compare and find.\r\n* position types:\r\n* POSITION_ANY = No position check (Used for Right Side Widget)\r\n* POSITION_FIRST = First container only (Used for Header Widget)\r\n* POSITION_AFTER_FIRST = After the first container (Used for the Footer Widget)\r\n*/\r\nconst POSITION_ANY = 0;\r\nconst POSITION_FIRST = 1;\r\nconst POSITION_AFTER_FIRST = 2;\r\n\r\nfunction findWidgetContainer(vdom, classNames, classNameIndex, position) {\r\n for (let i = 0; i < vdom.children.length; i++) {\r\n const child = vdom.children[i];\r\n const findClassName = classNames[classNameIndex];\r\n const isClassNameMatch = child.attrs.className? child.attrs.className.indexOf(findClassName) !== -1: false;\r\n if (isClassNameMatch || findClassName == child.attrs.className) {\r\n let isValid = false;\r\n if (position === POSITION_ANY || isClassNameMatch) {\r\n isValid = true;\r\n } else if (position === POSITION_FIRST && i == 0) {\r\n isValid = true;\r\n } else if (position === POSITION_AFTER_FIRST && i > 0) {\r\n isValid = true;\r\n }\r\n if (isValid) {\r\n classNameIndex += 1;\r\n if (classNameIndex == classNames.length) {\r\n // Found the last container from the classNames array\r\n return child;\r\n } else {\r\n return findWidgetContainer(child, classNames, classNameIndex, position);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container',
{this.containerItems().toArray()}
, 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n // Only check for header widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetHeader')) {\r\n const foundHeaderWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_FIRST);\r\n if (foundHeaderWidget) {\r\n items.add('header-widget', foundHeaderWidget, 100);\r\n }\r\n }\r\n\r\n items.add(\"sideNavContainer\",
{this.contentItems().toArray()}
, 50);\r\n\r\n // Only check for footer widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetFooter')) {\r\n const foundFooterWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_AFTER_FIRST);\r\n if (foundFooterWidget) {\r\n items.add('footer-widget', foundFooterWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for right side widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n const foundWidget= findWidgetContainer(indexPage, ['container','sideNavContainer', undefined], 0, POSITION_ANY);\r\n if (foundWidget) {\r\n items.add('widget', foundWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","extractText","username","avatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","POSITION_ANY","POSITION_FIRST","POSITION_AFTER_FIRST","findWidgetContainer","vdom","classNames","classNameIndex","position","i","findClassName","isClassNameMatch","indexOf","isValid","CategoriesPage","_Page","tags","loading","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","foundHeaderWidget","foundFooterWidget","pinned","cloud","listItems","tagLabel","link","foundWidget","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","route","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/helpers/lastDiscussionAvatar.js","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\nimport lastDiscussionAvatar from '../helpers/lastDiscussionAvatar';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n lastDiscussionAvatar(user, \"LastDiscussion-avatar\"),\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import icon from 'flarum/common/helpers/icon';\nimport avatar from 'flarum/common/helpers/avatar';\nimport Link from 'flarum/common/components/Link';\nimport username from 'flarum/common/helpers/username';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport default function lastDiscussionAvatar(user, className) {\n let avatarName;\n let avatarDisplay;\n if (user && user.id() > 0) {\n avatarName = extractText(username(user));\n avatarDisplay = avatar(user);\n }\n if (!avatarDisplay) {\n avatarName = \"Anonymous\";\n avatarDisplay = {icon('fas fa-question')};\n }\n\n return \n {avatarDisplay}\n \n}\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\n/*\r\n* Used for finding the correct location of widget containers, widget has undefined className which is used to compare and find.\r\n* position types:\r\n* POSITION_ANY = No position check (Used for Right Side Widget)\r\n* POSITION_FIRST = First container only (Used for Header Widget)\r\n* POSITION_AFTER_FIRST = After the first container (Used for the Footer Widget)\r\n*/\r\nconst POSITION_ANY = 0;\r\nconst POSITION_FIRST = 1;\r\nconst POSITION_AFTER_FIRST = 2;\r\n\r\nfunction findWidgetContainer(vdom, classNames, classNameIndex, position) {\r\n for (let i = 0; i < vdom.children.length; i++) {\r\n const child = vdom.children[i];\r\n const findClassName = classNames[classNameIndex];\r\n const isClassNameMatch = child.attrs.className? child.attrs.className.indexOf(findClassName) !== -1: false;\r\n if (isClassNameMatch || findClassName == child.attrs.className) {\r\n let isValid = false;\r\n if (position === POSITION_ANY || isClassNameMatch) {\r\n isValid = true;\r\n } else if (position === POSITION_FIRST && i == 0) {\r\n isValid = true;\r\n } else if (position === POSITION_AFTER_FIRST && i > 0) {\r\n isValid = true;\r\n }\r\n if (isValid) {\r\n classNameIndex += 1;\r\n if (classNameIndex == classNames.length) {\r\n // Found the last container from the classNames array\r\n return child;\r\n } else {\r\n return findWidgetContainer(child, classNames, classNameIndex, position);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container',
{this.containerItems().toArray()}
, 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n // Only check for header widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetHeader')) {\r\n const foundHeaderWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_FIRST);\r\n if (foundHeaderWidget) {\r\n items.add('header-widget', foundHeaderWidget, 100);\r\n }\r\n }\r\n\r\n items.add(\"sideNavContainer\",
{this.contentItems().toArray()}
, 50);\r\n\r\n // Only check for footer widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetFooter')) {\r\n const foundFooterWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_AFTER_FIRST);\r\n if (foundFooterWidget) {\r\n items.add('footer-widget', foundFooterWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for right side widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n const foundWidget= findWidgetContainer(indexPage, ['container','sideNavContainer', undefined], 0, POSITION_ANY);\r\n if (foundWidget) {\r\n items.add('widget', foundWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","avatarName","avatarDisplay","id","extractText","username","avatar","loading","route","lastDiscussionAvatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","POSITION_ANY","POSITION_FIRST","POSITION_AFTER_FIRST","findWidgetContainer","vdom","classNames","classNameIndex","position","i","findClassName","isClassNameMatch","indexOf","isValid","CategoriesPage","_Page","tags","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","foundHeaderWidget","foundFooterWidget","pinned","cloud","listItems","tagLabel","link","foundWidget","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/forum/components/LastDiscussionWidget.tsx b/js/src/forum/components/LastDiscussionWidget.tsx index f79eaf7..7f9c94f 100644 --- a/js/src/forum/components/LastDiscussionWidget.tsx +++ b/js/src/forum/components/LastDiscussionWidget.tsx @@ -1,6 +1,5 @@ import app from 'flarum/forum/app'; import Component from 'flarum/common/Component'; -import avatar from 'flarum/common/helpers/avatar'; import username from 'flarum/common/helpers/username'; import humanTime from 'flarum/common/helpers/humanTime'; import { truncate } from 'flarum/common/utils/string'; @@ -8,11 +7,11 @@ import Link from 'flarum/common/components/Link'; import UserCard from 'flarum/forum/components/UserCard'; import type Discussion from 'flarum/common/models/Discussion'; import ItemList from 'flarum/common/utils/ItemList'; -import extractText from 'flarum/common/utils/extractText'; import Tag from 'flarum/tags/models/Tag'; import classList from 'flarum/common/utils/classList'; import type Mithril from 'mithril'; import textContrastClass from 'flarum/common/helpers/textContrastClass'; +import lastDiscussionAvatar from '../helpers/lastDiscussionAvatar'; interface Attrs { discussion: Discussion; @@ -68,9 +67,7 @@ export default class LastDiscussionWidget extends Component { items.add( 'avatar', - - {!!user && avatar(user)} - , + lastDiscussionAvatar(user, "LastDiscussion-avatar"), 100 ); diff --git a/js/src/forum/helpers/lastDiscussionAvatar.js b/js/src/forum/helpers/lastDiscussionAvatar.js new file mode 100644 index 0000000..7832a0b --- /dev/null +++ b/js/src/forum/helpers/lastDiscussionAvatar.js @@ -0,0 +1,22 @@ +import icon from 'flarum/common/helpers/icon'; +import avatar from 'flarum/common/helpers/avatar'; +import Link from 'flarum/common/components/Link'; +import username from 'flarum/common/helpers/username'; +import extractText from 'flarum/common/utils/extractText'; + +export default function lastDiscussionAvatar(user, className) { + let avatarName; + let avatarDisplay; + if (user && user.id() > 0) { + avatarName = extractText(username(user)); + avatarDisplay = avatar(user); + } + if (!avatarDisplay) { + avatarName = "Anonymous"; + avatarDisplay = {icon('fas fa-question')}; + } + + return + {avatarDisplay} + +} From 1df2160d4f7a815c47c367f2ac64e07b3bcc462a Mon Sep 17 00:00:00 2001 From: Michael Yip Date: Fri, 10 May 2024 14:33:48 +0100 Subject: [PATCH 8/8] Remove usage of icon, use '?' instead --- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- js/src/forum/helpers/lastDiscussionAvatar.js | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/js/dist/forum.js b/js/dist/forum.js index c2d0649..e63b59c 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>nt});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["tags/utils/sortTags"];var L=t.n(I);const x=flarum.core.compat["tags/helpers/tagLabel"];var A=t.n(x);const D=flarum.core.compat["common/Component"];var M=t.n(D);const _=flarum.core.compat["common/components/Link"];var S=t.n(_);const O=flarum.core.compat["common/helpers/icon"];var U=t.n(O);const B=flarum.core.compat["common/utils/classList"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:W()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},U()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(M());const R=flarum.core.compat["common/helpers/username"];var V=t.n(R);const E=flarum.core.compat["common/helpers/humanTime"];var F=t.n(E);const z=flarum.core.compat["common/utils/string"],q=flarum.core.compat["forum/components/UserCard"];var G=t.n(q);const H=flarum.core.compat["common/helpers/textContrastClass"];var J=t.n(H);const K=flarum.core.compat["common/helpers/avatar"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0&&(o=N()(V()(t)),e=Q()(t)),e||(o="Anonymous",e=m("span",{class:"Avatar Avatar--anonymous",loading:"lazy"},U()("fas fa-question"))),m(S(),{className:"LastDiscussion-avatar",href:t?app.route.user(t):"#","aria-label":o},e)}(o),100),t.add("mainContent",m("div",{class:W()("LastDiscussion-content",e)},m("div",{class:W()("LastDiscussion-bottomRow",e+"muted")},F()(a.lastPostedAt())," ",m(S(),{className:W()("LastDiscussion-usernameLink",e+"muted"),href:o?p().route.user(o):"#"},m("span",{style:{display:"inline",margin:"0 4px"},role:"presentation"},"|"),V()(o))),m("div",{class:"LastDiscussion-topRow"},(0,z.truncate)(a.title(),26))),50);var s=null;return o&&this.cardVisible&&(s=G().component({user:o,className:"UserCard--popover",controlsButtonClassName:"Button Button--icon Button--flat"})),t.add("card",m("div",{class:"LastDiscussion-userCardContainer"},s),10),t},o.oncreate=function(a){var o,e=this;t.prototype.oncreate.call(this,a),this.$().on("mouseover",".LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard",(function(){clearTimeout(o),o=window.setTimeout(e.showCard.bind(e),300)})).on("mouseout",".LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard",(function(){clearTimeout(o),o=window.setTimeout(e.hideCard.bind(e),150)}))},o.onremove=function(a){t.prototype.onremove.call(this,a),this.$().off("mouseover mouseout")},o.showCard=function(){var t=this;this.cardVisible=!0,m.redraw(),setTimeout((function(){return t.$(".UserCard").addClass("in")}))},o.hideCard=function(){$(".UserCard").removeClass("in"),this.cardVisible=!1,m.redraw()},a}(M()),Y=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0)&&(c=!0),c)return(o+=1)==a.length?r:ot(r,a,o,e)}}}var et=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s{var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{default:()=>nt});const o=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/components/IndexPage"];var s=t.n(e);const r=flarum.core.compat["common/components/LinkButton"];var i=t.n(r);const n=flarum.core.compat["common/Model"];var c=t.n(n);const l=flarum.core.compat["tags/models/Tag"];var d=t.n(l);function u(t,a){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,a){return t.__proto__=a,t},u(t,a)}function g(t,a){t.prototype=Object.create(a.prototype),t.prototype.constructor=t,u(t,a)}const h=flarum.core.compat["forum/app"];var p=t.n(h);const f=flarum.core.compat["common/components/Page"];var v=t.n(f);const C=flarum.core.compat["common/components/LoadingIndicator"];var y=t.n(C);const b=flarum.core.compat["common/helpers/listItems"];var T=t.n(b);const w=flarum.core.compat["common/utils/ItemList"];var P=t.n(w);const k=flarum.core.compat["common/utils/extractText"];var N=t.n(k);const I=flarum.core.compat["tags/utils/sortTags"];var L=t.n(I);const x=flarum.core.compat["tags/helpers/tagLabel"];var A=t.n(x);const D=flarum.core.compat["common/Component"];var M=t.n(D);const _=flarum.core.compat["common/components/Link"];var S=t.n(_);const O=flarum.core.compat["common/helpers/icon"];var U=t.n(O);const B=flarum.core.compat["common/utils/classList"];var W=t.n(B),j=function(t){function a(){return t.apply(this,arguments)||this}g(a,t);var o=a.prototype;return o.view=function(){return m("div",{class:W()("StatWidget",{"Categories-compactMobileModeEnabled":!!p().forum.attribute("categories.compactMobile")},this.attrs.className)},this.content().toArray())},o.content=function(){var t,a=new(P());return a.add("count",m("div",{class:"StatWidget-count"},this.attrs.count),100),a.add("label",m("div",((t={class:"StatWidget-label"}).class=this.attrs.className+"muted",t),m("span",{className:"Categories-showOnMobile"},U()(this.attrs.icon)),m("span",{className:"Categories-hideOnMobile"},this.attrs.label)),80),a},a}(M());const R=flarum.core.compat["common/helpers/username"];var V=t.n(R);const E=flarum.core.compat["common/helpers/humanTime"];var F=t.n(E);const z=flarum.core.compat["common/utils/string"],G=flarum.core.compat["forum/components/UserCard"];var H=t.n(G);const q=flarum.core.compat["common/helpers/textContrastClass"];var J=t.n(q);const K=flarum.core.compat["common/helpers/avatar"];var Q=t.n(K),X=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0&&(o=N()(V()(t)),e=Q()(t)),e||(o="Anonymous",e=m("span",{class:"Avatar Avatar--anonymous",loading:"lazy"},"?")),m(S(),{className:"LastDiscussion-avatar",href:t?app.route.user(t):"#","aria-label":o},e)}(o),100),t.add("mainContent",m("div",{class:W()("LastDiscussion-content",e)},m("div",{class:W()("LastDiscussion-bottomRow",e+"muted")},F()(a.lastPostedAt())," ",m(S(),{className:W()("LastDiscussion-usernameLink",e+"muted"),href:o?p().route.user(o):"#"},m("span",{style:{display:"inline",margin:"0 4px"},role:"presentation"},"|"),V()(o))),m("div",{class:"LastDiscussion-topRow"},(0,z.truncate)(a.title(),26))),50);var s=null;return o&&this.cardVisible&&(s=H().component({user:o,className:"UserCard--popover",controlsButtonClassName:"Button Button--icon Button--flat"})),t.add("card",m("div",{class:"LastDiscussion-userCardContainer"},s),10),t},o.oncreate=function(a){var o,e=this;t.prototype.oncreate.call(this,a),this.$().on("mouseover",".LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard",(function(){clearTimeout(o),o=window.setTimeout(e.showCard.bind(e),300)})).on("mouseout",".LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard",(function(){clearTimeout(o),o=window.setTimeout(e.hideCard.bind(e),150)}))},o.onremove=function(a){t.prototype.onremove.call(this,a),this.$().off("mouseover mouseout")},o.showCard=function(){var t=this;this.cardVisible=!0,m.redraw(),setTimeout((function(){return t.$(".UserCard").addClass("in")}))},o.hideCard=function(){$(".UserCard").removeClass("in"),this.cardVisible=!1,m.redraw()},a}(M()),Y=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s0)&&(c=!0),c)return(o+=1)==a.length?r:ot(r,a,o,e)}}}var et=function(t){function a(){for(var a,o=arguments.length,e=new Array(o),s=0;s {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\nimport lastDiscussionAvatar from '../helpers/lastDiscussionAvatar';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n lastDiscussionAvatar(user, \"LastDiscussion-avatar\"),\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import icon from 'flarum/common/helpers/icon';\nimport avatar from 'flarum/common/helpers/avatar';\nimport Link from 'flarum/common/components/Link';\nimport username from 'flarum/common/helpers/username';\nimport extractText from 'flarum/common/utils/extractText';\n\nexport default function lastDiscussionAvatar(user, className) {\n let avatarName;\n let avatarDisplay;\n if (user && user.id() > 0) {\n avatarName = extractText(username(user));\n avatarDisplay = avatar(user);\n }\n if (!avatarDisplay) {\n avatarName = \"Anonymous\";\n avatarDisplay = {icon('fas fa-question')};\n }\n\n return \n {avatarDisplay}\n \n}\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\n/*\r\n* Used for finding the correct location of widget containers, widget has undefined className which is used to compare and find.\r\n* position types:\r\n* POSITION_ANY = No position check (Used for Right Side Widget)\r\n* POSITION_FIRST = First container only (Used for Header Widget)\r\n* POSITION_AFTER_FIRST = After the first container (Used for the Footer Widget)\r\n*/\r\nconst POSITION_ANY = 0;\r\nconst POSITION_FIRST = 1;\r\nconst POSITION_AFTER_FIRST = 2;\r\n\r\nfunction findWidgetContainer(vdom, classNames, classNameIndex, position) {\r\n for (let i = 0; i < vdom.children.length; i++) {\r\n const child = vdom.children[i];\r\n const findClassName = classNames[classNameIndex];\r\n const isClassNameMatch = child.attrs.className? child.attrs.className.indexOf(findClassName) !== -1: false;\r\n if (isClassNameMatch || findClassName == child.attrs.className) {\r\n let isValid = false;\r\n if (position === POSITION_ANY || isClassNameMatch) {\r\n isValid = true;\r\n } else if (position === POSITION_FIRST && i == 0) {\r\n isValid = true;\r\n } else if (position === POSITION_AFTER_FIRST && i > 0) {\r\n isValid = true;\r\n }\r\n if (isValid) {\r\n classNameIndex += 1;\r\n if (classNameIndex == classNames.length) {\r\n // Found the last container from the classNames array\r\n return child;\r\n } else {\r\n return findWidgetContainer(child, classNames, classNameIndex, position);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container',
{this.containerItems().toArray()}
, 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n // Only check for header widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetHeader')) {\r\n const foundHeaderWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_FIRST);\r\n if (foundHeaderWidget) {\r\n items.add('header-widget', foundHeaderWidget, 100);\r\n }\r\n }\r\n\r\n items.add(\"sideNavContainer\",
{this.contentItems().toArray()}
, 50);\r\n\r\n // Only check for footer widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetFooter')) {\r\n const foundFooterWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_AFTER_FIRST);\r\n if (foundFooterWidget) {\r\n items.add('footer-widget', foundFooterWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for right side widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n const foundWidget= findWidgetContainer(indexPage, ['container','sideNavContainer', undefined], 0, POSITION_ANY);\r\n if (foundWidget) {\r\n items.add('widget', foundWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","avatarName","avatarDisplay","id","extractText","username","avatar","loading","route","lastDiscussionAvatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","POSITION_ANY","POSITION_FIRST","POSITION_AFTER_FIRST","findWidgetContainer","vdom","classNames","classNameIndex","position","i","findClassName","isClassNameMatch","indexOf","isValid","CategoriesPage","_Page","tags","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","foundHeaderWidget","foundFooterWidget","pinned","cloud","listItems","tagLabel","link","foundWidget","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@askvortsov/flarum-categories/webpack/bootstrap","webpack://@askvortsov/flarum-categories/webpack/runtime/compat get default export","webpack://@askvortsov/flarum-categories/webpack/runtime/define property getters","webpack://@askvortsov/flarum-categories/webpack/runtime/hasOwnProperty shorthand","webpack://@askvortsov/flarum-categories/webpack/runtime/make namespace object","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/extend']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LinkButton']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Model']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/models/Tag']\"","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@askvortsov/flarum-categories/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/app']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Page']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/listItems']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/ItemList']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/extractText']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/utils/sortTags']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/helpers/tagLabel']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/Component']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/components/Link']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/StatWidget.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/utils/string']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['forum/components/UserCard']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/textContrastClass']\"","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@askvortsov/flarum-categories/./src/forum/components/LastDiscussionWidget.tsx","webpack://@askvortsov/flarum-categories/./src/forum/helpers/lastDiscussionAvatar.js","webpack://@askvortsov/flarum-categories/./src/forum/components/Category.tsx","webpack://@askvortsov/flarum-categories/./src/forum/components/CategoriesPage.tsx","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['tags/forum/components/TagsPage']\"","webpack://@askvortsov/flarum-categories/./src/forum/index.js","webpack://@askvortsov/flarum-categories/external root \"flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets']\""],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LinkButton'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/models/Tag'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/utils/sortTags'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/helpers/tagLabel'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","import Component from 'flarum/common/Component';\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport app from 'flarum/forum/app';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n count: number;\r\n icon: string;\r\n label: Mithril.Children;\r\n className: string;\r\n}\r\n\r\nexport default class StatWidget extends Component {\r\n view() {\r\n return (\r\n
\r\n {this.content().toArray()}\r\n
\r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n items.add('count',
{this.attrs.count}
, 100);\r\n items.add(\r\n 'label',\r\n
\r\n {icon(this.attrs.icon)}\r\n {this.attrs.label}\r\n
,\r\n 80\r\n );\r\n\r\n return items;\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/UserCard'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/textContrastClass'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","import app from 'flarum/forum/app';\r\nimport Component from 'flarum/common/Component';\r\nimport username from 'flarum/common/helpers/username';\r\nimport humanTime from 'flarum/common/helpers/humanTime';\r\nimport { truncate } from 'flarum/common/utils/string';\r\nimport Link from 'flarum/common/components/Link';\r\nimport UserCard from 'flarum/forum/components/UserCard';\r\nimport type Discussion from 'flarum/common/models/Discussion';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport type Mithril from 'mithril';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\nimport lastDiscussionAvatar from '../helpers/lastDiscussionAvatar';\r\n\r\ninterface Attrs {\r\n discussion: Discussion;\r\n selectedTag: {\r\n tag: Tag;\r\n isChild: boolean;\r\n isBackgroundTagColored: boolean;\r\n }\r\n}\r\n\r\nexport default class LastDiscussionWidget extends Component {\r\n /**\r\n * Whether or not the user hover card is visible.\r\n */\r\n cardVisible!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.cardVisible = false;\r\n }\r\n\r\n view() {\r\n const discussion = this.attrs.discussion;\r\n\r\n if (!discussion) {\r\n return
{app.translator.trans('askvortsov-categories.forum.last_discussion_widget.no_discussions')}
;\r\n }\r\n\r\n const user = discussion.lastPostedUser();\r\n\r\n return (\r\n \r\n {this.content().toArray()}\r\n \r\n );\r\n }\r\n\r\n content() {\r\n const items = new ItemList();\r\n\r\n const discussion = this.attrs.discussion;\r\n const user = discussion.lastPostedUser();\r\n let className = 'auto-color-text';\r\n\r\n if (this.attrs.selectedTag.isChild) {\r\n if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n } else if (this.attrs.selectedTag.isBackgroundTagColored) {\r\n className = textContrastClass(this.attrs.selectedTag.tag.color());\r\n }\r\n\r\n items.add(\r\n 'avatar',\r\n lastDiscussionAvatar(user, \"LastDiscussion-avatar\"),\r\n 100\r\n );\r\n\r\n items.add(\r\n 'mainContent',\r\n
\r\n
\r\n {humanTime(discussion.lastPostedAt()!)}{' '}\r\n \r\n \r\n |\r\n \r\n {username(user)}\r\n \r\n
\r\n
{truncate(discussion.title(), 26)}
\r\n
,\r\n 50\r\n );\r\n\r\n let card: Mithril.Children = null;\r\n\r\n if (user && this.cardVisible) {\r\n card = UserCard.component({\r\n user,\r\n className: 'UserCard--popover',\r\n controlsButtonClassName: 'Button Button--icon Button--flat',\r\n });\r\n }\r\n\r\n items.add('card',
{card}
, 10);\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n let timeout: number;\r\n\r\n this.$()\r\n .on('mouseover', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.showCard.bind(this), 300);\r\n })\r\n .on('mouseout', '.LastDiscussion-avatar, .LastDiscussion-usernameLinkUserCard, .username, .UserCard', () => {\r\n clearTimeout(timeout);\r\n timeout = window.setTimeout(this.hideCard.bind(this), 150);\r\n });\r\n }\r\n\r\n onremove(vnode): void {\r\n super.onremove(vnode);\r\n\r\n this.$().off('mouseover mouseout');\r\n }\r\n\r\n /**\r\n * Show the user card.\r\n */\r\n showCard() {\r\n this.cardVisible = true;\r\n\r\n m.redraw();\r\n\r\n setTimeout(() => this.$('.UserCard').addClass('in'));\r\n }\r\n\r\n /**\r\n * Hide the user card.\r\n */\r\n hideCard() {\r\n $('.UserCard').removeClass('in');\r\n this.cardVisible = false;\r\n m.redraw();\r\n }\r\n}\r\n","import icon from 'flarum/common/helpers/icon';\r\nimport avatar from 'flarum/common/helpers/avatar';\r\nimport Link from 'flarum/common/components/Link';\r\nimport username from 'flarum/common/helpers/username';\r\nimport extractText from 'flarum/common/utils/extractText';\r\n\r\nexport default function lastDiscussionAvatar(user, className) {\r\n let avatarName;\r\n let avatarDisplay;\r\n if (user && user.id() > 0) {\r\n avatarName = extractText(username(user));\r\n avatarDisplay = avatar(user);\r\n }\r\n if (!avatarDisplay) {\r\n avatarName = \"Anonymous\";\r\n avatarDisplay = ?;\r\n }\r\n\r\n return \r\n {avatarDisplay}\r\n \r\n}\r\n","import Component from 'flarum/common/Component';\r\nimport Link from 'flarum/common/components/Link';\r\n\r\nimport icon from 'flarum/common/helpers/icon';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\n\r\nimport StatWidget from './StatWidget';\r\nimport LastDiscussionWidget from './LastDiscussionWidget';\r\nimport app from 'flarum/forum/app';\r\nimport classList from 'flarum/common/utils/classList';\r\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\r\n\r\nimport type Mithril from 'mithril';\r\n\r\ninterface Attrs {\r\n model: any;\r\n parent: any;\r\n enablePrimaryTagColor: boolean;\r\n enablePrimaryChildTagColor: boolean;\r\n}\r\n\r\n/*\r\n * Provide compatibility for Flarum Tag Passwords extension, this is to ensure that locked tag with Password or Group permission has view restriction on latest discussion.\r\n * To know if a tag is protected, there is an isUnlocked variable that is specific for this extension.\r\n * https://github.com/datlechin/flarum-tag-passwords\r\n * \r\n */\r\ninterface TagLocked {\r\n icon: icon;\r\n text: string;\r\n isVisible: boolean;\r\n}\r\n\r\nexport default class Category extends Component {\r\n tag!: any;\r\n isChild!: boolean;\r\n collapsed!: boolean;\r\n compactMobileMode!: boolean;\r\n tagLocked!: TagLocked;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n this.tag = this.attrs.model;\r\n\r\n this.isChild = this.attrs.parent != null && this.attrs.parent != undefined;\r\n\r\n this.collapsed = false;\r\n\r\n // Identify if the tag has been Goup or Password protected with flarum-tag-passwords extension.\r\n if (typeof this.tag.isUnlocked == 'function') {\r\n if ((this.tag.isGroupProtected() || this.tag.isPasswordProtected()) && !this.tag.isUnlocked()) {\r\n this.tagLocked = {\r\n icon: this.tag.isPasswordProtected() ? icon('fas fa-lock') : icon('fas fa-user-lock'),\r\n text: this.tag.isPasswordProtected() ? app.translator.trans('datlechin-tag-passwords.forum.tags_page.password_protected') : app.translator.trans('datlechin-tag-passwords.forum.tags_page.group_protected'),\r\n isVisible: this.tag.isProtectedTagDisplayedForTagsPage() == true\r\n };\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function () {\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n const tag = this.tag;\r\n\r\n if (!tag) {\r\n return null;\r\n } else if (this.tagLocked && !this.tagLocked.isVisible) {\r\n // Hide the navigation when protected Tag in 'Tag Passwords > Display protected Tag in Tags page navigation' is disabled\r\n return null;\r\n }\r\n\r\n this.compactMobileMode = !!app.forum.attribute('categories.compactMobile');\r\n\r\n return (\r\n \r\n {this.categoryItems().toArray()}\r\n \r\n );\r\n }\r\n\r\n categoryItems() {\r\n const items = new ItemList();\r\n const tag = this.tag;\r\n\r\n const children = this.isChild ? [] : sortTags(tag.children() || []);\r\n\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n style.backgroundColor = this.tag.color();\r\n }\r\n items.add(\r\n 'link',\r\n \r\n {this.contentItems().toArray()}\r\n ,\r\n 100\r\n );\r\n\r\n if (!this.compactMobileMode && !this.isChild) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n\r\n let className = 'auto-color-text';\r\n if (this.attrs.enablePrimaryTagColor || (this.isChild && this.attrs.enablePrimaryChildTagColor)) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n\r\n items.add('alignStart',
{this.alignStartItems().toArray()}
, 100);\r\n\r\n items.add('alignEnd',
{this.alignEndItems().toArray()}
, 50);\r\n\r\n const childrenInContent = !this.isChild && this.compactMobileMode;\r\n\r\n if (childrenInContent && !this.collapsed) {\r\n items.add(\r\n 'children',\r\n
    {children.map((child) => [Category.component({ model: child, parent: this, enablePrimaryChildTagColor: this.attrs.enablePrimaryChildTagColor})])}
,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignStartItems() {\r\n const items = new ItemList();\r\n\r\n const children = this.isChild ? [] : sortTags(this.tag.children() || []);\r\n let style: Record = {};\r\n if (this.isChild) {\r\n if (!this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n } else if (!this.attrs.enablePrimaryTagColor) {\r\n style.color = this.tag.color();\r\n }\r\n items.add('icon', {this.iconItems().toArray()}, 100);\r\n\r\n items.add('main',
{this.mainItems().toArray()}
, 50);\r\n\r\n if (!!children.length) {\r\n items.add(\r\n 'toggleArrow',\r\n {\r\n this.toggleArrow(e);\r\n }}\r\n >\r\n {icon(this.collapsed ? 'fas fa-caret-down' : 'fas fa-caret-up')}\r\n ,\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n alignEndItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tagLocked) {\r\n items.add('locked',
{this.lockedItems().toArray()}
, 100);\r\n return items;\r\n }\r\n\r\n const tag = this.tag;\r\n\r\n items.add('stats',
{this.statItems().toArray()}
, 100);\r\n\r\n items.add(\r\n 'lastDiscussion',\r\n
{this.lastDiscussionItems().toArray()}
,\r\n 50\r\n );\r\n\r\n return items;\r\n }\r\n\r\n lockedItems() {\r\n const items = new ItemList();\r\n const classes = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n items.add(\r\n 'icon',\r\n \r\n {\r\n \r\n }\r\n {this.tagLocked.icon}\r\n ,\r\n 10\r\n );\r\n items.add(\r\n 'LockedText',\r\n
{this.tagLocked.text}
,\r\n 50\r\n );\r\n return items;\r\n }\r\n\r\n iconItems() {\r\n const items = new ItemList();\r\n\r\n if (this.tag.icon() && this.isChild) {\r\n const style: Record = {};\r\n\r\n let iconClasses = ['fa-stack-1x CategoryIcon'];\r\n\r\n if (app.forum.attribute('categories.childBareIcon')) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n style.color = this.tag.color();\r\n } else {\r\n iconClasses.push('NoBackgroundCategoryIcon', 'auto-child-color');\r\n }\r\n } else {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n iconClasses.push(textContrastClass(this.tag.color()));\r\n } else {\r\n style.color = this.tag.color();\r\n }\r\n }\r\n\r\n const className = this.compactMobileMode ? 'fa-stack fa-1x' : 'fa-stack fa-2x';\r\n\r\n items.add(\r\n 'icon',\r\n \r\n {!!app.forum.attribute('categories.childBareIcon') && (\r\n \r\n )}\r\n {icon(this.tag.icon(), { className: classList(iconClasses), style: style })}\r\n ,\r\n 10\r\n );\r\n } else if (this.tag.icon() && !app.forum.attribute('categories.parentRemoveIcon')) {\r\n const classes = this.compactMobileMode ? 'fa-stack fa-2x' : 'fa-stack fa-3x';\r\n\r\n items.add('icon', {icon(this.tag.icon(), { className: 'fa-stack-1x CategoryIcon' })}, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n mainItems() {\r\n const items = new ItemList();\r\n\r\n items.add('name',

{this.tag.name()}

, 15);\r\n \r\n let className = 'auto-color-text';\r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color())+'muted';\r\n }\r\n if (this.tag.description() && (this.isChild || !app.forum.attribute('categories.parentRemoveDescription'))) {\r\n items.add('description',
{this.tag.description()}
, 10);\r\n }\r\n\r\n return items;\r\n }\r\n\r\n statItems() {\r\n const items = new ItemList();\r\n let className = 'auto-color-text';\r\n \r\n if (this.isChild) {\r\n if (this.attrs.enablePrimaryChildTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n } else if (this.attrs.enablePrimaryTagColor) {\r\n className = textContrastClass(this.tag.color());\r\n }\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveStats')) {\r\n items.add(\r\n 'discussionCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.discussionCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.discussion_label'),\r\n icon: 'fas fa-file-alt',\r\n className: className,\r\n }),\r\n 15\r\n );\r\n\r\n items.add(\r\n 'postCount',\r\n StatWidget.component({\r\n count: Intl.NumberFormat().format(this.tag.postCount()),\r\n label: app.translator.trans('askvortsov-categories.forum.stat-widgets.post_label'),\r\n icon: 'fas fa-comment',\r\n className: className,\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n lastDiscussionItems() {\r\n const items = new ItemList();\r\n\r\n if (this.isChild || !app.forum.attribute('categories.parentRemoveLastDiscussion')) {\r\n items.add(\r\n 'lastDiscussion',\r\n LastDiscussionWidget.component({\r\n discussion: this.tag.lastPostedDiscussion(),\r\n selectedTag: {\r\n tag: this.tag,\r\n isChild: this.isChild,\r\n isBackgroundTagColored: this.isChild? this.attrs.enablePrimaryChildTagColor: this.attrs.enablePrimaryTagColor\r\n }\r\n }),\r\n 10\r\n );\r\n }\r\n\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseenter', function (e) {\r\n $(this).addClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').removeClass('hover');\r\n }\r\n });\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').on('mouseleave', function (e) {\r\n $(this).removeClass('hover');\r\n if ($(this).parent().hasClass('SubCategory') || $(this).hasClass('TagCategory-toggleArrow')) {\r\n $(this).closest('.ParentCategory').children('.TagCategory-content').addClass('hover');\r\n }\r\n });\r\n }\r\n\r\n onremove(vnode: Mithril.VnodeDOM): void {\r\n super.onremove(vnode);\r\n\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseenter');\r\n this.$('.TagCategory-content,.TagCategory-toggleArrow').off('mouseleave');\r\n }\r\n\r\n toggleArrow(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.collapsed = !this.collapsed;\r\n m.redraw();\r\n }\r\n}\r\n","import app from 'flarum/forum/app';\r\nimport Page from 'flarum/common/components/Page';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport listItems from 'flarum/common/helpers/listItems';\r\nimport ItemList from 'flarum/common/utils/ItemList';\r\nimport extractText from 'flarum/common/utils/extractText';\r\nimport sortTags from 'flarum/tags/utils/sortTags';\r\nimport tagLabel from 'flarum/tags/helpers/tagLabel';\r\n\r\nimport Category from './Category';\r\n\r\n/*\r\n* Used for finding the correct location of widget containers, widget has undefined className which is used to compare and find.\r\n* position types:\r\n* POSITION_ANY = No position check (Used for Right Side Widget)\r\n* POSITION_FIRST = First container only (Used for Header Widget)\r\n* POSITION_AFTER_FIRST = After the first container (Used for the Footer Widget)\r\n*/\r\nconst POSITION_ANY = 0;\r\nconst POSITION_FIRST = 1;\r\nconst POSITION_AFTER_FIRST = 2;\r\n\r\nfunction findWidgetContainer(vdom, classNames, classNameIndex, position) {\r\n for (let i = 0; i < vdom.children.length; i++) {\r\n const child = vdom.children[i];\r\n const findClassName = classNames[classNameIndex];\r\n const isClassNameMatch = child.attrs.className? child.attrs.className.indexOf(findClassName) !== -1: false;\r\n if (isClassNameMatch || findClassName == child.attrs.className) {\r\n let isValid = false;\r\n if (position === POSITION_ANY || isClassNameMatch) {\r\n isValid = true;\r\n } else if (position === POSITION_FIRST && i == 0) {\r\n isValid = true;\r\n } else if (position === POSITION_AFTER_FIRST && i > 0) {\r\n isValid = true;\r\n }\r\n if (isValid) {\r\n classNameIndex += 1;\r\n if (classNameIndex == classNames.length) {\r\n // Found the last container from the classNames array\r\n return child;\r\n } else {\r\n return findWidgetContainer(child, classNames, classNameIndex, position);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default class CategoriesPage extends Page {\r\n tags!: any[];\r\n loading!: boolean;\r\n\r\n oninit(vnode) {\r\n super.oninit(vnode);\r\n\r\n app.history.push('categories', extractText(app.translator.trans('askvortsov-category.forum.header.back_to_categories_tooltip')));\r\n\r\n this.tags = [];\r\n\r\n const preloaded = app.preloadedApiDocument();\r\n\r\n if (preloaded) {\r\n this.tags = sortTags(preloaded.filter((tag: any) => !tag.isChild()));\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n app.tagList.load(['parent', 'children', 'lastPostedDiscussion', 'lastPostedDiscussion.lastPostedUser']).then(() => {\r\n this.tags = sortTags(app.store.all('tags').filter((tag) => !tag.isChild()));\r\n\r\n this.loading = false;\r\n\r\n m.redraw();\r\n });\r\n }\r\n\r\n view() {\r\n if (this.loading) {\r\n return ;\r\n }\r\n\r\n return
{this.pageItems().toArray()}
;\r\n }\r\n\r\n pageItems() {\r\n const items = new ItemList();\r\n\r\n items.add('hero', IndexPage.prototype.hero(), 100);\r\n\r\n items.add('container',
{this.containerItems().toArray()}
, 50);\r\n\r\n return items;\r\n }\r\n\r\n containerItems() {\r\n const items = new ItemList();\r\n const indexPage = IndexPage.prototype.view();\r\n // Only check for header widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetHeader')) {\r\n const foundHeaderWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_FIRST);\r\n if (foundHeaderWidget) {\r\n items.add('header-widget', foundHeaderWidget, 100);\r\n }\r\n }\r\n\r\n items.add(\"sideNavContainer\",
{this.contentItems().toArray()}
, 50);\r\n\r\n // Only check for footer widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetFooter')) {\r\n const foundFooterWidget= findWidgetContainer(indexPage, ['container', undefined], 0, POSITION_AFTER_FIRST);\r\n if (foundFooterWidget) {\r\n items.add('footer-widget', foundFooterWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n contentItems() {\r\n const items = new ItemList();\r\n\r\n const pinned = this.tags.filter((tag) => tag.position() !== null);\r\n const cloud = this.tags.filter((tag) => tag.position() === null);\r\n\r\n items.add(\r\n 'sideNav',\r\n ,\r\n 100\r\n );\r\n\r\n items.add(\r\n 'categoriesList',\r\n
\r\n
    \r\n {pinned.map((tag) => {\r\n return Category.component({ model: tag, enablePrimaryTagColor: app.forum.attribute('categories.enablePrimaryTagColor'), enablePrimaryChildTagColor: app.forum.attribute('categories.enablePrimaryChildTagColor') });\r\n })}\r\n
\r\n\r\n {cloud.length ?
{cloud.map((tag) => [tagLabel(tag, { link: true }), ' '])}
: ''}\r\n
,\r\n 50\r\n );\r\n // Only check for right side widget if enable in the settings\r\n if (app.forum.attribute('categories.widgetRight')) {\r\n const indexPage = IndexPage.prototype.view();\r\n const foundWidget= findWidgetContainer(indexPage, ['container','sideNavContainer', undefined], 0, POSITION_ANY);\r\n if (foundWidget) {\r\n items.add('widget', foundWidget, 0);\r\n }\r\n }\r\n return items;\r\n }\r\n\r\n oncreate(vnode) {\r\n super.oncreate(vnode);\r\n\r\n app.setTitle(extractText(app.translator.trans('askvortsov-categories.forum.all_categories.meta_title_text')));\r\n }\r\n}\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/forum/components/TagsPage'];","import { extend } from 'flarum/common/extend';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LinkButton from 'flarum/common/components/LinkButton';\r\nimport Model from 'flarum/common/Model';\r\nimport Tag from 'flarum/tags/models/Tag';\r\nimport CategoriesPage from './components/CategoriesPage';\r\nimport TagsPage from 'flarum/tags/forum/components/TagsPage';\r\nimport Category from './components/Category';\r\nimport LastDiscussionWidget from './components/LastDiscussionWidget';\r\nimport StatWidget from './components/StatWidget';\r\nimport sortWidgets from 'flarum/extensions/afrux-forum-widgets-core/common/utils/sortWidgets';\r\n\r\n\r\nfunction pruneIndexNav(items, func) {\r\n const isTagsPageVisible = app.forum.attribute('categories.keepTagsNav');\r\n\r\n const isCustomTagsHidden = (app.current.matches(CategoriesPage) || app.current.matches(TagsPage));\r\n for (const item in items.items) {\r\n if (func(item)) {\r\n if(item.startsWith('tag')) {\r\n if(item == 'tags') {\r\n /*\r\n * Tags must be visible on the navibation bar, when the User has selected to keep Tags within the Extension Settings.\r\n * Finding all items that begins with 'tag' will also load 'tags', due to custom tag are labelled 'tag1', 'tag2' and so-on\r\n */\r\n if (!isTagsPageVisible) {\r\n items.remove(item);\r\n }\r\n } else {\r\n /*\r\n * This is for custom tags, where they should not be visible within CategoriesPage and TagsPage\r\n */\r\n if (isCustomTagsHidden) {\r\n items.remove(item);\r\n }\r\n }\r\n } else {\r\n /*\r\n * Remove widget on the left side if disabled from settings\r\n */\r\n if (!app.forum.attribute('categories.widgetLeft')) {\r\n items.remove(item);\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\napp.initializers.add('askvortsov/flarum-categories', () => {\r\n app.routes.categories = {\r\n path: '/categories',\r\n component: CategoriesPage,\r\n };\r\n\r\n Tag.prototype.postCount = Model.attribute('postCount');\r\n\r\n extend(IndexPage.prototype, 'navItems', function (items) {\r\n items.add(\r\n 'categories',\r\n \r\n {app.translator.trans('askvortsov-categories.forum.index.categories_link')}\r\n ,\r\n -9.5\r\n );\r\n\r\n if (app.current.matches(CategoriesPage) || app.current.matches(TagsPage)) {\r\n // There is not need to display More Tags button for Categories or Tags Page\r\n items.remove('moreTags');\r\n } else {\r\n if (items.has('moreTags')) {\r\n items.replace('moreTags', {app.translator.trans('flarum-tags.forum.index.more_link')});\r\n }\r\n }\r\n\r\n pruneIndexNav(items, (item) => item.startsWith('tag'));\r\n\r\n return items;\r\n });\r\n\r\n extend(IndexPage.prototype, 'sidebarItems', function (items) {\r\n pruneIndexNav(items, (item) => item !== 'newDiscussion' && item !== 'nav');\r\n });\r\n});\r\n\r\nexport default {\r\n 'components/CategoriesPage': CategoriesPage,\r\n 'components/Category': Category,\r\n 'components/LastDiscussionWidget': LastDiscussionWidget,\r\n 'components/StatWidget': StatWidget,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extensions/afrux-forum-widgets-core/common/utils/sortWidgets'];"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_inheritsLoose","subClass","superClass","create","constructor","StatWidget","_Component","apply","arguments","_proto","view","m","class","classList","app","this","attrs","className","content","toArray","_m","items","ItemList","add","count","icon","label","Component","LastDiscussionWidget","_this","_len","length","args","Array","_key","concat","cardVisible","oninit","vnode","_discussion$lastPostN","discussion","lastPostedUser","Link","href","lastPostNumber","user","selectedTag","isChild","isBackgroundTagColored","textContrastClass","tag","color","avatarName","avatarDisplay","id","extractText","username","avatar","loading","route","lastDiscussionAvatar","humanTime","lastPostedAt","style","display","margin","role","truncate","title","card","UserCard","controlsButtonClassName","oncreate","timeout","_this2","$","on","clearTimeout","window","setTimeout","showCard","hideCard","onremove","off","_this3","redraw","addClass","removeClass","Category","collapsed","compactMobileMode","tagLocked","model","parent","undefined","isUnlocked","isGroupProtected","isPasswordProtected","text","isVisible","isProtectedTagDisplayedForTagsPage","addEventListener","slug","SubCategory","ParentCategory","compactMobile","categoryItems","children","sortTags","enablePrimaryChildTagColor","backgroundColor","enablePrimaryTagColor","contentItems","map","child","component","alignStartItems","alignEndItems","_this4","iconItems","mainItems","onclick","e","toggleArrow","lockedItems","statItems","empty","lastPostedDiscussion","lastDiscussionItems","classes","iconClasses","push","name","description","Intl","NumberFormat","format","discussionCount","postCount","hasClass","closest","preventDefault","stopPropagation","POSITION_ANY","POSITION_FIRST","POSITION_AFTER_FIRST","findWidgetContainer","vdom","classNames","classNameIndex","position","i","findClassName","isClassNameMatch","indexOf","isValid","CategoriesPage","_Page","tags","preloaded","filter","then","LoadingIndicator","pageItems","IndexPage","containerItems","indexPage","foundHeaderWidget","foundFooterWidget","pinned","cloud","listItems","tagLabel","link","foundWidget","Page","pruneIndexNav","func","isTagsPageVisible","forum","attribute","isCustomTagsHidden","current","matches","TagsPage","item","startsWith","remove","initializers","routes","categories","path","Tag","Model","extend","LinkButton","translator","trans","has","replace"],"sourceRoot":""} \ No newline at end of file diff --git a/js/src/forum/helpers/lastDiscussionAvatar.js b/js/src/forum/helpers/lastDiscussionAvatar.js index 7832a0b..fb61355 100644 --- a/js/src/forum/helpers/lastDiscussionAvatar.js +++ b/js/src/forum/helpers/lastDiscussionAvatar.js @@ -1,4 +1,3 @@ -import icon from 'flarum/common/helpers/icon'; import avatar from 'flarum/common/helpers/avatar'; import Link from 'flarum/common/components/Link'; import username from 'flarum/common/helpers/username'; @@ -13,7 +12,7 @@ export default function lastDiscussionAvatar(user, className) { } if (!avatarDisplay) { avatarName = "Anonymous"; - avatarDisplay = {icon('fas fa-question')}; + avatarDisplay = ?; } return