1
0
mirror of https://github.com/flarum/core.git synced 2025-08-06 08:27:42 +02:00

Initial commit

This commit is contained in:
Toby Zerner
2015-06-23 10:25:24 +09:30
commit e57eb5a14f
20 changed files with 494 additions and 0 deletions

3
extensions/likes/js/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
bower_components
node_modules
dist

View File

@@ -0,0 +1,5 @@
var gulp = require('flarum-gulp');
gulp({
modulePrefix: 'flarum-likes'
});

96
extensions/likes/js/bootstrap.js vendored Normal file
View 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();
}
})
);
});
});

View File

@@ -0,0 +1,7 @@
{
"private": true,
"devDependencies": {
"gulp": "^3.8.11",
"flarum-gulp": "git+https://github.com/flarum/gulp.git"
}
}

View File

@@ -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()]
});
}
}

View 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)
]))
)
])
]
});
}
}