Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit 41a8789

Browse files
authored
DEV: Minor code cleanup (#322)
mostly new i18n imports and qunit-dom
1 parent f6d63b7 commit 41a8789

File tree

8 files changed

+105
-122
lines changed

8 files changed

+105
-122
lines changed

assets/javascripts/discourse/components/solved-unaccept-answer-button.gjs

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,40 @@ import { service } from "@ember/service";
44
import DButton from "discourse/components/d-button";
55
import { ajax } from "discourse/lib/ajax";
66
import { popupAjaxError } from "discourse/lib/ajax-error";
7-
import dIcon from "discourse-common/helpers/d-icon";
8-
import i18n from "discourse-common/helpers/i18n";
7+
import icon from "discourse-common/helpers/d-icon";
8+
import { i18n } from "discourse-i18n";
9+
10+
export function unacceptAnswer(post, appEvents) {
11+
// TODO (glimmer-post-menu): Remove this exported function and move the code into the button action after the widget code is removed
12+
unacceptPost(post);
13+
14+
appEvents.trigger("discourse-solved:solution-toggled", post);
15+
16+
post.get("topic.postStream.posts").forEach((p) => {
17+
p.set("topic_accepted_answer", false);
18+
appEvents.trigger("post-stream:refresh", { id: p.id });
19+
});
20+
}
21+
22+
function unacceptPost(post) {
23+
if (!post.can_unaccept_answer) {
24+
return;
25+
}
26+
const topic = post.topic;
27+
28+
post.setProperties({
29+
can_accept_answer: true,
30+
can_unaccept_answer: false,
31+
accepted_answer: false,
32+
});
33+
34+
topic.set("accepted_answer", undefined);
35+
36+
ajax("/solution/unaccept", {
37+
type: "POST",
38+
data: { id: post.id },
39+
}).catch(popupAjaxError);
40+
}
941

1042
export default class SolvedUnacceptAnswerButton extends Component {
1143
@service appEvents;
@@ -31,7 +63,7 @@ export default class SolvedUnacceptAnswerButton extends Component {
3163
class="accepted-text"
3264
title={{i18n "solved.accepted_description"}}
3365
>
34-
<span>{{dIcon "check"}}</span>
66+
<span>{{icon "check"}}</span>
3567
<span class="accepted-label">
3668
{{i18n "solved.solution"}}
3769
</span>
@@ -40,35 +72,3 @@ export default class SolvedUnacceptAnswerButton extends Component {
4072
</span>
4173
</template>
4274
}
43-
44-
export function unacceptAnswer(post, appEvents) {
45-
// TODO (glimmer-post-menu): Remove this exported function and move the code into the button action after the widget code is removed
46-
unacceptPost(post);
47-
48-
appEvents.trigger("discourse-solved:solution-toggled", post);
49-
50-
post.get("topic.postStream.posts").forEach((p) => {
51-
p.set("topic_accepted_answer", false);
52-
appEvents.trigger("post-stream:refresh", { id: p.id });
53-
});
54-
}
55-
56-
function unacceptPost(post) {
57-
if (!post.can_unaccept_answer) {
58-
return;
59-
}
60-
const topic = post.topic;
61-
62-
post.setProperties({
63-
can_accept_answer: true,
64-
can_unaccept_answer: false,
65-
accepted_answer: false,
66-
});
67-
68-
topic.set("accepted_answer", undefined);
69-
70-
ajax("/solution/unaccept", {
71-
type: "POST",
72-
data: { id: post.id },
73-
}).catch(popupAjaxError);
74-
}

assets/javascripts/discourse/connectors/bread-crumbs-right/solved-status-filter.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Component from "@glimmer/component";
22
import { action } from "@ember/object";
33
import { service } from "@ember/service";
4-
import I18n from "I18n";
4+
import { i18n } from "discourse-i18n";
55

66
const QUERY_PARAM_VALUES = {
77
solved: "yes",
@@ -40,7 +40,7 @@ export default class SolvedStatusFilter extends Component {
4040
get statuses() {
4141
return ["all", "solved", "unsolved"].map((status) => {
4242
return {
43-
name: I18n.t(`solved.topic_status_filter.${status}`),
43+
name: i18n(`solved.topic_status_filter.${status}`),
4444
value: status,
4545
};
4646
});

assets/javascripts/discourse/initializers/extend-for-solved-button.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import TopicStatus from "discourse/raw-views/topic-status";
88
import PostCooked from "discourse/widgets/post-cooked";
99
import { withSilencedDeprecations } from "discourse-common/lib/deprecated";
1010
import { iconHTML, iconNode } from "discourse-common/lib/icon-library";
11-
import I18n from "I18n";
11+
import { i18n } from "discourse-i18n";
1212
import SolvedAcceptAnswerButton, {
1313
acceptAnswer,
1414
} from "../components/solved-accept-answer-button";
@@ -161,11 +161,11 @@ function customizeWidgetPostMenu(api) {
161161
return h(
162162
"span.accepted-text",
163163
{
164-
title: I18n.t("solved.accepted_description"),
164+
title: i18n("solved.accepted_description"),
165165
},
166166
[
167167
h("span", iconNode("check")),
168-
h("span.accepted-label", I18n.t("solved.solution")),
168+
h("span.accepted-label", i18n("solved.solution")),
169169
]
170170
);
171171
},
@@ -194,7 +194,7 @@ export default {
194194
? name
195195
: formatUsername(username);
196196

197-
return I18n.t("solved.accepted_html", {
197+
return i18n("solved.accepted_html", {
198198
icon: iconHTML("check-square", { class: "accepted" }),
199199
username_lower: username.toLowerCase(),
200200
username: displayedUser,
@@ -213,7 +213,7 @@ export default {
213213
results.push({
214214
openTag: "span",
215215
closeTag: "span",
216-
title: I18n.t("topic_statuses.solved.help"),
216+
title: i18n("topic_statuses.solved.help"),
217217
icon: "far-check-square",
218218
key: "solved",
219219
});
@@ -225,7 +225,7 @@ export default {
225225
results.push({
226226
openTag: "span",
227227
closeTag: "span",
228-
title: I18n.t("solved.has_no_accepted_answer"),
228+
title: i18n("solved.has_no_accepted_answer"),
229229
icon: "far-square",
230230
});
231231
}
@@ -246,11 +246,11 @@ export default {
246246
api.addAdvancedSearchOptions({
247247
statusOptions: [
248248
{
249-
name: I18n.t("search.advanced.statuses.solved"),
249+
name: i18n("search.advanced.statuses.solved"),
250250
value: "solved",
251251
},
252252
{
253-
name: I18n.t("search.advanced.statuses.unsolved"),
253+
name: i18n("search.advanced.statuses.unsolved"),
254254
value: "unsolved",
255255
},
256256
],

assets/javascripts/discourse/routes/user-activity-solved.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import UserActivityStreamRoute from "discourse/routes/user-activity-stream";
2-
import I18n from "I18n";
2+
import { i18n } from "discourse-i18n";
33

44
export default class UserActivitySolved extends UserActivityStreamRoute {
55
userActionType = 15;
@@ -10,10 +10,10 @@ export default class UserActivitySolved extends UserActivityStreamRoute {
1010

1111
let title, body;
1212
if (this.isCurrentUser(user)) {
13-
title = I18n.t("solved.no_solved_topics_title");
14-
body = I18n.t("solved.no_solved_topics_body");
13+
title = i18n("solved.no_solved_topics_title");
14+
body = i18n("solved.no_solved_topics_body");
1515
} else {
16-
title = I18n.t("solved.no_solved_topics_title_others", {
16+
title = i18n("solved.no_solved_topics_title_others", {
1717
username: user.username,
1818
});
1919
body = "";

test/javascripts/acceptance/discourse-solved-post-menu-test.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import { click, visit } from "@ember/test-helpers";
22
import { test } from "qunit";
33
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
4-
import I18n from "I18n";
4+
import { i18n } from "discourse-i18n";
55
import { postStreamWithAcceptedAnswerExcerpt } from "../helpers/discourse-solved-helpers";
66

77
acceptance(
88
"Discourse Solved | Post Menu | Accept and Unaccept",
99
function (needs) {
10-
needs.user({
11-
admin: true,
12-
});
10+
needs.user({ admin: true });
1311

1412
needs.settings({
1513
glimmer_post_menu_mode: "enabled",
@@ -23,9 +21,9 @@ acceptance(
2321
helper.response({ success: "OK" })
2422
);
2523

26-
server.get("/t/12.json", () => {
27-
return helper.response(postStreamWithAcceptedAnswerExcerpt(null));
28-
});
24+
server.get("/t/12.json", () =>
25+
helper.response(postStreamWithAcceptedAnswerExcerpt(null))
26+
);
2927
});
3028

3129
test("accepting and unaccepting a post works", async function (assert) {
@@ -34,7 +32,7 @@ acceptance(
3432
assert
3533
.dom("#post_2 .post-action-menu__solved-accepted")
3634
.exists("Unaccept button is visible")
37-
.hasText(I18n.t("solved.solution"), "Unaccept button has correct text");
35+
.hasText(i18n("solved.solution"), "Unaccept button has correct text");
3836

3937
await click("#post_2 .post-action-menu__solved-accepted");
4038

@@ -46,7 +44,7 @@ acceptance(
4644

4745
assert
4846
.dom("#post_2 .post-action-menu__solved-accepted")
49-
.exists("Unccept button is visible again");
47+
.exists("Unaccept button is visible again");
5048
});
5149
}
5250
);
Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,45 @@
11
import { click, fillIn, visit } from "@ember/test-helpers";
22
import { test } from "qunit";
3-
import { fixturesByUrl } from "discourse/tests/helpers/create-pretender";
4-
import { acceptance, queryAll } from "discourse/tests/helpers/qunit-helpers";
3+
import pretender, {
4+
fixturesByUrl,
5+
response,
6+
} from "discourse/tests/helpers/create-pretender";
7+
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
58
import { cloneJSON } from "discourse-common/lib/object";
69
import { postStreamWithAcceptedAnswerExcerpt } from "../helpers/discourse-solved-helpers";
710

811
acceptance("Discourse Solved Plugin", function (needs) {
912
needs.user();
1013

11-
needs.pretender((server, helper) => {
12-
server.get("/t/11.json", () => {
13-
return helper.response(
14-
postStreamWithAcceptedAnswerExcerpt("this is an excerpt")
15-
);
16-
});
17-
18-
server.get("/t/12.json", () => {
19-
return helper.response(postStreamWithAcceptedAnswerExcerpt(null));
20-
});
21-
22-
server.get("/search", () => {
23-
const fixtures = cloneJSON(fixturesByUrl["/search.json"]);
24-
fixtures.topics[0].has_accepted_answer = true;
25-
return helper.response(fixtures);
26-
});
27-
});
28-
2914
test("A topic with an accepted answer shows an excerpt of the answer, if provided", async function (assert) {
30-
await visit("/t/with-excerpt/11");
15+
pretender.get("/t/11.json", () =>
16+
response(postStreamWithAcceptedAnswerExcerpt("this is an excerpt"))
17+
);
3118

32-
assert.strictEqual(
33-
queryAll('.quote blockquote:contains("this is an excerpt")').length,
34-
1
19+
pretender.get("/t/12.json", () =>
20+
response(postStreamWithAcceptedAnswerExcerpt(null))
3521
);
3622

37-
await visit("/t/without-excerpt/12");
23+
await visit("/t/with-excerpt/11");
24+
assert.dom(".quote blockquote").hasText("this is an excerpt");
3825

39-
assert.notStrictEqual(queryAll(".quote blockquote").length, 1);
40-
assert.strictEqual(queryAll(".quote .title.title-only").length, 1);
26+
await visit("/t/without-excerpt/12");
27+
assert.dom(".quote blockquote").doesNotExist();
28+
assert.dom(".quote .title.title-only").exists();
4129
});
4230

4331
test("Full page search displays solved status", async function (assert) {
44-
await visit("/search");
32+
pretender.get("/search", () => {
33+
const fixtures = cloneJSON(fixturesByUrl["/search.json"]);
34+
fixtures.topics[0].has_accepted_answer = true;
35+
return response(fixtures);
36+
});
4537

38+
await visit("/search");
4639
await fillIn(".search-query", "discourse");
4740
await click(".search-cta");
4841

49-
assert.strictEqual(queryAll(".fps-topic").length, 1, "has one post");
50-
51-
assert.ok(queryAll(".topic-status .solved").length, "shows the right icon");
42+
assert.dom(".fps-topic").exists({ count: 1 }, "has one post");
43+
assert.dom(".topic-status .solved").exists("shows the right icon");
5244
});
5345
});
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import { click, visit } from "@ember/test-helpers";
22
import { test } from "qunit";
33
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
4-
import I18n from "I18n";
4+
import { i18n } from "discourse-i18n";
55
import { postStreamWithAcceptedAnswerExcerpt } from "../helpers/discourse-solved-helpers";
66

77
acceptance(
88
"Discourse Solved | Widget Post Menu |Accept and Unaccept",
99
function (needs) {
10-
needs.user({
11-
admin: true,
12-
});
10+
needs.user({ admin: true });
1311

1412
needs.settings({
1513
glimmer_post_menu_mode: "disabled",
@@ -23,9 +21,9 @@ acceptance(
2321
helper.response({ success: "OK" })
2422
);
2523

26-
server.get("/t/12.json", () => {
27-
return helper.response(postStreamWithAcceptedAnswerExcerpt(null));
28-
});
24+
server.get("/t/12.json", () =>
25+
helper.response(postStreamWithAcceptedAnswerExcerpt(null))
26+
);
2927
});
3028

3129
test("accepting and unaccepting a post works", async function (assert) {
@@ -34,15 +32,17 @@ acceptance(
3432
assert
3533
.dom("#post_2 .accepted")
3634
.exists("Unaccept button is visible")
37-
.hasText(I18n.t("solved.solution"), "Unaccept button has correct text");
35+
.hasText(i18n("solved.solution"), "Unaccept button has correct text");
3836

3937
await click("#post_2 .accepted");
4038

4139
assert.dom("#post_2 .unaccepted").exists("Accept button is visible");
4240

4341
await click("#post_2 .unaccepted");
4442

45-
assert.dom("#post_2 .accepted").exists("Unccept button is visible again");
43+
assert
44+
.dom("#post_2 .accepted")
45+
.exists("Unaccept button is visible again");
4646
});
4747
}
4848
);

0 commit comments

Comments
 (0)