mirror of
https://github.com/flarum/core.git
synced 2025-08-16 13:24:11 +02:00
Webpack (#14)
See https://github.com/flarum/core/pull/1367 * Replace gulp with webpack and npm scripts for JS compilation * Set up Travis CI to commit compiled JS * Restructure `js` directory; only one instance of npm, forum/admin are "submodules" * Restructure `less` directory
This commit is contained in:
13
extensions/lock/js/src/admin/index.js
Normal file
13
extensions/lock/js/src/admin/index.js
Normal file
@@ -0,0 +1,13 @@
|
||||
import { extend } from 'flarum/extend';
|
||||
import app from 'flarum/app';
|
||||
import PermissionGrid from 'flarum/components/PermissionGrid';
|
||||
|
||||
app.initializers.add('lock', () => {
|
||||
extend(PermissionGrid.prototype, 'moderateItems', items => {
|
||||
items.add('lock', {
|
||||
icon: 'fas fa-lock',
|
||||
label: app.translator.trans('flarum-lock.admin.permissions.lock_discussions_label'),
|
||||
permission: 'discussion.lock'
|
||||
}, 95);
|
||||
});
|
||||
});
|
15
extensions/lock/js/src/forum/addLockBadge.js
Normal file
15
extensions/lock/js/src/forum/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.translator.trans('flarum-lock.forum.badge.locked_tooltip'),
|
||||
icon: 'fas fa-lock'
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
26
extensions/lock/js/src/forum/addLockControl.js
Normal file
26
extensions/lock/js/src/forum/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.canLock()) {
|
||||
items.add('lock', Button.component({
|
||||
children: app.translator.trans(discussion.isLocked() ? 'flarum-lock.forum.discussion_controls.unlock_button' : 'flarum-lock.forum.discussion_controls.lock_button'),
|
||||
icon: 'fas fa-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 'fas fa-lock';
|
||||
}
|
||||
|
||||
href() {
|
||||
const notification = this.props.notification;
|
||||
|
||||
return app.route.discussion(notification.subject(), notification.content().postNumber);
|
||||
}
|
||||
|
||||
content() {
|
||||
return app.translator.trans('flarum-lock.forum.notifications.discussion_locked_text', {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
|
||||
? 'fas fa-lock'
|
||||
: 'fas fa-unlock';
|
||||
}
|
||||
|
||||
descriptionKey() {
|
||||
return this.props.post.content().locked
|
||||
? 'flarum-lock.forum.post_stream.discussion_locked_text'
|
||||
: 'flarum-lock.forum.post_stream.discussion_unlocked_text';
|
||||
}
|
||||
}
|
29
extensions/lock/js/src/forum/index.js
Normal file
29
extensions/lock/js/src/forum/index.js
Normal file
@@ -0,0 +1,29 @@
|
||||
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 './components/DiscussionLockedPost';
|
||||
import DiscussionLockedNotification from './components/DiscussionLockedNotification';
|
||||
import addLockBadge from './addLockBadge';
|
||||
import addLockControl from './addLockControl';
|
||||
|
||||
app.initializers.add('flarum-lock', () => {
|
||||
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: 'fas fa-lock',
|
||||
label: app.translator.trans('flarum-lock.forum.settings.notify_discussion_locked_label')
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user