From 9bbd1e8321e5157f174f28f8db41ef5bc573f3d2 Mon Sep 17 00:00:00 2001 From: Kris Date: Tue, 14 Mar 2023 10:19:39 -0400 Subject: [PATCH] UX: clearer assign messages on first post (#452) --- .../initializers/extend-for-assigns.js | 63 +++++++++++-------- config/locales/client.en.yml | 5 ++ .../acceptance/assigned-topic-test.js | 6 +- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js b/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js index c7ee09d..2e46b2e 100644 --- a/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js +++ b/assets/javascripts/discourse-assign/initializers/extend-for-assigns.js @@ -16,6 +16,7 @@ import { inject as controller } from "@ember/controller"; import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { registerTopicFooterDropdown } from "discourse/lib/register-topic-footer-dropdown"; +import RawHtml from "discourse/widgets/raw-html"; const PLUGIN_ID = "discourse-assign"; @@ -701,36 +702,41 @@ function initialize(api) { ]; const assigneeElements = []; + const assignedHtml = (username, path, type) => { + return `${htmlSafe( + I18n.t("discourse_assign.assigned_topic_to", { + username, + path, + }) + )}`; + }; + if (assignedToUser) { assigneeElements.push( - h("span.assignee", [ - h( - "a", - { - attributes: { - class: "assigned-to-username", - href: assignedToUserPath(assignedToUser), - }, - }, - assignedToUser.username - ), - ]) + h( + "span.assignee", + new RawHtml({ + html: assignedHtml( + assignedToUser.username, + assignedToUserPath(assignedToUser), + "user" + ), + }) + ) ); } if (assignedToGroup) { assigneeElements.push( - h("span.assignee", [ - h( - "a", - { - attributes: { - class: "assigned-to-group", - href: assignedToGroupPath(assignedToGroup), - }, - }, - assignedToGroup.name - ), - ]) + h( + "span.assignee", + new RawHtml({ + html: assignedHtml( + assignedToGroup.name, + assignedToGroupPath(assignedToGroup), + "group" + ), + }) + ) ); } if (indirectlyAssignedTo) { @@ -747,7 +753,10 @@ function initialize(api) { href: `${topic.url}/${postNumber}`, }, }, - `#${postNumber} ${assignee.username || assignee.name}` + I18n.t("discourse_assign.assign_post_to_multiple", { + post_number: postNumber, + username: assignee.username || assignee.name, + }) ), ]) ); @@ -756,7 +765,9 @@ function initialize(api) { if (!isEmpty(assigneeElements)) { return h("p.assigned-to", [ assignedToUser ? iconNode("user-plus") : iconNode("group-plus"), - h("span.assign-text", I18n.t("discourse_assign.assigned_to")), + assignedToUser || assignedToGroup + ? "" + : h("span.assign-text", I18n.t("discourse_assign.assigned")), assigneeElements, ]); } diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 829c94f..169d78a 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -27,6 +27,11 @@ en: assigned: "Assigned" group_everyone: "Everyone" assigned_to: "Assigned to" + assigned_topic_to: "Assigned topic to %{username}" + assign_post_to: "Assigned #%{post_number} to %{username}" + assign_post_to_multiple: + "#%{post_number} to %{username}" + # assign_post_to_multiple used in list form, example: "Assigned topic to username0, [#2 to username1], [#10 to username2]" assigned_to_w_ellipsis: "Assigned to..." assign_notification: "

%{username} %{description}

" assign_group_notification: "

%{username} %{description}

" diff --git a/test/javascripts/acceptance/assigned-topic-test.js b/test/javascripts/acceptance/assigned-topic-test.js index c481998..276f12a 100644 --- a/test/javascripts/acceptance/assigned-topic-test.js +++ b/test/javascripts/acceptance/assigned-topic-test.js @@ -106,7 +106,7 @@ acceptance("Discourse Assign | Assigned topic", function (needs) { ); assert.strictEqual( query("#post_1 .assigned-to").innerText, - "Assigned toeviltrout#2 Developers", + "Assigned topic to eviltrout#2 to Developers", "shows assignment and indirect assignments in the first post" ); assert.ok(exists("#post_1 .assigned-to svg.d-icon-user-plus")); @@ -136,8 +136,8 @@ acceptance("Discourse Assign | Assigned topic", function (needs) { "shows assignment in the header" ); assert.strictEqual( - query("#post_1 .assigned-to-group").innerText.trim(), - "Developers", + query("#post_1 .assigned-to--group").innerText.trim(), + "Assigned topic to Developers", "shows assignment in the first post" ); assert.ok(exists("#post_1 .assigned-to svg.d-icon-group-plus"));