DEV: Bump `@discourse/lint-configs` and autofix (#29847)
In particular, this applies: - new `discourse/no-implicit-this` template-lint rule - `init`/`willDestroy` ordering enforcement - `lines-between-class-members`
This commit is contained in:
parent
581fb97bfa
commit
6f7c581a80
|
@ -88,6 +88,7 @@ export default class AdminFlagItem extends Component {
|
||||||
this.dMenu.close();
|
this.dMenu.close();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
edit() {
|
edit() {
|
||||||
this.router.transitionTo("adminConfig.flags.edit", this.args.flag);
|
this.router.transitionTo("adminConfig.flags.edit", this.args.flag);
|
||||||
|
|
|
@ -44,10 +44,12 @@ export default class EmbeddableHost extends Component.extend(
|
||||||
edit() {
|
edit() {
|
||||||
this.set("editToggled", true);
|
this.set("editToggled", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
onUserChange(user) {
|
onUserChange(user) {
|
||||||
this.set("user", user);
|
this.set("user", user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
save() {
|
save() {
|
||||||
if (this.cantSave) {
|
if (this.cantSave) {
|
||||||
|
|
|
@ -46,6 +46,11 @@ export default class InstallThemeModal extends Component {
|
||||||
keyGenUrl = this.args.model.keyGenUrl || "/admin/themes/generate_key_pair";
|
keyGenUrl = this.args.model.keyGenUrl || "/admin/themes/generate_key_pair";
|
||||||
importUrl = this.args.model.importUrl || "/admin/themes/import";
|
importUrl = this.args.model.importUrl || "/admin/themes/import";
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
this.args.model.clearParams?.();
|
||||||
|
}
|
||||||
|
|
||||||
get showPublicKey() {
|
get showPublicKey() {
|
||||||
return this.uploadUrl?.match?.(/^ssh:\/\/.+@.+$|.+@.+:.+$/);
|
return this.uploadUrl?.match?.(/^ssh:\/\/.+@.+$|.+@.+:.+$/);
|
||||||
}
|
}
|
||||||
|
@ -125,11 +130,6 @@ export default class InstallThemeModal extends Component {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
this.args.model.clearParams?.();
|
|
||||||
}
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
async generatePublicKey() {
|
async generatePublicKey() {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -96,6 +96,7 @@ export default class FileTypesList extends Component {
|
||||||
|
|
||||||
this.args.changeValueCallback(newTypes.join(TOKEN_SEPARATOR));
|
this.args.changeValueCallback(newTypes.join(TOKEN_SEPARATOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ListSetting
|
<ListSetting
|
||||||
@value={{this.settingValue}}
|
@value={{this.settingValue}}
|
||||||
|
|
|
@ -166,6 +166,7 @@ export default class ThemesList extends Component {
|
||||||
results = this._applyFilter(results);
|
results = this._applyFilter(results);
|
||||||
return this._searchThemes(results, this.searchTerm);
|
return this._searchThemes(results, this.searchTerm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@discourseComputed("themesList.@each.markedToDelete")
|
@discourseComputed("themesList.@each.markedToDelete")
|
||||||
someInactiveSelected() {
|
someInactiveSelected() {
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -26,6 +26,7 @@ export default class AdminUserBadgesController extends Controller {
|
||||||
availableBadges() {
|
availableBadges() {
|
||||||
return grantableBadges(this.get("allBadges"), this.get("userBadges"));
|
return grantableBadges(this.get("allBadges"), this.get("userBadges"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@discourseComputed("model", "model.[]", "model.expandedBadges.[]")
|
@discourseComputed("model", "model.[]", "model.expandedBadges.[]")
|
||||||
groupedBadges() {
|
groupedBadges() {
|
||||||
const allBadges = this.model;
|
const allBadges = this.model;
|
||||||
|
@ -71,6 +72,7 @@ export default class AdminUserBadgesController extends Controller {
|
||||||
|
|
||||||
return expanded.sortBy("granted_at").reverse();
|
return expanded.sortBy("granted_at").reverse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
expandGroup(userBadge) {
|
expandGroup(userBadge) {
|
||||||
const model = this.model;
|
const model = this.model;
|
||||||
|
|
|
@ -27,6 +27,11 @@ export default class DialogService extends Service {
|
||||||
class = null;
|
class = null;
|
||||||
_confirming = false;
|
_confirming = false;
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
this.dialogInstance?.destroy();
|
||||||
|
this.reset();
|
||||||
|
}
|
||||||
|
|
||||||
async dialog(params) {
|
async dialog(params) {
|
||||||
const {
|
const {
|
||||||
message,
|
message,
|
||||||
|
@ -171,11 +176,6 @@ export default class DialogService extends Service {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
this.dialogInstance?.destroy();
|
|
||||||
this.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
didConfirmWrapped() {
|
didConfirmWrapped() {
|
||||||
if (this.didConfirm) {
|
if (this.didConfirm) {
|
||||||
|
|
|
@ -9,6 +9,14 @@ export default class BasicTopicList extends Component {
|
||||||
|
|
||||||
@not("loaded") loading;
|
@not("loaded") loading;
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
const topicList = this.topicList;
|
||||||
|
if (topicList) {
|
||||||
|
this._initFromTopicList(topicList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@discourseComputed("topicList.loaded")
|
@discourseComputed("topicList.loaded")
|
||||||
loaded() {
|
loaded() {
|
||||||
let topicList = this.topicList;
|
let topicList = this.topicList;
|
||||||
|
@ -31,14 +39,6 @@ export default class BasicTopicList extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
const topicList = this.topicList;
|
|
||||||
if (topicList) {
|
|
||||||
this._initFromTopicList(topicList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
didInsertElement() {
|
didInsertElement() {
|
||||||
super.didInsertElement(...arguments);
|
super.didInsertElement(...arguments);
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,12 @@ export default class DEditor extends Component {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
|
||||||
|
this.register = getRegister(this);
|
||||||
|
}
|
||||||
|
|
||||||
@computed("formTemplateIds")
|
@computed("formTemplateIds")
|
||||||
get selectedFormTemplateId() {
|
get selectedFormTemplateId() {
|
||||||
if (this._selectedFormTemplateId) {
|
if (this._selectedFormTemplateId) {
|
||||||
|
@ -116,12 +122,6 @@ export default class DEditor extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
|
|
||||||
this.register = getRegister(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
didInsertElement() {
|
didInsertElement() {
|
||||||
super.didInsertElement(...arguments);
|
super.didInsertElement(...arguments);
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,11 @@ export default class DLightbox extends Component {
|
||||||
animationDuration = ANIMATION_DURATION;
|
animationDuration = ANIMATION_DURATION;
|
||||||
scrollPosition = 0;
|
scrollPosition = 0;
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
this.cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
get layoutType() {
|
get layoutType() {
|
||||||
return window.innerWidth > window.innerHeight
|
return window.innerWidth > window.innerHeight
|
||||||
? LAYOUT_TYPES.HORIZONTAL
|
? LAYOUT_TYPES.HORIZONTAL
|
||||||
|
@ -487,9 +492,4 @@ export default class DLightbox extends Component {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
this.cleanup();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,20 @@ export default class DiscourseTopic extends Component.extend(Scrolling) {
|
||||||
SHORT_POST = 1200;
|
SHORT_POST = 1200;
|
||||||
dockAt = 0;
|
dockAt = 0;
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
this.appEvents.on("discourse:focus-changed", this, "gotFocus");
|
||||||
|
this.appEvents.on("post:highlight", this, "_highlightPost");
|
||||||
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
|
||||||
|
// this happens after route exit, stuff could have trickled in
|
||||||
|
this.appEvents.off("discourse:focus-changed", this, "gotFocus");
|
||||||
|
this.appEvents.off("post:highlight", this, "_highlightPost");
|
||||||
|
}
|
||||||
|
|
||||||
@observes("enteredAt")
|
@observes("enteredAt")
|
||||||
_enteredTopic() {
|
_enteredTopic() {
|
||||||
// Ember is supposed to only call observers when values change but something
|
// Ember is supposed to only call observers when values change but something
|
||||||
|
@ -43,12 +57,6 @@ export default class DiscourseTopic extends Component.extend(Scrolling) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
this.appEvents.on("discourse:focus-changed", this, "gotFocus");
|
|
||||||
this.appEvents.on("post:highlight", this, "_highlightPost");
|
|
||||||
}
|
|
||||||
|
|
||||||
didInsertElement() {
|
didInsertElement() {
|
||||||
super.didInsertElement(...arguments);
|
super.didInsertElement(...arguments);
|
||||||
|
|
||||||
|
@ -61,14 +69,6 @@ export default class DiscourseTopic extends Component.extend(Scrolling) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
|
|
||||||
// this happens after route exit, stuff could have trickled in
|
|
||||||
this.appEvents.off("discourse:focus-changed", this, "gotFocus");
|
|
||||||
this.appEvents.off("post:highlight", this, "_highlightPost");
|
|
||||||
}
|
|
||||||
|
|
||||||
willDestroyElement() {
|
willDestroyElement() {
|
||||||
super.willDestroyElement(...arguments);
|
super.willDestroyElement(...arguments);
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,25 @@ export default class GlimmerSiteHeader extends Component {
|
||||||
schedule("afterRender", () => this.animateMenu());
|
schedule("afterRender", () => this.animateMenu());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
this.appEvents.off("user-menu:rendered", this, this.animateMenu);
|
||||||
|
|
||||||
|
if (this.dropDownHeaderEnabled) {
|
||||||
|
this.appEvents.off(
|
||||||
|
"sidebar-hamburger-dropdown:rendered",
|
||||||
|
this,
|
||||||
|
this.animateMenu
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._itsatrap?.destroy();
|
||||||
|
this._itsatrap = null;
|
||||||
|
|
||||||
|
window.removeEventListener("scroll", this._recalculateHeaderOffset);
|
||||||
|
this._resizeObserver?.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
get dropDownHeaderEnabled() {
|
get dropDownHeaderEnabled() {
|
||||||
return !this.sidebarEnabled || this.site.narrowDesktopView;
|
return !this.sidebarEnabled || this.site.narrowDesktopView;
|
||||||
}
|
}
|
||||||
|
@ -361,25 +380,6 @@ export default class GlimmerSiteHeader extends Component {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
this.appEvents.off("user-menu:rendered", this, this.animateMenu);
|
|
||||||
|
|
||||||
if (this.dropDownHeaderEnabled) {
|
|
||||||
this.appEvents.off(
|
|
||||||
"sidebar-hamburger-dropdown:rendered",
|
|
||||||
this,
|
|
||||||
this.animateMenu
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._itsatrap?.destroy();
|
|
||||||
this._itsatrap = null;
|
|
||||||
|
|
||||||
window.removeEventListener("scroll", this._recalculateHeaderOffset);
|
|
||||||
this._resizeObserver?.disconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class={{concatClass
|
class={{concatClass
|
||||||
|
|
|
@ -53,6 +53,13 @@ export default class BookmarkModal extends Component {
|
||||||
|
|
||||||
_itsatrap = new ItsATrap();
|
_itsatrap = new ItsATrap();
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
this._itsatrap?.destroy();
|
||||||
|
this._itsatrap = null;
|
||||||
|
KeyboardShortcuts.unpause();
|
||||||
|
}
|
||||||
|
|
||||||
get bookmark() {
|
get bookmark() {
|
||||||
return this.args.model.bookmark;
|
return this.args.model.bookmark;
|
||||||
}
|
}
|
||||||
|
@ -127,13 +134,6 @@ export default class BookmarkModal extends Component {
|
||||||
return labels;
|
return labels;
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
this._itsatrap?.destroy();
|
|
||||||
this._itsatrap = null;
|
|
||||||
KeyboardShortcuts.unpause();
|
|
||||||
}
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
didInsert() {
|
didInsert() {
|
||||||
discourseLater(() => {
|
discourseLater(() => {
|
||||||
|
|
|
@ -26,6 +26,7 @@ export default class ChangeOwnerModal extends Component {
|
||||||
get selectedPostsCount() {
|
get selectedPostsCount() {
|
||||||
return this.args.model.selectedPostsCount;
|
return this.args.model.selectedPostsCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
async changeOwnershipOfPosts() {
|
async changeOwnershipOfPosts() {
|
||||||
this.saving = true;
|
this.saving = true;
|
||||||
|
|
|
@ -141,9 +141,11 @@ export default class PluginOutletComponent extends GlimmerComponentWithDeprecate
|
||||||
});
|
});
|
||||||
return this.#parentView;
|
return this.#parentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
set parentView(value) {
|
set parentView(value) {
|
||||||
this.#parentView = value;
|
this.#parentView = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
get _parentView() {
|
get _parentView() {
|
||||||
return this.parentView;
|
return this.parentView;
|
||||||
}
|
}
|
||||||
|
@ -166,9 +168,11 @@ class PluginOutletWithTagNameWrapper extends ClassicComponent {
|
||||||
return this.#parentView.parentView;
|
return this.#parentView.parentView;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set parentView(value) {
|
set parentView(value) {
|
||||||
this.#parentView = value;
|
this.#parentView = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
get _parentView() {
|
get _parentView() {
|
||||||
return this.parentView;
|
return this.parentView;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,14 @@ export default class SearchMenu extends Component {
|
||||||
_debouncer = null;
|
_debouncer = null;
|
||||||
_activeSearch = null;
|
_activeSearch = null;
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
if (!this.args.inlineResults) {
|
||||||
|
document.removeEventListener("mousedown", this.onDocumentPress);
|
||||||
|
document.removeEventListener("touchend", this.onDocumentPress);
|
||||||
|
}
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
setupEventListeners() {
|
setupEventListeners() {
|
||||||
// We only need to register click events when the search menu is rendered outside of the header.
|
// We only need to register click events when the search menu is rendered outside of the header.
|
||||||
|
@ -57,14 +65,6 @@ export default class SearchMenu extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
if (!this.args.inlineResults) {
|
|
||||||
document.removeEventListener("mousedown", this.onDocumentPress);
|
|
||||||
document.removeEventListener("touchend", this.onDocumentPress);
|
|
||||||
}
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
}
|
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
onDocumentPress(event) {
|
onDocumentPress(event) {
|
||||||
if (!this.menuPanelOpen) {
|
if (!this.menuPanelOpen) {
|
||||||
|
|
|
@ -17,6 +17,13 @@ export default class Sidebar extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
if (this.site.mobileView) {
|
||||||
|
document.removeEventListener("click", this.collapseSidebar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
get showSwitchPanelButtonsOnTop() {
|
get showSwitchPanelButtonsOnTop() {
|
||||||
return this.siteSettings.default_sidebar_switch_panel_position === "top";
|
return this.siteSettings.default_sidebar_switch_panel_position === "top";
|
||||||
}
|
}
|
||||||
|
@ -55,11 +62,4 @@ export default class Sidebar extends Component {
|
||||||
this.args.toggleSidebar();
|
this.args.toggleSidebar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
if (this.site.mobileView) {
|
|
||||||
document.removeEventListener("click", this.collapseSidebar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ export default class SectionFormLink extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
dragEnter() {
|
dragEnter() {
|
||||||
this.dragCount++;
|
this.dragCount++;
|
||||||
|
|
|
@ -205,6 +205,7 @@ class PmRemoveLink extends Component {
|
||||||
didConfirm: () => this.args.removeAllowedUser(this.args.model),
|
didConfirm: () => this.args.removeAllowedUser(this.args.model),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<DButton
|
<DButton
|
||||||
class="remove-invited"
|
class="remove-invited"
|
||||||
|
|
|
@ -101,6 +101,7 @@ export default class extends Controller {
|
||||||
)
|
)
|
||||||
.filter((t) => t);
|
.filter((t) => t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@computed(
|
@computed(
|
||||||
"model.watchedCategories",
|
"model.watchedCategories",
|
||||||
"model.mutedCategories",
|
"model.mutedCategories",
|
||||||
|
|
|
@ -12,6 +12,17 @@ export default class UsersController extends Controller {
|
||||||
)
|
)
|
||||||
allowPmUsersEnabled;
|
allowPmUsersEnabled;
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
|
||||||
|
this.saveAttrNames = [
|
||||||
|
"allow_private_messages",
|
||||||
|
"muted_usernames",
|
||||||
|
"allowed_pm_usernames",
|
||||||
|
"enable_allowed_pm_users",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
@computed("model.muted_usernames")
|
@computed("model.muted_usernames")
|
||||||
get mutedUsernames() {
|
get mutedUsernames() {
|
||||||
let usernames = this.model.muted_usernames;
|
let usernames = this.model.muted_usernames;
|
||||||
|
@ -34,17 +45,6 @@ export default class UsersController extends Controller {
|
||||||
return makeArray(usernames).uniq();
|
return makeArray(usernames).uniq();
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
|
|
||||||
this.saveAttrNames = [
|
|
||||||
"allow_private_messages",
|
|
||||||
"muted_usernames",
|
|
||||||
"allowed_pm_usernames",
|
|
||||||
"enable_allowed_pm_users",
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
onChangeMutedUsernames(usernames) {
|
onChangeMutedUsernames(usernames) {
|
||||||
this.model.set("muted_usernames", usernames.uniq().join(","));
|
this.model.set("muted_usernames", usernames.uniq().join(","));
|
||||||
|
|
|
@ -2273,6 +2273,7 @@ class PluginApi {
|
||||||
addSaveableUserField(fieldName) {
|
addSaveableUserField(fieldName) {
|
||||||
addSaveableUserField(fieldName);
|
addSaveableUserField(fieldName);
|
||||||
}
|
}
|
||||||
|
|
||||||
addSaveableUserOptionField(fieldName) {
|
addSaveableUserOptionField(fieldName) {
|
||||||
addSaveableUserOptionField(fieldName);
|
addSaveableUserOptionField(fieldName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ export default class UserMenuBaseItem {
|
||||||
this.site = site;
|
this.site = site;
|
||||||
this.siteSettings = siteSettings;
|
this.siteSettings = siteSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
get className() {}
|
get className() {}
|
||||||
|
|
||||||
get linkHref() {
|
get linkHref() {
|
||||||
|
|
|
@ -81,13 +81,6 @@ export default class Site extends RestModel.extend().reopenClass(Singleton) {
|
||||||
|
|
||||||
@sort("categories", "topicCountDesc") categoriesByCount;
|
@sort("categories", "topicCountDesc") categoriesByCount;
|
||||||
|
|
||||||
@computed("categories.[]")
|
|
||||||
get categoriesById() {
|
|
||||||
const map = new Map();
|
|
||||||
this.categories.forEach((c) => map.set(c.id, c));
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
super.init(...arguments);
|
super.init(...arguments);
|
||||||
|
|
||||||
|
@ -95,6 +88,13 @@ export default class Site extends RestModel.extend().reopenClass(Singleton) {
|
||||||
this.categories = this.categories || [];
|
this.categories = this.categories || [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@computed("categories.[]")
|
||||||
|
get categoriesById() {
|
||||||
|
const map = new Map();
|
||||||
|
this.categories.forEach((c) => map.set(c.id, c));
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
@discourseComputed("notification_types")
|
@discourseComputed("notification_types")
|
||||||
notificationLookup(notificationTypes) {
|
notificationLookup(notificationTypes) {
|
||||||
const result = [];
|
const result = [];
|
||||||
|
|
|
@ -26,10 +26,6 @@ export default class ClientErrorHandlerService extends Service {
|
||||||
document.addEventListener("discourse-error", this.handleDiscourseError);
|
document.addEventListener("discourse-error", this.handleDiscourseError);
|
||||||
}
|
}
|
||||||
|
|
||||||
get rootElement() {
|
|
||||||
return document.querySelector(getOwner(this).rootElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
willDestroy() {
|
willDestroy() {
|
||||||
document.removeEventListener("discourse-error", this.handleDiscourseError);
|
document.removeEventListener("discourse-error", this.handleDiscourseError);
|
||||||
this.rootElement
|
this.rootElement
|
||||||
|
@ -37,6 +33,10 @@ export default class ClientErrorHandlerService extends Service {
|
||||||
.forEach((e) => e.remove());
|
.forEach((e) => e.remove());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get rootElement() {
|
||||||
|
return document.querySelector(getOwner(this).rootElement);
|
||||||
|
}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
handleDiscourseError(e) {
|
handleDiscourseError(e) {
|
||||||
if (e.detail?.themeId) {
|
if (e.detail?.themeId) {
|
||||||
|
|
|
@ -60,6 +60,10 @@ export default class LightboxService extends Service {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
this.#reset();
|
||||||
|
}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
async onLightboxOpened({ items, currentItem }) {
|
async onLightboxOpened({ items, currentItem }) {
|
||||||
this.originalSiteThemeColor = await getSiteThemeColor();
|
this.originalSiteThemeColor = await getSiteThemeColor();
|
||||||
|
@ -268,8 +272,4 @@ export default class LightboxService extends Service {
|
||||||
|
|
||||||
event.target.toggleAttribute(SELECTORS.DOCUMENT_LAST_FOCUSED_ELEMENT);
|
event.target.toggleAttribute(SELECTORS.DOCUMENT_LAST_FOCUSED_ELEMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
this.#reset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,10 @@ export default class NotificationsService extends Service {
|
||||||
this._checkDoNotDisturb();
|
this._checkDoNotDisturb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
clearTimeout(this.#dndTimer);
|
||||||
|
}
|
||||||
|
|
||||||
_checkDoNotDisturb() {
|
_checkDoNotDisturb() {
|
||||||
clearTimeout(this.#dndTimer);
|
clearTimeout(this.#dndTimer);
|
||||||
|
|
||||||
|
@ -38,8 +42,4 @@ export default class NotificationsService extends Service {
|
||||||
this.isInDoNotDisturb = false;
|
this.isInDoNotDisturb = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
clearTimeout(this.#dndTimer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -277,10 +277,6 @@ export default class PresenceService extends Service {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get _presentChannels() {
|
|
||||||
return new Set(this._presentProxies.keys());
|
|
||||||
}
|
|
||||||
|
|
||||||
willDestroy() {
|
willDestroy() {
|
||||||
super.willDestroy(...arguments);
|
super.willDestroy(...arguments);
|
||||||
window.removeEventListener("beforeunload", this._beaconLeaveAll);
|
window.removeEventListener("beforeunload", this._beaconLeaveAll);
|
||||||
|
@ -288,6 +284,10 @@ export default class PresenceService extends Service {
|
||||||
cancel(this._debounceTimer);
|
cancel(this._debounceTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get _presentChannels() {
|
||||||
|
return new Set(this._presentProxies.keys());
|
||||||
|
}
|
||||||
|
|
||||||
// Get a PresenceChannel object representing a single channel
|
// Get a PresenceChannel object representing a single channel
|
||||||
getChannel(channelName) {
|
getChannel(channelName) {
|
||||||
return PresenceChannel.create({
|
return PresenceChannel.create({
|
||||||
|
|
|
@ -24,6 +24,17 @@ export default class RouteScrollManager extends Service {
|
||||||
? document.getElementById("ember-testing-container")
|
? document.getElementById("ember-testing-container")
|
||||||
: document.scrollingElement;
|
: document.scrollingElement;
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
this.router.on("routeDidChange", this.routeDidChange);
|
||||||
|
this.router.on("routeWillChange", this.routeWillChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
this.router.off("routeDidChange", this.routeDidChange);
|
||||||
|
this.router.off("routeWillChange", this.routeWillChange);
|
||||||
|
}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
routeWillChange() {
|
routeWillChange() {
|
||||||
this.historyStore.set(STORE_KEY, [
|
this.historyStore.set(STORE_KEY, [
|
||||||
|
@ -63,15 +74,4 @@ export default class RouteScrollManager extends Service {
|
||||||
// No overrides - default to true
|
// No overrides - default to true
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
this.router.on("routeDidChange", this.routeDidChange);
|
|
||||||
this.router.on("routeWillChange", this.routeWillChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
this.router.off("routeDidChange", this.routeDidChange);
|
|
||||||
this.router.off("routeWillChange", this.routeWillChange);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,15 +52,6 @@ export default class PostCooked {
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
update(prev) {
|
|
||||||
if (
|
|
||||||
prev.attrs.cooked !== this.attrs.cooked ||
|
|
||||||
prev.attrs.highlightTerm !== this.attrs.highlightTerm
|
|
||||||
) {
|
|
||||||
return this.init();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this.originalQuoteContents = null;
|
this.originalQuoteContents = null;
|
||||||
// todo should be a better way of detecting if it is composer preview
|
// todo should be a better way of detecting if it is composer preview
|
||||||
|
@ -77,6 +68,15 @@ export default class PostCooked {
|
||||||
return this.cookedDiv;
|
return this.cookedDiv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update(prev) {
|
||||||
|
if (
|
||||||
|
prev.attrs.cooked !== this.attrs.cooked ||
|
||||||
|
prev.attrs.highlightTerm !== this.attrs.highlightTerm
|
||||||
|
) {
|
||||||
|
return this.init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
this._stopTrackingMentionedUsersStatus();
|
this._stopTrackingMentionedUsersStatus();
|
||||||
destroyUserStatusOnMentions();
|
destroyUserStatusOnMentions();
|
||||||
|
|
|
@ -183,6 +183,7 @@ export default class Widget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init() {}
|
||||||
transform() {
|
transform() {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
@ -191,8 +192,6 @@ export default class Widget {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {}
|
|
||||||
|
|
||||||
destroy() {}
|
destroy() {}
|
||||||
|
|
||||||
get(propertyPath) {
|
get(propertyPath) {
|
||||||
|
|
|
@ -8,6 +8,7 @@ class BroccoliNoOp extends Plugin {
|
||||||
constructor(path) {
|
constructor(path) {
|
||||||
super([new WatchedDir(path)]);
|
super([new WatchedDir(path)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {}
|
build() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,6 @@ acceptance("Sidebar - Plugin API", function (needs) {
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
willDestroy = () => (sectionDestroy = "section test");
|
|
||||||
|
|
||||||
links = [
|
links = [
|
||||||
new (class extends BaseCustomSidebarSectionLink {
|
new (class extends BaseCustomSidebarSectionLink {
|
||||||
name = "random-channel";
|
name = "random-channel";
|
||||||
|
@ -99,6 +97,7 @@ acceptance("Sidebar - Plugin API", function (needs) {
|
||||||
text = "Homepage";
|
text = "Homepage";
|
||||||
})(),
|
})(),
|
||||||
];
|
];
|
||||||
|
willDestroy = () => (sectionDestroy = "section test");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -14,6 +14,7 @@ acceptance("Acceptance | decorateCookedElement", function () {
|
||||||
DemoComponent.eventLog.push("created");
|
DemoComponent.eventLog.push("created");
|
||||||
super(...arguments);
|
super(...arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
willDestroy() {
|
||||||
super.willDestroy(...arguments);
|
super.willDestroy(...arguments);
|
||||||
DemoComponent.eventLog.push("willDestroy");
|
DemoComponent.eventLog.push("willDestroy");
|
||||||
|
|
|
@ -47,6 +47,7 @@ class DemoWidget extends Widget {
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
dummyAction() {}
|
dummyAction() {}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
|
@ -67,6 +68,11 @@ class DemoComponent extends ClassicComponent {
|
||||||
super.init(...arguments);
|
super.init(...arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
DemoComponent.eventLog.push("willDestroy");
|
||||||
|
}
|
||||||
|
|
||||||
didInsertElement() {
|
didInsertElement() {
|
||||||
super.didInsertElement(...arguments);
|
super.didInsertElement(...arguments);
|
||||||
DemoComponent.eventLog.push("didInsertElement");
|
DemoComponent.eventLog.push("didInsertElement");
|
||||||
|
@ -81,11 +87,6 @@ class DemoComponent extends ClassicComponent {
|
||||||
super.didReceiveAttrs(...arguments);
|
super.didReceiveAttrs(...arguments);
|
||||||
DemoComponent.eventLog.push("didReceiveAttrs");
|
DemoComponent.eventLog.push("didReceiveAttrs");
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
DemoComponent.eventLog.push("willDestroy");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ToggleDemoWidget extends Widget {
|
class ToggleDemoWidget extends Widget {
|
||||||
|
|
|
@ -123,9 +123,11 @@ module("Unit | Utility | plugin-api", function (hooks) {
|
||||||
static someStaticMethod() {
|
static someStaticMethod() {
|
||||||
return "original static method";
|
return "original static method";
|
||||||
}
|
}
|
||||||
|
|
||||||
someFunction() {
|
someFunction() {
|
||||||
return "original function";
|
return "original function";
|
||||||
}
|
}
|
||||||
|
|
||||||
get someGetter() {
|
get someGetter() {
|
||||||
return "original getter";
|
return "original getter";
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,6 +253,7 @@ export default class CategoryRow extends Component {
|
||||||
description.length > limit ? "…" : ""
|
description.length > limit ? "…" : ""
|
||||||
}`;
|
}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
_isValidInput(eventKey) {
|
_isValidInput(eventKey) {
|
||||||
// relying on passing the event to the input is risky as it could not work
|
// relying on passing the event to the input is risky as it could not work
|
||||||
// dispatching the event won't work as the event won't be trusted
|
// dispatching the event won't work as the event won't be trusted
|
||||||
|
|
|
@ -23,6 +23,16 @@ export default class TagChooser extends MultiSelectComponent.extend(TagsMixin) {
|
||||||
excludeSynonyms = false;
|
excludeSynonyms = false;
|
||||||
excludeHasSynonyms = false;
|
excludeHasSynonyms = false;
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
|
||||||
|
this.setProperties({
|
||||||
|
blockedTags: this.blockedTags || [],
|
||||||
|
termMatchesForbidden: false,
|
||||||
|
termMatchErrorMessage: null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
modifyComponentForRow(collection, item) {
|
modifyComponentForRow(collection, item) {
|
||||||
if (this.getValue(item) === this.selectKit.filter && !item.count) {
|
if (this.getValue(item) === this.selectKit.filter && !item.count) {
|
||||||
return "select-kit/select-kit-row";
|
return "select-kit/select-kit-row";
|
||||||
|
@ -50,16 +60,6 @@ export default class TagChooser extends MultiSelectComponent.extend(TagsMixin) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
|
|
||||||
this.setProperties({
|
|
||||||
blockedTags: this.blockedTags || [],
|
|
||||||
termMatchesForbidden: false,
|
|
||||||
termMatchErrorMessage: null,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@computed("tags.[]")
|
@computed("tags.[]")
|
||||||
get value() {
|
get value() {
|
||||||
return makeArray(this.tags).uniq();
|
return makeArray(this.tags).uniq();
|
||||||
|
|
|
@ -40,6 +40,12 @@ export default class TagDrop extends ComboBoxComponent.extend(TagsMixin) {
|
||||||
|
|
||||||
@readOnly("tagId") value;
|
@readOnly("tagId") value;
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
|
||||||
|
this.insertAfterCollection(MAIN_COLLECTION, MORE_TAGS_COLLECTION);
|
||||||
|
}
|
||||||
|
|
||||||
@computed("maxTagsInFilterList", "topTags.[]", "mainCollection.[]")
|
@computed("maxTagsInFilterList", "topTags.[]", "mainCollection.[]")
|
||||||
get shouldShowMoreTags() {
|
get shouldShowMoreTags() {
|
||||||
if (this.selectKit.filter?.length > 0) {
|
if (this.selectKit.filter?.length > 0) {
|
||||||
|
@ -49,12 +55,6 @@ export default class TagDrop extends ComboBoxComponent.extend(TagsMixin) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
|
|
||||||
this.insertAfterCollection(MAIN_COLLECTION, MORE_TAGS_COLLECTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
modifyComponentForCollection(collection) {
|
modifyComponentForCollection(collection) {
|
||||||
if (collection === MORE_TAGS_COLLECTION) {
|
if (collection === MORE_TAGS_COLLECTION) {
|
||||||
return FilterForMore;
|
return FilterForMore;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
"license": "GPL-2.0-only",
|
"license": "GPL-2.0-only",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/plugin-proposal-decorators": "^7.25.9",
|
"@babel/plugin-proposal-decorators": "^7.25.9",
|
||||||
"@discourse/lint-configs": "^2.1.0",
|
"@discourse/lint-configs": "^2.2.0",
|
||||||
"@discourse/moment-timezone-names-translations": "^1.0.0",
|
"@discourse/moment-timezone-names-translations": "^1.0.0",
|
||||||
"@fortawesome/fontawesome-free": "6.6.0",
|
"@fortawesome/fontawesome-free": "6.6.0",
|
||||||
"@glint/core": "^1.5.0",
|
"@glint/core": "^1.5.0",
|
||||||
|
@ -45,8 +45,8 @@
|
||||||
"lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"",
|
"lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"",
|
||||||
"lint:js": "eslint ./app/assets/javascripts $(script/list_bundled_plugins) --cache --no-error-on-unmatched-pattern",
|
"lint:js": "eslint ./app/assets/javascripts $(script/list_bundled_plugins) --cache --no-error-on-unmatched-pattern",
|
||||||
"lint:js:fix": "eslint --fix ./app/assets/javascripts $(script/list_bundled_plugins) --no-error-on-unmatched-pattern",
|
"lint:js:fix": "eslint --fix ./app/assets/javascripts $(script/list_bundled_plugins) --no-error-on-unmatched-pattern",
|
||||||
"lint:hbs": "ember-template-lint 'app/assets/javascripts/**/*.{gjs,hbs}' 'plugins/**/assets/javascripts/**/*.{gjs,hbs}' --no-error-on-unmatched-pattern",
|
"lint:hbs": "ember-template-lint 'app/assets/javascripts/**/*.{gjs,hbs}' $(script/list_bundled_plugins '/assets/javascripts/**/*.{gjs,hbs}') --no-error-on-unmatched-pattern",
|
||||||
"lint:hbs:fix": "ember-template-lint 'app/assets/javascripts/**/*.{gjs,hbs}' 'plugins/**/assets/javascripts/**/*.{gjs,hbs}' --no-error-on-unmatched-pattern --fix",
|
"lint:hbs:fix": "ember-template-lint 'app/assets/javascripts/**/*.{gjs,hbs}' $(script/list_bundled_plugins '/assets/javascripts/**/*.{gjs,hbs}') --no-error-on-unmatched-pattern --fix",
|
||||||
"lint:prettier": "pnpm pprettier --list-different 'app/assets/stylesheets/**/*.scss' 'app/assets/javascripts/**/*.{js,gjs,hbs}' $(script/list_bundled_plugins '/assets/stylesheets/**/*.scss') $(script/list_bundled_plugins '/assets/javascripts/**/*.{js,gjs,hbs}')",
|
"lint:prettier": "pnpm pprettier --list-different 'app/assets/stylesheets/**/*.scss' 'app/assets/javascripts/**/*.{js,gjs,hbs}' $(script/list_bundled_plugins '/assets/stylesheets/**/*.scss') $(script/list_bundled_plugins '/assets/javascripts/**/*.{js,gjs,hbs}')",
|
||||||
"lint:prettier:fix": "pnpm prettier -w 'app/assets/stylesheets/**/*.scss' 'app/assets/javascripts/**/*.{js,gjs,hbs}' $(script/list_bundled_plugins '/assets/stylesheets/**/*.scss') $(script/list_bundled_plugins '/assets/javascripts/**/*.{js,gjs,hbs}')",
|
"lint:prettier:fix": "pnpm prettier -w 'app/assets/stylesheets/**/*.scss' 'app/assets/javascripts/**/*.{js,gjs,hbs}' $(script/list_bundled_plugins '/assets/stylesheets/**/*.scss') $(script/list_bundled_plugins '/assets/javascripts/**/*.{js,gjs,hbs}')",
|
||||||
"lttf:ignore": "lint-to-the-future ignore",
|
"lttf:ignore": "lint-to-the-future ignore",
|
||||||
|
|
|
@ -106,7 +106,7 @@
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#each triggerFields as |field|}}
|
{{#each this.triggerFields as |field|}}
|
||||||
<AutomationField
|
<AutomationField
|
||||||
@automation={{this.automation}}
|
@automation={{this.automation}}
|
||||||
@field={{field}}
|
@field={{field}}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{{#if model.length}}
|
{{#if this.model.length}}
|
||||||
<table class="automations">
|
<table class="automations">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{{#each model as |automation|}}
|
{{#each this.model as |automation|}}
|
||||||
<tr>
|
<tr>
|
||||||
{{#if automation.script.not_found}}
|
{{#if automation.script.not_found}}
|
||||||
<td colspan="5" class="alert alert-danger">
|
<td colspan="5" class="alert alert-danger">
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
{{i18n "discourse_automation.title"}}
|
{{i18n "discourse_automation.title"}}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
{{#if showNewAutomation}}
|
{{#if this.showNewAutomation}}
|
||||||
<DButton
|
<DButton
|
||||||
@label="discourse_automation.create"
|
@label="discourse_automation.create"
|
||||||
@icon="plus"
|
@icon="plus"
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
|
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<Input
|
<Input
|
||||||
@value={{metadata.topic_id}}
|
@value={{this.metadata.topic_id}}
|
||||||
{{on "input" (action (mut metadata.topic_id) value="target.value")}}
|
{{on "input" (action (mut this.metadata.topic_id) value="target.value")}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -5,5 +5,5 @@
|
||||||
class="incoming-chat-webhooks-back"
|
class="incoming-chat-webhooks-back"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ChatIncomingWebhookEditForm @chatChannels={{model.chat_channels}} />
|
<ChatIncomingWebhookEditForm @chatChannels={{this.model.chat_channels}} />
|
||||||
</div>
|
</div>
|
|
@ -5,10 +5,10 @@
|
||||||
class="incoming-chat-webhooks-back"
|
class="incoming-chat-webhooks-back"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ConditionalLoadingSpinner @condition={{not model.webhook}}>
|
<ConditionalLoadingSpinner @condition={{not this.model.webhook}}>
|
||||||
<ChatIncomingWebhookEditForm
|
<ChatIncomingWebhookEditForm
|
||||||
@webhook={{model.webhook}}
|
@webhook={{this.model.webhook}}
|
||||||
@chatChannels={{model.chat_channels}}
|
@chatChannels={{this.model.chat_channels}}
|
||||||
/>
|
/>
|
||||||
</ConditionalLoadingSpinner>
|
</ConditionalLoadingSpinner>
|
||||||
</div>
|
</div>
|
|
@ -24,6 +24,12 @@ export default class ChatChannelMessageEmojiPicker extends Component {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@action
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
this._popper?.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
didSelectEmoji(emoji) {
|
didSelectEmoji(emoji) {
|
||||||
this.chatEmojiPickerManager.picker?.didSelectEmoji(emoji);
|
this.chatEmojiPickerManager.picker?.didSelectEmoji(emoji);
|
||||||
|
@ -58,12 +64,6 @@ export default class ChatChannelMessageEmojiPicker extends Component {
|
||||||
element.classList.remove("hidden");
|
element.classList.remove("hidden");
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
this._popper?.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ChatEmojiPicker
|
<ChatEmojiPicker
|
||||||
{{this.listenToBodyScroll}}
|
{{this.listenToBodyScroll}}
|
||||||
|
|
|
@ -43,6 +43,7 @@ export default class ChatFooter extends Component {
|
||||||
this.siteSettings.enable_public_channels,
|
this.siteSettings.enable_public_channels,
|
||||||
].filter(Boolean).length;
|
].filter(Boolean).length;
|
||||||
}
|
}
|
||||||
|
|
||||||
get shouldRenderFooter() {
|
get shouldRenderFooter() {
|
||||||
return (
|
return (
|
||||||
(this.site.mobileView || this.chatStateManager.isDrawerExpanded) &&
|
(this.site.mobileView || this.chatStateManager.isDrawerExpanded) &&
|
||||||
|
|
|
@ -21,17 +21,17 @@ export default class ChatHeader extends Component {
|
||||||
this.router.on("routeDidChange", this, this.#updatePreviousURL);
|
this.router.on("routeDidChange", this, this.#updatePreviousURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
this.router.off("routeDidChange", this, this.#updatePreviousURL);
|
||||||
|
}
|
||||||
|
|
||||||
get shouldRender() {
|
get shouldRender() {
|
||||||
return (
|
return (
|
||||||
this.siteSettings.chat_enabled && this.site.mobileView && this.isChatOpen
|
this.siteSettings.chat_enabled && this.site.mobileView && this.isChatOpen
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
this.router.off("routeDidChange", this, this.#updatePreviousURL);
|
|
||||||
}
|
|
||||||
|
|
||||||
get isChatOpen() {
|
get isChatOpen() {
|
||||||
return this.router.currentURL.startsWith("/chat");
|
return this.router.currentURL.startsWith("/chat");
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,6 @@ export default class UserThreads extends Component {
|
||||||
|
|
||||||
trackedChannels = {};
|
trackedChannels = {};
|
||||||
|
|
||||||
@cached
|
|
||||||
get threadsCollection() {
|
|
||||||
return this.chatApi.userThreads(this.handleLoadedThreads);
|
|
||||||
}
|
|
||||||
|
|
||||||
willDestroy() {
|
willDestroy() {
|
||||||
super.willDestroy(...arguments);
|
super.willDestroy(...arguments);
|
||||||
|
|
||||||
|
@ -36,6 +31,11 @@ export default class UserThreads extends Component {
|
||||||
this.trackedChannels = {};
|
this.trackedChannels = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@cached
|
||||||
|
get threadsCollection() {
|
||||||
|
return this.chatApi.userThreads(this.handleLoadedThreads);
|
||||||
|
}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
handleLoadedThreads(result) {
|
handleLoadedThreads(result) {
|
||||||
return result.threads.map((threadObject) => {
|
return result.threads.map((threadObject) => {
|
||||||
|
|
|
@ -27,6 +27,7 @@ export default class ChatController extends Controller {
|
||||||
this.chatStateManager.hasPreloadedChannels
|
this.chatStateManager.hasPreloadedChannels
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
get shouldUseCoreSidebar() {
|
get shouldUseCoreSidebar() {
|
||||||
return this.siteSettings.navigation_menu === "sidebar";
|
return this.siteSettings.navigation_menu === "sidebar";
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,10 @@ export default class ChatDraftsManager extends Service {
|
||||||
|
|
||||||
drafts = {};
|
drafts = {};
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
cancel(this?._persistHandler);
|
||||||
|
}
|
||||||
|
|
||||||
async add(message, channelId, threadId) {
|
async add(message, channelId, threadId) {
|
||||||
try {
|
try {
|
||||||
this.drafts[this.key(channelId, threadId)] = message;
|
this.drafts[this.key(channelId, threadId)] = message;
|
||||||
|
@ -46,8 +50,4 @@ export default class ChatDraftsManager extends Service {
|
||||||
// We don't want to throw an error if the draft fails to save
|
// We don't want to throw an error if the draft fails to save
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
cancel(this?._persistHandler);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,28 @@ export default class ChatNotificationManager extends Service {
|
||||||
_subscribedToChat = false;
|
_subscribedToChat = false;
|
||||||
_countChatInDocTitle = true;
|
_countChatInDocTitle = true;
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
|
||||||
|
if (!this._shouldRun()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._chatPresenceChannel.off(
|
||||||
|
"change",
|
||||||
|
this._subscribeToCorrectNotifications
|
||||||
|
);
|
||||||
|
this._chatPresenceChannel.unsubscribe();
|
||||||
|
this._chatPresenceChannel.leave();
|
||||||
|
|
||||||
|
this._corePresenceChannel.off(
|
||||||
|
"change",
|
||||||
|
this._subscribeToCorrectNotifications
|
||||||
|
);
|
||||||
|
this._corePresenceChannel.unsubscribe();
|
||||||
|
this._corePresenceChannel.leave();
|
||||||
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
if (!this._shouldRun()) {
|
if (!this._shouldRun()) {
|
||||||
return;
|
return;
|
||||||
|
@ -52,28 +74,6 @@ export default class ChatNotificationManager extends Service {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
|
|
||||||
if (!this._shouldRun()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._chatPresenceChannel.off(
|
|
||||||
"change",
|
|
||||||
this._subscribeToCorrectNotifications
|
|
||||||
);
|
|
||||||
this._chatPresenceChannel.unsubscribe();
|
|
||||||
this._chatPresenceChannel.leave();
|
|
||||||
|
|
||||||
this._corePresenceChannel.off(
|
|
||||||
"change",
|
|
||||||
this._subscribeToCorrectNotifications
|
|
||||||
);
|
|
||||||
this._corePresenceChannel.unsubscribe();
|
|
||||||
this._corePresenceChannel.leave();
|
|
||||||
}
|
|
||||||
|
|
||||||
shouldCountChatInDocTitle() {
|
shouldCountChatInDocTitle() {
|
||||||
return this._countChatInDocTitle;
|
return this._countChatInDocTitle;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,11 @@ export default class ChatTrackingStateManager extends Service {
|
||||||
|
|
||||||
// NOTE: In future, we may want to preload some thread tracking state
|
// NOTE: In future, we may want to preload some thread tracking state
|
||||||
// as well, but for now we do that on demand when the user opens a channel,
|
// as well, but for now we do that on demand when the user opens a channel,
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
cancel(this._onTriggerNotificationDebounceHandler);
|
||||||
|
}
|
||||||
|
|
||||||
// to avoid having to load all the threads across all channels into memory at once.
|
// to avoid having to load all the threads across all channels into memory at once.
|
||||||
setupWithPreloadedState({ channel_tracking = {} }) {
|
setupWithPreloadedState({ channel_tracking = {} }) {
|
||||||
this.chatChannelsManager.channels.forEach((channel) => {
|
this.chatChannelsManager.channels.forEach((channel) => {
|
||||||
|
@ -87,11 +92,6 @@ export default class ChatTrackingStateManager extends Service {
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
cancel(this._onTriggerNotificationDebounceHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some reactivity in the app such as the document title
|
* Some reactivity in the app such as the document title
|
||||||
* updates are only done via appEvents -- rather than
|
* updates are only done via appEvents -- rather than
|
||||||
|
|
|
@ -43,6 +43,29 @@ export default class Chat extends Service {
|
||||||
@tracked _activeMessage = null;
|
@tracked _activeMessage = null;
|
||||||
@tracked _activeChannel = null;
|
@tracked _activeChannel = null;
|
||||||
|
|
||||||
|
init() {
|
||||||
|
super.init(...arguments);
|
||||||
|
|
||||||
|
if (this.userCanChat) {
|
||||||
|
this.presenceChannel = this.presence.getChannel("/chat/online");
|
||||||
|
|
||||||
|
onPresenceChange({
|
||||||
|
callback: this.onPresenceChangeCallback,
|
||||||
|
browserHiddenTime: 150000,
|
||||||
|
userUnseenTime: 150000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
|
||||||
|
if (this.userCanChat) {
|
||||||
|
this.chatSubscriptionsManager.stopChannelsSubscriptions();
|
||||||
|
removeOnPresenceChange(this.onPresenceChangeCallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
get activeChannel() {
|
get activeChannel() {
|
||||||
return this._activeChannel;
|
return this._activeChannel;
|
||||||
}
|
}
|
||||||
|
@ -94,20 +117,6 @@ export default class Chat extends Service {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
|
||||||
super.init(...arguments);
|
|
||||||
|
|
||||||
if (this.userCanChat) {
|
|
||||||
this.presenceChannel = this.presence.getChannel("/chat/online");
|
|
||||||
|
|
||||||
onPresenceChange({
|
|
||||||
callback: this.onPresenceChangeCallback,
|
|
||||||
browserHiddenTime: 150000,
|
|
||||||
userUnseenTime: 150000,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
onPresenceChangeCallback(present) {
|
onPresenceChangeCallback(present) {
|
||||||
if (present) {
|
if (present) {
|
||||||
|
@ -245,15 +254,6 @@ export default class Chat extends Service {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
|
|
||||||
if (this.userCanChat) {
|
|
||||||
this.chatSubscriptionsManager.stopChannelsSubscriptions();
|
|
||||||
removeOnPresenceChange(this.onPresenceChangeCallback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updatePresence() {
|
updatePresence() {
|
||||||
next(() => {
|
next(() => {
|
||||||
if (this.isDestroyed || this.isDestroying) {
|
if (this.isDestroyed || this.isDestroying) {
|
||||||
|
|
|
@ -8,6 +8,10 @@ const KEEP_ALIVE_DURATION_SECONDS = 10;
|
||||||
export default class ComposerPresenceManager extends Service {
|
export default class ComposerPresenceManager extends Service {
|
||||||
@service presence;
|
@service presence;
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
this.leave();
|
||||||
|
}
|
||||||
|
|
||||||
notifyState(intent, id) {
|
notifyState(intent, id) {
|
||||||
if (
|
if (
|
||||||
this.siteSettings.allow_users_to_hide_profile &&
|
this.siteSettings.allow_users_to_hide_profile &&
|
||||||
|
@ -57,8 +61,4 @@ export default class ComposerPresenceManager extends Service {
|
||||||
this._presentChannel = this.presence.getChannel(channelName);
|
this._presentChannel = this.presence.getChannel(channelName);
|
||||||
this._presentChannel.enter();
|
this._presentChannel.enter();
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
this.leave();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,14 @@ export default class PollBreakdownChart extends Component {
|
||||||
this._optionToSlice = {};
|
this._optionToSlice = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
willDestroy() {
|
||||||
|
super.willDestroy(...arguments);
|
||||||
|
|
||||||
|
if (this._chart) {
|
||||||
|
this._chart.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
didInsertElement() {
|
didInsertElement() {
|
||||||
super.didInsertElement(...arguments);
|
super.didInsertElement(...arguments);
|
||||||
|
|
||||||
|
@ -44,14 +52,6 @@ export default class PollBreakdownChart extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
willDestroy() {
|
|
||||||
super.willDestroy(...arguments);
|
|
||||||
|
|
||||||
if (this._chart) {
|
|
||||||
this._chart.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@discourseComputed("optionColors", "index")
|
@discourseComputed("optionColors", "index")
|
||||||
colorStyle(optionColors, index) {
|
colorStyle(optionColors, index) {
|
||||||
return htmlSafe(`background: ${optionColors[index]};`);
|
return htmlSafe(`background: ${optionColors[index]};`);
|
||||||
|
|
|
@ -155,6 +155,7 @@ export default class PollInfoComponent extends Component {
|
||||||
this.publicTitle
|
this.publicTitle
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="poll-info">
|
<div class="poll-info">
|
||||||
<div class="poll-info_counts">
|
<div class="poll-info_counts">
|
||||||
|
|
|
@ -104,6 +104,7 @@ export default class PollResultsPieComponent extends Component {
|
||||||
registerCanvasElement = modifier((element) => {
|
registerCanvasElement = modifier((element) => {
|
||||||
this.canvasElement = element;
|
this.canvasElement = element;
|
||||||
});
|
});
|
||||||
|
|
||||||
get canvasId() {
|
get canvasId() {
|
||||||
return htmlSafe(`poll-results-chart-${this.args.id}`);
|
return htmlSafe(`poll-results-chart-${this.args.id}`);
|
||||||
}
|
}
|
||||||
|
@ -125,6 +126,7 @@ export default class PollResultsPieComponent extends Component {
|
||||||
// eslint-disable-next-line no-undef
|
// eslint-disable-next-line no-undef
|
||||||
this._chart = new Chart(el.getContext("2d"), config);
|
this._chart = new Chart(el.getContext("2d"), config);
|
||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="poll-results-chart">
|
<div class="poll-results-chart">
|
||||||
<canvas
|
<canvas
|
||||||
|
|
|
@ -72,6 +72,7 @@ export default class PollResultsStandardComponent extends Component {
|
||||||
get isMultiple() {
|
get isMultiple() {
|
||||||
return this.args.pollType === "multiple";
|
return this.args.pollType === "multiple";
|
||||||
}
|
}
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ul class="results">
|
<ul class="results">
|
||||||
{{#each this.orderedOptions key="voters" as |option|}}
|
{{#each this.orderedOptions key="voters" as |option|}}
|
||||||
|
|
|
@ -20,6 +20,7 @@ export default class TabsComponent extends Component {
|
||||||
? this.tabs[1]
|
? this.tabs[1]
|
||||||
: this.tabs[0];
|
: this.tabs[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
get tabs() {
|
get tabs() {
|
||||||
let tabs = [];
|
let tabs = [];
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,8 @@ importers:
|
||||||
specifier: ^7.25.9
|
specifier: ^7.25.9
|
||||||
version: 7.25.9(@babel/core@7.26.0)
|
version: 7.25.9(@babel/core@7.26.0)
|
||||||
'@discourse/lint-configs':
|
'@discourse/lint-configs':
|
||||||
specifier: ^2.1.0
|
specifier: ^2.2.0
|
||||||
version: 2.1.0(ember-template-lint@6.0.0)(eslint@9.14.0)(prettier@2.8.8)
|
version: 2.2.0(ember-template-lint@6.0.0)(eslint@9.14.0)(prettier@2.8.8)
|
||||||
'@discourse/moment-timezone-names-translations':
|
'@discourse/moment-timezone-names-translations':
|
||||||
specifier: ^1.0.0
|
specifier: ^1.0.0
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
@ -1836,8 +1836,8 @@ packages:
|
||||||
'@discourse/itsatrap@2.0.10':
|
'@discourse/itsatrap@2.0.10':
|
||||||
resolution: {integrity: sha512-Jn1gdiyHMGUsmUfLFf4Q7VnTAv0l7NePbegU6pKhKHEmbzV3FosGxq30fTOYgVyTS1bxqGjlA6LvQttJpv3ROw==}
|
resolution: {integrity: sha512-Jn1gdiyHMGUsmUfLFf4Q7VnTAv0l7NePbegU6pKhKHEmbzV3FosGxq30fTOYgVyTS1bxqGjlA6LvQttJpv3ROw==}
|
||||||
|
|
||||||
'@discourse/lint-configs@2.1.0':
|
'@discourse/lint-configs@2.2.0':
|
||||||
resolution: {integrity: sha512-VoZ/+kV1F/nO+bdKN3a/LSFcJTXGwUUVw3yaJiiJCc/+k4fcPaOgcI3z+Ow0ld+DPFZUVkqmxj18r86ThCLyCA==}
|
resolution: {integrity: sha512-lj13X+3/DRV2ZBQe3eJvxOO23e87DPfUSSqm0UPfP04VJ7141BHwWn9VVF0rOr+bMe2eiirsqlg2AbMn7gMb+A==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
ember-template-lint: 6.0.0
|
ember-template-lint: 6.0.0
|
||||||
eslint: ^9.14.0
|
eslint: ^9.14.0
|
||||||
|
@ -2547,6 +2547,12 @@ packages:
|
||||||
'@socket.io/component-emitter@3.1.2':
|
'@socket.io/component-emitter@3.1.2':
|
||||||
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
|
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
|
||||||
|
|
||||||
|
'@stylistic/eslint-plugin-js@2.11.0':
|
||||||
|
resolution: {integrity: sha512-btchD0P3iij6cIk5RR5QMdEhtCCV0+L6cNheGhGCd//jaHILZMTi/EOqgEDAf1s4ZoViyExoToM+S2Iwa3U9DA==}
|
||||||
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
peerDependencies:
|
||||||
|
eslint: '>=8.40.0'
|
||||||
|
|
||||||
'@swc/core-darwin-arm64@1.9.2':
|
'@swc/core-darwin-arm64@1.9.2':
|
||||||
resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==}
|
resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
@ -9341,11 +9347,12 @@ snapshots:
|
||||||
|
|
||||||
'@discourse/itsatrap@2.0.10': {}
|
'@discourse/itsatrap@2.0.10': {}
|
||||||
|
|
||||||
'@discourse/lint-configs@2.1.0(ember-template-lint@6.0.0)(eslint@9.14.0)(prettier@2.8.8)':
|
'@discourse/lint-configs@2.2.0(ember-template-lint@6.0.0)(eslint@9.14.0)(prettier@2.8.8)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.26.0(supports-color@8.1.1)
|
'@babel/core': 7.26.0(supports-color@8.1.1)
|
||||||
'@babel/eslint-parser': 7.25.8(@babel/core@7.26.0)(eslint@9.14.0)
|
'@babel/eslint-parser': 7.25.8(@babel/core@7.26.0)(eslint@9.14.0)
|
||||||
'@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0)
|
'@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0)
|
||||||
|
'@stylistic/eslint-plugin-js': 2.11.0(eslint@9.14.0)
|
||||||
ember-template-lint: 6.0.0
|
ember-template-lint: 6.0.0
|
||||||
eslint: 9.14.0
|
eslint: 9.14.0
|
||||||
eslint-plugin-decorator-position: 6.0.0(@babel/eslint-parser@7.25.8(@babel/core@7.26.0)(eslint@9.14.0))(eslint@9.14.0)
|
eslint-plugin-decorator-position: 6.0.0(@babel/eslint-parser@7.25.8(@babel/core@7.26.0)(eslint@9.14.0))(eslint@9.14.0)
|
||||||
|
@ -10306,6 +10313,12 @@ snapshots:
|
||||||
|
|
||||||
'@socket.io/component-emitter@3.1.2': {}
|
'@socket.io/component-emitter@3.1.2': {}
|
||||||
|
|
||||||
|
'@stylistic/eslint-plugin-js@2.11.0(eslint@9.14.0)':
|
||||||
|
dependencies:
|
||||||
|
eslint: 9.14.0
|
||||||
|
eslint-visitor-keys: 4.2.0
|
||||||
|
espree: 10.3.0
|
||||||
|
|
||||||
'@swc/core-darwin-arm64@1.9.2':
|
'@swc/core-darwin-arm64@1.9.2':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue