mirror of
https://github.com/flarum/core.git
synced 2025-08-05 07:57:46 +02:00
Flag improvements/tweaks (#18)
* Option to allow users to flag their own post * Increase size of "Flag Post" modal * Allow optional reason detail for offtopic, inappropriate and spam reasons * For other reasons, detail text is now required * Switch to column type "text" to allow more details in reason
This commit is contained in:
@@ -14,6 +14,12 @@ export default class FlagsSettingsModal extends SettingsModal {
|
||||
<div className="Form-group">
|
||||
<label>{app.translator.trans('flarum-flags.admin.settings.guidelines_url_label')}</label>
|
||||
<input className="FormControl" bidi={this.setting('flarum-flags.guidelines_url')}/>
|
||||
</div>,
|
||||
<div className="Form-group">
|
||||
<label className="checkbox">
|
||||
<input type="checkbox" bidi={this.setting('flarum-flags.can_flag_own')}/>
|
||||
{app.translator.trans('flarum-flags.admin.settings.user_can_flag_own_posts')}
|
||||
</label>
|
||||
</div>
|
||||
];
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ import FlagPostModal from './components/FlagPostModal';
|
||||
|
||||
export default function() {
|
||||
extend(PostControls, 'userControls', function(items, post) {
|
||||
if (post.isHidden() || post.contentType() !== 'comment' || !post.canFlag() || post.user() === app.session.user) return;
|
||||
if (post.isHidden() || post.contentType() !== 'comment' || !post.canFlag()) return;
|
||||
|
||||
items.add('flag',
|
||||
<Button icon="fas fa-flag" onclick={() => app.modal.show(new FlagPostModal({post}))}>{app.translator.trans('flarum-flags.forum.post_controls.flag_button')}</Button>
|
||||
|
@@ -4,6 +4,7 @@ import Post from 'flarum/components/Post';
|
||||
import Button from 'flarum/components/Button';
|
||||
import ItemList from 'flarum/utils/ItemList';
|
||||
import PostControls from 'flarum/utils/PostControls';
|
||||
import humanTime from 'flarum/utils/humanTime';
|
||||
|
||||
export default function() {
|
||||
extend(Post.prototype, 'attrs', function(attrs) {
|
||||
@@ -105,9 +106,10 @@ export default function() {
|
||||
const user = flag.user();
|
||||
const reason = flag.reason();
|
||||
const detail = flag.reasonDetail();
|
||||
const time = humanTime(flag.createdAt());
|
||||
|
||||
return [
|
||||
app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', {user, reason}),
|
||||
app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', {time, user, reason}),
|
||||
detail ? <span className="Post-flagged-detail">{detail}</span> : ''
|
||||
];
|
||||
}
|
||||
|
@@ -12,7 +12,7 @@ export default class FlagPostModal extends Modal {
|
||||
}
|
||||
|
||||
className() {
|
||||
return 'FlagPostModal Modal--small';
|
||||
return 'FlagPostModal Modal--medium';
|
||||
}
|
||||
|
||||
title() {
|
||||
@@ -46,6 +46,9 @@ export default class FlagPostModal extends Modal {
|
||||
<input type="radio" name="reason" checked={this.reason() === 'off_topic'} value="off_topic" onclick={m.withAttr('value', this.reason)}/>
|
||||
<strong>{app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label')}</strong>
|
||||
{app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_text')}
|
||||
{this.reason() === 'off_topic' ? (
|
||||
<textarea className="FormControl" placeholder={app.translator.trans('flarum-flags.forum.flag_post.optional_details')} value={this.reasonDetail()} oninput={m.withAttr('value', this.reasonDetail)}></textarea>
|
||||
) : ''}
|
||||
</label>
|
||||
|
||||
<label className="checkbox">
|
||||
@@ -54,12 +57,18 @@ export default class FlagPostModal extends Modal {
|
||||
{app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_text', {
|
||||
a: guidelinesUrl ? <a href={guidelinesUrl} target="_blank"/> : undefined
|
||||
})}
|
||||
{this.reason() === 'inappropriate' ? (
|
||||
<textarea className="FormControl" placeholder={app.translator.trans('flarum-flags.forum.flag_post.optional_details')} value={this.reasonDetail()} oninput={m.withAttr('value', this.reasonDetail)}></textarea>
|
||||
) : ''}
|
||||
</label>
|
||||
|
||||
<label className="checkbox">
|
||||
<input type="radio" name="reason" checked={this.reason() === 'spam'} value="spam" onclick={m.withAttr('value', this.reason)}/>
|
||||
<strong>{app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label')}</strong>
|
||||
{app.translator.trans('flarum-flags.forum.flag_post.reason_spam_text')}
|
||||
{this.reason() === 'spam' ? (
|
||||
<textarea className="FormControl" placeholder={app.translator.trans('flarum-flags.forum.flag_post.optional_details')} value={this.reasonDetail()} oninput={m.withAttr('value', this.reasonDetail)}></textarea>
|
||||
) : ''}
|
||||
</label>
|
||||
|
||||
<label className="checkbox">
|
||||
@@ -98,9 +107,17 @@ export default class FlagPostModal extends Modal {
|
||||
user: app.session.user,
|
||||
post: this.props.post
|
||||
}
|
||||
})
|
||||
}, {errorHandler: this.onerror.bind(this)})
|
||||
.then(() => this.success = true)
|
||||
.catch(() => {})
|
||||
.then(this.loaded.bind(this));
|
||||
}
|
||||
|
||||
onerror(error) {
|
||||
if (error.status === 422) {
|
||||
error.alert.props.children = app.translator.trans('flarum-flags.forum.flag_post.reason-needed');
|
||||
}
|
||||
|
||||
super.onerror(error);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user