mirror of
https://github.com/flarum/core.git
synced 2025-07-31 13:40:20 +02:00
Initial commit
This commit is contained in:
4
extensions/lock/js/.gitignore
vendored
Normal file
4
extensions/lock/js/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
bower_components
|
||||
node_modules
|
||||
mithril.js
|
||||
dist
|
7
extensions/lock/js/forum/Gulpfile.js
Normal file
7
extensions/lock/js/forum/Gulpfile.js
Normal file
@@ -0,0 +1,7 @@
|
||||
var gulp = require('flarum-gulp');
|
||||
|
||||
gulp({
|
||||
modules: {
|
||||
'lock': 'src/**/*.js'
|
||||
}
|
||||
});
|
7
extensions/lock/js/forum/package.json
Normal file
7
extensions/lock/js/forum/package.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"gulp": "^3.8.11",
|
||||
"flarum-gulp": "git+https://github.com/flarum/gulp.git"
|
||||
}
|
||||
}
|
15
extensions/lock/js/forum/src/addLockBadge.js
Normal file
15
extensions/lock/js/forum/src/addLockBadge.js
Normal 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'
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
26
extensions/lock/js/forum/src/addLockControl.js
Normal file
26
extensions/lock/js/forum/src/addLockControl.js
Normal 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();
|
||||
});
|
||||
};
|
||||
}
|
@@ -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()});
|
||||
}
|
||||
}
|
@@ -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';
|
||||
}
|
||||
}
|
27
extensions/lock/js/forum/src/main.js
Normal file
27
extensions/lock/js/forum/src/main.js
Normal 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')
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user