- {{#if k.revoked_at}}{{d-icon "circle-xmark"}}{{/if}}
{{k.truncatedKey}}
|
@@ -57,6 +57,20 @@
{{i18n "admin.api.never_used"}}
{{/if}}
|
+
+ {{i18n
+ "admin.site_settings.table_column_heading.status"
+ }}
+ {{#if k.revoked_at}}
+
+
+
+
+ {{i18n "admin.api.revoked"}}
+
+
+ {{/if}}
+ |
-
+
{{i18n "admin.dashboard.whats_new_in_discourse"}}
-
+
{{/if}}
diff --git a/app/assets/javascripts/admin/addon/templates/user-index.hbs b/app/assets/javascripts/admin/addon/templates/user-index.hbs
index b1a5ac21a9b..a9daf9b951a 100644
--- a/app/assets/javascripts/admin/addon/templates/user-index.hbs
+++ b/app/assets/javascripts/admin/addon/templates/user-index.hbs
@@ -10,7 +10,7 @@
{{#if this.model.can_view_action_logs}}
@@ -850,7 +850,7 @@
{{else}}
<:actions as |actions|>
diff --git a/app/assets/javascripts/admin/package.json b/app/assets/javascripts/admin/package.json
index b28ca1a1db3..8c110ea710a 100644
--- a/app/assets/javascripts/admin/package.json
+++ b/app/assets/javascripts/admin/package.json
@@ -39,7 +39,7 @@
"ember-source": "~5.5.0",
"ember-source-channel-url": "^3.0.0",
"loader.js": "^4.7.0",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/custom-proxy/package.json b/app/assets/javascripts/custom-proxy/package.json
index 34daeba3a1c..c0869935aba 100644
--- a/app/assets/javascripts/custom-proxy/package.json
+++ b/app/assets/javascripts/custom-proxy/package.json
@@ -18,7 +18,7 @@
},
"devDependencies": {
"clean-base-url": "^1.0.0",
- "express": "^4.21.1",
+ "express": "^4.21.2",
"glob": "^10.4.3",
"html-entities": "^2.5.2",
"html-rewriter-wasm": "^0.4.1",
diff --git a/app/assets/javascripts/dialog-holder/package.json b/app/assets/javascripts/dialog-holder/package.json
index 343c7288ea0..b8fa7ccf679 100644
--- a/app/assets/javascripts/dialog-holder/package.json
+++ b/app/assets/javascripts/dialog-holder/package.json
@@ -19,7 +19,7 @@
"@types/jquery": "^3.5.32",
"@types/qunit": "^2.19.12",
"@types/rsvp": "^4.0.9",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/discourse-common/package.json b/app/assets/javascripts/discourse-common/package.json
index b7efae79963..341878af974 100644
--- a/app/assets/javascripts/discourse-common/package.json
+++ b/app/assets/javascripts/discourse-common/package.json
@@ -41,7 +41,7 @@
"ember-source": "~5.5.0",
"ember-source-channel-url": "^3.0.0",
"loader.js": "^4.7.0",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/discourse-plugins/package.json b/app/assets/javascripts/discourse-plugins/package.json
index fd5d48ca5ab..7b171c0fe12 100644
--- a/app/assets/javascripts/discourse-plugins/package.json
+++ b/app/assets/javascripts/discourse-plugins/package.json
@@ -19,7 +19,7 @@
},
"devDependencies": {
"ember-cli": "~6.0.1",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/discourse-widget-hbs/package.json b/app/assets/javascripts/discourse-widget-hbs/package.json
index 667c5957179..fbb2b833b56 100644
--- a/app/assets/javascripts/discourse-widget-hbs/package.json
+++ b/app/assets/javascripts/discourse-widget-hbs/package.json
@@ -36,7 +36,7 @@
"ember-source": "~5.5.0",
"ember-source-channel-url": "^3.0.0",
"loader.js": "^4.7.0",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/discourse/app/components/bookmark-icon.gjs b/app/assets/javascripts/discourse/app/components/bookmark-icon.gjs
new file mode 100644
index 00000000000..a1facfcbb73
--- /dev/null
+++ b/app/assets/javascripts/discourse/app/components/bookmark-icon.gjs
@@ -0,0 +1,35 @@
+import Component from "@glimmer/component";
+import {
+ NO_REMINDER_ICON,
+ WITH_REMINDER_ICON,
+} from "discourse/models/bookmark";
+import icon from "discourse-common/helpers/d-icon";
+import { i18n } from "discourse-i18n";
+
+export default class BookmarkIcon extends Component {
+ get icon() {
+ if (this.args.bookmark?.get("reminder_at")) {
+ return WITH_REMINDER_ICON;
+ }
+
+ return NO_REMINDER_ICON;
+ }
+
+ get cssClasses() {
+ return this.args.bookmark
+ ? "bookmark-icon bookmark-icon__bookmarked"
+ : "bookmark-icon";
+ }
+
+ get title() {
+ if (!this.args.bookmark) {
+ return i18n("bookmarks.create");
+ }
+
+ return this.args.bookmark.get("reminderTitle");
+ }
+
+
+ {{icon this.icon translatedTitle=this.title class=this.cssClasses}}
+
+}
diff --git a/app/assets/javascripts/discourse/app/components/bookmark-icon.hbs b/app/assets/javascripts/discourse/app/components/bookmark-icon.hbs
deleted file mode 100644
index fb00ea5f2b7..00000000000
--- a/app/assets/javascripts/discourse/app/components/bookmark-icon.hbs
+++ /dev/null
@@ -1 +0,0 @@
-{{d-icon this.icon translatedTitle=this.title class=this.cssClasses}}
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/app/components/bookmark-icon.js b/app/assets/javascripts/discourse/app/components/bookmark-icon.js
deleted file mode 100644
index 11389c548ad..00000000000
--- a/app/assets/javascripts/discourse/app/components/bookmark-icon.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import Component from "@ember/component";
-import { computed } from "@ember/object";
-import { isEmpty } from "@ember/utils";
-import {
- NO_REMINDER_ICON,
- WITH_REMINDER_ICON,
-} from "discourse/models/bookmark";
-import { i18n } from "discourse-i18n";
-
-export default class BookmarkIcon extends Component {
- tagName = "";
- bookmark = null;
-
- @computed("bookmark.reminder_at")
- get icon() {
- if (!this.bookmark) {
- return NO_REMINDER_ICON;
- }
-
- if (!isEmpty(this.bookmark.reminder_at)) {
- return WITH_REMINDER_ICON;
- }
-
- return NO_REMINDER_ICON;
- }
-
- @computed("bookmark")
- get cssClasses() {
- return this.bookmark
- ? "bookmark-icon bookmark-icon__bookmarked"
- : "bookmark-icon";
- }
-
- @computed("bookmark.title")
- get title() {
- if (!this.bookmark) {
- return i18n("bookmarks.create");
- }
-
- return this.bookmark.reminderTitle;
- }
-}
diff --git a/app/assets/javascripts/discourse/app/components/composer-editor.js b/app/assets/javascripts/discourse/app/components/composer-editor.js
index dafc514b632..792b2a06753 100644
--- a/app/assets/javascripts/discourse/app/components/composer-editor.js
+++ b/app/assets/javascripts/discourse/app/components/composer-editor.js
@@ -200,6 +200,7 @@ export default class ComposerEditor extends Component {
@bind
setupEditor(textManipulation) {
this.textManipulation = textManipulation;
+ this.uppyComposerUpload.textManipulation = textManipulation;
const input = this.element.querySelector(".d-editor-input");
diff --git a/app/assets/javascripts/discourse/app/components/d-editor.js b/app/assets/javascripts/discourse/app/components/d-editor.js
index 771c9bef2a8..5d228de9830 100644
--- a/app/assets/javascripts/discourse/app/components/d-editor.js
+++ b/app/assets/javascripts/discourse/app/components/d-editor.js
@@ -306,8 +306,7 @@ export default class DEditor extends Component {
this.site.hashtag_configurations["topic-composer"],
this.siteSettings,
{
- afterComplete: (value) => {
- this.set("value", value);
+ afterComplete: () => {
schedule(
"afterRender",
this.textManipulation,
@@ -327,8 +326,7 @@ export default class DEditor extends Component {
this.textManipulation.autocomplete({
template: findRawTemplate("emoji-selector-autocomplete"),
key: ":",
- afterComplete: (text) => {
- this.set("value", text);
+ afterComplete: () => {
schedule(
"afterRender",
this.textManipulation,
@@ -466,9 +464,7 @@ export default class DEditor extends Component {
onRender: (options) => renderUserStatusHtml(options),
key: "@",
transformComplete: (v) => v.username || v.name,
- afterComplete: (value) => {
- this.set("value", value);
-
+ afterComplete: () => {
schedule(
"afterRender",
this.textManipulation,
diff --git a/app/assets/javascripts/discourse/app/components/group-card-contents.js b/app/assets/javascripts/discourse/app/components/group-card-contents.js
index 82ef2b5e201..c3cb1ba0637 100644
--- a/app/assets/javascripts/discourse/app/components/group-card-contents.js
+++ b/app/assets/javascripts/discourse/app/components/group-card-contents.js
@@ -62,7 +62,7 @@ export default class GroupCardContents extends CardContentsBase.extend(
this.setProperties({ group });
if (!group.flair_url && !group.flair_bg_color) {
- group.set("flair_url", "fa-users");
+ group.set("flair_url", "users");
}
if (group.can_see_members && group.members.length < maxMembersToDisplay) {
diff --git a/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs b/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs
index db9922572e4..c06d7fe910c 100644
--- a/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs
+++ b/app/assets/javascripts/discourse/app/components/modal/move-to-topic.hbs
@@ -131,6 +131,8 @@
{{/if}}
+
+
{{#if this.existingTopic}}
{{html-safe
diff --git a/app/assets/javascripts/discourse/app/components/modal/move-to-topic.js b/app/assets/javascripts/discourse/app/components/modal/move-to-topic.js
index 419048cbf7c..5cea8e3fd06 100644
--- a/app/assets/javascripts/discourse/app/components/modal/move-to-topic.js
+++ b/app/assets/javascripts/discourse/app/components/modal/move-to-topic.js
@@ -3,6 +3,7 @@ import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
import { service } from "@ember/service";
import { isEmpty } from "@ember/utils";
+import { applyValueTransformer } from "discourse/lib/transformer";
import DiscourseURL from "discourse/lib/url";
import { mergeTopic, movePosts } from "discourse/models/topic";
import { i18n } from "discourse-i18n";
@@ -145,6 +146,15 @@ export default class MoveToTopic extends Component {
};
}
+ mergeOptions = applyValueTransformer(
+ "move-to-topic-merge-options",
+ mergeOptions
+ );
+ moveOptions = applyValueTransformer(
+ "move-to-topic-move-options",
+ moveOptions
+ );
+
try {
let result;
if (this.args.model.selectedAllPosts) {
diff --git a/app/assets/javascripts/discourse/app/components/post/menu/buttons/read.gjs b/app/assets/javascripts/discourse/app/components/post/menu/buttons/read.gjs
index f6db21b6c76..aec8ecd9bfe 100644
--- a/app/assets/javascripts/discourse/app/components/post/menu/buttons/read.gjs
+++ b/app/assets/javascripts/discourse/app/components/post/menu/buttons/read.gjs
@@ -25,7 +25,7 @@ export default class PostMenuReadButton extends Component {
diff --git a/app/assets/javascripts/discourse/app/components/post/menu/buttons/show-more.gjs b/app/assets/javascripts/discourse/app/components/post/menu/buttons/show-more.gjs
index 4f854a64880..d4aaa78c650 100644
--- a/app/assets/javascripts/discourse/app/components/post/menu/buttons/show-more.gjs
+++ b/app/assets/javascripts/discourse/app/components/post/menu/buttons/show-more.gjs
@@ -11,7 +11,7 @@ export default class PostMenuShowMoreButton extends Component {
class="post-action-menu__show-more show-more-actions"
...attributes
@action={{@buttonActions.showMoreActions}}
- @icon="ellipsis-h"
+ @icon="ellipsis"
@title="show_more"
/>
diff --git a/app/assets/javascripts/discourse/app/components/topic-list/item.gjs b/app/assets/javascripts/discourse/app/components/topic-list/item.gjs
index a5251c4594c..ae3b44cb6b5 100644
--- a/app/assets/javascripts/discourse/app/components/topic-list/item.gjs
+++ b/app/assets/javascripts/discourse/app/components/topic-list/item.gjs
@@ -185,6 +185,14 @@ export default class Item extends Component {
}
}
+ get useMobileLayout() {
+ return applyValueTransformer(
+ "topic-list-item-mobile-layout",
+ this.site.mobileView,
+ { topic: this.args.topic }
+ );
+ }
+
@@ -218,20 +226,7 @@ export default class Item extends Component {
@name="above-topic-list-item"
@outletArgs={{hash topic=@topic}}
/>
- {{#if this.site.desktopView}}
- {{#each @columns as |entry|}}
-
- {{/each}}
- {{else}}
+ {{#if this.useMobileLayout}}
{{#if @bulkSelectEnabled}}
@@ -337,6 +332,19 @@ export default class Item extends Component {
|
+ {{else}}
+ {{#each @columns as |entry|}}
+
+ {{/each}}
{{/if}}
diff --git a/app/assets/javascripts/discourse/app/components/topic-list/list.gjs b/app/assets/javascripts/discourse/app/components/topic-list/list.gjs
index 71af1e73ad8..549a18c4af2 100644
--- a/app/assets/javascripts/discourse/app/components/topic-list/list.gjs
+++ b/app/assets/javascripts/discourse/app/components/topic-list/list.gjs
@@ -1,6 +1,6 @@
import Component from "@glimmer/component";
import { cached } from "@glimmer/tracking";
-import { hash } from "@ember/helper";
+import { array, hash } from "@ember/helper";
import { service } from "@ember/service";
import { eq, or } from "truth-helpers";
import PluginOutlet from "discourse/components/plugin-outlet";
@@ -172,6 +172,7 @@ export default class TopicList extends Component {
class={{concatClass
"topic-list"
(if this.bulkSelectEnabled "sticky-header")
+ (applyValueTransformer "topic-list-class" (array) (hash topics=@topics))
}}
>
{{i18n "sr_topic_list_caption"}}
diff --git a/app/assets/javascripts/discourse/app/components/user-profile-avatar.hbs b/app/assets/javascripts/discourse/app/components/user-profile-avatar.hbs
index 7c88f0d1e01..5d86e1763fc 100644
--- a/app/assets/javascripts/discourse/app/components/user-profile-avatar.hbs
+++ b/app/assets/javascripts/discourse/app/components/user-profile-avatar.hbs
@@ -1,11 +1,21 @@
-
- {{bound-avatar @user "huge"}}
-
-
+
+
+ @name="user-profile-avatar-img-wrapper"
+ @outletArgs={{hash user=@user}}
+ >
+ {{bound-avatar @user "huge"}}
+
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse/app/form-kit/components/fk/control/select.gjs b/app/assets/javascripts/discourse/app/form-kit/components/fk/control/select.gjs
index 3bd705bf069..812d67d8b2b 100644
--- a/app/assets/javascripts/discourse/app/form-kit/components/fk/control/select.gjs
+++ b/app/assets/javascripts/discourse/app/form-kit/components/fk/control/select.gjs
@@ -3,6 +3,7 @@ import { hash } from "@ember/helper";
import { on } from "@ember/modifier";
import { action } from "@ember/object";
import { NO_VALUE_OPTION } from "discourse/form-kit/lib/constants";
+import { i18n } from "discourse-i18n";
import FKControlSelectOption from "./select/option";
export default class FKControlSelect extends Component {
@@ -17,6 +18,10 @@ export default class FKControlSelect extends Component {
);
}
+ get hasSelectedValue() {
+ return this.args.field.value && this.args.field.value !== NO_VALUE_OPTION;
+ }
+
{{/if}}
- {{#if this.model.automatic}}
+ {{#if (and this.currentUser.admin this.model.automatic)}}
<:trigger>
{{d-icon "gear"}}
diff --git a/app/assets/javascripts/discourse/package.json b/app/assets/javascripts/discourse/package.json
index fb5717bdfb1..447aa413d0e 100644
--- a/app/assets/javascripts/discourse/package.json
+++ b/app/assets/javascripts/discourse/package.json
@@ -36,7 +36,7 @@
},
"devDependencies": {
"@babel/core": "^7.26.0",
- "@babel/standalone": "^7.26.2",
+ "@babel/standalone": "^7.26.4",
"@colors/colors": "^1.6.0",
"@discourse/backburner.js": "^2.7.1-0",
"@discourse/itsatrap": "^2.0.10",
@@ -46,7 +46,7 @@
"@ember/render-modifiers": "^2.1.0",
"@ember/string": "^4.0.0",
"@ember/test-helpers": "^4.0.4",
- "@ember/test-waiters": "^3.1.0",
+ "@ember/test-waiters": "^4.0.0",
"@embroider/compat": "^3.7.0",
"@embroider/core": "^3.4.19",
"@embroider/macros": "^1.16.9",
@@ -112,18 +112,18 @@
"make-plural": "^7.4.0",
"message-bus-client": "^4.3.8",
"pretender": "^3.4.7",
- "qunit": "^2.23.0",
+ "qunit": "^2.23.1",
"qunit-dom": "^3.4.0",
"sass": "^1.77.7",
"select-kit": "workspace:1.0.0",
"sinon": "^19.0.2",
"source-map": "^0.7.4",
- "terser": "^5.36.0",
+ "terser": "^5.37.0",
"testem": "^3.15.2",
"truth-helpers": "workspace:1.0.0",
"util": "^0.12.5",
"virtual-dom": "^2.1.1",
- "webpack": "^5.97.0",
+ "webpack": "^5.97.1",
"webpack-retry-chunk-load-plugin": "^3.1.1",
"webpack-stats-plugin": "^1.1.3",
"xss": "^1.0.15"
diff --git a/app/assets/javascripts/discourse/tests/acceptance/group-manage-email-settings-test.js b/app/assets/javascripts/discourse/tests/acceptance/group-manage-email-settings-test.js
index 079ea9d9898..bcd21cf70bc 100644
--- a/app/assets/javascripts/discourse/tests/acceptance/group-manage-email-settings-test.js
+++ b/app/assets/javascripts/discourse/tests/acceptance/group-manage-email-settings-test.js
@@ -215,7 +215,7 @@ acceptance(
visible: true,
public_admission: true,
public_exit: false,
- flair_url: "fa-circle-half-stroke",
+ flair_url: "circle-half-stroke",
is_group_owner: true,
mentionable: true,
messageable: true,
diff --git a/app/assets/javascripts/discourse/tests/acceptance/group-manage-membership-test.js b/app/assets/javascripts/discourse/tests/acceptance/group-manage-membership-test.js
index f6c9abb88fe..4cffab3f43b 100644
--- a/app/assets/javascripts/discourse/tests/acceptance/group-manage-membership-test.js
+++ b/app/assets/javascripts/discourse/tests/acceptance/group-manage-membership-test.js
@@ -24,6 +24,24 @@ acceptance("Managing Group Membership", function (needs) {
);
});
+ test("As an admin on an automatic group", async function (assert) {
+ await visit("/g/moderators");
+
+ assert
+ .dom(".admin-group-automatic-tooltip")
+ .exists("displays automatic tooltip");
+ });
+
+ test("As a non-admin user on an automatic group", async function (assert) {
+ updateCurrentUser({ admin: false });
+
+ await visit("/g/moderators");
+
+ assert
+ .dom(".admin-group-automatic-tooltip")
+ .doesNotExist("does not display automatic tooltip");
+ });
+
test("As an admin", async function (assert) {
updateCurrentUser({ can_create_group: true });
diff --git a/app/assets/javascripts/discourse/tests/acceptance/modal/move-to-topic-test.js b/app/assets/javascripts/discourse/tests/acceptance/modal/move-to-topic-test.js
new file mode 100644
index 00000000000..662aeac3c9b
--- /dev/null
+++ b/app/assets/javascripts/discourse/tests/acceptance/modal/move-to-topic-test.js
@@ -0,0 +1,49 @@
+import { click, fillIn, visit } from "@ember/test-helpers";
+import { test } from "qunit";
+import { withPluginApi } from "discourse/lib/plugin-api";
+import pretender, {
+ parsePostData,
+ response,
+} from "discourse/tests/helpers/create-pretender";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
+
+acceptance("Modal - move-to-topic", function (needs) {
+ needs.user({ admin: true });
+
+ test("Transformer can modify merge/move options sent in request", async function (assert) {
+ withPluginApi("1.24.0", (api) => {
+ ["move-to-topic-merge-options", "move-to-topic-move-options"].forEach(
+ (transformerName) => {
+ api.registerValueTransformer(transformerName, (transformer) => {
+ transformer.value.sillyVal = true;
+ return transformer.value;
+ });
+ }
+ );
+ });
+
+ await visit("/t/internationalization-localization/280");
+
+ // Open admin menu, select a post, and open move to topic modal
+ await click(".topic-admin-menu-trigger");
+ await click(".topic-admin-menu-content .topic-admin-multi-select button");
+ await click(".select-posts .select-post");
+ await click(".selected-posts .move-to-topic");
+
+ // Choose existing topic, and pick the first topic.
+ await click("input#move-to-existing-topic");
+ await fillIn("input#choose-topic-title", 1);
+ await click(".choose-topic-list .existing-topic input");
+
+ pretender.post("/t/280/move-posts", (request) => {
+ assert.step("request");
+ const data = parsePostData(request.requestBody);
+ assert.strictEqual(data.sillyVal, "true");
+ return response({ success: true });
+ });
+
+ // Submit!
+ await click(".d-modal__footer .btn-primary");
+ assert.verifySteps(["request"]);
+ });
+});
diff --git a/app/assets/javascripts/discourse/tests/acceptance/search-full-test.js b/app/assets/javascripts/discourse/tests/acceptance/search-full-test.js
index dc0f7f71ffd..ca8c4919a75 100644
--- a/app/assets/javascripts/discourse/tests/acceptance/search-full-test.js
+++ b/app/assets/javascripts/discourse/tests/acceptance/search-full-test.js
@@ -70,7 +70,7 @@ acceptance("Search - Full Page", function (needs) {
grant_count: 0,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
image: null,
listable: true,
enabled: true,
diff --git a/app/assets/javascripts/discourse/tests/fixtures/badges-fixture.js b/app/assets/javascripts/discourse/tests/fixtures/badges-fixture.js
index bcced94920a..664b3474de6 100644
--- a/app/assets/javascripts/discourse/tests/fixtures/badges-fixture.js
+++ b/app/assets/javascripts/discourse/tests/fixtures/badges-fixture.js
@@ -60,7 +60,7 @@ export default {
grant_count: 11,
allow_title: true,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 8,
@@ -75,7 +75,7 @@ export default {
grant_count: 10,
allow_title: true,
multiple_grant: false,
- icon: "fa-gear",
+ icon: "gear",
listable: true,
enabled: true,
badge_grouping_id: 8,
@@ -89,7 +89,7 @@ export default {
grant_count: 29,
allow_title: true,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 4,
@@ -103,7 +103,7 @@ export default {
grant_count: 200,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 8,
@@ -118,7 +118,7 @@ export default {
grant_count: 9,
allow_title: true,
multiple_grant: false,
- icon: "fa-bug",
+ icon: "bug",
listable: true,
enabled: true,
badge_grouping_id: 7,
@@ -132,7 +132,7 @@ export default {
grant_count: 0,
allow_title: true,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 8,
@@ -146,7 +146,7 @@ export default {
grant_count: 467,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 4,
@@ -161,7 +161,7 @@ export default {
grant_count: 183,
allow_title: false,
multiple_grant: false,
- icon: "fa-bug",
+ icon: "bug",
listable: true,
enabled: true,
badge_grouping_id: 7,
@@ -175,7 +175,7 @@ export default {
grant_count: 4,
allow_title: true,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 4,
@@ -189,7 +189,7 @@ export default {
grant_count: 278,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -203,7 +203,7 @@ export default {
grant_count: 5834,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 4,
@@ -217,7 +217,7 @@ export default {
grant_count: 60,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -231,7 +231,7 @@ export default {
grant_count: 22,
allow_title: false,
multiple_grant: true,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 3,
@@ -245,7 +245,7 @@ export default {
grant_count: 2,
allow_title: false,
multiple_grant: true,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 3,
@@ -259,7 +259,7 @@ export default {
grant_count: 2387,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -273,7 +273,7 @@ export default {
grant_count: 285,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -287,7 +287,7 @@ export default {
grant_count: 42,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 2,
@@ -301,7 +301,7 @@ export default {
grant_count: 1718,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 2,
@@ -315,7 +315,7 @@ export default {
grant_count: 270,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -330,7 +330,7 @@ export default {
grant_count: 545,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -344,7 +344,7 @@ export default {
grant_count: 397,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -358,7 +358,7 @@ export default {
grant_count: 259,
allow_title: false,
multiple_grant: true,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 3,
@@ -372,7 +372,7 @@ export default {
grant_count: 933,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 2,
@@ -396,7 +396,7 @@ export default {
grant_count: 545,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -419,7 +419,7 @@ export default {
grant_count: 10,
allow_title: true,
multiple_grant: true,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -437,7 +437,7 @@ export default {
grant_count: 545,
allow_title: false,
multiple_grant: false,
- icon: "fa-certificate",
+ icon: "certificate",
listable: true,
enabled: true,
badge_grouping_id: 1,
@@ -1714,7 +1714,7 @@ export default {
{
id: 1,
name: "Only icon",
- icon: "fa-rocket",
+ icon: "rocket",
},
{
id: 2,
@@ -1724,7 +1724,7 @@ export default {
{
id: 3,
name: "Both image and icon",
- icon: "fa-rocket",
+ icon: "rocket",
image_url: "/images/avatar.png?3",
multiple_grant: true,
query: "SELECT 1",
diff --git a/app/assets/javascripts/discourse/tests/fixtures/group-fixtures.js b/app/assets/javascripts/discourse/tests/fixtures/group-fixtures.js
index ec2d46c6351..00c732d3e7d 100644
--- a/app/assets/javascripts/discourse/tests/fixtures/group-fixtures.js
+++ b/app/assets/javascripts/discourse/tests/fixtures/group-fixtures.js
@@ -42,7 +42,7 @@ export default {
visible: true,
public_admission: true,
public_exit: false,
- flair_url: "fa-circle-half-stroke",
+ flair_url: "circle-half-stroke",
is_group_owner: true,
mentionable: true,
messageable: true,
@@ -66,7 +66,7 @@ export default {
visible: true,
public_admission: true,
public_exit: false,
- flair_url: "fa-circle-half-stroke",
+ flair_url: "circle-half-stroke",
is_group_owner: true,
mentionable: true,
messageable: true,
@@ -260,7 +260,7 @@ export default {
},
},
"/groups/discourse/posts.json": {
- "posts": [
+ posts: [
{
id: 94607,
cooked:
@@ -1319,8 +1319,8 @@ export default {
avatar_template:
"/user_avatar/meta.discourse.org/codinghorror/{size}/5297.png",
},
- }
- ]
+ },
+ ],
},
"/groups/alternative-group.json": {
group: {
@@ -1334,7 +1334,7 @@ export default {
has_messages: true,
public_admission: true,
public_exit: false,
- flair_url: "fa-circle-half-stroke",
+ flair_url: "circle-half-stroke",
is_group_owner: true,
mentionable: true,
messageable: true,
diff --git a/app/assets/javascripts/discourse/tests/fixtures/user-fixtures.js b/app/assets/javascripts/discourse/tests/fixtures/user-fixtures.js
index b180a2b9fe9..68f718e3a1b 100644
--- a/app/assets/javascripts/discourse/tests/fixtures/user-fixtures.js
+++ b/app/assets/javascripts/discourse/tests/fixtures/user-fixtures.js
@@ -49,7 +49,7 @@ export default {
grant_count: 14,
allow_title: false,
multiple_grant: true,
- icon: "fa-certificate",
+ icon: "certificate",
image: null,
listable: true,
enabled: true,
@@ -349,7 +349,7 @@ export default {
grant_count: 14,
allow_title: false,
multiple_grant: true,
- icon: "fa-certificate",
+ icon: "certificate",
image: null,
listable: true,
enabled: true,
@@ -3210,7 +3210,7 @@ export default {
grant_count: 14,
allow_title: false,
multiple_grant: true,
- icon: "fa-certificate",
+ icon: "certificate",
image: null,
listable: true,
enabled: true,
diff --git a/app/assets/javascripts/discourse/tests/integration/components/bookmark-icon-test.js b/app/assets/javascripts/discourse/tests/integration/components/bookmark-icon-test.gjs
similarity index 62%
rename from app/assets/javascripts/discourse/tests/integration/components/bookmark-icon-test.js
rename to app/assets/javascripts/discourse/tests/integration/components/bookmark-icon-test.gjs
index a712ca557f5..1471d302126 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/bookmark-icon-test.js
+++ b/app/assets/javascripts/discourse/tests/integration/components/bookmark-icon-test.gjs
@@ -1,9 +1,8 @@
import { render } from "@ember/test-helpers";
-import { hbs } from "ember-cli-htmlbars";
import { module, test } from "qunit";
+import BookmarkIcon from "discourse/components/bookmark-icon";
import { formattedReminderTime } from "discourse/lib/bookmark";
import { tomorrow } from "discourse/lib/time-utils";
-import Bookmark from "discourse/models/bookmark";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import { i18n } from "discourse-i18n";
@@ -11,15 +10,14 @@ module("Integration | Component | bookmark-icon", function (hooks) {
setupRenderingTest(hooks);
test("with reminder", async function (assert) {
- this.setProperties({
- bookmark: Bookmark.create({
- reminder_at: tomorrow(this.currentUser.user_option.timezone),
- name: "some name",
- currentUser: this.currentUser,
- }),
+ const store = this.owner.lookup("service:store");
+ const bookmark = store.createRecord("bookmark", {
+ reminder_at: tomorrow(this.currentUser.user_option.timezone),
+ name: "some name",
+ currentUser: this.currentUser,
});
- await render(hbs``);
+ await render();
assert
.dom(".d-icon-discourse-bookmark-clock.bookmark-icon__bookmarked")
@@ -28,7 +26,7 @@ module("Integration | Component | bookmark-icon", function (hooks) {
"title",
i18n("bookmarks.created_with_reminder_generic", {
date: formattedReminderTime(
- this.bookmark.reminder_at,
+ bookmark.reminder_at,
this.currentUser.user_option.timezone
),
name: "some name",
@@ -37,15 +35,13 @@ module("Integration | Component | bookmark-icon", function (hooks) {
});
test("no reminder", async function (assert) {
- this.set(
- "bookmark",
- Bookmark.create({
- name: "some name",
- currentUser: this.currentUser,
- })
- );
+ const store = this.owner.lookup("service:store");
+ const bookmark = store.createRecord("bookmark", {
+ name: "some name",
+ currentUser: this.currentUser,
+ });
- await render(hbs``);
+ await render();
assert.dom(".d-icon-bookmark.bookmark-icon__bookmarked").exists();
assert.dom(".svg-icon-title").hasAttribute(
@@ -56,12 +52,8 @@ module("Integration | Component | bookmark-icon", function (hooks) {
);
});
- test("null bookmark", async function (assert) {
- this.setProperties({
- bookmark: null,
- });
-
- await render(hbs``);
+ test("no bookmark", async function (assert) {
+ await render();
assert.dom(".d-icon-bookmark.bookmark-icon").exists();
assert
diff --git a/app/assets/javascripts/discourse/tests/integration/components/create-invite-test.gjs b/app/assets/javascripts/discourse/tests/integration/components/create-invite-test.gjs
index b5bdadc6cd8..f1d0a0b51c4 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/create-invite-test.gjs
+++ b/app/assets/javascripts/discourse/tests/integration/components/create-invite-test.gjs
@@ -166,7 +166,7 @@ module("Integration | Component | CreateInvite", function (hooks) {
assert.deepEqual(
formKit().field("expiresAfterDays").options(),
- ["1", "3", "7", "30", "90", "999999"],
+ ["__NONE__", "1", "3", "7", "30", "90", "999999"],
"the value of invite_expiry_days is added to the dropdown"
);
@@ -179,7 +179,7 @@ module("Integration | Component | CreateInvite", function (hooks) {
assert.deepEqual(
formKit().field("expiresAfterDays").options(),
- ["1", "7", "30", "90", "999999"],
+ ["__NONE__", "1", "7", "30", "90", "999999"],
"the value of invite_expiry_days is not added to the dropdown if it's already one of the options"
);
});
diff --git a/app/assets/javascripts/discourse/tests/integration/components/form-kit/controls/select-test.gjs b/app/assets/javascripts/discourse/tests/integration/components/form-kit/controls/select-test.gjs
index f71e61ee9a5..1d15f2ad0a4 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/form-kit/controls/select-test.gjs
+++ b/app/assets/javascripts/discourse/tests/integration/components/form-kit/controls/select-test.gjs
@@ -3,6 +3,7 @@ import { module, test } from "qunit";
import Form from "discourse/components/form";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import formKit from "discourse/tests/helpers/form-kit-helper";
+import { i18n } from "discourse-i18n";
module(
"Integration | Component | FormKit | Controls | Select",
@@ -50,5 +51,33 @@ module(
assert.dom(".form-kit__control-select").hasAttribute("disabled");
});
+
+ test("no selection", async function (assert) {
+ await render(
+
+
+ Option 1
+
+
+
+ );
+
+ assert
+ .dom(".form-kit__control-select option:nth-child(1)")
+ .hasText(
+ i18n("form_kit.select.select_placeholder"),
+ "it shows a placeholder for selection"
+ );
+
+ await formKit().field("foo").select("option-1");
+
+ assert
+ .dom(".form-kit__control-select option:nth-child(1)")
+ .hasText(
+ i18n("form_kit.select.none_placeholder"),
+ "it shows a placeholder for unselection"
+ );
+ });
}
);
diff --git a/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js b/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js
index 332aacda2bb..da9a112c809 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js
+++ b/app/assets/javascripts/discourse/tests/integration/components/user-avatar-flair-test.js
@@ -9,28 +9,28 @@ function setupSiteGroups(that) {
{
id: 1,
name: "admins",
- flair_url: "fa-bars",
+ flair_url: "bars",
flair_bg_color: "CC000A",
flair_color: "FFFFFA",
},
{
id: 2,
name: "staff",
- flair_url: "fa-bars",
+ flair_url: "bars",
flair_bg_color: "CC0005",
flair_color: "FFFFF5",
},
{
id: 3,
name: "trust_level_1",
- flair_url: "fa-dice-one",
+ flair_url: "dice-one",
flair_bg_color: "CC0001",
flair_color: "FFFFF1",
},
{
id: 4,
name: "trust_level_2",
- flair_url: "fa-dice-two",
+ flair_url: "dice-two",
flair_bg_color: "CC0002",
flair_color: "FFFFF2",
},
@@ -159,7 +159,7 @@ module("Integration | Component | user-avatar-flair", function (hooks) {
moderator: false,
trust_level: 3,
flair_name: "Band Geeks",
- flair_url: "fa-xmark",
+ flair_url: "xmark",
flair_bg_color: "123456",
flair_color: "B0B0B0",
flair_group_id: 41,
diff --git a/app/assets/javascripts/discourse/tests/integration/components/widgets/avatar-flair-test.js b/app/assets/javascripts/discourse/tests/integration/components/widgets/avatar-flair-test.js
index f60951ff57c..022e6ebc125 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/widgets/avatar-flair-test.js
+++ b/app/assets/javascripts/discourse/tests/integration/components/widgets/avatar-flair-test.js
@@ -8,7 +8,7 @@ module("Integration | Component | Widget | avatar-flair", function (hooks) {
test("avatar flair with an icon", async function (assert) {
this.set("args", {
- flair_url: "fa-bars",
+ flair_url: "bars",
flair_bg_color: "CC0000",
flair_color: "FFFFFF",
});
diff --git a/app/assets/javascripts/discourse/tests/unit/lib/autocomplete-test.js b/app/assets/javascripts/discourse/tests/unit/lib/autocomplete-test.js
index 66f689a39e9..92538da136f 100644
--- a/app/assets/javascripts/discourse/tests/unit/lib/autocomplete-test.js
+++ b/app/assets/javascripts/discourse/tests/unit/lib/autocomplete-test.js
@@ -151,4 +151,22 @@ module("Unit | Utility | autocomplete", function (hooks) {
assert.dom("#ac-testing li a.selected").exists({ count: 1 });
assert.dom("#ac-testing li a.selected").hasText("test1");
});
+
+ test("Autocomplete doesn't reset undo history", async function (assert) {
+ const element = textArea();
+
+ $(element).autocomplete({
+ key: "@",
+ template,
+ dataSource: () => ["test1", "test2"],
+ });
+
+ await simulateKeys(element, "@t\r");
+
+ assert.strictEqual(element.value, "@test1 ");
+
+ document.execCommand("undo");
+
+ assert.strictEqual(element.value, "@t");
+ });
});
diff --git a/app/assets/javascripts/discourse/tests/unit/models/topic-test.js b/app/assets/javascripts/discourse/tests/unit/models/topic-test.js
index 15b112ee26c..d13bd425cfc 100644
--- a/app/assets/javascripts/discourse/tests/unit/models/topic-test.js
+++ b/app/assets/javascripts/discourse/tests/unit/models/topic-test.js
@@ -4,6 +4,7 @@ import { IMAGE_VERSION as v } from "pretty-text/emoji/version";
import { module, test } from "qunit";
import Category from "discourse/models/category";
import Topic from "discourse/models/topic";
+import TopicDetails from "discourse/models/topic-details";
module("Unit | Model | topic", function (hooks) {
setupTest(hooks);
@@ -108,6 +109,10 @@ module("Unit | Model | topic", function (hooks) {
const topic = this.store.createRecord("topic", { id: 1234 });
const topicDetails = topic.details;
+ assert.true(
+ topicDetails instanceof TopicDetails,
+ "topicDetails is an instance of TopicDetails"
+ );
assert.present(topicDetails, "a topic has topicDetails after we create it");
assert.strictEqual(
topicDetails.topic,
@@ -165,6 +170,10 @@ module("Unit | Model | topic", function (hooks) {
});
assert.blank(topic.post_stream, "it does not update post_stream");
+ assert.true(
+ topic.details instanceof TopicDetails,
+ "topicDetails is an instance of TopicDetails"
+ );
assert.strictEqual(topic.details.hello, "world", "it updates the details");
assert.strictEqual(topic.cool, "property", "it updates other properties");
assert.strictEqual(topic.category, category);
diff --git a/app/assets/javascripts/float-kit/package.json b/app/assets/javascripts/float-kit/package.json
index 27789f7dec4..a63ff797fb0 100644
--- a/app/assets/javascripts/float-kit/package.json
+++ b/app/assets/javascripts/float-kit/package.json
@@ -39,7 +39,7 @@
"ember-source": "~5.5.0",
"ember-source-channel-url": "^3.0.0",
"loader.js": "^4.7.0",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/pretty-text/package.json b/app/assets/javascripts/pretty-text/package.json
index 8f536e4f679..933af19a7aa 100644
--- a/app/assets/javascripts/pretty-text/package.json
+++ b/app/assets/javascripts/pretty-text/package.json
@@ -40,7 +40,7 @@
"ember-source": "~5.5.0",
"ember-source-channel-url": "^3.0.0",
"loader.js": "^4.7.0",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.hbs b/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.hbs
index d52ec3e195d..9c45720672a 100644
--- a/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.hbs
+++ b/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.hbs
@@ -1,5 +1,10 @@
{{#if this.collection.content.length}}
-
+
{{#each this.collection.content as |item index|}}
{{component
(component-for-row this.collection.identifier item this.selectKit)
diff --git a/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.js b/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.js
index 7c21ad8a61f..232ba39d9cf 100644
--- a/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.js
+++ b/app/assets/javascripts/select-kit/addon/components/select-kit/select-kit-collection.js
@@ -1,5 +1,35 @@
import Component from "@ember/component";
+import { service } from "@ember/service";
import { tagName } from "@ember-decorators/component";
+import { modifier } from "ember-modifier";
+import {
+ disableBodyScroll,
+ enableBodyScroll,
+} from "discourse/lib/body-scroll-lock";
@tagName("")
-export default class SelectKitCollection extends Component {}
+export default class SelectKitCollection extends Component {
+ @service site;
+
+ bodyScrollLock = modifier((element) => {
+ if (!this.site.mobileView) {
+ return;
+ }
+
+ // when opened a modal will disable all scroll but itself
+ // this code is whitelisting the collection to ensure it can be scrolled in this case
+ // however we only want to do this if the modal is open to avoid breaking the scroll on the page
+ // eg: opening a combobox under a topic shouldn't prevent you to scroll the topic page
+ const isModalOpen =
+ document.documentElement.classList.contains("modal-open");
+ if (!isModalOpen) {
+ return;
+ }
+
+ disableBodyScroll(element);
+
+ return () => {
+ enableBodyScroll(element);
+ };
+ });
+}
diff --git a/app/assets/javascripts/select-kit/package.json b/app/assets/javascripts/select-kit/package.json
index aa804e61fc5..e47dc6c5ec6 100644
--- a/app/assets/javascripts/select-kit/package.json
+++ b/app/assets/javascripts/select-kit/package.json
@@ -40,7 +40,7 @@
"ember-source": "~5.5.0",
"ember-source-channel-url": "^3.0.0",
"loader.js": "^4.7.0",
- "webpack": "^5.97.0"
+ "webpack": "^5.97.1"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/javascripts/theme-transpiler/package.json b/app/assets/javascripts/theme-transpiler/package.json
index 5c58d74d5f5..c3ce4c174a1 100644
--- a/app/assets/javascripts/theme-transpiler/package.json
+++ b/app/assets/javascripts/theme-transpiler/package.json
@@ -7,7 +7,7 @@
"license": "GPL-2.0-only",
"keywords": [],
"dependencies": {
- "@babel/standalone": "^7.26.2",
+ "@babel/standalone": "^7.26.4",
"@zxing/text-encoding": "^0.9.0",
"babel-plugin-ember-template-compilation": "^2.3.0",
"content-tag": "^3.0.0",
@@ -20,7 +20,7 @@
"handlebars": "^4.7.8",
"path-browserify": "^1.0.1",
"polyfill-crypto.getrandomvalues": "^1.0.0",
- "terser": "^5.36.0"
+ "terser": "^5.37.0"
},
"engines": {
"node": ">= 18",
diff --git a/app/assets/stylesheets/common/admin/admin_table.scss b/app/assets/stylesheets/common/admin/admin_table.scss
index 3b247ca8126..fa5d378b77a 100644
--- a/app/assets/stylesheets/common/admin/admin_table.scss
+++ b/app/assets/stylesheets/common/admin/admin_table.scss
@@ -66,6 +66,33 @@
}
}
}
+
+ .status-label {
+ --d-border-radius: var(--space-4);
+
+ display: flex;
+ flex-wrap: nowrap;
+ width: fit-content;
+ background-color: var(--primary-low);
+ padding: var(--space-1) var(--space-2);
+ border-radius: var(--d-border-radius);
+
+ .status-label-indicator {
+ display: inline-block;
+ width: 6px;
+ height: 6px;
+ border-radius: 50%;
+ background-color: var(--primary-high);
+ flex-shrink: 0;
+ margin-right: var(--space-1);
+ margin-top: 0.4rem;
+ }
+
+ .status-label-text {
+ color: var(--primary-high);
+ font-size: var(--font-down-1);
+ }
+ }
}
.d-admin-row__overview {
diff --git a/app/assets/stylesheets/common/admin/api.scss b/app/assets/stylesheets/common/admin/api.scss
index 130fc4f6cab..f5ff0697b38 100644
--- a/app/assets/stylesheets/common/admin/api.scss
+++ b/app/assets/stylesheets/common/admin/api.scss
@@ -45,15 +45,15 @@ table.web-hooks.grid {
// Api keys
-table.api-keys {
+.d-admin-table.api-keys {
margin-bottom: 0.25em;
tr.revoked {
- color: var(--primary-medium);
+ color: var(--primary-high);
}
.d-admin-row__overview.key {
- width: 30%;
+ width: 20%;
}
}
diff --git a/app/assets/stylesheets/common/base/personal-message.scss b/app/assets/stylesheets/common/base/personal-message.scss
index f6d30f14b4b..035c347795b 100644
--- a/app/assets/stylesheets/common/base/personal-message.scss
+++ b/app/assets/stylesheets/common/base/personal-message.scss
@@ -63,6 +63,10 @@
padding-left: calc(
48px - var(--pm-padding)
); // 48px is the width of the avatar
+ display: grid;
+ grid-template-areas: "contents additional" "pm-map pm-map";
+ grid-template-columns: 1fr auto;
+
section {
border: none;
background: var(--primary-very-low);
@@ -73,8 +77,22 @@
padding-top: var(--pm-padding);
}
+ &__contents,
+ &__additional-contents {
+ padding-top: var(--pm-padding);
+ }
+
+ &__contents {
+ grid-area: contents;
+ }
+
+ &__additional-contents {
+ grid-area: additional;
+ }
+
&__private-message-map {
- padding-bottom: var(--pm-padding);
+ grid-area: pm-map;
+ padding: 0.5em var(--pm-padding) var(--pm-padding);
}
.participants {
diff --git a/app/assets/stylesheets/common/components/theme-card.scss b/app/assets/stylesheets/common/components/theme-card.scss
index c3c73c8651a..b5adfc940af 100644
--- a/app/assets/stylesheets/common/components/theme-card.scss
+++ b/app/assets/stylesheets/common/components/theme-card.scss
@@ -47,7 +47,7 @@
}
}
}
- &.--updating .d-icon-sync {
+ &.--updating .d-icon-arrows-rotate {
animation: rotate 3s linear infinite;
margin-right: 0.45em;
@keyframes rotate {
diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb
index 114be53d0a6..07de1538911 100644
--- a/app/controllers/topics_controller.rb
+++ b/app/controllers/topics_controller.rb
@@ -857,6 +857,7 @@ class TopicsController < ApplicationController
params.permit(:participants)
params.permit(:chronological_order)
params.permit(:archetype)
+ params.permit(:freeze_original)
raise Discourse::InvalidAccess if params[:archetype] == "private_message" && !guardian.is_staff?
@@ -869,6 +870,7 @@ class TopicsController < ApplicationController
args = {}
args[:destination_topic_id] = destination_topic_id.to_i
args[:chronological_order] = params[:chronological_order] == "true"
+ args[:freeze_original] = params[:freeze_original] == "true"
if params[:archetype].present?
args[:archetype] = params[:archetype]
@@ -891,6 +893,7 @@ class TopicsController < ApplicationController
params.permit(:participants)
params.permit(:chronological_order)
params.permit(:archetype)
+ params.permit(:freeze_original)
topic = Topic.with_deleted.find_by(id: topic_id)
guardian.ensure_can_move_posts!(topic)
@@ -1399,6 +1402,7 @@ class TopicsController < ApplicationController
].present?
args[:tags] = params[:tags] if params[:tags].present?
args[:chronological_order] = params[:chronological_order] == "true"
+ args[:freeze_original] = true if params[:freeze_original] == "true"
if params[:archetype].present?
args[:archetype] = params[:archetype]
diff --git a/app/models/badge.rb b/app/models/badge.rb
index 2a58c1242d3..3ee34bd60df 100644
--- a/app/models/badge.rb
+++ b/app/models/badge.rb
@@ -252,7 +252,7 @@ class Badge < ActiveRecord::Base
def default_icon=(val)
if self.image_upload_id.blank?
self.icon ||= val
- self.icon = val if self.icon == "fa-certificate"
+ self.icon = val if self.icon == "certificate"
end
end
@@ -353,7 +353,7 @@ end
# updated_at :datetime not null
# allow_title :boolean default(FALSE), not null
# multiple_grant :boolean default(FALSE), not null
-# icon :string default("fa-certificate")
+# icon :string default("certificate")
# listable :boolean default(TRUE)
# target_posts :boolean default(FALSE)
# query :text
@@ -363,9 +363,9 @@ end
# trigger :integer
# show_posts :boolean default(FALSE), not null
# system :boolean default(FALSE), not null
-# show_in_post_header :boolean default(FALSE), not null
# long_description :text
# image_upload_id :integer
+# show_in_post_header :boolean default(FALSE), not null
#
# Indexes
#
diff --git a/app/models/moved_post.rb b/app/models/moved_post.rb
index 60cda5a44b2..21f34e52f0b 100644
--- a/app/models/moved_post.rb
+++ b/app/models/moved_post.rb
@@ -6,6 +6,12 @@ class MovedPost < ActiveRecord::Base
belongs_to :new_topic, class_name: "Topic", foreign_key: :new_topic_id
belongs_to :new_post, class_name: "Post", foreign_key: :new_post_id
+
+ # The author of the moved post
+ belongs_to :posting_user, class_name: "User", foreign_key: :post_user_id
+
+ # The user who moved the post
+ belongs_to :user
end
# == Schema Information
@@ -23,12 +29,16 @@ end
# created_new_topic :boolean default(FALSE), not null
# created_at :datetime not null
# updated_at :datetime not null
+# old_topic_title :string
+# post_user_id :integer
+# user_id :integer
#
# Indexes
#
-# index_moved_posts_on_new_post_id (new_post_id)
-# index_moved_posts_on_new_topic_id (new_topic_id)
-# index_moved_posts_on_old_post_id (old_post_id)
-# index_moved_posts_on_old_post_number (old_post_number)
-# index_moved_posts_on_old_topic_id (old_topic_id)
+# index_moved_posts_on_new_post_id (new_post_id)
+# index_moved_posts_on_new_topic_id (new_topic_id)
+# index_moved_posts_on_new_topic_id_and_post_user_id (new_topic_id,post_user_id)
+# index_moved_posts_on_old_post_id (old_post_id)
+# index_moved_posts_on_old_post_number (old_post_number)
+# index_moved_posts_on_old_topic_id (old_topic_id)
#
diff --git a/app/models/post_mover.rb b/app/models/post_mover.rb
index 8033bdebc0a..f09cc205410 100644
--- a/app/models/post_mover.rb
+++ b/app/models/post_mover.rb
@@ -11,8 +11,12 @@ class PostMover
# freeze_original: :boolean - if true, the original topic will be frozen but not deleted and posts will be "copied" to topic
def initialize(original_topic, user, post_ids, move_to_pm: false, options: {})
@original_topic = original_topic
+ @original_topic_title = original_topic.title
@user = user
@post_ids = post_ids
+ # For now we store a copy of post_ids. If `freeze_original` is present, we will have new post_ids.
+ # When we create the new posts, we will pluck out post_ids out of this and replace with updated ids.
+ @post_ids_after_move = post_ids
@move_to_pm = move_to_pm
@options = options
end
@@ -274,6 +278,13 @@ class PostMover
new_post.custom_fields = post.custom_fields
new_post.save_custom_fields
+ # When freezing original, ensure the notification generated points
+ # to the newly created post, not the old OP
+ if @options[:freeze_original]
+ @post_ids_after_move =
+ @post_ids_after_move.map { |post_id| post_id == post.id ? new_post.id : post_id }
+ end
+
DiscourseEvent.trigger(:first_post_moved, new_post, post)
DiscourseEvent.trigger(:post_moved, new_post, original_topic.id)
@@ -307,6 +318,11 @@ class PostMover
moved_post.disable_rate_limits! if @options[:freeze_original]
moved_post.save(validate: false)
+ if moved_post.id != post.id
+ @post_ids_after_move =
+ @post_ids_after_move.map { |post_id| post_id == post.id ? moved_post.id : post_id }
+ end
+
DiscourseEvent.trigger(:post_moved, moved_post, original_topic.id)
# Move any links from the post to the new topic
@@ -337,6 +353,7 @@ class PostMover
old_topic_id: post.topic_id,
old_post_id: post.id,
old_post_number: post.post_number,
+ post_user_id: post.user_id,
new_topic_id: destination_topic.id,
new_post_number: new_post_number,
new_topic_title: destination_topic.title,
@@ -347,10 +364,12 @@ class PostMover
metadata[:new_post_id] = new_post.id
metadata[:now] = Time.zone.now
metadata[:created_new_topic] = @creating_new_topic
+ metadata[:old_topic_title] = @original_topic_title
+ metadata[:user_id] = @user.id
DB.exec(<<~SQL, metadata)
- INSERT INTO moved_posts(old_topic_id, old_post_id, old_post_number, new_topic_id, new_topic_title, new_post_id, new_post_number, created_new_topic, created_at, updated_at)
- VALUES (:old_topic_id, :old_post_id, :old_post_number, :new_topic_id, :new_topic_title, :new_post_id, :new_post_number, :created_new_topic, :now, :now)
+ INSERT INTO moved_posts(old_topic_id, old_topic_title, old_post_id, old_post_number, post_user_id, user_id, new_topic_id, new_topic_title, new_post_id, new_post_number, created_new_topic, created_at, updated_at)
+ VALUES (:old_topic_id, :old_topic_title, :old_post_id, :old_post_number, :post_user_id, :user_id, :new_topic_id, :new_topic_title, :new_post_id, :new_post_number, :created_new_topic, :now, :now)
SQL
end
@@ -703,7 +722,7 @@ class PostMover
def enqueue_jobs(topic)
@post_creator.enqueue_jobs if @post_creator
- Jobs.enqueue(:notify_moved_posts, post_ids: post_ids, moved_by_id: user.id)
+ Jobs.enqueue(:notify_moved_posts, post_ids: @post_ids_after_move, moved_by_id: user.id)
Jobs.enqueue(:delete_inaccessible_notifications, topic_id: topic.id)
end
diff --git a/app/models/reviewable.rb b/app/models/reviewable.rb
index 5535ca375f3..a9e957b7f34 100644
--- a/app/models/reviewable.rb
+++ b/app/models/reviewable.rb
@@ -270,8 +270,15 @@ class Reviewable < ActiveRecord::Base
def actions_for(guardian, args = nil)
args ||= {}
+ built_actions =
+ Actions.new(self, guardian).tap { |actions| build_actions(actions, guardian, args) }
- Actions.new(self, guardian).tap { |actions| build_actions(actions, guardian, args) }
+ # Empty bundles can cause big issues on the client side, so we remove them
+ # here. It's not valid anyway to have a bundle with no actions, but you can
+ # add a bundle via actions.add_bundle and then not add any actions to it.
+ built_actions.bundles.reject!(&:empty?)
+
+ built_actions
end
def editable_for(guardian, args = nil)
diff --git a/app/models/topic.rb b/app/models/topic.rb
index c15302d5d2f..40e22fb82a6 100644
--- a/app/models/topic.rb
+++ b/app/models/topic.rb
@@ -1298,6 +1298,9 @@ class Topic < ActiveRecord::Base
moved_by,
post_ids,
move_to_pm: opts[:archetype].present? && opts[:archetype] == "private_message",
+ options: {
+ freeze_original: opts[:freeze_original],
+ },
)
if opts[:destination_topic_id]
diff --git a/app/views/users/admin_login.html.erb b/app/views/users/admin_login.html.erb
index 82e061bdfd6..4f2e9d02ea4 100644
--- a/app/views/users/admin_login.html.erb
+++ b/app/views/users/admin_login.html.erb
@@ -10,6 +10,6 @@
<%= t 'admin_login.safe_mode' %>
- <%= submit_tag t('admin_login.submit_button'), class: "btn btn-primary" %>
+ <%= button_tag t('admin_login.submit_button'), class: "btn btn-primary", type: "submit" %>
<% end %>
<% end %>
diff --git a/app/views/users/omniauth_callbacks/confirm_request.html.erb b/app/views/users/omniauth_callbacks/confirm_request.html.erb
index 8074820193c..e8e5a85def6 100644
--- a/app/views/users/omniauth_callbacks/confirm_request.html.erb
+++ b/app/views/users/omniauth_callbacks/confirm_request.html.erb
@@ -5,7 +5,7 @@
diff --git a/config/locales/client.ar.yml b/config/locales/client.ar.yml
index e60e7c95942..d4938756e23 100644
--- a/config/locales/client.ar.yml
+++ b/config/locales/client.ar.yml
@@ -2479,6 +2479,9 @@ ar:
optional: اختياري
errors_summary_title: "يحتوي هذا النموذج على أخطاء:"
dirty_form: "لم ترسل التغييرات! هل تريد بالتأكيد المغادرة؟"
+ select:
+ select_placeholder: "تحديد…"
+ none_placeholder: "لا يوجد"
errors:
required: "مطلوب"
invalid_url: "يجب أن يكون عنوان URL صالحًا"
@@ -7731,6 +7734,8 @@ ar:
title: "تحميل الصور"
selectable_avatars:
title: "قائمة الصور الرمزية التي يمكن للمستخدمين الاختيار منها"
+ table_column_heading:
+ status: "الحالة"
categories:
all_results: "الكل"
required: "مطلوب"
diff --git a/config/locales/client.be.yml b/config/locales/client.be.yml
index 12d9f3840d6..5d24b7348fc 100644
--- a/config/locales/client.be.yml
+++ b/config/locales/client.be.yml
@@ -2161,6 +2161,8 @@ be:
label: "Загрузіць"
selectable_avatars:
title: "Спіс аватараў карыстальнікі могуць выбраць"
+ table_column_heading:
+ status: "Статус"
categories:
all_results: "усе"
required: "абавязковыя"
diff --git a/config/locales/client.bg.yml b/config/locales/client.bg.yml
index cfe0484a0b7..3649ae59616 100644
--- a/config/locales/client.bg.yml
+++ b/config/locales/client.bg.yml
@@ -1767,6 +1767,8 @@ bg:
form_kit:
reset: Нулиране
optional: по избор
+ select:
+ none_placeholder: "Без"
errors:
required: "Задъжителни"
close: "Затвори"
@@ -4285,6 +4287,8 @@ bg:
uploaded_image_list:
upload:
label: "Качване"
+ table_column_heading:
+ status: "Статус"
categories:
all_results: "Всички"
required: "Задъжителни"
diff --git a/config/locales/client.bs_BA.yml b/config/locales/client.bs_BA.yml
index 78496e82503..1ae5fb03a1f 100644
--- a/config/locales/client.bs_BA.yml
+++ b/config/locales/client.bs_BA.yml
@@ -1443,6 +1443,8 @@ bs_BA:
form_kit:
reset: Resetovati
optional: opciono
+ select:
+ none_placeholder: "Ništa"
errors:
required: "Required"
close: "Zatvori"
@@ -4310,6 +4312,8 @@ bs_BA:
label: "Učitavanje"
selectable_avatars:
title: "Popis avatara koje korisnici mogu izabrati"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "All"
required: "Required"
diff --git a/config/locales/client.ca.yml b/config/locales/client.ca.yml
index b138bb17bd7..25eff8ba83b 100644
--- a/config/locales/client.ca.yml
+++ b/config/locales/client.ca.yml
@@ -1389,6 +1389,8 @@ ca:
form_kit:
reset: Restableix
optional: opcional
+ select:
+ none_placeholder: "Cap"
errors:
required: "Necessari"
close: "Tanca"
@@ -4166,6 +4168,8 @@ ca:
label: "Carrega"
selectable_avatars:
title: "Llista d'avatars que els usuaris poden triar"
+ table_column_heading:
+ status: "Estat"
categories:
all_results: "Tot"
required: "Necessari"
diff --git a/config/locales/client.cs.yml b/config/locales/client.cs.yml
index aa0019f3ed6..5b94f505217 100644
--- a/config/locales/client.cs.yml
+++ b/config/locales/client.cs.yml
@@ -2164,6 +2164,9 @@ cs:
form_kit:
reset: obnovit výchozí
optional: volitelné
+ select:
+ select_placeholder: "Vybrat…"
+ none_placeholder: "Žádná"
errors:
required: "Nezbytnosti"
too_low: "Musí být alespoň %{count}"
@@ -6453,6 +6456,8 @@ cs:
uploaded_image_list:
upload:
label: "Nahrát"
+ table_column_heading:
+ status: "Stav"
categories:
all_results: "Všechny"
required: "Nezbytnosti"
diff --git a/config/locales/client.da.yml b/config/locales/client.da.yml
index 3417b2b5210..5f51af686a6 100644
--- a/config/locales/client.da.yml
+++ b/config/locales/client.da.yml
@@ -1694,6 +1694,9 @@ da:
form_kit:
reset: Nulstil
optional: valgfri
+ select:
+ select_placeholder: "Vælg…"
+ none_placeholder: "Ingen"
errors:
required: "Obligatoriske"
invalid_url: "Skal være en gyldig URL"
@@ -5280,6 +5283,8 @@ da:
label: "Overfør"
selectable_avatars:
title: "Liste over avatarer, som brugere kan vælge imellem"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Alle"
required: "Obligatoriske"
diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml
index f059e5ade7b..13e06dbebd3 100644
--- a/config/locales/client.de.yml
+++ b/config/locales/client.de.yml
@@ -2051,6 +2051,9 @@ de:
optional: optional
errors_summary_title: "Dieses Formular enthält Fehler:"
dirty_form: "Du hast deine Änderungen nicht gespeichert! Bist du sicher, dass du die Seite verlassen möchtest?"
+ select:
+ select_placeholder: "Auswählen …"
+ none_placeholder: "Keiner"
errors:
required: "Erforderlich"
invalid_url: "Muss eine gültige URL sein"
@@ -6687,6 +6690,8 @@ de:
title: "Bilder hochladen"
selectable_avatars:
title: "Liste von Avataren, aus der Benutzer wählen können."
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Alle"
required: "Erforderlich"
diff --git a/config/locales/client.el.yml b/config/locales/client.el.yml
index 9c1a0e59971..8643a5219df 100644
--- a/config/locales/client.el.yml
+++ b/config/locales/client.el.yml
@@ -1747,6 +1747,9 @@ el:
optional: προεραιτικό
errors_summary_title: "Αυτή η φόρμα περιέχει σφάλματα:"
dirty_form: "Δεν έχετε υποβάλει τις αλλαγές σας! Είστε σίγουροι ότι θέλετε να αποχωρήσετε;"
+ select:
+ select_placeholder: "Επιλογή…"
+ none_placeholder: "Κανένα"
errors:
required: "Απαιτείται"
invalid_url: "Πρέπει να είναι μια έγκυρη διεύθυνση URL"
@@ -5155,6 +5158,8 @@ el:
label: "Μεταφόρτωση"
selectable_avatars:
title: "Λίστα των avatars που μπορούν να επιλέξουν οι χρήστες"
+ table_column_heading:
+ status: "Κατάσταση"
categories:
all_results: "Όλα"
required: "Απαιτείται"
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 1eb5e714c4b..8f8713e5fcb 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -2203,6 +2203,9 @@ en:
optional: optional
errors_summary_title: "This form contains errors:"
dirty_form: "You didn't submit your changes! Are you sure you want to leave?"
+ select:
+ select_placeholder: "Select…"
+ none_placeholder: "None"
errors:
required: "Required"
invalid_url: "Must be a valid URL"
@@ -7095,6 +7098,8 @@ en:
title: "Upload images"
selectable_avatars:
title: "List of avatars users can choose from"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "All"
required: "Required"
diff --git a/config/locales/client.es.yml b/config/locales/client.es.yml
index 257307dd040..10cdfe00a01 100644
--- a/config/locales/client.es.yml
+++ b/config/locales/client.es.yml
@@ -2050,6 +2050,9 @@ es:
optional: opcional
errors_summary_title: "Este formulario contiene errores:"
dirty_form: "¡No has enviado tus cambios! ¿Seguro que quieres salir?"
+ select:
+ select_placeholder: "Seleccionar…"
+ none_placeholder: "Ninguno"
errors:
required: "Obligatorio"
invalid_url: "Debe ser una URL válida"
@@ -6642,6 +6645,8 @@ es:
title: "Subir imágenes"
selectable_avatars:
title: "Lista de avatares que los usuarios pueden escoger"
+ table_column_heading:
+ status: "Estado"
categories:
all_results: "Todo"
required: "Obligatorio"
diff --git a/config/locales/client.et.yml b/config/locales/client.et.yml
index 223b48b0d3d..dcf945b76b7 100644
--- a/config/locales/client.et.yml
+++ b/config/locales/client.et.yml
@@ -1253,6 +1253,9 @@ et:
form_kit:
reset: Lähtesta
optional: valikuline
+ select:
+ select_placeholder: "Vali..."
+ none_placeholder: "Pole"
errors:
required: "Nõutud"
close: "Sulge"
@@ -3620,6 +3623,8 @@ et:
uploaded_image_list:
upload:
label: "Lae üles"
+ table_column_heading:
+ status: "Staatus"
categories:
all_results: "Kõik"
required: "Nõutud"
diff --git a/config/locales/client.fa_IR.yml b/config/locales/client.fa_IR.yml
index f3f7f4d2ee4..272cdad7f3c 100644
--- a/config/locales/client.fa_IR.yml
+++ b/config/locales/client.fa_IR.yml
@@ -1681,6 +1681,9 @@ fa_IR:
form_kit:
reset: بازنشانی
optional: اختیاری
+ select:
+ select_placeholder: "انتخاب…"
+ none_placeholder: "هیچ کدام"
errors:
required: "مورد نیاز"
close: "بستن"
@@ -4685,6 +4688,8 @@ fa_IR:
label: "ویرایش فهرست"
upload:
label: "بارگذاری"
+ table_column_heading:
+ status: "وضعیت"
categories:
all_results: "همه"
required: "مورد نیاز"
diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml
index db8212a3c61..12700fb0aa4 100644
--- a/config/locales/client.fi.yml
+++ b/config/locales/client.fi.yml
@@ -2050,6 +2050,9 @@ fi:
optional: valinnainen
errors_summary_title: "Tämä lomake sisältää virheitä:"
dirty_form: "Et lähettänyt muutoksiasi! Oletko varma, että haluat poistua?"
+ select:
+ select_placeholder: "Valitse…"
+ none_placeholder: "Ei valittu"
errors:
required: "Pakollinen"
invalid_url: "Täytyy olla kelvollinen URL"
@@ -6643,6 +6646,8 @@ fi:
title: "Lataa kuvia"
selectable_avatars:
title: "Avatarit, joista käyttäjä voi valita"
+ table_column_heading:
+ status: "Tila"
categories:
all_results: "Kaikki"
required: "Pakolliset"
diff --git a/config/locales/client.fr.yml b/config/locales/client.fr.yml
index 29115c1efda..40e1550325d 100644
--- a/config/locales/client.fr.yml
+++ b/config/locales/client.fr.yml
@@ -2050,6 +2050,9 @@ fr:
optional: facultatif
errors_summary_title: "Ce formulaire contient des erreurs :"
dirty_form: "Vous n'avez pas soumis vos modifications ! Voulez-vous vraiment partir ?"
+ select:
+ select_placeholder: "Sélectionnez…"
+ none_placeholder: "Jamais"
errors:
required: "Requis"
invalid_url: "Doit être une URL valide"
@@ -6643,6 +6646,8 @@ fr:
title: "Téléverser des images"
selectable_avatars:
title: "Liste d'avatars que les utilisateurs peuvent choisir"
+ table_column_heading:
+ status: "Statut"
categories:
all_results: "Toutes"
required: "Requis"
diff --git a/config/locales/client.gl.yml b/config/locales/client.gl.yml
index c509dd5b7dc..e2d387c2d66 100644
--- a/config/locales/client.gl.yml
+++ b/config/locales/client.gl.yml
@@ -1534,6 +1534,8 @@ gl:
form_kit:
reset: Restabelecer
optional: opcional
+ select:
+ none_placeholder: "Ningunha"
errors:
required: "Obrigatorio"
close: "Pechar"
@@ -4733,6 +4735,8 @@ gl:
label: "Cargar"
selectable_avatars:
title: "Listaxe de avatares que os usuarios poden elixir"
+ table_column_heading:
+ status: "Estado"
categories:
all_results: "Todo"
required: "Obrigatorio"
diff --git a/config/locales/client.he.yml b/config/locales/client.he.yml
index 5d6fd4d51a1..8188152bbdb 100644
--- a/config/locales/client.he.yml
+++ b/config/locales/client.he.yml
@@ -2275,6 +2275,9 @@ he:
optional: רשות
errors_summary_title: "הטופס הזה מכיל שגיאות:"
dirty_form: "לא הגשת את השינויים שלך! לצאת?"
+ select:
+ select_placeholder: "בחירה…"
+ none_placeholder: "ללא"
errors:
required: "נדרש"
invalid_url: "חייבת להיות כתובת תקפה"
@@ -3954,6 +3957,7 @@ he:
other: "מוצגות %{count} תגובות אל"
in_reply_to: "טעינת הפוסט ההורה"
view_all_posts: "הצגת כל הפוסטים"
+ badge_granted_tooltip: "ל־%{username} יש זכאות לעיטור ‚%{badge_name}’ על הפוסט!"
errors:
create: "אירעה שגיאה ביצירת הפוסט שלך. נא לנסות שוב, עמך הסליחה."
edit: "אירעה שגיאה בעריכת הפוסט שלך. נא לנסות שוב, עמך הסליחה."
@@ -7248,6 +7252,8 @@ he:
title: "העלאת תמונות"
selectable_avatars:
title: "רשימת תמונות ייצוגיות מהן המשתמשים יכולים לבחור"
+ table_column_heading:
+ status: "מצב"
categories:
all_results: "הכול"
required: "נדרש"
@@ -7351,10 +7357,12 @@ he:
no_user_badges: "למשתמש %{name} לא הוענקו עיטורים."
no_badges: אין עיטורים שניתן להעניק.
none_selected: "נא לבחור עיטור כדי להתחיל"
+ usage_heading: שימוש
allow_title: לאפשר להשתמש בעיטור ככותרת
multiple_grant: יכולים להינתן מספר פעמים
visibility_heading: חשיפה
listable: הצגת עיטורים בעמוד העיטורים הפומבי
+ show_in_post_header: הצגת עיטור על הפוסט שבגינו הוענק
enabled: פעיל
disabled: מושבת
icon: סמליל
diff --git a/config/locales/client.hr.yml b/config/locales/client.hr.yml
index 87391064e3f..d73ef0f3574 100644
--- a/config/locales/client.hr.yml
+++ b/config/locales/client.hr.yml
@@ -1923,6 +1923,9 @@ hr:
form_kit:
reset: Resetirati
optional: neobvezno
+ select:
+ select_placeholder: "Odaberite…"
+ none_placeholder: "Ništa"
errors:
required: "Potrebno"
close: "Zatvori"
@@ -5885,6 +5888,8 @@ hr:
label: "Učitaj"
selectable_avatars:
title: "Popis avatara koji korisnici mogu birati"
+ table_column_heading:
+ status: "Statust"
categories:
all_results: "Sve"
required: "Potrebno"
diff --git a/config/locales/client.hu.yml b/config/locales/client.hu.yml
index a5b51642c90..0b133229204 100644
--- a/config/locales/client.hu.yml
+++ b/config/locales/client.hu.yml
@@ -2051,6 +2051,9 @@ hu:
optional: nem kötelező
errors_summary_title: "Ez az űrlap hibákat tartalmaz:"
dirty_form: "A változások nem lettek mentve! Biztos hogy el akarja hagyni a területet?"
+ select:
+ select_placeholder: "Kiválaszt..."
+ none_placeholder: "Egyik sem"
errors:
required: "Kötelező"
invalid_url: "Érvényes URL-nek kell lennie"
@@ -6655,6 +6658,8 @@ hu:
title: "Kép(ek) feltöltése"
selectable_avatars:
title: "A felhasználó által választható profilképek listája"
+ table_column_heading:
+ status: "Állapot"
categories:
all_results: "Mind"
required: "Kötelező"
diff --git a/config/locales/client.hy.yml b/config/locales/client.hy.yml
index 9182be20543..5d89b2e7f69 100644
--- a/config/locales/client.hy.yml
+++ b/config/locales/client.hy.yml
@@ -1976,6 +1976,9 @@ hy:
form_kit:
reset: Զրոյացնել
optional: ընտրովի
+ select:
+ select_placeholder: "Ընտրել..."
+ none_placeholder: "Ոչ մի"
errors:
required: "Պարտադիր"
too_short:
@@ -2675,6 +2678,7 @@ hy:
read_more_in_category: "Ցանկանո՞ւմ եք կարդալ ավելին: Դիտեք այլ թեմաներ՝ %{categoryLink}-ում կամ դիտեք վերջին թեմաները"
read_more: "Ցանկանու՞մ եք կարդալ ավելին: Դիտեք բոլոր կատեգորիաները կամ դիտեք վերջին թեմաները:"
unread_indicator: "Ոչ մի անդամ դեռ չի կարդացել այս թեմայի մինչև վերջին գրառումը: "
+ created_at: "Ստեղծվել է՝ %{date}"
bumped_at: "Վերջինը՝ %{date}"
browse_all_categories_latest: "Թերթեք բոլոր կատեգորիաները կամ դիտեք վերջին թեմաները."
browse_all_categories_latest_or_top: "Թերթեք բոլոր կատեգորիաները, դիտեք վերջին թեմաները կամ ամենահայտնիները:"
@@ -2935,7 +2939,7 @@ hy:
publishing_settings: "Հրապարակման Կարգավորումներ"
change_owner:
title: "Փոխել Սեփականատիրոջը"
- action: "Փոխել Սեփականատիրոջը"
+ action: "փոխել սեփականության իրավունքը"
error: "Գրառումների սեփականատիրոջը փոփոխելիս տեղի է ունեցել սխալ:"
placeholder: "նոր սեփականատիրոջ օգտանունը"
instructions:
@@ -3061,6 +3065,7 @@ hy:
rebake: "Վերակառուցել HTML-ը"
publish_page: "Էջի Հրատարակում"
unhide: "Դարձնել Տեսանելի"
+ change_owner: "Փոխել Սեփականատիրոջը..."
lock_post: "Արգելափակել Գրառումը"
lock_post_description: "արգելել հրապարակողին խմբագրել այս գրառումը"
unlock_post: "Արգելաբացել Գրառումը"
@@ -4025,8 +4030,19 @@ hy:
groups_filter_instructions: "Համապատասխան webhook-ները կգործարկվեն միայն, եթե իրադարձությունը կապված է ընտրված խմբերի հետ: Թողեք դատարկ՝ webhook-ները բոլոր խմբերի համար գործարկելու համար:"
groups_filter: "Գործարկվող Խմբերը"
delete_confirm: "Ջնջե՞լ այս webhook-ը:"
+ topic_event:
+ topic_created: "Թեման ստեղծված է"
+ post_event:
+ post_created: "Գրառումը ստեղծված է"
+ group_event:
+ group_created: "Խումբը ստեղծված է"
+ tag_event:
+ tag_created: "Պիտակը ստեղծված է"
+ category_event:
+ category_created: "Կատեգորիան ստեղծված է"
user_event:
user_confirmed_email: "Օգտագործողը հաստատել է էլ. փոստը"
+ user_created: "Օգտագործողը ստեղծված է"
delivery_status:
title: "Ուղարկման Կարգավիճակը"
inactive: "Ոչ ակտիվ"
@@ -5042,6 +5058,8 @@ hy:
label: "Վերբեռնել"
selectable_avatars:
title: "Անձնապատկերների ցանկը, որոնցից օգտատերերը կարող են ընտրություն կատարել"
+ table_column_heading:
+ status: "Ստատուս"
categories:
all_results: "Ամբողջը"
required: "Պարտադիր"
@@ -5162,6 +5180,7 @@ hy:
uploading: "Վերբեռնվում է…"
name: "Անուն"
group: "Խումբ"
+ created_by: "Ստեղծել է՝"
image: "Նկար"
alt: "մասնավոր էմոջիի նախնական դիտում "
delete_confirm: "Դուք համոզվա՞ծ եք, որ ցանկանում եք ջնջել :%{name}: էմոջին:"
diff --git a/config/locales/client.id.yml b/config/locales/client.id.yml
index e2109248347..3f3ff052e3e 100644
--- a/config/locales/client.id.yml
+++ b/config/locales/client.id.yml
@@ -1453,6 +1453,8 @@ id:
form_kit:
reset: Reset
optional: opsional
+ select:
+ none_placeholder: "Tidak ada"
close: "Tutup"
assets_changed_confirm: "Situs ini baru saja menerima pembaruan perangkat lunak. Dapatkan versi terbaru sekarang?"
logout: "Anda telah keluar."
@@ -2777,6 +2779,8 @@ id:
uploaded_image_list:
upload:
label: "Unggah"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Semua"
users: "Pengguna"
diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml
index 685585026bf..c0b80d573bb 100644
--- a/config/locales/client.it.yml
+++ b/config/locales/client.it.yml
@@ -2050,6 +2050,9 @@ it:
optional: facoltativo
errors_summary_title: "Questo modulo contiene errori:"
dirty_form: "Non hai caricato le modifiche! Vuoi davvero uscire?"
+ select:
+ select_placeholder: "Seleziona…"
+ none_placeholder: "Nessuna"
errors:
required: "Obbligatorio"
invalid_url: "L'URL deve essere valido"
@@ -6644,6 +6647,8 @@ it:
title: "Carica immagini"
selectable_avatars:
title: "Elenco degli Avatar tra cui l'utente può scegliere"
+ table_column_heading:
+ status: "Stato"
categories:
all_results: "Tutte"
required: "Obbligatorie"
diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml
index 09466a3cc7d..f0f8f03e234 100644
--- a/config/locales/client.ja.yml
+++ b/config/locales/client.ja.yml
@@ -1939,6 +1939,9 @@ ja:
optional: オプション
errors_summary_title: "このフォームにはエラーがあります:"
dirty_form: "変更を送信しませんでした!終了してもよろしいですか?"
+ select:
+ select_placeholder: "選択…"
+ none_placeholder: "なし"
errors:
required: "必須"
invalid_url: "有効な URL である必要があります"
@@ -6366,6 +6369,8 @@ ja:
title: "画像のアップロード"
selectable_avatars:
title: "ユーザーが選択できるアバターのリスト"
+ table_column_heading:
+ status: "ステータス"
categories:
all_results: "すべて"
required: "必須"
diff --git a/config/locales/client.ko.yml b/config/locales/client.ko.yml
index 9fb4d2d683e..03499931773 100644
--- a/config/locales/client.ko.yml
+++ b/config/locales/client.ko.yml
@@ -1613,6 +1613,8 @@ ko:
form_kit:
reset: 리셋
optional: 선택 사항
+ select:
+ none_placeholder: "없음"
errors:
required: "필수"
too_short:
@@ -5009,6 +5011,8 @@ ko:
label: "업로드"
selectable_avatars:
title: "사용자가 선택할 수있는 아바타 목록"
+ table_column_heading:
+ status: "상태"
categories:
all_results: "전체"
required: "필수"
diff --git a/config/locales/client.lt.yml b/config/locales/client.lt.yml
index d8b085e27b4..a704a3d48b5 100644
--- a/config/locales/client.lt.yml
+++ b/config/locales/client.lt.yml
@@ -1676,6 +1676,8 @@ lt:
form_kit:
reset: Atstatyti
optional: pasirinktinai
+ select:
+ none_placeholder: "Nieko"
errors:
required: "Privalomi"
close: "Uždaryti"
@@ -4926,6 +4928,8 @@ lt:
label: "Įkelti"
selectable_avatars:
title: "Avatarų, kuriuos vartotojai gali pasirinkti, sąrašas"
+ table_column_heading:
+ status: "Statusas"
categories:
all_results: "Visi"
required: "Privalomi"
diff --git a/config/locales/client.lv.yml b/config/locales/client.lv.yml
index 722aa4297f4..50a50599b89 100644
--- a/config/locales/client.lv.yml
+++ b/config/locales/client.lv.yml
@@ -1462,6 +1462,8 @@ lv:
form_kit:
reset: Atlikt
optional: pēc izvēles
+ select:
+ none_placeholder: "Nav"
errors:
required: "Nepieciešams"
close: "Aizvērt"
@@ -3677,6 +3679,8 @@ lv:
uploaded_image_list:
upload:
label: "Augšupielādēt"
+ table_column_heading:
+ status: "Statuss"
categories:
all_results: "Viss"
required: "Nepieciešams"
diff --git a/config/locales/client.nb_NO.yml b/config/locales/client.nb_NO.yml
index b66019dbb9b..e06b15f12f2 100644
--- a/config/locales/client.nb_NO.yml
+++ b/config/locales/client.nb_NO.yml
@@ -1979,6 +1979,9 @@ nb_NO:
optional: valgfritt
errors_summary_title: "Dette skjemaet inneholder feil:"
dirty_form: "Du har ikke sendt inn endringene dine! Er du sikker på at du vil dra?"
+ select:
+ select_placeholder: "Velg…"
+ none_placeholder: "Ingen"
errors:
required: "Påkrevd"
invalid_url: "Må være en gyldig URL"
@@ -5544,6 +5547,8 @@ nb_NO:
label: "Last opp"
selectable_avatars:
title: "Liste over avatarer brukere kan velge mellom"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Alle"
required: "Påkrevd"
diff --git a/config/locales/client.nl.yml b/config/locales/client.nl.yml
index 20d007e3cb9..e07c2ae6905 100644
--- a/config/locales/client.nl.yml
+++ b/config/locales/client.nl.yml
@@ -2050,6 +2050,9 @@ nl:
optional: optioneel
errors_summary_title: "Dit formulier bevat fouten:"
dirty_form: "Je hebt je wijzigingen niet verzonden! Weet je zeker dat je wilt verlaten?"
+ select:
+ select_placeholder: "Selecteren…"
+ none_placeholder: "Geen"
errors:
required: "Vereist"
invalid_url: "Moet een geldige URL zijn"
@@ -6644,6 +6647,8 @@ nl:
title: "Afbeeldingen uploaden"
selectable_avatars:
title: "Lijst van avatars waaruit gebruikers kunnen kiezen"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Alle"
required: "Vereist"
diff --git a/config/locales/client.pl_PL.yml b/config/locales/client.pl_PL.yml
index 3a26460a9c6..e9041a0f2b7 100644
--- a/config/locales/client.pl_PL.yml
+++ b/config/locales/client.pl_PL.yml
@@ -2176,6 +2176,9 @@ pl_PL:
optional: opcjonalnie
errors_summary_title: "Ten formularz zawiera błędy:"
dirty_form: "Nie przesłano zmian. Czy na pewno chcesz wyjść?"
+ select:
+ select_placeholder: "Wybierz…"
+ none_placeholder: "Brak"
errors:
required: "Wymagane"
invalid_url: "Musi być prawidłowym adresem URL"
@@ -7003,6 +7006,8 @@ pl_PL:
title: "Prześlij obrazy"
selectable_avatars:
title: "Lista awatarów, z których użytkownicy mogą wybierać"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Wszystkie"
required: "Wymagane"
diff --git a/config/locales/client.pt.yml b/config/locales/client.pt.yml
index e2a321612dd..edb1ce93e5e 100644
--- a/config/locales/client.pt.yml
+++ b/config/locales/client.pt.yml
@@ -1689,6 +1689,9 @@ pt:
form_kit:
reset: Repor
optional: opcional
+ select:
+ select_placeholder: "Selecionar…"
+ none_placeholder: "Nenhuma"
errors:
required: "Necessário"
close: "Fechar"
@@ -4740,6 +4743,8 @@ pt:
uploaded_image_list:
upload:
label: "Carregar"
+ table_column_heading:
+ status: "Estado"
categories:
all_results: "Todos"
required: "Necessário"
diff --git a/config/locales/client.pt_BR.yml b/config/locales/client.pt_BR.yml
index feedc47e664..030ffcc49ab 100644
--- a/config/locales/client.pt_BR.yml
+++ b/config/locales/client.pt_BR.yml
@@ -2050,6 +2050,9 @@ pt_BR:
optional: opcional
errors_summary_title: "Este formulário contém erros:"
dirty_form: "Você não enviou as alterações! Deseja mesmo sair?"
+ select:
+ select_placeholder: "Selecionar…"
+ none_placeholder: "Nenhum"
errors:
required: "Necessário(a)"
invalid_url: "Deve ser uma URL válida"
@@ -6644,6 +6647,8 @@ pt_BR:
title: "Enviar imagens"
selectable_avatars:
title: "Lista de avatares que os usuários podem escolher"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Tudo"
required: "Necessário(a)"
diff --git a/config/locales/client.ro.yml b/config/locales/client.ro.yml
index 009586c3772..5d2d874a90a 100644
--- a/config/locales/client.ro.yml
+++ b/config/locales/client.ro.yml
@@ -1675,6 +1675,9 @@ ro:
form_kit:
reset: Resetare
optional: opțional
+ select:
+ select_placeholder: "Selectează..."
+ none_placeholder: "Nimic"
errors:
required: "Necesare"
invalid_url: "Trebuie să fie un URL valid"
@@ -4506,6 +4509,8 @@ ro:
uploaded_image_list:
upload:
label: "Încarcă"
+ table_column_heading:
+ status: "Stare"
categories:
all_results: "Toate"
required: "Necesare"
diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml
index 5873119b1d5..c114bd03a34 100644
--- a/config/locales/client.ru.yml
+++ b/config/locales/client.ru.yml
@@ -2273,6 +2273,9 @@ ru:
optional: необязательно
errors_summary_title: "В этой форме есть ошибки:"
dirty_form: "Вы не отправили изменения! Действительно выйти?"
+ select:
+ select_placeholder: "Выбрать…"
+ none_placeholder: "Нет"
errors:
required: "Обязательное"
invalid_url: "Требуется корректный URL-адерс"
@@ -7212,6 +7215,8 @@ ru:
title: "Загрузка изображений"
selectable_avatars:
title: "Список доступных для выбора аватаров"
+ table_column_heading:
+ status: "Статус"
categories:
all_results: "Все"
required: "Обязательное"
diff --git a/config/locales/client.sk.yml b/config/locales/client.sk.yml
index fbe89ddacb3..8956a3562c4 100644
--- a/config/locales/client.sk.yml
+++ b/config/locales/client.sk.yml
@@ -2275,6 +2275,9 @@ sk:
optional: nepovinné
errors_summary_title: "Tento formulár obsahuje chyby:"
dirty_form: "Neodoslali ste svoje zmeny! Naozaj chcete odísť?"
+ select:
+ select_placeholder: "Vyberte…"
+ none_placeholder: "Žiadny"
errors:
required: "Povinné"
invalid_url: "Musí byť platná adresa URL"
@@ -3956,6 +3959,7 @@ sk:
other: "Prezeranie %{count} odpovede na"
in_reply_to: "Načítať rodičovský príspevok"
view_all_posts: "Zobraziť všetky príspevky"
+ badge_granted_tooltip: "%{username} získal za tento príspevok odznak '%{badge_name}'!"
errors:
create: "Ľutujeme, pri vytváraní príspevku nastala chyba. Prosím, skúste znovu."
edit: "Ľutujeme, pri úprave príspevku nastala chyba. Prosím, skúste znovu."
@@ -7262,6 +7266,8 @@ sk:
title: "Nahrávanie obrázkov"
selectable_avatars:
title: "Zoznam avatarov, z ktorých si používatelia môžu vybrať"
+ table_column_heading:
+ status: "Stav"
categories:
all_results: "Všetky"
required: "Povinné"
@@ -7365,10 +7371,13 @@ sk:
no_user_badges: "Používateľovi %{name} nebol udelený žiaden odznak."
no_badges: Nie sú žiadne odznaky, ktoré môžu byť udelené.
none_selected: "Vyberte odznak, aby ste mohli začať"
+ usage_heading: Použitie
allow_title: Povoliť použitie odznaku namiesto názvu
multiple_grant: Môže byť udelené viacnásobne
visibility_heading: Viditeľnosť
listable: Zobraziť odznak na stránke verejných odznakov
+ show_in_post_header: Zobraziť odznak na príspevku, za ktorý bol udelený
+ show_in_post_header_disabled: Vyžaduje, aby bola povolená možnosť „Zobraziť odznak na stránke s verejnými odznakmi“ a „Zobraziť odznak po udelení príspevku na stránke s odznakom“.
enabled: povolené
disabled: vypnuté
icon: Ikona
diff --git a/config/locales/client.sl.yml b/config/locales/client.sl.yml
index 0ce9dd4ecb3..05652ad7ce7 100644
--- a/config/locales/client.sl.yml
+++ b/config/locales/client.sl.yml
@@ -1688,6 +1688,8 @@ sl:
form_kit:
reset: Ponastavi
optional: neobvezno
+ select:
+ none_placeholder: "Brez"
errors:
required: "Zahtevano"
close: "Zapri"
@@ -4606,6 +4608,8 @@ sl:
uploaded_image_list:
upload:
label: "Naloži"
+ table_column_heading:
+ status: "Stanje"
categories:
all_results: "Vsi"
required: "Zahtevano"
diff --git a/config/locales/client.sq.yml b/config/locales/client.sq.yml
index 2234c5c167b..30c67c2966c 100644
--- a/config/locales/client.sq.yml
+++ b/config/locales/client.sq.yml
@@ -915,6 +915,8 @@ sq:
close: "mbylle"
form_kit:
reset: Rivendos
+ select:
+ none_placeholder: "Asnjë"
errors:
required: "E nevojshme"
close: "Mbyll"
diff --git a/config/locales/client.sr.yml b/config/locales/client.sr.yml
index c4a614f206f..3c28466d8c5 100644
--- a/config/locales/client.sr.yml
+++ b/config/locales/client.sr.yml
@@ -1006,6 +1006,8 @@ sr:
modal:
close: "zatvori"
form_kit:
+ select:
+ none_placeholder: "Ništa"
errors:
required: "Potrebno"
close: "Zatvori"
diff --git a/config/locales/client.sv.yml b/config/locales/client.sv.yml
index 55f8f0705cb..5af8ae975e5 100644
--- a/config/locales/client.sv.yml
+++ b/config/locales/client.sv.yml
@@ -1859,6 +1859,9 @@ sv:
form_kit:
reset: Återställ
optional: valfritt
+ select:
+ select_placeholder: "Välj…"
+ none_placeholder: "Ingen"
errors:
required: "Krävs"
invalid_url: "Måste vara en giltig URL"
@@ -6073,6 +6076,8 @@ sv:
label: "Ladda upp"
selectable_avatars:
title: "Lista på avatarer som användare kan välja från"
+ table_column_heading:
+ status: "Status"
categories:
all_results: "Alla"
required: "Krävs"
diff --git a/config/locales/client.sw.yml b/config/locales/client.sw.yml
index d0c2b73df09..0dd65232f94 100644
--- a/config/locales/client.sw.yml
+++ b/config/locales/client.sw.yml
@@ -1039,6 +1039,8 @@ sw:
form_kit:
reset: Anza Upya
optional: sio muhimu
+ select:
+ none_placeholder: "Hakuna"
errors:
required: "Muhimu na Inahitajika"
close: "Funga"
diff --git a/config/locales/client.te.yml b/config/locales/client.te.yml
index 28359f0e26c..710d9cd0086 100644
--- a/config/locales/client.te.yml
+++ b/config/locales/client.te.yml
@@ -1856,6 +1856,9 @@ te:
form_kit:
reset: రీసెట్ చేయండి
optional: ఐచ్ఛికం
+ select:
+ select_placeholder: "ఎంచుకోండి…"
+ none_placeholder: "ఏదీ లేదు"
errors:
required: "అవసరం"
invalid_url: "తప్పక చెల్లుబాటు అయ్యే URL అయి ఉండాలి"
@@ -6098,6 +6101,8 @@ te:
label: "అప్లోడ్ చేయండి"
selectable_avatars:
title: "సభ్యులు ఎంచుకోగల అవతార్ల జాబితా"
+ table_column_heading:
+ status: "స్థితి"
categories:
all_results: "అన్నీ"
required: "అవసరం"
diff --git a/config/locales/client.th.yml b/config/locales/client.th.yml
index 1f802f8529b..7ca87bae8a1 100644
--- a/config/locales/client.th.yml
+++ b/config/locales/client.th.yml
@@ -1173,6 +1173,8 @@ th:
dismiss_error: "ละทิ้งข้อผิดพลาด"
form_kit:
optional: ทางเลือก
+ select:
+ none_placeholder: "ไม่มี"
errors:
required: "ต้องการ"
close: "ปิด"
@@ -3219,6 +3221,8 @@ th:
uploaded_image_list:
upload:
label: "อัปโหลด"
+ table_column_heading:
+ status: "สถานะ"
categories:
all_results: "ทั้งหมด"
required: "ต้องการ"
diff --git a/config/locales/client.tr_TR.yml b/config/locales/client.tr_TR.yml
index 98873a0990d..31d0771e7ce 100644
--- a/config/locales/client.tr_TR.yml
+++ b/config/locales/client.tr_TR.yml
@@ -2050,6 +2050,9 @@ tr_TR:
optional: i̇steğe bağlı
errors_summary_title: "Bu form hatalar içeriyor:"
dirty_form: "Değişikliklerinizi göndermediniz! Ayrılmak istediğinizden emin misiniz?"
+ select:
+ select_placeholder: "Seç…"
+ none_placeholder: "Yok"
errors:
required: "Gerekli"
invalid_url: "Geçerli bir URL olmalıdır"
@@ -6644,6 +6647,8 @@ tr_TR:
title: "Görüntü yükle"
selectable_avatars:
title: "Kullanıcıların seçebileceği avatarların listesi"
+ table_column_heading:
+ status: "Durum"
categories:
all_results: "Tümü"
required: "Gerekli"
diff --git a/config/locales/client.ug.yml b/config/locales/client.ug.yml
index f4cc94834d3..ad458a22d5f 100644
--- a/config/locales/client.ug.yml
+++ b/config/locales/client.ug.yml
@@ -2051,6 +2051,9 @@ ug:
optional: تاللاشچان
errors_summary_title: "بۇ جەدۋەلدە خاتالىق بار:"
dirty_form: "ئۆزگەرتىشلىرىڭىزنى تاپشۇرمىدىڭىز! راستتىنلا ئايرىلامسىز؟"
+ select:
+ select_placeholder: "تاللا…"
+ none_placeholder: "يوق"
errors:
required: "زۆرۈر"
invalid_url: "چوقۇم ئۈنۈملۈك تور ئادرېسى بولۇشى كېرەك"
@@ -3552,6 +3555,7 @@ ug:
other: "%{count} جاۋابنى كۆرسىتىۋاتىدۇ"
in_reply_to: "ئانا يازمىنى يۈكلە"
view_all_posts: "ھەممە يازمىنى كۆرسەت"
+ badge_granted_tooltip: "%{username} نىڭ بۇ يازمىسى «%{badge_name}» تارتۇققا ئېرىشتى!"
errors:
create: "كەچۈرۈڭ، يازمىڭىزنى قۇرۇۋاتقاندا خاتالىق كۆرۈلگەن. قايتا سىناڭ."
edit: "كەچۈرۈڭ، يازمىڭىزنى تەھرىرلەۋاتقاندا خاتالىق كۆرۈلگەن. قايتا سىناڭ."
@@ -6278,6 +6282,7 @@ ug:
invalid: "كەچۈرۈڭ، ئۇ ئىشلەتكۈچىنى تەقلىدلىيەلمەسلىكىڭىز مۇمكىن."
users:
title: "ئىشلەتكۈچى"
+ description: "ئىشلەتكۈچىنى كۆرسىتىدۇ ۋە باشقۇرىدۇ."
create: "باشقۇرغۇچى ئىشلەتكۈچى قوش"
last_emailed: "يوللىغان ئاخىرقى ئېلخەت"
not_found: "كەچۈرۈڭ، بۇ ئىشلەتكۈچى ئاتى سىستېمىمىزدا مەۋجۇت ئەمەس."
@@ -6703,6 +6708,8 @@ ug:
title: "سۈرەت يۈكلە"
selectable_avatars:
title: "ئىشلەتكۈچى تاللىيالايدىغان سىما تىزىمى"
+ table_column_heading:
+ status: "ھالەت"
categories:
all_results: "ھەممىسى"
required: "زۆرۈر"
@@ -6804,10 +6811,12 @@ ug:
no_user_badges: "%{name} غا ھېچقانداق تارتۇق بېرىلمىگەن."
no_badges: بېرىدىغان ھېچقانداق تارتۇق يوق.
none_selected: "بېرىدىغان تارتۇق تاللىنىدۇ"
+ usage_heading: ئىشلىتىلىشى
allow_title: تارتۇقنى ئۇنۋان سۈپىتىدە قوللىنىشقا يول قويىدۇ
multiple_grant: كۆپ قېتىم ئىجازەت بېرىشكە بولىدۇ
visibility_heading: كۆرۈنۈشچانلىقى
listable: تارتۇقنى ئاممىۋى تارتۇق بېتىدە كۆرسىتىدۇ
+ show_in_post_header: يازمىغا بېرىلگەن تارتۇقنى كۆرسىتىدۇ
enabled: قوزغىتىلدى
disabled: چەكلەندى
icon: سىنبەلگە
diff --git a/config/locales/client.uk.yml b/config/locales/client.uk.yml
index 47a230a05b1..95335a2c5ab 100644
--- a/config/locales/client.uk.yml
+++ b/config/locales/client.uk.yml
@@ -2273,6 +2273,9 @@ uk:
optional: опціонально
errors_summary_title: "Ця форма містить помилки:"
dirty_form: "Ви не надсилали свої зміни! Ви впевнені, що хочете піти?"
+ select:
+ select_placeholder: "Виберіть…"
+ none_placeholder: "Немає"
errors:
required: "Обов'язкові"
invalid_url: "Має бути дійсною URL-адресою"
@@ -7251,6 +7254,8 @@ uk:
title: "Завантажити зображення"
selectable_avatars:
title: "Список аватарів, які користувачі можуть вибрати"
+ table_column_heading:
+ status: "Статус"
categories:
all_results: "Всі"
required: "Обов'язкові"
diff --git a/config/locales/client.ur.yml b/config/locales/client.ur.yml
index 9900ad781ee..db68e26529c 100644
--- a/config/locales/client.ur.yml
+++ b/config/locales/client.ur.yml
@@ -1624,6 +1624,8 @@ ur:
form_kit:
reset: رِی سَیٹ
optional: اختیاری
+ select:
+ none_placeholder: "کوئی نہیں"
errors:
required: "درکار"
close: "بند کریں"
@@ -5040,6 +5042,8 @@ ur:
label: "اَپ لوڈ"
selectable_avatars:
title: "اوتار کی فہرست جس میں سے صارفین منتخب کر سکتے ہیں"
+ table_column_heading:
+ status: "سٹیٹس"
categories:
all_results: "تمام"
required: "درکار"
diff --git a/config/locales/client.vi.yml b/config/locales/client.vi.yml
index e3d2f55a747..97c724bd0b2 100644
--- a/config/locales/client.vi.yml
+++ b/config/locales/client.vi.yml
@@ -1608,6 +1608,9 @@ vi:
form_kit:
reset: Cài lại
optional: tùy chọn
+ select:
+ select_placeholder: "Chọn…"
+ none_placeholder: "Không có gì"
errors:
required: "Bắt buộc"
too_short:
@@ -5077,6 +5080,8 @@ vi:
label: "Tải lên"
selectable_avatars:
title: "Danh sách ảnh đại diện mà người dùng có thể chọn"
+ table_column_heading:
+ status: "Trạng thái"
categories:
all_results: "Tất cả"
required: "Bắt buộc"
diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml
index 49d53ebff32..1cdd1601814 100644
--- a/config/locales/client.zh_CN.yml
+++ b/config/locales/client.zh_CN.yml
@@ -1939,6 +1939,9 @@ zh_CN:
optional: 可选
errors_summary_title: "此表单包含错误:"
dirty_form: "您没有提交更改!确定要离开吗?"
+ select:
+ select_placeholder: "选择…"
+ none_placeholder: "无"
errors:
required: "必选"
invalid_url: "必须是有效的 URL"
@@ -6357,6 +6360,8 @@ zh_CN:
title: "上传图片"
selectable_avatars:
title: "用户可以选择的头像列表"
+ table_column_heading:
+ status: "状态"
categories:
all_results: "所有"
required: "必选"
diff --git a/config/locales/client.zh_TW.yml b/config/locales/client.zh_TW.yml
index d314e7bf989..d59ee33163e 100644
--- a/config/locales/client.zh_TW.yml
+++ b/config/locales/client.zh_TW.yml
@@ -1420,6 +1420,9 @@ zh_TW:
form_kit:
reset: 重置
optional: 選擇性
+ select:
+ select_placeholder: "選取…"
+ none_placeholder: "無"
errors:
required: "必要設定"
too_short:
@@ -4240,6 +4243,8 @@ zh_TW:
label: "上傳"
selectable_avatars:
title: "使用者可選擇的頭像列表"
+ table_column_heading:
+ status: "狀態"
categories:
all_results: "全部"
required: "必要設定"
diff --git a/config/locales/server.ar.yml b/config/locales/server.ar.yml
index 173e5634343..41886ba67af 100644
--- a/config/locales/server.ar.yml
+++ b/config/locales/server.ar.yml
@@ -2744,7 +2744,6 @@ ar:
default_navigation_menu_categories: "سيتم عرض الفئات المحدَّدة ضمن قسم فئات قائمة التنقل بشكلٍٍ افتراضي."
default_navigation_menu_tags: "سيتم عرض الفئات المحدَّدة ضمن قسم وسوم قائمة التنقل بشكلٍٍ افتراضي."
experimental_new_new_view_groups: 'تفعيل قائمة موضوعات جديدة تجمع بين الموضوعات الجديدة وغير المقروءة، ووضع رابط "الكل" في رابط الشريط الجانبي إليها'
- experimental_topics_filter: "تفعيل مسار تصفية الموضوعات التجريبية في /filter"
enable_experimental_lightbox: "استبدال الصور المبسَّطة الافتراضية بالتصميم الذي تم تجديده"
experimental_glimmer_topic_list_groups: "تفعيل تنفيذ قائمة الموضوعات الجديد 'glimmer'. هذا التنفيذ قيد التطوير النشط، وليس مخصصًا للاستخدام في الإنتاج. لا تقم بتطوير السمات/المكوِّنات الإضافية القائمة عليه حتى يتم الانتهاء من التنفيذ والإعلان عنه."
glimmer_post_menu_mode: "تحكَّم فيما إذا كانت عملية تنفيذ قائمة المنشورات الجديدة 'glimmer' مُستخدَمة. سيتم تفعيل وضع 'auto' تلقائيًا بمجرد أن تصبح جميع سماتك ومكوِّناتك الإضافية جاهزة. عملية التنفيذ هذه قيد التطوير النشط، وليست مخصَّصة للاستخدام في الإنتاج. لا تقم بتطوير السمات/المكوِّنات الإضافية القائمة عليها حتى يتم الانتهاء من عملية التنفيذ والإعلان عنها."
diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml
index e08ea99594b..7e47b8031a4 100644
--- a/config/locales/server.de.yml
+++ b/config/locales/server.de.yml
@@ -315,6 +315,7 @@ de:
invalid_site_setting: "Es ist keine Einstellung mit dem Namen „%{name}“ vorhanden"
invalid_category_id: "Du hast eine Kategorie angegeben, die nicht existiert"
site_setting_is_hidden: "Du darfst versteckte Einstellungen nicht ändern"
+ site_setting_is_shadowed_globally: "Du kannst diese Einstellung nicht ändern, da sie global konfiguriert ist"
site_setting_is_unconfigurable: "Du darfst keine unkonfigurierbaren Einstellungen ändern"
invalid_choice:
one: "„%{name}“ ist eine ungültige Option."
@@ -2451,7 +2452,6 @@ de:
default_navigation_menu_categories: "Ausgewählte Kategorien werden standardmäßig im Abschnitt „Kategorien“ des Navigationsmenüs angezeigt."
default_navigation_menu_tags: "Ausgewählte Schlagwörter werden standardmäßig im Abschnitt „Schlagwörter“ des Navigationsmenüs angezeigt."
experimental_new_new_view_groups: 'Eine neue Themenliste aktivieren, die ungelesene und neue Themen kombiniert, und den Link „Alles“ in der Seitenleiste entsprechend verknüpfen.'
- experimental_topics_filter: "Experimentelle Filterroute für Themen unter /filter aktivieren"
enable_experimental_lightbox: "Die Standard-Bild-Lightbox durch das überarbeitete Design ersetzen."
experimental_glimmer_topic_list_groups: "Aktiviert die neue Implementierung der „glimmer“-Themenliste. Diese Implementierung befindet sich in der aktiven Entwicklung und ist nicht für den Einsatz in Produktionsumgebungen vorgesehen. Entwickle keine Themes/Plug-ins dafür, bis die Implementierung abgeschlossen und angekündigt ist."
glimmer_post_menu_mode: "Lege fest, ob die neue Implementierung des „glimmer“-Beitragmenüs verwendet werden soll. „auto“ wird automatisch aktiviert, sobald alle deine Themes und Plug-ins bereit sind. Diese Implementierung befindet sich in der Entwicklung und ist nicht für den produktiven Einsatz gedacht. Entwickle keine Themes/Plug-ins dafür, bis die Implementierung fertiggestellt und angekündigt ist."
@@ -4597,7 +4597,7 @@ de:
name: Stammgast
description: Ermöglicht das Verschieben und Umbenennen von Themen, die Veröffentlichung verfolgbarer Links, die Umwandlung eines Beitrags in ein Wiki sowie die Vergabe von mehr „Gefällt mir“
long_description: |
- Dieses Abzeichen erhältst du, wenn du die Vertrauensstufe 3 erreichst. Vielen Dank, dass du über Monate hinweg ein regelmäßiger Teil unserer Community bist. Du gehörst jetzt zu den aktivsten Lesern und leistest einen zuverlässigen Beitrag, der unsere Community großartig macht. Du kannst jetzt Themen neu kategorisieren und umbenennen, stärkere Spam-Flags nutzen und bekommst außerdem viel mehr Likes pro Tag.
+ Dieses Abzeichen wird verliehen, wenn du Vertrauensstufe 3 erreichst. Danke, dass du für mehrere Monate regelmäßig in unserer Community aktiv warst. Du gehörst nun zu unseren aktivsten Lesern und und trägst als zuverlässiges Mitglied dazu bei, unsere Community großartig zu machen. Du kannst nun Themen neu kategorisieren und umbenennen, mächtigere Spam-Meldungen nutzen und kannst noch mehr 'Gefällt mir' pro Tag vergeben.
leader:
name: Anführer
description: Ermöglicht das Bearbeiten aller Beiträge, das Anheften, Schließen, Archivieren, Aufteilen und Zusammenfügen von Themen sowie die Vergabe von mehr „Gefällt mir“
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index c5e16d9c072..f9abde7cb94 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -2729,7 +2729,6 @@ en:
default_navigation_menu_categories: "Selected categories will be displayed under Navigation Menu's Categories section by default."
default_navigation_menu_tags: "Selected tags will be displayed under Navigation Menu's Tags section by default."
experimental_new_new_view_groups: 'Enable a new topics list that combines unread and new topics and make the "Everything" link in the sidebar link to it.'
- experimental_topics_filter: "Enables the experimental topics filter route at /filter"
enable_experimental_lightbox: "Replace the default image lightbox with the revamped design."
experimental_glimmer_topic_list_groups: "Enable the new 'glimmer' topic list implementation. This implementation is under active development, and is not intended for production use. Do not develop themes/plugins against it until the implementation is finalized and announced."
glimmer_post_menu_mode: "Control whether the new 'glimmer' post menu implementation is used. 'auto' will enable automatically once all your themes and plugins are ready. This implementation is under active development, and is not intended for production use. Do not develop themes/plugins against it until the implementation is finalized and announced."
diff --git a/config/locales/server.es.yml b/config/locales/server.es.yml
index 83a04432f14..1c5d4da6f17 100644
--- a/config/locales/server.es.yml
+++ b/config/locales/server.es.yml
@@ -2443,7 +2443,6 @@ es:
default_navigation_menu_categories: "Las categorías seleccionadas se mostrarán por defecto en la sección Categorías del Menú de navegación."
default_navigation_menu_tags: "Las etiquetas seleccionadas se mostrarán por defecto en la sección Etiquetas del Menú de navegación."
experimental_new_new_view_groups: 'Activa una nueva lista de temas que combine los no leídos y los nuevos y haz que el enlace «Todo» de la barra lateral enlace a ella.'
- experimental_topics_filter: "Activa la ruta del filtro de temas experimentales en /filter"
enable_experimental_lightbox: "Sustituye el lightbox de imágenes por defecto por el diseño renovado."
experimental_glimmer_topic_list_groups: "Activa la nueva implementación de la lista de temas «glimmer». Esta implementación está en desarrollo activo y no está pensada para su uso en producción. No desarrolles temas/plugins para ella hasta que la implementación esté finalizada y anunciada."
glimmer_post_menu_mode: "Controla si se utiliza la nueva implementación del menú de la publicación 'glimmer'. 'auto' se activará automáticamente cuando todos tus temas y plugins estén listos. Esta implementación está en desarrollo activo y no está pensada para su uso en producción. No desarrolles temas/plugins con ella hasta que la implementación esté finalizada y anunciada."
diff --git a/config/locales/server.fi.yml b/config/locales/server.fi.yml
index c22062c1bf3..e5b855b2bae 100644
--- a/config/locales/server.fi.yml
+++ b/config/locales/server.fi.yml
@@ -2442,7 +2442,6 @@ fi:
default_navigation_menu_categories: "Valitut alueet näkyvät navigointivalikon Alueet-osiossa oletuksena."
default_navigation_menu_tags: "Valitut tunnisteet näkyvät navigointivalikon Tunnisteet-osiossa oletuksena."
experimental_new_new_view_groups: 'Ota käyttöön uusien ketjujen luettelo, joka yhdistää lukemattomat ja uudet ketjut, ja linkitä sivupalkin "Kaikki"-linkki siihen.'
- experimental_topics_filter: "Ottaa käyttöön kokeellisen aiheiden suodatuspolun osoitteella /filter"
enable_experimental_lightbox: "Korvaa kuvien oletusarvoinen lightbox-tehoste uudistetulla tyylillä."
experimental_glimmer_topic_list_groups: "Ota käyttöön uusi glimmer-ketjuluettelouudistus. Tämä uudistus on aktiivisesti kehitteillä, eikä sitä ole tarkoitettu tuotantokäyttöön. Älä kehitä teemoja tai lisäosia sen mukaan ennen kuin uudistus on viimeistelty ja julkistettu."
glimmer_post_menu_mode: "Hallitse, käytetäänkö uutta glimmer-viestivalikkouudistusta. \"Auto\" ottaa sen käyttöön automaattisesti, kun kaikki teemasi ja lisäosasi ovat valmiita. Tämä uudistus on aktiivisesti kehitteillä, eikä sitä ole tarkoitettu tuotantokäyttöön. Älä kehitä teemoja tai lisäosia sen mukaan ennen kuin uudistus on viimeistelty ja julkistettu."
diff --git a/config/locales/server.fr.yml b/config/locales/server.fr.yml
index 165e1e7fc3d..b0a092710cd 100644
--- a/config/locales/server.fr.yml
+++ b/config/locales/server.fr.yml
@@ -2443,7 +2443,6 @@ fr:
default_navigation_menu_categories: "Les catégories sélectionnées seront affichées par défaut dans la section Catégories du menu de navigation."
default_navigation_menu_tags: "Les étiquettes sélectionnées seront affichées par défaut dans la section Étiquettes du menu de navigation."
experimental_new_new_view_groups: 'Activez une nouvelle liste de sujets qui combine les sujets non lus et nouveaux, et faites en sorte que le lien « Tout » dans la barre latérale renvoie vers celle-ci.'
- experimental_topics_filter: "Active la route de filtrage des sujets expérimentaux vers /filter"
enable_experimental_lightbox: "Remplacez la lightbox d'image par défaut par l'apparence remaniée."
experimental_glimmer_topic_list_groups: "Activez la nouvelle implémentation de la liste de sujets « glimmer ». Cette implémentation est en cours de développement et n'est pas destinée à une utilisation en production. Ne développez pas de thèmes/extensions pour cette implémentation avant qu'elle soit finalisée et annoncée."
glimmer_post_menu_mode: "Contrôlez si la nouvelle implémentation du menu de publication « glimmer » est utilisée. « auto » s'activera automatiquement une fois que tous vos thèmes et extensions seront prêts. Cette implémentation est en cours de développement et n'est pas destinée à une utilisation en production. Ne développez pas de thèmes/extensions pour cette implémentation avant qu'elle soit finalisée et annoncée."
diff --git a/config/locales/server.he.yml b/config/locales/server.he.yml
index 93b872aa9bf..5c069a6a519 100644
--- a/config/locales/server.he.yml
+++ b/config/locales/server.he.yml
@@ -367,6 +367,7 @@ he:
invalid_site_setting: "לא קיימת הגדרה שנקראת ‚%{name}’"
invalid_category_id: "ציינת קטגוריה שאינה קיימת"
site_setting_is_hidden: "אסור לך לשנות הגדרות נסתרות"
+ site_setting_is_shadowed_globally: "לא ניתן לשנות את ההגדרה הזאת מכיוון שהיא מוגדרת באופן כללי"
site_setting_is_unconfigurable: "אסור לך לשנות הגדרות שחסומות להגדרה"
invalid_choice:
one: "‚%{name}’ היא בחירה שגויה."
@@ -2599,7 +2600,6 @@ he:
default_navigation_menu_categories: "הקטגוריות הנבחרות תוצגנה תחת סעיף הקטגוריות של תפריט הניווט כברירת מחדל."
default_navigation_menu_tags: "התגיות הנבחרות תוצגנה תחת סעיף התגיות של תפריט הניווט כברירת מחדל."
experimental_new_new_view_groups: 'לאפשר רשימת נושאים חדשה המשלבת נושאים שלא נקראו וחדשים ולקשר אליה את „הכול” בסרגל הצד.'
- experimental_topics_filter: "מפעיל את נתיב סינון הנושאים הניסיוני תחת /filter"
enable_experimental_lightbox: "להחליף את התיבה הקלילה לתמונות כברירת מחדל לעיצוב המשופר."
experimental_glimmer_topic_list_groups: "לאפשר את היכולת החדשה של רשימת הנושאים ‚glimmer’. יכולת זו נמצאת בפיתוח פעיל ואינה מיועדת לשימוש יומיומי. אין לפתח ערכות נושא/תוספים איתה עד שתצא לאור סופית."
glimmer_post_menu_mode: "בקרה האם להשתמש במימוש תפריט הפוסט החדש ‚glimmer’. הערך ‚auto’ יפעיל אותו אוטומטית לאחר שכל ערכות העיצוב והתוספים שלך מוענים. המימוש הזה נמצא בפיתוח כרגע, ולא מיועד לשימוש יומיומי. לא לפתח על גביו ערכות עיצוב/תוספים עד שהמימוש יושלם ויוכרז רשמית."
diff --git a/config/locales/server.hu.yml b/config/locales/server.hu.yml
index 48522b340f8..652a85f037b 100644
--- a/config/locales/server.hu.yml
+++ b/config/locales/server.hu.yml
@@ -2431,7 +2431,6 @@ hu:
default_navigation_menu_categories: "A kiválasztott kategóriák alapértelmezetten megjelennek a Navigációs Menü Kategóriák szekciójában."
default_navigation_menu_tags: "A kiválasztott címkék alapértelmezetten megjelennek a Navigációs Menü Címkék szekciójában."
experimental_new_new_view_groups: 'Engedélyezzen egy új témalistát, amely egyesíti az olvasatlan és új témákat, és az oldalsávon lévő "Minden" hivatkozást jelölje be.'
- experimental_topics_filter: "Engedélyezi a kísérleti témák szűrési útvonalát a /filter címen"
enable_experimental_lightbox: "Lightbox cseréje a megújult dizájnra."
experimental_glimmer_topic_list_groups: "Az új 'ragyogó' témalista implementáció engedélyezése. Ez az implementáció aktív fejlesztés alatt áll, és nem alkalmas éles használatra. Ne fejlesszen hozzá témákat/bővítményeket, amíg az implementáció nem véglegesítődik és nem kerül bejelentésre."
glimmer_post_menu_mode: "Szabályozhatja, hogy a rendszer használja-e az új „ragyogó” bejegyzés menü megvalósítását. Az „auto” automatikusan bekapcsol, amint minden témája és bővítménye készen áll. Ez a megvalósítás aktív fejlesztés alatt áll, és nem éles használatra készült. Ne fejlesszen hozzá témákat/bővítményeket, amíg a megvalósítást nem véglegesítik és be nem jelentik."
diff --git a/config/locales/server.hy.yml b/config/locales/server.hy.yml
index 3882abfba4c..e92c6e10593 100644
--- a/config/locales/server.hy.yml
+++ b/config/locales/server.hy.yml
@@ -1146,6 +1146,7 @@ hy:
post_undo_action_window_mins: "Րոպեների քանակը, որոնց ընթացքում օգտատերերին թույլատրվում է ետարկել գրառման վրա կատարված վերջին գործողությունները (հավանում, դրոշակավորում և այլն):"
maximum_session_age: "Օգտատերը կմնա մուտքագրված վերջին այցելությունից n ժամ անց"
enable_escaped_fragments: "Վերադարձ դեպի Google's Ajax-Crawling API , եթե ոչ մի ցանցային տվայլների հավաքագրիչ (webcrawler) հայտնաբերված չէ: Այցելեք https://developers.google.com/webmasters/ajax-crawling/docs/learn-more"
+ moderators_change_post_ownership: "Թույլատրել մոդերատորներին փոխել գրառման սեփականության իրավունքը"
cors_origins: "Թույլատրելի origin-ներ խաչաձև origin հարցումների համար (CORS): Յուրաքանչյուր origin պետք է ներառի http:// կամ https://: DISCOURSE_ENABLE_CORS env փոփոխականը պետք է սահմանված լինի true ՝ CORS -ի միացման համար:"
use_admin_ip_allowlist: "Ադմինները կարող են մուտք գործել, եթե միայն ունեն Ցուցադրված IP-ների ցանկում սահմանված IP հասցե (Admin > Logs > Screened Ips):"
blocked_ip_blocks: "Մասնավոր IP արգելափակումների ցանկ, որոնք երբեք չպետք է ենթարկվեն տվյալների հավաքագրման Discourse-ի կողմից:"
@@ -2108,6 +2109,10 @@ hy:
subject_template:
one: "վերանայման սպասող %{count} գրառում"
other: "վերանայման սպասող %{count} գրառում"
+ text_body_template: |
+ Բարև ձեզ,
+
+ Նոր օգտատերերի գրառումները պահվել են մոդերատորության համար և ներկայումս սպասում են վերանայման: [Հաստատեք կամ մերժեք դրանք այստեղ](%{base_url}/review?type=ReviewableQueuedPost):
unsubscribe_link: |
Այս էլ. հասցեների բաժանորդագրումից դուրս գալու համար [սեղմեք այստեղ](%{unsubscribe_url}):
unsubscribe_link_and_mail: |
diff --git a/config/locales/server.it.yml b/config/locales/server.it.yml
index 81fc12f5454..467afbec238 100644
--- a/config/locales/server.it.yml
+++ b/config/locales/server.it.yml
@@ -2443,7 +2443,6 @@ it:
default_navigation_menu_categories: "Le categorie selezionate appariranno, per impostazione predefinita, nella sezione Categorie del menu di navigazione."
default_navigation_menu_tags: "Le etichette selezionate appariranno, per impostazione predefinita, nella sezione Etichette del menu di navigazione."
experimental_new_new_view_groups: 'Abilita un nuovo elenco di argomenti che combini argomenti non letti e nuovi e crea il link "Tutto" nella barra laterale a esso.'
- experimental_topics_filter: "Abilita il percorso del filtro degli argomenti sperimentali in /filter"
enable_experimental_lightbox: "Sostituisci la lightbox dell'immagine predefinita con il design rinnovato."
experimental_glimmer_topic_list_groups: "Abilita l'implementazione del nuovo elenco argomenti \"glimmer\". Questa implementazione è ancora in corso di sviluppo e non è destinata alla fase di produzione. Non sviluppare temi o plugin per questa implementazione fino a quando non sarà finalizzata e annunciata."
glimmer_post_menu_mode: "Controlla se viene utilizzata la nuova implementazione del menu dei messaggi \"glimmer\". \"automatica\" verrà abilitato automaticamente una volta che tutti i tuoi temi e plugin saranno pronti. Questa implementazione è in fase di sviluppo attivo e non è pensata per l'uso in produzione. Non sviluppare temi/plugin con essa finché l'implementazione non sarà finalizzata e annunciata."
diff --git a/config/locales/server.ja.yml b/config/locales/server.ja.yml
index 2350e910e0d..f5136a06d4e 100644
--- a/config/locales/server.ja.yml
+++ b/config/locales/server.ja.yml
@@ -553,7 +553,7 @@ ja:
staff: "管理者とモデレーターを含む自動グループ"
admins: "このサイトの構成と管理を担当し、すべてのメンバーとアクティビティデータにアクセスできます"
moderators: "通報への対応、ディスカッションのモデレーション、アカウントに関するメンバーのサポートを担当します"
- trust_level_0: "コミュニティの規範や機能を学習中で、機能に制限のある新規メンバー"
+ trust_level_0: "コミュニティーの規範や機能を学習中で、機能に制限のある新規メンバー"
trust_level_2: "長い間継続的に貢献し、完全な市民権を獲得したアクティブメンバー。このグループのすべてのメンバーは、trust_level_1 および trust_level_0 グループのメンバーでもあります。"
trust_level_3: "コミュニティーの中核を成し、限定的なモデレーション権限を獲得した、非常に積極的な長期貢献者。このグループのすべてのメンバーは、trust_level_2、trust_level_1、および trust_level_0 グループのメンバーでもあります。"
trust_level_4: "模範的な貢献が認められ、追加のモデレーション権限が委任されている、手動昇格メンバー。このグループのすべてのメンバーは、trust_level_3、trust_level_2、trust_level_1、および trust_level_0 グループのメンバーでもあります。"
@@ -2368,7 +2368,6 @@ ja:
default_navigation_menu_categories: "選択されたカテゴリは、デフォルトでナビゲーションメニューのカテゴリセクションに表示されます。"
default_navigation_menu_tags: "選択されたタグは、デフォルトでナビゲーションメニューのタグセクションに表示されます。"
experimental_new_new_view_groups: '未読のトピックと新規トピックを合わせた新しいトピックリストを有効にし、サイドバーの「すべて」リンクをそのリストにリンクする。'
- experimental_topics_filter: "/filter で実験的なトピックフィルターのルートを有効にします。"
enable_experimental_lightbox: "デフォルトの画像ライトボックスを改良されたデザインに置き換える。"
experimental_glimmer_topic_list_groups: "新しい 'glimmer' トピックリストの実装を有効にする。この実装は開発中であり、本番環境での使用を意図したものではありません。実装が完成してリリースされるまで、これに対するテーマ/プラグインを開発しないでください。"
glimmer_post_menu_mode: "新しい 'glimmer' 投稿メニューの実装が使用されるかどうかを制御する。'auto' はすべてのテーマとプラグインの準備ができると自動的に有効化します。この実装は活動的に開発中であり、本番環境での使用を意図したものではありません。実装が完成してリリースされるまで、これに対するテーマ/プラグインを開発しないでください。"
diff --git a/config/locales/server.nl.yml b/config/locales/server.nl.yml
index e62c1e8a6b9..f261d8fc1cc 100644
--- a/config/locales/server.nl.yml
+++ b/config/locales/server.nl.yml
@@ -2443,7 +2443,6 @@ nl:
default_navigation_menu_categories: "De geselecteerde categorieën worden standaard weergegeven in de sectie Categorieën van het navigatiemenu."
default_navigation_menu_tags: "De geselecteerde tags worden standaard weergegeven in de sectie Tags van het navigatiemenu."
experimental_new_new_view_groups: 'Schakel een nieuwe topicslijst in die ongelezen en nieuwe topics combineert en laat de link "Alles" in de zijbalk ernaartoe verwijzen.'
- experimental_topics_filter: "Schakelt de filterroute voor experimentele topics in op /filter"
enable_experimental_lightbox: "Vervangt de standaard afbeeldingslightbox door het vernieuwde ontwerp."
experimental_glimmer_topic_list_groups: "Schakel de nieuwe 'glimmer'-implementatie voor topiclijsten in. Deze implementatie wordt momenteel ontwikkeld en is niet bedoeld voor productiegebruik. Ontwikkel er geen thema's/plug-ins mee totdat de implementatie is afgerond en aangekondigd."
glimmer_post_menu_mode: "Bepaal of de nieuwe 'glimmer'-implementatie voor het plaatsingsmenu wordt gebruikt. 'Auto' wordt automatisch ingeschakeld wanneer al je thema's en plug-ins gereed zijn. Deze implementatie wordt momenteel ontwikkeld en is niet bedoeld voor productiegebruik. Ontwikkel er geen thema's/plug-ins mee totdat de implementatie is afgerond en aangekondigd."
diff --git a/config/locales/server.pt_BR.yml b/config/locales/server.pt_BR.yml
index e7395469f6a..e424cbc847d 100644
--- a/config/locales/server.pt_BR.yml
+++ b/config/locales/server.pt_BR.yml
@@ -2443,7 +2443,6 @@ pt_BR:
default_navigation_menu_categories: "As categorias selecionadas serão exibidas abaixo da seção de Categorias do Menu de Navegação por padrão."
default_navigation_menu_tags: "As etiquetas selecionadas serão exibidas na seção Etiquetas do Menu de Navegação por padrão."
experimental_new_new_view_groups: 'Ative uma nova lista de tópicos que combina tópicos novos e não lidos e faz o link "Tudo", localizado na barra lateral, apontar para ela.'
- experimental_topics_filter: "Ative a rota do filtro de tópicos experimentais em /filter"
enable_experimental_lightbox: "Substitua a lightbox da imagem padrão pelo design renovado."
experimental_glimmer_topic_list_groups: "Ative a implementação da nova lista de tópicos \"glimme\". Esta implementação ainda está em desenvolvimento e não se destina a uso para fins de produção. Não a use para desenvolver temas/plugins até que seja finalizada e anunciada."
glimmer_post_menu_mode: "Controle se a implementação do novo menu de postagem \"glimmer\" é usada. O modo \"automático\" será ativado automaticamente quando os temas e plugins estiverem prontos. Esta implementação ainda está em desenvolvimento e não se destina a uso para fins de produção. Não a use para desenvolver temas/plugins até que seja finalizada e anunciada."
diff --git a/config/locales/server.ro.yml b/config/locales/server.ro.yml
index c497200b9e7..070e2b095f4 100644
--- a/config/locales/server.ro.yml
+++ b/config/locales/server.ro.yml
@@ -177,6 +177,7 @@ ro:
embed:
load_from_remote: "A apărut o eroare la încărcarea postării."
site_settings:
+ site_setting_is_shadowed_globally: "Nu poți modifica această setare pentru că este configurată la nivel global"
default_categories_already_selected: "Nu poți selecta o categorie folosită într-o altă listă."
s3_upload_bucket_is_required: "Nu poți activa încărcările pe S3 dacă nu ai introdus 's3_upload_bucket'."
page_publishing_requirements: "Publicarea paginilor nu poate fi activată dacă este activată încărcarea securizată."
@@ -1258,7 +1259,6 @@ ro:
show_bottom_topic_map: "Arată harta subiectului în partea de jos a subiectului atunci când are 10 răspunsuri sau mai multe."
show_topic_map_in_topics_without_replies: "Arată harta subiectului chiar dacă subiectul nu are răspunsuri."
experimental_new_new_view_groups: 'Activează o nouă listă de subiecte care combină subiectele necitite și cele noi și fă ca legătura „Toate” din bara laterală să ducă spre aceasta.'
- experimental_topics_filter: "Activează ruta de filtrare a subiectelor experimentale la /filter"
show_user_menu_avatars: "Arată avatare utilizator în meniul utilizatorului"
errors:
invalid_email: "Adresă de email invalidă."
diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml
index 7e3bb74d17c..cda74c99c87 100644
--- a/config/locales/server.ru.yml
+++ b/config/locales/server.ru.yml
@@ -2594,7 +2594,6 @@ ru:
default_navigation_menu_categories: "Выбранные категории по умолчанию будут отображаться в соответствующем разделе меню навигации."
default_navigation_menu_tags: "Выбранные теги по умолчанию будут отображаться в соответствующем разделе меню навигации."
experimental_new_new_view_groups: 'Включить новый список тем, который объединяет непрочитанные и новые темы, и сделать на него ссылку «Все» на боковой панели.'
- experimental_topics_filter: "Включить экспериментальный маршрут фильтрации тем по ссылке /filter"
enable_experimental_lightbox: "Новый дизайн стандартного лайтбокса изображений."
experimental_glimmer_topic_list_groups: "Включает новую реализацию списка тем 'glimmer'. Эта реализация находится в стадии активной разработки и не предназначена для промышленной эксплуатации. Не разрабатывайте темы/плагины для нее до завершения разработки реализации и объявления о ее выходе."
glimmer_post_menu_mode: "Контролирует, используется ли новая реализация меню публикации 'glimmer'. Значение 'auto' включится автоматически, как только все ваши темы и плагины будут готовы. Эта реализация находится в стадии активной разработки и не предназначена для промышленной эксплуатации. Не разрабатывайте темы/плагины для нее до завершения разработки реализации и объявления о ее выходе."
diff --git a/config/locales/server.sk.yml b/config/locales/server.sk.yml
index 912a7540423..f65fd815ee6 100644
--- a/config/locales/server.sk.yml
+++ b/config/locales/server.sk.yml
@@ -367,6 +367,7 @@ sk:
invalid_site_setting: "Neexistuje žiadne nastavenie s názvom '%{name}'"
invalid_category_id: "Zadali ste kategóriu, ktorá neexistuje"
site_setting_is_hidden: "Nie je povolené meniť skryté nastavenia"
+ site_setting_is_shadowed_globally: "Toto nastavenie nemôžete zmeniť, pretože je globálne nakonfigurované"
site_setting_is_unconfigurable: "Nie je povolené meniť nekonfigurovateľné nastavenia"
invalid_choice:
one: "'%{name}' je neplatná voľba."
@@ -1977,9 +1978,11 @@ sk:
send_old_credential_reminder_days: "Pripomenúť staré poverenia po niekoľkých dňoch"
email_token_valid_hours: "Platnosť tokenov pre Zabudnuté heslo a aktiváciu účtu v (n) hodinách."
enable_badges: "Povoľte systém odznakov, ktorý je formou gamifikácie na posilnenie pozitívnych akcií používateľov. Viac informácií nájdete v časti Čo sú odznaky? na stránke Discourse Meta."
+ show_badges_in_post_header: "Keď používateľ získa odznak za konkrétny príspevok, zobrazte odznak v hlavičke príspevku."
max_favorite_badges: "Maximálny počet odznakov, ktoré môže používateľ vybrať"
whispers_allowed_groups: "Povolenie súkromnej komunikácie v rámci tém pre členov určených skupín."
hidden_post_visible_groups: "Povoliť členom týchto skupín zobrazovať skryté príspevky. Členovia personálu môžu vždy zobraziť skryté príspevky."
+ allow_index_in_robots_txt: "V súbore robots.txt uveďte, že túto stránku môžu webové vyhľadávače indexovať. Tu môžete prepísať svoj súbor robots.txt. UPOZORNENIE: Nesprávne nakonfigurované pravidlá môžu zabrániť prehľadávaniu vašej lokality podľa očakávania."
blocked_email_domains: "Zoznam e-mailových domén oddelených zvislými čiarami, s ktorými si používatelia nemôžu registrovať účty. Subdomény sú automaticky spracované pre zadané domény. Zástupné znaky * a ? nie sú podporované. Príklad: mailinator.com|trashmail.net"
allowed_email_domains: "Zoznam e-mailových domén oddelených zvislými čiarami, v ktorých si používatelia MUSIA zaregistrovať účty. Subdomény sú automaticky spracované pre zadané domény. Zástupné znaky * a ? nie sú podporované. UPOZORNENIE: Používatelia s inými e-mailovými doménami ako sú uvedené nebudú povolení!"
normalize_emails: "Skontroluj, či je normalizovaný e-mail jedinečný. Normalizovaný e-mail odstraňuje všetky bodky z používateľského mena a všetko medzi znakmi + a @."
@@ -2600,7 +2603,6 @@ sk:
default_navigation_menu_categories: "Vybrané kategórie sa predvolene zobrazia v časti Kategórie navigačného menu."
default_navigation_menu_tags: "Vybrané značky sa predvolene zobrazia v časti Značky v navigačnom menu."
experimental_new_new_view_groups: 'Povoľte nový zoznam tém, ktorý kombinuje neprečítané a nové témy, a vytvorte naň odkaz "Všetko" v bočnom paneli.'
- experimental_topics_filter: "Povolí trasu filtrovania experimentálnych tém na adrese /filter"
enable_experimental_lightbox: "Nahraďte predvolený lightbox s obrázkami prepracovaným dizajnom."
experimental_glimmer_topic_list_groups: "Povolenie novej implementácie zoznamu tém \"glimmer\". Táto implementácia je v štádiu aktívneho vývoja a nie je určená na produkčné použitie. Nevyvíjajte proti nej témy/pluginy, kým nebude implementácia dokončená a oznámená."
glimmer_post_menu_mode: "Kontrola, či sa používa nová implementácia ponuky \"glimmer\". 'auto' sa zapne automaticky, akonáhle sú všetky vaše témy a doplnky pripravené. Táto implementácia je v štádiu aktívneho vývoja a nie je určená na produkčné použitie. Nevyvíjajte proti nej témy/pluginy, kým nebude implementácia dokončená a oznámená."
diff --git a/config/locales/server.tr_TR.yml b/config/locales/server.tr_TR.yml
index 06a03f30654..aef33abd815 100644
--- a/config/locales/server.tr_TR.yml
+++ b/config/locales/server.tr_TR.yml
@@ -2436,7 +2436,6 @@ tr_TR:
default_navigation_menu_categories: "Seçilen kategoriler, varsayılan olarak Navigasyon Menüsü'nün Kategoriler bölümünde gösterilir."
default_navigation_menu_tags: "Seçilen etiketler, varsayılan olarak Navigasyon Menüsü'nün Etiketler bölümünde gösterilir."
experimental_new_new_view_groups: 'Okunmamış ve yeni konuları birleştiren bir yeni konular listesi etkinleştirin ve kenar çubuğundaki "Her şey" bağlantısını buna bağlayın.'
- experimental_topics_filter: "/filter (filtre) konumunda deneysel konu filtrelemeyi etkinleştiririr"
enable_experimental_lightbox: "Varsayılan görüntü ışık kutusunu yenilenen tasarımla değiştirin."
experimental_glimmer_topic_list_groups: "Yeni \"parıltı\" konu listesi uygulamasını etkinleştirin. Bu uygulama aktif geliştirme aşamasındadır ve üretim kullanımı için tasarlanmamıştır. Uygulama tamamlanıp duyurulana kadar tema/eklenti geliştirmeyin."
glimmer_post_menu_mode: "Yeni \"parıltı\" gönderi menüsü uygulamasının kullanılıp kullanılmayacağını kontrol edin. \"otomatik\" tüm temalarınız ve eklentileriniz hazır olduğunda otomatik olarak etkinleştirilir. Bu uygulama aktif geliştirme aşamasındadır ve üretim kullanımı için tasarlanmamıştır. Uygulama tamamlanıp duyurulana kadar tema/eklenti geliştirmeyin."
diff --git a/config/locales/server.uk.yml b/config/locales/server.uk.yml
index 60620588a70..8cf9d25b5e3 100644
--- a/config/locales/server.uk.yml
+++ b/config/locales/server.uk.yml
@@ -367,6 +367,7 @@ uk:
invalid_site_setting: "Не існує параметра з назвою «%{name}»"
invalid_category_id: "Ви вказали розділ, якого не існує"
site_setting_is_hidden: "Ви не можете змінити приховані налаштування"
+ site_setting_is_shadowed_globally: "Ви не можете змінити цей параметр, тому що він глобально налаштований"
site_setting_is_unconfigurable: "Ви не маєте права змінювати неконфігуровані налаштування"
invalid_choice:
one: "'%{name}' є недійсним вибором."
@@ -1980,6 +1981,7 @@ uk:
max_favorite_badges: "Максимальна кількість нагород, яку може вибрати користувач"
whispers_allowed_groups: "Дозволити приватне спілкування в межах тем для членів указаних груп."
hidden_post_visible_groups: "Дозволити членам цих груп перегляд прихованих повідомлень. Персонал завжди може переглядати приховані повідомлення."
+ allow_index_in_robots_txt: "Вкажіть у файлі robots.txt, що цей сайт дозволено індексувати пошуковими системами. Ви можете змінити файл robots.txt тут. ПОПЕРЕДЖЕННЯ: неправильно налаштовані правила можуть перешкодити скануванню вашого сайту належним чином."
blocked_email_domains: "Розділений вертикальною рискою список доменів електронної пошти, у яких користувачам заборонено реєструвати облікові записи. Піддомени автоматично обробляються для вказаних доменів. Символи підстановки * і ? не підтримуються. Приклад: mailinator.com|trashmail.net"
allowed_email_domains: "Розділений вертикальною рискою список доменів електронної пошти, у яких користувачі ПОВИННІ зареєструвати облікові записи. Піддомени автоматично обробляються для вказаних доменів. Символи підстановки * і ? не підтримуються. ПОПЕРЕДЖЕННЯ: Користувачі з доменами електронної пошти, відмінними від зазначених у списку, не будуть допущені!"
normalize_emails: "Перевіряти чи нормалізована електронна пошта є унікальною. При нормалізації електронної пошти видаляються всі крапки з імені користувача та все між символами + та @."
@@ -2600,7 +2602,6 @@ uk:
default_navigation_menu_categories: "Вибрані категорії будуть відображатися в розділі \"Меню навігації\" за замовчуванням."
default_navigation_menu_tags: "За замовчуванням вибрані теги відображатимуться в розділі Мітки меню навігації."
experimental_new_new_view_groups: 'Увімкніть новий список тем, який поєднує непрочитані та нові теми, і зробіть посилання «Усе» на бічній панелі посиланням на нього.'
- experimental_topics_filter: "Вмикає маршрут фільтра експериментальних тем у /filter"
enable_experimental_lightbox: "Замініть лайтбокс зображення за замовчуванням на оновлений дизайн."
experimental_glimmer_topic_list_groups: "Увімкнути нову реалізацію списку тем «блимання». Ця реалізація знаходиться в стадії активної розробки і не призначена для використання у виробництві. Не розробляйте теми/плагіни проти нього, доки впровадження не буде завершено та оголошено."
glimmer_post_menu_mode: "Керуйте тим, чи використовуватиметься нова реалізація \"мерехтливого\" меню дописів. 'auto' буде ввімкнено автоматично, коли всі ваші теми та плагіни будуть готові. Ця реалізація перебуває на стадії активної розробки і не призначена для виробничого використання. Не розробляйте теми/плагіни для неї, доки реалізацію не буде завершено і оголошено."
diff --git a/config/locales/server.zh_CN.yml b/config/locales/server.zh_CN.yml
index 5f3314dad7b..98cac1e28b3 100644
--- a/config/locales/server.zh_CN.yml
+++ b/config/locales/server.zh_CN.yml
@@ -289,6 +289,7 @@ zh_CN:
invalid_site_setting: "不存在名为 '%{name}' 的设置"
invalid_category_id: "您指定了一个不存在的类别"
site_setting_is_hidden: "您无权更改隐藏设置"
+ site_setting_is_shadowed_globally: "你无法更改此设置,因为它是全局配置的"
site_setting_is_unconfigurable: "您无权更改不可配置的设置"
invalid_choice:
other: "'%{name}' 是无效的选择。"
@@ -2370,7 +2371,6 @@ zh_CN:
default_navigation_menu_categories: "所选类别默认将显示在导航菜单的“类别”版块下。"
default_navigation_menu_tags: "所选标签默认将显示在导航菜单的“标签”版块下。"
experimental_new_new_view_groups: '启用新的话题列表,将未读话题与新话题合并,并使边栏中的“一切”链接指向该列表。'
- experimental_topics_filter: "在 /filter 下启用实验性话题筛选路由"
enable_experimental_lightbox: "将默认图片灯箱替换为全新设计。"
experimental_glimmer_topic_list_groups: "启用新的 'glimmer' 话题列表实现。此实现正在积极开发中,不适用于生产环境。在实现最终确定并公布之前,请勿针对其开发主题/插件。"
glimmer_post_menu_mode: "控制是否使用新的 'glimmer' 帖子菜单实现。当您的所有主题和插件都准备就绪后,'auto' 将自动启用。此实现正在积极开发中,不适用于生产环境。在实现最终确定并公布之前,请勿针对其开发主题/插件。"
diff --git a/config/site_settings.yml b/config/site_settings.yml
index 94d3529f17f..63315551b45 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -3362,9 +3362,6 @@ experimental:
default: false
client: true
hidden: true
- experimental_topics_filter:
- client: true
- default: true
enable_rich_text_paste:
client: true
default: true
diff --git a/db/fixtures/006_badges.rb b/db/fixtures/006_badges.rb
index 12bf022cbf7..735e86268bb 100644
--- a/db/fixtures/006_badges.rb
+++ b/db/fixtures/006_badges.rb
@@ -156,7 +156,7 @@ end
Badge.seed do |b|
b.id = id
b.name = name
- b.default_icon = "fa-user-plus"
+ b.default_icon = "user-plus"
b.badge_type_id = type
b.multiple_grant = false
b.target_posts = false
@@ -339,7 +339,7 @@ end
Badge.seed do |b|
b.id = id
b.name = name
- b.default_icon = "fa-heart"
+ b.default_icon = "heart"
b.badge_type_id = level
b.query = BadgeQueries.liked_posts(post_count, like_count)
b.default_badge_grouping_id = BadgeGrouping::Community
@@ -357,7 +357,7 @@ end
Badge.seed do |b|
b.id = id
b.name = name
- b.default_icon = "fa-heart"
+ b.default_icon = "heart"
b.badge_type_id = level
b.query = BadgeQueries.liked_back(count, ratio)
b.default_badge_grouping_id = BadgeGrouping::Community
@@ -375,7 +375,7 @@ end
Badge.seed do |b|
b.id = id
b.name = name
- b.default_icon = "fa-heart"
+ b.default_icon = "heart"
b.badge_type_id = level
b.query = BadgeQueries.like_rate_limit(count)
b.default_badge_grouping_id = BadgeGrouping::Community
diff --git a/db/migrate/20241127072350_remap_fa5_icon_names_to_fa6.rb b/db/migrate/20241127072350_remap_fa5_icon_names_to_fa6.rb
index c2d72f1813d..cf408ed3feb 100644
--- a/db/migrate/20241127072350_remap_fa5_icon_names_to_fa6.rb
+++ b/db/migrate/20241127072350_remap_fa5_icon_names_to_fa6.rb
@@ -1,776 +1,10 @@
# frozen_string_literal: true
class RemapFa5IconNamesToFa6 < ActiveRecord::Migration[7.1]
- FA5_REMAPS = {
- "adjust" => "circle-half-stroke",
- "air-freshener" => "spray-can-sparkles",
- "alien-monster" => "alien-8bit",
- "allergies" => "hand-dots",
- "ambulance" => "truck-medical",
- "american-sign-language-interpreting" => "hands-asl-interpreting",
- "analytics" => "chart-mixed",
- "angle-double-down" => "angles-down",
- "angle-double-left" => "angles-left",
- "angle-double-right" => "angles-right",
- "angle-double-up" => "angles-up",
- "angry" => "face-angry",
- "apple-alt" => "apple-whole",
- "apple-crate" => "crate-apple",
- "archive" => "box-archive",
- "arrow-alt-circle-down" => "circle-down",
- "arrow-alt-circle-left" => "circle-left",
- "arrow-alt-circle-right" => "circle-right",
- "arrow-alt-circle-up" => "circle-up",
- "arrow-alt-down" => "down",
- "arrow-alt-from-bottom" => "up-from-line",
- "arrow-alt-from-left" => "right-from-line",
- "arrow-alt-from-right" => "left-from-line",
- "arrow-alt-from-top" => "down-from-line",
- "arrow-alt-left" => "left",
- "arrow-alt-right" => "right",
- "arrow-alt-square-down" => "square-down",
- "arrow-alt-square-left" => "square-left",
- "arrow-alt-square-right" => "square-right",
- "arrow-alt-square-up" => "square-up",
- "arrow-alt-to-bottom" => "down-to-line",
- "arrow-alt-to-left" => "left-to-line",
- "arrow-alt-to-right" => "right-to-line",
- "arrow-alt-to-top" => "up-to-line",
- "arrow-alt-up" => "up",
- "arrow-circle-down" => "circle-arrow-down",
- "arrow-circle-left" => "circle-arrow-left",
- "arrow-circle-right" => "circle-arrow-right",
- "arrow-circle-up" => "circle-arrow-up",
- "arrow-from-bottom" => "arrow-up-from-line",
- "arrow-from-left" => "arrow-right-from-line",
- "arrow-from-right" => "arrow-left-from-line",
- "arrow-from-top" => "arrow-down-from-line",
- "arrow-square-down" => "square-arrow-down",
- "arrow-square-left" => "square-arrow-left",
- "arrow-square-right" => "square-arrow-right",
- "arrow-square-up" => "square-arrow-up",
- "arrow-to-bottom" => "arrow-down-to-line",
- "arrow-to-left" => "arrow-left-to-line",
- "arrow-to-right" => "arrow-right-to-line",
- "arrow-to-top" => "arrow-up-to-line",
- "arrows" => "arrows-up-down-left-right",
- "arrows-alt" => "up-down-left-right",
- "arrows-alt-h" => "left-right",
- "arrows-alt-v" => "up-down",
- "arrows-h" => "arrows-left-right",
- "arrows-v" => "arrows-up-down",
- "assistive-listening-systems" => "ear-listen",
- "atlas" => "book-atlas",
- "atom-alt" => "atom-simple",
- "backspace" => "delete-left",
- "balance-scale" => "scale-balanced",
- "balance-scale-left" => "scale-unbalanced",
- "balance-scale-right" => "scale-unbalanced-flip",
- "band-aid" => "bandage",
- "barcode-alt" => "rectangle-barcode",
- "baseball-ball" => "baseball",
- "basketball-ball" => "basketball",
- "bed-alt" => "bed-front",
- "beer" => "beer-mug-empty",
- "betamax" => "cassette-betamax",
- "bible" => "book-bible",
- "biking" => "person-biking",
- "biking-mountain" => "person-biking-mountain",
- "birthday-cake" => "cake-candles",
- "blind" => "person-walking-with-cane",
- "book-alt" => "book-blank",
- "book-dead" => "book-skull",
- "book-reader" => "book-open-reader",
- "book-spells" => "book-sparkles",
- "border-style" => "border-top-left",
- "border-style-alt" => "border-bottom-right",
- "box-alt" => "box-taped",
- "box-fragile" => "square-fragile",
- "box-full" => "box-open-full",
- "box-up" => "square-this-way-up",
- "box-usd" => "box-dollar",
- "boxes" => "boxes-stacked",
- "boxes-alt" => "boxes-stacked",
- "brackets" => "brackets-square",
- "broadcast-tower" => "tower-broadcast",
- "burn" => "fire-flame-simple",
- "bus-alt" => "bus-simple",
- "calculator-alt" => "calculator-simple",
- "calendar-alt" => "calendar-days",
- "calendar-edit" => "calendar-pen",
- "calendar-times" => "calendar-xmark",
- "camera-alt" => "camera",
- "camera-home" => "camera-security",
- "car-alt" => "car-rear",
- "car-crash" => "car-burst",
- "car-mechanic" => "car-wrench",
- "caravan-alt" => "caravan-simple",
- "caret-circle-down" => "circle-caret-down",
- "caret-circle-left" => "circle-caret-left",
- "caret-circle-right" => "circle-caret-right",
- "caret-circle-up" => "circle-caret-up",
- "caret-square-down" => "square-caret-down",
- "caret-square-left" => "square-caret-left",
- "caret-square-right" => "square-caret-right",
- "caret-square-up" => "square-caret-up",
- "cctv" => "camera-cctv",
- "chalkboard-teacher" => "chalkboard-user",
- "chart-pie-alt" => "chart-pie-simple",
- "check-circle" => "circle-check",
- "check-square" => "square-check",
- "cheeseburger" => "burger-cheese",
- "chess-bishop-alt" => "chess-bishop-piece",
- "chess-clock-alt" => "chess-clock-flip",
- "chess-king-alt" => "chess-king-piece",
- "chess-knight-alt" => "chess-knight-piece",
- "chess-pawn-alt" => "chess-pawn-piece",
- "chess-queen-alt" => "chess-queen-piece",
- "chess-rook-alt" => "chess-rook-piece",
- "chevron-circle-down" => "circle-chevron-down",
- "chevron-circle-left" => "circle-chevron-left",
- "chevron-circle-right" => "circle-chevron-right",
- "chevron-circle-up" => "circle-chevron-up",
- "chevron-double-down" => "chevrons-down",
- "chevron-double-left" => "chevrons-left",
- "chevron-double-right" => "chevrons-right",
- "chevron-double-up" => "chevrons-up",
- "chevron-square-down" => "square-chevron-down",
- "chevron-square-left" => "square-chevron-left",
- "chevron-square-right" => "square-chevron-right",
- "chevron-square-up" => "square-chevron-up",
- "clinic-medical" => "house-chimney-medical",
- "cloud-download" => "cloud-arrow-down",
- "cloud-download-alt" => "cloud-arrow-down",
- "cloud-upload" => "cloud-arrow-up",
- "cloud-upload-alt" => "cloud-arrow-up",
- "cocktail" => "martini-glass-citrus",
- "coffee" => "mug-saucer",
- "coffee-togo" => "cup-togo",
- "cog" => "gear",
- "cogs" => "gears",
- "columns" => "table-columns",
- "comment-alt" => "message",
- "comment-alt-check" => "message-check",
- "comment-alt-dollar" => "message-dollar",
- "comment-alt-dots" => "message-dots",
- "comment-alt-edit" => "message-pen",
- "comment-alt-exclamation" => "message-exclamation",
- "comment-alt-lines" => "message-lines",
- "comment-alt-medical" => "message-medical",
- "comment-alt-minus" => "message-minus",
- "comment-alt-music" => "message-music",
- "comment-alt-plus" => "message-plus",
- "comment-alt-slash" => "message-slash",
- "comment-alt-smile" => "message-smile",
- "comment-alt-times" => "message-xmark",
- "comment-edit" => "comment-pen",
- "comment-times" => "comment-xmark",
- "comments-alt" => "messages",
- "comments-alt-dollar" => "messages-dollar",
- "compress-alt" => "down-left-and-up-right-to-center",
- "compress-arrows-alt" => "minimize",
- "concierge-bell" => "bell-concierge",
- "construction" => "triangle-person-digging",
- "conveyor-belt-alt" => "conveyor-belt-boxes",
- "cowbell-more" => "cowbell-circle-plus",
- "cricket" => "cricket-bat-ball",
- "crop-alt" => "crop-simple",
- "curling" => "curling-stone",
- "cut" => "scissors",
- "deaf" => "ear-deaf",
- "debug" => "ban-bug",
- "desktop-alt" => "desktop",
- "dewpoint" => "droplet-degree",
- "diagnoses" => "person-dots-from-line",
- "digging" => "person-digging",
- "digital-tachograph" => "tachograph-digital",
- "directions" => "diamond-turn-right",
- "dizzy" => "face-dizzy",
- "dolly-flatbed" => "cart-flatbed",
- "dolly-flatbed-alt" => "cart-flatbed-boxes",
- "dolly-flatbed-empty" => "cart-flatbed-empty",
- "donate" => "circle-dollar-to-slot",
- "dot-circle" => "circle-dot",
- "drafting-compass" => "compass-drafting",
- "drone-alt" => "drone-front",
- "dryer-alt" => "dryer-heat",
- "eclipse-alt" => "moon-over-sun",
- "edit" => "pen-to-square",
- "ellipsis-h" => "ellipsis",
- "ellipsis-h-alt" => "ellipsis-stroke",
- "ellipsis-v" => "ellipsis-vertical",
- "ellipsis-v-alt" => "ellipsis-stroke-vertical",
- "envelope-square" => "square-envelope",
- "exchange" => "arrow-right-arrow-left",
- "exchange-alt" => "right-left",
- "exclamation-circle" => "circle-exclamation",
- "exclamation-square" => "square-exclamation",
- "exclamation-triangle" => "triangle-exclamation",
- "expand-alt" => "up-right-and-down-left-from-center",
- "expand-arrows" => "arrows-maximize",
- "expand-arrows-alt" => "maximize",
- "external-link" => "arrow-up-right-from-square",
- "external-link-alt" => "up-right-from-square",
- "external-link-square" => "square-arrow-up-right",
- "external-link-square-alt" => "square-up-right",
- "eyedropper" => "eye-dropper",
- "fast-backward" => "backward-fast",
- "fast-forward" => "forward-fast",
- "feather-alt" => "feather-pointed",
- "female" => "person-dress",
- "field-hockey" => "field-hockey-stick-ball",
- "fighter-jet" => "jet-fighter",
- "file-alt" => "file-lines",
- "file-archive" => "file-zipper",
- "file-chart-line" => "file-chart-column",
- "file-download" => "file-arrow-down",
- "file-edit" => "file-pen",
- "file-medical-alt" => "file-waveform",
- "file-search" => "file-magnifying-glass",
- "file-times" => "file-xmark",
- "file-upload" => "file-arrow-up",
- "film-alt" => "film-simple",
- "fire-alt" => "fire-flame-curved",
- "first-aid" => "kit-medical",
- "fist-raised" => "hand-fist",
- "flag-alt" => "flag-swallowtail",
- "flame" => "fire-flame",
- "flask-poison" => "flask-round-poison",
- "flask-potion" => "flask-round-potion",
- "flushed" => "face-flushed",
- "fog" => "cloud-fog",
- "folder-download" => "folder-arrow-down",
- "folder-times" => "folder-xmark",
- "folder-upload" => "folder-arrow-up",
- "font-awesome-alt" => "square-font-awesome-stroke",
- "font-awesome-flag" => "font-awesome",
- "font-awesome-logo-full" => "font-awesome",
- "football-ball" => "football",
- "fragile" => "wine-glass-crack",
- "frosty-head" => "snowman-head",
- "frown" => "face-frown",
- "frown-open" => "face-frown-open",
- "funnel-dollar" => "filter-circle-dollar",
- "game-board-alt" => "game-board-simple",
- "gamepad-alt" => "gamepad-modern",
- "glass-champagne" => "champagne-glass",
- "glass-cheers" => "champagne-glasses",
- "glass-martini" => "martini-glass-empty",
- "glass-martini-alt" => "martini-glass",
- "glass-whiskey" => "whiskey-glass",
- "glass-whiskey-rocks" => "whiskey-glass-ice",
- "glasses-alt" => "glasses-round",
- "globe-africa" => "earth-africa",
- "globe-americas" => "earth-americas",
- "globe-asia" => "earth-asia",
- "globe-europe" => "earth-europe",
- "golf-ball" => "golf-ball-tee",
- "grimace" => "face-grimace",
- "grin" => "face-grin",
- "grin-alt" => "face-grin-wide",
- "grin-beam" => "face-grin-beam",
- "grin-beam-sweat" => "face-grin-beam-sweat",
- "grin-hearts" => "face-grin-hearts",
- "grin-squint" => "face-grin-squint",
- "grin-squint-tears" => "face-grin-squint-tears",
- "grin-stars" => "face-grin-stars",
- "grin-tears" => "face-grin-tears",
- "grin-tongue" => "face-grin-tongue",
- "grin-tongue-squint" => "face-grin-tongue-squint",
- "grin-tongue-wink" => "face-grin-tongue-wink",
- "grin-wink" => "face-grin-wink",
- "grip-horizontal" => "grip",
- "h-square" => "square-h",
- "hamburger" => "burger",
- "hand-holding-usd" => "hand-holding-dollar",
- "hand-holding-water" => "hand-holding-droplet",
- "hand-paper" => "hand",
- "hand-receiving" => "hands-holding-diamond",
- "hand-rock" => "hand-back-fist",
- "hands-heart" => "hands-holding-heart",
- "hands-helping" => "handshake-angle",
- "hands-usd" => "hands-holding-dollar",
- "hands-wash" => "hands-bubbles",
- "handshake-alt" => "handshake-simple",
- "handshake-alt-slash" => "handshake-simple-slash",
- "hard-hat" => "helmet-safety",
- "hdd" => "hard-drive",
- "head-vr" => "head-side-goggles",
- "headphones-alt" => "headphones-simple",
- "heart-broken" => "heart-crack",
- "heart-circle" => "circle-heart",
- "heart-rate" => "wave-pulse",
- "heart-square" => "square-heart",
- "heartbeat" => "heart-pulse",
- "hiking" => "person-hiking",
- "history" => "clock-rotate-left",
- "home" => "house",
- "home-alt" => "house",
- "home-heart" => "house-heart",
- "home-lg" => "house-chimney",
- "home-lg-alt" => "house",
- "hospital-alt" => "hospital",
- "hospital-symbol" => "circle-h",
- "hot-tub" => "hot-tub-person",
- "hourglass-half" => "hourglass",
- "house-damage" => "house-chimney-crack",
- "house-leave" => "house-person-leave",
- "house-return" => "house-person-return",
- "hryvnia" => "hryvnia-sign",
- "humidity" => "droplet-percent",
- "icons-alt" => "symbols",
- "id-card-alt" => "id-card-clip",
- "industry-alt" => "industry-windows",
- "info-circle" => "circle-info",
- "info-square" => "square-info",
- "innosoft" => "42-group",
- "inventory" => "shelves",
- "journal-whills" => "book-journal-whills",
- "kiss" => "face-kiss",
- "kiss-beam" => "face-kiss-beam",
- "kiss-wink-heart" => "face-kiss-wink-heart",
- "landmark-alt" => "landmark-dome",
- "laptop-house" => "house-laptop",
- "laugh" => "face-laugh",
- "laugh-beam" => "face-laugh-beam",
- "laugh-squint" => "face-laugh-squint",
- "laugh-wink" => "face-laugh-wink",
- "level-down" => "arrow-turn-down",
- "level-down-alt" => "turn-down",
- "level-up" => "arrow-turn-up",
- "level-up-alt" => "turn-up",
- "list-alt" => "rectangle-list",
- "location" => "location-crosshairs",
- "location-circle" => "circle-location-arrow",
- "location-slash" => "location-crosshairs-slash",
- "lock-alt" => "lock-keyhole",
- "lock-open-alt" => "lock-keyhole-open",
- "long-arrow-alt-down" => "down-long",
- "long-arrow-alt-left" => "left-long",
- "long-arrow-alt-right" => "right-long",
- "long-arrow-alt-up" => "up-long",
- "long-arrow-down" => "arrow-down-long",
- "long-arrow-left" => "arrow-left-long",
- "long-arrow-right" => "arrow-right-long",
- "long-arrow-up" => "arrow-up-long",
- "low-vision" => "eye-low-vision",
- "luchador" => "luchador-mask",
- "luggage-cart" => "cart-flatbed-suitcase",
- "magic" => "wand-magic",
- "mail-bulk" => "envelopes-bulk",
- "male" => "person",
- "map-marked" => "map-location",
- "map-marked-alt" => "map-location-dot",
- "map-marker" => "location-pin",
- "map-marker-alt" => "location-dot",
- "map-marker-alt-slash" => "location-dot-slash",
- "map-marker-check" => "location-check",
- "map-marker-edit" => "location-pen",
- "map-marker-exclamation" => "location-exclamation",
- "map-marker-minus" => "location-minus",
- "map-marker-plus" => "location-plus",
- "map-marker-question" => "location-question",
- "map-marker-slash" => "location-pin-slash",
- "map-marker-smile" => "location-smile",
- "map-marker-times" => "location-xmark",
- "map-signs" => "signs-post",
- "mars-stroke-h" => "mars-stroke-right",
- "mars-stroke-v" => "mars-stroke-up",
- "medium-m" => "medium",
- "medkit" => "suitcase-medical",
- "meh" => "face-meh",
- "meh-blank" => "face-meh-blank",
- "meh-rolling-eyes" => "face-rolling-eyes",
- "microphone-alt" => "microphone-lines",
- "microphone-alt-slash" => "microphone-lines-slash",
- "mind-share" => "brain-arrow-curved-right",
- "minus-circle" => "circle-minus",
- "minus-hexagon" => "hexagon-minus",
- "minus-octagon" => "octagon-minus",
- "minus-square" => "square-minus",
- "mobile-alt" => "mobile-screen-button",
- "mobile-android" => "mobile",
- "mobile-android-alt" => "mobile-screen",
- "money-bill-alt" => "money-bill-1",
- "money-bill-wave-alt" => "money-bill-1-wave",
- "money-check-alt" => "money-check-dollar",
- "money-check-edit" => "money-check-pen",
- "money-check-edit-alt" => "money-check-dollar-pen",
- "monitor-heart-rate" => "monitor-waveform",
- "mouse" => "computer-mouse",
- "mouse-alt" => "computer-mouse-scrollwheel",
- "mouse-pointer" => "arrow-pointer",
- "music-alt" => "music-note",
- "music-alt-slash" => "music-note-slash",
- "oil-temp" => "oil-temperature",
- "page-break" => "file-dashed-line",
- "paint-brush" => "paintbrush",
- "paint-brush-alt" => "paintbrush-fine",
- "paint-brush-fine" => "paintbrush-fine",
- "pallet-alt" => "pallet-boxes",
- "paragraph-rtl" => "paragraph-left",
- "parking" => "square-parking",
- "parking-circle" => "circle-parking",
- "parking-circle-slash" => "ban-parking",
- "parking-slash" => "square-parking-slash",
- "pastafarianism" => "spaghetti-monster-flying",
- "pause-circle" => "circle-pause",
- "paw-alt" => "paw-simple",
- "pen-alt" => "pen-clip",
- "pen-square" => "square-pen",
- "pencil-alt" => "pencil",
- "pencil-paintbrush" => "pen-paintbrush",
- "pencil-ruler" => "pen-ruler",
- "pennant" => "flag-pennant",
- "people-arrows" => "people-arrows-left-right",
- "people-carry" => "people-carry-box",
- "percentage" => "percent",
- "person-carry" => "person-carry-box",
- "phone-alt" => "phone-flip",
- "phone-laptop" => "laptop-mobile",
- "phone-square" => "square-phone",
- "phone-square-alt" => "square-phone-flip",
- "photo-video" => "photo-film",
- "plane-alt" => "plane-engines",
- "play-circle" => "circle-play",
- "plus-circle" => "circle-plus",
- "plus-hexagon" => "hexagon-plus",
- "plus-octagon" => "octagon-plus",
- "plus-square" => "square-plus",
- "poll" => "square-poll-vertical",
- "poll-h" => "square-poll-horizontal",
- "portal-enter" => "person-to-portal",
- "portal-exit" => "person-from-portal",
- "portrait" => "image-portrait",
- "pound-sign" => "sterling-sign",
- "pray" => "person-praying",
- "praying-hands" => "hands-praying",
- "prescription-bottle-alt" => "prescription-bottle-medical",
- "presentation" => "presentation-screen",
- "print-search" => "print-magnifying-glass",
- "procedures" => "bed-pulse",
- "project-diagram" => "diagram-project",
- "question-circle" => "circle-question",
- "question-square" => "square-question",
- "quran" => "book-quran",
- "rabbit-fast" => "rabbit-running",
- "radiation-alt" => "circle-radiation",
- "radio-alt" => "radio-tuner",
- "random" => "shuffle",
- "rectangle-landscape" => "rectangle",
- "rectangle-portrait" => "rectangle-vertical",
- "redo" => "arrow-rotate-right",
- "redo-alt" => "rotate-right",
- "remove-format" => "text-slash",
- "repeat-1-alt" => "arrows-repeat-1",
- "repeat-alt" => "arrows-repeat",
- "retweet-alt" => "arrows-retweet",
- "rss-square" => "square-rss",
- "running" => "person-running",
- "sad-cry" => "face-sad-cry",
- "sad-tear" => "face-sad-tear",
- "save" => "floppy-disk",
- "sax-hot" => "saxophone-fire",
- "scalpel-path" => "scalpel-line-dashed",
- "scanner-image" => "scanner",
- "search" => "magnifying-glass",
- "search-dollar" => "magnifying-glass-dollar",
- "search-location" => "magnifying-glass-location",
- "search-minus" => "magnifying-glass-minus",
- "search-plus" => "magnifying-glass-plus",
- "sensor-alert" => "sensor-triangle-exclamation",
- "sensor-smoke" => "sensor-cloud",
- "share-alt" => "share-nodes",
- "share-alt-square" => "square-share-nodes",
- "share-square" => "share-from-square",
- "shield-alt" => "shield-halved",
- "shipping-fast" => "truck-fast",
- "shipping-timed" => "truck-clock",
- "shopping-bag" => "bag-shopping",
- "shopping-basket" => "basket-shopping",
- "shopping-cart" => "cart-shopping",
- "shuttle-van" => "van-shuttle",
- "sign" => "sign-hanging",
- "sign-in" => "arrow-right-to-bracket",
- "sign-in-alt" => "right-to-bracket",
- "sign-language" => "hands",
- "sign-out" => "arrow-right-from-bracket",
- "sign-out-alt" => "right-from-bracket",
- "signal-1" => "signal-weak",
- "signal-2" => "signal-fair",
- "signal-3" => "signal-good",
- "signal-4" => "signal-strong",
- "signal-alt" => "signal-bars",
- "signal-alt-1" => "signal-bars-weak",
- "signal-alt-2" => "signal-bars-fair",
- "signal-alt-3" => "signal-bars-good",
- "signal-alt-slash" => "signal-bars-slash",
- "skating" => "person-skating",
- "ski-jump" => "person-ski-jumping",
- "ski-lift" => "person-ski-lift",
- "skiing" => "person-skiing",
- "skiing-nordic" => "person-skiing-nordic",
- "slack-hash" => "slack",
- "sledding" => "person-sledding",
- "sliders-h" => "sliders",
- "sliders-h-square" => "square-sliders",
- "sliders-v" => "sliders-up",
- "sliders-v-square" => "square-sliders-vertical",
- "smile" => "face-smile",
- "smile-beam" => "face-smile-beam",
- "smile-plus" => "face-smile-plus",
- "smile-wink" => "face-smile-wink",
- "smoking-ban" => "ban-smoking",
- "sms" => "comment-sms",
- "snapchat-ghost" => "snapchat",
- "snowboarding" => "person-snowboarding",
- "snowmobile" => "person-snowmobiling",
- "sort-alpha-down" => "arrow-down-a-z",
- "sort-alpha-down-alt" => "arrow-down-z-a",
- "sort-alpha-up" => "arrow-up-a-z",
- "sort-alpha-up-alt" => "arrow-up-z-a",
- "sort-alt" => "arrow-down-arrow-up",
- "sort-amount-down" => "arrow-down-wide-short",
- "sort-amount-down-alt" => "arrow-down-short-wide",
- "sort-amount-up" => "arrow-up-wide-short",
- "sort-amount-up-alt" => "arrow-up-short-wide",
- "sort-circle" => "circle-sort",
- "sort-circle-down" => "circle-sort-down",
- "sort-circle-up" => "circle-sort-up",
- "sort-numeric-down" => "arrow-down-1-9",
- "sort-numeric-down-alt" => "arrow-down-9-1",
- "sort-numeric-up" => "arrow-up-1-9",
- "sort-numeric-up-alt" => "arrow-up-9-1",
- "sort-shapes-down" => "arrow-down-triangle-square",
- "sort-shapes-down-alt" => "arrow-down-square-triangle",
- "sort-shapes-up" => "arrow-up-triangle-square",
- "sort-shapes-up-alt" => "arrow-up-square-triangle",
- "sort-size-down" => "arrow-down-big-small",
- "sort-size-down-alt" => "arrow-down-small-big",
- "sort-size-up" => "arrow-up-big-small",
- "sort-size-up-alt" => "arrow-up-small-big",
- "soup" => "bowl-hot",
- "space-shuttle" => "shuttle-space",
- "space-station-moon-alt" => "space-station-moon-construction",
- "square-root-alt" => "square-root-variable",
- "star-half-alt" => "star-half-stroke",
- "starfighter-alt" => "starfighter-twin-ion-engine",
- "step-backward" => "backward-step",
- "step-forward" => "forward-step",
- "sticky-note" => "note-sticky",
- "stop-circle" => "circle-stop",
- "store-alt" => "shop",
- "store-alt-slash" => "shop-slash",
- "stream" => "bars-staggered",
- "subway" => "train-subway",
- "surprise" => "face-surprise",
- "swimmer" => "person-swimming",
- "swimming-pool" => "water-ladder",
- "sync" => "arrows-rotate",
- "sync-alt" => "rotate",
- "table-tennis" => "table-tennis-paddle-ball",
- "tablet-alt" => "tablet-screen-button",
- "tablet-android" => "tablet",
- "tablet-android-alt" => "tablet-screen",
- "tachometer" => "gauge-simple",
- "tachometer-alt" => "gauge",
- "tachometer-alt-average" => "gauge-med",
- "tachometer-alt-fast" => "gauge",
- "tachometer-alt-fastest" => "gauge-max",
- "tachometer-alt-slow" => "gauge-low",
- "tachometer-alt-slowest" => "gauge-min",
- "tachometer-average" => "gauge-simple-med",
- "tachometer-fast" => "gauge-simple",
- "tachometer-fastest" => "gauge-simple-max",
- "tachometer-slow" => "gauge-simple-low",
- "tachometer-slowest" => "gauge-simple-min",
- "tanakh" => "book-tanakh",
- "tasks" => "list-check",
- "tasks-alt" => "bars-progress",
- "telegram-plane" => "telegram",
- "temperature-down" => "temperature-arrow-down",
- "temperature-frigid" => "temperature-snow",
- "temperature-hot" => "temperature-sun",
- "temperature-up" => "temperature-arrow-up",
- "tenge" => "tenge-sign",
- "th" => "table-cells",
- "th-large" => "table-cells-large",
- "th-list" => "table-list",
- "theater-masks" => "masks-theater",
- "thermometer-empty" => "temperature-empty",
- "thermometer-full" => "temperature-full",
- "thermometer-half" => "temperature-half",
- "thermometer-quarter" => "temperature-quarter",
- "thermometer-three-quarters" => "temperature-three-quarters",
- "thumb-tack" => "thumbtack",
- "thunderstorm" => "cloud-bolt",
- "thunderstorm-moon" => "cloud-bolt-moon",
- "thunderstorm-sun" => "cloud-bolt-sun",
- "ticket-alt" => "ticket-simple",
- "times" => "xmark",
- "times-circle" => "circle-xmark",
- "times-hexagon" => "hexagon-xmark",
- "times-octagon" => "octagon-xmark",
- "times-square" => "square-xmark",
- "tint" => "droplet",
- "tint-slash" => "droplet-slash",
- "tired" => "face-tired",
- "toilet-paper-alt" => "toilet-paper-blank",
- "tombstone-alt" => "tombstone-blank",
- "tools" => "screwdriver-wrench",
- "torah" => "scroll-torah",
- "tram" => "train-tram",
- "transgender-alt" => "transgender",
- "trash-alt" => "trash-can",
- "trash-restore" => "trash-arrow-up",
- "trash-restore-alt" => "trash-can-arrow-up",
- "trash-undo-alt" => "trash-can-undo",
- "tree-alt" => "tree-deciduous",
- "triangle-music" => "triangle-instrument",
- "trophy-alt" => "trophy-star",
- "truck-couch" => "truck-ramp-couch",
- "truck-loading" => "truck-ramp-box",
- "tshirt" => "shirt",
- "tv-alt" => "tv",
- "undo" => "arrow-rotate-left",
- "undo-alt" => "rotate-left",
- "university" => "building-columns",
- "unlink" => "link-slash",
- "unlock-alt" => "unlock-keyhole",
- "usd-circle" => "circle-dollar",
- "usd-square" => "square-dollar",
- "user-alt" => "user-large",
- "user-alt-slash" => "user-large-slash",
- "user-chart" => "chart-user",
- "user-circle" => "circle-user",
- "user-cog" => "user-gear",
- "user-edit" => "user-pen",
- "user-friends" => "user-group",
- "user-hard-hat" => "user-helmet-safety",
- "user-md" => "user-doctor",
- "user-md-chat" => "user-doctor-message",
- "user-times" => "user-xmark",
- "users-class" => "screen-users",
- "users-cog" => "users-gear",
- "users-crown" => "user-group-crown",
- "utensil-fork" => "fork",
- "utensil-knife" => "knife",
- "utensil-spoon" => "spoon",
- "utensils-alt" => "fork-knife",
- "vhs" => "cassette-vhs",
- "volleyball-ball" => "volleyball",
- "volume-down" => "volume-low",
- "volume-mute" => "volume-xmark",
- "volume-up" => "volume-high",
- "vote-nay" => "xmark-to-slot",
- "vote-yea" => "check-to-slot",
- "walking" => "person-walking",
- "warehouse-alt" => "warehouse-full",
- "washer" => "washing-machine",
- "water-lower" => "water-arrow-down",
- "water-rise" => "water-arrow-up",
- "waveform-path" => "waveform-lines",
- "webcam" => "camera-web",
- "webcam-slash" => "camera-web-slash",
- "weight" => "weight-scale",
- "wifi-1" => "wifi-weak",
- "wifi-2" => "wifi-fair",
- "window-alt" => "window-flip",
- "window-close" => "rectangle-xmark",
- "wine-glass-alt" => "wine-glass-empty",
- }
- SVG_ICON_SUBSET_SETTING_NAME = "svg_icon_subset"
-
def up
- migrate_svg_icon_subset_site_setting
- migrate_icon_names
+ # no-op - reimplemented in 20241204085540_remap_to_fa6_icon_names.rb
end
def down
raise ActiveRecord::IrreversibleMigration
end
-
- def migrate_svg_icon_subset_site_setting
- # name is unique across site settings
- setting =
- execute(
- "SELECT value FROM site_settings WHERE name = '#{SVG_ICON_SUBSET_SETTING_NAME}'",
- ).first
- return if !setting
-
- original_setting_value = setting["value"]
-
- new_setting_value =
- original_setting_value
- .split("|")
- .map do |icon_name|
- prefix = nil
-
- case icon_name
- when /^fab-/
- prefix = "fab"
- lookup_name = icon_name.sub(/^fab-/, "")
- when /^far-/
- prefix = "far"
- lookup_name = icon_name.sub(/^far-/, "")
- when /^fab fa-/
- prefix = "fab"
- lookup_name = icon_name.sub(/^fab fa-/, "")
- when /^far fa-/
- prefix = "far"
- lookup_name = icon_name.sub(/^far fa-/, "")
- when /^fas fa-/
- lookup_name = icon_name.sub(/^fas fa-/, "")
- when /^fa-/
- lookup_name = icon_name.sub(/^fa-/, "")
- else
- lookup_name = icon_name
- end
-
- new_icon_name = FA5_REMAPS[lookup_name] || lookup_name
- new_icon_name = "#{prefix}-#{new_icon_name}" if prefix
- new_icon_name
- end
- .join("|")
-
- return if new_setting_value == original_setting_value
-
- execute(
- "UPDATE site_settings SET value = '#{new_setting_value}' WHERE name = '#{SVG_ICON_SUBSET_SETTING_NAME}'",
- )
- end
-
- def migrate_icon_names
- mappings = FA5_REMAPS.map { |from, to| "('#{from}', '#{to}')" }.join(", ")
-
- tables_to_update = {
- groups: "flair_icon",
- post_action_types: "icon",
- badges: "icon",
- sidebar_urls: "icon",
- directory_columns: "icon",
- }
-
- tables_to_update.each { |table_name, column_name| execute <<~SQL }
- WITH remaps AS (
- SELECT from_icon, to_icon FROM (VALUES #{mappings}) AS mapping(from_icon, to_icon)
- )
- UPDATE #{table_name}
- SET #{column_name} =
- CASE
- WHEN #{column_name} LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)
- WHEN #{column_name} LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)
- WHEN #{column_name} LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)
- WHEN #{column_name} LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)
- ELSE remaps.to_icon
- END
- FROM remaps
- WHERE #{column_name} = remaps.from_icon
- OR #{column_name} = CONCAT('fa-', remaps.from_icon)
- OR #{column_name} = CONCAT('far-', remaps.from_icon)
- OR #{column_name} = CONCAT('fab-', remaps.from_icon)
- OR #{column_name} = CONCAT('far fa-', remaps.from_icon)
- OR #{column_name} = CONCAT('fab fa-', remaps.from_icon)
- OR #{column_name} = CONCAT('fas fa-', remaps.from_icon);
- SQL
- end
end
diff --git a/db/migrate/20241204085540_remap_to_fa6_icon_names.rb b/db/migrate/20241204085540_remap_to_fa6_icon_names.rb
new file mode 100644
index 00000000000..ca50024797a
--- /dev/null
+++ b/db/migrate/20241204085540_remap_to_fa6_icon_names.rb
@@ -0,0 +1,794 @@
+# frozen_string_literal: true
+class RemapToFa6IconNames < ActiveRecord::Migration[7.2]
+ FA5_REMAPS = {
+ "adjust" => "circle-half-stroke",
+ "air-freshener" => "spray-can-sparkles",
+ "alien-monster" => "alien-8bit",
+ "allergies" => "hand-dots",
+ "ambulance" => "truck-medical",
+ "american-sign-language-interpreting" => "hands-asl-interpreting",
+ "analytics" => "chart-mixed",
+ "angle-double-down" => "angles-down",
+ "angle-double-left" => "angles-left",
+ "angle-double-right" => "angles-right",
+ "angle-double-up" => "angles-up",
+ "angry" => "face-angry",
+ "apple-alt" => "apple-whole",
+ "apple-crate" => "crate-apple",
+ "archive" => "box-archive",
+ "arrow-alt-circle-down" => "circle-down",
+ "arrow-alt-circle-left" => "circle-left",
+ "arrow-alt-circle-right" => "circle-right",
+ "arrow-alt-circle-up" => "circle-up",
+ "arrow-alt-down" => "down",
+ "arrow-alt-from-bottom" => "up-from-line",
+ "arrow-alt-from-left" => "right-from-line",
+ "arrow-alt-from-right" => "left-from-line",
+ "arrow-alt-from-top" => "down-from-line",
+ "arrow-alt-left" => "left",
+ "arrow-alt-right" => "right",
+ "arrow-alt-square-down" => "square-down",
+ "arrow-alt-square-left" => "square-left",
+ "arrow-alt-square-right" => "square-right",
+ "arrow-alt-square-up" => "square-up",
+ "arrow-alt-to-bottom" => "down-to-line",
+ "arrow-alt-to-left" => "left-to-line",
+ "arrow-alt-to-right" => "right-to-line",
+ "arrow-alt-to-top" => "up-to-line",
+ "arrow-alt-up" => "up",
+ "arrow-circle-down" => "circle-arrow-down",
+ "arrow-circle-left" => "circle-arrow-left",
+ "arrow-circle-right" => "circle-arrow-right",
+ "arrow-circle-up" => "circle-arrow-up",
+ "arrow-from-bottom" => "arrow-up-from-line",
+ "arrow-from-left" => "arrow-right-from-line",
+ "arrow-from-right" => "arrow-left-from-line",
+ "arrow-from-top" => "arrow-down-from-line",
+ "arrow-square-down" => "square-arrow-down",
+ "arrow-square-left" => "square-arrow-left",
+ "arrow-square-right" => "square-arrow-right",
+ "arrow-square-up" => "square-arrow-up",
+ "arrow-to-bottom" => "arrow-down-to-line",
+ "arrow-to-left" => "arrow-left-to-line",
+ "arrow-to-right" => "arrow-right-to-line",
+ "arrow-to-top" => "arrow-up-to-line",
+ "arrows" => "arrows-up-down-left-right",
+ "arrows-alt" => "up-down-left-right",
+ "arrows-alt-h" => "left-right",
+ "arrows-alt-v" => "up-down",
+ "arrows-h" => "arrows-left-right",
+ "arrows-v" => "arrows-up-down",
+ "assistive-listening-systems" => "ear-listen",
+ "atlas" => "book-atlas",
+ "atom-alt" => "atom-simple",
+ "backspace" => "delete-left",
+ "balance-scale" => "scale-balanced",
+ "balance-scale-left" => "scale-unbalanced",
+ "balance-scale-right" => "scale-unbalanced-flip",
+ "band-aid" => "bandage",
+ "barcode-alt" => "rectangle-barcode",
+ "baseball-ball" => "baseball",
+ "basketball-ball" => "basketball",
+ "bed-alt" => "bed-front",
+ "beer" => "beer-mug-empty",
+ "betamax" => "cassette-betamax",
+ "bible" => "book-bible",
+ "biking" => "person-biking",
+ "biking-mountain" => "person-biking-mountain",
+ "birthday-cake" => "cake-candles",
+ "blind" => "person-walking-with-cane",
+ "book-alt" => "book-blank",
+ "book-dead" => "book-skull",
+ "book-reader" => "book-open-reader",
+ "book-spells" => "book-sparkles",
+ "border-style" => "border-top-left",
+ "border-style-alt" => "border-bottom-right",
+ "box-alt" => "box-taped",
+ "box-fragile" => "square-fragile",
+ "box-full" => "box-open-full",
+ "box-up" => "square-this-way-up",
+ "box-usd" => "box-dollar",
+ "boxes" => "boxes-stacked",
+ "boxes-alt" => "boxes-stacked",
+ "brackets" => "brackets-square",
+ "broadcast-tower" => "tower-broadcast",
+ "burn" => "fire-flame-simple",
+ "bus-alt" => "bus-simple",
+ "calculator-alt" => "calculator-simple",
+ "calendar-alt" => "calendar-days",
+ "calendar-edit" => "calendar-pen",
+ "calendar-times" => "calendar-xmark",
+ "camera-alt" => "camera",
+ "camera-home" => "camera-security",
+ "car-alt" => "car-rear",
+ "car-crash" => "car-burst",
+ "car-mechanic" => "car-wrench",
+ "caravan-alt" => "caravan-simple",
+ "caret-circle-down" => "circle-caret-down",
+ "caret-circle-left" => "circle-caret-left",
+ "caret-circle-right" => "circle-caret-right",
+ "caret-circle-up" => "circle-caret-up",
+ "caret-square-down" => "square-caret-down",
+ "caret-square-left" => "square-caret-left",
+ "caret-square-right" => "square-caret-right",
+ "caret-square-up" => "square-caret-up",
+ "cctv" => "camera-cctv",
+ "chalkboard-teacher" => "chalkboard-user",
+ "chart-pie-alt" => "chart-pie-simple",
+ "check-circle" => "circle-check",
+ "check-square" => "square-check",
+ "cheeseburger" => "burger-cheese",
+ "chess-bishop-alt" => "chess-bishop-piece",
+ "chess-clock-alt" => "chess-clock-flip",
+ "chess-king-alt" => "chess-king-piece",
+ "chess-knight-alt" => "chess-knight-piece",
+ "chess-pawn-alt" => "chess-pawn-piece",
+ "chess-queen-alt" => "chess-queen-piece",
+ "chess-rook-alt" => "chess-rook-piece",
+ "chevron-circle-down" => "circle-chevron-down",
+ "chevron-circle-left" => "circle-chevron-left",
+ "chevron-circle-right" => "circle-chevron-right",
+ "chevron-circle-up" => "circle-chevron-up",
+ "chevron-double-down" => "chevrons-down",
+ "chevron-double-left" => "chevrons-left",
+ "chevron-double-right" => "chevrons-right",
+ "chevron-double-up" => "chevrons-up",
+ "chevron-square-down" => "square-chevron-down",
+ "chevron-square-left" => "square-chevron-left",
+ "chevron-square-right" => "square-chevron-right",
+ "chevron-square-up" => "square-chevron-up",
+ "clinic-medical" => "house-chimney-medical",
+ "cloud-download" => "cloud-arrow-down",
+ "cloud-download-alt" => "cloud-arrow-down",
+ "cloud-upload" => "cloud-arrow-up",
+ "cloud-upload-alt" => "cloud-arrow-up",
+ "cocktail" => "martini-glass-citrus",
+ "coffee" => "mug-saucer",
+ "coffee-togo" => "cup-togo",
+ "cog" => "gear",
+ "cogs" => "gears",
+ "columns" => "table-columns",
+ "comment-alt" => "message",
+ "comment-alt-check" => "message-check",
+ "comment-alt-dollar" => "message-dollar",
+ "comment-alt-dots" => "message-dots",
+ "comment-alt-edit" => "message-pen",
+ "comment-alt-exclamation" => "message-exclamation",
+ "comment-alt-lines" => "message-lines",
+ "comment-alt-medical" => "message-medical",
+ "comment-alt-minus" => "message-minus",
+ "comment-alt-music" => "message-music",
+ "comment-alt-plus" => "message-plus",
+ "comment-alt-slash" => "message-slash",
+ "comment-alt-smile" => "message-smile",
+ "comment-alt-times" => "message-xmark",
+ "comment-edit" => "comment-pen",
+ "comment-times" => "comment-xmark",
+ "comments-alt" => "messages",
+ "comments-alt-dollar" => "messages-dollar",
+ "compress-alt" => "down-left-and-up-right-to-center",
+ "compress-arrows-alt" => "minimize",
+ "concierge-bell" => "bell-concierge",
+ "construction" => "triangle-person-digging",
+ "conveyor-belt-alt" => "conveyor-belt-boxes",
+ "cowbell-more" => "cowbell-circle-plus",
+ "cricket" => "cricket-bat-ball",
+ "crop-alt" => "crop-simple",
+ "curling" => "curling-stone",
+ "cut" => "scissors",
+ "deaf" => "ear-deaf",
+ "debug" => "ban-bug",
+ "desktop-alt" => "desktop",
+ "dewpoint" => "droplet-degree",
+ "diagnoses" => "person-dots-from-line",
+ "digging" => "person-digging",
+ "digital-tachograph" => "tachograph-digital",
+ "directions" => "diamond-turn-right",
+ "dizzy" => "face-dizzy",
+ "dolly-flatbed" => "cart-flatbed",
+ "dolly-flatbed-alt" => "cart-flatbed-boxes",
+ "dolly-flatbed-empty" => "cart-flatbed-empty",
+ "donate" => "circle-dollar-to-slot",
+ "dot-circle" => "circle-dot",
+ "drafting-compass" => "compass-drafting",
+ "drone-alt" => "drone-front",
+ "dryer-alt" => "dryer-heat",
+ "eclipse-alt" => "moon-over-sun",
+ "edit" => "pen-to-square",
+ "ellipsis-h" => "ellipsis",
+ "ellipsis-h-alt" => "ellipsis-stroke",
+ "ellipsis-v" => "ellipsis-vertical",
+ "ellipsis-v-alt" => "ellipsis-stroke-vertical",
+ "envelope-square" => "square-envelope",
+ "exchange" => "arrow-right-arrow-left",
+ "exchange-alt" => "right-left",
+ "exclamation-circle" => "circle-exclamation",
+ "exclamation-square" => "square-exclamation",
+ "exclamation-triangle" => "triangle-exclamation",
+ "expand-alt" => "up-right-and-down-left-from-center",
+ "expand-arrows" => "arrows-maximize",
+ "expand-arrows-alt" => "maximize",
+ "external-link" => "arrow-up-right-from-square",
+ "external-link-alt" => "up-right-from-square",
+ "external-link-square" => "square-arrow-up-right",
+ "external-link-square-alt" => "square-up-right",
+ "eyedropper" => "eye-dropper",
+ "fast-backward" => "backward-fast",
+ "fast-forward" => "forward-fast",
+ "feather-alt" => "feather-pointed",
+ "female" => "person-dress",
+ "field-hockey" => "field-hockey-stick-ball",
+ "fighter-jet" => "jet-fighter",
+ "file-alt" => "file-lines",
+ "file-archive" => "file-zipper",
+ "file-chart-line" => "file-chart-column",
+ "file-download" => "file-arrow-down",
+ "file-edit" => "file-pen",
+ "file-medical-alt" => "file-waveform",
+ "file-search" => "file-magnifying-glass",
+ "file-times" => "file-xmark",
+ "file-upload" => "file-arrow-up",
+ "film-alt" => "film-simple",
+ "fire-alt" => "fire-flame-curved",
+ "first-aid" => "kit-medical",
+ "fist-raised" => "hand-fist",
+ "flag-alt" => "flag-swallowtail",
+ "flame" => "fire-flame",
+ "flask-poison" => "flask-round-poison",
+ "flask-potion" => "flask-round-potion",
+ "flushed" => "face-flushed",
+ "fog" => "cloud-fog",
+ "folder-download" => "folder-arrow-down",
+ "folder-times" => "folder-xmark",
+ "folder-upload" => "folder-arrow-up",
+ "font-awesome-alt" => "square-font-awesome-stroke",
+ "font-awesome-flag" => "font-awesome",
+ "font-awesome-logo-full" => "font-awesome",
+ "football-ball" => "football",
+ "fragile" => "wine-glass-crack",
+ "frosty-head" => "snowman-head",
+ "frown" => "face-frown",
+ "frown-open" => "face-frown-open",
+ "funnel-dollar" => "filter-circle-dollar",
+ "game-board-alt" => "game-board-simple",
+ "gamepad-alt" => "gamepad-modern",
+ "glass-champagne" => "champagne-glass",
+ "glass-cheers" => "champagne-glasses",
+ "glass-martini" => "martini-glass-empty",
+ "glass-martini-alt" => "martini-glass",
+ "glass-whiskey" => "whiskey-glass",
+ "glass-whiskey-rocks" => "whiskey-glass-ice",
+ "glasses-alt" => "glasses-round",
+ "globe-africa" => "earth-africa",
+ "globe-americas" => "earth-americas",
+ "globe-asia" => "earth-asia",
+ "globe-europe" => "earth-europe",
+ "golf-ball" => "golf-ball-tee",
+ "grimace" => "face-grimace",
+ "grin" => "face-grin",
+ "grin-alt" => "face-grin-wide",
+ "grin-beam" => "face-grin-beam",
+ "grin-beam-sweat" => "face-grin-beam-sweat",
+ "grin-hearts" => "face-grin-hearts",
+ "grin-squint" => "face-grin-squint",
+ "grin-squint-tears" => "face-grin-squint-tears",
+ "grin-stars" => "face-grin-stars",
+ "grin-tears" => "face-grin-tears",
+ "grin-tongue" => "face-grin-tongue",
+ "grin-tongue-squint" => "face-grin-tongue-squint",
+ "grin-tongue-wink" => "face-grin-tongue-wink",
+ "grin-wink" => "face-grin-wink",
+ "grip-horizontal" => "grip",
+ "h-square" => "square-h",
+ "hamburger" => "burger",
+ "hand-holding-usd" => "hand-holding-dollar",
+ "hand-holding-water" => "hand-holding-droplet",
+ "hand-paper" => "hand",
+ "hand-receiving" => "hands-holding-diamond",
+ "hand-rock" => "hand-back-fist",
+ "hands-heart" => "hands-holding-heart",
+ "hands-helping" => "handshake-angle",
+ "hands-usd" => "hands-holding-dollar",
+ "hands-wash" => "hands-bubbles",
+ "handshake-alt" => "handshake-simple",
+ "handshake-alt-slash" => "handshake-simple-slash",
+ "hard-hat" => "helmet-safety",
+ "hdd" => "hard-drive",
+ "head-vr" => "head-side-goggles",
+ "headphones-alt" => "headphones-simple",
+ "heart-broken" => "heart-crack",
+ "heart-circle" => "circle-heart",
+ "heart-rate" => "wave-pulse",
+ "heart-square" => "square-heart",
+ "heartbeat" => "heart-pulse",
+ "hiking" => "person-hiking",
+ "history" => "clock-rotate-left",
+ "home" => "house",
+ "home-alt" => "house",
+ "home-heart" => "house-heart",
+ "home-lg" => "house-chimney",
+ "home-lg-alt" => "house",
+ "hospital-alt" => "hospital",
+ "hospital-symbol" => "circle-h",
+ "hot-tub" => "hot-tub-person",
+ "hourglass-half" => "hourglass",
+ "house-damage" => "house-chimney-crack",
+ "house-leave" => "house-person-leave",
+ "house-return" => "house-person-return",
+ "hryvnia" => "hryvnia-sign",
+ "humidity" => "droplet-percent",
+ "icons-alt" => "symbols",
+ "id-card-alt" => "id-card-clip",
+ "industry-alt" => "industry-windows",
+ "info-circle" => "circle-info",
+ "info-square" => "square-info",
+ "innosoft" => "42-group",
+ "inventory" => "shelves",
+ "journal-whills" => "book-journal-whills",
+ "kiss" => "face-kiss",
+ "kiss-beam" => "face-kiss-beam",
+ "kiss-wink-heart" => "face-kiss-wink-heart",
+ "landmark-alt" => "landmark-dome",
+ "laptop-house" => "house-laptop",
+ "laugh" => "face-laugh",
+ "laugh-beam" => "face-laugh-beam",
+ "laugh-squint" => "face-laugh-squint",
+ "laugh-wink" => "face-laugh-wink",
+ "level-down" => "arrow-turn-down",
+ "level-down-alt" => "turn-down",
+ "level-up" => "arrow-turn-up",
+ "level-up-alt" => "turn-up",
+ "list-alt" => "rectangle-list",
+ "location" => "location-crosshairs",
+ "location-circle" => "circle-location-arrow",
+ "location-slash" => "location-crosshairs-slash",
+ "lock-alt" => "lock-keyhole",
+ "lock-open-alt" => "lock-keyhole-open",
+ "long-arrow-alt-down" => "down-long",
+ "long-arrow-alt-left" => "left-long",
+ "long-arrow-alt-right" => "right-long",
+ "long-arrow-alt-up" => "up-long",
+ "long-arrow-down" => "arrow-down-long",
+ "long-arrow-left" => "arrow-left-long",
+ "long-arrow-right" => "arrow-right-long",
+ "long-arrow-up" => "arrow-up-long",
+ "low-vision" => "eye-low-vision",
+ "luchador" => "luchador-mask",
+ "luggage-cart" => "cart-flatbed-suitcase",
+ "magic" => "wand-magic",
+ "mail-bulk" => "envelopes-bulk",
+ "male" => "person",
+ "map-marked" => "map-location",
+ "map-marked-alt" => "map-location-dot",
+ "map-marker" => "location-pin",
+ "map-marker-alt" => "location-dot",
+ "map-marker-alt-slash" => "location-dot-slash",
+ "map-marker-check" => "location-check",
+ "map-marker-edit" => "location-pen",
+ "map-marker-exclamation" => "location-exclamation",
+ "map-marker-minus" => "location-minus",
+ "map-marker-plus" => "location-plus",
+ "map-marker-question" => "location-question",
+ "map-marker-slash" => "location-pin-slash",
+ "map-marker-smile" => "location-smile",
+ "map-marker-times" => "location-xmark",
+ "map-signs" => "signs-post",
+ "mars-stroke-h" => "mars-stroke-right",
+ "mars-stroke-v" => "mars-stroke-up",
+ "medium-m" => "medium",
+ "medkit" => "suitcase-medical",
+ "meh" => "face-meh",
+ "meh-blank" => "face-meh-blank",
+ "meh-rolling-eyes" => "face-rolling-eyes",
+ "microphone-alt" => "microphone-lines",
+ "microphone-alt-slash" => "microphone-lines-slash",
+ "mind-share" => "brain-arrow-curved-right",
+ "minus-circle" => "circle-minus",
+ "minus-hexagon" => "hexagon-minus",
+ "minus-octagon" => "octagon-minus",
+ "minus-square" => "square-minus",
+ "mobile-alt" => "mobile-screen-button",
+ "mobile-android" => "mobile",
+ "mobile-android-alt" => "mobile-screen",
+ "money-bill-alt" => "money-bill-1",
+ "money-bill-wave-alt" => "money-bill-1-wave",
+ "money-check-alt" => "money-check-dollar",
+ "money-check-edit" => "money-check-pen",
+ "money-check-edit-alt" => "money-check-dollar-pen",
+ "monitor-heart-rate" => "monitor-waveform",
+ "mouse" => "computer-mouse",
+ "mouse-alt" => "computer-mouse-scrollwheel",
+ "mouse-pointer" => "arrow-pointer",
+ "music-alt" => "music-note",
+ "music-alt-slash" => "music-note-slash",
+ "oil-temp" => "oil-temperature",
+ "page-break" => "file-dashed-line",
+ "paint-brush" => "paintbrush",
+ "paint-brush-alt" => "paintbrush-fine",
+ "paint-brush-fine" => "paintbrush-fine",
+ "pallet-alt" => "pallet-boxes",
+ "paragraph-rtl" => "paragraph-left",
+ "parking" => "square-parking",
+ "parking-circle" => "circle-parking",
+ "parking-circle-slash" => "ban-parking",
+ "parking-slash" => "square-parking-slash",
+ "pastafarianism" => "spaghetti-monster-flying",
+ "pause-circle" => "circle-pause",
+ "paw-alt" => "paw-simple",
+ "pen-alt" => "pen-clip",
+ "pen-square" => "square-pen",
+ "pencil-alt" => "pencil",
+ "pencil-paintbrush" => "pen-paintbrush",
+ "pencil-ruler" => "pen-ruler",
+ "pennant" => "flag-pennant",
+ "people-arrows" => "people-arrows-left-right",
+ "people-carry" => "people-carry-box",
+ "percentage" => "percent",
+ "person-carry" => "person-carry-box",
+ "phone-alt" => "phone-flip",
+ "phone-laptop" => "laptop-mobile",
+ "phone-square" => "square-phone",
+ "phone-square-alt" => "square-phone-flip",
+ "photo-video" => "photo-film",
+ "plane-alt" => "plane-engines",
+ "play-circle" => "circle-play",
+ "plus-circle" => "circle-plus",
+ "plus-hexagon" => "hexagon-plus",
+ "plus-octagon" => "octagon-plus",
+ "plus-square" => "square-plus",
+ "poll" => "square-poll-vertical",
+ "poll-h" => "square-poll-horizontal",
+ "portal-enter" => "person-to-portal",
+ "portal-exit" => "person-from-portal",
+ "portrait" => "image-portrait",
+ "pound-sign" => "sterling-sign",
+ "pray" => "person-praying",
+ "praying-hands" => "hands-praying",
+ "prescription-bottle-alt" => "prescription-bottle-medical",
+ "presentation" => "presentation-screen",
+ "print-search" => "print-magnifying-glass",
+ "procedures" => "bed-pulse",
+ "project-diagram" => "diagram-project",
+ "question-circle" => "circle-question",
+ "question-square" => "square-question",
+ "quran" => "book-quran",
+ "rabbit-fast" => "rabbit-running",
+ "radiation-alt" => "circle-radiation",
+ "radio-alt" => "radio-tuner",
+ "random" => "shuffle",
+ "rectangle-landscape" => "rectangle",
+ "rectangle-portrait" => "rectangle-vertical",
+ "redo" => "arrow-rotate-right",
+ "redo-alt" => "rotate-right",
+ "remove-format" => "text-slash",
+ "repeat-1-alt" => "arrows-repeat-1",
+ "repeat-alt" => "arrows-repeat",
+ "retweet-alt" => "arrows-retweet",
+ "rss-square" => "square-rss",
+ "running" => "person-running",
+ "sad-cry" => "face-sad-cry",
+ "sad-tear" => "face-sad-tear",
+ "save" => "floppy-disk",
+ "sax-hot" => "saxophone-fire",
+ "scalpel-path" => "scalpel-line-dashed",
+ "scanner-image" => "scanner",
+ "search" => "magnifying-glass",
+ "search-dollar" => "magnifying-glass-dollar",
+ "search-location" => "magnifying-glass-location",
+ "search-minus" => "magnifying-glass-minus",
+ "search-plus" => "magnifying-glass-plus",
+ "sensor-alert" => "sensor-triangle-exclamation",
+ "sensor-smoke" => "sensor-cloud",
+ "share-alt" => "share-nodes",
+ "share-alt-square" => "square-share-nodes",
+ "share-square" => "share-from-square",
+ "shield-alt" => "shield-halved",
+ "shipping-fast" => "truck-fast",
+ "shipping-timed" => "truck-clock",
+ "shopping-bag" => "bag-shopping",
+ "shopping-basket" => "basket-shopping",
+ "shopping-cart" => "cart-shopping",
+ "shuttle-van" => "van-shuttle",
+ "sign" => "sign-hanging",
+ "sign-in" => "arrow-right-to-bracket",
+ "sign-in-alt" => "right-to-bracket",
+ "sign-language" => "hands",
+ "sign-out" => "arrow-right-from-bracket",
+ "sign-out-alt" => "right-from-bracket",
+ "signal-1" => "signal-weak",
+ "signal-2" => "signal-fair",
+ "signal-3" => "signal-good",
+ "signal-4" => "signal-strong",
+ "signal-alt" => "signal-bars",
+ "signal-alt-1" => "signal-bars-weak",
+ "signal-alt-2" => "signal-bars-fair",
+ "signal-alt-3" => "signal-bars-good",
+ "signal-alt-slash" => "signal-bars-slash",
+ "skating" => "person-skating",
+ "ski-jump" => "person-ski-jumping",
+ "ski-lift" => "person-ski-lift",
+ "skiing" => "person-skiing",
+ "skiing-nordic" => "person-skiing-nordic",
+ "slack-hash" => "slack",
+ "sledding" => "person-sledding",
+ "sliders-h" => "sliders",
+ "sliders-h-square" => "square-sliders",
+ "sliders-v" => "sliders-up",
+ "sliders-v-square" => "square-sliders-vertical",
+ "smile" => "face-smile",
+ "smile-beam" => "face-smile-beam",
+ "smile-plus" => "face-smile-plus",
+ "smile-wink" => "face-smile-wink",
+ "smoking-ban" => "ban-smoking",
+ "sms" => "comment-sms",
+ "snapchat-ghost" => "snapchat",
+ "snowboarding" => "person-snowboarding",
+ "snowmobile" => "person-snowmobiling",
+ "sort-alpha-down" => "arrow-down-a-z",
+ "sort-alpha-down-alt" => "arrow-down-z-a",
+ "sort-alpha-up" => "arrow-up-a-z",
+ "sort-alpha-up-alt" => "arrow-up-z-a",
+ "sort-alt" => "arrow-down-arrow-up",
+ "sort-amount-down" => "arrow-down-wide-short",
+ "sort-amount-down-alt" => "arrow-down-short-wide",
+ "sort-amount-up" => "arrow-up-wide-short",
+ "sort-amount-up-alt" => "arrow-up-short-wide",
+ "sort-circle" => "circle-sort",
+ "sort-circle-down" => "circle-sort-down",
+ "sort-circle-up" => "circle-sort-up",
+ "sort-numeric-down" => "arrow-down-1-9",
+ "sort-numeric-down-alt" => "arrow-down-9-1",
+ "sort-numeric-up" => "arrow-up-1-9",
+ "sort-numeric-up-alt" => "arrow-up-9-1",
+ "sort-shapes-down" => "arrow-down-triangle-square",
+ "sort-shapes-down-alt" => "arrow-down-square-triangle",
+ "sort-shapes-up" => "arrow-up-triangle-square",
+ "sort-shapes-up-alt" => "arrow-up-square-triangle",
+ "sort-size-down" => "arrow-down-big-small",
+ "sort-size-down-alt" => "arrow-down-small-big",
+ "sort-size-up" => "arrow-up-big-small",
+ "sort-size-up-alt" => "arrow-up-small-big",
+ "soup" => "bowl-hot",
+ "space-shuttle" => "shuttle-space",
+ "space-station-moon-alt" => "space-station-moon-construction",
+ "square-root-alt" => "square-root-variable",
+ "star-half-alt" => "star-half-stroke",
+ "starfighter-alt" => "starfighter-twin-ion-engine",
+ "step-backward" => "backward-step",
+ "step-forward" => "forward-step",
+ "sticky-note" => "note-sticky",
+ "stop-circle" => "circle-stop",
+ "store-alt" => "shop",
+ "store-alt-slash" => "shop-slash",
+ "stream" => "bars-staggered",
+ "subway" => "train-subway",
+ "surprise" => "face-surprise",
+ "swimmer" => "person-swimming",
+ "swimming-pool" => "water-ladder",
+ "sync" => "arrows-rotate",
+ "sync-alt" => "rotate",
+ "table-tennis" => "table-tennis-paddle-ball",
+ "tablet-alt" => "tablet-screen-button",
+ "tablet-android" => "tablet",
+ "tablet-android-alt" => "tablet-screen",
+ "tachometer" => "gauge-simple",
+ "tachometer-alt" => "gauge",
+ "tachometer-alt-average" => "gauge-med",
+ "tachometer-alt-fast" => "gauge",
+ "tachometer-alt-fastest" => "gauge-max",
+ "tachometer-alt-slow" => "gauge-low",
+ "tachometer-alt-slowest" => "gauge-min",
+ "tachometer-average" => "gauge-simple-med",
+ "tachometer-fast" => "gauge-simple",
+ "tachometer-fastest" => "gauge-simple-max",
+ "tachometer-slow" => "gauge-simple-low",
+ "tachometer-slowest" => "gauge-simple-min",
+ "tanakh" => "book-tanakh",
+ "tasks" => "list-check",
+ "tasks-alt" => "bars-progress",
+ "telegram-plane" => "telegram",
+ "temperature-down" => "temperature-arrow-down",
+ "temperature-frigid" => "temperature-snow",
+ "temperature-hot" => "temperature-sun",
+ "temperature-up" => "temperature-arrow-up",
+ "tenge" => "tenge-sign",
+ "th" => "table-cells",
+ "th-large" => "table-cells-large",
+ "th-list" => "table-list",
+ "theater-masks" => "masks-theater",
+ "thermometer-empty" => "temperature-empty",
+ "thermometer-full" => "temperature-full",
+ "thermometer-half" => "temperature-half",
+ "thermometer-quarter" => "temperature-quarter",
+ "thermometer-three-quarters" => "temperature-three-quarters",
+ "thumb-tack" => "thumbtack",
+ "thunderstorm" => "cloud-bolt",
+ "thunderstorm-moon" => "cloud-bolt-moon",
+ "thunderstorm-sun" => "cloud-bolt-sun",
+ "ticket-alt" => "ticket-simple",
+ "times" => "xmark",
+ "times-circle" => "circle-xmark",
+ "times-hexagon" => "hexagon-xmark",
+ "times-octagon" => "octagon-xmark",
+ "times-square" => "square-xmark",
+ "tint" => "droplet",
+ "tint-slash" => "droplet-slash",
+ "tired" => "face-tired",
+ "toilet-paper-alt" => "toilet-paper-blank",
+ "tombstone-alt" => "tombstone-blank",
+ "tools" => "screwdriver-wrench",
+ "torah" => "scroll-torah",
+ "tram" => "train-tram",
+ "transgender-alt" => "transgender",
+ "trash-alt" => "trash-can",
+ "trash-restore" => "trash-arrow-up",
+ "trash-restore-alt" => "trash-can-arrow-up",
+ "trash-undo-alt" => "trash-can-undo",
+ "tree-alt" => "tree-deciduous",
+ "triangle-music" => "triangle-instrument",
+ "trophy-alt" => "trophy-star",
+ "truck-couch" => "truck-ramp-couch",
+ "truck-loading" => "truck-ramp-box",
+ "tshirt" => "shirt",
+ "tv-alt" => "tv",
+ "undo" => "arrow-rotate-left",
+ "undo-alt" => "rotate-left",
+ "university" => "building-columns",
+ "unlink" => "link-slash",
+ "unlock-alt" => "unlock-keyhole",
+ "usd-circle" => "circle-dollar",
+ "usd-square" => "square-dollar",
+ "user-alt" => "user-large",
+ "user-alt-slash" => "user-large-slash",
+ "user-chart" => "chart-user",
+ "user-circle" => "circle-user",
+ "user-cog" => "user-gear",
+ "user-edit" => "user-pen",
+ "user-friends" => "user-group",
+ "user-hard-hat" => "user-helmet-safety",
+ "user-md" => "user-doctor",
+ "user-md-chat" => "user-doctor-message",
+ "user-times" => "user-xmark",
+ "users-class" => "screen-users",
+ "users-cog" => "users-gear",
+ "users-crown" => "user-group-crown",
+ "utensil-fork" => "fork",
+ "utensil-knife" => "knife",
+ "utensil-spoon" => "spoon",
+ "utensils-alt" => "fork-knife",
+ "vhs" => "cassette-vhs",
+ "volleyball-ball" => "volleyball",
+ "volume-down" => "volume-low",
+ "volume-mute" => "volume-xmark",
+ "volume-up" => "volume-high",
+ "vote-nay" => "xmark-to-slot",
+ "vote-yea" => "check-to-slot",
+ "walking" => "person-walking",
+ "warehouse-alt" => "warehouse-full",
+ "washer" => "washing-machine",
+ "water-lower" => "water-arrow-down",
+ "water-rise" => "water-arrow-up",
+ "waveform-path" => "waveform-lines",
+ "webcam" => "camera-web",
+ "webcam-slash" => "camera-web-slash",
+ "weight" => "weight-scale",
+ "wifi-1" => "wifi-weak",
+ "wifi-2" => "wifi-fair",
+ "window-alt" => "window-flip",
+ "window-close" => "rectangle-xmark",
+ "wine-glass-alt" => "wine-glass-empty",
+ }
+ SVG_ICON_SUBSET_SETTING_NAME = "svg_icon_subset"
+
+ def up
+ migrate_svg_icon_subset_site_setting
+ migrate_icon_names
+ end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
+
+ def migrate_svg_icon_subset_site_setting
+ # name is unique across site settings
+ setting =
+ execute(
+ "SELECT value FROM site_settings WHERE name = '#{SVG_ICON_SUBSET_SETTING_NAME}'",
+ ).first
+ return if !setting
+
+ original_setting_value = setting["value"]
+
+ new_setting_value =
+ original_setting_value
+ .split("|")
+ .map do |icon_name|
+ prefix = nil
+
+ case icon_name
+ when /^fab-/
+ prefix = "fab"
+ lookup_name = icon_name.sub(/^fab-/, "")
+ when /^far-/
+ prefix = "far"
+ lookup_name = icon_name.sub(/^far-/, "")
+ when /^fab fa-/
+ prefix = "fab"
+ lookup_name = icon_name.sub(/^fab fa-/, "")
+ when /^far fa-/
+ prefix = "far"
+ lookup_name = icon_name.sub(/^far fa-/, "")
+ when /^fas fa-/
+ lookup_name = icon_name.sub(/^fas fa-/, "")
+ when /^fa-/
+ lookup_name = icon_name.sub(/^fa-/, "")
+ else
+ lookup_name = icon_name
+ end
+
+ new_icon_name = FA5_REMAPS[lookup_name] || lookup_name
+ new_icon_name = "#{prefix}-#{new_icon_name}" if prefix
+ new_icon_name
+ end
+ .join("|")
+
+ return if new_setting_value == original_setting_value
+
+ execute(
+ "UPDATE site_settings SET value = '#{new_setting_value}' WHERE name = '#{SVG_ICON_SUBSET_SETTING_NAME}'",
+ )
+ end
+
+ def migrate_icon_names
+ mappings = FA5_REMAPS.map { |from, to| "('#{from}', '#{to}')" }.join(", ")
+
+ tables_to_update = {
+ groups: "flair_icon",
+ post_action_types: "icon",
+ badges: "icon",
+ sidebar_urls: "icon",
+ directory_columns: "icon",
+ }
+
+ tables_to_update.each do |table_name, column_name|
+ execute <<~SQL
+ WITH remaps AS (
+ SELECT from_icon, to_icon FROM (VALUES #{mappings}) AS mapping(from_icon, to_icon)
+ )
+ UPDATE #{table_name}
+ SET #{column_name} =
+ CASE
+ WHEN #{column_name} LIKE 'fab-%' THEN CONCAT('fab-', remaps.to_icon)
+ WHEN #{column_name} LIKE 'far-%' THEN CONCAT('far-', remaps.to_icon)
+ WHEN #{column_name} LIKE 'fab fa-%' THEN CONCAT('fab-', remaps.to_icon)
+ WHEN #{column_name} LIKE 'far fa-%' THEN CONCAT('far-', remaps.to_icon)
+ ELSE remaps.to_icon
+ END
+ FROM remaps
+ WHERE #{column_name} = remaps.from_icon
+ OR #{column_name} = CONCAT('fa-', remaps.from_icon)
+ OR #{column_name} = CONCAT('far-', remaps.from_icon)
+ OR #{column_name} = CONCAT('fab-', remaps.from_icon)
+ OR #{column_name} = CONCAT('far fa-', remaps.from_icon)
+ OR #{column_name} = CONCAT('fab fa-', remaps.from_icon)
+ OR #{column_name} = CONCAT('fas fa-', remaps.from_icon);
+ SQL
+
+ execute <<~SQL
+ UPDATE #{table_name}
+ SET #{column_name} =
+ CASE
+ WHEN #{column_name} LIKE 'fas fa-%' THEN SUBSTRING(#{column_name} FROM 8)
+ WHEN #{column_name} LIKE 'far fa-%' THEN CONCAT('far-', SUBSTRING(#{column_name} FROM 8))
+ WHEN #{column_name} LIKE 'fab fa-%' THEN CONCAT('fab-', SUBSTRING(#{column_name} FROM 8))
+ WHEN #{column_name} LIKE 'fa-%' THEN SUBSTRING(#{column_name} FROM 4)
+ ELSE #{column_name}
+ END
+ WHERE #{column_name} LIKE 'fa-%'
+ OR #{column_name} LIKE 'far fa-%'
+ OR #{column_name} LIKE 'fab fa-%'
+ OR #{column_name} LIKE 'fas fa-%';
+ SQL
+ end
+ end
+end
diff --git a/db/migrate/20241205035402_change_default_for_badges_icon.rb b/db/migrate/20241205035402_change_default_for_badges_icon.rb
new file mode 100644
index 00000000000..22f637f1e6f
--- /dev/null
+++ b/db/migrate/20241205035402_change_default_for_badges_icon.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+class ChangeDefaultForBadgesIcon < ActiveRecord::Migration[7.2]
+ def change
+ change_column_default :badges, :icon, from: "fa-certificate", to: "certificate"
+
+ up_only { execute <<~SQL }
+ UPDATE badges
+ SET icon = 'certificate'
+ WHERE icon = 'fa-certificate';
+ SQL
+ end
+end
diff --git a/db/migrate/20241205162117_add_columns_to_moved_posts.rb b/db/migrate/20241205162117_add_columns_to_moved_posts.rb
new file mode 100644
index 00000000000..a52d1480137
--- /dev/null
+++ b/db/migrate/20241205162117_add_columns_to_moved_posts.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+class AddColumnsToMovedPosts < ActiveRecord::Migration[7.2]
+ def change
+ add_column :moved_posts, :old_topic_title, :string
+ add_column :moved_posts, :post_user_id, :integer
+ add_column :moved_posts, :user_id, :integer
+
+ # Index for querying moved_posts for post author given a new topic ID
+ add_index :moved_posts, %i[new_topic_id post_user_id]
+ end
+end
diff --git a/db/migrate/20241206002425_drop_experimental_topics_filter_site_setting.rb b/db/migrate/20241206002425_drop_experimental_topics_filter_site_setting.rb
new file mode 100644
index 00000000000..fbd673b1789
--- /dev/null
+++ b/db/migrate/20241206002425_drop_experimental_topics_filter_site_setting.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class DropExperimentalTopicsFilterSiteSetting < ActiveRecord::Migration[7.2]
+ def up
+ execute <<~SQL
+ DELETE FROM site_settings
+ WHERE name = 'experimental_topics_filter'
+ SQL
+ end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
+end
diff --git a/db/migrate/20241206121401_delete_categories_only_optimized_site_setting.rb b/db/migrate/20241206121401_delete_categories_only_optimized_site_setting.rb
new file mode 100644
index 00000000000..db1f2b6a81b
--- /dev/null
+++ b/db/migrate/20241206121401_delete_categories_only_optimized_site_setting.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class DeleteCategoriesOnlyOptimizedSiteSetting < ActiveRecord::Migration[7.2]
+ def up
+ execute "DELETE FROM site_settings WHERE name = 'desktop_category_page_style' AND value = 'categories_only_optimized'"
+ end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
+end
diff --git a/lib/reviewable/actions.rb b/lib/reviewable/actions.rb
index 4df0eaee70f..5714035eeea 100644
--- a/lib/reviewable/actions.rb
+++ b/lib/reviewable/actions.rb
@@ -30,6 +30,10 @@ class Reviewable < ActiveRecord::Base
@label = label
@actions = []
end
+
+ def empty?
+ @actions.empty?
+ end
end
class Action < Item
diff --git a/package.json b/package.json
index e8fb28a600e..601dce4c61c 100644
--- a/package.json
+++ b/package.json
@@ -24,19 +24,19 @@
"esbuild": "^0.24.0",
"eslint": "^9.14.0",
"jsdoc": "^4.0.4",
- "lefthook": "^1.8.5",
+ "lefthook": "^1.9.0",
"licensee": "^11.1.1",
"lint-to-the-future": "^2.5.1",
- "lint-to-the-future-ember-template": "^2.0.0",
+ "lint-to-the-future-ember-template": "^3.0.0",
"lint-to-the-future-eslint": "^2.2.0",
"magnific-popup": "1.1.0",
"moment": "2.30.1",
"moment-timezone": "0.5.45",
"pikaday": "1.8.2",
"prettier": "^2.8.8",
- "puppeteer-core": "^23.10.0",
+ "puppeteer-core": "^23.10.1",
"squoosh": "https://codeload.github.com/discourse/squoosh/tar.gz/dc9649d",
- "terser": "^5.36.0",
+ "terser": "^5.37.0",
"typescript": "^5.7.2"
},
"scripts": {
diff --git a/plugins/chat/admin/assets/javascripts/admin/components/admin-chat-incoming-webhooks-list.gjs b/plugins/chat/admin/assets/javascripts/admin/components/admin-chat-incoming-webhooks-list.gjs
index 08b04133d91..db4e57446f7 100644
--- a/plugins/chat/admin/assets/javascripts/admin/components/admin-chat-incoming-webhooks-list.gjs
+++ b/plugins/chat/admin/assets/javascripts/admin/components/admin-chat-incoming-webhooks-list.gjs
@@ -94,7 +94,7 @@ export default class AdminChatIncomingWebhooksList extends Component {
>{{i18n "chat.incoming_webhooks.edit"}}
+ this.args.channel.lastMessage.createdAt
+ );
+ }
+
{{#if @channel.lastMessage}}
diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-channel-row.gjs b/plugins/chat/assets/javascripts/discourse/components/chat-channel-row.gjs
index b57deb3e429..622bbe0c7f3 100644
--- a/plugins/chat/assets/javascripts/discourse/components/chat-channel-row.gjs
+++ b/plugins/chat/assets/javascripts/discourse/components/chat-channel-row.gjs
@@ -140,7 +140,10 @@ export default class ChatChannelRow extends Component {
}
get channelHasUnread() {
- return this.args.channel.tracking.unreadCount > 0;
+ return (
+ this.args.channel.tracking.unreadCount > 0 ||
+ this.args.channel.unreadThreadsCountSinceLastViewed > 0
+ );
}
get shouldRenderLastMessage() {
diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-message.gjs b/plugins/chat/assets/javascripts/discourse/components/chat-message.gjs
index a739f1c54e7..9f7ece30f10 100644
--- a/plugins/chat/assets/javascripts/discourse/components/chat-message.gjs
+++ b/plugins/chat/assets/javascripts/discourse/components/chat-message.gjs
@@ -667,7 +667,7 @@ export default class ChatMessage extends Component {
diff --git a/plugins/chat/assets/javascripts/discourse/lib/chat-message-interactor.js b/plugins/chat/assets/javascripts/discourse/lib/chat-message-interactor.js
index 5e260804432..f02bb0350cf 100644
--- a/plugins/chat/assets/javascripts/discourse/lib/chat-message-interactor.js
+++ b/plugins/chat/assets/javascripts/discourse/lib/chat-message-interactor.js
@@ -327,6 +327,13 @@ export default class ChatMessageInteractor {
@action
toggleBookmark() {
+ // somehow, this works around a low-level chrome rendering issue which
+ // causes a complete browser crash when saving/deleting bookmarks in chat.
+ // Error message: "Check failed: !NeedsToUpdateCachedValues()."
+ // Internal topic: t/143485
+ // Hopefully, this can be dropped in future chrome versions
+ document.activeElement?.blur();
+
this.modal.show(BookmarkModal, {
model: {
bookmark: new BookmarkFormData(
diff --git a/plugins/chat/assets/javascripts/discourse/models/chat-channel.js b/plugins/chat/assets/javascripts/discourse/models/chat-channel.js
index 440f9f84a62..4f32e8af9f6 100644
--- a/plugins/chat/assets/javascripts/discourse/models/chat-channel.js
+++ b/plugins/chat/assets/javascripts/discourse/models/chat-channel.js
@@ -119,6 +119,16 @@ export default class ChatChannel {
return this.threadsManager.unreadThreadCount;
}
+ get lastUnreadThreadDate() {
+ if (this.unreadThreadsCount === 0) {
+ return this.lastMessage.createdAt;
+ }
+
+ return Array.from(this.threadsManager.unreadThreadOverview.values())
+ .sort((a, b) => b - a)
+ .pop();
+ }
+
get watchedThreadsUnreadCount() {
return this.threadsManager.threads.reduce((unreadCount, thread) => {
return unreadCount + thread.tracking.watchedThreadsUnreadCount;
diff --git a/plugins/chat/assets/javascripts/discourse/services/chat-channels-manager.js b/plugins/chat/assets/javascripts/discourse/services/chat-channels-manager.js
index 66a134ef1d4..8825dd76c22 100644
--- a/plugins/chat/assets/javascripts/discourse/services/chat-channels-manager.js
+++ b/plugins/chat/assets/javascripts/discourse/services/chat-channels-manager.js
@@ -263,20 +263,33 @@ export default class ChatChannelsManager extends Service {
b.tracking.mentionCount +
b.tracking.watchedThreadsUnreadCount;
- if (aUrgent > 0 || bUrgent > 0) {
- return aUrgent > bUrgent ? -1 : 1;
- }
+ const aUnread = a.unreadThreadsCountSinceLastViewed;
+ const bUnread = b.unreadThreadsCountSinceLastViewed;
- if (
- a.unreadThreadsCountSinceLastViewed > 0 ||
- b.unreadThreadsCountSinceLastViewed > 0
- ) {
- return a.unreadThreadsCountSinceLastViewed >
- b.unreadThreadsCountSinceLastViewed
+ // if both channels have urgent count, sort by last message date
+ if (aUrgent > 0 && bUrgent > 0) {
+ return new Date(a.lastMessage.createdAt) >
+ new Date(b.lastMessage.createdAt)
? -1
: 1;
}
+ // otherwise prioritize channel with urgent count
+ if (aUrgent > 0 || bUrgent > 0) {
+ return aUrgent > bUrgent ? -1 : 1;
+ }
+
+ // if both channels have unread threads, sort by last thread reply date
+ if (aUnread > 0 && bUnread > 0) {
+ return a.lastUnreadThreadDate > b.lastUnreadThreadDate ? -1 : 1;
+ }
+
+ // otherwise prioritize channel with unread thread count
+ if (aUnread > 0 || bUnread > 0) {
+ return aUnread > bUnread ? -1 : 1;
+ }
+
+ // read channels are sorted by last message date
return new Date(a.lastMessage.createdAt) >
new Date(b.lastMessage.createdAt)
? -1
diff --git a/plugins/chat/assets/stylesheets/desktop/chat-side-panel.scss b/plugins/chat/assets/stylesheets/desktop/chat-side-panel.scss
index 052bb9ef916..54fbb98d08d 100644
--- a/plugins/chat/assets/stylesheets/desktop/chat-side-panel.scss
+++ b/plugins/chat/assets/stylesheets/desktop/chat-side-panel.scss
@@ -9,7 +9,7 @@
box-sizing: border-box;
border-left: 1px solid var(--primary-low);
position: relative;
- min-width: clamp(350px, 33vw, 33vw);
+ min-width: 150px;
&__list {
flex-grow: 1;
diff --git a/plugins/chat/plugin.rb b/plugins/chat/plugin.rb
index 9deed76a1c6..76f4562f39a 100644
--- a/plugins/chat/plugin.rb
+++ b/plugins/chat/plugin.rb
@@ -24,7 +24,7 @@ register_svg_icon "clipboard"
register_svg_icon "file-audio"
register_svg_icon "file-video"
register_svg_icon "file-image"
-register_svg_icon "stop-circle"
+register_svg_icon "circle-stop"
# route: /admin/plugins/chat
add_admin_route "chat.admin.title", "chat", use_new_show_route: true
diff --git a/plugins/chat/spec/system/list_channels/drawer_spec.rb b/plugins/chat/spec/system/list_channels/drawer_spec.rb
index 757d76baad4..62defaf8706 100644
--- a/plugins/chat/spec/system/list_channels/drawer_spec.rb
+++ b/plugins/chat/spec/system/list_channels/drawer_spec.rb
@@ -145,45 +145,73 @@ RSpec.describe "List channels | Drawer", type: :system do
expect(drawer_page).to have_channel_at_position(dm_channel_3, 4)
end
- it "sorts channels with threads by urgency" do
- drawer_page.visit_index
- drawer_page.click_direct_messages
+ context "with unread threads" do
+ fab!(:message_1) do
+ Fabricate(
+ :chat_message,
+ chat_channel: dm_channel_3,
+ user: current_user,
+ use_service: true,
+ )
+ end
+ fab!(:thread_1) do
+ Fabricate(
+ :chat_thread,
+ channel: dm_channel_3,
+ original_message: message_1,
+ use_service: true,
+ )
+ end
+ fab!(:message_2) do
+ Fabricate(
+ :chat_message,
+ chat_channel: dm_channel_4,
+ user: current_user,
+ use_service: true,
+ )
+ end
+ fab!(:thread_2) do
+ Fabricate(
+ :chat_thread,
+ channel: dm_channel_4,
+ original_message: message_2,
+ use_service: true,
+ )
+ end
- Fabricate(
- :chat_thread,
- notification_level: :watching,
- original_message:
- Fabricate(
- :chat_message,
- chat_channel: dm_channel_4,
- user: current_user,
- use_service: true,
- ),
- with_replies: 2,
- use_service: true,
- )
+ before do
+ dm_channel_3.membership_for(current_user).mark_read!(message_1.id)
+ dm_channel_4.membership_for(current_user).mark_read!(message_2.id)
- Fabricate(
- :chat_thread,
- original_message:
- Fabricate(
- :chat_message,
- chat_channel: dm_channel_3,
- user: current_user,
- use_service: true,
- ),
- with_replies: 2,
- use_service: true,
- )
+ drawer_page.visit_index
+ drawer_page.click_direct_messages
+ end
- expect(drawer_page).to have_channel_at_position(dm_channel_4, 1)
- expect(drawer_page).to have_urgent_channel(dm_channel_4)
+ it "sorts channels with unread threads by last reply" do
+ Fabricate(:chat_message, thread: thread_1, user: user_2, use_service: true)
+ Fabricate(:chat_message, thread: thread_2, user: user_3, use_service: true)
- expect(drawer_page).to have_channel_at_position(dm_channel_3, 2)
- expect(drawer_page).to have_unread_channel(dm_channel_3)
+ expect(drawer_page).to have_channel_at_position(dm_channel_4, 1)
+ expect(drawer_page).to have_unread_channel(dm_channel_4)
- expect(drawer_page).to have_channel_at_position(dm_channel_1, 3)
- expect(drawer_page).to have_channel_at_position(dm_channel_2, 4)
+ expect(drawer_page).to have_channel_at_position(dm_channel_3, 2)
+ expect(drawer_page).to have_unread_channel(dm_channel_3)
+ end
+
+ it "sorts channels with unread threads by importance" do
+ thread_1.membership_for(current_user).update!(
+ notification_level: ::Chat::NotificationLevels.all[:watching],
+ )
+
+ Fabricate(:chat_message, thread: thread_1, user: user_2, use_service: true)
+ Fabricate(:chat_message, thread: thread_2, user: user_3, use_service: true)
+
+ expect(drawer_page).to have_channel_at_position(dm_channel_3, 1)
+ expect(drawer_page).to have_urgent_channel(dm_channel_3)
+
+ expect(drawer_page).to have_channel_at_position(dm_channel_4, 2)
+ expect(drawer_page).to have_unread_channel(dm_channel_4)
+ end
end
end
end
diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb
index 40914b47153..2e100589db9 100644
--- a/plugins/poll/plugin.rb
+++ b/plugins/poll/plugin.rb
@@ -11,7 +11,7 @@ register_asset "stylesheets/common/poll-ui-builder.scss"
register_asset "stylesheets/desktop/poll-ui-builder.scss", :desktop
register_asset "stylesheets/common/poll-breakdown.scss"
-register_svg_icon "far fa-square-check"
+register_svg_icon "far-square-check"
enabled_site_setting :poll_enabled
hide_plugin
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 417c30efe9b..ccea6fa0641 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -86,8 +86,8 @@ importers:
specifier: ^4.0.4
version: 4.0.4
lefthook:
- specifier: ^1.8.5
- version: 1.8.5
+ specifier: ^1.9.0
+ version: 1.9.0
licensee:
specifier: ^11.1.1
version: 11.1.1(patch_hash=55h346kvblvnigtrwrsh4hpona)
@@ -95,8 +95,8 @@ importers:
specifier: ^2.5.1
version: 2.5.1(encoding@0.1.13)
lint-to-the-future-ember-template:
- specifier: ^2.0.0
- version: 2.0.0(ember-template-lint@6.0.0)
+ specifier: ^3.0.0
+ version: 3.0.0(ember-template-lint@6.0.0)
lint-to-the-future-eslint:
specifier: ^2.2.0
version: 2.2.0(eslint@9.14.0)
@@ -116,14 +116,14 @@ importers:
specifier: ^2.8.8
version: 2.8.8
puppeteer-core:
- specifier: ^23.10.0
- version: 23.10.0
+ specifier: ^23.10.1
+ version: 23.10.1
squoosh:
specifier: https://codeload.github.com/discourse/squoosh/tar.gz/dc9649d
version: https://codeload.github.com/discourse/squoosh/tar.gz/dc9649d
terser:
- specifier: ^5.36.0
- version: 5.36.0
+ specifier: ^5.37.0
+ version: 5.37.0
typescript:
specifier: ^5.7.2
version: 5.7.2
@@ -154,7 +154,7 @@ importers:
version: 2.2.0
'@embroider/test-setup':
specifier: ^4.0.0
- version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@glimmer/component':
specifier: ^1.1.2
version: 1.1.2(@babel/core@7.26.0)
@@ -187,13 +187,13 @@ importers:
version: 1.1.3
ember-load-initializers:
specifier: ^3.0.1
- version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-resolver:
specifier: ^13.1.0
- version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-source-channel-url:
specifier: ^3.0.0
version: 3.0.0(encoding@0.1.13)
@@ -201,8 +201,8 @@ importers:
specifier: ^4.7.0
version: 4.7.0
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/custom-proxy:
devDependencies:
@@ -210,8 +210,8 @@ importers:
specifier: ^1.0.0
version: 1.0.0
express:
- specifier: ^4.21.1
- version: 4.21.1
+ specifier: ^4.21.2
+ version: 4.21.2
glob:
specifier: ^10.4.3
version: 10.4.5
@@ -234,7 +234,7 @@ importers:
version: 8.1.1
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel:
specifier: ^8.2.0
version: 8.2.0(@babel/core@7.26.0)
@@ -258,8 +258,8 @@ importers:
specifier: ^4.0.9
version: 4.0.9
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/discourse:
dependencies:
@@ -322,8 +322,8 @@ importers:
specifier: ^7.26.0
version: 7.26.0
'@babel/standalone':
- specifier: ^7.26.2
- version: 7.26.2
+ specifier: ^7.26.4
+ version: 7.26.4
'@colors/colors':
specifier: ^1.6.0
version: 1.6.0
@@ -338,22 +338,22 @@ importers:
version: 0.9.1(patch_hash=s67qh4jsmpbr3llstdi3a5zeze)
'@ember/legacy-built-in-components':
specifier: ^0.5.0
- version: 0.5.0(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 0.5.0(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@ember/optional-features':
specifier: ^2.2.0
version: 2.2.0
'@ember/render-modifiers':
specifier: ^2.1.0
- version: 2.1.0(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 2.1.0(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@ember/string':
specifier: ^4.0.0
version: 4.0.0
'@ember/test-helpers':
specifier: ^4.0.4
- version: 4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@ember/test-waiters':
- specifier: ^3.1.0
- version: 3.1.0
+ specifier: ^4.0.0
+ version: 4.0.0(@glint/template@1.5.0)
'@embroider/compat':
specifier: ^3.7.0
version: 3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0)
@@ -368,7 +368,7 @@ importers:
version: 2.1.8(@embroider/core@3.4.19(@glint/template@1.5.0))
'@embroider/webpack':
specifier: ^4.0.8
- version: 4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
'@floating-ui/dom':
specifier: ^1.6.12
version: 1.6.12
@@ -455,25 +455,25 @@ importers:
version: link:../discourse-plugins
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-buffered-proxy:
specifier: ^2.1.1
version: 2.1.1(@babel/core@7.26.0)
ember-cached-decorator-polyfill:
specifier: ^1.0.2
- version: 1.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 1.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-cli:
specifier: ~6.0.1
version: 6.0.1(handlebars@4.7.8)(underscore@1.13.6)
ember-cli-app-version:
specifier: ^7.0.0
- version: 7.0.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 7.0.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-cli-babel:
specifier: ^8.2.0
version: 8.2.0(@babel/core@7.26.0)
ember-cli-deprecation-workflow:
specifier: ^3.0.2
- version: 3.0.2(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.2(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-cli-htmlbars:
specifier: ^6.3.0
version: 6.3.0
@@ -494,25 +494,25 @@ importers:
version: 6.1.1
ember-exam:
specifier: ^9.0.0
- version: 9.0.0(@glint/template@1.5.0)(ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.0))(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 9.0.0(@glint/template@1.5.0)(ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.1))(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.1)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-load-initializers:
specifier: ^3.0.1
- version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-modifier:
specifier: ^4.2.0
- version: 4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-on-resize-modifier:
specifier: ^2.0.2
- version: 2.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-production-deprecations:
specifier: workspace:1.0.0
version: link:../ember-production-deprecations
ember-qunit:
specifier: ^8.1.1
- version: 8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.0)
+ version: 8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.1)
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-template-imports:
specifier: ^4.2.0
version: 4.2.0
@@ -527,7 +527,7 @@ importers:
version: 2.5.2
imports-loader:
specifier: ^5.0.0
- version: 5.0.0(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.0.0(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
jquery:
specifier: ^3.7.1
version: 3.7.1
@@ -550,8 +550,8 @@ importers:
specifier: ^3.4.7
version: 3.4.7
qunit:
- specifier: ^2.23.0
- version: 2.23.0
+ specifier: ^2.23.1
+ version: 2.23.1
qunit-dom:
specifier: ^3.4.0
version: 3.4.0
@@ -568,8 +568,8 @@ importers:
specifier: ^0.7.4
version: 0.7.4
terser:
- specifier: ^5.36.0
- version: 5.36.0
+ specifier: ^5.37.0
+ version: 5.37.0
testem:
specifier: ^3.15.2
version: 3.15.2(handlebars@4.7.8)(underscore@1.13.6)
@@ -583,11 +583,11 @@ importers:
specifier: ^2.1.1
version: 2.1.1(patch_hash=ng672yys7q7cl7vz44xn3y54uq)
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
webpack-retry-chunk-load-plugin:
specifier: ^3.1.1
- version: 3.1.1(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 3.1.1(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
webpack-stats-plugin:
specifier: ^1.1.3
version: 1.1.3
@@ -608,7 +608,7 @@ importers:
version: link:../discourse-i18n
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel:
specifier: ^8.2.0
version: 8.2.0(@babel/core@7.26.0)
@@ -617,7 +617,7 @@ importers:
version: 6.3.0
ember-resolver:
specifier: ^13.1.0
- version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
handlebars:
specifier: ^4.7.8
version: 4.7.8
@@ -630,7 +630,7 @@ importers:
version: 2.2.0
'@embroider/test-setup':
specifier: ^4.0.0
- version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@glimmer/component':
specifier: ^1.1.2
version: 1.1.2(@babel/core@7.26.0)
@@ -663,10 +663,10 @@ importers:
version: 1.1.3
ember-load-initializers:
specifier: ^3.0.1
- version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-source-channel-url:
specifier: ^3.0.0
version: 3.0.0(encoding@0.1.13)
@@ -674,8 +674,8 @@ importers:
specifier: ^4.7.0
version: 4.7.0
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/discourse-hbr:
dependencies:
@@ -705,7 +705,7 @@ importers:
version: link:../discourse-i18n
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
markdown-it:
specifier: 14.0.0
version: 14.0.0
@@ -744,14 +744,14 @@ importers:
version: 4.2.0
ember-this-fallback:
specifier: ^0.4.0
- version: 0.4.0(patch_hash=znalyv6akdxlqfpmxunrdi3osa)(ember-cli-htmlbars@6.3.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 0.4.0(patch_hash=znalyv6akdxlqfpmxunrdi3osa)(ember-cli-htmlbars@6.3.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
devDependencies:
ember-cli:
specifier: ~6.0.1
version: 6.0.1(handlebars@4.7.8)(underscore@1.13.6)
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/discourse-widget-hbs:
dependencies:
@@ -760,7 +760,7 @@ importers:
version: 7.26.0
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel:
specifier: ^8.2.0
version: 8.2.0(@babel/core@7.26.0)
@@ -776,7 +776,7 @@ importers:
version: 2.2.0
'@embroider/test-setup':
specifier: ^4.0.0
- version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@glimmer/component':
specifier: ^1.1.2
version: 1.1.2(@babel/core@7.26.0)
@@ -803,13 +803,13 @@ importers:
version: 1.1.3
ember-load-initializers:
specifier: ^3.0.1
- version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-resolver:
specifier: ^13.1.0
- version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-source-channel-url:
specifier: ^3.0.0
version: 3.0.0(encoding@0.1.13)
@@ -817,8 +817,8 @@ importers:
specifier: ^4.7.0
version: 4.7.0
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/ember-cli-progress-ci: {}
@@ -831,7 +831,7 @@ importers:
version: 7.26.0
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel:
specifier: ^8.2.0
version: 8.2.0(@babel/core@7.26.0)
@@ -850,7 +850,7 @@ importers:
version: 2.2.0
'@embroider/test-setup':
specifier: ^4.0.0
- version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@glimmer/component':
specifier: ^1.1.2
version: 1.1.2(@babel/core@7.26.0)
@@ -883,13 +883,13 @@ importers:
version: 1.1.3
ember-load-initializers:
specifier: ^3.0.1
- version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-resolver:
specifier: ^13.1.0
- version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-source-channel-url:
specifier: ^3.0.0
version: 3.0.0(encoding@0.1.13)
@@ -897,8 +897,8 @@ importers:
specifier: ^4.7.0
version: 4.7.0
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/pretty-text:
dependencies:
@@ -913,7 +913,7 @@ importers:
version: link:../discourse-i18n
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel:
specifier: ^8.2.0
version: 8.2.0(@babel/core@7.26.0)
@@ -929,7 +929,7 @@ importers:
version: 2.2.0
'@embroider/test-setup':
specifier: ^4.0.0
- version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@glimmer/component':
specifier: ^1.1.2
version: 1.1.2(@babel/core@7.26.0)
@@ -962,13 +962,13 @@ importers:
version: 1.1.3
ember-load-initializers:
specifier: ^3.0.1
- version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-resolver:
specifier: ^13.1.0
- version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-source-channel-url:
specifier: ^3.0.0
version: 3.0.0(encoding@0.1.13)
@@ -976,8 +976,8 @@ importers:
specifier: ^4.7.0
version: 4.7.0
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/select-kit:
dependencies:
@@ -992,7 +992,7 @@ importers:
version: link:../discourse-i18n
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel:
specifier: ^8.2.0
version: 8.2.0(@babel/core@7.26.0)
@@ -1008,7 +1008,7 @@ importers:
version: 2.2.0
'@embroider/test-setup':
specifier: ^4.0.0
- version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@glimmer/component':
specifier: ^1.1.2
version: 1.1.2(@babel/core@7.26.0)
@@ -1041,13 +1041,13 @@ importers:
version: 1.1.3
ember-load-initializers:
specifier: ^3.0.1
- version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-resolver:
specifier: ^13.1.0
- version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-source-channel-url:
specifier: ^3.0.0
version: 3.0.0(encoding@0.1.13)
@@ -1055,14 +1055,14 @@ importers:
specifier: ^4.7.0
version: 4.7.0
webpack:
- specifier: ^5.97.0
- version: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ specifier: ^5.97.1
+ version: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
app/assets/javascripts/theme-transpiler:
dependencies:
'@babel/standalone':
- specifier: ^7.26.2
- version: 7.26.2
+ specifier: ^7.26.4
+ version: 7.26.4
'@zxing/text-encoding':
specifier: ^0.9.0
version: 0.9.0
@@ -1086,10 +1086,10 @@ importers:
version: 6.3.0
ember-source:
specifier: ~5.5.0
- version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-this-fallback:
specifier: ^0.4.0
- version: 0.4.0(patch_hash=znalyv6akdxlqfpmxunrdi3osa)(ember-cli-htmlbars@6.3.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ version: 0.4.0(patch_hash=znalyv6akdxlqfpmxunrdi3osa)(ember-cli-htmlbars@6.3.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
handlebars:
specifier: ^4.7.8
version: 4.7.8
@@ -1100,8 +1100,8 @@ importers:
specifier: ^1.0.0
version: 1.0.0
terser:
- specifier: ^5.36.0
- version: 5.36.0
+ specifier: ^5.37.0
+ version: 5.37.0
app/assets/javascripts/truth-helpers:
dependencies:
@@ -1110,7 +1110,7 @@ importers:
version: 1.9.0
ember-auto-import:
specifier: ^2.10.0
- version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ version: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
packages:
@@ -1781,8 +1781,8 @@ packages:
resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==}
engines: {node: '>=6.9.0'}
- '@babel/standalone@7.26.2':
- resolution: {integrity: sha512-i2VbegsRfwa9yq3xmfDX3tG2yh9K0cCqwpSyVG2nPxifh0EOnucAZUeO/g4lW2Zfg03aPJNtPfxQbDHzXc7H+w==}
+ '@babel/standalone@7.26.4':
+ resolution: {integrity: sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==}
engines: {node: '>=6.9.0'}
'@babel/template@7.25.9':
@@ -1890,6 +1890,9 @@ packages:
resolution: {integrity: sha512-bb9h95ktG2wKY9+ja1sdsFBdOms2lB19VWs8wmNpzgHv1NCetonBoV5jHBV4DHt0uS1tg9z66cZqhUVlYs96KQ==}
engines: {node: 10.* || 12.* || >= 14.*}
+ '@ember/test-waiters@4.0.0':
+ resolution: {integrity: sha512-anqtvTCQvQh8VlHcKPJC0Fxz3aMmc7L+mZLOqvoH7+k86TUikZ/CxhytgMvgLk0x53fqOPEL1uykl2C9Ez65OA==}
+
'@embroider/addon-shim@1.9.0':
resolution: {integrity: sha512-fMzayl/licUL8VRAy4qXROKcYvHwUbV8aTh4m97L5/MRuVpxbcAy92DGGTqx5OBKCSQN3gMg+sUKeE6AviefpQ==}
engines: {node: 12.* || 14.* || >= 16}
@@ -2880,11 +2883,6 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.12.1:
- resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
@@ -4768,6 +4766,10 @@ packages:
resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==}
engines: {node: '>= 0.10.0'}
+ express@4.21.2:
+ resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
+ engines: {node: '>= 0.10.0'}
+
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
@@ -5883,58 +5885,58 @@ packages:
resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==}
engines: {node: '>=8'}
- lefthook-darwin-arm64@1.8.5:
- resolution: {integrity: sha512-BXUcE+2TTkYRGhMB+6HwAbxhK72L4kFKbukb74VfSk9HYBFb/7IQXyUgsB2dik3LSTcDcl9SgOayzeLU9EqmGw==}
+ lefthook-darwin-arm64@1.9.0:
+ resolution: {integrity: sha512-pClng2uWTqZ/FBC+YK0O4MlvphtMcw3xnYZYP4mOfM56gkSrMdsoG59AkBWB5zwxQymPiNFyO3H+JJbjvwmueA==}
cpu: [arm64]
os: [darwin]
- lefthook-darwin-x64@1.8.5:
- resolution: {integrity: sha512-xkjYwVlJBQiJALR9jJi6MpIF161z6Td3gyVJoGII95h9hETYZV2J7ox4PUGufE5EV8P0AXWveWo8cJWhWVbssw==}
+ lefthook-darwin-x64@1.9.0:
+ resolution: {integrity: sha512-PHQHJZHNadWhFan3Vvy24hMYMecR433t0NHODyBgILaZXOmoeMGcQYNHTmOb+R0148BKA/33l00m1CY14ZPqtw==}
cpu: [x64]
os: [darwin]
- lefthook-freebsd-arm64@1.8.5:
- resolution: {integrity: sha512-kL8+HxjAtMco824pZkBJiA3+q4djldNNw06atzgAxyy8/Kj+2NjlIaez88NPQHE4hAVMqtURzmRtnaruaRtT1g==}
+ lefthook-freebsd-arm64@1.9.0:
+ resolution: {integrity: sha512-yuPJJJ3aDpMihqg1dfS75XgnzUYh+OqSZPmQp49s9RXKAWUCsBiDcirmrseDRbj3WVsatNGQldbV+5F5rNrxqw==}
cpu: [arm64]
os: [freebsd]
- lefthook-freebsd-x64@1.8.5:
- resolution: {integrity: sha512-fQfSUbAQVhLalZFl6sFGJQVBJK9EsQpmXrv1Qunhi8QOY/f07a2onsWb+jI9sp31ITTe2Jtzu0h31ZCBqTWxQw==}
+ lefthook-freebsd-x64@1.9.0:
+ resolution: {integrity: sha512-7By8mNLsc+EFJJkmeuC8tmYO8+i9oLBqDSHqnlzSNMK8EF5DV9DTAyNIHIbn0OIcwcCe6xBfwLZimeSkKxMZKg==}
cpu: [x64]
os: [freebsd]
- lefthook-linux-arm64@1.8.5:
- resolution: {integrity: sha512-gnBonAc3Heq+Sd+MzSbtLmZkYzSDZ+tTpLAfq2Q62qnVEZpWXFd3qfS2up5a7oUEDNcos7OHDqebSbowpNilZA==}
+ lefthook-linux-arm64@1.9.0:
+ resolution: {integrity: sha512-MYZD6j+ufryhENqjZe6POD3rT/0LFLfRtK4ddKKEqPGEy5wKpmXjt3ydfqTg6XAFzm6pyQO1zgwPuF40s5r3wQ==}
cpu: [arm64]
os: [linux]
- lefthook-linux-x64@1.8.5:
- resolution: {integrity: sha512-lLsbnXy58Syw6VMJS554HbfrBKUZ0mBWvDbr0DGoDBvFyxtvv5kFMbF/ZlRpLKl7Ds9IqCCCW0NpsjsixX4Z+A==}
+ lefthook-linux-x64@1.9.0:
+ resolution: {integrity: sha512-xKh5/Lhjn7oI9AmUhtcArS1Y6RjDcxn0KKXAKURhwwZNFI0HGlusIYAF9U86MDqSPbfvEv+nRpq2i6au6Xp6Aw==}
cpu: [x64]
os: [linux]
- lefthook-openbsd-arm64@1.8.5:
- resolution: {integrity: sha512-g3XFw/0q0T0Zd1vpPCO5l+ryFIyf+v/FFVPVb6HKvpDI4BYLFVzsZeVGzRiWZt1oJ0DI9qrrvdG4uJJBs4tSDQ==}
+ lefthook-openbsd-arm64@1.9.0:
+ resolution: {integrity: sha512-+3YNG0BVWO3CxBfO5GIDU31EWLZgfPU4M/NDqPekIBf8EUSiToXk9D4MNBAYnjjAfAezV/sdDeLm2Jg4l468UQ==}
cpu: [arm64]
os: [openbsd]
- lefthook-openbsd-x64@1.8.5:
- resolution: {integrity: sha512-GmfnPUMMxa/ckHS2L7zIobWusaUmDWZU0zQj016QXGYS4SN8l5ZRU/ht4Tg6bbQSO6HYhWcyfIXB1XjPJPpG7w==}
+ lefthook-openbsd-x64@1.9.0:
+ resolution: {integrity: sha512-7DGR8oAa5N4JJ1s0hpDJMQ7AUAT3bDNcTPCFw2keVlmg29qMdIL4RIEbVau/DZ8GvZhzoOE8ddtgUH07PeUjRw==}
cpu: [x64]
os: [openbsd]
- lefthook-windows-arm64@1.8.5:
- resolution: {integrity: sha512-e+6QAYD7PCsfVtPtnOMSC8PUiwnLCE9xCZq+dIK65/W/Ow84lSzHBR67Wl5MI3RiiGF2g8kulG+U1YZobXbdxQ==}
+ lefthook-windows-arm64@1.9.0:
+ resolution: {integrity: sha512-t7LtUL3eDuprxomtuw74KBLXC+Clk1e/L+ofLy4Jw9t0FNPkFDouQv31IQ0HfS5d1aymNKjK/qbm+IOs1XZC6Q==}
cpu: [arm64]
os: [win32]
- lefthook-windows-x64@1.8.5:
- resolution: {integrity: sha512-NPZwHbSWuGmYe5EEjkQbvRaotPW9/maKK7kexqrHxjzL/mOaoHSEYlW6ByPz2RB+bvgoTCkNRXlPiDDoDSYv+w==}
+ lefthook-windows-x64@1.9.0:
+ resolution: {integrity: sha512-q3L6tXUxicqiVbquyUIVuGlZo3fJ2y4HhgjINYVCRR+kdn+yqu5pR7Vre/I+LnWtm6V6CUmoV2rxx1fl/1lP1w==}
cpu: [x64]
os: [win32]
- lefthook@1.8.5:
- resolution: {integrity: sha512-agsAaXJWoM9vOSVmKVYGPYT5IEzz4Upz0yWRva4L0mT+eObcesIrcMCnLLM+iGfweqC5exfDMm7BHUjTwoiGPg==}
+ lefthook@1.9.0:
+ resolution: {integrity: sha512-JF2J4+IEsWpTL2NRWXqUzNu3Nf0pfxMd+Io3kXm6rTQ04jpwh06f37VB5lc5L76kgxpjiBiuFoRlPOAY2je3YA==}
hasBin: true
levn@0.4.1:
@@ -5958,11 +5960,11 @@ packages:
linkify-it@5.0.0:
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
- lint-to-the-future-ember-template@2.0.0:
- resolution: {integrity: sha512-juJZa5jyYJeDgadQbXYaKilH03M8zLx3NNlYK8ypQ9uRhl8okz7rTrEA5fM2ruAj92tfxkP5IypSu0zvb9i7sw==}
- engines: {node: 10.* || >= 12.*}
+ lint-to-the-future-ember-template@3.0.0:
+ resolution: {integrity: sha512-gFtm2jTnOslVoYPpgkcGk+lAKHZa/WHugU0kMJOR6H3b/mib0MYM8buXctSfnrTMqbWcp/XcCs74zUycJeWxiA==}
+ engines: {node: 18.* || 20.* || >= 22.*}
peerDependencies:
- ember-template-lint: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ ember-template-lint: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
lint-to-the-future-eslint@2.2.0:
resolution: {integrity: sha512-qVAplasyGhUxtehl4Rfmj4qNiHx8axZKu9HtqbjeyRrcIRyXGcHr5UECJSRP0H4sraCk+wB1IuG0k7Mv2ax3Aw==}
@@ -6794,6 +6796,9 @@ packages:
path-to-regexp@0.1.10:
resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==}
+ path-to-regexp@0.1.12:
+ resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
+
path-to-regexp@8.1.0:
resolution: {integrity: sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ==}
engines: {node: '>=16'}
@@ -6995,8 +7000,8 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- puppeteer-core@23.10.0:
- resolution: {integrity: sha512-7pv6kFget4Iki0RLBDowi35vaccz73XpC6/FAnfCrYa2IXVUlBHfZw+HGWzlvvTGwM9HHd32rgCrIDzil3kj+w==}
+ puppeteer-core@23.10.1:
+ resolution: {integrity: sha512-ey6NwixHYEUnhCA/uYi7uQQ4a0CZw4k+MatbHXGl5GEzaiRQziYUxc2HGpdQZ/gnh4KQWAKkocyIg1/dIm5d0g==}
engines: {node: '>=18'}
qs@6.13.0:
@@ -7018,8 +7023,8 @@ packages:
qunit-theme-ember@1.0.0:
resolution: {integrity: sha512-vdMVVo6ecdCkWttMTKeyq1ZTLGHcA6zdze2zhguNuc3ritlJMhOXY5RDseqazOwqZVfCg3rtlmL3fMUyIzUyFQ==}
- qunit@2.23.0:
- resolution: {integrity: sha512-r4hCsZqUvSyuUUHbCt2kYW1AECD7KTdhKW9mSUuCu51UO44o6oz6L+F3coeryj79MWF7o+S+szJ9Icrr9yalvQ==}
+ qunit@2.23.1:
+ resolution: {integrity: sha512-CGrsGy7NhkQmfiyOixBpbexh2PT7ekIb35uWiBi/hBNdTJF1W98UonyACFJJs8UmcP96lH+YJlX99dYZi5rZkg==}
engines: {node: '>=10'}
hasBin: true
@@ -7747,8 +7752,8 @@ packages:
uglify-js:
optional: true
- terser@5.36.0:
- resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==}
+ terser@5.37.0:
+ resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==}
engines: {node: '>=10'}
hasBin: true
@@ -8165,8 +8170,8 @@ packages:
webpack-stats-plugin@1.1.3:
resolution: {integrity: sha512-yUKYyy+e0iF/w31QdfioRKY+h3jDBRpthexBOWGKda99iu2l/wxYsI/XqdlP5IU58/0KB9CsJZgWNAl+/MPkRw==}
- webpack@5.97.0:
- resolution: {integrity: sha512-CWT8v7ShSfj7tGs4TLRtaOLmOCPWhoKEvp+eA7FVx8Xrjb3XfT0aXdxDItnRZmE8sHcH+a8ayDrJCOjXKxVFfQ==}
+ webpack@5.97.1:
+ resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -9892,7 +9897,7 @@ snapshots:
dependencies:
regenerator-runtime: 0.14.0
- '@babel/standalone@7.26.2': {}
+ '@babel/standalone@7.26.4': {}
'@babel/template@7.25.9':
dependencies:
@@ -10005,13 +10010,13 @@ snapshots:
'@ember/edition-utils@1.2.0': {}
- '@ember/legacy-built-in-components@0.5.0(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))':
+ '@ember/legacy-built-in-components@0.5.0(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))':
dependencies:
'@embroider/macros': 1.16.9(@glint/template@1.5.0)
ember-cli-babel: 7.26.11
ember-cli-htmlbars: 5.7.2
ember-cli-typescript: 4.2.1
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
transitivePeerDependencies:
- '@glint/template'
- supports-color
@@ -10027,12 +10032,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@ember/render-modifiers@2.1.0(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))':
+ '@ember/render-modifiers@2.1.0(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))':
dependencies:
'@embroider/macros': 1.16.9(@glint/template@1.5.0)
ember-cli-babel: 7.26.11
ember-modifier-manager-polyfill: 1.2.0(@babel/core@7.26.0)
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
optionalDependencies:
'@glint/template': 1.5.0
transitivePeerDependencies:
@@ -10041,7 +10046,7 @@ snapshots:
'@ember/string@4.0.0': {}
- '@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))':
+ '@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))':
dependencies:
'@ember/test-waiters': 3.1.0
'@embroider/addon-shim': 1.9.0
@@ -10049,7 +10054,7 @@ snapshots:
'@simple-dom/interface': 1.4.0
decorator-transforms: 2.3.0(@babel/core@7.26.0)
dom-element-descriptors: 0.5.1
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
transitivePeerDependencies:
- '@babel/core'
- '@glint/template'
@@ -10064,6 +10069,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@ember/test-waiters@4.0.0(@glint/template@1.5.0)':
+ dependencies:
+ '@embroider/addon-shim': 1.9.0
+ '@embroider/macros': 1.16.9(@glint/template@1.5.0)
+ transitivePeerDependencies:
+ - '@glint/template'
+ - supports-color
+
'@embroider/addon-shim@1.9.0':
dependencies:
'@embroider/shared-internals': 2.8.1(supports-color@8.1.1)
@@ -10073,11 +10086,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@embroider/babel-loader-9@3.1.1(@embroider/core@3.4.19(@glint/template@1.5.0))(supports-color@8.1.1)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))':
+ '@embroider/babel-loader-9@3.1.1(@embroider/core@3.4.19(@glint/template@1.5.0))(supports-color@8.1.1)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))':
dependencies:
'@babel/core': 7.26.0(supports-color@8.1.1)
'@embroider/core': 3.4.19(@glint/template@1.5.0)
- babel-loader: 9.1.3(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ babel-loader: 9.1.3(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
transitivePeerDependencies:
- supports-color
- webpack
@@ -10169,10 +10182,10 @@ snapshots:
- supports-color
- utf-8-validate
- '@embroider/hbs-loader@3.0.3(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))':
+ '@embroider/hbs-loader@3.0.3(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))':
dependencies:
'@embroider/core': 3.4.19(@glint/template@1.5.0)
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
'@embroider/macros@1.16.9(@glint/template@1.5.0)':
dependencies:
@@ -10215,41 +10228,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@embroider/test-setup@4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))':
+ '@embroider/test-setup@4.0.0(@embroider/compat@3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0))(@embroider/core@3.4.19(@glint/template@1.5.0))(@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))':
dependencies:
lodash: 4.17.21
resolve: 1.22.8
optionalDependencies:
'@embroider/compat': 3.7.0(@embroider/core@3.4.19(@glint/template@1.5.0))(@glint/template@1.5.0)
'@embroider/core': 3.4.19(@glint/template@1.5.0)
- '@embroider/webpack': 4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ '@embroider/webpack': 4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
- '@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))':
+ '@embroider/webpack@4.0.8(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))':
dependencies:
'@babel/core': 7.26.0(supports-color@8.1.1)
'@babel/preset-env': 7.25.3(@babel/core@7.26.0(supports-color@8.1.1))(supports-color@8.1.1)
- '@embroider/babel-loader-9': 3.1.1(@embroider/core@3.4.19(@glint/template@1.5.0))(supports-color@8.1.1)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ '@embroider/babel-loader-9': 3.1.1(@embroider/core@3.4.19(@glint/template@1.5.0))(supports-color@8.1.1)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
'@embroider/core': 3.4.19(@glint/template@1.5.0)
- '@embroider/hbs-loader': 3.0.3(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ '@embroider/hbs-loader': 3.0.3(@embroider/core@3.4.19(@glint/template@1.5.0))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
'@embroider/shared-internals': 2.8.1(supports-color@8.1.1)
'@types/supports-color': 8.1.3
assert-never: 1.3.0
- babel-loader: 8.3.0(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
- css-loader: 5.2.7(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ babel-loader: 8.3.0(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
+ css-loader: 5.2.7(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
csso: 4.2.0
debug: 4.3.7(supports-color@8.1.1)
escape-string-regexp: 4.0.0
fs-extra: 9.1.0
jsdom: 25.0.1(supports-color@8.1.1)
lodash: 4.17.21
- mini-css-extract-plugin: 2.9.1(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ mini-css-extract-plugin: 2.9.1(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
semver: 7.6.3
source-map-url: 0.4.1
- style-loader: 2.0.0(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ style-loader: 2.0.0(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
supports-color: 8.1.1
- terser: 5.36.0
- thread-loader: 3.0.4(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ terser: 5.37.0
+ thread-loader: 3.0.4(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
transitivePeerDependencies:
- bufferutil
- canvas
@@ -10609,7 +10622,7 @@ snapshots:
'@glint/template': 1.5.0
optionalDependencies:
ember-cli-htmlbars: 6.3.0
- ember-modifier: 4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ ember-modifier: 4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@glint/environment-ember-template-imports@1.5.0(@glint/environment-ember-loose@1.5.0(@glimmer/component@1.1.2(@babel/core@7.26.0))(@glint/template@1.5.0)(ember-cli-htmlbars@6.3.0)(ember-modifier@4.2.0(@babel/core@7.26.0)))(@glint/template@1.5.0)':
dependencies:
@@ -11306,8 +11319,6 @@ snapshots:
dependencies:
acorn: 8.14.0
- acorn@8.12.1: {}
-
acorn@8.14.0: {}
agent-base@7.1.0(supports-color@8.1.1):
@@ -11527,30 +11538,30 @@ snapshots:
babel-import-util@3.0.0: {}
- babel-loader@8.3.0(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ babel-loader@8.3.0(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
'@babel/core': 7.26.0(supports-color@8.1.1)
find-cache-dir: 3.3.2
loader-utils: 2.0.4
make-dir: 3.1.0
schema-utils: 2.7.1
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
- babel-loader@8.3.0(@babel/core@7.26.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ babel-loader@8.3.0(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
'@babel/core': 7.26.0
find-cache-dir: 3.3.2
loader-utils: 2.0.4
make-dir: 3.1.0
schema-utils: 2.7.1
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
- babel-loader@9.1.3(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ babel-loader@9.1.3(@babel/core@7.26.0(supports-color@8.1.1))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
'@babel/core': 7.26.0(supports-color@8.1.1)
find-cache-dir: 4.0.0
schema-utils: 4.2.0
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
babel-plugin-debug-macros@0.2.0(@babel/core@7.26.0):
dependencies:
@@ -12169,7 +12180,7 @@ snapshots:
lodash.defaultsdeep: 4.6.1
matcher-collection: 2.0.1
symlink-or-copy: 1.3.1
- terser: 5.36.0
+ terser: 5.37.0
walk-sync: 2.2.0
workerpool: 6.5.1
transitivePeerDependencies:
@@ -12606,7 +12617,7 @@ snapshots:
crypto-random-string@2.0.0: {}
- css-loader@5.2.7(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ css-loader@5.2.7(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
icss-utils: 5.1.0(postcss@8.4.41)
loader-utils: 2.0.4
@@ -12618,7 +12629,7 @@ snapshots:
postcss-value-parser: 4.2.0
schema-utils: 3.3.0
semver: 7.6.3
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
css-tree@1.1.3:
dependencies:
@@ -12804,7 +12815,7 @@ snapshots:
electron-to-chromium@1.5.31: {}
- ember-auto-import@2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ ember-auto-import@2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
'@babel/core': 7.26.0
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0)
@@ -12814,7 +12825,7 @@ snapshots:
'@babel/preset-env': 7.25.3(@babel/core@7.26.0)
'@embroider/macros': 1.16.9(@glint/template@1.5.0)
'@embroider/shared-internals': 2.8.1(supports-color@8.1.1)
- babel-loader: 8.3.0(@babel/core@7.26.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ babel-loader: 8.3.0(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
babel-plugin-ember-modules-api-polyfill: 3.5.0
babel-plugin-ember-template-compilation: 2.3.0
babel-plugin-htmlbars-inline-precompile: 5.3.1
@@ -12824,7 +12835,7 @@ snapshots:
broccoli-merge-trees: 4.2.0
broccoli-plugin: 4.0.7
broccoli-source: 3.0.1
- css-loader: 5.2.7(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ css-loader: 5.2.7(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
debug: 4.3.7(supports-color@8.1.1)
fs-extra: 10.1.0
fs-tree-diff: 2.0.1
@@ -12832,14 +12843,14 @@ snapshots:
is-subdir: 1.2.0
js-string-escape: 1.0.1
lodash: 4.17.21
- mini-css-extract-plugin: 2.9.1(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ mini-css-extract-plugin: 2.9.1(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
minimatch: 3.1.2
parse5: 6.0.1
pkg-entry-points: 1.1.0
resolve: 1.22.8
resolve-package-path: 4.0.3
semver: 7.6.3
- style-loader: 2.0.0(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ style-loader: 2.0.0(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
typescript-memoize: 1.1.1
walk-sync: 3.0.0
transitivePeerDependencies:
@@ -12865,7 +12876,7 @@ snapshots:
- '@babel/core'
- supports-color
- ember-cached-decorator-polyfill@1.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))):
+ ember-cached-decorator-polyfill@1.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))):
dependencies:
'@embroider/macros': 1.16.9(@glint/template@1.5.0)
'@glimmer/tracking': 1.1.2
@@ -12873,16 +12884,16 @@ snapshots:
ember-cache-primitive-polyfill: 1.0.1(@babel/core@7.26.0)
ember-cli-babel: 7.26.11
ember-cli-babel-plugin-helpers: 1.1.1
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
transitivePeerDependencies:
- '@babel/core'
- '@glint/template'
- supports-color
- ember-cli-app-version@7.0.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))):
+ ember-cli-app-version@7.0.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))):
dependencies:
ember-cli-babel: 7.26.11
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
git-repo-info: 2.1.1
transitivePeerDependencies:
- supports-color
@@ -12957,11 +12968,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ember-cli-deprecation-workflow@3.0.2(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))):
+ ember-cli-deprecation-workflow@3.0.2(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))):
dependencies:
'@babel/core': 7.26.0
ember-cli-babel: 8.2.0(@babel/core@7.26.0)
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
transitivePeerDependencies:
- supports-color
@@ -13306,21 +13317,21 @@ snapshots:
transitivePeerDependencies:
- eslint
- ember-exam@9.0.0(@glint/template@1.5.0)(ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.0))(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ ember-exam@9.0.0(@glint/template@1.5.0)(ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.1))(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.1)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
'@babel/core': 7.26.0
chalk: 5.3.0
cli-table3: 0.6.5
debug: 4.3.6
- ember-auto-import: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-auto-import: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel: 8.2.0(@babel/core@7.26.0)
- ember-qunit: 8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.0)
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-qunit: 8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.1)
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
execa: 8.0.1
fs-extra: 11.2.0
js-yaml: 4.1.0
npmlog: 7.0.1
- qunit: 2.23.0
+ qunit: 2.23.1
rimraf: 5.0.10
semver: 7.6.3
silent-error: 1.1.1
@@ -13329,9 +13340,9 @@ snapshots:
- supports-color
- webpack
- ember-load-initializers@3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))):
+ ember-load-initializers@3.0.1(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))):
dependencies:
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-modifier-manager-polyfill@1.2.0(@babel/core@7.26.0):
dependencies:
@@ -13342,24 +13353,24 @@ snapshots:
- '@babel/core'
- supports-color
- ember-modifier@4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))):
+ ember-modifier@4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))):
dependencies:
'@embroider/addon-shim': 1.9.0
decorator-transforms: 2.3.0(@babel/core@7.26.0)
ember-cli-normalize-entity-name: 1.0.0
ember-cli-string-utils: 1.1.0
optionalDependencies:
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
transitivePeerDependencies:
- '@babel/core'
- supports-color
- ember-on-resize-modifier@2.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ ember-on-resize-modifier@2.0.2(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
- ember-auto-import: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-auto-import: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel: 7.26.11
ember-cli-htmlbars: 5.7.2
- ember-modifier: 4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ ember-modifier: 4.2.0(@babel/core@7.26.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
ember-resize-observer-service: 1.1.0
transitivePeerDependencies:
- '@babel/core'
@@ -13368,14 +13379,14 @@ snapshots:
- supports-color
- webpack
- ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.0):
+ ember-qunit@8.1.1(@ember/test-helpers@4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))))(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))(qunit@2.23.1):
dependencies:
- '@ember/test-helpers': 4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)))
+ '@ember/test-helpers': 4.0.4(@babel/core@7.26.0)(@glint/template@1.5.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)))
'@embroider/addon-shim': 1.9.0
'@embroider/macros': 1.16.9(@glint/template@1.5.0)
ember-cli-test-loader: 3.1.0
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
- qunit: 2.23.0
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
+ qunit: 2.23.1
qunit-theme-ember: 1.0.0
transitivePeerDependencies:
- '@glint/template'
@@ -13388,11 +13399,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ember-resolver@13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))):
+ ember-resolver@13.1.0(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))):
dependencies:
ember-cli-babel: 7.26.11
optionalDependencies:
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
transitivePeerDependencies:
- supports-color
@@ -13418,7 +13429,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
'@babel/helper-module-imports': 7.25.9(supports-color@8.1.1)
'@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.26.0)
@@ -13450,7 +13461,7 @@ snapshots:
broccoli-funnel: 3.0.8
broccoli-merge-trees: 4.2.0
chalk: 4.1.2
- ember-auto-import: 2.10.0(@glint/template@1.5.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-auto-import: 2.10.0(@glint/template@1.5.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
ember-cli-babel: 7.26.11
ember-cli-get-component-path-option: 1.0.0
ember-cli-is-package-missing: 1.0.0
@@ -13542,7 +13553,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- ember-this-fallback@0.4.0(patch_hash=znalyv6akdxlqfpmxunrdi3osa)(ember-cli-htmlbars@6.3.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))):
+ ember-this-fallback@0.4.0(patch_hash=znalyv6akdxlqfpmxunrdi3osa)(ember-cli-htmlbars@6.3.0)(ember-source@5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))):
dependencies:
'@glimmer/syntax': 0.84.3
babel-plugin-ember-template-compilation: 2.2.5
@@ -13550,7 +13561,7 @@ snapshots:
ember-cli-babel: 7.26.11
ember-cli-htmlbars: 6.3.0
ember-cli-typescript: 5.3.0
- ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ ember-source: 5.5.0(@babel/core@7.26.0)(@glint/template@1.5.0)(rsvp@4.8.5)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
lodash: 4.17.21
winston: 3.14.2
zod: 3.23.8
@@ -14017,6 +14028,42 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ express@4.21.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.3
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.7.1
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.3.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.3
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.12
+ proxy-addr: 2.0.7
+ qs: 6.13.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.19.0
+ serve-static: 1.16.2
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
@@ -14827,11 +14874,11 @@ snapshots:
dependencies:
resolve-from: 5.0.0
- imports-loader@5.0.0(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ imports-loader@5.0.0(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
source-map-js: 1.2.0
strip-comments: 2.0.1
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
imurmurhash@0.1.4: {}
@@ -15299,48 +15346,48 @@ snapshots:
dependencies:
invert-kv: 3.0.1
- lefthook-darwin-arm64@1.8.5:
+ lefthook-darwin-arm64@1.9.0:
optional: true
- lefthook-darwin-x64@1.8.5:
+ lefthook-darwin-x64@1.9.0:
optional: true
- lefthook-freebsd-arm64@1.8.5:
+ lefthook-freebsd-arm64@1.9.0:
optional: true
- lefthook-freebsd-x64@1.8.5:
+ lefthook-freebsd-x64@1.9.0:
optional: true
- lefthook-linux-arm64@1.8.5:
+ lefthook-linux-arm64@1.9.0:
optional: true
- lefthook-linux-x64@1.8.5:
+ lefthook-linux-x64@1.9.0:
optional: true
- lefthook-openbsd-arm64@1.8.5:
+ lefthook-openbsd-arm64@1.9.0:
optional: true
- lefthook-openbsd-x64@1.8.5:
+ lefthook-openbsd-x64@1.9.0:
optional: true
- lefthook-windows-arm64@1.8.5:
+ lefthook-windows-arm64@1.9.0:
optional: true
- lefthook-windows-x64@1.8.5:
+ lefthook-windows-x64@1.9.0:
optional: true
- lefthook@1.8.5:
+ lefthook@1.9.0:
optionalDependencies:
- lefthook-darwin-arm64: 1.8.5
- lefthook-darwin-x64: 1.8.5
- lefthook-freebsd-arm64: 1.8.5
- lefthook-freebsd-x64: 1.8.5
- lefthook-linux-arm64: 1.8.5
- lefthook-linux-x64: 1.8.5
- lefthook-openbsd-arm64: 1.8.5
- lefthook-openbsd-x64: 1.8.5
- lefthook-windows-arm64: 1.8.5
- lefthook-windows-x64: 1.8.5
+ lefthook-darwin-arm64: 1.9.0
+ lefthook-darwin-x64: 1.9.0
+ lefthook-freebsd-arm64: 1.9.0
+ lefthook-freebsd-x64: 1.9.0
+ lefthook-linux-arm64: 1.9.0
+ lefthook-linux-x64: 1.9.0
+ lefthook-openbsd-arm64: 1.9.0
+ lefthook-openbsd-x64: 1.9.0
+ lefthook-windows-arm64: 1.9.0
+ lefthook-windows-x64: 1.9.0
levn@0.4.1:
dependencies:
@@ -15384,10 +15431,10 @@ snapshots:
dependencies:
uc.micro: 2.1.0
- lint-to-the-future-ember-template@2.0.0(ember-template-lint@6.0.0):
+ lint-to-the-future-ember-template@3.0.0(ember-template-lint@6.0.0):
dependencies:
+ content-tag: 3.0.0(patch_hash=lgdkxhmahesfzwpl4vwprolz5m)
ember-template-lint: 6.0.0
- esm: 3.2.25
walk-sync: 2.2.0
lint-to-the-future-eslint@2.2.0(eslint@9.14.0):
@@ -15691,11 +15738,11 @@ snapshots:
dependencies:
dom-walk: 0.1.2
- mini-css-extract-plugin@2.9.1(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ mini-css-extract-plugin@2.9.1(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
schema-utils: 4.2.0
tapable: 2.2.1
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
minimatch@3.1.2:
dependencies:
@@ -16269,6 +16316,8 @@ snapshots:
path-to-regexp@0.1.10: {}
+ path-to-regexp@0.1.12: {}
+
path-to-regexp@8.1.0: {}
path-type@4.0.0: {}
@@ -16449,7 +16498,7 @@ snapshots:
punycode@2.3.1: {}
- puppeteer-core@23.10.0:
+ puppeteer-core@23.10.1:
dependencies:
'@puppeteer/browsers': 2.5.0
chromium-bidi: 0.8.0(devtools-protocol@0.0.1367902)
@@ -16482,7 +16531,7 @@ snapshots:
qunit-theme-ember@1.0.0: {}
- qunit@2.23.0:
+ qunit@2.23.1:
dependencies:
commander: 7.2.0
node-watch: 0.7.3
@@ -17233,11 +17282,11 @@ snapshots:
strip-json-comments@3.1.1: {}
- style-loader@2.0.0(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ style-loader@2.0.0(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
loader-utils: 2.0.4
schema-utils: 3.3.0
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
styled_string@0.0.1: {}
@@ -17315,22 +17364,22 @@ snapshots:
mkdirp: 0.5.6
rimraf: 2.6.3
- terser-webpack-plugin@5.3.10(@swc/core@1.10.0)(esbuild@0.24.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ terser-webpack-plugin@5.3.10(@swc/core@1.10.0)(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.2
- terser: 5.36.0
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ terser: 5.37.0
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
optionalDependencies:
'@swc/core': 1.10.0
esbuild: 0.24.0
- terser@5.36.0:
+ terser@5.37.0:
dependencies:
'@jridgewell/source-map': 0.3.3
- acorn: 8.12.1
+ acorn: 8.14.0
commander: 2.20.3
source-map-support: 0.5.21
@@ -17344,7 +17393,7 @@ snapshots:
compression: 1.7.4
consolidate: 0.16.0(handlebars@4.7.8)(lodash@4.17.21)(mustache@4.2.0)(underscore@1.13.6)
execa: 1.0.0
- express: 4.21.1
+ express: 4.21.2
fireworm: 0.7.2
glob: 7.2.3
http-proxy: 1.18.1
@@ -17424,14 +17473,14 @@ snapshots:
textextensions@2.6.0: {}
- thread-loader@3.0.4(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ thread-loader@3.0.4(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
json-parse-better-errors: 1.0.2
loader-runner: 4.3.0
loader-utils: 2.0.4
neo-async: 2.6.2
schema-utils: 3.3.0
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
through2-filter@3.0.0:
dependencies:
@@ -17845,16 +17894,16 @@ snapshots:
webidl-conversions@7.0.0: {}
- webpack-retry-chunk-load-plugin@3.1.1(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)):
+ webpack-retry-chunk-load-plugin@3.1.1(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)):
dependencies:
prettier: 2.8.8
- webpack: 5.97.0(@swc/core@1.10.0)(esbuild@0.24.0)
+ webpack: 5.97.1(@swc/core@1.10.0)(esbuild@0.24.0)
webpack-sources@3.2.3: {}
webpack-stats-plugin@1.1.3: {}
- webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0):
+ webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.6
@@ -17876,7 +17925,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.10(@swc/core@1.10.0)(esbuild@0.24.0)(webpack@5.97.0(@swc/core@1.10.0)(esbuild@0.24.0))
+ terser-webpack-plugin: 5.3.10(@swc/core@1.10.0)(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.0)(esbuild@0.24.0))
watchpack: 2.4.2
webpack-sources: 3.2.3
transitivePeerDependencies:
diff --git a/spec/lib/svg_sprite/svg_sprite_spec.rb b/spec/lib/svg_sprite/svg_sprite_spec.rb
index a2711a0dc61..82829c4362c 100644
--- a/spec/lib/svg_sprite/svg_sprite_spec.rb
+++ b/spec/lib/svg_sprite/svg_sprite_spec.rb
@@ -26,13 +26,12 @@ RSpec.describe SvgSprite do
end
it "can search for a specific FA icon" do
- expect(SvgSprite.search("fa-heart")).to match(/heart/)
expect(SvgSprite.search("poo-storm")).to match(/poo-storm/)
expect(SvgSprite.search("this-is-not-an-icon")).to eq(false)
end
it "can get a raw SVG for an icon" do
- expect(SvgSprite.raw_svg("fa-heart")).to match(/svg.*svg/) # SVG inside SVG
+ expect(SvgSprite.raw_svg("heart")).to match(/svg.*svg/) # SVG inside SVG
expect(SvgSprite.raw_svg("this-is-not-an-icon")).to eq("")
end
diff --git a/spec/migrations/remap_fa5_icon_names_to_fa6_spec.rb b/spec/migrations/remap_to_fa6_icon_names_spec.rb
similarity index 86%
rename from spec/migrations/remap_fa5_icon_names_to_fa6_spec.rb
rename to spec/migrations/remap_to_fa6_icon_names_spec.rb
index c48d805af25..d11b98a43df 100644
--- a/spec/migrations/remap_fa5_icon_names_to_fa6_spec.rb
+++ b/spec/migrations/remap_to_fa6_icon_names_spec.rb
@@ -1,8 +1,8 @@
# frozen_string_literal: true
-require Rails.root.join("db/migrate/20241127072350_remap_fa5_icon_names_to_fa6.rb")
+require Rails.root.join("db/migrate/20241204085540_remap_to_fa6_icon_names.rb")
-RSpec.describe RemapFa5IconNamesToFa6 do
+RSpec.describe RemapToFa6IconNames do
let(:migrate) { described_class.new.up }
let(:icon_mapping) do
{
@@ -12,36 +12,28 @@ RSpec.describe RemapFa5IconNamesToFa6 do
"far fa-ambulance" => "far-truck-medical",
"fab fa-ambulance" => "fab-truck-medical",
"fas fa-ambulance" => "truck-medical",
+ "fa-gear" => "gear",
+ "far-gear" => "far-gear",
+ "fab-gear" => "fab-gear",
+ "far fa-gear" => "far-gear",
+ "fab fa-gear" => "fab-gear",
+ "fas fa-gear" => "gear",
+ "gear" => "gear",
}
end
context "when svg_icon_subset site setting has values to be remapped" do
- let(:svg_icon_subset_icon_mapping) do
- {
- "fa-ambulance" => "truck-medical",
- "far-ambulance" => "far-truck-medical",
- "fab-ambulance" => "fab-truck-medical",
- "far fa-ambulance" => "far-truck-medical",
- "far fa-gear" => "far-gear",
- "gear" => "gear",
- "fab fa-ambulance" => "fab-truck-medical",
- "fas fa-ambulance" => "truck-medical",
- }
- end
-
let!(:site_setting) do
SiteSetting.create!(
name: "svg_icon_subset",
- value: svg_icon_subset_icon_mapping.keys.join("|"),
+ value: icon_mapping.keys.join("|"),
data_type: SiteSettings::TypeSupervisor.types[:list],
)
end
it "remaps the values correctly" do
silence_stdout { migrate }
- expect(site_setting.reload.value.split("|")).to match_array(
- svg_icon_subset_icon_mapping.values,
- )
+ expect(site_setting.reload.value.split("|")).to match_array(icon_mapping.values)
end
end
diff --git a/spec/models/post_mover_spec.rb b/spec/models/post_mover_spec.rb
index d397e8f18f0..74fa2a9821f 100644
--- a/spec/models/post_mover_spec.rb
+++ b/spec/models/post_mover_spec.rb
@@ -314,8 +314,11 @@ RSpec.describe PostMover do
MovedPost.exists?(
new_topic: new_topic,
new_post_id: p2.id,
- old_topic: topic,
+ old_topic_id: topic.id,
+ old_topic_title: topic.title,
old_post_id: p2.id,
+ post_user_id: p2.user_id,
+ user_id: user.id,
created_new_topic: true,
),
).to eq(true)
@@ -323,8 +326,11 @@ RSpec.describe PostMover do
MovedPost.exists?(
new_topic: new_topic,
new_post_id: p4.id,
- old_topic: topic,
+ old_topic_id: topic.id,
+ old_topic_title: topic.title,
old_post_id: p4.id,
+ post_user_id: p4.user_id,
+ user_id: user.id,
created_new_topic: true,
),
).to eq(true)
@@ -695,8 +701,11 @@ RSpec.describe PostMover do
MovedPost.exists?(
new_topic: destination_topic,
new_post_id: p2.id,
- old_topic: topic,
+ old_topic_id: topic.id,
+ old_topic_title: topic.title,
old_post_id: p2.id,
+ post_user_id: p2.user_id,
+ user_id: user.id,
created_new_topic: false,
),
).to eq(true)
@@ -704,8 +713,11 @@ RSpec.describe PostMover do
MovedPost.exists?(
new_topic: destination_topic,
new_post_id: p4.id,
- old_topic: topic,
+ old_topic_id: topic.id,
+ old_topic_title: topic.title,
old_post_id: p4.id,
+ post_user_id: p4.user_id,
+ user_id: user.id,
created_new_topic: false,
),
).to eq(true)
@@ -2656,9 +2668,9 @@ RSpec.describe PostMover do
context "with freeze_original option" do
fab!(:original_topic) { Fabricate(:topic) }
fab!(:destination_topic) { Fabricate(:topic) }
- fab!(:op) { Fabricate(:post, topic: original_topic, raw: "op of this topic") }
+ fab!(:op) { Fabricate(:post, topic: original_topic, raw: "op of original topic") }
fab!(:op_of_destination) do
- Fabricate(:post, topic: destination_topic, raw: "op of this topic")
+ Fabricate(:post, topic: destination_topic, raw: "op of destination topic")
end
fab!(:first_post) { Fabricate(:post, topic: original_topic, raw: "first_post") }
fab!(:second_post) { Fabricate(:post, topic: original_topic, raw: "second_post") }
@@ -2703,8 +2715,11 @@ RSpec.describe PostMover do
expect(
MovedPost.exists?(
old_topic_id: original_topic.id,
- new_topic_id: destination_topic.id,
+ old_topic_title: original_topic.title,
old_post_id: first_post.id,
+ post_user_id: first_post.user_id,
+ user_id: Discourse.system_user.id,
+ new_topic_id: destination_topic.id,
),
).to eq(true)
end
@@ -2805,6 +2820,52 @@ RSpec.describe PostMover do
expect(pm.posts.map(&:raw)).to include(*moving_posts.map(&:raw))
end
+ describe "moved_post notifications" do
+ before { Jobs.run_immediately! }
+
+ describe "moving post other than first post" do
+ it "Generates notification pointing to destination topic" do
+ PostMover.new(
+ original_topic,
+ Discourse.system_user,
+ [first_post.id],
+ options: {
+ freeze_original: true,
+ },
+ ).to_topic(destination_topic.id)
+
+ notification =
+ Notification.find_by(
+ post_number: destination_topic.posts.find_by(raw: "first_post").post_number,
+ topic_id: destination_topic.id,
+ notification_type: Notification.types[:moved_post],
+ )
+ expect(notification).to be_present
+ end
+ end
+
+ describe "moving first post" do
+ it "Generates notification pointing to destination topic" do
+ PostMover.new(
+ original_topic,
+ Discourse.system_user,
+ [op.id],
+ options: {
+ freeze_original: true,
+ },
+ ).to_topic(destination_topic.id)
+
+ notification =
+ Notification.find_by(
+ post_number: destination_topic.posts.find_by(raw: op.raw).post_number,
+ topic_id: destination_topic.id,
+ notification_type: Notification.types[:moved_post],
+ )
+ expect(notification).to be_present
+ end
+ end
+ end
+
context "with rate limit" do
before do
RateLimiter.enable
diff --git a/spec/models/reviewable_spec.rb b/spec/models/reviewable_spec.rb
index de197304323..387e4f65115 100644
--- a/spec/models/reviewable_spec.rb
+++ b/spec/models/reviewable_spec.rb
@@ -621,6 +621,45 @@ RSpec.describe Reviewable, type: :model do
end
end
+ describe "#actions_for" do
+ fab!(:reviewable) { Fabricate(:reviewable_queued_post) }
+ fab!(:user)
+
+ it "gets the bundles and actions for a reviewable" do
+ actions = reviewable.actions_for(user.guardian)
+ expect(actions.bundles.map(&:id)).to eq(%w[approve_post reject_post revise_and_reject_post])
+ expect(actions.bundles.find { |b| b.id == "approve_post" }.actions.map(&:id)).to eq(
+ ["approve_post"],
+ )
+ expect(actions.bundles.find { |b| b.id == "reject_post" }.actions.map(&:id)).to eq(
+ ["reject_post"],
+ )
+ expect(actions.bundles.find { |b| b.id == "revise_and_reject_post" }.actions.map(&:id)).to eq(
+ ["revise_and_reject_post"],
+ )
+ end
+
+ describe "handling empty bundles" do
+ class ReviewableTestRecord < Reviewable
+ def build_actions(actions, guardian, args)
+ actions.add(:approve_post) do |action|
+ action.icon = "check"
+ action.label = "reviewables.actions.approve_post.title"
+ end
+ actions.add_bundle("empty_bundle", icon: "xmark", label: "Empty Bundle")
+ end
+ end
+
+ it "does not return empty bundles with no actions" do
+ actions = ReviewableTestRecord.new.actions_for(user.guardian)
+ expect(actions.bundles.map(&:id)).to eq(%w[approve_post])
+ expect(actions.bundles.find { |b| b.id == "approve_post" }.actions.map(&:id)).to eq(
+ ["approve_post"],
+ )
+ end
+ end
+ end
+
describe "default actions" do
let(:reviewable) { Reviewable.new }
let(:actions) { Reviewable::Actions.new(reviewable, Guardian.new) }
diff --git a/spec/requests/api/schemas/json/user_create_request.json b/spec/requests/api/schemas/json/user_create_request.json
index 92990832e57..0b37c168fb2 100644
--- a/spec/requests/api/schemas/json/user_create_request.json
+++ b/spec/requests/api/schemas/json/user_create_request.json
@@ -20,8 +20,14 @@
"approved": {
"type": "boolean"
},
- "user_fields[1]": {
- "type": "boolean"
+ "user_fields": {
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "1": {
+ "type": "boolean"
+ }
+ }
},
"external_ids": {
"type": "object"
diff --git a/spec/requests/topics_controller_spec.rb b/spec/requests/topics_controller_spec.rb
index 68d5ef2160d..04aaea156e8 100644
--- a/spec/requests/topics_controller_spec.rb
+++ b/spec/requests/topics_controller_spec.rb
@@ -166,6 +166,21 @@ RSpec.describe TopicsController do
expect(Tag.all.pluck(:name)).to include("foo", "bar")
end
+ describe "with freeze_original param" do
+ it "duplicates post to new topic and keeps original post in place" do
+ expect do
+ post "/t/#{topic.id}/move-posts.json",
+ params: {
+ title: "Logan is a good movie",
+ post_ids: [p2.id],
+ freeze_original: true,
+ }
+ end.to change { Topic.count }.by(1)
+ expect(response.status).to eq(200)
+ expect(topic.post_ids).to include(p2.id)
+ end
+ end
+
describe "when topic has been deleted" do
it "should still be able to move posts" do
PostDestroyer.new(admin, topic.first_post).destroy
@@ -308,6 +323,22 @@ RSpec.describe TopicsController do
expect(result["url"]).to be_present
end
+ describe "with freeze_original param" do
+ it "duplicates post to topic and keeps original post in place" do
+ expect do
+ post "/t/#{topic.id}/move-posts.json",
+ params: {
+ post_ids: [p2.id],
+ destination_topic_id: dest_topic.id,
+ freeze_original: true,
+ }
+ end.to change { dest_topic.posts.count }.by(1)
+ expect(response.status).to eq(200)
+ expect(topic.post_ids).to include(p2.id)
+ expect(dest_topic.posts.find_by(raw: p2.raw)).to be_present
+ end
+ end
+
it "triggers an event on merge" do
begin
called = false
diff --git a/spec/system/admin_sidebar_navigation_spec.rb b/spec/system/admin_sidebar_navigation_spec.rb
index 0b5464b97c8..dc5cd06d859 100644
--- a/spec/system/admin_sidebar_navigation_spec.rb
+++ b/spec/system/admin_sidebar_navigation_spec.rb
@@ -50,8 +50,8 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
it "collapses sections by default" do
visit("/admin")
links = page.all(".sidebar-section-link-content-text")
- expect(links.count).to eq(3)
- expect(links.map(&:text)).to eq(["Dashboard", "Users", "All Site Settings"])
+ expect(links.count).to eq(4)
+ expect(links.map(&:text)).to eq(["Dashboard", "Users", "All Site Settings", "What's New"])
end
context "when on mobile" do
@@ -173,8 +173,8 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
it "temporarily expands section when filter" do
visit("/admin")
links = page.all(".sidebar-section-link-content-text")
- expect(links.count).to eq(3)
- expect(links.map(&:text)).to eq(["Dashboard", "Users", "All Site Settings"])
+ expect(links.count).to eq(4)
+ expect(links.map(&:text)).to eq(["Dashboard", "Users", "All Site Settings", "What's New"])
filter.filter("ie")
links = page.all(".sidebar-section-link-content-text")
@@ -183,8 +183,8 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
filter.filter("")
links = page.all(".sidebar-section-link-content-text")
- expect(links.count).to eq(3)
- expect(links.map(&:text)).to eq(["Dashboard", "Users", "All Site Settings"])
+ expect(links.count).to eq(4)
+ expect(links.map(&:text)).to eq(["Dashboard", "Users", "All Site Settings", "What's New"])
end
it "allows further filtering of site settings or users if links do not show results" do
@@ -223,9 +223,9 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
expect(page).to have_selector(".sidebar-section-link-content-text", minimum: 50)
sidebar.toggle_all_sections
- expect(page).to have_selector(".sidebar-section-link-content-text", count: 3)
+ expect(page).to have_selector(".sidebar-section-link-content-text", count: 4)
expect(all(".sidebar-section-link-content-text").map(&:text)).to eq(
- ["Dashboard", "Users", "All Site Settings"],
+ ["Dashboard", "Users", "All Site Settings", "What's New"],
)
sidebar.toggle_all_sections
diff --git a/spec/system/admin_users_list_spec.rb b/spec/system/admin_users_list_spec.rb
index 84351655add..a1a4fe1fcf1 100644
--- a/spec/system/admin_users_list_spec.rb
+++ b/spec/system/admin_users_list_spec.rb
@@ -11,6 +11,11 @@ describe "Admin Users Page", type: :system do
before { sign_in(current_user) }
+ it "show correct breadcrumbs" do
+ admin_users_page.visit
+ expect(admin_users_page).to have_correct_breadcrumbs
+ end
+
describe "bulk user delete" do
let(:confirmation_modal) { PageObjects::Modals::BulkUserDeleteConfirmation.new }
diff --git a/spec/system/page_objects/pages/admin_users.rb b/spec/system/page_objects/pages/admin_users.rb
index 08096213850..baa43a3bc52 100644
--- a/spec/system/page_objects/pages/admin_users.rb
+++ b/spec/system/page_objects/pages/admin_users.rb
@@ -43,6 +43,12 @@ module PageObjects
all(".directory-table__row").size
end
+ def has_correct_breadcrumbs?
+ expect(all(".d-breadcrumbs__item").map(&:text)).to eq(
+ [I18n.t("js.admin_title"), I18n.t("admin_js.admin.users.title")],
+ )
+ end
+
def has_users?(user_ids)
user_ids.all? { |id| has_css?(".directory-table__row[data-user-id=\"#{id}\"]") }
end
diff --git a/spec/system/post_menu_spec.rb b/spec/system/post_menu_spec.rb
index 4e49c252c6e..879a6a70d6b 100644
--- a/spec/system/post_menu_spec.rb
+++ b/spec/system/post_menu_spec.rb
@@ -213,16 +213,30 @@ describe "Post menu", type: :system do
expect(topic_page).to have_no_post_action_button(post, :recover)
expect(topic_page).to have_no_post_action_button(post2, :recover)
- # do not display the recover button because when `user` deletes teh post. it's just marked for deletion
- # `user` cannot recover it.
+ # display the recover button when the POST was user deleted
+ # `post2` is marked for deletion and displays text (post deleted by author) but `user` as the author can
+ # recover it.
sign_in(user)
topic_page.visit_topic(post.topic)
+ expect(topic_page).to have_no_post_action_button(post, :recover)
+ expect(topic_page).to have_post_action_button(post2, :recover)
+
+ # do not display the recover button for other users when the post was USER deleted
+ sign_in(Fabricate(:user))
+ topic_page.visit_topic(post.topic)
expect(topic_page).to have_no_post_action_button(post, :recover)
expect(topic_page).to have_no_post_action_button(post2, :recover)
- # display the recover button for the deleted post because an admin is logged
+ # do not display the recover button even for admins when the post was USER deleted, because the action
+ # displayed for the admin is deleting the post to remove it from the post stream
+ sign_in(admin)
+ topic_page.visit_topic(post.topic)
+ expect(topic_page).to have_no_post_action_button(post, :recover)
+ expect(topic_page).to have_no_post_action_button(post2, :recover)
+
+ # display the recover button for an admin when the post was deleted
PostDestroyer.new(admin, post).destroy
sign_in(admin)
|