mirror of
https://github.com/flarum/core.git
synced 2025-08-13 11:54:32 +02:00
Compare commits
4 Commits
v1.7.0
...
dk/likes/l
Author | SHA1 | Date | |
---|---|---|---|
|
e478ea08d3 | ||
|
24864e82dc | ||
|
856bb8a0da | ||
|
f034fdd9f2 |
@@ -7,14 +7,12 @@
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Likes;
|
||||
|
||||
use Flarum\Api\Controller;
|
||||
use Flarum\Api\Serializer\BasicUserSerializer;
|
||||
use Flarum\Api\Serializer\PostSerializer;
|
||||
use Flarum\Extend;
|
||||
use Flarum\Likes\Event\PostWasLiked;
|
||||
use Flarum\Likes\Event\PostWasUnliked;
|
||||
use Flarum\Likes\Listener;
|
||||
use Flarum\Likes\Notification\PostLikedBlueprint;
|
||||
use Flarum\Post\Event\Deleted;
|
||||
use Flarum\Post\Event\Saving;
|
||||
use Flarum\Post\Post;
|
||||
@@ -29,34 +27,54 @@ return [
|
||||
->js(__DIR__.'/js/dist/admin.js'),
|
||||
|
||||
(new Extend\Model(Post::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'),
|
||||
|
||||
(new Extend\Notification())
|
||||
->type(PostLikedBlueprint::class, PostSerializer::class, ['alert']),
|
||||
->type(Notification\PostLikedBlueprint::class, PostSerializer::class, ['alert']),
|
||||
|
||||
(new Extend\ApiSerializer(PostSerializer::class))
|
||||
->relationship('recentLikes', Api\RecentLikesRelationship::class)
|
||||
->attributes(function (PostSerializer $serializer, $model, $attributes) {
|
||||
$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)
|
||||
->attribute('canLike', function (PostSerializer $serializer, $model) {
|
||||
return (bool) $serializer->getActor()->can('like', $model);
|
||||
return $serializer->getActor()->can('like', $model);
|
||||
}),
|
||||
|
||||
(new Extend\ApiController(Controller\ShowDiscussionController::class))
|
||||
->addInclude('posts.likes'),
|
||||
->addOptionalInclude('posts.likes')
|
||||
->addInclude('posts.recentLikes')
|
||||
->load('posts.recentLikes'),
|
||||
|
||||
(new Extend\ApiController(Controller\ListPostsController::class))
|
||||
->addInclude('likes'),
|
||||
->addOptionalInclude('likes')
|
||||
->addInclude('recentLikes')
|
||||
->load('posts.recentLikes'),
|
||||
(new Extend\ApiController(Controller\ShowPostController::class))
|
||||
->addInclude('likes'),
|
||||
->addOptionalInclude('likes')
|
||||
->addInclude('recentLikes')
|
||||
->load('posts.recentLikes'),
|
||||
(new Extend\ApiController(Controller\CreatePostController::class))
|
||||
->addInclude('likes'),
|
||||
->addOptionalInclude('likes')
|
||||
->addInclude('recentLikes')
|
||||
->load('posts.recentLikes'),
|
||||
(new Extend\ApiController(Controller\UpdatePostController::class))
|
||||
->addInclude('likes'),
|
||||
->addOptionalInclude('likes')
|
||||
->addInclude('recentLikes')
|
||||
->load('posts.recentLikes'),
|
||||
|
||||
(new Extend\Event())
|
||||
->listen(PostWasLiked::class, Listener\SendNotificationWhenPostIsLiked::class)
|
||||
->listen(PostWasUnliked::class, Listener\SendNotificationWhenPostIsUnliked::class)
|
||||
->listen(Event\PostWasLiked::class, Listener\SendNotificationWhenPostIsLiked::class)
|
||||
->listen(Event\PostWasUnliked::class, Listener\SendNotificationWhenPostIsUnliked::class)
|
||||
->listen(Deleted::class, [Listener\SaveLikesToDatabase::class, 'whenPostIsDeleted'])
|
||||
->listen(Saving::class, [Listener\SaveLikesToDatabase::class, 'whenPostIsSaving']),
|
||||
];
|
||||
|
120
extensions/likes/js/dist/admin.js
generated
vendored
120
extensions/likes/js/dist/admin.js
generated
vendored
@@ -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
|
2
extensions/likes/js/dist/admin.js.map
generated
vendored
2
extensions/likes/js/dist/admin.js.map
generated
vendored
@@ -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":""}
|
||||
{"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":""}
|
622
extensions/likes/js/dist/forum.js
generated
vendored
622
extensions/likes/js/dist/forum.js
generated
vendored
@@ -1,2 +1,622 @@
|
||||
(()=>{var t={n:o=>{var n=o&&o.__esModule?()=>o.default:()=>o;return t.d(n,{a:n}),n},d:(o,n)=>{for(var e in n)t.o(n,e)&&!t.o(o,e)&&Object.defineProperty(o,e,{enumerable:!0,get:n[e]})},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 n=flarum.core.compat["common/extend"],e=flarum.core.compat["forum/app"];var r=t.n(e);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 _=t.n(y);const b=flarum.core.compat["common/helpers/username"];var g=t.n(b);const P=flarum.core.compat["common/helpers/icon"];var L=t.n(P);function M(t,o){return M=Object.setPrototypeOf||function(t,o){return t.__proto__=o,t},M(t,o)}function x(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,M(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 n=o.prototype;return n.className=function(){return"PostLikesModal Modal--small"},n.title=function(){return r().translator.trans("flarum-likes.forum.post_likes.title")},n.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 T=flarum.core.compat["forum/components/Notification"];var w=t.n(T);const C=flarum.core.compat["common/utils/string"];var I=function(t){function o(){return t.apply(this,arguments)||this}x(o,t);var n=o.prototype;return n.icon=function(){return"far fa-thumbs-up"},n.href=function(){return r().route.post(this.attrs.notification.subject())},n.content=function(){var t=this.attrs.notification.fromUser();return r().translator.trans("flarum-likes.forum.notifications.post_liked_text",{user:t,count:1})},n.excerpt=function(){return(0,C.truncate)(this.attrs.notification.subject().contentPlain(),200)},o}(w());r().initializers.add("flarum-likes",(function(){r().notificationComponents.postLiked=I,a().prototype.canLike=c().attribute("canLike"),a().prototype.likes=c().hasMany("likes"),(0,n.extend)(k().prototype,"actionItems",(function(t){var o=this.attrs.post;if(!o.isHidden()&&o.canLike()){var n=o.likes(),e=r().session.user&&n&&n.some((function(t){return t===r().session.user}));t.add("like",p().component({className:"Button Button--link",onclick:function(){e=!e,o.save({isLiked:e});var t=o.data.relationships.likes.data;t.some((function(o,n){if(o.id===r().session.user.id())return t.splice(n,1),!0})),e&&t.unshift({type:"users",id:r().session.user.id()})}},r().translator.trans(e?"flarum-likes.forum.post.unlike_link":"flarum-likes.forum.post.like_link")))}})),(0,n.extend)(k().prototype,"footerItems",(function(t){var o=this.attrs.post,n=o.likes();if(n&&n.length){var e=n.length>4,s=n.sort((function(t){return t===r().session.user?-1:1})).slice(0,e?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(e){var a=n.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"},L()("far fa-thumbs-up"),r().translator.trans("flarum-likes.forum.post.liked_by"+(n[0]===r().session.user?"_self":"")+"_text",{count:s.length,users:_()(s)})))}})),(0,n.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
|
2
extensions/likes/js/dist/forum.js.map
generated
vendored
2
extensions/likes/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
@@ -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 (
|
||||
<Link href={app.route.user(user)}>
|
||||
@@ -30,12 +33,14 @@ export default function () {
|
||||
);
|
||||
});
|
||||
|
||||
if (post.likedByActor()) {
|
||||
names.unshift(<Link href={app.route.user(app.session.user)}>{app.translator.trans('flarum-likes.forum.post.you_text')}</Link>);
|
||||
}
|
||||
|
||||
// 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(
|
||||
<a
|
||||
href="#"
|
||||
@@ -44,7 +49,7 @@ export default function () {
|
||||
app.modal.show(PostLikesModal, { post });
|
||||
}}
|
||||
>
|
||||
{app.translator.trans('flarum-likes.forum.post.others_link', { count })}
|
||||
{app.translator.trans('flarum-likes.forum.post.others_link', { count: count - likes.length })}
|
||||
</a>
|
||||
);
|
||||
}
|
||||
|
@@ -14,6 +14,10 @@ app.initializers.add('flarum-likes', () => {
|
||||
Post.prototype.canLike = Model.attribute('canLike');
|
||||
Post.prototype.likes = Model.hasMany('likes');
|
||||
|
||||
Post.prototype.likesCount = Model.attribute('likesCount');
|
||||
Post.prototype.recentLikes = Model.hasMany('recentLikes');
|
||||
Post.prototype.likedByActor = Model.attribute('likedByActor');
|
||||
|
||||
addLikeAction();
|
||||
addLikesList();
|
||||
|
||||
|
34
extensions/likes/src/Api/RecentLikesRelationship.php
Normal file
34
extensions/likes/src/Api/RecentLikesRelationship.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* For detailed copyright and license information, please view the
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Likes\Api;
|
||||
|
||||
use Flarum\Api\Serializer\BasicUserSerializer;
|
||||
use Flarum\Api\Serializer\PostSerializer;
|
||||
use Flarum\Post\Post;
|
||||
use Tobscure\JsonApi\Collection;
|
||||
use Tobscure\JsonApi\Relationship;
|
||||
|
||||
class RecentLikesRelationship
|
||||
{
|
||||
private BasicUserSerializer $serializer;
|
||||
|
||||
public function __construct(BasicUserSerializer $serializer)
|
||||
{
|
||||
$this->serializer = $serializer;
|
||||
}
|
||||
|
||||
public function __invoke(PostSerializer $serializer, Post $post): Relationship
|
||||
{
|
||||
return new Relationship(new Collection(
|
||||
$post->recentLikes,
|
||||
$this->serializer
|
||||
));
|
||||
}
|
||||
}
|
28
extensions/likes/src/Model/RecentLikesRelationship.php
Normal file
28
extensions/likes/src/Model/RecentLikesRelationship.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* For detailed copyright and license information, please view the
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Likes\Model;
|
||||
|
||||
use Flarum\Post\Post;
|
||||
use Flarum\User\User;
|
||||
|
||||
class RecentLikesRelationship
|
||||
{
|
||||
public function __invoke(Post $post)
|
||||
{
|
||||
return $post->belongsToMany(
|
||||
User::class,
|
||||
'post_likes',
|
||||
'post_id',
|
||||
'user_id'
|
||||
)
|
||||
->limit(3)
|
||||
->orderBy('post_likes.created_at');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user