mirror of
https://github.com/flarum/core.git
synced 2025-08-06 08:27:42 +02:00
Initial commit
This commit is contained in:
3
extensions/likes/js/.gitignore
vendored
Normal file
3
extensions/likes/js/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
bower_components
|
||||
node_modules
|
||||
dist
|
5
extensions/likes/js/Gulpfile.js
Normal file
5
extensions/likes/js/Gulpfile.js
Normal file
@@ -0,0 +1,5 @@
|
||||
var gulp = require('flarum-gulp');
|
||||
|
||||
gulp({
|
||||
modulePrefix: 'flarum-likes'
|
||||
});
|
96
extensions/likes/js/bootstrap.js
vendored
Normal file
96
extensions/likes/js/bootstrap.js
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
import { extend, override } from 'flarum/extension-utils';
|
||||
import app from 'flarum/app';
|
||||
import Post from 'flarum/models/post';
|
||||
import Model from 'flarum/model';
|
||||
import DiscussionPage from 'flarum/components/discussion-page';
|
||||
import ActionButton from 'flarum/components/action-button';
|
||||
import CommentPost from 'flarum/components/comment-post';
|
||||
import punctuate from 'flarum/helpers/punctuate';
|
||||
import username from 'flarum/helpers/username';
|
||||
|
||||
import PostLikedNotification from 'flarum-likes/components/post-liked-notification';
|
||||
import PostLikesModal from 'flarum-likes/components/post-likes-modal';
|
||||
|
||||
app.initializers.add('flarum-likes', function() {
|
||||
|
||||
app.notificationComponentRegistry['postLiked'] = PostLikedNotification;
|
||||
|
||||
Post.prototype.canLike = Model.prop('canLike');
|
||||
Post.prototype.likes = Model.many('likes');
|
||||
|
||||
extend(DiscussionPage.prototype, 'params', function(params) {
|
||||
params.include.push('posts.likes');
|
||||
});
|
||||
|
||||
extend(CommentPost.prototype, 'footerItems', function(items) {
|
||||
var post = this.props.post;
|
||||
var likes = post.likes();
|
||||
|
||||
if (likes && likes.length) {
|
||||
|
||||
var limit = 3;
|
||||
|
||||
var names = likes.slice(0, limit).map(user => {
|
||||
return m('a', {
|
||||
href: app.route.user(user),
|
||||
config: m.route
|
||||
}, [
|
||||
app.session.user() && user === app.session.user() ? 'You' : username(user)
|
||||
])
|
||||
});
|
||||
|
||||
if (likes.length > limit + 1) {
|
||||
names.push(
|
||||
m('a', {
|
||||
href: '#',
|
||||
onclick: function(e) {
|
||||
e.preventDefault();
|
||||
app.modal.show(new PostLikesModal({ post }));
|
||||
}
|
||||
}, (likes.length - limit)+' others')
|
||||
);
|
||||
}
|
||||
|
||||
items.add('liked',
|
||||
m('div.liked-by', [
|
||||
punctuate(names),
|
||||
' like this.'
|
||||
])
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
extend(CommentPost.prototype, 'actionItems', function(items) {
|
||||
var post = this.props.post;
|
||||
if (post.isHidden() || !post.canLike()) return;
|
||||
|
||||
var isLiked = app.session.user() && post.likes().some(user => user === app.session.user());
|
||||
|
||||
items.add('like',
|
||||
ActionButton.component({
|
||||
icon: 'thumbs-o-up',
|
||||
label: isLiked ? 'Unlike' : 'Like',
|
||||
onclick: () => {
|
||||
isLiked = !isLiked;
|
||||
|
||||
post.save({ isLiked });
|
||||
|
||||
var linkage = post.data().links.likes.linkage;
|
||||
linkage.some((like, i) => {
|
||||
if (like.id == app.session.user().id()) {
|
||||
linkage.splice(i, 1);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
if (isLiked) {
|
||||
linkage.unshift({ type: 'users', id: app.session.user().id() });
|
||||
}
|
||||
|
||||
m.redraw();
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
});
|
7
extensions/likes/js/package.json
Normal file
7
extensions/likes/js/package.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"gulp": "^3.8.11",
|
||||
"flarum-gulp": "git+https://github.com/flarum/gulp.git"
|
||||
}
|
||||
}
|
@@ -0,0 +1,16 @@
|
||||
import Notification from 'flarum/components/notification';
|
||||
import username from 'flarum/helpers/username';
|
||||
|
||||
export default class PostLikedNotification extends Notification {
|
||||
view() {
|
||||
var notification = this.props.notification;
|
||||
var post = notification.subject();
|
||||
var auc = notification.additionalUnreadCount();
|
||||
|
||||
return super.view({
|
||||
href: app.route.post(post),
|
||||
icon: 'thumbs-o-up',
|
||||
content: [username(notification.sender()), auc ? ' and '+auc+' others' : '', ' liked your post #', post.number()]
|
||||
});
|
||||
}
|
||||
}
|
24
extensions/likes/js/src/components/post-likes-modal.js
Normal file
24
extensions/likes/js/src/components/post-likes-modal.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import FormModal from 'flarum/components/form-modal';
|
||||
import avatar from 'flarum/helpers/avatar';
|
||||
import username from 'flarum/helpers/username';
|
||||
|
||||
export default class PostLikesModal extends FormModal {
|
||||
view() {
|
||||
var post = this.props.post;
|
||||
|
||||
return super.view({
|
||||
className: 'post-likes-modal',
|
||||
title: 'Users Who Like This',
|
||||
body: [
|
||||
m('ul.post-likes-list', [
|
||||
post.likes().map(user =>
|
||||
m('li', m('a', {href: app.route.user(user), config: m.route}, [
|
||||
avatar(user),
|
||||
username(user)
|
||||
]))
|
||||
)
|
||||
])
|
||||
]
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user