mirror of
https://github.com/flarum/core.git
synced 2025-08-04 23:47:32 +02:00
committed by
GitHub
parent
73579883f6
commit
6bdbee70db
@@ -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));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -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';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -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'))
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -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()});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
|
@@ -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');
|
||||||
|
Reference in New Issue
Block a user