1
0
mirror of https://github.com/flarum/core.git synced 2025-08-04 23:47:32 +02:00

Mithril 2 Update (#32)

Update for Mithril 2
This commit is contained in:
Alexander Skvortsov
2020-09-23 22:56:47 -04:00
committed by GitHub
parent 73579883f6
commit 6bdbee70db
7 changed files with 43 additions and 37 deletions

View File

@@ -17,10 +17,9 @@ export default function addSubscriptionControls() {
const subscription = discussion.subscription() || 'none';
items.add('subscription', Button.component({
children: states[subscription].label,
icon: states[subscription].icon,
onclick: discussion.save.bind(discussion, {subscription: states[subscription].save})
}));
}, states[subscription].label));
}
});

View File

@@ -8,24 +8,21 @@ export default function addSubscriptionFilter() {
if (app.session.user) {
const params = app.search.stickyParams();
params.filter = 'following';
items.add('following', LinkButton.component({
href: app.route('index.filter', params),
children: app.translator.trans('flarum-subscriptions.forum.index.following_link'),
href: app.route('following', params),
icon: 'fas fa-star'
}), 50);
}, app.translator.trans('flarum-subscriptions.forum.index.following_link')), 50);
}
});
extend(IndexPage.prototype, 'config', function () {
if (m.route() == "/following") {
extend(IndexPage.prototype, 'setTitle', function () {
if (app.current.get('routeName') === 'following') {
app.setTitle(app.translator.trans('flarum-subscriptions.forum.following.meta_title_text'));
}
});
extend(DiscussionListState.prototype, 'requestParams', function(params) {
if (this.params.filter === 'following') {
if (app.current.get('routeName') === 'following') {
params.filter.q = (params.filter.q || '') + ' is:following';
}
});

View File

@@ -6,10 +6,17 @@ export default function() {
extend(SettingsPage.prototype, 'notificationsItems', function (items) {
items.add('followAfterReply',
Switch.component({
children: app.translator.trans('flarum-subscriptions.forum.settings.follow_after_reply_label'),
state: this.user.preferences().followAfterReply,
onchange: this.preferenceSaver('followAfterReply')
})
onchange: (value) => {
this.followAfterReplyLoading = true;
this.user.savePreferences({ followAfterReply: value }).then(() => {
this.followAfterReplyLoading = false;
m.redraw();
});
},
loading: this.followAfterReplyLoading
}, app.translator.trans('flarum-subscriptions.forum.settings.follow_after_reply_label'))
);
});
}

View File

@@ -7,7 +7,7 @@ export default class NewPostNotification extends Notification {
}
href() {
const notification = this.props.notification;
const notification = this.attrs.notification;
const discussion = notification.subject();
const content = notification.content() || {};
@@ -15,6 +15,6 @@ export default class NewPostNotification extends Notification {
}
content() {
return app.translator.trans('flarum-subscriptions.forum.notifications.new_post_text', {user: this.props.notification.fromUser()});
return app.translator.trans('flarum-subscriptions.forum.notifications.new_post_text', {user: this.attrs.notification.fromUser()});
}
}

View File

@@ -6,7 +6,9 @@ import extractText from 'flarum/utils/extractText';
import SubscriptionMenuItem from './SubscriptionMenuItem';
export default class SubscriptionMenu extends Dropdown {
init() {
oninit(vnode) {
super.oninit(vnode);
this.options = [
{
subscription: false,
@@ -30,7 +32,7 @@ export default class SubscriptionMenu extends Dropdown {
}
view() {
const discussion = this.props.discussion;
const discussion = this.attrs.discussion;
const subscription = discussion.subscription();
let buttonLabel = app.translator.trans('flarum-subscriptions.forum.sub_controls.follow_button');
@@ -59,17 +61,16 @@ export default class SubscriptionMenu extends Dropdown {
? 'flarum-subscriptions.forum.sub_controls.notify_email_tooltip'
: 'flarum-subscriptions.forum.sub_controls.notify_alert_tooltip'));
const buttonProps = {
const buttonAttrs = {
className: 'Button SubscriptionMenu-button ' + buttonClass,
icon: buttonIcon,
children: buttonLabel,
onclick: this.saveSubscription.bind(this, discussion, ['follow', 'ignore'].indexOf(subscription) !== -1 ? false : 'follow'),
title: title
};
if ((notifyEmail || notifyAlert) && subscription === false) {
buttonProps.config = element => {
$(element).tooltip({
buttonAttrs.oncreate = buttonAttrs.onupdate = vnode => {
$(vnode.dom).tooltip({
container: '.SubscriptionMenu',
placement: 'bottom',
delay: 250,
@@ -77,24 +78,24 @@ export default class SubscriptionMenu extends Dropdown {
});
}
} else {
buttonProps.config = element => $(element).tooltip('destroy');
buttonAttrs.onupdate = vnode => $(vnode.dom).tooltip('destroy');
}
return (
<div className="Dropdown ButtonGroup SubscriptionMenu">
{Button.component(buttonProps)}
{Button.component(buttonAttrs, buttonLabel)}
<button className={'Dropdown-toggle Button Button--icon ' + buttonClass} data-toggle="dropdown">
{icon('fas fa-caret-down', {className: 'Button-icon'})}
</button>
<ul className="Dropdown-menu dropdown-menu Dropdown-menu--right">
{this.options.map(props => {
props.onclick = this.saveSubscription.bind(this, discussion, props.subscription);
props.active = subscription === props.subscription;
return <li>{SubscriptionMenuItem.component(props)}</li>;
})}
{this.options.map(attrs => <li>{SubscriptionMenuItem.component({
...attrs,
onclick: this.saveSubscription.bind(this, discussion, attrs.subscription),
active: subscription === attrs.subscription
})}</li>
)}
</ul>
</div>
);

View File

@@ -4,12 +4,12 @@ import icon from 'flarum/helpers/icon';
export default class SubscriptionMenuItem extends Component {
view() {
return (
<button className="SubscriptionMenuItem hasIcon" onclick={this.props.onclick}>
{this.props.active ? icon('fas fa-check', {className: 'Button-icon'}) : ''}
<button className="SubscriptionMenuItem hasIcon" onclick={this.attrs.onclick}>
{this.attrs.active ? icon('fas fa-check', {className: 'Button-icon'}) : ''}
<span className="SubscriptionMenuItem-label">
{icon(this.props.icon, {className: 'Button-icon'})}
<strong>{this.props.label}</strong>
<span className="SubscriptionMenuItem-description">{this.props.description}</span>
{icon(this.attrs.icon, {className: 'Button-icon'})}
<strong>{this.attrs.label}</strong>
<span className="SubscriptionMenuItem-description">{this.attrs.description}</span>
</span>
</button>
);

View File

@@ -2,6 +2,7 @@ import { extend } from 'flarum/extend';
import app from 'flarum/app';
import Model from 'flarum/Model';
import Discussion from 'flarum/models/Discussion';
import IndexPage from 'flarum/components/IndexPage';
import NotificationGrid from 'flarum/components/NotificationGrid';
import addSubscriptionBadge from './addSubscriptionBadge';
@@ -12,6 +13,7 @@ import addSubscriptionSettings from './addSubscriptionSettings';
import NewPostNotification from './components/NewPostNotification';
app.initializers.add('subscriptions', function () {
app.routes.following = { path: '/following', component: IndexPage };
app.notificationComponents.newPost = NewPostNotification;
Discussion.prototype.subscription = Model.attribute('subscription');