1
0
mirror of https://github.com/flarum/core.git synced 2025-07-31 13:40:20 +02:00

Initial commit

This commit is contained in:
Toby Zerner
2015-07-28 15:35:55 +09:30
commit f6c0f22db0
30 changed files with 810 additions and 0 deletions

4
extensions/lock/js/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
bower_components
node_modules
mithril.js
dist

View File

@@ -0,0 +1,7 @@
var gulp = require('flarum-gulp');
gulp({
modules: {
'lock': 'src/**/*.js'
}
});

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,15 @@
import { extend } from 'flarum/extend';
import Discussion from 'flarum/models/Discussion';
import Badge from 'flarum/components/Badge';
export default function addLockBadge() {
extend(Discussion.prototype, 'badges', function(badges) {
if (this.isLocked()) {
badges.add('locked', Badge.component({
type: 'locked',
label: app.trans('lock.locked'),
icon: 'lock'
}));
}
});
}

View File

@@ -0,0 +1,26 @@
import { extend } from 'flarum/extend';
import DiscussionControls from 'flarum/utils/DiscussionControls';
import DiscussionPage from 'flarum/components/DiscussionPage';
import Button from 'flarum/components/Button';
export default function addLockControl() {
extend(DiscussionControls, 'moderationControls', function(items, discussion) {
if (discussion.canSticky()) {
items.add('lock', Button.component({
children: app.trans(discussion.isLocked() ? 'lock.unlock' : 'lock.lock'),
icon: 'lock',
onclick: this.lockAction.bind(discussion)
}));
}
});
DiscussionControls.lockAction = function() {
this.save({isLocked: !this.isLocked()}).then(() => {
if (app.current instanceof DiscussionPage) {
app.current.stream.update();
}
m.redraw();
});
};
}

View File

@@ -0,0 +1,17 @@
import Notification from 'flarum/components/Notification';
export default class DiscussionLockedNotification extends Notification {
icon() {
return 'lock';
}
href() {
const notification = this.props.notification;
return app.route.discussion(notification.subject(), notification.content().postNumber);
}
content() {
return app.trans('lock.discussion_locked_notification', {user: this.props.notification.sender()});
}
}

View File

@@ -0,0 +1,15 @@
import EventPost from 'flarum/components/EventPost';
export default class DiscussionLockedPost extends EventPost {
icon() {
return this.props.post.content().locked
? 'lock'
: 'unlock';
}
descriptionKey() {
return this.props.post.content().locked
? 'lock.discussion_locked_post'
: 'lock.discussion_unlocked_post';
}
}

View File

@@ -0,0 +1,27 @@
import { extend } from 'flarum/extend';
import app from 'flarum/app';
import Model from 'flarum/Model';
import Discussion from 'flarum/models/Discussion';
import NotificationGrid from 'flarum/components/NotificationGrid';
import DiscussionLockedPost from 'lock/components/DiscussionLockedPost';
import DiscussionLockedNotification from 'lock/components/DiscussionLockedNotification';
import addLockBadge from 'lock/addLockBadge';
import addLockControl from 'lock/addLockControl';
app.postComponents.discussionLocked = DiscussionLockedPost;
app.notificationComponents.discussionLocked = DiscussionLockedNotification;
Discussion.prototype.isLocked = Model.attribute('isLocked');
Discussion.prototype.canLock = Model.attribute('canLock');
addLockBadge();
addLockControl();
extend(NotificationGrid.prototype, 'notificationTypes', function(items) {
items.add('discussionLocked', {
name: 'discussionLocked',
icon: 'thumb-tack',
label: app.trans('lock.notify_discussion_locked')
});
});