diff --git a/extensions/flags/CHANGELOG.md b/extensions/flags/CHANGELOG.md new file mode 100644 index 000000000..9b721a447 --- /dev/null +++ b/extensions/flags/CHANGELOG.md @@ -0,0 +1,10 @@ +# Change Log +All notable changes to the Flags extension will be documented in this file. +This project adheres to [Semantic Versioning](http://semver.org/). + +## [0.1.0-beta.4] - 2015-11-05 +### Added +- Show a success message after submitting a flag +- Expand reason descriptions and add a configurable link to community guidelines + +[0.1.0-beta.4]: https://github.com/flarum/flags/compare/v0.1.0-beta.3...v0.1.0-beta.4 diff --git a/extensions/flags/js/admin/dist/extension.js b/extensions/flags/js/admin/dist/extension.js index d93520261..8a5030f5f 100644 --- a/extensions/flags/js/admin/dist/extension.js +++ b/extensions/flags/js/admin/dist/extension.js @@ -1,7 +1,56 @@ -System.register('flarum/flags/main', ['flarum/extend', 'flarum/app', 'flarum/components/PermissionGrid'], function (_export) { +System.register('flarum/flags/components/FlagsSettingsModal', ['flarum/components/SettingsModal'], function (_export) { 'use strict'; - var extend, app, PermissionGrid; + var SettingsModal, FlagsSettingsModal; + return { + setters: [function (_flarumComponentsSettingsModal) { + SettingsModal = _flarumComponentsSettingsModal['default']; + }], + execute: function () { + FlagsSettingsModal = (function (_SettingsModal) { + babelHelpers.inherits(FlagsSettingsModal, _SettingsModal); + + function FlagsSettingsModal() { + babelHelpers.classCallCheck(this, FlagsSettingsModal); + babelHelpers.get(Object.getPrototypeOf(FlagsSettingsModal.prototype), 'constructor', this).apply(this, arguments); + } + + babelHelpers.createClass(FlagsSettingsModal, [{ + key: 'className', + value: function className() { + return 'FlagsSettingsModal Modal--small'; + } + }, { + key: 'title', + value: function title() { + return app.translator.trans('flarum-flags.admin.settings.title'); + } + }, { + key: 'form', + value: function form() { + return [m( + 'div', + { className: 'Form-group' }, + m( + 'label', + null, + app.translator.trans('flarum-flags.admin.settings.guidelines_url_label') + ), + m('input', { className: 'FormControl', bidi: this.setting('flarum-flags.guidelines_url') }) + )]; + } + }]); + return FlagsSettingsModal; + })(SettingsModal); + + _export('default', FlagsSettingsModal); + } + }; +});; +System.register('flarum/flags/main', ['flarum/extend', 'flarum/app', 'flarum/components/PermissionGrid', 'flarum/flags/components/FlagsSettingsModal'], function (_export) { + 'use strict'; + + var extend, app, PermissionGrid, FlagsSettingsModal; return { setters: [function (_flarumExtend) { extend = _flarumExtend.extend; @@ -9,10 +58,16 @@ System.register('flarum/flags/main', ['flarum/extend', 'flarum/app', 'flarum/com app = _flarumApp['default']; }, function (_flarumComponentsPermissionGrid) { PermissionGrid = _flarumComponentsPermissionGrid['default']; + }, function (_flarumFlagsComponentsFlagsSettingsModal) { + FlagsSettingsModal = _flarumFlagsComponentsFlagsSettingsModal['default']; }], execute: function () { app.initializers.add('flarum-flags', function () { + app.extensionSettings['flarum-flags'] = function () { + return app.modal.show(new FlagsSettingsModal()); + }; + extend(PermissionGrid.prototype, 'moderateItems', function (items) { items.add('viewFlags', { icon: 'flag', diff --git a/extensions/flags/js/forum/dist/extension.js b/extensions/flags/js/forum/dist/extension.js index ac78440f8..caf88d4d1 100644 --- a/extensions/flags/js/forum/dist/extension.js +++ b/extensions/flags/js/forum/dist/extension.js @@ -359,6 +359,8 @@ System.register('flarum/flags/components/FlagPostModal', ['flarum/components/Mod value: function init() { babelHelpers.get(Object.getPrototypeOf(FlagPostModal.prototype), 'init', this).call(this); + this.success = false; + this.reason = m.prop(''); this.reasonDetail = m.prop(''); } @@ -375,20 +377,42 @@ System.register('flarum/flags/components/FlagPostModal', ['flarum/components/Mod }, { key: 'content', value: function content() { + if (this.success) { + return m( + 'div', + { className: 'Modal-body' }, + m( + 'div', + { className: 'Form Form--centered' }, + m( + 'p', + { className: 'helpText' }, + app.translator.trans('flarum-flags.forum.flag_post.confirmation_message') + ), + m( + 'div', + { className: 'Form-group' }, + m( + Button, + { className: 'Button Button--primary Button--block', onclick: this.hide.bind(this) }, + app.translator.trans('flarum-flags.forum.flag_post.dismiss_button') + ) + ) + ) + ); + } + + var guidelinesUrl = app.forum.attribute('guidelinesUrl'); + return m( 'div', { className: 'Modal-body' }, m( 'div', - { className: 'Form' }, + { className: 'Form Form--centered' }, m( 'div', { className: 'Form-group' }, - m( - 'label', - null, - app.translator.trans('flarum-flags.forum.flag_post.reason_heading') - ), m( 'div', null, @@ -396,25 +420,46 @@ System.register('flarum/flags/components/FlagPostModal', ['flarum/components/Mod 'label', { className: 'checkbox' }, m('input', { type: 'radio', name: 'reason', checked: this.reason() === 'off_topic', value: 'off_topic', onclick: m.withAttr('value', this.reason) }), - app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label') + m( + 'strong', + null, + app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label') + ), + app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_text') ), m( 'label', { className: 'checkbox' }, m('input', { type: 'radio', name: 'reason', checked: this.reason() === 'inappropriate', value: 'inappropriate', onclick: m.withAttr('value', this.reason) }), - app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_label') + m( + 'strong', + null, + app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_label') + ), + app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_text', { + a: guidelinesUrl ? m('a', { href: guidelinesUrl, target: '_blank' }) : undefined + }) ), m( 'label', { className: 'checkbox' }, m('input', { type: 'radio', name: 'reason', checked: this.reason() === 'spam', value: 'spam', onclick: m.withAttr('value', this.reason) }), - app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label') + m( + 'strong', + null, + app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label') + ), + app.translator.trans('flarum-flags.forum.flag_post.reason_spam_text') ), m( 'label', { className: 'checkbox' }, m('input', { type: 'radio', name: 'reason', checked: this.reason() === 'other', value: 'other', onclick: m.withAttr('value', this.reason) }), - app.translator.trans('flarum-flags.forum.flag_post.reason_other_label'), + m( + 'strong', + null, + app.translator.trans('flarum-flags.forum.flag_post.reason_other_label') + ), this.reason() === 'other' ? m('textarea', { className: 'FormControl', value: this.reasonDetail(), oninput: m.withAttr('value', this.reasonDetail) }) : '' ) ) @@ -425,7 +470,7 @@ System.register('flarum/flags/components/FlagPostModal', ['flarum/components/Mod m( Button, { - className: 'Button Button--primary', + className: 'Button Button--primary Button--block', type: 'submit', loading: this.loading, disabled: !this.reason() }, @@ -452,8 +497,8 @@ System.register('flarum/flags/components/FlagPostModal', ['flarum/components/Mod post: this.props.post } }).then(function () { - return _this.hide(); - }, this.loaded.bind(this)); + return _this.success = true; + })['finally'](this.loaded.bind(this)); } }]); return FlagPostModal;