1
0
mirror of https://github.com/flarum/core.git synced 2025-08-05 16:07:34 +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'; const subscription = discussion.subscription() || 'none';
items.add('subscription', Button.component({ items.add('subscription', Button.component({
children: states[subscription].label,
icon: states[subscription].icon, icon: states[subscription].icon,
onclick: discussion.save.bind(discussion, {subscription: states[subscription].save}) 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) { if (app.session.user) {
const params = app.search.stickyParams(); const params = app.search.stickyParams();
params.filter = 'following';
items.add('following', LinkButton.component({ items.add('following', LinkButton.component({
href: app.route('index.filter', params), href: app.route('following', params),
children: app.translator.trans('flarum-subscriptions.forum.index.following_link'),
icon: 'fas fa-star' icon: 'fas fa-star'
}), 50); }, app.translator.trans('flarum-subscriptions.forum.index.following_link')), 50);
} }
}); });
extend(IndexPage.prototype, 'config', function () { extend(IndexPage.prototype, 'setTitle', function () {
if (m.route() == "/following") { if (app.current.get('routeName') === 'following') {
app.setTitle(app.translator.trans('flarum-subscriptions.forum.following.meta_title_text')); app.setTitle(app.translator.trans('flarum-subscriptions.forum.following.meta_title_text'));
} }
}); });
extend(DiscussionListState.prototype, 'requestParams', function(params) { 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'; params.filter.q = (params.filter.q || '') + ' is:following';
} }
}); });

View File

@@ -2,14 +2,21 @@ import { extend } from 'flarum/extend';
import SettingsPage from 'flarum/components/SettingsPage'; import SettingsPage from 'flarum/components/SettingsPage';
import Switch from 'flarum/components/Switch'; import Switch from 'flarum/components/Switch';
export default function() { export default function () {
extend(SettingsPage.prototype, 'notificationsItems', function(items) { extend(SettingsPage.prototype, 'notificationsItems', function (items) {
items.add('followAfterReply', items.add('followAfterReply',
Switch.component({ Switch.component({
children: app.translator.trans('flarum-subscriptions.forum.settings.follow_after_reply_label'),
state: this.user.preferences().followAfterReply, 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() { href() {
const notification = this.props.notification; const notification = this.attrs.notification;
const discussion = notification.subject(); const discussion = notification.subject();
const content = notification.content() || {}; const content = notification.content() || {};
@@ -15,6 +15,6 @@ export default class NewPostNotification extends Notification {
} }
content() { 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'; import SubscriptionMenuItem from './SubscriptionMenuItem';
export default class SubscriptionMenu extends Dropdown { export default class SubscriptionMenu extends Dropdown {
init() { oninit(vnode) {
super.oninit(vnode);
this.options = [ this.options = [
{ {
subscription: false, subscription: false,
@@ -30,7 +32,7 @@ export default class SubscriptionMenu extends Dropdown {
} }
view() { view() {
const discussion = this.props.discussion; const discussion = this.attrs.discussion;
const subscription = discussion.subscription(); const subscription = discussion.subscription();
let buttonLabel = app.translator.trans('flarum-subscriptions.forum.sub_controls.follow_button'); 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_email_tooltip'
: 'flarum-subscriptions.forum.sub_controls.notify_alert_tooltip')); : 'flarum-subscriptions.forum.sub_controls.notify_alert_tooltip'));
const buttonProps = { const buttonAttrs = {
className: 'Button SubscriptionMenu-button ' + buttonClass, className: 'Button SubscriptionMenu-button ' + buttonClass,
icon: buttonIcon, icon: buttonIcon,
children: buttonLabel,
onclick: this.saveSubscription.bind(this, discussion, ['follow', 'ignore'].indexOf(subscription) !== -1 ? false : 'follow'), onclick: this.saveSubscription.bind(this, discussion, ['follow', 'ignore'].indexOf(subscription) !== -1 ? false : 'follow'),
title: title title: title
}; };
if ((notifyEmail || notifyAlert) && subscription === false) { if ((notifyEmail || notifyAlert) && subscription === false) {
buttonProps.config = element => { buttonAttrs.oncreate = buttonAttrs.onupdate = vnode => {
$(element).tooltip({ $(vnode.dom).tooltip({
container: '.SubscriptionMenu', container: '.SubscriptionMenu',
placement: 'bottom', placement: 'bottom',
delay: 250, delay: 250,
@@ -77,24 +78,24 @@ export default class SubscriptionMenu extends Dropdown {
}); });
} }
} else { } else {
buttonProps.config = element => $(element).tooltip('destroy'); buttonAttrs.onupdate = vnode => $(vnode.dom).tooltip('destroy');
} }
return ( return (
<div className="Dropdown ButtonGroup SubscriptionMenu"> <div className="Dropdown ButtonGroup SubscriptionMenu">
{Button.component(buttonProps)} {Button.component(buttonAttrs, buttonLabel)}
<button className={'Dropdown-toggle Button Button--icon ' + buttonClass} data-toggle="dropdown"> <button className={'Dropdown-toggle Button Button--icon ' + buttonClass} data-toggle="dropdown">
{icon('fas fa-caret-down', {className: 'Button-icon'})} {icon('fas fa-caret-down', {className: 'Button-icon'})}
</button> </button>
<ul className="Dropdown-menu dropdown-menu Dropdown-menu--right"> <ul className="Dropdown-menu dropdown-menu Dropdown-menu--right">
{this.options.map(props => { {this.options.map(attrs => <li>{SubscriptionMenuItem.component({
props.onclick = this.saveSubscription.bind(this, discussion, props.subscription); ...attrs,
props.active = subscription === props.subscription; onclick: this.saveSubscription.bind(this, discussion, attrs.subscription),
active: subscription === attrs.subscription
return <li>{SubscriptionMenuItem.component(props)}</li>; })}</li>
})} )}
</ul> </ul>
</div> </div>
); );

View File

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

View File

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