mirror of
https://github.com/flarum/core.git
synced 2025-08-07 08:56:38 +02:00
Webpack (#10)
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/sticky/js/src/admin/index.js
Normal file
13
extensions/sticky/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('flarum-sticky', () => {
|
||||
extend(PermissionGrid.prototype, 'moderateItems', items => {
|
||||
items.add('sticky', {
|
||||
icon: 'fas fa-thumbtack',
|
||||
label: app.translator.trans('flarum-sticky.admin.permissions.sticky_discussions_label'),
|
||||
permission: 'discussion.sticky'
|
||||
}, 95);
|
||||
});
|
||||
});
|
15
extensions/sticky/js/src/forum/addStickyBadge.js
Normal file
15
extensions/sticky/js/src/forum/addStickyBadge.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 addStickyBadge() {
|
||||
extend(Discussion.prototype, 'badges', function(badges) {
|
||||
if (this.isSticky()) {
|
||||
badges.add('sticky', Badge.component({
|
||||
type: 'sticky',
|
||||
label: app.translator.trans('flarum-sticky.forum.badge.sticky_tooltip'),
|
||||
icon: 'fas fa-thumbtack'
|
||||
}), 10);
|
||||
}
|
||||
});
|
||||
}
|
26
extensions/sticky/js/src/forum/addStickyControl.js
Normal file
26
extensions/sticky/js/src/forum/addStickyControl.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 addStickyControl() {
|
||||
extend(DiscussionControls, 'moderationControls', function(items, discussion) {
|
||||
if (discussion.canSticky()) {
|
||||
items.add('sticky', Button.component({
|
||||
children: app.translator.trans(discussion.isSticky() ? 'flarum-sticky.forum.discussion_controls.unsticky_button' : 'flarum-sticky.forum.discussion_controls.sticky_button'),
|
||||
icon: 'fas fa-thumbtack',
|
||||
onclick: this.stickyAction.bind(discussion)
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
DiscussionControls.stickyAction = function() {
|
||||
this.save({isSticky: !this.isSticky()}).then(() => {
|
||||
if (app.current instanceof DiscussionPage) {
|
||||
app.current.stream.update();
|
||||
}
|
||||
|
||||
m.redraw();
|
||||
});
|
||||
};
|
||||
}
|
24
extensions/sticky/js/src/forum/addStickyExcerpt.js
Normal file
24
extensions/sticky/js/src/forum/addStickyExcerpt.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import { extend } from 'flarum/extend';
|
||||
import DiscussionList from 'flarum/components/DiscussionList';
|
||||
import DiscussionListItem from 'flarum/components/DiscussionListItem';
|
||||
import { truncate } from 'flarum/utils/string';
|
||||
|
||||
export default function addStickyControl() {
|
||||
extend(DiscussionList.prototype, 'requestParams', function(params) {
|
||||
params.include.push('startPost');
|
||||
});
|
||||
|
||||
extend(DiscussionListItem.prototype, 'infoItems', function(items) {
|
||||
const discussion = this.props.discussion;
|
||||
|
||||
if (discussion.isSticky() && !this.props.params.q && !discussion.readNumber()) {
|
||||
const startPost = discussion.startPost();
|
||||
|
||||
if (startPost) {
|
||||
const excerpt = truncate(startPost.contentPlain(), 175);
|
||||
|
||||
items.add('excerpt', excerpt, -100);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
import EventPost from 'flarum/components/EventPost';
|
||||
|
||||
export default class DiscussionStickiedPost extends EventPost {
|
||||
icon() {
|
||||
return 'fas fa-thumbtack';
|
||||
}
|
||||
|
||||
descriptionKey() {
|
||||
return this.props.post.content().sticky
|
||||
? 'flarum-sticky.forum.post_stream.discussion_stickied_text'
|
||||
: 'flarum-sticky.forum.post_stream.discussion_unstickied_text';
|
||||
}
|
||||
}
|
20
extensions/sticky/js/src/forum/index.js
Normal file
20
extensions/sticky/js/src/forum/index.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import app from 'flarum/app';
|
||||
import Model from 'flarum/Model';
|
||||
import Discussion from 'flarum/models/Discussion';
|
||||
|
||||
import DiscussionStickiedPost from './components/DiscussionStickiedPost';
|
||||
import addStickyBadge from './addStickyBadge';
|
||||
import addStickyControl from './addStickyControl';
|
||||
import addStickyExcerpt from './addStickyExcerpt';
|
||||
|
||||
app.initializers.add('flarum-sticky', () => {
|
||||
app.postComponents.discussionStickied = DiscussionStickiedPost;
|
||||
|
||||
Discussion.prototype.isSticky = Model.attribute('isSticky');
|
||||
Discussion.prototype.canSticky = Model.attribute('canSticky');
|
||||
|
||||
addStickyBadge();
|
||||
addStickyControl();
|
||||
addStickyExcerpt();
|
||||
});
|
||||
|
Reference in New Issue
Block a user