\n {Button.component(\n {\n type: \"submit\",\n className: \"Button Button--primary SupportModal-save\",\n loading: this.loading,\n },\n \"Update\"\n )}\n
,\n -10\n );\n\n return items;\n }\n\n submitData() {\n return {\n summary: this.summary(),\n featuredImage: this.featuredImage(),\n isFeatured: this.isFeatured(),\n isSized: this.isSized(),\n isPendingReview: this.isPendingReview(),\n relationships:\n this.isNew && !this.attrs.isComposer\n ? {\n discussion: this.attrs.article,\n }\n : null,\n };\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n // Submit data\n if (this.attrs.onsubmit) {\n // Update attributes\n this.meta.pushData({\n attributes: this.submitData(),\n });\n\n // Push\n this.attrs.onsubmit(this.meta);\n\n this.hide();\n return;\n }\n\n this.loading = true;\n\n this.meta.save(this.submitData()).then(\n () => {\n if (this.attrs.article) {\n this.attrs.article.pushData({\n relationships: {\n blogMeta: this.meta,\n },\n });\n }\n\n this.hide();\n m.redraw();\n },\n (response) => {\n this.loading = false;\n this.handleErrors(response);\n }\n );\n }\n}\n","import Modal from \"flarum/components/Modal\";\nimport Button from \"flarum/components/Button\";\nimport ItemList from \"flarum/utils/ItemList\";\nimport Stream from \"flarum/utils/Stream\";\n\nexport default class RenameArticleModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.article = this.attrs.article;\n\n this.name = Stream(this.article.title() || \"\");\n\n this.redirect = this.attrs.redirect;\n }\n\n className() {\n return \"Modal--small Support-Modal\";\n }\n\n title() {\n return app.translator.trans(\n \"v17development-flarum-blog.forum.tools.rename_article\"\n );\n }\n\n content() {\n return (\n \n {Button.component(\n {\n type: \"submit\",\n className: \"Button Button--primary SupportModal-save\",\n loading: this.loading,\n },\n \"Update\"\n )}\n
,\n -10\n );\n\n return items;\n }\n\n submitData() {\n return {\n title: this.name(),\n };\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n // Do not save\n if (this.attrs.onChange) {\n this.attrs.onChange(this.name());\n this.hide();\n\n return;\n }\n\n this.article\n .save({\n title: this.name(),\n })\n .then(\n () => {\n this.hide();\n\n // Redirect\n if (this.redirect) {\n const url = `/blog/${this.article.slug()}`;\n\n m.route.set(url, true);\n window.history.replaceState(null, document.title, url);\n }\n },\n (response) => {\n this.loading = false;\n this.handleErrors(response);\n }\n );\n }\n}\n","import Component from \"flarum/Component\";\nimport TagDiscussionModal from \"flarum/tags/components/TagDiscussionModal\";\nimport DiscussionControls from \"flarum/utils/DiscussionControls\";\nimport Alert from \"flarum/components/Alert\";\nimport Button from \"flarum/components/Button\";\nimport Dropdown from \"flarum/components/Dropdown\";\nimport BlogPostSettingsModal from \"./Modals/BlogPostSettingsModal\";\nimport EditPostComposer from \"flarum/components/EditPostComposer\";\nimport extractText from \"flarum/utils/extractText\";\nimport RenameArticleModal from \"./Modals/RenameArticleModal\";\n\nexport default class BlogPostController extends Component {\n init() {\n this.loadedPost = false;\n }\n\n view() {\n const article = this.attrs.article;\n let buttons = [];\n\n // Working for GlowingBlue version\n const LanguageDiscussionModal =\n flarum.extensions[\"fof-discussion-language\"] &&\n typeof flarum.extensions[\"fof-discussion-language\"].components !==\n \"undefined\"\n ? flarum.extensions[\"fof-discussion-language\"].components\n .LanguageDiscussionModal\n : null;\n\n // Rename article\n if (article.canRename()) {\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: () => app.modal.show(RenameArticleModal, { article }),\n icon: \"fas fa-pencil-alt\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.rename_article\"\n )\n )\n );\n }\n\n const articlePost = article.firstPost()\n ? article.firstPost()\n : app.store.getById(\"posts\", article.firstPostId());\n\n // Edit article\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n disabled: !articlePost || !articlePost.canEdit(),\n onclick: () => {\n app.composer.load(EditPostComposer, { post: articlePost });\n app.composer.show();\n },\n icon: \"fas fa-edit\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.edit_article\"\n )\n )\n );\n\n // Article settings\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: () => app.modal.show(BlogPostSettingsModal, { article }),\n icon: \"fas fa-cogs\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.article_settings\"\n )\n )\n );\n\n // Update categories\n if (article.canTag()) {\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: () =>\n app.modal.show(TagDiscussionModal, { discussion: article }),\n icon: \"fas fa-tag\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.update_category\"\n )\n )\n );\n }\n\n // Approve article\n if (article.blogMeta() && article.blogMeta().isPendingReview()) {\n buttons.push(\n
\n
\n \n \n \n {app.translator.trans(\n \"v17development-flarum-blog.forum.return_to_overview\"\n )}\n \n \n
\n
\n
\n
\n
this.openBlogSettings(e)}\n />\n\n
\n
\n {this.languages !== null && this.languages.length >= 1 && (\n \n (this.articleLanguage = language)\n }\n />\n )}\n\n \n
\n
\n\n {/* Article Categories */}\n
\n\n
\n {/* Article name */}\n
this.openNameArticleModal()}\n style={{ cursor: \"pointer\" }}\n >\n {this.article &&\n this.article.title() &&\n this.article.title() !== \"\"\n ? this.article.title()\n : app.translator.trans(\n \"v17development-flarum-blog.forum.composer.no_title\"\n )}\n\n e.preventDefault()}>\n \n \n
\n\n
\n this.create()}\n disabled={this.isSaving}\n />\n
\n
\n
\n\n
\n
\n {app.translator.trans(\n \"v17development-flarum-blog.forum.comment_section.comments\"\n )}{\" \"}\n (0)\n
\n {/* Locked */}\n\n
\n
\n \n {\" \"}\n {app.translator.trans(\n \"v17development-flarum-blog.forum.composer.comment_section\"\n )}\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n );\n }\n\n create() {\n const blogTags = app.forum.attribute(\"blogTags\") || [];\n\n // Force tags\n if (this.tags.length === 0) {\n this.openTagsModal();\n return;\n }\n\n // Force title\n if (!this.article.title() || this.article.title() === \"\") {\n this.openNameArticleModal();\n return;\n }\n\n // Find knowledge base tags\n const findblogTags = this.tags.filter((tag) => {\n return blogTags.indexOf(tag.id()) >= 0;\n });\n\n // No knowledge base tags selected\n if (findblogTags.length === 0) {\n alert(\n app.translator.trans(\n \"v17development-flarum-blog.forum.composer.no_blog_tags_selected\"\n )\n );\n return;\n }\n\n if (\n (this.blogMeta === null ||\n !this.blogMeta.featuredImage() ||\n !this.blogMeta.summary()) &&\n !confirm(\n app.translator.trans(\n \"v17development-flarum-blog.forum.composer.post_without_blog_info\"\n )\n )\n ) {\n return;\n }\n\n let relationships = {\n tags: this.tags,\n };\n\n // Add languages if possible\n if (this.languages.length > 0) {\n relationships.language = app.store.getBy(\n \"discussion-languages\",\n \"code\",\n this.articleLanguage\n );\n }\n\n const data = {\n title: this.article.title(),\n content: app.composer.fields.content(),\n relationships,\n blogMeta:\n this.blogMeta !== null\n ? {\n featuredImage: this.blogMeta.featuredImage(),\n summary: this.blogMeta.summary(),\n isSized: this.blogMeta.isSized(),\n }\n : null,\n };\n\n this.isSaving = true;\n\n this.article\n .save(data)\n .then((article) => {\n setTimeout(() => {\n // Redirect to the article\n m.route.set(app.route(\"blogArticle\", { id: `${article.slug()}` }));\n }, 500);\n })\n .catch(() => {\n this.isSaving = false;\n m.redraw();\n });\n }\n}\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","import { extend } from \"flarum/extend\";\nimport IndexPage from \"flarum/components/IndexPage\";\nimport LinkButton from \"flarum/components/LinkButton\";\n\nexport default function addSidebarNav() {\n extend(IndexPage.prototype, \"navItems\", function (items) {\n if (\n app.forum.attribute(\"blogAddSidebarNav\") &&\n app.forum.attribute(\"blogAddSidebarNav\") !== \"0\"\n ) {\n items.add(\n \"blog\",\n
\n {app.translator.trans(\"v17development-flarum-blog.forum.blog\")}\n ,\n 15\n );\n }\n\n return items;\n });\n}\n","import BlogItem from \"./pages/BlogItem\";\nimport Model from \"flarum/Model\";\nimport Discussion from \"flarum/models/Discussion\";\nimport BlogOverview from \"./pages/BlogOverview\";\nimport redirector from \"./utils/redirector\";\nimport BlogMeta from \"../common/Models/BlogMeta\";\nimport extendTagOverview from \"./utils/extendTagOverview\";\nimport discussionRouting from \"./utils/discussionRouting\";\nimport BlogComposer from \"./pages/BlogComposer\";\nimport compat from \"./compat\";\nimport addSidebarNav from \"./utils/addSidebarNav\";\n\n// Register Flarum Blog\napp.initializers.add(\"v17development-flarum-blog\", (app) => {\n app.routes.blog = { path: \"/blog\", component: BlogOverview };\n\n app.routes.blogCategory = {\n path: \"/blog/category/:slug\",\n component: BlogOverview,\n };\n\n app.routes.blogComposer = { path: \"/blog/compose\", component: BlogComposer };\n\n app.routes.blogArticle = { path: \"/blog/:id\", component: BlogItem };\n\n app.store.models.blogMeta = BlogMeta;\n\n Discussion.prototype.blogMeta = Model.hasOne(\"blogMeta\");\n\n // Redirect discussions/tags to their blog post/overview\n redirector();\n\n // Extend tag overview.\n // Hide tags which are used as blog category\n extendTagOverview();\n\n // Make that blog articles have a blog route and not a discussion route\n discussionRouting();\n\n // Add a link to the blog to the IndexPage sidebar, if enabled.\n addSidebarNav();\n});\n\ncompat();\n","import { compat } from \"@flarum/core/forum\";\nimport BlogAuthor from \"./components/BlogItemSidebar/BlogAuthor\";\nimport BlogItemSidebar from \"./components/BlogItemSidebar/BlogItemSidebar\";\n\nexport default () => {\n Object.assign(compat, {\n \"v17development/blog/components/BlogItemSidebar\": BlogItemSidebar,\n \"v17development/blog/components/BlogAuthor\": BlogAuthor,\n });\n};\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack://@v17development/flarum-blog/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/Page']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/CommentPost']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/PostStream']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['states/PostStreamState']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['Component']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['tags/components/TagDiscussionModal']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['utils/DiscussionControls']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/Alert']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/Button']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/Dropdown']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/Modal']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['utils/ItemList']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['utils/Stream']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/Switch']\"","webpack://@v17development/flarum-blog/./src/forum/components/Modals/BlogPostSettingsModal.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/EditPostComposer']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['utils/extractText']\"","webpack://@v17development/flarum-blog/./src/forum/components/Modals/RenameArticleModal.js","webpack://@v17development/flarum-blog/./src/forum/components/BlogPostController.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['helpers/listItems']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['helpers/avatar']\"","webpack://@v17development/flarum-blog/./src/forum/components/BlogItemSidebar/BlogAuthor.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/Link']\"","webpack://@v17development/flarum-blog/./src/forum/components/BlogCategories.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/IndexPage']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/SelectDropdown']\"","webpack://@v17development/flarum-blog/./src/forum/components/ForumNav.js","webpack://@v17development/flarum-blog/./src/forum/components/BlogItemSidebar/BlogItemSidebar.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['helpers/humanTime']\"","webpack://@v17development/flarum-blog/./src/forum/utils/tooltip.js","webpack://@v17development/flarum-blog/./src/forum/components/LanguageDropdown/Language.js","webpack://@v17development/flarum-blog/./src/forum/components/LanguageDropdown/LanguageDropdown.js","webpack://@v17development/flarum-blog/./src/forum/pages/BlogOverview.js","webpack://@v17development/flarum-blog/./src/forum/pages/BlogItem.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['Model']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['models/Discussion']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/DiscussionPage']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['extend']\"","webpack://@v17development/flarum-blog/./src/forum/utils/redirector.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['utils/mixin']\"","webpack://@v17development/flarum-blog/./src/common/Models/BlogMeta.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['tags/components/TagsPage']\"","webpack://@v17development/flarum-blog/./src/forum/utils/extendTagOverview.js","webpack://@v17development/flarum-blog/./src/forum/utils/discussionRouting.js","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/ComposerBody']\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/TextEditor']\"","webpack://@v17development/flarum-blog/./src/forum/components/Composer/ComposerPreview.js","webpack://@v17development/flarum-blog/./src/forum/components/Composer/Composer.js","webpack://@v17development/flarum-blog/./src/forum/pages/BlogComposer.js","webpack://@v17development/flarum-blog/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@v17development/flarum-blog/external \"flarum.core\"","webpack://@v17development/flarum-blog/external \"flarum.core.compat['components/LinkButton']\"","webpack://@v17development/flarum-blog/./src/forum/utils/addSidebarNav.js","webpack://@v17development/flarum-blog/./src/forum/index.js","webpack://@v17development/flarum-blog/./src/forum/compat.js","webpack://@v17development/flarum-blog/webpack/bootstrap","webpack://@v17development/flarum-blog/webpack/startup","webpack://@v17development/flarum-blog/webpack/runtime/compat get default export","webpack://@v17development/flarum-blog/webpack/runtime/define property getters","webpack://@v17development/flarum-blog/webpack/runtime/hasOwnProperty shorthand","webpack://@v17development/flarum-blog/webpack/runtime/make namespace object"],"names":["_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","__proto__","flarum","core","compat","BlogPostSettingsModal","oninit","vnode","this","attrs","article","meta","blogMeta","app","store","createRecord","isNew","exists","summary","Stream","featuredImage","isFeatured","isSized","isPendingReview","className","title","content","fields","toArray","items","ItemList","add","style","maxWidth","minWidth","width","minHeight","bidi","placeholder","type","src","alt","marginTop","Switch","state","onchange","val","fontWeight","Button","loading","submitData","relationships","isComposer","discussion","onsubmit","e","preventDefault","pushData","attributes","hide","save","then","m","redraw","response","handleErrors","Modal","RenameArticleModal","name","redirect","translator","trans","onChange","url","slug","route","set","window","history","replaceState","document","BlogPostController","init","loadedPost","view","buttons","LanguageDiscussionModal","extensions","components","canRename","push","onclick","modal","show","icon","articlePost","firstPost","getById","firstPostId","disabled","canEdit","composer","load","EditPostComposer","post","canTag","TagDiscussionModal","forum","attribute","alerts","Alert","canChangeLanguage","canLock","DiscussionControls","isLocked","canHide","isHidden","canDelete","confirm","extractText","getCurrent","previous","back","Dropdown","label","buttonClassName","menuClassName","onshow","find","id","Component","BlogAuthor","author","user","backgroundColor","color","avatar","displayName","bio","listItems","BlogCategories","blogCategories","map","tagId","tag","tags","categoryItem","all","forEach","_tag","isChild","parent","href","ForumNav","navItems","IndexPage","screen","remove","BlogItemSidebar","itemlist","component","tooltip","element","$","Language","languages","options","reduce","o","lang","code","extra","language","uppercase","toUpperCase","LanguageDropdown","selected","keys","key","active","BlogOverview","setTitle","bodyClass","isLoading","featuredPosts","posts","hasMore","isLoadingMore","currentSelectedLanguage","param","locale","loadBlogOverview","preloadBlogOverview","preloadedApiDocument","setTimeout","bind","reloadData","q","length","filter","sort","articles","payload","links","next","slice","loadMore","replace","data","defaultImage","newArticle","location","pathname","clear","blogImage","blogTag","backgroundImage","isSticky","config","data-placement","humanTime","createdAt","commentCount","blogTags","indexOf","currentCategory","getBy","join","undefined","Page","BlogItem","near","found","loadBlogItem","split","includedPosts","included","articleId","record","a","b","stream","PostStreamState","goToNumber","matches","class","opacity","session","fontSize","marginRight","PostStream","onPositionChange","positionChanged","startNumber","endNumber","lastReadPostNumber","extend","currentTag","tagRedirectEnabled","override","DiscussionPage","original","BlogMeta","mixin","Model","extendTagOverview","TagsPage","markup","knowledgeBaseTags","tag_tiles","children","tile","i","original_discussion_route","shouldRedirect","ComposerPreview","oncreate","s9e","TextFormatter","preview","dom","Composer","previewContent","hasContent","TextEditor","submitLabel","jumpToPreview","value","ComposerBody","BlogComposer","articleLanguage","tagList","Array","isArray","foundTag","isSaving","openTagsModal","selectedTags","openNameArticleModal","openBlogSettings","cursor","originalContent","alert","_extends","assign","target","arguments","source","hasOwnProperty","call","apply","addSidebarNav","initializers","routes","blog","path","blogCategory","blogComposer","blogArticle","models","Discussion","redirector","discussionRouting","__webpack_module_cache__","__webpack_require__","moduleId","exports","module","__webpack_modules__","n","getter","__esModule","d","definition","defineProperty","enumerable","get","obj","prop","r","Symbol","toStringTag"],"mappings":"uDAAe,SAASA,EAAeC,EAAUC,GAC/CD,EAASE,UAAYC,OAAOC,OAAOH,EAAWC,WAC9CF,EAASE,UAAUG,YAAcL,EACjCA,EAASM,UAAYL,E,OCHvB,MAAM,EAA+BM,OAAOC,KAAKC,OAAO,mB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,yB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,0B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAkB,U,aCAnE,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,sC,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,oB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,qB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,uB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,oB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,kB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,gB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,qB,aCMnCC,E,gGACnBC,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GAETC,KAAKC,MAAMC,QACbF,KAAKG,KACHH,KAAKC,MAAMC,SAAWF,KAAKC,MAAMC,QAAQE,WACrCJ,KAAKC,MAAMC,QAAQE,WACnBC,IAAIC,MAAMC,aAAa,YAE7BP,KAAKG,KAAOH,KAAKC,MAAME,KACnBH,KAAKC,MAAME,KACXE,IAAIC,MAAMC,aAAa,YAG7BP,KAAKQ,OAASR,KAAKG,KAAKM,OAExBT,KAAKU,QAAUC,IAAOX,KAAKG,KAAKO,WAAa,IAE7CV,KAAKY,cAAgBD,IAAOX,KAAKG,KAAKS,iBAAmB,IAEzDZ,KAAKa,WAAaF,IAAOX,KAAKG,KAAKU,eAAgB,GACnDb,KAAKc,QAAUH,IAAOX,KAAKG,KAAKW,YAAa,GAC7Cd,KAAKe,gBAAkBJ,IAAOX,KAAKG,KAAKY,oBAAqB,I,EAG/DC,UAAA,WACE,MAAO,8B,EAGTC,MAAA,WACE,MAAO,sB,EAGTC,QAAA,WACE,OACE,SAAKF,UAAU,cACb,SAAKA,UAAU,QAAQhB,KAAKmB,SAASC,a,EAK3CD,OAAA,WAAS,WACDE,EAAQ,IAAIC,KAwFlB,OAtFAD,EAAME,IACJ,UACA,SAAKP,UAAU,cACb,mCACA,cACEA,UAAU,cACVQ,MAAO,CACLC,SAAU,OACVC,SAAU,OACVC,MAAO,OACPC,UAAW,SAEbC,KAAM7B,KAAKU,QACXoB,YAAa,2BAGf,6GAKF,IAGFT,EAAME,IACJ,QACA,SAAKP,UAAU,cACb,qCACA,WACEe,KAAK,OACLf,UAAU,cACVa,KAAM7B,KAAKY,cACXkB,YAAa,aAGf,mEAEyB,IAAxB9B,KAAKY,iBACJ,SACEoB,IAAKhC,KAAKY,gBACVqB,IAAK,gBACLhB,MAAO,kBACPU,MAAO,OACPH,MAAO,CAAEU,UAAW,WAI1B,IAGFb,EAAME,IACJ,QACA,SAAKP,UAAU,cACZmB,cACC,CACEC,MAAyB,GAAlBpC,KAAKc,UACZuB,SAAU,SAACC,GACT,EAAKxB,QAAQwB,KAGjB,CACE,+BACA,SAAKtB,UAAU,WAAWQ,MAAO,CAAEe,WAAY,MAA/C,6DAML,IAGHlB,EAAME,IACJ,SACA,SAAKP,UAAU,cACZwB,cACC,CACET,KAAM,SACNf,UAAW,2CACXyB,QAASzC,KAAKyC,SAEhB,YAGH,IAGIpB,G,EAGTqB,WAAA,WACE,MAAO,CACLhC,QAASV,KAAKU,UACdE,cAAeZ,KAAKY,gBACpBC,WAAYb,KAAKa,aACjBC,QAASd,KAAKc,UACdC,gBAAiBf,KAAKe,kBACtB4B,cACE3C,KAAKQ,QAAUR,KAAKC,MAAM2C,WACtB,CACEC,WAAY7C,KAAKC,MAAMC,SAEzB,O,EAIV4C,SAAA,SAASC,GAAG,WAIV,GAHAA,EAAEC,iBAGEhD,KAAKC,MAAM6C,SAUb,OARA9C,KAAKG,KAAK8C,SAAS,CACjBC,WAAYlD,KAAK0C,eAInB1C,KAAKC,MAAM6C,SAAS9C,KAAKG,WAEzBH,KAAKmD,OAIPnD,KAAKyC,SAAU,EAEfzC,KAAKG,KAAKiD,KAAKpD,KAAK0C,cAAcW,MAChC,WACM,EAAKpD,MAAMC,SACb,EAAKD,MAAMC,QAAQ+C,SAAS,CAC1BN,cAAe,CACbvC,SAAU,EAAKD,QAKrB,EAAKgD,OACLG,EAAEC,YAEJ,SAACC,GACC,EAAKf,SAAU,EACf,EAAKgB,aAAaD,O,GAxLyBE,KCNnD,MAAM,EAA+BhE,OAAOC,KAAKC,OAAO,+B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,qB,aCKnC+D,E,gGACnB7D,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GAEbC,KAAKE,QAAUF,KAAKC,MAAMC,QAE1BF,KAAK4D,KAAOjD,IAAOX,KAAKE,QAAQe,SAAW,IAE3CjB,KAAK6D,SAAW7D,KAAKC,MAAM4D,U,EAG7B7C,UAAA,WACE,MAAO,8B,EAGTC,MAAA,WACE,OAAOZ,IAAIyD,WAAWC,MACpB,0D,EAIJ7C,QAAA,WACE,OACE,SAAKF,UAAU,cACb,SAAKA,UAAU,QAAQhB,KAAKmB,SAASC,a,EAK3CD,OAAA,WACE,IAAME,EAAQ,IAAIC,KAqClB,OAnCAD,EAAME,IACJ,OACA,SAAKP,UAAU,cACb,eACGX,IAAIyD,WAAWC,MACd,kDAFJ,KAMA,WACE/C,UAAU,cACVc,YAAazB,IAAIyD,WAAWC,MAC1B,kDAEFlC,KAAM7B,KAAK4D,QAGf,IAGFvC,EAAME,IACJ,SACA,SAAKP,UAAU,cACZwB,cACC,CACET,KAAM,SACNf,UAAW,2CACXyB,QAASzC,KAAKyC,SAEhB,YAGH,IAGIpB,G,EAGTqB,WAAA,WACE,MAAO,CACLzB,MAAOjB,KAAK4D,S,EAIhBd,SAAA,SAASC,GAAG,WAMV,GALAA,EAAEC,iBAEFhD,KAAKyC,SAAU,EAGXzC,KAAKC,MAAM+D,SAIb,OAHAhE,KAAKC,MAAM+D,SAAShE,KAAK4D,aACzB5D,KAAKmD,OAKPnD,KAAKE,QACFkD,KAAK,CACJnC,MAAOjB,KAAK4D,SAEbP,MACC,WAIE,GAHA,EAAKF,OAGD,EAAKU,SAAU,CACjB,IAAMI,EAAM,SAAS,EAAK/D,QAAQgE,OAElCZ,EAAEa,MAAMC,IAAIH,GAAK,GACjBI,OAAOC,QAAQC,aAAa,KAAMC,SAASvD,MAAOgD,OAGtD,SAACT,GACC,EAAKf,SAAU,EACf,EAAKgB,aAAaD,O,GA3GoBE,KCM3Be,E,gGACnBC,KAAA,WACE1E,KAAK2E,YAAa,G,EAGpBC,KAAA,WAAO,WACC1E,EAAUF,KAAKC,MAAMC,QACvB2E,EAAU,GAGRC,EACJpF,OAAOqF,WAAW,iCAEhB,IADKrF,OAAOqF,WAAW,2BAA2BC,WAEhDtF,OAAOqF,WAAW,2BAA2BC,WAC1CF,wBACH,KAGF5E,EAAQ+E,aACVJ,EAAQK,KACN1C,cACE,CACExB,UAAW,SACXmE,QAAS,kBAAM9E,IAAI+E,MAAMC,KAAK1B,EAAoB,CAAEzD,aACpDoF,KAAM,qBAERjF,IAAIyD,WAAWC,MACb,2DAMR,IAAMwB,EAAcrF,EAAQsF,YACxBtF,EAAQsF,YACRnF,IAAIC,MAAMmF,QAAQ,QAASvF,EAAQwF,eAiNvC,OA9MAb,EAAQK,KACN1C,cACE,CACExB,UAAW,SACX2E,UAAWJ,IAAgBA,EAAYK,UACvCT,QAAS,WACP9E,IAAIwF,SAASC,KAAKC,IAAkB,CAAEC,KAAMT,IAC5ClF,IAAIwF,SAASR,QAEfC,KAAM,eAERjF,IAAIyD,WAAWC,MACb,yDAMNc,EAAQK,KACN1C,cACE,CACExB,UAAW,SACXmE,QAAS,kBAAM9E,IAAI+E,MAAMC,KAAKxF,EAAuB,CAAEK,aACvDoF,KAAM,eAERjF,IAAIyD,WAAWC,MACb,6DAMF7D,EAAQ+F,UACVpB,EAAQK,KACN1C,cACE,CACExB,UAAW,SACXmE,QAAS,kBACP9E,IAAI+E,MAAMC,KAAKa,IAAoB,CAAErD,WAAY3C,KACnDoF,KAAM,cAERjF,IAAIyD,WAAWC,MACb,4DAOJ7D,EAAQE,YAAcF,EAAQE,WAAWW,oBAC3C8D,EAAQK,KAAK,QAAIlE,UAAU,wBAE3B6D,EAAQK,KACN1C,cACE,CACExB,UAAW,SACX2E,UAAWtF,IAAI8F,MAAMC,UAAU,uBAC/BjB,QAAS,WACPjF,EACGE,WACAgD,KAAK,CACJrC,iBAAiB,IAElBsC,MACC,WACEhD,IAAIgG,OAAOhB,KACTiB,IACA,CAAEvE,KAAM,WACR1B,IAAIyD,WAAWC,MACb,gFAIN,SAACP,GACC,EAAKf,SAAU,EACf,EAAKgB,aAAaD,OAI1B8B,KAAM,oBAERjF,IAAIyD,WAAWC,MACb,sEAQN7D,EAAQqG,mBACRrG,EAAQqG,qBACRzB,GAEAD,EAAQK,KACN1C,cACE,CACE8C,KAAM,eACNH,QAAS,kBACP9E,IAAI+E,MAAMC,KAAKP,EAAyB,CAAEjC,WAAY3C,MAE1DG,IAAIyD,WAAWC,MACb,8EAMRc,EAAQK,KAAK,QAAIlE,UAAU,wBAGvBd,EAAQsG,WACV3B,EAAQK,KACN1C,cACE,CACExB,UAAW,SACXmE,QAASsB,oBAAmCvG,GAC5CoF,KAAM,QACJpF,EAAQwG,WAAa,cAAgB,qBAGzCxG,EAAQwG,WACJrG,IAAIyD,WAAWC,MACb,0DAEF1D,IAAIyD,WAAWC,MACb,6DAOR7D,EAAQyG,YAENzG,EAAQ0G,YAEV/B,EAAQK,KACN1C,cACE,CACExB,UAAW,SACXmE,QAASsB,uBAAsCvG,GAC/CoF,KAAM,cAERjF,IAAIyD,WAAWC,MACb,4DAMF7D,EAAQ2G,aACVhC,EAAQK,KACN1C,cACE,CACExB,UAAW,SACXmE,QAAS,WAEP,GACE2B,QACEC,IACE1G,IAAIyD,WAAWC,MACb,wDAcN,MARsC,gBAAlC1D,IAAIiE,QAAQ0C,aAAapD,OACvBvD,IAAI4G,SACN5G,IAAIiE,QAAQ4C,OAEZ5D,EAAEa,MAAMC,IAAI/D,IAAI8D,MAAM,UAInBjE,EAAO,SAAUmD,MAAK,WAC3BC,EAAEC,aAIR+B,KAAM,oBAERjF,IAAIyD,WAAWC,MACb,4DAORc,EAAQK,KACN1C,cACE,CACExB,UAAW,SACXmE,QAASsB,oBAAmCvG,GAC5CoF,KAAM,oBAERjF,IAAIyD,WAAWC,MACb,0DAQR,SAAK/C,UAAW,0CACd,SAAKA,UAAW,4CACbmG,cACC,CACE7B,KAAM,aACN8B,MAAO,SACPC,gBAAiB,SACjBC,cAAe,uBACfC,OAAQ,YAEFhC,GAAgBA,EAAYK,WAAc,EAAKjB,aACjD,EAAKA,YAAa,EAClBtE,IAAIC,MACDkH,KACC,QACAtH,EAAQsF,YACJtF,EAAQsF,YAAYiC,KACpBvH,EAAQwF,eAEbrC,MAAK,eAPR,OAQS,eACNA,MAAK,kBAAMC,EAAEC,eAItBsB,M,GA/QoC6C,KCXhD,MAAM,EAA+BhI,OAAOC,KAAKC,OAAO,qB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,kB,aCKnC+H,E,gGACnB/C,KAAA,WACE,IAAMgD,EAAU5H,KAAKC,MAAMwC,QAIvB,KAHAzC,KAAKC,MAAMC,QACTF,KAAKC,MAAMC,QAAQ2H,OACnB7H,KAAKC,MAAM4H,KAGjB,OACE,SAAK7G,UAAW,6BACd,SACEA,UAAS,yCACPhB,KAAKC,MAAMwC,QAAU,0BAA4B,IAEnDjB,MAAO,CACLsG,gBAAiBF,GAAUA,EAAOG,QAAUH,EAAOG,QAAU,QAIjE,SAAK/G,UAAW,oCACb4G,EACCI,IAAOJ,GAEP,UAAM5G,UAAW,oCAIpB4G,GACC,SAAK5G,UAAW,kCACd,UAAMA,UAAW,kCACd4G,EAAOK,eAEV,OAAGjH,UAAW,iCACX4G,EAAOM,KAAON,EAAOM,OAGxB,QAAIlH,UAAW,sCACZmH,IAAUnI,KAAKqB,QAAQD,aAK7BpB,KAAKC,MAAMwC,SACV,aACE,UACEzB,UACE,0DAFJ,KAOA,OACEA,UACE,yDAFJ,KAOA,OACEA,UACE,yDAFJ,KAOA,OACEA,UACE,yDAFJ,Q,EAaVK,MAAA,WACE,OAAO,IAAIC,M,GA/EyBoG,KCLxC,MAAM,EAA+BhI,OAAOC,KAAKC,OAAO,mB,aCGnCwI,E,gGACnBtI,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GAEbC,KAAKqI,eAAiBhI,IAAI8F,MAAMC,UAAU,a,EAG5CxB,KAAA,WAAO,WACL,OACE,SAAK5D,UAAU,iCACb,YACGX,IAAIyD,WAAWC,MAAM,gDAGvB/D,KAAKqI,gBACJrI,KAAKqI,eAAeC,KAAI,SAACC,GACvB,IAAMC,EAAMnI,IAAIC,MAAMmF,QAAQ,OAAQ8C,GAEtC,IAAKC,EAAK,OAAO,KAEjB,IAAMC,EAAO,GAYb,OATAA,EAAKvD,KAAK,EAAKwD,aAAaF,IAG5BnI,IAAIC,MAAMqI,IAAI,QAAQC,SAAQ,SAACC,GACzBA,EAAKC,WAAaD,EAAKE,SAAStB,OAASe,EAAIf,MAC/CgB,EAAKvD,KAAK,EAAKwD,aAAaG,OAIzBJ,O,EAOjBC,aAAA,SAAaF,GACX,OACE,EAAC,IAAD,CACEQ,KAAM3I,IAAI8D,MAAM,eAAgB,CAAED,KAAMsE,EAAItE,SAC5ClD,UAAS,2CAA6CwH,EAAIf,KAAjD,KACPe,EAAIM,WAA6D,GAAhDzI,IAAI8F,MAAMC,UAAU,yBACjC,4BACA,KAGN,UACEpF,UAA0B,KAAfwH,EAAIlD,OAAgB,8BAAgC,GAC/D9D,MAAO,CAAEsG,gBAAgC,KAAfU,EAAIlD,OAAgBkD,EAAIT,QAAU,OAE5D,OAAG/G,UAAWwH,EAAIlD,UAEnBkD,EAAI5E,S,GAvD+B8D,KCH5C,MAAM,EAA+BhI,OAAOC,KAAKC,OAAO,wB,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,6B,aCInCqJ,E,gGACnBrE,KAAA,WACE,OACE,SAAK5D,UAAU,+BACb,YACGX,IAAIyD,WAAWC,MAAM,+CAExB,SAAK/C,UAAU,yBACb,EAAC,IAAD,CAAgBqG,gBAAgB,SAASrG,UAAU,oBAChDhB,KAAKkJ,WAAW9H,c,EAO3B8H,SAAA,WACE,IAAM7H,EAAQ8H,yBAOd,MAJqB,UAAjB9I,IAAI+I,UACN/H,EAAMgI,OAAO,QAGRhI,G,GAxB2BqG,KCGjB4B,G,gGACnB1E,KAAA,WACE,OACE,SAAK5D,UAAW,8BACd,YAAKmH,IAAUnI,KAAKqB,QAAQD,c,EAKlCC,MAAA,WACE,IAAMkI,EAAW,IAAIjI,KAQrB,OANAiI,EAAShI,IAAI,SAAUoG,EAAW6B,UAAUxJ,KAAKC,OAAQ,GAEzDsJ,EAAShI,IAAI,aAAc6G,EAAeoB,UAAUxJ,KAAKC,OAAQ,GAEjEsJ,EAAShI,IAAI,MAAO0H,EAASO,UAAUxJ,KAAKC,OAAQ,GAE7CsJ,G,GAlBkC7B,KCP7C,MAAM,GAA+BhI,OAAOC,KAAKC,OAAO,qB,eCAzC,SAAS6J,GAAQC,GAC9BC,EAAED,GAASD,U,ICCQG,G,gGACnB9J,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GAEbC,KAAK6J,UAAYxJ,IAAIC,MAAMqI,IAAI,wBAC/B3I,KAAK8J,QAAU9J,KAAK6J,UAAUE,QAAO,SAACC,EAAGC,GAOvC,OANAD,EAAEC,EAAKC,QACL,cACE,OAAGlJ,UAAW,iBADhB,IACoCiJ,EAAKrG,QAIpCoG,IACNhK,KAAKC,MAAMkK,OAAS,K,EAGzBvF,KAAA,WAAO,MAC2B5E,KAAKC,MAA7BmK,EADH,EACGA,SAAUC,EADb,EACaA,UACZzG,EAAOwG,EAASxG,QAAU,GAEhC,OACE,cACE,OAAG5C,UAAW,iBADhB,IAGGqJ,EAAYzG,EAAK0G,cAAgB1G,I,GAxBJ8D,KCGjB6C,G,gGACnBzK,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GACbC,KAAK6J,UAAYxJ,IAAIC,MAAMqI,IAAI,wBAC/B3I,KAAK8J,QAAU9J,KAAK6J,UAAUE,QAAO,SAACC,EAAGC,GAGvC,OAFAD,EAAEC,EAAKC,QAAU,EAACN,GAAD,CAAUQ,SAAUH,IAE9BD,IACNhK,KAAKC,MAAMkK,OAAS,K,EAGzBvF,KAAA,WAAO,WACC4F,EAAWxK,KAAKC,MAAMuK,SAEtBnJ,EAAQ/B,OAAOmL,KAAKzK,KAAK8J,SAASxB,KAAI,SAACoC,GAC3C,IACMC,EAASD,KADIF,GAAY,OAG/B,OAAOhI,cACL,CACEmI,SACArF,MAAMqF,GAAS,eACfxF,QAAS,kBAAM,EAAKlF,MAAMkF,QAAQuF,KAEpC,EAAKZ,QAAQY,OAIjB,OAAOvD,cACL,CACEE,gBAAiB,SACjBD,MAAOpH,KAAK8J,QAAQU,IAAaxK,KAAK8J,QAAQ9J,KAAKC,MAAL,SAC9CqH,cAAe,wBAEjBjG,I,GAlCwCqG,KCIzBkD,G,gGACnB9K,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GAEbM,IAAIwK,SAASxK,IAAIyD,WAAWC,MAAM,0CAElC/D,KAAK8K,UAAY,mBAEjB9K,KAAK+K,WAAY,EACjB/K,KAAKgL,cAAgB,GACrBhL,KAAKiL,MAAQ,GACbjL,KAAKkL,QAAU,KACflL,KAAKmL,eAAgB,EAErBnL,KAAK6J,UAAYxJ,IAAIC,MAAMqI,IAAI,wBAE/B3I,KAAKoL,wBAA0B9H,EAAEa,MAAMkH,MAAM,QACzC/H,EAAEa,MAAMkH,MAAM,QACdhL,IAAIyD,WAAWwH,OAGnBjL,IAAIiE,QAAQY,KAAK,QAEjBlF,KAAKuL,oB,EAIPA,iBAAA,WACE,IAAMC,EAAsBnL,IAAIoL,uBAE5BD,EAKFE,WAAW1L,KAAKqF,KAAKsG,KAAK3L,KAAMwL,GAAsB,GAEtDxL,KAAK4L,aAGPtI,EAAEC,U,EAGJqI,WAAA,WACE,IAAIC,EAAI,WACNvI,EAAEa,MAAMkH,MAAM,QAAd,QAAgC/H,EAAEa,MAAMkH,MAAM,QAAY,IAGrC,OAAnBrL,KAAK6J,WAAsB7J,KAAK6J,UAAUiC,QAAU,IACtDD,GAAK,aAAa7L,KAAKoL,yBAGzB/K,IAAIC,MACDkH,KAAK,cAAe,CACnBuE,OAAQ,CACNF,KAEFG,KAAM,eAEP3I,KAAKrD,KAAKqF,KAAKsG,KAAK3L,OAPvB,OAQS,WACLsD,EAAEC,a,EAKR8B,KAAA,SAAK4G,GACH,GAAwB,IAApBA,EAASH,OAIX,OAHA9L,KAAK+K,WAAY,OACjBzH,EAAEC,SAMJvD,KAAKkL,QACHe,EAASC,QAAQC,OAASF,EAASC,QAAQC,MAAMC,KAC7CH,EAASC,QAAQC,MAAMC,KACvB,KAENpM,KAAKgL,cAAgBiB,EAASI,MAAM,EAAG,GACvCrM,KAAKiL,MAAQgB,EAASH,QAAU,EAAIG,EAASI,MAAM,EAAGJ,EAASH,QAAU,GAEzE9L,KAAK+K,WAAY,EAEjBzH,EAAEC,U,EAIJ+I,SAAA,WAAW,WACTtM,KAAKmL,eAAgB,EAErB9K,IAAIC,MACDkH,KAAKxH,KAAKkL,QAAQqB,QAAQlM,IAAI8F,MAAMC,UAAU,UAAW,KACzD/C,MAAK,SAACmJ,GACLA,EAAKlE,KAAI,SAACpI,GAAD,OAAa,EAAK+K,MAAM/F,KAAKhF,MAGtC,EAAKgL,QACHsB,EAAKN,QAAQC,OAASK,EAAKN,QAAQC,MAAMC,KACrCI,EAAKN,QAAQC,MAAMC,KACnB,QATV,OAWS,eACN/I,MAAK,WACJ,EAAK8H,eAAgB,EACrB7H,EAAEC,a,EAIRtC,MAAA,WACE,IAAKqC,EAAEa,MAAMkH,MAAM,QACjB,OACE,YACGhL,IAAIyD,WAAWC,MACd,kDAMR,IAAMyE,EAAMnI,IAAIC,MACbqI,IAAI,QACJoD,QAAO,SAACvD,GAAD,OAASA,EAAItE,SAAWZ,EAAEa,MAAMkH,MAAM,WAEhD,OACE,YACG7C,GAAOA,EAAI,IAAMA,EAAI,GAAG5E,OACzB,eACG,IADH,IAEI,IACF,EAAC,IAAD,CAAMoF,KAAM3I,IAAI8D,MAAM,SACnB9D,IAAIyD,WAAWC,MACd,2D,EAQZa,KAAA,WAAO,WACC6H,EAAepM,IAAI8F,MAAMC,UAAU,oBAApB,OAEf/F,IAAI8F,MAAMC,UAAU,WACpB,WACA/F,IAAI8F,MAAMC,UAAU,oBAJL,IAMjB,KAEJ,OACE,SAAKpF,UAAW,sBACd,SAAKA,UAAW,aACd,SAAKA,UAAW,gBACd,SAAKA,UAAW,uBACbX,IAAI8F,MAAMC,UAAU,sBACnB,EAAC,IAAD,CACEpF,UAAW,SACXmE,QAAS,kBAAM,EAAKuH,cACpBpH,KAAM,qBAELjF,IAAIyD,WAAWC,MACd,2DAKc,OAAnB/D,KAAK6J,WAAsB7J,KAAK6J,UAAUiC,QAAU,GACnD,EAACvB,GAAD,CACEC,SAAUxK,KAAKoL,wBACfjG,QAAS,SAACiF,GACR,EAAKgB,wBAA0BhB,EAE/B9G,EAAEa,MAAMC,IAAII,SAASmI,SAASC,SAAU,CACtC3C,KAAMG,IAGR,EAAKwB,iBAMZ5L,KAAKiB,QAEN,SAAKO,MAAO,CAAEqL,MAAO,UAErB,SAAK7L,UAAW,qBAEbhB,KAAK+K,WACJ,CAAC,EAAG,EAAG,GAAGzC,KAAI,kBACZ,SACEtH,UACE,uDAGF,SAAKA,UAAW,kCACd,iBAEA,SAAKA,UAAW,QACd,cACE,OAAGA,UAAW,wBAOxBhB,KAAK+K,WACL/K,KAAKgL,cAAcc,QAAU,GAC7B9L,KAAKgL,cAAc1C,KAAI,SAACpI,GACtB,IAAM4M,EACJ5M,EAAQE,YAAcF,EAAQE,WAAWQ,gBAAzC,OACWV,EAAQE,WAAWQ,gBAD9B,IAEI6L,EACAM,EAAU7M,EAAQuI,OACpBvI,EAAQuI,OAAOsD,QAAO,SAACvD,GAAD,OAASA,EAAIM,aACnC,GAEJ,OACE,EAAC,IAAD,CACEE,KAAM3I,IAAI8D,MAAM,cAAe,CAC7BsD,GAAI,GAAGvH,EAAQgE,SAEjBlD,UACE,kDAEFQ,MAAO,CAAEwL,gBAAiBF,IAE1B,SAAK9L,UAAW,8BACb+L,EAAQ,IAAM,cAAOA,EAAQ,GAAGnJ,QAChC1D,EAAQ+M,YACP,cACE,OAAGjM,UAAW,uBAGfd,EAAQE,YAC+B,GAAxCF,EAAQE,WAAWW,mBACnBb,EAAQ0G,aACR,cACE,OAAG5F,UAAW,sBAGjBd,EAAQE,YACiC,GAAxCF,EAAQE,WAAWW,mBACjB,UACEE,MAAOZ,IAAIyD,WAAWC,MACpB,kEAEFmJ,OAAQzD,GAAQkC,KAAK,GACrBwB,iBAAgB,UAEhB,OAAGnM,UAAW,iBAAmB,IAChCX,IAAIyD,WAAWC,MACd,0EAMV,SAAK/C,UAAW,kCACd,YAAKd,EAAQe,SAEb,SAAKD,UAAW,QACd,cACE,OAAGA,UAAW,iBAAmB,IAChCoM,KAAUlN,EAAQmN,cAErB,cACE,OAAGrM,UAAW,gBAAkB,IAC/Bd,EAAQ2H,OACL3H,EAAQ2H,OAAOI,cACf,aAEN,cACE,OAAGjH,UAAW,mBAAqB,IAClCd,EAAQoN,eAAiB,WAU5C,SAAKtM,UAAW,gBACd,SAAKA,UAAW,YACbhB,KAAK+K,WACJ,EAAC,GAAO,GAAO,GAAM,GAAOzC,KAAI,SAAClG,GAC/B,OACE,SACEpB,UAAS,iCACG,IAAVoB,EAAiB,QAAU,WADpB,wBAIT,SACEpB,UACE,iDAGJ,SAAKA,UAAW,yBACd,iBACA,gBAEA,SAAKA,UAAW,QACd,cACE,OAAGA,UAAW,wBAQ1BhB,KAAK+K,WACL/K,KAAKiL,MAAMa,QAAU,GACrB9L,KAAKiL,MAAM3C,KAAI,SAACpI,GACd,IAAM4M,EACJ5M,EAAQE,YAAcF,EAAQE,WAAWQ,gBAAzC,OACWV,EAAQE,WAAWQ,gBAD9B,IAEI6L,EACA3L,EACJZ,EAAQE,YAAcF,EAAQE,WAAWU,UACrCJ,EACJR,EAAQE,YAAcF,EAAQE,WAAWM,UACrCR,EAAQE,WAAWM,UACnB,GAEN,OACE,EAAC,IAAD,CACEsI,KAAM3I,IAAI8D,MAAM,cAAe,CAC7BsD,GAAI,GAAGvH,EAAQgE,SAEjBlD,UAAS,gCACPF,EAAU,QAAU,YAGtB,SACEE,UACE,+CAEFQ,MAAO,CAAEwL,gBAAiBF,KAE5B,SAAK9L,UAAW,yBACd,YACGd,EAAQe,SACNf,EAAQE,YAC+B,GAAxCF,EAAQE,WAAWW,mBACnBb,EAAQ0G,aACR,OAAG5F,UAAW,qBAEfd,EAAQE,YACiC,GAAxCF,EAAQE,WAAWW,mBACjB,OACEC,UAAW,eACXC,MAAOZ,IAAIyD,WAAWC,MACpB,kEAEFmJ,OAAQzD,GAAQkC,KAAK,MAI7B,WAAIjL,GAEJ,SAAKM,UAAW,QACd,cACE,OAAGA,UAAW,iBAAmB,IAChCoM,KAAUlN,EAAQmN,cAErB,cACE,OAAGrM,UAAW,gBAAkB,IAC/Bd,EAAQ2H,OACL3H,EAAQ2H,OAAOI,cACf,aAEN,cACE,OAAGjH,UAAW,mBAAqB,IAClCd,EAAQoN,eAAiB,UAQtCtN,KAAK+K,WACL/K,KAAKgL,cAAcc,OAAS,GACX,OAAjB9L,KAAKkL,SACH,OAAGlK,UAAW,0BACXX,IAAIyD,WAAWC,MACd,oDAKN/D,KAAK+K,WACyB,IAA9B/K,KAAKgL,cAAcc,QACG,IAAtB9L,KAAKiL,MAAMa,QACT,OAAG9K,UAAW,0BACXX,IAAIyD,WAAWC,MACd,qDAKN/D,KAAK+K,WAA8B,OAAjB/K,KAAKkL,SACvB,SAAKlK,UAAW,gCACd,EAAC,IAAD,CACEA,UAAW,SACXmE,QAAS,kBAAM,EAAKmH,YACpBhH,KAAM,sBACN7C,QAASzC,KAAKmL,eAEb9K,IAAIyD,WAAWC,MACd,kDAOV,SAAK/C,UAAW,WACd,EAACoH,EAAD,MACA,EAACa,EAAD,W,EAQZyD,WAAA,WACE,IACIjE,EAAO,GAEL8E,EAAWlN,IAAI8F,MAAMC,UAAU,YAGrC/F,IAAIC,MAAMqI,IAAI,QAAQC,SAAQ,SAACC,IAI1BA,EAAKC,WACNyE,EAASC,QAAQ3E,EAAKpB,OAAS,GAE/BgB,EAAKvD,KAAK2D,MAKd,IAAM4E,EAAkBpN,IAAIC,MAAMoN,MAChC,OACA,OACApK,EAAEa,MAAMkH,MAAM,SAGZoC,GACFhF,EAAKvD,KAAKuI,GAIZnK,EAAEa,MAAMC,IACN/D,IAAI8D,MAAM,eAAgB,CACxBsE,KAAMA,EAAKH,KAAI,SAACE,GAAD,OAASA,EAAIf,QAAMkG,OAClC1D,KACEjK,KAAK6J,UAAUiC,OAAS,EAAI9L,KAAKoL,6BAA0BwC,M,GAld3BC,KCArBC,G,gGACnBhO,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GAEbM,IAAIwK,SAASxK,IAAIyD,WAAWC,MAAM,0CAGlC1D,IAAIiE,QAAQY,KAAK,eAEjBlF,KAAK8K,UAAY,eAEjB9K,KAAK+N,KAAOzK,EAAEa,MAAMkH,MAAM,SAAW,EAErCrL,KAAKyC,SAAU,EACfzC,KAAKgO,OAAQ,EACbhO,KAAKE,QAAU,KAEfF,KAAKiO,gB,EAIPA,aAAA,WACE,IAAMzC,EAAsBnL,IAAIoL,uBAE5BD,EAKFE,WAAW1L,KAAKqF,KAAKsG,KAAK3L,KAAMwL,GAAsB,GAEtDnL,IAAIC,MACDkH,KAAK,cAAelE,EAAEa,MAAMkH,MAAM,MAAM6C,MAAM,KAAK,IACnD7K,KAAKrD,KAAKqF,KAAKsG,KAAK3L,OAFvB,OAGS,WACLsD,EAAEC,YAIRD,EAAEC,U,EAIJ8B,KAAA,SAAKnF,GAEHF,KAAKE,QAAUA,EAGfG,IAAIwK,SACC3K,EAAQe,QADb,MAC0BZ,IAAIyD,WAAWC,MACrC,0CAIJ/D,KAAKyC,SAAU,EAEf,IAAI0L,EAAgB,GACpB,GAAIjO,EAAQgM,SAAWhM,EAAQgM,QAAQkC,SAAU,CAC/C,IAAMC,EAAYnO,EAAQuH,KAE1B0G,EAAgBjO,EAAQgM,QAAQkC,SAC7BrC,QACC,SAACuC,GAAD,MACkB,UAAhBA,EAAOvM,MACPuM,EAAO3L,eACP2L,EAAO3L,cAAcE,YACrByL,EAAO3L,cAAcE,WAAW2J,KAAK/E,KAAO4G,KAE/C/F,KAAI,SAACgG,GAAD,OAAYjO,IAAIC,MAAMmF,QAAQ,QAAS6I,EAAO7G,OAClDuE,MAAK,SAACuC,EAAGC,GAAJ,OAAUD,EAAE9G,KAAO+G,EAAE/G,QAC1B4E,MAAM,EAAG,IAGdrM,KAAKyO,OAAS,IAAIC,IAAJ,CAAoBxO,EAASiO,GAGvCnO,KAAK+N,MACP/N,KAAKyO,OAAOE,WAAW3O,KAAK+N,MAAM,GAGpCzK,EAAEC,U,EAGJqB,KAAA,WACE,IAAM6H,EAAepM,IAAI8F,MAAMC,UAAU,oBAApB,OAEf/F,IAAI8F,MAAMC,UAAU,WACpB,WACA/F,IAAI8F,MAAMC,UAAU,oBAJL,IAMjB,KACE0G,EACJ9M,KAAKE,SACLF,KAAKE,QAAQE,YACbJ,KAAKE,QAAQE,WAAWQ,gBAFxB,OAGWZ,KAAKE,QAAQE,WAAWQ,gBAHnC,IAII6L,EACFlH,EAAc,KAQlB,OANKvF,KAAKyC,SAAWzC,KAAKE,UACxBqF,EAAcvF,KAAKE,QAAQsF,YACvBxF,KAAKE,QAAQsF,YACbnF,IAAIC,MAAMmF,QAAQ,QAASzF,KAAKE,QAAQwF,gBAI5C,SAAK1E,UAAW,kBACd,SAAKA,UAAW,aACd,SAAKA,UAAW,0BACd,EAAC,IAAD,CACEgI,KAAM3I,IAAI8D,MAAM,QAChBnD,UAAW,SACXmE,QAAS,SAACpC,GACJ1C,IAAI4G,SAAS2H,QAAQhE,MACvB7H,EAAEC,iBACFsB,QAAQ4C,UAIZ,OAAG2H,MAAM,uCACT,UAAMA,MAAM,gBACTxO,IAAIyD,WAAWC,MACd,0DAKR,SAAK/C,UAAW,sBACd,SAAKA,UAAW,gCACd,SAAKA,UAAW,8BACd,SACEA,UAAS,sDACPhB,KAAKyC,QAAU,gCAAkC,IAEnDjB,MAAO,CACLwL,gBAAiBF,EACjBgC,QACE9O,KAAKE,SAAWF,KAAKE,QAAQ0G,WAAa,GAAM,QAIrD5G,KAAKE,SACJG,IAAI0O,QAAQlH,OACXxH,IAAI0O,QAAQlH,KAAKjC,WAChB5F,KAAKE,QAAQ+E,aACZjF,KAAKE,QAAQ+K,SACZjL,KAAKE,QAAQ+K,QAAQ,GAAGrF,YAC1B,EAACnB,EAAD,CAAoBvE,QAASF,KAAKE,UAItC,SAAKc,UAAW,kCACZhB,KAAKyC,SACLzC,KAAKE,SACLF,KAAKE,QAAQuI,QACbzI,KAAKE,QACFuI,OACAH,KAAI,SAACE,GAAD,OACH,EAAC,IAAD,CACEQ,KAAM3I,IAAI8D,MAAM,eAAgB,CAAED,KAAMsE,EAAItE,UAE3CsE,EAAI5E,WAIZ5D,KAAKyC,SACJ,CAAC,EAAG,GAAG6F,KAAI,kBACT,UAAMtH,UAAW,oCAAjB,gBAMN,SAAKA,UAAW,2BAEd,QACEA,UACEhB,KAAKyC,QAAU,gCAAkC,MAGlDzC,KAAKE,QAAUF,KAAKE,QAAQe,QAAU,cACtCjB,KAAKE,SACJF,KAAKE,QAAQ0G,YADd,IAEKvG,IAAIyD,WAAWC,MACjB,2CAHH,KAOF/D,KAAKyC,SACJ,CAAC,EAAG,EAAG,GAAG6F,KAAI,kBACZ,aACE,OAAGtH,UAAW,qCAAd,KAGA,OAAGA,UAAW,qCAAd,KAGA,OAAGA,UAAW,qCAAd,KAGA,qBAIJhB,KAAKyC,SACLzC,KAAKE,QAAQE,YACgC,GAA7CJ,KAAKE,QAAQE,WAAWW,mBACtB,SAAKC,UAAW,QACd,gBACE6N,MAAM,UACNrN,MAAO,CAAEwN,SAAU,SAEnB,aACE,UACEhO,UAAW,eACXQ,MAAO,CAAEyN,YAAa,SACrB,IACF5O,IAAIyD,WAAWC,MACd,sEAOV/D,KAAKyC,SAAW8C,GAChB,EAAC,IAAD,CAAaS,KAAMT,MAKzB,SAAKvE,UAAW,+BACd,YACGX,IAAIyD,WAAWC,MACd,6DACC,IAHL,IAII/D,KAAKE,QAAUF,KAAKE,QAAQoN,eAAiB,EAAI,EAJrD,MAOEtN,KAAKyC,SACLzC,KAAKE,QAAQwG,UACb1G,KAAKE,QAAQwG,YACX,SAAK1F,UAAW,aACd,gBAAY6N,MAAM,WAChB,aACE,UACE7N,UAAW,cACXQ,MAAO,CAAEyN,YAAa,SACrB,IACF5O,IAAIyD,WAAWC,MACd,+DAOV/D,KAAKyC,SACLzC,KAAKE,SACLgP,cAAqB,CACnBrM,WAAY7C,KAAKE,QACjBuO,OAAQzO,KAAKyO,OACbU,iBAAkBnP,KAAKoP,gBAAgBzD,KAAK3L,UAKpD,EAACsJ,GAAD,CAAiBpJ,QAASF,KAAKE,QAASuC,QAASzC,KAAKyC,c,EAOhE2M,gBAAA,SAAgBC,EAAaC,GAC3B,IAAMpP,EAAUF,KAAKE,QAEjBG,IAAI0O,QAAQlH,MAAQyH,GAAapP,EAAQqP,sBAAwB,KACnErP,EAAQkD,KAAK,CAAEmM,mBAAoBD,IACnChM,EAAEC,W,GAvR8BsK,KCTtC,MAAM,GAA+BnO,OAAOC,KAAKC,OAAc,M,eCA/D,MAAM,GAA+BF,OAAOC,KAAKC,OAAO,qB,eCAxD,MAAM,GAA+BF,OAAOC,KAAKC,OAAO,6B,eCAxD,MAAM,GAA+BF,OAAOC,KAAKC,OAAe,OCIjD,SAAS,MAEtB4P,aAAOrG,cAAqB,YAAY,WACtC,IAAMX,EAAMxI,KAAKyP,aACXC,EAC4C,SAAhDrP,IAAI8F,MAAMC,UAAU,yBAC4B,cAAhD/F,IAAI8F,MAAMC,UAAU,wBAGtB,GAAIoC,GAAOkH,EAAoB,CAC7B,IAAMnC,EAAWlN,IAAI8F,MAAMC,UAAU,aAInCmH,EAASC,QAAQhF,EAAIf,OAAS,GAC7Be,EAAIO,UAAYwE,EAASC,QAAQhF,EAAIO,SAAStB,OAAS,IAExDnE,EAAEa,MAAMC,IAAI/D,IAAI8D,MAAM,cAM5BwL,eAASC,eAA0B,QAAQ,SAAUC,EAAUhN,GAK7D,IAHkD,SAAhDxC,IAAI8F,MAAMC,UAAU,yBAC4B,qBAAhD/F,IAAI8F,MAAMC,UAAU,0BAIpBvD,GACAA,GACAA,EAAW4F,OAAOqD,OAAS,EAC3B,CACA,IAAMyB,EAAWlN,IAAI8F,MAAMC,UAAU,YAUrC,GARkBvD,EAAW4F,OAAOsD,QAAO,SAACvD,GAC1C,OACE+E,EAASC,QAAQhF,EAAIf,OAAS,GAC7Be,EAAIO,UAAYwE,EAASC,QAAQhF,EAAIO,SAAStB,OAAS,KAK9CqE,OAAS,EAAG,CAExB,IAAM7H,EAAM5D,IAAI8D,MAAM,cAAe,CACnCsD,GAAI5E,EAAWqB,SAKjB,OADAZ,EAAEa,MAAMC,IAAIH,EAAK,MAAM,GAChB,MAIX,OAAO4L,EAAShN,MC5DpB,MAAM,GAA+BnD,OAAOC,KAAKC,OAAO,e,ICGnCkQ,G,sFAAiBC,GAAMC,KAAO,CACjDnN,WAAYmN,YAAa,cACzBpP,cAAeoP,eAAgB,iBAC/BtP,QAASsP,eAAgB,WACzBnP,WAAYmP,eAAgB,cAC5BlP,QAASkP,eAAgB,WACzBjP,gBAAiBiP,eAAgB,sBCTnC,MAAM,GAA+BtQ,OAAOC,KAAKC,OAAO,4B,eCIzC,SAASqQ,MACtBT,aAAOU,eAAoB,QAAQ,SAAUC,GAAQ,WACnD,GAA2C,GAAvC9P,IAAI8F,MAAMC,UAAU,gBAA0B,OAAO+J,EAGzD,IAAMC,EAAoB/P,IAAI8F,MAAMC,UAAU,aAAe,GAGzDiK,EAAYF,EAAOG,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAAGA,SAS3D,OANAH,EAAOG,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAAGA,SAAWD,EAAU/H,KAC9D,SAACiI,EAAMC,GACL,OAAOJ,EAAkB5C,QAAQ,EAAK/E,KAAK+H,GAAG/I,OAAS,EAAI,KAAO8I,KAI/DJ,MAGTX,aAAOrG,cAAqB,YAAY,SAAU9H,GAChD,OAA2C,GAAvChB,IAAI8F,MAAMC,UAAU,kBAEP/F,IAAI8F,MAAMC,UAAU,aAAe,IAE3CwC,SAAQ,SAACnB,GAChBpG,EAAMgI,OAAN,MAAmB5B,MALoCpG,KCzB9C,SAAS,KAEtB,IAAMoP,EAA4BpQ,IAAI8D,MAAMtB,WAc5CxC,IAAI8D,MAAMtB,WAAa,SAACA,EAAYkL,GAClC,IAGI2C,GAAiB,EACrB,IAHkD,SAAhDrQ,IAAI8F,MAAMC,UAAU,yBAC4B,qBAAhD/F,IAAI8F,MAAMC,UAAU,0BAEWvD,EAAW4F,OAAOqD,OAAS,EAAG,CAC7D,IAAMyB,EAAWlN,IAAI8F,MAAMC,UAAU,YAEnBvD,EAAW4F,OAAOsD,QAAO,SAACvD,GAC1C,OACE+E,EAASC,QAAQhF,EAAIf,OAAS,GAC7Be,EAAIO,UAAYwE,EAASC,QAAQhF,EAAIO,SAAStB,OAAS,KAI9CqE,OAAS,IACrB4E,GAAiB,GAGrB,OAAIA,EACK7N,EAAW0M,qBAAuB,EACrClP,IAAI8D,MAAM,mBAAoB,CAC5BsD,GAAI5E,EAAWqB,OACf6J,KAAMlL,EAAW0M,uBAEnBlP,IAAI8D,MAAM,cAAe,CACvBsD,GAAI5E,EAAWqB,SAGduM,EAA0B5N,EAAYkL,IC7CnD,MAAM,GAA+BrO,OAAOC,KAAKC,OAAO,2B,eCAxD,MAAM,GAA+BF,OAAOC,KAAKC,OAAO,yB,eCEnC+Q,G,gGACnB/L,KAAA,WACE,OAAO,e,EAGTgM,SAAA,SAAS7Q,GACP,YAAM6Q,SAAN,UAAe7Q,GAEf8Q,IAAIC,cAAcC,QAAQhR,EAAME,MAAMiB,SAAW,GAAInB,EAAMiR,M,GARlBtJ,KCGxBuJ,G,gGACnBnR,OAAA,SAAOC,GACL,YAAMD,OAAN,UAAaC,GAEbC,KAAKkR,gBAAiB,G,EAIxBtM,KAAA,WAAO,WACCuM,EACJnR,KAAK6F,SAAS1E,OAAOD,WAAgD,KAAnClB,KAAK6F,SAAS1E,OAAOD,UACnDuB,EAAUzC,KAAKyC,SAAWzC,KAAKC,MAAM0F,SAE3C,OACE,SACE3E,UAAS,yBACPyB,EAAU,+BAAiC,KAG7C,SAAKzB,UAAW,6BACd,EAAC,IAAD,CACEA,WAAYhB,KAAKkR,gBAAkB,+BACnC/L,QAAS,kBAAO,EAAK+L,gBAAiB,IAErC7Q,IAAIyD,WAAWC,MACd,oDAGJ,EAAC,IAAD,CACE/C,UAAWhB,KAAKkR,gBAAkB,+BAClC/L,QAAS,kBAAO,EAAK+L,gBAAiB,IAErC7Q,IAAIyD,WAAWC,MACd,oDAKN,SACE/C,UAAS,uCACPhB,KAAKkR,eAAiB,kCAAoC,KAG3DlR,KAAKkR,gBACJ,SAAKlQ,UAAW,iCACZmQ,GACA9Q,IAAIyD,WAAWC,MACb,gEAGJ,EAAC4M,GAAD,CAAiBzP,QAASlB,KAAK6F,SAAS1E,OAAOD,aAIlDkQ,eAAqB,CACpBC,YACErR,KAAKC,MAAMoR,aACXhR,IAAIyD,WAAWC,MAAM,0CACvBjC,YAAa9B,KAAKC,MAAM6B,YACxB6D,SAAUlD,EACVoD,SAAU7F,KAAK6F,SACfkL,QAAS/Q,KAAKsR,eAAiBtR,KAAKsR,cAAc3F,KAAK3L,MACvDqC,SAAUrC,KAAK6F,SAAS1E,OAAOD,QAC/B4B,SAAU9C,KAAK8C,SAAS6I,KAAK3L,MAC7BuR,MAAOvR,KAAK6F,SAAS1E,OAAOD,e,EAQtC4B,SAAA,WACM9C,KAAKC,MAAM6C,UACb9C,KAAKC,MAAM6C,Y,GA1EqB0O,MCKjBC,G,gGACnB3R,OAAA,SAAOC,GAAO,WAMZ,GALA,YAAMD,OAAN,UAAaC,GAEbM,IAAIwK,SAASxK,IAAIyD,WAAWC,MAAM,0CAG7B1D,IAAI8F,MAAMC,UAAU,qBAAzB,CAwBA,GAlBA/F,IAAIiE,QAAQY,KAAK,gBAGjBlF,KAAK6J,UAAYxJ,IAAIC,MAAMqI,IAAI,wBAG/B3I,KAAK8K,UAAY,eAGjB9K,KAAK0R,gBAAkBpO,EAAEa,MAAMkH,MAAM,QACjC/H,EAAEa,MAAMkH,MAAM,QACdhL,IAAIyD,WAAWwH,OACnBtL,KAAKE,QAAUG,IAAIC,MAAMC,aAAa,eACtCP,KAAKI,SAAW,KAEhBJ,KAAKyI,KAAO,GAGRnF,EAAEa,MAAMkH,QAAQ5C,KAAM,CACxB,IAAMkJ,EAAUC,MAAMC,QAAQvO,EAAEa,MAAMkH,QAAQ5C,MAC1CnF,EAAEa,MAAMkH,QAAQ5C,KAChBnF,EAAEa,MAAMkH,QAAQ5C,KAAKyF,MAAM,KAE3B5K,EAAEa,MAAMkH,QAAQ5C,KAAKqD,OAAS,GAChC6F,EAAQ/I,SAAQ,SAACL,GACf,IAAMuJ,EAAWzR,IAAIC,MAAMmF,QAAQ,OAAQ8C,GAEvCuJ,GACF,EAAKrJ,KAAKvD,KAAK4M,MAMvB9R,KAAK+R,UAAW,OAvCdzO,EAAEa,MAAMC,IAAI/D,IAAI8D,MAAM,U,EA0C1B6N,cAAA,SAAcjP,GAAU,oBAAVA,MAAI,MACZA,GACFA,EAAEC,iBAGAhD,KAAK+R,UAET1R,IAAI+E,MAAMC,KAAKa,IAAoB,CACjC+L,aAAcjS,KAAKyI,KACnB3F,SAAU,SAAC2F,GACT,EAAKA,KAAOA,M,EAKlByJ,qBAAA,SAAqBnP,GAAU,oBAAVA,MAAI,MACnBA,GACFA,EAAEC,iBAGAhD,KAAK+R,UAET1R,IAAI+E,MAAMC,KAAK1B,EAAoB,CACjCzD,QAASF,KAAKE,QACd8D,SAAU,SAAC/C,GACT,EAAKf,QAAQ+C,SAAS,CACpBC,WAAY,CACVjC,e,EAOVkR,iBAAA,SAAiBpP,GAAG,WAClBA,EAAEC,iBAEEhD,KAAK+R,UAET1R,IAAI+E,MAAMC,KAAKxF,EAAuB,CACpCM,KAAMH,KAAKI,SACX0C,SAAU,SAAC3C,GAAD,OAAW,EAAKC,SAAWD,M,EAIzCyE,KAAA,WAAO,WACCkI,EACJ9M,KAAKI,UAAYJ,KAAKI,SAASQ,gBAA/B,OACWZ,KAAKI,SAASQ,gBADzB,IAEI,KAEN,OACE,SAAKI,UAAW,kBACd,SAAKA,UAAW,aACd,SAAKA,UAAW,0BACd,EAAC,IAAD,CACEgI,KAAM3I,IAAI8D,MAAM,QAChBnD,UAAW,SACXyB,QAASzC,KAAK+R,SACdzM,KAAM,qBAEN,OAAGuJ,MAAM,uCACT,UAAMA,MAAM,gBACTxO,IAAIyD,WAAWC,MACd,0DAKR,SAAK/C,UAAW,sBACd,SAAKA,UAAW,gCACd,SAAKA,UAAW,8BACd,SACEA,UAAS,oDACTQ,MAAO,CACLwL,gBAAiBF,EACjBsF,OAAQ,WAEVjN,QAAS,SAACpC,GAAD,OAAO,EAAKoP,iBAAiBpP,MAGxC,SAAK/B,UAAW,0CACd,SACEA,UAC4B,IAA1BhB,KAAK6J,UAAUiC,OACX,2CACA,0CAGc,OAAnB9L,KAAK6J,WAAsB7J,KAAK6J,UAAUiC,QAAU,GACnD,EAACvB,GAAD,CACEC,SAAUxK,KAAK0R,gBACfvM,QAAS,SAACiF,GAAD,OACN,EAAKsH,gBAAkBtH,KAK9B,EAAC,IAAD,CACEpJ,UAAW,SACXmE,QAAS,SAACpC,GAAD,OAAO,EAAKoP,iBAAiBpP,IACtCuC,KAAM,oBACN7C,QAASzC,KAAK+R,UAJhB,0BAYJ,SAAK/Q,UAAW,iCACbhB,KAAKyI,KAAKH,KAAI,SAACE,GAAD,OACb,OAAGQ,KAAM,IAAK7D,QAAS,SAACpC,GAAD,OAAO,EAAKiP,cAAcjP,KAC9CyF,EAAI5E,WAIT,OAAGoF,KAAM,IAAK7D,QAAS,SAACpC,GAAD,OAAO,EAAKiP,cAAcjP,KACzB,IAArB/C,KAAKyI,KAAKqD,OACPzL,IAAIyD,WAAWC,MACb,6DAEF1D,IAAIyD,WAAWC,MACb,6DACC,IACP,OAAG/C,UAAW,kBAIlB,SAAKA,UAAW,2BAEd,QACEmE,QAAS,kBAAM,EAAK+M,wBACpB1Q,MAAO,CAAE4Q,OAAQ,YAEhBpS,KAAKE,SACNF,KAAKE,QAAQe,SACY,KAAzBjB,KAAKE,QAAQe,QACTjB,KAAKE,QAAQe,QACbZ,IAAIyD,WAAWC,MACb,sDAGN,OAAGiF,KAAM,IAAK7D,QAAS,SAACpC,GAAD,OAAOA,EAAEC,mBAC9B,OAAGhC,UAAW,kBAIlB,SAAKA,UAAU,aACb,EAACiQ,GAAD,CACEpL,SAAUxF,IAAIwF,SACdwM,gBAAiB,GACjBhB,YAAahR,IAAIyD,WAAWC,MAC1B,0DAEFjC,YAAazB,IAAIyD,WAAWC,MAC1B,gEAEFjB,SAAU,kBAAM,EAAKvD,UACrBoG,SAAU3F,KAAK+R,cAMvB,SAAK/Q,UAAW,+BACd,YACGX,IAAIyD,WAAWC,MACd,6DACC,IAHL,OAQA,SAAK/C,UAAW,aACd,gBAAY6N,MAAM,WAChB,aACE,UACE7N,UAAW,aACXQ,MAAO,CAAEyN,YAAa,SACrB,IACF5O,IAAIyD,WAAWC,MACd,kEAOZ,SAAK/C,UAAW,8BACd,EAAC2G,EAAD,CAAYE,KAAMxH,IAAI0O,QAAQlH,Y,EAQ1CtI,OAAA,WAAS,WACDgO,EAAWlN,IAAI8F,MAAMC,UAAU,aAAe,GAGpD,GAAyB,IAArBpG,KAAKyI,KAAKqD,OAMd,GAAK9L,KAAKE,QAAQe,SAAoC,KAAzBjB,KAAKE,QAAQe,QAW1C,GAA4B,IALPjB,KAAKyI,KAAKsD,QAAO,SAACvD,GACrC,OAAO+E,EAASC,QAAQhF,EAAIf,OAAS,KAItBqE,QASjB,GACqB,OAAlB9L,KAAKI,UACHJ,KAAKI,SAASQ,iBACdZ,KAAKI,SAASM,WAChBoG,QACCzG,IAAIyD,WAAWC,MACb,qEANN,CAaA,IAAIpB,EAAgB,CAClB8F,KAAMzI,KAAKyI,MAITzI,KAAK6J,UAAUiC,OAAS,IAC1BnJ,EAAcyH,SAAW/J,IAAIC,MAAMoN,MACjC,uBACA,OACA1N,KAAK0R,kBAIT,IAAMlF,EAAO,CACXvL,MAAOjB,KAAKE,QAAQe,QACpBC,QAASb,IAAIwF,SAAS1E,OAAOD,UAC7ByB,gBACAvC,SACoB,OAAlBJ,KAAKI,SACD,CACEQ,cAAeZ,KAAKI,SAASQ,gBAC7BF,QAASV,KAAKI,SAASM,UACvBI,QAASd,KAAKI,SAASU,WAEzB,MAGRd,KAAK+R,UAAW,EAEhB/R,KAAKE,QACFkD,KAAKoJ,GACLnJ,MAAK,SAACnD,GACLwL,YAAW,WAETpI,EAAEa,MAAMC,IAAI/D,IAAI8D,MAAM,cAAe,CAAEsD,GAAI,GAAGvH,EAAQgE,YACrD,QANP,OAQS,WACL,EAAK6N,UAAW,EAChBzO,EAAEC,kBA5DJ+O,MACEjS,IAAIyD,WAAWC,MACb,yEAbJ/D,KAAKkS,4BANLlS,KAAKgS,iB,GA7P+BnE,KCV3B,SAAS0E,KAetB,OAdAA,GAAWjT,OAAOkT,QAAU,SAAUC,GACpC,IAAK,IAAIjC,EAAI,EAAGA,EAAIkC,UAAU5G,OAAQ0E,IAAK,CACzC,IAAImC,EAASD,UAAUlC,GAEvB,IAAK,IAAI9F,KAAOiI,EACVrT,OAAOD,UAAUuT,eAAeC,KAAKF,EAAQjI,KAC/C+H,EAAO/H,GAAOiI,EAAOjI,IAK3B,OAAO+H,IAGOK,MAAM9S,KAAM0S,WCf9B,MAAM,GAA+BhT,OAAOC,KCAtC,GAA+BD,OAAOC,KAAKC,OAAO,yB,eCIzC,SAASmT,MACtBvD,aAAOrG,cAAqB,YAAY,SAAU9H,GAchD,OAZEhB,IAAI8F,MAAMC,UAAU,sBACyB,MAA7C/F,IAAI8F,MAAMC,UAAU,sBAEpB/E,EAAME,IACJ,OACA,EAAC,KAAD,CAAY+D,KAAK,iBAAiB0D,KAAM3I,IAAI8D,MAAM,SAC/C9D,IAAIyD,WAAWC,MAAM,0CAExB,IAIG1C,KCNXhB,IAAI2S,aAAazR,IAAI,8BAA8B,SAAClB,GAClDA,EAAI4S,OAAOC,KAAO,CAAEC,KAAM,QAAS3J,UAAWoB,IAE9CvK,EAAI4S,OAAOG,aAAe,CACxBD,KAAM,uBACN3J,UAAWoB,IAGbvK,EAAI4S,OAAOI,aAAe,CAAEF,KAAM,gBAAiB3J,UAAWiI,IAE9DpR,EAAI4S,OAAOK,YAAc,CAAEH,KAAM,YAAa3J,UAAWsE,IAEzDzN,EAAI4S,OAAO,oBAAsB,CAC/BE,KAAM,kBACN3J,UAAWsE,IAGbzN,EAAIC,MAAMiT,OAAOnT,SAAW0P,GAE5B0D,wBAAgCxD,YAAa,YAG7CyD,KAIAxD,KAGAyD,KAGAX,QCxCA,GAAcnT,UAAQ,CACpB,iDAAkD0J,GAClD,4CAA6C3B,MCN7CgM,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,GAAGF,EAAyBE,GAC3B,OAAOF,EAAyBE,GAAUC,QAG3C,IAAIC,EAASJ,EAAyBE,GAAY,CAGjDC,QAAS,IAOV,OAHAE,EAAoBH,GAAUE,EAAQA,EAAOD,QAASF,GAG/CG,EAAOD,QCjBf,OCFAF,EAAoBK,EAAKF,IACxB,IAAIG,EAASH,GAAUA,EAAOI,WAC7B,IAAMJ,EAAgB,QACtB,IAAMA,EAEP,OADAH,EAAoBQ,EAAEF,EAAQ,CAAE3F,EAAG2F,IAC5BA,GCLRN,EAAoBQ,EAAI,CAACN,EAASO,KACjC,IAAI,IAAI3J,KAAO2J,EACXT,EAAoB5J,EAAEqK,EAAY3J,KAASkJ,EAAoB5J,EAAE8J,EAASpJ,IAC5EpL,OAAOgV,eAAeR,EAASpJ,EAAK,CAAE6J,YAAY,EAAMC,IAAKH,EAAW3J,MCJ3EkJ,EAAoB5J,EAAI,CAACyK,EAAKC,IAASpV,OAAOD,UAAUuT,eAAeC,KAAK4B,EAAKC,GCCjFd,EAAoBe,EAAKb,IACH,oBAAXc,QAA0BA,OAAOC,aAC1CvV,OAAOgV,eAAeR,EAASc,OAAOC,YAAa,CAAEtD,MAAO,WAE7DjS,OAAOgV,eAAeR,EAAS,aAAc,CAAEvC,OAAO,KJFhDqC,EAAoB,M","file":"forum.js","sourcesContent":["export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/CommentPost'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/PostStream'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['states/PostStreamState'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/components/TagDiscussionModal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/DiscussionControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Alert'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Dropdown'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Modal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/ItemList'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/Stream'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Switch'];","import Modal from \"flarum/components/Modal\";\nimport Button from \"flarum/components/Button\";\nimport ItemList from \"flarum/utils/ItemList\";\nimport Stream from \"flarum/utils/Stream\";\nimport Switch from \"flarum/components/Switch\";\n\nexport default class BlogPostSettingsModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n if (this.attrs.article) {\n this.meta =\n this.attrs.article && this.attrs.article.blogMeta()\n ? this.attrs.article.blogMeta()\n : app.store.createRecord(\"blogMeta\");\n } else {\n this.meta = this.attrs.meta\n ? this.attrs.meta\n : app.store.createRecord(\"blogMeta\");\n }\n\n this.isNew = !this.meta.exists;\n\n this.summary = Stream(this.meta.summary() || \"\");\n\n this.featuredImage = Stream(this.meta.featuredImage() || \"\");\n\n this.isFeatured = Stream(this.meta.isFeatured() || false);\n this.isSized = Stream(this.meta.isSized() || false);\n this.isPendingReview = Stream(this.meta.isPendingReview() || false);\n }\n\n className() {\n return \"Modal--small Support-Modal\";\n }\n\n title() {\n return \"Blog post settings\";\n }\n\n content() {\n return (\n
\n
{this.fields().toArray()}
\n
\n );\n }\n\n fields() {\n const items = new ItemList();\n\n items.add(\n \"summary\",\n
\n \n \n\n \n This summary will be visible on the blog overview page and will be\n used for SEO purposes.\n \n
,\n 30\n );\n\n items.add(\n \"image\",\n
\n
\n
\n\n
Best image resolution for social media: 1200x630\n\n {this.featuredImage() != \"\" && (\n
}\n)
\n )}\n
,\n 30\n );\n\n items.add(\n \"sized\",\n
\n {Switch.component(\n {\n state: this.isSized() == true,\n onchange: (val) => {\n this.isSized(val);\n },\n },\n [\n
Highlighted post,\n
\n Give this post a big image on the blog overview page.\n
,\n ]\n )}\n
,\n -10\n );\n\n items.add(\n \"submit\",\n
\n {Button.component(\n {\n type: \"submit\",\n className: \"Button Button--primary SupportModal-save\",\n loading: this.loading,\n },\n \"Update\"\n )}\n
,\n -10\n );\n\n return items;\n }\n\n submitData() {\n return {\n summary: this.summary(),\n featuredImage: this.featuredImage(),\n isFeatured: this.isFeatured(),\n isSized: this.isSized(),\n isPendingReview: this.isPendingReview(),\n relationships:\n this.isNew && !this.attrs.isComposer\n ? {\n discussion: this.attrs.article,\n }\n : null,\n };\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n // Submit data\n if (this.attrs.onsubmit) {\n // Update attributes\n this.meta.pushData({\n attributes: this.submitData(),\n });\n\n // Push\n this.attrs.onsubmit(this.meta);\n\n this.hide();\n return;\n }\n\n this.loading = true;\n\n this.meta.save(this.submitData()).then(\n () => {\n if (this.attrs.article) {\n this.attrs.article.pushData({\n relationships: {\n blogMeta: this.meta,\n },\n });\n }\n\n this.hide();\n m.redraw();\n },\n (response) => {\n this.loading = false;\n this.handleErrors(response);\n }\n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/EditPostComposer'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/extractText'];","import Modal from \"flarum/components/Modal\";\nimport Button from \"flarum/components/Button\";\nimport ItemList from \"flarum/utils/ItemList\";\nimport Stream from \"flarum/utils/Stream\";\n\nexport default class RenameArticleModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.article = this.attrs.article;\n\n this.name = Stream(this.article.title() || \"\");\n\n this.redirect = this.attrs.redirect;\n }\n\n className() {\n return \"Modal--small Support-Modal\";\n }\n\n title() {\n return app.translator.trans(\n \"v17development-flarum-blog.forum.tools.rename_article\"\n );\n }\n\n content() {\n return (\n
\n
{this.fields().toArray()}
\n
\n );\n }\n\n fields() {\n const items = new ItemList();\n\n items.add(\n \"name\",\n
\n \n \n
,\n 50\n );\n\n items.add(\n \"submit\",\n
\n {Button.component(\n {\n type: \"submit\",\n className: \"Button Button--primary SupportModal-save\",\n loading: this.loading,\n },\n \"Update\"\n )}\n
,\n -10\n );\n\n return items;\n }\n\n submitData() {\n return {\n title: this.name(),\n };\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n // Do not save\n if (this.attrs.onChange) {\n this.attrs.onChange(this.name());\n this.hide();\n\n return;\n }\n\n this.article\n .save({\n title: this.name(),\n })\n .then(\n () => {\n this.hide();\n\n // Redirect\n if (this.redirect) {\n const url = `/blog/${this.article.slug()}`;\n\n m.route.set(url, true);\n window.history.replaceState(null, document.title, url);\n }\n },\n (response) => {\n this.loading = false;\n this.handleErrors(response);\n }\n );\n }\n}\n","import Component from \"flarum/Component\";\nimport TagDiscussionModal from \"flarum/tags/components/TagDiscussionModal\";\nimport DiscussionControls from \"flarum/utils/DiscussionControls\";\nimport Alert from \"flarum/components/Alert\";\nimport Button from \"flarum/components/Button\";\nimport Dropdown from \"flarum/components/Dropdown\";\nimport BlogPostSettingsModal from \"./Modals/BlogPostSettingsModal\";\nimport EditPostComposer from \"flarum/components/EditPostComposer\";\nimport extractText from \"flarum/utils/extractText\";\nimport RenameArticleModal from \"./Modals/RenameArticleModal\";\n\nexport default class BlogPostController extends Component {\n init() {\n this.loadedPost = false;\n }\n\n view() {\n const article = this.attrs.article;\n let buttons = [];\n\n // Working for GlowingBlue version\n const LanguageDiscussionModal =\n flarum.extensions[\"fof-discussion-language\"] &&\n typeof flarum.extensions[\"fof-discussion-language\"].components !==\n \"undefined\"\n ? flarum.extensions[\"fof-discussion-language\"].components\n .LanguageDiscussionModal\n : null;\n\n // Rename article\n if (article.canRename()) {\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: () => app.modal.show(RenameArticleModal, { article }),\n icon: \"fas fa-pencil-alt\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.rename_article\"\n )\n )\n );\n }\n\n const articlePost = article.firstPost()\n ? article.firstPost()\n : app.store.getById(\"posts\", article.firstPostId());\n\n // Edit article\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n disabled: !articlePost || !articlePost.canEdit(),\n onclick: () => {\n app.composer.load(EditPostComposer, { post: articlePost });\n app.composer.show();\n },\n icon: \"fas fa-edit\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.edit_article\"\n )\n )\n );\n\n // Article settings\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: () => app.modal.show(BlogPostSettingsModal, { article }),\n icon: \"fas fa-cogs\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.article_settings\"\n )\n )\n );\n\n // Update categories\n if (article.canTag()) {\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: () =>\n app.modal.show(TagDiscussionModal, { discussion: article }),\n icon: \"fas fa-tag\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.update_category\"\n )\n )\n );\n }\n\n // Approve article\n if (article.blogMeta() && article.blogMeta().isPendingReview()) {\n buttons.push(
);\n\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n disabled: !app.forum.attribute(\"canApproveBlogPosts\"),\n onclick: () => {\n article\n .blogMeta()\n .save({\n isPendingReview: false,\n })\n .then(\n () => {\n app.alerts.show(\n Alert,\n { type: \"success\" },\n app.translator.trans(\n \"v17development-flarum-blog.forum.review_article.approve_article_approved\"\n )\n );\n },\n (response) => {\n this.loading = false;\n this.handleErrors(response);\n }\n );\n },\n icon: \"fas fa-thumbs-up\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.review_article.approve_article\"\n )\n )\n );\n }\n\n // Language\n if (\n article.canChangeLanguage &&\n article.canChangeLanguage() &&\n LanguageDiscussionModal\n ) {\n buttons.push(\n Button.component(\n {\n icon: \"fas fa-globe\",\n onclick: () =>\n app.modal.show(LanguageDiscussionModal, { discussion: article }),\n },\n app.translator.trans(\n \"fof-discussion-language.forum.discussion_controls.change_language_button\"\n )\n )\n );\n }\n\n buttons.push(
);\n\n // Lock article\n if (article.canLock()) {\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: DiscussionControls.lockAction.bind(article),\n icon: `fas ${\n article.isLocked() ? \"fa-comments\" : \"fa-comment-slash\"\n }`,\n },\n article.isLocked()\n ? app.translator.trans(\n \"v17development-flarum-blog.forum.tools.enable_comments\"\n )\n : app.translator.trans(\n \"v17development-flarum-blog.forum.tools.disable_comments\"\n )\n )\n );\n }\n\n // Hide/show/delete\n if (article.canHide()) {\n // Article is hidden\n if (article.isHidden()) {\n // Recover article\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: DiscussionControls.restoreAction.bind(article),\n icon: \"fas fa-eye\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.recover_article\"\n )\n )\n );\n\n // Delete article\n if (article.canDelete()) {\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: () => {\n // Confirm deletion\n if (\n confirm(\n extractText(\n app.translator.trans(\n \"core.forum.discussion_controls.delete_confirmation\"\n )\n )\n )\n ) {\n // Redirect if the current page is an blog article\n if (app.history.getCurrent().name === \"blogArticle\") {\n if (app.previous) {\n app.history.back();\n } else {\n m.route.set(app.route(\"blog\"));\n }\n }\n\n return article.delete().then(() => {\n m.redraw();\n });\n }\n },\n icon: \"far fa-trash-alt\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.delete_forever\"\n )\n )\n );\n }\n } else {\n // Hide article\n buttons.push(\n Button.component(\n {\n className: \"Button\",\n onclick: DiscussionControls.hideAction.bind(article),\n icon: \"fas fa-eye-slash\",\n },\n app.translator.trans(\n \"v17development-flarum-blog.forum.tools.hide_article\"\n )\n )\n );\n }\n }\n\n return (\n
\n
\n {Dropdown.component(\n {\n icon: \"fas fa-cog\",\n label: \"Manage\",\n buttonClassName: \"Button\",\n menuClassName: \"Dropdown-menu--right\",\n onshow: () => {\n // Get post data to make sure they can edit the post\n if (articlePost && !articlePost.canEdit() && !this.loadedPost) {\n this.loadedPost = true;\n app.store\n .find(\n \"posts\",\n article.firstPost()\n ? article.firstPost().id()\n : article.firstPostId()\n )\n .then(() => {})\n .catch(() => {})\n .then(() => m.redraw());\n }\n },\n },\n buttons\n )}\n
\n
\n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['helpers/avatar'];","import Component from \"flarum/Component\";\nimport ItemList from \"flarum/utils/ItemList\";\nimport listItems from \"flarum/helpers/listItems\";\nimport avatar from \"flarum/helpers/avatar\";\n\nexport default class BlogAuthor extends Component {\n view() {\n const author = !this.attrs.loading\n ? this.attrs.article\n ? this.attrs.article.user()\n : this.attrs.user\n : null;\n\n return (\n
\n
\n\n
\n {author ? (\n avatar(author)\n ) : (\n \n )}\n
\n\n {author && (\n
\n
\n {author.displayName()}\n \n
\n {author.bio && author.bio()}\n
\n\n
\n {listItems(this.items().toArray())}\n
\n
\n )}\n\n {this.attrs.loading && (\n
\n
\n \n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n )}\n
\n );\n }\n\n items() {\n return new ItemList();\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Link'];","import Component from \"flarum/Component\";\nimport Link from \"flarum/components/Link\";\n\nexport default class BlogCategories extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.blogCategories = app.forum.attribute(\"blogTags\");\n }\n\n view() {\n return (\n
\n
\n {app.translator.trans(\"v17development-flarum-blog.forum.categories\")}\n
\n\n {this.blogCategories &&\n this.blogCategories.map((tagId) => {\n const tag = app.store.getById(\"tags\", tagId);\n\n if (!tag) return null;\n\n const tags = [];\n\n // Add tag\n tags.push(this.categoryItem(tag));\n\n // Add tags\n app.store.all(\"tags\").forEach((_tag) => {\n if (_tag.isChild() && _tag.parent().id() === tag.id()) {\n tags.push(this.categoryItem(_tag));\n }\n });\n\n return tags;\n })}\n \n );\n }\n\n // Category item\n categoryItem(tag) {\n return (\n
\n
\n \n \n {tag.name()}\n \n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/IndexPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/SelectDropdown'];","import Component from \"flarum/Component\";\nimport IndexPage from \"flarum/components/IndexPage\";\nimport SelectDropdown from \"flarum/components/SelectDropdown\";\n\nexport default class ForumNav extends Component {\n view() {\n return (\n
\n
\n {app.translator.trans(\"v17development-flarum-blog.forum.forum_nav\")}\n
\n \n \n );\n }\n\n navItems() {\n const items = IndexPage.prototype.navItems();\n\n // We want the active screen to show up in the top dropdown when on mobile.\n if (app.screen() !== \"phone\") {\n items.remove(\"blog\");\n }\n\n return items;\n }\n}\n","import Component from \"flarum/Component\";\nimport ItemList from \"flarum/utils/ItemList\";\nimport listItems from \"flarum/helpers/listItems\";\nimport BlogAuthor from \"./BlogAuthor\";\nimport BlogCategories from \"../BlogCategories\";\nimport ForumNav from \"../ForumNav\";\n\nexport default class BlogItemSidebar extends Component {\n view() {\n return (\n
\n
{listItems(this.items().toArray())}
\n
\n );\n }\n\n items() {\n const itemlist = new ItemList();\n\n itemlist.add(\"author\", BlogAuthor.component(this.attrs), 0);\n\n itemlist.add(\"categories\", BlogCategories.component(this.attrs), 0);\n\n itemlist.add(\"nav\", ForumNav.component(this.attrs), 0);\n\n return itemlist;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['helpers/humanTime'];","export default function tooltip(element) {\n $(element).tooltip();\n}\n","import Component from \"flarum/Component\";\n\nexport default class Language extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.languages = app.store.all(\"discussion-languages\");\n this.options = this.languages.reduce((o, lang) => {\n o[lang.code()] = (\n
\n {lang.name()}\n \n );\n\n return o;\n }, this.attrs.extra || {});\n }\n\n view() {\n const { language, uppercase } = this.attrs;\n const name = language.name() || \"\";\n\n return (\n
\n \n \n {uppercase ? name.toUpperCase() : name}\n \n );\n }\n}\n","import Component from \"flarum/Component\";\nimport Dropdown from \"flarum/components/Dropdown\";\nimport Button from \"flarum/components/Button\";\nimport Language from \"./Language\";\n\nexport default class LanguageDropdown extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n this.languages = app.store.all(\"discussion-languages\");\n this.options = this.languages.reduce((o, lang) => {\n o[lang.code()] =
;\n\n return o;\n }, this.attrs.extra || {});\n }\n\n view() {\n const selected = this.attrs.selected;\n\n const items = Object.keys(this.options).map((key) => {\n const isSelected = selected || \"any\";\n const active = key === isSelected;\n\n return Button.component(\n {\n active,\n icon: active ? \"fas fa-check\" : true,\n onclick: () => this.attrs.onclick(key),\n },\n this.options[key]\n );\n });\n\n return Dropdown.component(\n {\n buttonClassName: \"Button\",\n label: this.options[selected] || this.options[this.attrs.default],\n menuClassName: \"Dropdown-menu--right\",\n },\n items\n );\n }\n}\n","import Page from \"flarum/components/Page\";\nimport Button from \"flarum/components/Button\";\nimport humanTime from \"flarum/helpers/humanTime\";\nimport BlogCategories from \"../components/BlogCategories\";\nimport Link from \"flarum/components/Link\";\nimport tooltip from \"../utils/tooltip\";\nimport LanguageDropdown from \"../components/LanguageDropdown/LanguageDropdown\";\nimport ForumNav from \"../components/ForumNav\";\n\nexport default class BlogOverview extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n\n app.setTitle(app.translator.trans(\"v17development-flarum-blog.forum.blog\"));\n\n this.bodyClass = \"BlogOverviewPage\";\n\n this.isLoading = true;\n this.featuredPosts = [];\n this.posts = [];\n this.hasMore = null;\n this.isLoadingMore = false;\n\n this.languages = app.store.all(\"discussion-languages\");\n\n this.currentSelectedLanguage = m.route.param(\"lang\")\n ? m.route.param(\"lang\")\n : app.translator.locale;\n\n // Send history push\n app.history.push(\"blog\");\n\n this.loadBlogOverview();\n }\n\n // Load blog overview\n loadBlogOverview() {\n const preloadBlogOverview = app.preloadedApiDocument();\n\n if (preloadBlogOverview) {\n // We must wrap this in a setTimeout because if we are mounting this\n // component for the first time on page load, then any calls to m.redraw\n // will be ineffective and thus any configs (scroll code) will be run\n // before stuff is drawn to the page.\n setTimeout(this.show.bind(this, preloadBlogOverview), 0);\n } else {\n this.reloadData();\n }\n\n m.redraw();\n }\n\n reloadData() {\n let q = `is:blog${\n m.route.param(\"slug\") ? ` tag:${m.route.param(\"slug\")}` : \"\"\n }`;\n\n if (this.languages !== null && this.languages.length >= 1) {\n q += ` language:${this.currentSelectedLanguage}`;\n }\n\n app.store\n .find(\"discussions\", {\n filter: {\n q,\n },\n sort: \"-createdAt\",\n })\n .then(this.show.bind(this))\n .catch(() => {\n m.redraw();\n });\n }\n\n // Show blog posts\n show(articles) {\n if (articles.length === 0) {\n this.isLoading = false;\n m.redraw();\n\n return;\n }\n\n // Set pagination\n this.hasMore =\n articles.payload.links && articles.payload.links.next\n ? articles.payload.links.next\n : null;\n\n this.featuredPosts = articles.slice(0, 3);\n this.posts = articles.length >= 4 ? articles.slice(3, articles.length) : [];\n\n this.isLoading = false;\n\n m.redraw();\n }\n\n // Load more blog posts\n loadMore() {\n this.isLoadingMore = true;\n\n app.store\n .find(this.hasMore.replace(app.forum.attribute(\"apiUrl\"), \"\"))\n .then((data) => {\n data.map((article) => this.posts.push(article));\n\n // Update hasmore button\n this.hasMore =\n data.payload.links && data.payload.links.next\n ? data.payload.links.next\n : null;\n })\n .catch(() => {})\n .then(() => {\n this.isLoadingMore = false;\n m.redraw();\n });\n }\n\n title() {\n if (!m.route.param(\"slug\")) {\n return (\n
\n {app.translator.trans(\n \"v17development-flarum-blog.forum.recent_posts\"\n )}\n
\n );\n }\n\n const tag = app.store\n .all(\"tags\")\n .filter((tag) => tag.slug() === m.route.param(\"slug\"));\n\n return (\n
\n {tag && tag[0] && tag[0].name()}\n \n {\" \"}\n -{\" \"}\n \n {app.translator.trans(\n \"v17development-flarum-blog.forum.return_to_overview\"\n )}\n \n \n
\n );\n }\n\n view() {\n const defaultImage = app.forum.attribute(\"blogDefaultImage\")\n ? `url(${\n app.forum.attribute(\"baseUrl\") +\n \"/assets/\" +\n app.forum.attribute(\"blogDefaultImage\")\n })`\n : null;\n\n return (\n
\n
\n
\n
\n {app.forum.attribute(\"canWriteBlogPosts\") && (\n \n )}\n\n {this.languages !== null && this.languages.length >= 1 && (\n {\n this.currentSelectedLanguage = language;\n\n m.route.set(document.location.pathname, {\n lang: language,\n });\n\n this.reloadData();\n }}\n />\n )}\n
\n\n {this.title()}\n\n
\n\n
\n {/* Ghost data */}\n {this.isLoading &&\n [0, 1, 2].map(() => (\n
\n ))}\n\n {!this.isLoading &&\n this.featuredPosts.length >= 0 &&\n this.featuredPosts.map((article) => {\n const blogImage =\n article.blogMeta() && article.blogMeta().featuredImage()\n ? `url(${article.blogMeta().featuredImage()})`\n : defaultImage;\n const blogTag = article.tags()\n ? article.tags().filter((tag) => tag.isChild())\n : [];\n\n return (\n
\n
\n {blogTag[0] && {blogTag[0].name()}}\n {article.isSticky() && (\n \n \n \n )}\n {((article.blogMeta() &&\n article.blogMeta().isPendingReview() == true) ||\n article.isHidden()) && (\n \n \n \n )}\n {article.blogMeta() &&\n article.blogMeta().isPendingReview() == true && (\n \n {\" \"}\n {app.translator.trans(\n \"v17development-flarum-blog.forum.review_article.pending_review_title\"\n )}\n \n )}\n
\n\n
\n
{article.title()}
\n\n
\n \n {\" \"}\n {humanTime(article.createdAt())}\n \n \n {\" \"}\n {article.user()\n ? article.user().displayName()\n : \"[Deleted]\"}\n \n \n {\" \"}\n {article.commentCount() - 1}\n \n
\n
\n \n );\n })}\n
\n
\n\n
\n
\n {this.isLoading &&\n [false, false, true, false].map((state) => {\n return (\n
\n
\n
\n
\n
\n\n
\n \n \n \n
\n
\n
\n );\n })}\n\n {!this.isLoading &&\n this.posts.length >= 1 &&\n this.posts.map((article) => {\n const blogImage =\n article.blogMeta() && article.blogMeta().featuredImage()\n ? `url(${article.blogMeta().featuredImage()})`\n : defaultImage;\n const isSized =\n article.blogMeta() && article.blogMeta().isSized();\n const summary =\n article.blogMeta() && article.blogMeta().summary()\n ? article.blogMeta().summary()\n : \"\";\n\n return (\n
\n
\n
\n
\n {article.title()}\n {((article.blogMeta() &&\n article.blogMeta().isPendingReview() == true) ||\n article.isHidden()) && (\n \n )}\n {article.blogMeta() &&\n article.blogMeta().isPendingReview() == true && (\n \n )}\n
\n
{summary}
\n\n
\n \n {\" \"}\n {humanTime(article.createdAt())}\n \n \n {\" \"}\n {article.user()\n ? article.user().displayName()\n : \"[Deleted]\"}\n \n \n {\" \"}\n {article.commentCount() - 1}\n \n
\n
\n \n );\n })}\n\n {!this.isLoading &&\n this.featuredPosts.length > 0 &&\n this.hasMore === null && (\n
\n {app.translator.trans(\n \"v17development-flarum-blog.forum.no_more_posts\"\n )}\n
\n )}\n\n {!this.isLoading &&\n this.featuredPosts.length === 0 &&\n this.posts.length === 0 && (\n
\n {app.translator.trans(\n \"v17development-flarum-blog.forum.category_empty\"\n )}\n
\n )}\n\n {!this.isLoading && this.hasMore !== null && (\n
\n \n
\n )}\n
\n\n
\n \n \n
\n
\n
\n
\n );\n }\n\n newArticle() {\n let foundMainTag = false;\n let tags = [];\n\n const blogTags = app.forum.attribute(\"blogTags\");\n\n // Pre-select selected tags\n app.store.all(\"tags\").forEach((_tag) => {\n // Find main blog tag\n if (\n !foundMainTag &&\n !_tag.isChild() &&\n blogTags.indexOf(_tag.id()) >= 0\n ) {\n tags.push(_tag);\n }\n });\n\n // Get current category\n const currentCategory = app.store.getBy(\n \"tags\",\n \"slug\",\n m.route.param(\"slug\")\n );\n\n if (currentCategory) {\n tags.push(currentCategory);\n }\n\n // Redirect to the composer\n m.route.set(\n app.route(\"blogComposer\", {\n tags: tags.map((tag) => tag.id()).join(),\n lang:\n this.languages.length > 0 ? this.currentSelectedLanguage : undefined,\n })\n );\n }\n}\n","import Page from \"flarum/components/Page\";\nimport CommentPost from \"flarum/components/CommentPost\";\nimport PostStream from \"flarum/components/PostStream\";\nimport PostStreamState from \"flarum/states/PostStreamState\";\nimport BlogPostController from \"../components/BlogPostController\";\nimport BlogItemSidebar from \"../components/BlogItemSidebar/BlogItemSidebar\";\nimport Link from \"flarum/components/Link\";\nimport BlogOverview from \"./BlogOverview\";\n\nexport default class BlogItem extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n\n app.setTitle(app.translator.trans(\"v17development-flarum-blog.forum.blog\"));\n\n // Send history push\n app.history.push(\"blogArticle\");\n\n this.bodyClass = \"BlogItemPage\";\n\n this.near = m.route.param(\"near\") || 0;\n\n this.loading = true;\n this.found = false;\n this.article = null;\n\n this.loadBlogItem();\n }\n\n // Load blog overview\n loadBlogItem() {\n const preloadBlogOverview = app.preloadedApiDocument();\n\n if (preloadBlogOverview) {\n // We must wrap this in a setTimeout because if we are mounting this\n // component for the first time on page load, then any calls to m.redraw\n // will be ineffective and thus any configs (scroll code) will be run\n // before stuff is drawn to the page.\n setTimeout(this.show.bind(this, preloadBlogOverview), 0);\n } else {\n app.store\n .find(\"discussions\", m.route.param(\"id\").split(\"-\")[0])\n .then(this.show.bind(this))\n .catch(() => {\n m.redraw();\n });\n }\n\n m.redraw();\n }\n\n // Show blog post\n show(article) {\n // Set article data\n this.article = article;\n\n // Update title\n app.setTitle(\n `${article.title()} - ${app.translator.trans(\n \"v17development-flarum-blog.forum.blog\"\n )}`\n );\n\n this.loading = false;\n\n let includedPosts = [];\n if (article.payload && article.payload.included) {\n const articleId = article.id();\n\n includedPosts = article.payload.included\n .filter(\n (record) =>\n record.type === \"posts\" &&\n record.relationships &&\n record.relationships.discussion &&\n record.relationships.discussion.data.id === articleId\n )\n .map((record) => app.store.getById(\"posts\", record.id))\n .sort((a, b) => a.id() - b.id())\n .slice(0, 20);\n }\n\n this.stream = new PostStreamState(article, includedPosts);\n\n // Scroll to specific post\n if (this.near) {\n this.stream.goToNumber(this.near, true);\n }\n\n m.redraw();\n }\n\n view() {\n const defaultImage = app.forum.attribute(\"blogDefaultImage\")\n ? `url(${\n app.forum.attribute(\"baseUrl\") +\n \"/assets/\" +\n app.forum.attribute(\"blogDefaultImage\")\n })`\n : null;\n const blogImage =\n this.article &&\n this.article.blogMeta() &&\n this.article.blogMeta().featuredImage()\n ? `url(${this.article.blogMeta().featuredImage()})`\n : defaultImage;\n let articlePost = null;\n\n if (!this.loading && this.article) {\n articlePost = this.article.firstPost()\n ? this.article.firstPost()\n : app.store.getById(\"posts\", this.article.firstPostId());\n }\n\n return (\n
\n
\n
\n {\n if (app.previous.matches(BlogOverview)) {\n e.preventDefault();\n history.back();\n }\n }}\n >\n \n \n {app.translator.trans(\n \"v17development-flarum-blog.forum.return_to_overview\"\n )}\n \n \n
\n
\n
\n
\n
\n\n {this.article &&\n app.session.user &&\n (app.session.user.canEdit() ||\n this.article.canRename() ||\n (this.article.posts() &&\n this.article.posts()[0].canEdit())) && (\n
\n )}\n\n {/* Article Categories */}\n
\n {!this.loading &&\n this.article &&\n this.article.tags() &&\n this.article\n .tags()\n .map((tag) => (\n \n {tag.name()}\n \n ))}\n\n {this.loading &&\n [0, 1].map(() => (\n \n Category\n \n ))}\n
\n\n
\n {/* Article name */}\n
\n {this.article ? this.article.title() : \"Ghost title\"}\n {this.article &&\n this.article.isHidden() &&\n `(${app.translator.trans(\n \"v17development-flarum-blog.forum.hidden\"\n )})`}\n
\n\n {this.loading &&\n [0, 1, 2].map(() => (\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n ))}\n\n {!this.loading &&\n this.article.blogMeta() &&\n this.article.blogMeta().isPendingReview() == true && (\n
\n
\n \n {\" \"}\n {app.translator.trans(\n \"v17development-flarum-blog.forum.review_article.pending_review\"\n )}\n
\n
\n
\n )}\n\n {!this.loading && articlePost && (\n
\n )}\n
\n
\n\n
\n
\n {app.translator.trans(\n \"v17development-flarum-blog.forum.comment_section.comments\"\n )}{\" \"}\n ({this.article ? this.article.commentCount() - 1 : 0})\n
\n {/* Locked */}\n {!this.loading &&\n this.article.isLocked &&\n this.article.isLocked() && (\n
\n
\n \n {\" \"}\n {app.translator.trans(\n \"v17development-flarum-blog.forum.comment_section.locked\"\n )}\n
\n
\n
\n )}\n\n {!this.loading &&\n this.article &&\n PostStream.component({\n discussion: this.article,\n stream: this.stream,\n onPositionChange: this.positionChanged.bind(this),\n })}\n
\n
\n\n
\n
\n
\n
\n );\n }\n\n positionChanged(startNumber, endNumber) {\n const article = this.article;\n\n if (app.session.user && endNumber > (article.lastReadPostNumber() || 0)) {\n article.save({ lastReadPostNumber: endNumber });\n m.redraw();\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['models/Discussion'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/DiscussionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['extend'];","import IndexPage from \"flarum/components/IndexPage\";\nimport DiscussionPage from \"flarum/components/DiscussionPage\";\nimport { extend, override } from \"flarum/extend\";\n\nexport default function () {\n // Redirect tag to blog category\n extend(IndexPage.prototype, \"oncreate\", function () {\n const tag = this.currentTag();\n const tagRedirectEnabled =\n app.forum.attribute(\"blogRedirectsEnabled\") === \"both\" ||\n app.forum.attribute(\"blogRedirectsEnabled\") === \"tags_only\";\n\n // Only trigger when it's a tag page and the redirects are enabled\n if (tag && tagRedirectEnabled) {\n const blogTags = app.forum.attribute(\"blogTags\");\n\n // Tag is inside list\n if (\n blogTags.indexOf(tag.id()) >= 0 ||\n (tag.parent() && blogTags.indexOf(tag.parent().id()) >= 0)\n ) {\n m.route.set(app.route(\"blog\"));\n }\n }\n });\n\n // Redirect discussion to blog article\n override(DiscussionPage.prototype, \"show\", function (original, discussion) {\n const discussionRedirectEnabled =\n app.forum.attribute(\"blogRedirectsEnabled\") === \"both\" ||\n app.forum.attribute(\"blogRedirectsEnabled\") === \"discussions_only\";\n\n if (\n discussionRedirectEnabled &&\n discussion &&\n discussion &&\n discussion.tags().length > 0\n ) {\n const blogTags = app.forum.attribute(\"blogTags\");\n\n const foundTags = discussion.tags().filter((tag) => {\n return (\n blogTags.indexOf(tag.id()) >= 0 ||\n (tag.parent() && blogTags.indexOf(tag.parent().id()) >= 0)\n );\n });\n\n // Only redirect if the discussion has blog tags\n if (foundTags.length > 0) {\n // Redirect to blog article\n const url = app.route(\"blogArticle\", {\n id: discussion.slug(),\n });\n\n // Setting the 3rd argument to true replaces the current state in the browser history, that way the browser back button works as expected.\n m.route.set(url, null, true);\n return null;\n }\n }\n\n return original(discussion);\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/mixin'];","import Model from \"flarum/Model\";\nimport mixin from \"flarum/utils/mixin\";\n\nexport default class BlogMeta extends mixin(Model, {\n discussion: Model.hasOne(\"discussion\"),\n featuredImage: Model.attribute(\"featuredImage\"),\n summary: Model.attribute(\"summary\"),\n isFeatured: Model.attribute(\"isFeatured\"),\n isSized: Model.attribute(\"isSized\"),\n isPendingReview: Model.attribute(\"isPendingReview\"),\n}) {}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['tags/components/TagsPage'];","import { extend } from \"flarum/extend\";\nimport IndexPage from \"flarum/components/IndexPage\";\nimport TagsPage from \"flarum/tags/components/TagsPage\";\n\nexport default function extendTagOverview() {\n extend(TagsPage.prototype, \"view\", function (markup) {\n if (app.forum.attribute(\"blogHideTags\") == false) return markup;\n\n // Get knowledge base tag ID's\n const knowledgeBaseTags = app.forum.attribute(\"blogTags\") || [];\n\n // Get tiles\n let tag_tiles = markup.children[1].children[1].children[0].children;\n\n // Map through the tiles and remove tiles that are part of the knowledge base\n markup.children[1].children[1].children[0].children = tag_tiles.map(\n (tile, i) => {\n return knowledgeBaseTags.indexOf(this.tags[i].id()) >= 0 ? null : tile;\n }\n );\n\n return markup;\n });\n\n extend(IndexPage.prototype, \"navItems\", function (items) {\n if (app.forum.attribute(\"blogHideTags\") == false) return items;\n\n const blogTags = app.forum.attribute(\"blogTags\") || [];\n\n blogTags.forEach((id) => {\n items.remove(`tag${id}`);\n });\n\n return items;\n });\n}\n","export default function () {\n // Save the original function before we override it\n const original_discussion_route = app.route.discussion;\n\n /**\n * Generate a URL to a discussion OR a Blog Article.\n *\n * CORE_CODE_OVERRIDE: This overrides the standard function from flarum/core.\n * The code is inspired from js/src/forum/routes.js and now handles different types of discussions.\n * It will try to keep the original function executed if the discussion being\n * processed isn't a blog article.\n *\n * @param {Discussion} discussion\n * @param {Integer} [near]\n * @return {String}\n */\n app.route.discussion = (discussion, near) => {\n const discussionRedirectEnabled =\n app.forum.attribute(\"blogRedirectsEnabled\") === \"both\" ||\n app.forum.attribute(\"blogRedirectsEnabled\") === \"discussions_only\";\n let shouldRedirect = false;\n if (discussionRedirectEnabled && discussion.tags().length > 0) {\n const blogTags = app.forum.attribute(\"blogTags\");\n\n const foundTags = discussion.tags().filter((tag) => {\n return (\n blogTags.indexOf(tag.id()) >= 0 ||\n (tag.parent() && blogTags.indexOf(tag.parent().id()) >= 0)\n );\n });\n\n if (foundTags.length > 0) {\n shouldRedirect = true;\n }\n }\n if (shouldRedirect) {\n return discussion.lastReadPostNumber() > 1\n ? app.route(\"blogArticle.near\", {\n id: discussion.slug(),\n near: discussion.lastReadPostNumber(),\n })\n : app.route(\"blogArticle\", {\n id: discussion.slug(),\n });\n } else {\n return original_discussion_route(discussion, near);\n }\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/ComposerBody'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/TextEditor'];","import Component from \"flarum/Component\";\n\nexport default class ComposerPreview extends Component {\n view() {\n return
;\n }\n\n oncreate(vnode) {\n super.oncreate(vnode);\n\n s9e.TextFormatter.preview(vnode.attrs.content || \"\", vnode.dom);\n }\n}\n","import ComposerBody from \"flarum/components/ComposerBody\";\nimport Button from \"flarum/components/Button\";\nimport TextEditor from \"flarum/components/TextEditor\";\nimport ComposerPreview from \"./ComposerPreview\";\n\nexport default class Composer extends ComposerBody {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.previewContent = false;\n }\n\n // Render\n view() {\n const hasContent =\n this.composer.fields.content() && this.composer.fields.content() !== \"\";\n const loading = this.loading || this.attrs.disabled;\n\n return (\n
\n
\n \n \n
\n\n
\n {this.previewContent && (\n
\n {!hasContent &&\n app.translator.trans(\n \"v17development-flarum-blog.forum.composer.nothing_to_preview\"\n )}\n\n \n
\n )}\n\n {TextEditor.component({\n submitLabel:\n this.attrs.submitLabel ||\n app.translator.trans(\"core.forum.composer_edit.submit_button\"),\n placeholder: this.attrs.placeholder,\n disabled: loading,\n composer: this.composer,\n preview: this.jumpToPreview && this.jumpToPreview.bind(this),\n onchange: this.composer.fields.content,\n onsubmit: this.onsubmit.bind(this),\n value: this.composer.fields.content(),\n })}\n
\n
\n );\n }\n\n // Submit trigger\n onsubmit() {\n if (this.attrs.onsubmit) {\n this.attrs.onsubmit();\n }\n }\n}\n","import Page from \"flarum/components/Page\";\nimport Button from \"flarum/components/Button\";\nimport Link from \"flarum/components/Link\";\nimport BlogAuthor from \"../components/BlogItemSidebar/BlogAuthor\";\nimport RenameArticleModal from \"../components/Modals/RenameArticleModal\";\nimport TagDiscussionModal from \"flarum/tags/components/TagDiscussionModal\";\nimport BlogPostSettingsModal from \"../components/Modals/BlogPostSettingsModal\";\nimport Composer from \"../components/Composer/Composer\";\nimport LanguageDropdown from \"../components/LanguageDropdown/LanguageDropdown\";\n\nexport default class BlogComposer extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n\n app.setTitle(app.translator.trans(\"v17development-flarum-blog.forum.blog\"));\n\n // User cannot write blogs\n if (!app.forum.attribute(\"canWriteBlogPosts\")) {\n m.route.set(app.route(\"blog\"));\n return;\n }\n\n // Send history push\n app.history.push(\"blogComposer\");\n\n // Get languages (if enabled)\n this.languages = app.store.all(\"discussion-languages\");\n\n // Set body class\n this.bodyClass = \"BlogItemPage\";\n\n // Article data\n this.articleLanguage = m.route.param(\"lang\")\n ? m.route.param(\"lang\")\n : app.translator.locale;\n this.article = app.store.createRecord(\"discussions\");\n this.blogMeta = null;\n\n this.tags = [];\n\n // Pre-select tags\n if (m.route.param().tags) {\n const tagList = Array.isArray(m.route.param().tags)\n ? m.route.param().tags\n : m.route.param().tags.split(\",\");\n\n if (m.route.param().tags.length > 0) {\n tagList.forEach((tagId) => {\n const foundTag = app.store.getById(\"tags\", tagId);\n\n if (foundTag) {\n this.tags.push(foundTag);\n }\n });\n }\n }\n\n this.isSaving = false;\n }\n\n openTagsModal(e = null) {\n if (e) {\n e.preventDefault();\n }\n\n if (this.isSaving) return;\n\n app.modal.show(TagDiscussionModal, {\n selectedTags: this.tags,\n onsubmit: (tags) => {\n this.tags = tags;\n },\n });\n }\n\n openNameArticleModal(e = null) {\n if (e) {\n e.preventDefault();\n }\n\n if (this.isSaving) return;\n\n app.modal.show(RenameArticleModal, {\n article: this.article,\n onChange: (title) => {\n this.article.pushData({\n attributes: {\n title,\n },\n });\n },\n });\n }\n\n openBlogSettings(e) {\n e.preventDefault();\n\n if (this.isSaving) return;\n\n app.modal.show(BlogPostSettingsModal, {\n meta: this.blogMeta,\n onsubmit: (meta) => (this.blogMeta = meta),\n });\n }\n\n view() {\n const blogImage =\n this.blogMeta && this.blogMeta.featuredImage()\n ? `url(${this.blogMeta.featuredImage()})`\n : null;\n\n return (\n
\n
\n
\n \n \n \n {app.translator.trans(\n \"v17development-flarum-blog.forum.return_to_overview\"\n )}\n \n \n
\n
\n
\n
\n
this.openBlogSettings(e)}\n />\n\n
\n
\n {this.languages !== null && this.languages.length >= 1 && (\n \n (this.articleLanguage = language)\n }\n />\n )}\n\n \n
\n
\n\n {/* Article Categories */}\n
\n\n
\n {/* Article name */}\n
this.openNameArticleModal()}\n style={{ cursor: \"pointer\" }}\n >\n {this.article &&\n this.article.title() &&\n this.article.title() !== \"\"\n ? this.article.title()\n : app.translator.trans(\n \"v17development-flarum-blog.forum.composer.no_title\"\n )}\n\n e.preventDefault()}>\n \n \n
\n\n
\n this.create()}\n disabled={this.isSaving}\n />\n
\n
\n
\n\n
\n
\n {app.translator.trans(\n \"v17development-flarum-blog.forum.comment_section.comments\"\n )}{\" \"}\n (0)\n
\n {/* Locked */}\n\n
\n
\n \n {\" \"}\n {app.translator.trans(\n \"v17development-flarum-blog.forum.composer.comment_section\"\n )}\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n );\n }\n\n create() {\n const blogTags = app.forum.attribute(\"blogTags\") || [];\n\n // Force tags\n if (this.tags.length === 0) {\n this.openTagsModal();\n return;\n }\n\n // Force title\n if (!this.article.title() || this.article.title() === \"\") {\n this.openNameArticleModal();\n return;\n }\n\n // Find knowledge base tags\n const findblogTags = this.tags.filter((tag) => {\n return blogTags.indexOf(tag.id()) >= 0;\n });\n\n // No knowledge base tags selected\n if (findblogTags.length === 0) {\n alert(\n app.translator.trans(\n \"v17development-flarum-blog.forum.composer.no_blog_tags_selected\"\n )\n );\n return;\n }\n\n if (\n (this.blogMeta === null ||\n !this.blogMeta.featuredImage() ||\n !this.blogMeta.summary()) &&\n !confirm(\n app.translator.trans(\n \"v17development-flarum-blog.forum.composer.post_without_blog_info\"\n )\n )\n ) {\n return;\n }\n\n let relationships = {\n tags: this.tags,\n };\n\n // Add languages if possible\n if (this.languages.length > 0) {\n relationships.language = app.store.getBy(\n \"discussion-languages\",\n \"code\",\n this.articleLanguage\n );\n }\n\n const data = {\n title: this.article.title(),\n content: app.composer.fields.content(),\n relationships,\n blogMeta:\n this.blogMeta !== null\n ? {\n featuredImage: this.blogMeta.featuredImage(),\n summary: this.blogMeta.summary(),\n isSized: this.blogMeta.isSized(),\n }\n : null,\n };\n\n this.isSaving = true;\n\n this.article\n .save(data)\n .then((article) => {\n setTimeout(() => {\n // Redirect to the article\n m.route.set(app.route(\"blogArticle\", { id: `${article.slug()}` }));\n }, 500);\n })\n .catch(() => {\n this.isSaving = false;\n m.redraw();\n });\n }\n}\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/LinkButton'];","import { extend } from \"flarum/extend\";\nimport IndexPage from \"flarum/components/IndexPage\";\nimport LinkButton from \"flarum/components/LinkButton\";\n\nexport default function addSidebarNav() {\n extend(IndexPage.prototype, \"navItems\", function (items) {\n if (\n app.forum.attribute(\"blogAddSidebarNav\") &&\n app.forum.attribute(\"blogAddSidebarNav\") !== \"0\"\n ) {\n items.add(\n \"blog\",\n
\n {app.translator.trans(\"v17development-flarum-blog.forum.blog\")}\n ,\n 15\n );\n }\n\n return items;\n });\n}\n","import BlogItem from \"./pages/BlogItem\";\nimport Model from \"flarum/Model\";\nimport Discussion from \"flarum/models/Discussion\";\nimport BlogOverview from \"./pages/BlogOverview\";\nimport redirector from \"./utils/redirector\";\nimport BlogMeta from \"../common/Models/BlogMeta\";\nimport extendTagOverview from \"./utils/extendTagOverview\";\nimport discussionRouting from \"./utils/discussionRouting\";\nimport BlogComposer from \"./pages/BlogComposer\";\nimport compat from \"./compat\";\nimport addSidebarNav from \"./utils/addSidebarNav\";\n\n// Register Flarum Blog\napp.initializers.add(\"v17development-flarum-blog\", (app) => {\n app.routes.blog = { path: \"/blog\", component: BlogOverview };\n\n app.routes.blogCategory = {\n path: \"/blog/category/:slug\",\n component: BlogOverview,\n };\n\n app.routes.blogComposer = { path: \"/blog/compose\", component: BlogComposer };\n\n app.routes.blogArticle = { path: \"/blog/:id\", component: BlogItem };\n\n app.routes[\"blogArticle.near\"] = {\n path: \"/blog/:id/:near\",\n component: BlogItem,\n };\n\n app.store.models.blogMeta = BlogMeta;\n\n Discussion.prototype.blogMeta = Model.hasOne(\"blogMeta\");\n\n // Redirect discussions/tags to their blog post/overview\n redirector();\n\n // Extend tag overview.\n // Hide tags which are used as blog category\n extendTagOverview();\n\n // Make that blog articles have a blog route and not a discussion route\n discussionRouting();\n\n // Add a link to the blog to the IndexPage sidebar, if enabled.\n addSidebarNav();\n});\n\ncompat();\n","import { compat } from \"@flarum/core/forum\";\nimport BlogAuthor from \"./components/BlogItemSidebar/BlogAuthor\";\nimport BlogItemSidebar from \"./components/BlogItemSidebar/BlogItemSidebar\";\n\nexport default () => {\n Object.assign(compat, {\n \"v17development/blog/components/BlogItemSidebar\": BlogItemSidebar,\n \"v17development/blog/components/BlogAuthor\": BlogAuthor,\n });\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(100);\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};"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/src/admin/pages/BlogSettings.js b/js/src/admin/pages/BlogSettings.js
index 803798a..b6d5a22 100644
--- a/js/src/admin/pages/BlogSettings.js
+++ b/js/src/admin/pages/BlogSettings.js
@@ -5,7 +5,7 @@ import Button from "flarum/components/Button";
import FieldSet from "flarum/components/FieldSet";
import Switch from "flarum/components/Switch";
import SelectCategoriesModal from "../components/Modals/SelectCategoriesModal";
-import UploadImageButton from 'flarum/components/UploadImageButton';
+import UploadImageButton from "flarum/components/UploadImageButton";
export default class BlogSettings extends ExtensionPage {
oninit(attrs) {
@@ -41,7 +41,10 @@ export default class BlogSettings extends ExtensionPage {
? app.data.settings.blog_add_sidebar_nav
: true;
- app.forum.data.attributes.blog_default_imageUrl = app.forum.attribute('baseUrl') + '/assets/' + app.data.settings.blog_default_image_path;
+ app.forum.data.attributes.blog_default_imageUrl =
+ app.forum.attribute("baseUrl") +
+ "/assets/" +
+ app.data.settings.blog_default_image_path;
}
content() {
@@ -299,20 +302,23 @@ export default class BlogSettings extends ExtensionPage {
]
)}
- {FieldSet.component({
- label: app.translator.trans(
- "v17development-flarum-blog.admin.settings.default_article_image_label"
- )
- }, [
-
- {app.translator.trans(
- "v17development-flarum-blog.admin.settings.default_article_image_text"
- )}
-
,
- UploadImageButton.component({
- name: 'blog_default_image'
- })
- ])}
+ {FieldSet.component(
+ {
+ label: app.translator.trans(
+ "v17development-flarum-blog.admin.settings.default_article_image_label"
+ ),
+ },
+ [
+
+ {app.translator.trans(
+ "v17development-flarum-blog.admin.settings.default_article_image_text"
+ )}
+
,
+ UploadImageButton.component({
+ name: "blog_default_image",
+ }),
+ ]
+ )}