\r\n\r\n return (\r\n
\r\n {DiscussionControls.controls(discussion, this).toArray().length\r\n ? m(Dropdown, {\r\n icon: 'fas fa-ellipsis-v',\r\n className: 'DiscussionListItem-controls',\r\n buttonClassName: 'Button Button--icon Button--flat Slidable-underneath Slidable-underneath--right',\r\n }, DiscussionControls.controls(discussion, this).toArray())\r\n : ''}\r\n
\r\n\r\n {Number(settings.showBadges) === 1\r\n ? craftBadges(discussion.badges().toArray())\r\n : ''}\r\n\r\n
\r\n\r\n
\r\n
\r\n {discussion.data.attributes.hasOwnProperty('views') && (\r\n <>\r\n {Number(settings.showViews) === 1 && !isNaN(discussion.views())\r\n ?
\r\n {icon('fas fa-eye', {className: 'labelIcon'})}\r\n {discussion.views()}\r\n
\r\n : ''}\r\n >\r\n )}\r\n \r\n {media}\r\n\r\n {Number(settings.showAuthor) === 1\r\n ?
\r\n
\r\n {username(discussion.user())}\r\n
\r\n
\r\n {humanTime(discussion.createdAt())}\r\n
\r\n
\r\n : ''}\r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n {Number(settings.allowRepostLinks) === 1 && repostActivated && repostUrl ? e.stopPropagation()}>{truncate(discussion.title(), 80)} : truncate(discussion.title(), 80)}\r\n
\r\n {app.screen() !== 'phone' && Number(settings.showReplies) === 1 && Number(settings.showRepliesOnRight) === 1 ?\r\n
\r\n {abbreviateNumber(discussion.replyCount())}\r\n\r\n \r\n {app.translator.trans('core.forum.discussion_list.unread_replies_a11y_label', { count: discussion.replyCount() })}\r\n \r\n
\r\n : ''}\r\n
\r\n
{craftTags(discussion.tags())}
\r\n
\r\n\r\n {Number(settings.previewText) === 1 && discussion.firstPost() ? (\r\n
\r\n {blogActivated && Number(settings.useBlogSummary) === 1 && discussion.data.relationships.hasOwnProperty('blogMeta') && discussion.blogMeta().summary() !== ''\r\n ? truncate(discussion.blogMeta().summary(), 150)\r\n : truncate(discussion.firstPost().contentPlain(), 150)\r\n }\r\n
\r\n ) : (\r\n ''\r\n )}\r\n \r\n {Number(settings.showLastPostInfo) === 1 && discussion.firstPost() ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ''\r\n )}\r\n\r\n {app.screen() === 'phone' && Number(settings.showReplies) === 1\r\n ?
\r\n
\r\n
\r\n
\r\n {m(LastReplies, {discussion: discussion})}\r\n
\r\n
\r\n {app.translator.trans('walsgit_discussion_cards.forum.replies', {count: discussion.replyCount() || '0'})}\r\n
\r\n
\r\n
\r\n {icon('fas fa-angle-right')}\r\n
\r\n \r\n
\r\n : Number(settings.showReplies) === 1 && !Number(settings.showRepliesOnRight) ?\r\n
\r\n {icon('fas fa-comment', {className: 'labelIcon'})}\r\n {discussion.replyCount()}\r\n
: ''\r\n }\r\n
\r\n
\r\n \r\n
\r\n );\r\n\r\n }\r\n\r\n}\r\n","export default function checkOverflowingTags() {\r\n const cardListItemsOnPrimary = document.querySelectorAll(\".CardsListItem.Card .cardLink\");\r\n const cardListItems = document.querySelectorAll(\".cardGrid .colSpan-2\");\r\n\r\n const toggleOverflowClass = function(cardTags, cardListItem) {\r\n if (!cardTags) return;\r\n\r\n if (cardTags.scrollWidth > cardListItem.clientWidth - 30) { // -30 to account for the 15px + 15px margins on .cardTags\r\n cardTags.classList.add(\"overflowing\");\r\n } else {\r\n cardTags.classList.remove(\"overflowing\");\r\n }\r\n }\r\n\r\n cardListItemsOnPrimary.forEach(cardListItem => {\r\n const cardTags = cardListItem.querySelector(\".cardTags\");\r\n\r\n toggleOverflowClass(cardTags, cardListItem);\r\n });\r\n\r\n cardListItems.forEach(cardListItem => {\r\n const cardTags = cardListItem.querySelector(\".flexBox .cardTags\");\r\n\r\n toggleOverflowClass(cardTags, cardListItem);\r\n });\r\n}","import CardItem from './components/CardItem';\r\nimport ListItem from './components/ListItem';\r\nimport LastReplies from './components/LastReplies';\r\nimport craftTags from \"./utils/craftTags\";\r\nimport craftBadges from \"./utils/craftBadges\";\r\n\r\nexport default {\r\n 'walsgit/discussion/cards/components/CardItem': CardItem,\r\n 'walsgit/discussion/cards/components/ListItem': ListItem,\r\n 'walsgit/discussion/cards/components/LastReplies': LastReplies,\r\n 'walsgit/discussion/cards/utils/craftTags': craftTags,\r\n 'walsgit/discussion/cards/utils/craftBadges': craftBadges,\r\n};\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import app from 'flarum/app';\r\nimport {extend, override} from 'flarum/extend';\r\nimport DiscussionList from 'flarum/forum/components/DiscussionList';\r\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\r\nimport IndexPage from 'flarum/forum/components/IndexPage';\r\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\r\nimport Placeholder from 'flarum/common/components/Placeholder';\r\nimport Button from 'flarum/common/components/Button';\r\nimport CardItem from './components/CardItem';\r\nimport ListItem from './components/ListItem';\r\nimport checkOverflowingTags from './helpers/checkOverflowingTags';\r\n\r\napp.initializers.add('walsgit/discussion/cards', () => {\r\n\r\n extend(DiscussionList.prototype, 'oncreate', checkOverflowingTags);\r\n extend(DiscussionList.prototype, 'onupdate', checkOverflowingTags);\r\n\r\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\r\n if (app.current.matches(IndexPage)) {\r\n params.include.push(['firstPost', 'posts', 'posts.user']);\r\n }\r\n });\r\n\r\n override(DiscussionList.prototype, 'view', function (original) {\r\n const settings = {};\r\n for (const key in app.forum.data.attributes) {\r\n if (key.startsWith('walsgitDiscussionCards')) {\r\n let newKey = key.replace('walsgitDiscussionCards', '');\r\n newKey = newKey.replace(/^./, newKey.charAt(0).toLowerCase());\r\n settings[newKey] = app.forum.data.attributes[key];\r\n }\r\n }\r\n const state = this.attrs.state;\r\n const params = state.getParams();\r\n let loading;\r\n if (state.isInitialLoading() || state.isLoadingNext()) {\r\n loading =
;\r\n } else if (state.hasNext()) {\r\n loading = Button.component(\r\n {\r\n className: 'Button',\r\n onclick: state.loadNext.bind(state),\r\n },\r\n app.translator.trans('core.forum.discussion_list.load_more_button')\r\n );\r\n }\r\n if (state.isEmpty()) {\r\n const text = app.translator.trans('core.forum.discussion_list.empty_text');\r\n return
{m(Placeholder, {text})}
;\r\n }\r\n const isTagPage = m.route.get().split('?')[0].startsWith('/t/');\r\n let tag = null;\r\n if (isTagPage) {\r\n tag = app.store.all('tags').find(t => t.slug() === params.tags).data.id;\r\n const tagSettings = JSON.parse(app.store.all('tags').find(t => t.slug() === params.tags).data.attributes.walsgitDiscussionCardsTagSettings);\r\n for (const key in tagSettings) {\r\n if (settings.hasOwnProperty(key) && tagSettings[key] !== settings[key]) {\r\n settings[key] = tagSettings[key];\r\n }\r\n }\r\n }\r\n if (app.current.matches(IndexPage) && ((settings.allowedTags.length && settings.allowedTags.includes(tag)) || (!params.tags && Number(settings.onIndexPage) === 1))) {\r\n return (\r\n
\r\n
\r\n {state.getPages().map((pg, o) => {\r\n return pg.items.map((discussion, i) => {\r\n return (i < Number(settings.primaryCards) && o === 0)\r\n ? m(CardItem, {discussion: discussion})\r\n : m(ListItem, {discussion: discussion})\r\n });\r\n })}\r\n
\r\n
{loading}
\r\n
\r\n );\r\n\r\n } else {\r\n return original();\r\n }\r\n })\r\n}, -1);\r\n\r\n\r\n// Expose compat API\r\nimport extCompat from './compat';\r\nimport {compat} from '@flarum/core/forum';\r\n\r\nObject.assign(compat, extCompat);\r\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","flarum","core","compat","_setPrototypeOf","t","e","setPrototypeOf","bind","__proto__","_inheritsLoose","create","constructor","craftBadges","badges","length","m","map","badge","Tooltip","text","attrs","label","position","type","icon","isValideImageUrl","url","parsedUrl","startsWith","URL","_unused","extension","pathname","split","pop","toLowerCase","includes","getPostImage","post","image","isblogPost","assetImage","app","forum","attribute","src","exec","contentHtml","craftTags","tags","sortTags","tag","Link","className","style","backgroundColor","color","href","route","slug","name","LastReplies","_Component","apply","arguments","_proto","oninit","vnode","this","discussion","view","posts","splice","filter","isHidden","number","contentType","sort","b","createdAt","user","i","self","indexOf","reverse","avatar","Component","compareTags","currentTag","priorityTag","isChild","parent","id","cardItem","settings","data","attributes","newKey","replace","charAt","blogActivated","blogSettings","postIsBlogType","relationships","blogPost","defaultImage","blogPostsData","store","blogMeta","featuredImage","tagId","repostActivated","extensions","repostUrl","original_url","isTagPage","_m$route$get$split$","all","find","tagSettings","JSON","parse","walsgitDiscussionCardsTagSettings","tagImage","walsgitDiscussionCardsTagDefaultImage","Number","useBlogImages","tagCustomImg","allowedTags","isRead","markReadCards","session","showAuthor","firstPost","media","alt","title","loading","DiscussionControls","toArray","Dropdown","buttonClassName","showBadges","'['","showViews","isNaN","views","username","humanTime","allowRepostLinks","onclick","stopPropagation","truncate","previewText","useBlogSummary","summary","contentPlain","showLastPostInfo","TerminalPost","lastPost","lastPostNumber","showReplies","translator","trans","count","replyCount","listItem","screen","showRepliesOnRight","abbreviateNumber","checkOverflowingTags","cardListItemsOnPrimary","document","querySelectorAll","cardListItems","toggleOverflowClass","cardTags","cardListItem","scrollWidth","clientWidth","classList","add","remove","forEach","querySelector","CardItem","ListItem","extend","DiscussionList","DiscussionListState","params","matches","IndexPage","include","push","override","original","state","getParams","isInitialLoading","isLoadingNext","LoadingIndicator","hasNext","Button","loadNext","isEmpty","Placeholder","onIndexPage","isSearchResults","class","getPages","pg","items","primaryCards","assign","extCompat"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/src/admin/components/Settings.js b/js/src/admin/components/Settings.js
index 4bf8611..d2518bd 100644
--- a/js/src/admin/components/Settings.js
+++ b/js/src/admin/components/Settings.js
@@ -128,14 +128,12 @@ export default class Settings extends ExtensionPage {
setting: "walsgit_discussion_cards_showRepliesOnRight",
label: app.translator.trans("walsgit_discussion_cards.admin.settings.general.showRepliesOnRight_label"),
help: app.translator.trans("walsgit_discussion_cards.admin.settings.general.showRepliesOnRight_help"),
- disabled: isExtensionActive(viewsExtension.id) ? false : true,
})}
{this.buildSettingComponent({
type: "switch",
setting: "walsgit_discussion_cards_showLastPostInfo",
label: app.translator.trans("walsgit_discussion_cards.admin.settings.general.showLastPostInfo_label"),
help: app.translator.trans("walsgit_discussion_cards.admin.settings.general.showLastPostInfo_help"),
- disabled: isExtensionActive(viewsExtension.id) ? false : true,
})}
{this.buildSettingComponent({
type: "switch",
@@ -165,7 +163,7 @@ export default class Settings extends ExtensionPage {
{!isExtensionInstalled(viewsExtension.id)
- ? + app.translator.trans("walsgit_discussion_cards.admin.settings.general.viewsExtension_notInstalled", {icon: warningIcon}) :
+ ? app.translator.trans("walsgit_discussion_cards.admin.settings.general.viewsExtension_notInstalled", {icon: warningIcon}) :
!isExtensionActive(viewsExtension.id)
? app.translator.trans("walsgit_discussion_cards.admin.settings.general.viewsExtension_notActivated", {icon: warningIcon}) :
''}
@@ -188,7 +186,7 @@ export default class Settings extends ExtensionPage {
{!isExtensionInstalled(blogExtension.id)
- ? + app.translator.trans("walsgit_discussion_cards.admin.settings.general.blogExtension_notInstalled", {icon: warningIcon}) :
+ ? app.translator.trans("walsgit_discussion_cards.admin.settings.general.blogExtension_notInstalled", {icon: warningIcon}) :
!isExtensionActive(blogExtension.id)
? app.translator.trans("walsgit_discussion_cards.admin.settings.general.blogExtension_notActivated", {icon: warningIcon}) :
''}
@@ -218,7 +216,7 @@ export default class Settings extends ExtensionPage {
{!isExtensionInstalled(repostExtension.id)
- ? + app.translator.trans("walsgit_discussion_cards.admin.settings.general.repostExtension_notInstalled", {icon: warningIcon}) :
+ ? app.translator.trans("walsgit_discussion_cards.admin.settings.general.repostExtension_notInstalled", {icon: warningIcon}) :
!isExtensionActive(repostExtension.id)
? app.translator.trans("walsgit_discussion_cards.admin.settings.general.repostExtension_notActivated", {icon: warningIcon}) :
''}