From 856bb8a0da118b648b62740fe312e4f2152d7c28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Klabbers?= Date: Wed, 29 Jun 2022 15:37:03 +0200 Subject: [PATCH] reduced required query amount --- extensions/likes/extend.php | 25 +- extensions/likes/js/dist/admin.js | 120 +++- extensions/likes/js/dist/admin.js.map | 2 +- extensions/likes/js/dist/forum.js | 622 +++++++++++++++++- extensions/likes/js/dist/forum.js.map | 2 +- extensions/likes/js/src/forum/addLikesList.js | 26 +- extensions/likes/js/src/forum/index.js | 1 + .../src/Model/RecentLikesRelationship.php | 3 - 8 files changed, 778 insertions(+), 23 deletions(-) diff --git a/extensions/likes/extend.php b/extensions/likes/extend.php index 2781c5b90..8c42d31f5 100644 --- a/extensions/likes/extend.php +++ b/extensions/likes/extend.php @@ -27,8 +27,8 @@ return [ ->js(__DIR__.'/js/dist/admin.js'), (new Extend\Model(Post::class)) - ->relationship('recentLikes', Model\RecentLikesRelationship::class) - ->belongsToMany('likes', User::class, 'post_likes', 'post_id', 'user_id'), + ->belongsToMany('likes', User::class, 'post_likes', 'post_id', 'user_id') + ->relationship('recentLikes', Model\RecentLikesRelationship::class), new Extend\Locales(__DIR__.'/locale'), @@ -38,7 +38,11 @@ return [ (new Extend\ApiSerializer(PostSerializer::class)) ->relationship('recentLikes', Api\RecentLikesRelationship::class) ->attributes(function (PostSerializer $serializer, $model, $attributes) { - if ($model->likes_count) $attributes['likesCount'] = $model->likes_count; + $actor = $serializer->getActor(); + $model->loadCount('likes'); + $attributes['likesCount'] = $model->likes_count; + $attributes['likedByActor'] = $actor && $model->likes()->where('id', $actor->id)->exists(); + return $attributes; }) ->hasMany('likes', BasicUserSerializer::class) @@ -48,20 +52,25 @@ return [ (new Extend\ApiController(Controller\ShowDiscussionController::class)) ->addOptionalInclude('posts.likes') - ->addInclude('posts.recentLikes'), + ->addInclude('posts.recentLikes') + ->load('posts.recentLikes'), (new Extend\ApiController(Controller\ListPostsController::class)) ->addOptionalInclude('likes') - ->addInclude('recentLikes'), + ->addInclude('recentLikes') + ->load('posts.recentLikes'), (new Extend\ApiController(Controller\ShowPostController::class)) ->addOptionalInclude('likes') - ->addInclude('recentLikes'), + ->addInclude('recentLikes') + ->load('posts.recentLikes'), (new Extend\ApiController(Controller\CreatePostController::class)) ->addOptionalInclude('likes') - ->addInclude('recentLikes'), + ->addInclude('recentLikes') + ->load('posts.recentLikes'), (new Extend\ApiController(Controller\UpdatePostController::class)) ->addOptionalInclude('likes') - ->addInclude('recentLikes'), + ->addInclude('recentLikes') + ->load('posts.recentLikes'), (new Extend\Event()) ->listen(Event\PostWasLiked::class, Listener\SendNotificationWhenPostIsLiked::class) diff --git a/extensions/likes/js/dist/admin.js b/extensions/likes/js/dist/admin.js index d7639462d..01f439daf 100644 --- a/extensions/likes/js/dist/admin.js +++ b/extensions/likes/js/dist/admin.js @@ -1,2 +1,120 @@ -(()=>{var e={n:r=>{var o=r&&r.__esModule?()=>r.default:()=>r;return e.d(o,{a:o}),o},d:(r,o)=>{for(var t in o)e.o(o,t)&&!e.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:o[t]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r);const o=flarum.core.compat["admin/app"];var t=e.n(o);t().initializers.add("flarum-likes",(function(){t().extensionData.for("flarum-likes").registerPermission({icon:"far fa-thumbs-up",label:t().translator.trans("flarum-likes.admin.permissions.like_posts_label"),permission:"discussion.likePosts"},"reply")}))})(),module.exports=r})(); +/******/ (() => { // webpackBootstrap +/******/ // runtime can't be in strict mode because a global variable is assign and maybe created. +/******/ var __webpack_modules__ = ({ + +/***/ "./src/admin/index.js": +/*!****************************!*\ + !*** ./src/admin/index.js ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/admin/app */ "flarum/admin/app"); +/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__); + +flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default().initializers.add('flarum-likes', function () { + flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default().extensionData["for"]('flarum-likes').registerPermission({ + icon: 'far fa-thumbs-up', + label: flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default().translator.trans('flarum-likes.admin.permissions.like_posts_label'), + permission: 'discussion.likePosts' + }, 'reply'); +}); + +/***/ }), + +/***/ "flarum/admin/app": +/*!**************************************************!*\ + !*** external "flarum.core.compat['admin/app']" ***! + \**************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['admin/app']; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!******************!*\ + !*** ./admin.js ***! + \******************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _src_admin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/admin */ "./src/admin/index.js"); + +})(); + +module.exports = __webpack_exports__; +/******/ })() +; //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/likes/js/dist/admin.js.map b/extensions/likes/js/dist/admin.js.map index dbc4b9c4f..a4dfa5404 100644 --- a/extensions/likes/js/dist/admin.js.map +++ b/extensions/likes/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GCLRF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3ER,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,M,+BCLvD,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAAA,IAAqB,gBAAgB,WACnCA,IAAAA,cAAAA,IAAsB,gBAAgBC,mBACpC,CACEC,KAAM,mBACNC,MAAOH,IAAAA,WAAAA,MAAqB,mDAC5BI,WAAY,wBAEd,a","sources":["webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/likes/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-likes', () => {\n app.extensionData.for('flarum-likes').registerPermission(\n {\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),\n permission: 'discussion.likePosts',\n },\n 'reply'\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","registerPermission","icon","label","permission"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":";;;;;;;;;;;;;;AAAA;AAEAA,wEAAA,CAAqB,cAArB,EAAqC,YAAM;AACzCA,EAAAA,4EAAA,CAAsB,cAAtB,EAAsCI,kBAAtC,CACE;AACEC,IAAAA,IAAI,EAAE,kBADR;AAEEC,IAAAA,KAAK,EAAEN,wEAAA,CAAqB,iDAArB,CAFT;AAGES,IAAAA,UAAU,EAAE;AAHd,GADF,EAME,OANF;AAQD,CATD;;;;;;;;;;;ACFA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D","sources":["webpack://@flarum/likes/./src/admin/index.js","webpack://@flarum/likes/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/./admin.js"],"sourcesContent":["import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-likes', () => {\n app.extensionData.for('flarum-likes').registerPermission(\n {\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),\n permission: 'discussion.likePosts',\n },\n 'reply'\n );\n});\n","module.exports = flarum.core.compat['admin/app'];","// 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\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.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","// 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};","export * from './src/admin';\n"],"names":["app","initializers","add","extensionData","registerPermission","icon","label","translator","trans","permission"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/likes/js/dist/forum.js b/extensions/likes/js/dist/forum.js index 7918fec49..45d168026 100644 --- a/extensions/likes/js/dist/forum.js +++ b/extensions/likes/js/dist/forum.js @@ -1,2 +1,622 @@ -(()=>{var t={n:o=>{var e=o&&o.__esModule?()=>o.default:()=>o;return t.d(e,{a:e}),e},d:(o,e)=>{for(var n in e)t.o(e,n)&&!t.o(o,n)&&Object.defineProperty(o,n,{enumerable:!0,get:e[n]})},o:(t,o)=>Object.prototype.hasOwnProperty.call(t,o),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},o={};(()=>{"use strict";t.r(o);const e=flarum.core.compat["common/extend"],n=flarum.core.compat["forum/app"];var r=t.n(n);const s=flarum.core.compat["common/models/Post"];var a=t.n(s);const i=flarum.core.compat["common/Model"];var c=t.n(i);const u=flarum.core.compat["forum/components/NotificationGrid"];var l=t.n(u);const f=flarum.core.compat["common/components/Button"];var p=t.n(f);const d=flarum.core.compat["forum/components/CommentPost"];var k=t.n(d);const h=flarum.core.compat["common/components/Link"];var v=t.n(h);const y=flarum.core.compat["common/helpers/punctuateSeries"];var b=t.n(y);const _=flarum.core.compat["common/helpers/username"];var g=t.n(_);const L=flarum.core.compat["common/helpers/icon"];var M=t.n(L);function P(t,o){return P=Object.setPrototypeOf||function(t,o){return t.__proto__=o,t},P(t,o)}function x(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,P(t,o)}const j=flarum.core.compat["common/components/Modal"];var O=t.n(j);const N=flarum.core.compat["common/helpers/avatar"];var S=t.n(N),B=function(t){function o(){return t.apply(this,arguments)||this}x(o,t);var e=o.prototype;return e.className=function(){return"PostLikesModal Modal--small"},e.title=function(){return r().translator.trans("flarum-likes.forum.post_likes.title")},e.content=function(){return m("div",{className:"Modal-body"},m("ul",{className:"PostLikesModal-list"},this.attrs.post.likes().map((function(t){return m("li",null,m(v(),{href:r().route.user(t)},S()(t)," ",g()(t)))}))))},o}(O());const C=flarum.core.compat["forum/components/Notification"];var T=t.n(C);const w=flarum.core.compat["common/utils/string"];var I=function(t){function o(){return t.apply(this,arguments)||this}x(o,t);var e=o.prototype;return e.icon=function(){return"far fa-thumbs-up"},e.href=function(){return r().route.post(this.attrs.notification.subject())},e.content=function(){var t=this.attrs.notification.fromUser();return r().translator.trans("flarum-likes.forum.notifications.post_liked_text",{user:t,count:1})},e.excerpt=function(){return(0,w.truncate)(this.attrs.notification.subject().contentPlain(),200)},o}(T());r().initializers.add("flarum-likes",(function(){r().notificationComponents.postLiked=I,a().prototype.canLike=c().attribute("canLike"),a().prototype.likes=c().hasMany("likes"),a().prototype.likesCount=c().attribute("likesCount"),a().prototype.recentLikes=c().hasMany("recentLikes"),(0,e.extend)(k().prototype,"actionItems",(function(t){var o=this.attrs.post;if(!o.isHidden()&&o.canLike()){var e=o.likes(),n=r().session.user&&e&&e.some((function(t){return t===r().session.user}));t.add("like",p().component({className:"Button Button--link",onclick:function(){n=!n,o.save({isLiked:n});var t=o.data.relationships.likes.data;t.some((function(o,e){if(o.id===r().session.user.id())return t.splice(e,1),!0})),n&&t.unshift({type:"users",id:r().session.user.id()})}},r().translator.trans(n?"flarum-likes.forum.post.unlike_link":"flarum-likes.forum.post.like_link")))}})),(0,e.extend)(k().prototype,"footerItems",(function(t){var o=this.attrs.post,e=o.likes();if(e&&e.length){var n=e.length>4,s=e.sort((function(t){return t===r().session.user?-1:1})).slice(0,n?3:4).map((function(t){return m(v(),{href:r().route.user(t)},t===r().session.user?r().translator.trans("flarum-likes.forum.post.you_text"):g()(t))}));if(n){var a=e.length-s.length;s.push(m("a",{href:"#",onclick:function(t){t.preventDefault(),r().modal.show(B,{post:o})}},r().translator.trans("flarum-likes.forum.post.others_link",{count:a})))}t.add("liked",m("div",{className:"Post-likedBy"},M()("far fa-thumbs-up"),r().translator.trans("flarum-likes.forum.post.liked_by"+(e[0]===r().session.user?"_self":"")+"_text",{count:s.length,users:b()(s)})))}})),(0,e.extend)(l().prototype,"notificationTypes",(function(t){t.add("postLiked",{name:"postLiked",icon:"far fa-thumbs-up",label:r().translator.trans("flarum-likes.forum.settings.notify_post_liked_label")})}))}))})(),module.exports=o})(); +/******/ (() => { // webpackBootstrap +/******/ // runtime can't be in strict mode because a global variable is assign and maybe created. +/******/ var __webpack_modules__ = ({ + +/***/ "./src/forum/addLikeAction.js": +/*!************************************!*\ + !*** ./src/forum/addLikeAction.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/common/extend */ "flarum/common/extend"); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/forum/app */ "flarum/forum/app"); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/common/components/Button */ "flarum/common/components/Button"); +/* harmony import */ var flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/forum/components/CommentPost */ "flarum/forum/components/CommentPost"); +/* harmony import */ var flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_3__); + + + + +/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { + (0,flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__.extend)((flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_3___default().prototype), 'actionItems', function (items) { + var post = this.attrs.post; + if (post.isHidden() || !post.canLike()) return; + var likes = post.likes(); + var isLiked = (flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user) && likes && likes.some(function (user) { + return user === (flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user); + }); + items.add('like', flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_2___default().component({ + className: 'Button Button--link', + onclick: function onclick() { + isLiked = !isLiked; + post.save({ + isLiked: isLiked + }); // We've saved the fact that we do or don't like the post, but in order + // to provide instantaneous feedback to the user, we'll need to add or + // remove the like from the relationship data manually. + + var data = post.data.relationships.likes.data; + data.some(function (like, i) { + if (like.id === flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user.id()) { + data.splice(i, 1); + return true; + } + }); + + if (isLiked) { + data.unshift({ + type: 'users', + id: flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user.id() + }); + } + } + }, flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans(isLiked ? 'flarum-likes.forum.post.unlike_link' : 'flarum-likes.forum.post.like_link'))); + }); +} + +/***/ }), + +/***/ "./src/forum/addLikesList.js": +/*!***********************************!*\ + !*** ./src/forum/addLikesList.js ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/common/extend */ "flarum/common/extend"); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/forum/app */ "flarum/forum/app"); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/forum/components/CommentPost */ "flarum/forum/components/CommentPost"); +/* harmony import */ var flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/common/components/Link */ "flarum/common/components/Link"); +/* harmony import */ var flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var flarum_common_helpers_punctuateSeries__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/common/helpers/punctuateSeries */ "flarum/common/helpers/punctuateSeries"); +/* harmony import */ var flarum_common_helpers_punctuateSeries__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_common_helpers_punctuateSeries__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/common/helpers/username */ "flarum/common/helpers/username"); +/* harmony import */ var flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/common/helpers/icon */ "flarum/common/helpers/icon"); +/* harmony import */ var flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _components_PostLikesModal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/PostLikesModal */ "./src/forum/components/PostLikesModal.js"); + + + + + + + + +/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { + (0,flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__.extend)((flarum_forum_components_CommentPost__WEBPACK_IMPORTED_MODULE_2___default().prototype), 'footerItems', function (items) { + var post = this.attrs.post; + var likes = post.recentLikes(); + var count = post.likesCount(); + + if (likes && likes.length) { + // the limit is dynamic through the backend, we only load those we need + var limit = likes.length; // overLimit indicates there are more likes than the ones we render (and load) + + var overLimit = count > likes.length; // Construct a list of names of users who have liked this post. Make sure the + // current user is first in the list, and cap a maximum of 4 items. + + var names = likes.filter(function (a) { + return a !== (flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user); + }).slice(0, limit).map(function (user) { + return m((flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3___default()), { + href: flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().route.user(user) + }, user === (flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user) ? flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans('flarum-likes.forum.post.you_text') : flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5___default()(user)); + }); + + if (post.likedByActor()) { + names.unshift(m((flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3___default()), { + href: flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().route.user((flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user)) + }, flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans('flarum-likes.forum.post.you_text'))); + } // If there are more users that we've run out of room to display, add a "x + // others" name to the end of the list. Clicking on it will display a modal + // with a full list of names. + + + if (overLimit) { + names.push(m("a", { + href: "#", + onclick: function onclick(e) { + e.preventDefault(); + flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().modal.show(_components_PostLikesModal__WEBPACK_IMPORTED_MODULE_7__["default"], { + post: post + }); + } + }, flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans('flarum-likes.forum.post.others_link', { + count: count - likes.length + }))); + } + + items.add('liked', m("div", { + className: "Post-likedBy" + }, flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_6___default()('far fa-thumbs-up'), flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans('flarum-likes.forum.post.liked_by' + (likes[0] === (flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().session.user) ? '_self' : '') + '_text', { + count: names.length, + users: flarum_common_helpers_punctuateSeries__WEBPACK_IMPORTED_MODULE_4___default()(names) + }))); + } + }); +} + +/***/ }), + +/***/ "./src/forum/components/PostLikedNotification.js": +/*!*******************************************************!*\ + !*** ./src/forum/components/PostLikedNotification.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ PostLikedNotification) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/forum/app */ "flarum/forum/app"); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_forum_components_Notification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/forum/components/Notification */ "flarum/forum/components/Notification"); +/* harmony import */ var flarum_forum_components_Notification__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_components_Notification__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_common_utils_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/common/utils/string */ "flarum/common/utils/string"); +/* harmony import */ var flarum_common_utils_string__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_common_utils_string__WEBPACK_IMPORTED_MODULE_3__); + + + + + +var PostLikedNotification = /*#__PURE__*/function (_Notification) { + (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(PostLikedNotification, _Notification); + + function PostLikedNotification() { + return _Notification.apply(this, arguments) || this; + } + + var _proto = PostLikedNotification.prototype; + + _proto.icon = function icon() { + return 'far fa-thumbs-up'; + }; + + _proto.href = function href() { + return flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().route.post(this.attrs.notification.subject()); + }; + + _proto.content = function content() { + var notification = this.attrs.notification; + var user = notification.fromUser(); + return flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans('flarum-likes.forum.notifications.post_liked_text', { + user: user, + count: 1 + }); + }; + + _proto.excerpt = function excerpt() { + return (0,flarum_common_utils_string__WEBPACK_IMPORTED_MODULE_3__.truncate)(this.attrs.notification.subject().contentPlain(), 200); + }; + + return PostLikedNotification; +}((flarum_forum_components_Notification__WEBPACK_IMPORTED_MODULE_2___default())); + + + +/***/ }), + +/***/ "./src/forum/components/PostLikesModal.js": +/*!************************************************!*\ + !*** ./src/forum/components/PostLikesModal.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ PostLikesModal) +/* harmony export */ }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/forum/app */ "flarum/forum/app"); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/common/components/Modal */ "flarum/common/components/Modal"); +/* harmony import */ var flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/common/components/Link */ "flarum/common/components/Link"); +/* harmony import */ var flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var flarum_common_helpers_avatar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/common/helpers/avatar */ "flarum/common/helpers/avatar"); +/* harmony import */ var flarum_common_helpers_avatar__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_common_helpers_avatar__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/common/helpers/username */ "flarum/common/helpers/username"); +/* harmony import */ var flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5__); + + + + + + + +var PostLikesModal = /*#__PURE__*/function (_Modal) { + (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(PostLikesModal, _Modal); + + function PostLikesModal() { + return _Modal.apply(this, arguments) || this; + } + + var _proto = PostLikesModal.prototype; + + _proto.className = function className() { + return 'PostLikesModal Modal--small'; + }; + + _proto.title = function title() { + return flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans('flarum-likes.forum.post_likes.title'); + }; + + _proto.content = function content() { + return m("div", { + className: "Modal-body" + }, m("ul", { + className: "PostLikesModal-list" + }, this.attrs.post.likes().map(function (user) { + return m("li", null, m((flarum_common_components_Link__WEBPACK_IMPORTED_MODULE_3___default()), { + href: flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().route.user(user) + }, flarum_common_helpers_avatar__WEBPACK_IMPORTED_MODULE_4___default()(user), " ", flarum_common_helpers_username__WEBPACK_IMPORTED_MODULE_5___default()(user))); + }))); + }; + + return PostLikesModal; +}((flarum_common_components_Modal__WEBPACK_IMPORTED_MODULE_2___default())); + + + +/***/ }), + +/***/ "./src/forum/index.js": +/*!****************************!*\ + !*** ./src/forum/index.js ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/common/extend */ "flarum/common/extend"); +/* harmony import */ var flarum_common_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/forum/app */ "flarum/forum/app"); +/* harmony import */ var flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/common/models/Post */ "flarum/common/models/Post"); +/* harmony import */ var flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_common_Model__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/common/Model */ "flarum/common/Model"); +/* harmony import */ var flarum_common_Model__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_common_Model__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var flarum_forum_components_NotificationGrid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/forum/components/NotificationGrid */ "flarum/forum/components/NotificationGrid"); +/* harmony import */ var flarum_forum_components_NotificationGrid__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_forum_components_NotificationGrid__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _addLikeAction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./addLikeAction */ "./src/forum/addLikeAction.js"); +/* harmony import */ var _addLikesList__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./addLikesList */ "./src/forum/addLikesList.js"); +/* harmony import */ var _components_PostLikedNotification__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/PostLikedNotification */ "./src/forum/components/PostLikedNotification.js"); + + + + + + + + +flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().initializers.add('flarum-likes', function () { + (flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().notificationComponents.postLiked) = _components_PostLikedNotification__WEBPACK_IMPORTED_MODULE_7__["default"]; + (flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2___default().prototype.canLike) = flarum_common_Model__WEBPACK_IMPORTED_MODULE_3___default().attribute('canLike'); + (flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2___default().prototype.likes) = flarum_common_Model__WEBPACK_IMPORTED_MODULE_3___default().hasMany('likes'); + (flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2___default().prototype.likesCount) = flarum_common_Model__WEBPACK_IMPORTED_MODULE_3___default().attribute('likesCount'); + (flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2___default().prototype.recentLikes) = flarum_common_Model__WEBPACK_IMPORTED_MODULE_3___default().hasMany('recentLikes'); + (flarum_common_models_Post__WEBPACK_IMPORTED_MODULE_2___default().prototype.likedByActor) = flarum_common_Model__WEBPACK_IMPORTED_MODULE_3___default().attribute('likedByActor'); + (0,_addLikeAction__WEBPACK_IMPORTED_MODULE_5__["default"])(); + (0,_addLikesList__WEBPACK_IMPORTED_MODULE_6__["default"])(); + (0,flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__.extend)((flarum_forum_components_NotificationGrid__WEBPACK_IMPORTED_MODULE_4___default().prototype), 'notificationTypes', function (items) { + items.add('postLiked', { + name: 'postLiked', + icon: 'far fa-thumbs-up', + label: flarum_forum_app__WEBPACK_IMPORTED_MODULE_1___default().translator.trans('flarum-likes.forum.settings.notify_post_liked_label') + }); + }); +}); + +/***/ }), + +/***/ "flarum/common/Model": +/*!*****************************************************!*\ + !*** external "flarum.core.compat['common/Model']" ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/Model']; + +/***/ }), + +/***/ "flarum/common/components/Button": +/*!*****************************************************************!*\ + !*** external "flarum.core.compat['common/components/Button']" ***! + \*****************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/components/Button']; + +/***/ }), + +/***/ "flarum/common/components/Link": +/*!***************************************************************!*\ + !*** external "flarum.core.compat['common/components/Link']" ***! + \***************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/components/Link']; + +/***/ }), + +/***/ "flarum/common/components/Modal": +/*!****************************************************************!*\ + !*** external "flarum.core.compat['common/components/Modal']" ***! + \****************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/components/Modal']; + +/***/ }), + +/***/ "flarum/common/extend": +/*!******************************************************!*\ + !*** external "flarum.core.compat['common/extend']" ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/extend']; + +/***/ }), + +/***/ "flarum/common/helpers/avatar": +/*!**************************************************************!*\ + !*** external "flarum.core.compat['common/helpers/avatar']" ***! + \**************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/helpers/avatar']; + +/***/ }), + +/***/ "flarum/common/helpers/icon": +/*!************************************************************!*\ + !*** external "flarum.core.compat['common/helpers/icon']" ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/helpers/icon']; + +/***/ }), + +/***/ "flarum/common/helpers/punctuateSeries": +/*!***********************************************************************!*\ + !*** external "flarum.core.compat['common/helpers/punctuateSeries']" ***! + \***********************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/helpers/punctuateSeries']; + +/***/ }), + +/***/ "flarum/common/helpers/username": +/*!****************************************************************!*\ + !*** external "flarum.core.compat['common/helpers/username']" ***! + \****************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/helpers/username']; + +/***/ }), + +/***/ "flarum/common/models/Post": +/*!***********************************************************!*\ + !*** external "flarum.core.compat['common/models/Post']" ***! + \***********************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/models/Post']; + +/***/ }), + +/***/ "flarum/common/utils/string": +/*!************************************************************!*\ + !*** external "flarum.core.compat['common/utils/string']" ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['common/utils/string']; + +/***/ }), + +/***/ "flarum/forum/app": +/*!**************************************************!*\ + !*** external "flarum.core.compat['forum/app']" ***! + \**************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['forum/app']; + +/***/ }), + +/***/ "flarum/forum/components/CommentPost": +/*!*********************************************************************!*\ + !*** external "flarum.core.compat['forum/components/CommentPost']" ***! + \*********************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['forum/components/CommentPost']; + +/***/ }), + +/***/ "flarum/forum/components/Notification": +/*!**********************************************************************!*\ + !*** external "flarum.core.compat['forum/components/Notification']" ***! + \**********************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['forum/components/Notification']; + +/***/ }), + +/***/ "flarum/forum/components/NotificationGrid": +/*!**************************************************************************!*\ + !*** external "flarum.core.compat['forum/components/NotificationGrid']" ***! + \**************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = flarum.core.compat['forum/components/NotificationGrid']; + +/***/ }), + +/***/ "../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": +/*!*************************************************************************!*\ + !*** ../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ _inheritsLoose) +/* harmony export */ }); +/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ "../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"); + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__["default"])(subClass, superClass); +} + +/***/ }), + +/***/ "../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js": +/*!**************************************************************************!*\ + !*** ../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ _setPrototypeOf) +/* harmony export */ }); +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!******************!*\ + !*** ./forum.js ***! + \******************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _src_forum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/forum */ "./src/forum/index.js"); + +})(); + +module.exports = __webpack_exports__; +/******/ })() +; //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/likes/js/dist/forum.js.map b/extensions/likes/js/dist/forum.js.map index 69b54a7e2..6d5a6fc1b 100644 --- a/extensions/likes/js/dist/forum.js.map +++ b/extensions/likes/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/models/Post']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/Model']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@flarum/likes/./src/forum/components/PostLikesModal.js","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/utils/string']\"","webpack://@flarum/likes/./src/forum/components/PostLikedNotification.js","webpack://@flarum/likes/./src/forum/index.js","webpack://@flarum/likes/./src/forum/addLikeAction.js","webpack://@flarum/likes/./src/forum/addLikesList.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/models/Post'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/NotificationGrid'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/CommentPost'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/punctuateSeries'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/username'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/icon'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/avatar'];","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Link from 'flarum/common/components/Link';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\n\nexport default class PostLikesModal extends Modal {\n className() {\n return 'PostLikesModal Modal--small';\n }\n\n title() {\n return app.translator.trans('flarum-likes.forum.post_likes.title');\n }\n\n content() {\n return (\n
\n \n
\n );\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Notification'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/string'];","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class PostLikedNotification extends Notification {\n icon() {\n return 'far fa-thumbs-up';\n }\n\n href() {\n return app.route.post(this.attrs.notification.subject());\n }\n\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n\n return app.translator.trans('flarum-likes.forum.notifications.post_liked_text', { user, count: 1 });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Post from 'flarum/common/models/Post';\nimport Model from 'flarum/common/Model';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\n\nimport addLikeAction from './addLikeAction';\nimport addLikesList from './addLikesList';\nimport PostLikedNotification from './components/PostLikedNotification';\n\napp.initializers.add('flarum-likes', () => {\n app.notificationComponents.postLiked = PostLikedNotification;\n\n Post.prototype.canLike = Model.attribute('canLike');\n Post.prototype.likes = Model.hasMany('likes');\n\n Post.prototype.likesCount = Model.attribute('likesCount');\n Post.prototype.recentLikes = Model.hasMany('recentLikes');\n\n addLikeAction();\n addLikesList();\n\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('postLiked', {\n name: 'postLiked',\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.forum.settings.notify_post_liked_label'),\n });\n });\n});\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nexport default function () {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n\n if (post.isHidden() || !post.canLike()) return;\n\n const likes = post.likes();\n\n let isLiked = app.session.user && likes && likes.some((user) => user === app.session.user);\n\n items.add(\n 'like',\n Button.component(\n {\n className: 'Button Button--link',\n onclick: () => {\n isLiked = !isLiked;\n\n post.save({ isLiked });\n\n // We've saved the fact that we do or don't like the post, but in order\n // to provide instantaneous feedback to the user, we'll need to add or\n // remove the like from the relationship data manually.\n const data = post.data.relationships.likes.data;\n data.some((like, i) => {\n if (like.id === app.session.user.id()) {\n data.splice(i, 1);\n return true;\n }\n });\n\n if (isLiked) {\n data.unshift({ type: 'users', id: app.session.user.id() });\n }\n },\n },\n app.translator.trans(isLiked ? 'flarum-likes.forum.post.unlike_link' : 'flarum-likes.forum.post.like_link')\n )\n );\n });\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport username from 'flarum/common/helpers/username';\nimport icon from 'flarum/common/helpers/icon';\n\nimport PostLikesModal from './components/PostLikesModal';\n\nexport default function () {\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const likes = post.likes();\n\n if (likes && likes.length) {\n const limit = 4;\n const overLimit = likes.length > limit;\n\n // Construct a list of names of users who have liked this post. Make sure the\n // current user is first in the list, and cap a maximum of 4 items.\n const names = likes\n .sort((a) => (a === app.session.user ? -1 : 1))\n .slice(0, overLimit ? limit - 1 : limit)\n .map((user) => {\n return (\n \n {user === app.session.user ? app.translator.trans('flarum-likes.forum.post.you_text') : username(user)}\n \n );\n });\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = likes.length - names.length;\n\n names.push(\n {\n e.preventDefault();\n app.modal.show(PostLikesModal, { post });\n }}\n >\n {app.translator.trans('flarum-likes.forum.post.others_link', { count })}\n \n );\n }\n\n items.add(\n 'liked',\n
\n {icon('far fa-thumbs-up')}\n {app.translator.trans('flarum-likes.forum.post.liked_by' + (likes[0] === app.session.user ? '_self' : '') + '_text', {\n count: names.length,\n users: punctuateSeries(names),\n })}\n
\n );\n }\n });\n}\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","_setPrototypeOf","p","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","create","constructor","PostLikesModal","className","title","app","content","this","attrs","post","likes","map","user","href","avatar","username","Modal","PostLikedNotification","icon","notification","subject","fromUser","count","excerpt","truncate","contentPlain","Notification","Post","Model","extend","CommentPost","items","isHidden","canLike","isLiked","some","add","Button","onclick","save","data","relationships","like","i","id","splice","unshift","type","length","overLimit","names","sort","slice","limit","push","e","preventDefault","users","punctuateSeries","NotificationGrid","name","label"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/likes/./src/forum/addLikeAction.js","webpack://@flarum/likes/./src/forum/addLikesList.js","webpack://@flarum/likes/./src/forum/components/PostLikedNotification.js","webpack://@flarum/likes/./src/forum/components/PostLikesModal.js","webpack://@flarum/likes/./src/forum/index.js","webpack://@flarum/likes/external root \"flarum.core.compat['common/Model']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Link']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/components/Modal']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/avatar']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/icon']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/helpers/username']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/models/Post']\"","webpack://@flarum/likes/external root \"flarum.core.compat['common/utils/string']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/CommentPost']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/Notification']\"","webpack://@flarum/likes/external root \"flarum.core.compat['forum/components/NotificationGrid']\"","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/likes/../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object"],"sourcesContent":["import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\n\nexport default function () {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n\n if (post.isHidden() || !post.canLike()) return;\n\n const likes = post.likes();\n\n let isLiked = app.session.user && likes && likes.some((user) => user === app.session.user);\n\n items.add(\n 'like',\n Button.component(\n {\n className: 'Button Button--link',\n onclick: () => {\n isLiked = !isLiked;\n\n post.save({ isLiked });\n\n // We've saved the fact that we do or don't like the post, but in order\n // to provide instantaneous feedback to the user, we'll need to add or\n // remove the like from the relationship data manually.\n const data = post.data.relationships.likes.data;\n data.some((like, i) => {\n if (like.id === app.session.user.id()) {\n data.splice(i, 1);\n return true;\n }\n });\n\n if (isLiked) {\n data.unshift({ type: 'users', id: app.session.user.id() });\n }\n },\n },\n app.translator.trans(isLiked ? 'flarum-likes.forum.post.unlike_link' : 'flarum-likes.forum.post.like_link')\n )\n );\n });\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport username from 'flarum/common/helpers/username';\nimport icon from 'flarum/common/helpers/icon';\n\nimport PostLikesModal from './components/PostLikesModal';\n\nexport default function () {\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const likes = post.recentLikes();\n const count = post.likesCount();\n\n if (likes && likes.length) {\n // the limit is dynamic through the backend, we only load those we need\n const limit = likes.length;\n // overLimit indicates there are more likes than the ones we render (and load)\n const overLimit = count > likes.length;\n\n // Construct a list of names of users who have liked this post. Make sure the\n // current user is first in the list, and cap a maximum of 4 items.\n const names = likes\n .filter((a) => (a !== app.session.user))\n .slice(0, limit)\n .map((user) => {\n return (\n \n {user === app.session.user ? app.translator.trans('flarum-likes.forum.post.you_text') : username(user)}\n \n );\n });\n\n if (post.likedByActor()) {\n names\n .unshift(\n \n {app.translator.trans('flarum-likes.forum.post.you_text')}\n \n );\n }\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n names.push(\n {\n e.preventDefault();\n app.modal.show(PostLikesModal, { post });\n }}\n >\n {app.translator.trans('flarum-likes.forum.post.others_link', { count: count - likes.length })}\n \n );\n }\n\n items.add(\n 'liked',\n
\n {icon('far fa-thumbs-up')}\n {app.translator.trans('flarum-likes.forum.post.liked_by' + (likes[0] === app.session.user ? '_self' : '') + '_text', {\n count: names.length,\n users: punctuateSeries(names),\n })}\n
\n );\n }\n });\n}\n","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\n\nexport default class PostLikedNotification extends Notification {\n icon() {\n return 'far fa-thumbs-up';\n }\n\n href() {\n return app.route.post(this.attrs.notification.subject());\n }\n\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n\n return app.translator.trans('flarum-likes.forum.notifications.post_liked_text', { user, count: 1 });\n }\n\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\n","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Link from 'flarum/common/components/Link';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\n\nexport default class PostLikesModal extends Modal {\n className() {\n return 'PostLikesModal Modal--small';\n }\n\n title() {\n return app.translator.trans('flarum-likes.forum.post_likes.title');\n }\n\n content() {\n return (\n
\n
    \n {this.attrs.post.likes().map((user) => (\n
  • \n \n {avatar(user)} {username(user)}\n \n
  • \n ))}\n
\n
\n );\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Post from 'flarum/common/models/Post';\nimport Model from 'flarum/common/Model';\nimport NotificationGrid from 'flarum/forum/components/NotificationGrid';\n\nimport addLikeAction from './addLikeAction';\nimport addLikesList from './addLikesList';\nimport PostLikedNotification from './components/PostLikedNotification';\n\napp.initializers.add('flarum-likes', () => {\n app.notificationComponents.postLiked = PostLikedNotification;\n\n Post.prototype.canLike = Model.attribute('canLike');\n Post.prototype.likes = Model.hasMany('likes');\n\n Post.prototype.likesCount = Model.attribute('likesCount');\n Post.prototype.recentLikes = Model.hasMany('recentLikes');\n Post.prototype.likedByActor = Model.attribute('likedByActor');\n\n addLikeAction();\n addLikesList();\n\n extend(NotificationGrid.prototype, 'notificationTypes', function (items) {\n items.add('postLiked', {\n name: 'postLiked',\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.forum.settings.notify_post_liked_label'),\n });\n });\n});\n","module.exports = flarum.core.compat['common/Model'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/components/Link'];","module.exports = flarum.core.compat['common/components/Modal'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['common/helpers/avatar'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/helpers/punctuateSeries'];","module.exports = flarum.core.compat['common/helpers/username'];","module.exports = flarum.core.compat['common/models/Post'];","module.exports = flarum.core.compat['common/utils/string'];","module.exports = flarum.core.compat['forum/app'];","module.exports = flarum.core.compat['forum/components/CommentPost'];","module.exports = flarum.core.compat['forum/components/Notification'];","module.exports = flarum.core.compat['forum/components/NotificationGrid'];","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\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\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.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","// 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};"],"names":["extend","app","Button","CommentPost","prototype","items","post","attrs","isHidden","canLike","likes","isLiked","session","user","some","add","component","className","onclick","save","data","relationships","like","i","id","splice","unshift","type","translator","trans","Link","punctuateSeries","username","icon","PostLikesModal","recentLikes","count","likesCount","length","limit","overLimit","names","filter","a","slice","map","route","likedByActor","push","e","preventDefault","modal","show","users","Notification","truncate","PostLikedNotification","href","notification","subject","content","fromUser","excerpt","contentPlain","Modal","avatar","title","Post","Model","NotificationGrid","addLikeAction","addLikesList","initializers","notificationComponents","postLiked","attribute","hasMany","name","label","setPrototypeOf","_inheritsLoose","subClass","superClass","Object","create","constructor","_setPrototypeOf","o","p","__proto__"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/likes/js/src/forum/addLikesList.js b/extensions/likes/js/src/forum/addLikesList.js index 9ac377dd8..376536775 100644 --- a/extensions/likes/js/src/forum/addLikesList.js +++ b/extensions/likes/js/src/forum/addLikesList.js @@ -11,17 +11,20 @@ import PostLikesModal from './components/PostLikesModal'; export default function () { extend(CommentPost.prototype, 'footerItems', function (items) { const post = this.attrs.post; - const likes = post.likes(); + const likes = post.recentLikes(); + const count = post.likesCount(); if (likes && likes.length) { - const limit = 4; - const overLimit = likes.length > limit; + // the limit is dynamic through the backend, we only load those we need + const limit = likes.length; + // overLimit indicates there are more likes than the ones we render (and load) + const overLimit = count > likes.length; // Construct a list of names of users who have liked this post. Make sure the // current user is first in the list, and cap a maximum of 4 items. const names = likes - .sort((a) => (a === app.session.user ? -1 : 1)) - .slice(0, overLimit ? limit - 1 : limit) + .filter((a) => (a !== app.session.user)) + .slice(0, limit) .map((user) => { return ( @@ -30,12 +33,19 @@ export default function () { ); }); + if (post.likedByActor()) { + names + .unshift( + + {app.translator.trans('flarum-likes.forum.post.you_text')} + + ); + } + // If there are more users that we've run out of room to display, add a "x // others" name to the end of the list. Clicking on it will display a modal // with a full list of names. if (overLimit) { - const count = likes.length - names.length; - names.push( - {app.translator.trans('flarum-likes.forum.post.others_link', { count })} + {app.translator.trans('flarum-likes.forum.post.others_link', { count: count - likes.length })} ); } diff --git a/extensions/likes/js/src/forum/index.js b/extensions/likes/js/src/forum/index.js index edbede7d7..d8315f996 100644 --- a/extensions/likes/js/src/forum/index.js +++ b/extensions/likes/js/src/forum/index.js @@ -16,6 +16,7 @@ app.initializers.add('flarum-likes', () => { Post.prototype.likesCount = Model.attribute('likesCount'); Post.prototype.recentLikes = Model.hasMany('recentLikes'); + Post.prototype.likedByActor = Model.attribute('likedByActor'); addLikeAction(); addLikesList(); diff --git a/extensions/likes/src/Model/RecentLikesRelationship.php b/extensions/likes/src/Model/RecentLikesRelationship.php index 0938fd3cd..1954972e0 100644 --- a/extensions/likes/src/Model/RecentLikesRelationship.php +++ b/extensions/likes/src/Model/RecentLikesRelationship.php @@ -15,9 +15,6 @@ class RecentLikesRelationship 'post_id', 'user_id' ) - ->withCount([ - 'likes' - ]) ->limit(3) ->orderBy('post_likes.created_at'); }