mirror of
https://github.com/flarum/core.git
synced 2025-07-21 00:31:17 +02:00
Initial commit
This commit is contained in:
60
extensions/sticky/js/bootstrap.js
vendored
Normal file
60
extensions/sticky/js/bootstrap.js
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
import { extend } from 'flarum/extension-utils';
|
||||
import Model from 'flarum/model';
|
||||
import Discussion from 'flarum/models/discussion';
|
||||
import DiscussionPage from 'flarum/components/discussion-page';
|
||||
import Badge from 'flarum/components/badge';
|
||||
import ActionButton from 'flarum/components/action-button';
|
||||
import SettingsPage from 'flarum/components/settings-page';
|
||||
import icon from 'flarum/helpers/icon';
|
||||
import app from 'flarum/app';
|
||||
|
||||
import PostDiscussionStickied from 'sticky/components/post-discussion-stickied';
|
||||
import NotificationDiscussionStickied from 'sticky/components/notification-discussion-stickied';
|
||||
|
||||
app.initializers.add('sticky', function() {
|
||||
|
||||
// Register components.
|
||||
app.postComponentRegistry['discussionStickied'] = PostDiscussionStickied;
|
||||
app.notificationComponentRegistry['discussionStickied'] = NotificationDiscussionStickied;
|
||||
|
||||
Discussion.prototype.isSticky = Model.prop('isSticky');
|
||||
|
||||
// Add a sticky badge to discussions.
|
||||
extend(Discussion.prototype, 'badges', function(badges) {
|
||||
if (this.isSticky()) {
|
||||
badges.add('sticky', Badge.component({
|
||||
label: 'Sticky',
|
||||
icon: 'thumb-tack',
|
||||
className: 'badge-sticky',
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
function toggleSticky() {
|
||||
this.save({isSticky: !this.isSticky()}).then(discussion => {
|
||||
if (app.current instanceof DiscussionPage) {
|
||||
app.current.stream().sync();
|
||||
}
|
||||
m.redraw();
|
||||
});
|
||||
}
|
||||
|
||||
// Add a sticky control to discussions.
|
||||
extend(Discussion.prototype, 'controls', function(items) {
|
||||
if (this.canEdit()) {
|
||||
items.add('sticky', ActionButton.component({
|
||||
label: this.isSticky() ? 'Unsticky' : 'Sticky',
|
||||
icon: 'thumb-tack',
|
||||
onclick: toggleSticky.bind(this)
|
||||
}), {after: 'rename'});
|
||||
}
|
||||
});
|
||||
|
||||
// Add a notification preference.
|
||||
extend(SettingsPage.prototype, 'notificationTypes', function(items) {
|
||||
items.add('discussionStickied', {
|
||||
name: 'discussionStickied',
|
||||
label: [icon('thumb-tack'), ' Someone stickies a discussion I started']
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user