diff --git a/assets/javascripts/discourse-assign/assigned-messages-route-map.js.es6 b/assets/javascripts/discourse-assign/assigned-messages-route-map.js.es6 index 67fea45..afee7fd 100644 --- a/assets/javascripts/discourse-assign/assigned-messages-route-map.js.es6 +++ b/assets/javascripts/discourse-assign/assigned-messages-route-map.js.es6 @@ -1,6 +1,6 @@ export default { - resource: 'user.userPrivateMessages', + resource: "user.userPrivateMessages", map() { - this.route('assigned'); + this.route("assigned"); } }; diff --git a/assets/javascripts/discourse-assign/assigns-activity-route-map.js.es6 b/assets/javascripts/discourse-assign/assigns-activity-route-map.js.es6 index 6dfa1e2..3547610 100644 --- a/assets/javascripts/discourse-assign/assigns-activity-route-map.js.es6 +++ b/assets/javascripts/discourse-assign/assigns-activity-route-map.js.es6 @@ -1,6 +1,6 @@ export default { - resource: 'user.userActivity', + resource: "user.userActivity", map() { - this.route('assigned'); + this.route("assigned"); } }; diff --git a/assets/javascripts/discourse-assign/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 b/assets/javascripts/discourse-assign/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 index 1542597..04fa018 100644 --- a/assets/javascripts/discourse-assign/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 +++ b/assets/javascripts/discourse-assign/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 @@ -1,27 +1,30 @@ -import showModal from 'discourse/lib/show-modal'; -import { ajax } from 'discourse/lib/ajax'; +import showModal from "discourse/lib/show-modal"; +import { ajax } from "discourse/lib/ajax"; export default { shouldRender(args, component) { - const needsButton = component.currentUser && component.currentUser.get('staff'); - return needsButton && (!component.get('site.mobileView') || args.topic.get('isPrivateMessage')); + const needsButton = + component.currentUser && component.currentUser.get("staff"); + return ( + needsButton && + (!component.get("site.mobileView") || args.topic.get("isPrivateMessage")) + ); }, actions: { - unassign(){ - - this.set('topic.assigned_to_user', null); + unassign() { + this.set("topic.assigned_to_user", null); return ajax("/assign/unassign", { - type: 'PUT', - data: { topic_id: this.get('topic.id')} + type: "PUT", + data: { topic_id: this.get("topic.id") } }); }, - assign(){ + assign() { showModal("assign-user", { model: { topic: this.topic, - username: this.topic.get('assigned_to_user.username') + username: this.topic.get("assigned_to_user.username") } }); } diff --git a/assets/javascripts/discourse-assign/connectors/user-messages-nav/assigned-messages.js.es6 b/assets/javascripts/discourse-assign/connectors/user-messages-nav/assigned-messages.js.es6 index 153654e..a7ba007 100644 --- a/assets/javascripts/discourse-assign/connectors/user-messages-nav/assigned-messages.js.es6 +++ b/assets/javascripts/discourse-assign/connectors/user-messages-nav/assigned-messages.js.es6 @@ -1,6 +1,10 @@ export function shouldShowAssigned(args, component) { - const needsButton = component.currentUser && component.currentUser.get('staff'); - return needsButton && (!component.get('site.mobileView') || args.model.get('isPrivateMessage')); + const needsButton = + component.currentUser && component.currentUser.get("staff"); + return ( + needsButton && + (!component.get("site.mobileView") || args.model.get("isPrivateMessage")) + ); } export default { diff --git a/assets/javascripts/discourse-assign/controllers/assign-user.js.es6 b/assets/javascripts/discourse-assign/controllers/assign-user.js.es6 index 17fdeaf..adf3b2e 100644 --- a/assets/javascripts/discourse-assign/controllers/assign-user.js.es6 +++ b/assets/javascripts/discourse-assign/controllers/assign-user.js.es6 @@ -1,10 +1,9 @@ //import { default as computed } from 'ember-addons/ember-computed-decorators'; -import { ajax } from 'discourse/lib/ajax'; -import { popupAjaxError } from 'discourse/lib/ajax-error'; +import { ajax } from "discourse/lib/ajax"; +import { popupAjaxError } from "discourse/lib/ajax-error"; export default Ember.Controller.extend({ - - assignSuggestions: function(){ + assignSuggestions: function() { ajax("/assign/suggestions").then(users => { this.set("assignSuggestions", users); }); @@ -17,26 +16,30 @@ export default Ember.Controller.extend({ actions: { assignUser(user) { - this.set('model.username', user.username); - this.send('assign'); + this.set("model.username", user.username); + this.send("assign"); }, - assign(){ + assign() { + let path = "/assign/assign"; - let path = '/assign/assign'; - - if (Ember.isEmpty(this.get('model.username'))) { - path = '/assign/unassign'; - this.set('model.assigned_to_user', null); + if (Ember.isEmpty(this.get("model.username"))) { + path = "/assign/unassign"; + this.set("model.assigned_to_user", null); } - this.send('closeModal'); + this.send("closeModal"); - return ajax(path,{ - type: 'PUT', - data: { username: this.get('model.username'), topic_id: this.get('model.topic.id') } - }).then(()=>{ - // done - }).catch(popupAjaxError); + return ajax(path, { + type: "PUT", + data: { + username: this.get("model.username"), + topic_id: this.get("model.topic.id") + } + }) + .then(() => { + // done + }) + .catch(popupAjaxError); } } }); diff --git a/assets/javascripts/discourse-assign/controllers/user-activity-assigned.js.es6 b/assets/javascripts/discourse-assign/controllers/user-activity-assigned.js.es6 index 5545517..cd1c8aa 100644 --- a/assets/javascripts/discourse-assign/controllers/user-activity-assigned.js.es6 +++ b/assets/javascripts/discourse-assign/controllers/user-activity-assigned.js.es6 @@ -1,25 +1,27 @@ -import { ajax } from 'discourse/lib/ajax'; -import computed from 'ember-addons/ember-computed-decorators'; +import { ajax } from "discourse/lib/ajax"; +import computed from "ember-addons/ember-computed-decorators"; export default Ember.Controller.extend({ user: Ember.inject.controller(), - @computed('model.topics') + @computed("model.topics") canUnassignAll(topics) { - return topics && topics.length && this.currentUser.get('staff'); + return topics && topics.length && this.currentUser.get("staff"); }, actions: { unassignAll() { - let user = this.get('user.model'); + let user = this.get("user.model"); bootbox.confirm( - I18n.t("discourse_assign.unassign_all.confirm", { username: user.get('username') }), + I18n.t("discourse_assign.unassign_all.confirm", { + username: user.get("username") + }), value => { if (value) { ajax("/assign/unassign-all", { - type: 'PUT', - data: { user_id: user.get('id') } - }).then(() => this.send('unassignedAll')); + type: "PUT", + data: { user_id: user.get("id") } + }).then(() => this.send("unassignedAll")); } } ); diff --git a/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 b/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 index a06f4ff..9fa9f6b 100644 --- a/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 +++ b/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js.es6 @@ -1,190 +1,212 @@ -import { withPluginApi } from 'discourse/lib/plugin-api'; -import { default as computed } from 'ember-addons/ember-computed-decorators'; +import { withPluginApi } from "discourse/lib/plugin-api"; +import { default as computed } from "ember-addons/ember-computed-decorators"; // should this be in API ? -import showModal from 'discourse/lib/show-modal'; -import { iconNode } from 'discourse-common/lib/icon-library'; -import { h } from 'virtual-dom'; +import showModal from "discourse/lib/show-modal"; +import { iconNode } from "discourse-common/lib/icon-library"; +import { h } from "virtual-dom"; function modifySelectKit(api) { - api.modifySelectKit("topic-footer-mobile-dropdown") - .modifyContent((context, existingContent) => { - if (context.get('currentUser.staff')) { - existingContent.push({ - id: 'assign', - icon: 'user-plus', - name: I18n.t('discourse_assign.assign.title') - }); - } - return existingContent; - }) - .onSelect((context, value) => { - if (!context.get('currentUser.staff')) { - return; - } + api + .modifySelectKit("topic-footer-mobile-dropdown") + .modifyContent((context, existingContent) => { + if (context.get("currentUser.staff")) { + existingContent.push({ + id: "assign", + icon: "user-plus", + name: I18n.t("discourse_assign.assign.title") + }); + } + return existingContent; + }) + .onSelect((context, value) => { + if (!context.get("currentUser.staff")) { + return; + } - const topic = context.get('topic'); + const topic = context.get("topic"); - if (value === 'assign') { - showModal("assign-user", { - model: { - topic, - username: topic.get('assigned_to_user.username') - } - }); - context.set('value', null); - } - }); + if (value === "assign") { + showModal("assign-user", { + model: { + topic, + username: topic.get("assigned_to_user.username") + } + }); + context.set("value", null); + } + }); } function initialize(api) { // You can't act on flags claimed by another user - api.modifyClass('component:flagged-post', { - @computed('flaggedPost.topic.assigned_to_user_id') - canAct(assignedToUserId) { - let { siteSettings } = this; + api.modifyClass( + "component:flagged-post", + { + @computed("flaggedPost.topic.assigned_to_user_id") + canAct(assignedToUserId) { + let { siteSettings } = this; - if (siteSettings.assign_locks_flags) { + if (siteSettings.assign_locks_flags) { + let unassigned = this.currentUser.id !== assignedToUserId; - let unassigned = (this.currentUser.id !== assignedToUserId); + // Can never act on another user's flags + if (assignedToUserId && unassigned) { + return false; + } - // Can never act on another user's flags - if (assignedToUserId && unassigned) { - return false; + // If flags require assignment + if (this.siteSettings.flags_require_assign && unassigned) { + return false; + } } - // If flags require assignment - if (this.siteSettings.flags_require_assign && unassigned) { - return false; - } + return this.get("actableFilter"); + }, + + didInsertElement() { + this._super(); + this.messageBus.subscribe("/staff/topic-assignment", data => { + let flaggedPost = this.get("flaggedPost"); + if (data.topic_id === flaggedPost.get("topic.id")) { + flaggedPost.set( + "topic.assigned_to_user_id", + data.type === "assigned" ? data.assigned_to.id : null + ); + flaggedPost.set("topic.assigned_to_user", data.assigned_to); + } + }); + }, + + willDestroyElement() { + this._super(); + this.messageBus.unsubscribe("/staff/topic-assignment"); } - - return this.get('actableFilter'); }, + { ignoreMissing: true } + ); - didInsertElement() { - this._super(); - this.messageBus.subscribe("/staff/topic-assignment", data => { - - let flaggedPost = this.get('flaggedPost'); - if (data.topic_id === flaggedPost.get('topic.id')) { - flaggedPost.set('topic.assigned_to_user_id', - data.type === 'assigned' ? data.assigned_to.id : null - ); - flaggedPost.set('topic.assigned_to_user', data.assigned_to); - } - }); - }, - - willDestroyElement() { - this._super(); - this.messageBus.unsubscribe("/staff/topic-assignment"); - } - }, { ignoreMissing: true }); - - api.modifyClass('model:topic', { - @computed('assigned_to_user') + api.modifyClass("model:topic", { + @computed("assigned_to_user") assignedToUserPath(assignedToUser) { return this.siteSettings.assigns_user_url_path.replace( "{username}", - Ember.get(assignedToUser, 'username') + Ember.get(assignedToUser, "username") ); } }); - api.addPostSmallActionIcon('assigned','user-plus'); - api.addPostSmallActionIcon('unassigned','user-times'); + api.addPostSmallActionIcon("assigned", "user-plus"); + api.addPostSmallActionIcon("unassigned", "user-times"); api.addPostTransformCallback(transformed => { - if (transformed.actionCode === "assigned" || transformed.actionCode === "unassigned") { + if ( + transformed.actionCode === "assigned" || + transformed.actionCode === "unassigned" + ) { transformed.isSmallAction = true; transformed.canEdit = false; } }); - api.addDiscoveryQueryParam('assigned', {replace: true, refreshModel: true}); + api.addDiscoveryQueryParam("assigned", { replace: true, refreshModel: true }); - api.addTagsHtmlCallback((topic) => { - const assignedTo = topic.get('assigned_to_user.username'); + api.addTagsHtmlCallback(topic => { + const assignedTo = topic.get("assigned_to_user.username"); if (assignedTo) { - const assignedPath = topic.get('assignedToUserPath'); + const assignedPath = topic.get("assignedToUserPath"); return `${assignedTo}`; } - }); api.addUserMenuGlyph(widget => { - if (widget.currentUser && - widget.currentUser.get('staff') && - widget.siteSettings.assign_enabled) { - + if ( + widget.currentUser && + widget.currentUser.get("staff") && + widget.siteSettings.assign_enabled + ) { return { - label: 'discourse_assign.assigned', - className: 'assigned', - icon: 'user-plus', - href: `${widget.currentUser.get("path")}/activity/assigned`, + label: "discourse_assign.assigned", + className: "assigned", + icon: "user-plus", + href: `${widget.currentUser.get("path")}/activity/assigned` }; } }); - api.createWidget('assigned-to', { + api.createWidget("assigned-to", { html(attrs) { let { assignedToUser, href } = attrs; - return h('p.assigned-to', [ - iconNode('user-plus'), - h('span.assign-text', I18n.t('discourse_assign.assigned_to')), - h('a', { attributes: { class: 'assigned-to-username', href } }, assignedToUser.username) + return h("p.assigned-to", [ + iconNode("user-plus"), + h("span.assign-text", I18n.t("discourse_assign.assigned_to")), + h( + "a", + { attributes: { class: "assigned-to-username", href } }, + assignedToUser.username + ) ]); } }); - api.createWidget('assigned-to', { + api.createWidget("assigned-to", { html(attrs) { let { assignedToUser, href } = attrs; - return h('p.assigned-to', [ - iconNode('user-plus'), - h('span.assign-text', I18n.t('discourse_assign.assigned_to')), - h('a', { attributes: { class: 'assigned-to-username', href } }, assignedToUser.username) + return h("p.assigned-to", [ + iconNode("user-plus"), + h("span.assign-text", I18n.t("discourse_assign.assigned_to")), + h( + "a", + { attributes: { class: "assigned-to-username", href } }, + assignedToUser.username + ) ]); } }); - api.createWidget('assigned-to', { + api.createWidget("assigned-to", { html(attrs) { let { assignedToUser, href } = attrs; - return h('p.assigned-to', [ - iconNode('user-plus'), - h('span.assign-text', I18n.t('discourse_assign.assigned_to')), - h('a', { attributes: { class: 'assigned-to-username', href } }, assignedToUser.username) + return h("p.assigned-to", [ + iconNode("user-plus"), + h("span.assign-text", I18n.t("discourse_assign.assigned_to")), + h( + "a", + { attributes: { class: "assigned-to-username", href } }, + assignedToUser.username + ) ]); } }); - api.decorateWidget('post-contents:after-cooked', dec => { + api.decorateWidget("post-contents:after-cooked", dec => { if (dec.attrs.post_number === 1) { const postModel = dec.getModel(); if (postModel) { - const assignedToUser = postModel.get('topic.assigned_to_user'); + const assignedToUser = postModel.get("topic.assigned_to_user"); if (assignedToUser) { - return dec.widget.attach('assigned-to', { + return dec.widget.attach("assigned-to", { assignedToUser, - href: postModel.get('topic.assignedToUserPath') + href: postModel.get("topic.assignedToUserPath") }); } } } }); - api.replaceIcon('notification.discourse_assign.assign_notification', 'user-plus'); -}; + api.replaceIcon( + "notification.discourse_assign.assign_notification", + "user-plus" + ); +} export default { - name: 'extend-for-assign', + name: "extend-for-assign", initialize(container) { - withPluginApi('0.8.11', api => initialize(api, container)); - withPluginApi('0.8.13', api => modifySelectKit(api, container)); + withPluginApi("0.8.11", api => initialize(api, container)); + withPluginApi("0.8.13", api => modifySelectKit(api, container)); } }; diff --git a/assets/javascripts/discourse-assign/routes/user-private-messages-assigned.js.es6 b/assets/javascripts/discourse-assign/routes/user-private-messages-assigned.js.es6 index 60bd40d..a7bab1d 100644 --- a/assets/javascripts/discourse-assign/routes/user-private-messages-assigned.js.es6 +++ b/assets/javascripts/discourse-assign/routes/user-private-messages-assigned.js.es6 @@ -1,3 +1,7 @@ import createPMRoute from "discourse/routes/build-private-messages-route"; -export default createPMRoute('assigned', 'private-messages-assigned', 'assigned'); +export default createPMRoute( + "assigned", + "private-messages-assigned", + "assigned" +); diff --git a/assets/javascripts/discourse/components/assigned-to.js.es6 b/assets/javascripts/discourse/components/assigned-to.js.es6 index 493a0f1..aa7e0e3 100644 --- a/assets/javascripts/discourse/components/assigned-to.js.es6 +++ b/assets/javascripts/discourse/components/assigned-to.js.es6 @@ -1,3 +1,3 @@ export default Ember.Component.extend({ - classNames: ['assigned-to-user'] + classNames: ["assigned-to-user"] }); diff --git a/assets/javascripts/discourse/components/claim-topic.js.es6 b/assets/javascripts/discourse/components/claim-topic.js.es6 index e8916be..dca72f1 100644 --- a/assets/javascripts/discourse/components/claim-topic.js.es6 +++ b/assets/javascripts/discourse/components/claim-topic.js.es6 @@ -1,44 +1,52 @@ -import { ajax } from 'discourse/lib/ajax'; -import { popupAjaxError } from 'discourse/lib/ajax-error'; +import { ajax } from "discourse/lib/ajax"; +import { popupAjaxError } from "discourse/lib/ajax-error"; export default Ember.Component.extend({ - tagName: '', + tagName: "", claiming: false, unassigning: false, actions: { unassign() { - this.set('unassigning', true); + this.set("unassigning", true); return ajax("/assign/unassign", { - type: 'PUT', - data: { topic_id: this.get('topic.id') } - }).then(() => { - this.set('topic.assigned_to_user', null); - }).catch(popupAjaxError).finally(() => { - this.set('unassigning', false); - }); + type: "PUT", + data: { topic_id: this.get("topic.id") } + }) + .then(() => { + this.set("topic.assigned_to_user", null); + }) + .catch(popupAjaxError) + .finally(() => { + this.set("unassigning", false); + }); }, claim() { - this.set('claiming', true); + this.set("claiming", true); - let topic = this.get('topic'); + let topic = this.get("topic"); ajax(`/assign/claim/${topic.id}`, { - method: 'PUT' - }).then(() => { - this.set('topic.assigned_to_user', this.currentUser); - }).catch(e => { - if (e.jqXHR && e.jqXHR.responseJSON) { - let json = e.jqXHR.responseJSON; - if (json && json.extras) { - this.set('topic.assigned_to_user', json.extras.assigned_to); + method: "PUT" + }) + .then(() => { + this.set("topic.assigned_to_user", this.currentUser); + }) + .catch(e => { + if (e.jqXHR && e.jqXHR.responseJSON) { + let json = e.jqXHR.responseJSON; + if (json && json.extras) { + this.set("topic.assigned_to_user", json.extras.assigned_to); + } } - } - return popupAjaxError(e); - }).finally(() => { - if (this.isDestroying || this.isDestroyed) { return; } - this.set('claiming', false); - }); + return popupAjaxError(e); + }) + .finally(() => { + if (this.isDestroying || this.isDestroyed) { + return; + } + this.set("claiming", false); + }); } } }); diff --git a/assets/javascripts/discourse/components/flagged-topic-listener.js.es6 b/assets/javascripts/discourse/components/flagged-topic-listener.js.es6 index 30651c7..85f5a96 100644 --- a/assets/javascripts/discourse/components/flagged-topic-listener.js.es6 +++ b/assets/javascripts/discourse/components/flagged-topic-listener.js.es6 @@ -1,6 +1,6 @@ function assignIfEqual(topic, data) { if (topic && topic.id === data.topic_id) { - Ember.set(topic, 'assigned_to_user', data.assigned_to); + Ember.set(topic, "assigned_to_user", data.assigned_to); } } @@ -8,11 +8,11 @@ export default Ember.Component.extend({ didInsertElement() { this._super(); this.messageBus.subscribe("/staff/topic-assignment", data => { - let flaggedTopics = this.get('flaggedTopics'); + let flaggedTopics = this.get("flaggedTopics"); if (flaggedTopics) { flaggedTopics.forEach(ft => assignIfEqual(ft.topic, data)); } else { - assignIfEqual(this.get('topic'), data); + assignIfEqual(this.get("topic"), data); } }); }, diff --git a/assets/stylesheets/assigns.scss b/assets/stylesheets/assigns.scss index 57fb284..998ea4d 100644 --- a/assets/stylesheets/assigns.scss +++ b/assets/stylesheets/assigns.scss @@ -11,7 +11,8 @@ } .assigned-to { - .d-icon, i.fa { + .d-icon, + i.fa { margin-right: 0.25em; color: $primary-medium; }