diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-add-upload.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-add-upload.js index 876ac3ae9a..7b4b229e01 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-add-upload.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-add-upload.js @@ -1,8 +1,8 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import { and, not } from "@ember/object/computed"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { isEmpty } from "@ember/utils"; import { popupAjaxError } from "discourse/lib/ajax-error"; @@ -53,7 +53,7 @@ const SCSS_VARIABLE_NAMES = [ "love-low", ]; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminCustomizeThemesShow: controller(), uploadUrl: "/admin/themes/upload_asset", diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-color-scheme-select-base.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-color-scheme-select-base.js index 07f673728f..468111e943 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-color-scheme-select-base.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-color-scheme-select-base.js @@ -1,7 +1,7 @@ -import Controller, { inject as controller } from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import { inject as controller } from "@ember/controller"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminCustomizeColors: controller(), selectedBaseThemeId: null, diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-customize-form-template-view.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-customize-form-template-view.js index 817621d485..bb3b3bf479 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-customize-form-template-view.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-customize-form-template-view.js @@ -1,14 +1,11 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { inject as service } from "@ember/service"; import I18n from "I18n"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { ajax } from "discourse/lib/ajax"; -export default class AdminCustomizeFormTemplateView extends Controller.extend( - ModalFunctionality -) { +export default class AdminCustomizeFormTemplateView extends Modal { @service router; @service dialog; diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-posts-confirmation.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-posts-confirmation.js index 106b459f0c..af129ce19a 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-posts-confirmation.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-posts-confirmation.js @@ -1,11 +1,11 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { alias } from "@ember/object/computed"; import discourseComputed from "discourse-common/utils/decorators"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminUserIndex: controller(), username: alias("model.username"), postCount: alias("model.post_count"), diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-user-posts-progress.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-user-posts-progress.js index 61b9bae999..880bd359ca 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-user-posts-progress.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-delete-user-posts-progress.js @@ -1,6 +1,5 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ deletedPercentage: 0, }); diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-edit-badge-groupings.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-edit-badge-groupings.js index c453a4f8b4..1e8ae9d30c 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-edit-badge-groupings.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-edit-badge-groupings.js @@ -1,12 +1,11 @@ import { A } from "@ember/array"; -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { observes } from "discourse-common/utils/decorators"; import { inject as service } from "@ember/service"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ dialog: service(), @observes("model") diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-incoming-email.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-incoming-email.js index 6055baa1fe..dfabee5b43 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-incoming-email.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-incoming-email.js @@ -1,11 +1,10 @@ -import Controller from "@ember/controller"; import IncomingEmail from "admin/models/incoming-email"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import discourseComputed from "discourse-common/utils/decorators"; import { longDate } from "discourse/lib/formatter"; import { popupAjaxError } from "discourse/lib/ajax-error"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ @discourseComputed("model.date") date(d) { return longDate(d); diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-install-theme.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-install-theme.js index f96e2f4dc7..c4130a1e88 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-install-theme.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-install-theme.js @@ -1,9 +1,9 @@ import { COMPONENTS, THEMES } from "admin/models/theme"; -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import { alias, equal, match } from "@ember/object/computed"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { POPULAR_THEMES } from "discourse-common/helpers/popular-themes"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; @@ -11,7 +11,7 @@ import { set } from "@ember/object"; const MIN_NAME_LENGTH = 4; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminCustomizeThemes: controller(), themesController: controller("adminCustomizeThemes"), popular: equal("selection", "popular"), diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-confirmation.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-confirmation.js index 7c37ddd017..381c2b960c 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-confirmation.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-confirmation.js @@ -1,11 +1,11 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { alias } from "@ember/object/computed"; import discourseComputed from "discourse-common/utils/decorators"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminUserIndex: controller(), username: alias("model.username"), targetUsername: alias("model.targetUsername"), diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-progress.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-progress.js index bdbcf2d220..35f0442eb4 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-progress.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-progress.js @@ -1,10 +1,9 @@ -import Controller from "@ember/controller"; import DiscourseURL from "discourse/lib/url"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { bind } from "discourse-common/utils/decorators"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ message: I18n.t("admin.user.merging_user"), onShow() { diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-prompt.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-prompt.js index 46e23305f2..cbfee6a1b7 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-prompt.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-merge-users-prompt.js @@ -1,11 +1,11 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action, get } from "@ember/object"; import { alias } from "@ember/object/computed"; import discourseComputed from "discourse-common/utils/decorators"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminUserIndex: controller(), username: alias("model.username"), diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-penalize-user.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-penalize-user.js index 4120bc34ff..0cc36e2a10 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-penalize-user.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-penalize-user.js @@ -1,14 +1,13 @@ -import Controller from "@ember/controller"; import { action } from "@ember/object"; import { next } from "@ember/runloop"; import { inject as service } from "@ember/service"; import { isEmpty } from "@ember/utils"; import discourseComputed from "discourse-common/utils/decorators"; import { extractError } from "discourse/lib/ajax-error"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import I18n from "I18n"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ dialog: service(), loadingUser: false, diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-reseed.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-reseed.js index 744921b02a..63980ac6ad 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-reseed.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-reseed.js @@ -1,10 +1,9 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { inject as service } from "@ember/service"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ dialog: service(), loading: true, reseeding: false, diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-staff-action-log-details.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-staff-action-log-details.js index 06110e0113..ede611d0e0 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-staff-action-log-details.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-staff-action-log-details.js @@ -1,4 +1,4 @@ import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; export default Controller.extend(ModalFunctionality); diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-start-backup.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-start-backup.js index f60908b0e2..16754ed778 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-start-backup.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-start-backup.js @@ -1,8 +1,8 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import discourseComputed from "discourse-common/utils/decorators"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminBackupsLogs: controller(), @discourseComputed diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-theme-change.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-theme-change.js index 3f58f36d2e..0a3d52229b 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-theme-change.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-theme-change.js @@ -1,8 +1,7 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loadDiff() { this.set("loading", true); ajax( diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-uploaded-image-list.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-uploaded-image-list.js index 8a60037a5b..b2cef202d6 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-uploaded-image-list.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-uploaded-image-list.js @@ -1,9 +1,8 @@ import { observes, on } from "discourse-common/utils/decorators"; -import Controller from "@ember/controller"; import { action } from "@ember/object"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ @on("init") @observes("model.value") _setup() { diff --git a/app/assets/javascripts/admin/addon/controllers/modals/admin-watched-word-test.js b/app/assets/javascripts/admin/addon/controllers/modals/admin-watched-word-test.js index fc585c47ef..d6ff29842e 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/admin-watched-word-test.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/admin-watched-word-test.js @@ -1,5 +1,4 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import discourseComputed from "discourse-common/utils/decorators"; import { equal } from "@ember/object/computed"; import { @@ -7,7 +6,7 @@ import { toWatchedWord, } from "discourse-common/utils/watched-words"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ isReplace: equal("model.nameKey", "replace"), isTag: equal("model.nameKey", "tag"), isLink: equal("model.nameKey", "link"), diff --git a/app/assets/javascripts/admin/addon/controllers/modals/site-setting-default-categories.js b/app/assets/javascripts/admin/addon/controllers/modals/site-setting-default-categories.js index 8c3a264898..68adf0d66b 100644 --- a/app/assets/javascripts/admin/addon/controllers/modals/site-setting-default-categories.js +++ b/app/assets/javascripts/admin/addon/controllers/modals/site-setting-default-categories.js @@ -1,5 +1,5 @@ import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import ModalUpdateExistingUsers from "discourse/mixins/modal-update-existing-users"; export default Controller.extend(ModalFunctionality, ModalUpdateExistingUsers); diff --git a/app/assets/javascripts/discourse/app/controllers/activation-edit.js b/app/assets/javascripts/discourse/app/controllers/activation-edit.js index ee57b1b1fd..5f47e027bf 100644 --- a/app/assets/javascripts/discourse/app/controllers/activation-edit.js +++ b/app/assets/javascripts/discourse/app/controllers/activation-edit.js @@ -1,10 +1,10 @@ -import Controller, { inject as controller } from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import { inject as controller } from "@ember/controller"; +import Modal from "discourse/controllers/modal"; import { changeEmail } from "discourse/lib/user-activation"; import discourseComputed from "discourse-common/utils/decorators"; import { extractError } from "discourse/lib/ajax-error"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ login: controller(), currentEmail: null, diff --git a/app/assets/javascripts/discourse/app/controllers/associate-account-confirm.js b/app/assets/javascripts/discourse/app/controllers/associate-account-confirm.js index 6afae9f1d7..c07b57b59f 100644 --- a/app/assets/javascripts/discourse/app/controllers/associate-account-confirm.js +++ b/app/assets/javascripts/discourse/app/controllers/associate-account-confirm.js @@ -1,9 +1,8 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ actions: { finishConnect() { ajax({ diff --git a/app/assets/javascripts/discourse/app/controllers/auth-token.js b/app/assets/javascripts/discourse/app/controllers/auth-token.js index 3e089cbaf4..64dad13a28 100644 --- a/app/assets/javascripts/discourse/app/controllers/auth-token.js +++ b/app/assets/javascripts/discourse/app/controllers/auth-token.js @@ -1,11 +1,10 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { action } from "@ember/object"; import { next } from "@ember/runloop"; import { userPath } from "discourse/lib/url"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ expanded: false, onShow() { diff --git a/app/assets/javascripts/discourse/app/controllers/avatar-selector.js b/app/assets/javascripts/discourse/app/controllers/avatar-selector.js index eab7d45a2a..285b8c9579 100644 --- a/app/assets/javascripts/discourse/app/controllers/avatar-selector.js +++ b/app/assets/javascripts/discourse/app/controllers/avatar-selector.js @@ -1,6 +1,5 @@ -import Controller from "@ember/controller"; import { action } from "@ember/object"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { allowsImages } from "discourse/lib/uploads"; import discourseComputed from "discourse-common/utils/decorators"; @@ -8,7 +7,7 @@ import { popupAjaxError } from "discourse/lib/ajax-error"; import { setting } from "discourse/lib/computed"; import { isTesting } from "discourse-common/config/environment"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ gravatarName: setting("gravatar_name"), gravatarBaseUrl: setting("gravatar_base_url"), gravatarLoginUrl: setting("gravatar_login_url"), @@ -143,11 +142,12 @@ export default Controller.extend(ModalFunctionality, { .catch(popupAjaxError); }, - actions: { - uploadComplete() { - this.set("selected", "custom"); - }, + @action + uploadComplete() { + this.set("selected", "custom"); + }, + actions: { refreshGravatar() { this.set("gravatarRefreshDisabled", true); diff --git a/app/assets/javascripts/discourse/app/controllers/basic-modal-body.js b/app/assets/javascripts/discourse/app/controllers/basic-modal-body.js index 1638fd0893..3e5365e682 100644 --- a/app/assets/javascripts/discourse/app/controllers/basic-modal-body.js +++ b/app/assets/javascripts/discourse/app/controllers/basic-modal-body.js @@ -1,6 +1,5 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ modal: null, }); diff --git a/app/assets/javascripts/discourse/app/controllers/bookmark.js b/app/assets/javascripts/discourse/app/controllers/bookmark.js index c05fcda47a..95fb10a67e 100644 --- a/app/assets/javascripts/discourse/app/controllers/bookmark.js +++ b/app/assets/javascripts/discourse/app/controllers/bookmark.js @@ -1,6 +1,5 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { Promise } from "rsvp"; import showModal from "discourse/lib/show-modal"; @@ -55,7 +54,7 @@ export function openBookmarkModal( }); } -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ onShow() { this.setProperties({ model: this.model || {}, diff --git a/app/assets/javascripts/discourse/app/controllers/change-owner.js b/app/assets/javascripts/discourse/app/controllers/change-owner.js index d317a6ca72..0318cf14b5 100644 --- a/app/assets/javascripts/discourse/app/controllers/change-owner.js +++ b/app/assets/javascripts/discourse/app/controllers/change-owner.js @@ -1,14 +1,14 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import DiscourseURL from "discourse/lib/url"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import Topic from "discourse/models/topic"; import { alias } from "@ember/object/computed"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { next } from "@ember/runloop"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ topicController: controller("topic"), saving: false, diff --git a/app/assets/javascripts/discourse/app/controllers/change-post-notice.js b/app/assets/javascripts/discourse/app/controllers/change-post-notice.js index ffcbbaa175..6b067e4da5 100644 --- a/app/assets/javascripts/discourse/app/controllers/change-post-notice.js +++ b/app/assets/javascripts/discourse/app/controllers/change-post-notice.js @@ -1,11 +1,10 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { cookAsync } from "discourse/lib/text"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ post: null, resolve: null, reject: null, diff --git a/app/assets/javascripts/discourse/app/controllers/change-timestamp.js b/app/assets/javascripts/discourse/app/controllers/change-timestamp.js index 56957a1d08..1c2e060807 100644 --- a/app/assets/javascripts/discourse/app/controllers/change-timestamp.js +++ b/app/assets/javascripts/discourse/app/controllers/change-timestamp.js @@ -1,14 +1,14 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import DiscourseURL from "discourse/lib/url"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import Topic from "discourse/models/topic"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { next } from "@ember/runloop"; // Modal related to changing the timestamp of posts -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ topicController: controller("topic"), saving: false, date: "", diff --git a/app/assets/javascripts/discourse/app/controllers/convert-to-public-topic.js b/app/assets/javascripts/discourse/app/controllers/convert-to-public-topic.js index 4fb7c1eee7..a836848ab2 100644 --- a/app/assets/javascripts/discourse/app/controllers/convert-to-public-topic.js +++ b/app/assets/javascripts/discourse/app/controllers/convert-to-public-topic.js @@ -1,8 +1,7 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { popupAjaxError } from "discourse/lib/ajax-error"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ publicCategoryId: null, saving: true, diff --git a/app/assets/javascripts/discourse/app/controllers/create-account.js b/app/assets/javascripts/discourse/app/controllers/create-account.js index b364d8d2eb..637bf888de 100644 --- a/app/assets/javascripts/discourse/app/controllers/create-account.js +++ b/app/assets/javascripts/discourse/app/controllers/create-account.js @@ -7,7 +7,7 @@ import discourseComputed, { import { A } from "@ember/array"; import EmberObject, { action } from "@ember/object"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import NameValidation from "discourse/mixins/name-validation"; import PasswordValidation from "discourse/mixins/password-validation"; import { Promise } from "rsvp"; diff --git a/app/assets/javascripts/discourse/app/controllers/create-invite-bulk.js b/app/assets/javascripts/discourse/app/controllers/create-invite-bulk.js index 0ebeb09992..6b725f41c8 100644 --- a/app/assets/javascripts/discourse/app/controllers/create-invite-bulk.js +++ b/app/assets/javascripts/discourse/app/controllers/create-invite-bulk.js @@ -1,8 +1,7 @@ -import Controller from "@ember/controller"; import { action } from "@ember/object"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ data: null, onShow() { diff --git a/app/assets/javascripts/discourse/app/controllers/create-invite.js b/app/assets/javascripts/discourse/app/controllers/create-invite.js index 3f8dbf832e..83e406db6e 100644 --- a/app/assets/javascripts/discourse/app/controllers/create-invite.js +++ b/app/assets/javascripts/discourse/app/controllers/create-invite.js @@ -6,7 +6,7 @@ import { extractError } from "discourse/lib/ajax-error"; import { getNativeContact } from "discourse/lib/pwa-utils"; import { emailValid, hostnameValid } from "discourse/lib/utilities"; import { bufferedProperty } from "discourse/mixins/buffered-content"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import Group from "discourse/models/group"; import Invite from "discourse/models/invite"; import I18n from "I18n"; diff --git a/app/assets/javascripts/discourse/app/controllers/delete-topic-confirm.js b/app/assets/javascripts/discourse/app/controllers/delete-topic-confirm.js index eb5496e89a..29246c7524 100644 --- a/app/assets/javascripts/discourse/app/controllers/delete-topic-confirm.js +++ b/app/assets/javascripts/discourse/app/controllers/delete-topic-confirm.js @@ -1,12 +1,12 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import discourseComputed from "discourse-common/utils/decorators"; // Modal that displays confirmation text when user deletes a topic // The modal will display only if the topic exceeds a certain amount of views -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ topicController: controller("topic"), deletingTopic: false, diff --git a/app/assets/javascripts/discourse/app/controllers/discard-draft.js b/app/assets/javascripts/discourse/app/controllers/discard-draft.js index 75bf5a5312..70cf990336 100644 --- a/app/assets/javascripts/discourse/app/controllers/discard-draft.js +++ b/app/assets/javascripts/discourse/app/controllers/discard-draft.js @@ -1,7 +1,6 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ actions: { async destroyDraft() { await this.onDestroyDraft(); diff --git a/app/assets/javascripts/discourse/app/controllers/dismiss-notification-confirmation.js b/app/assets/javascripts/discourse/app/controllers/dismiss-notification-confirmation.js index ff13e85c86..5e3ca37d28 100644 --- a/app/assets/javascripts/discourse/app/controllers/dismiss-notification-confirmation.js +++ b/app/assets/javascripts/discourse/app/controllers/dismiss-notification-confirmation.js @@ -1,7 +1,6 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ actions: { dismiss() { this.send("closeModal"); diff --git a/app/assets/javascripts/discourse/app/controllers/do-not-disturb.js b/app/assets/javascripts/discourse/app/controllers/do-not-disturb.js index cafa0483ef..86c6c4896b 100644 --- a/app/assets/javascripts/discourse/app/controllers/do-not-disturb.js +++ b/app/assets/javascripts/discourse/app/controllers/do-not-disturb.js @@ -1,9 +1,8 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { extractError } from "discourse/lib/ajax-error"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ duration: null, @action diff --git a/app/assets/javascripts/discourse/app/controllers/download-calendar.js b/app/assets/javascripts/discourse/app/controllers/download-calendar.js index 0336f84601..b43b6d7156 100644 --- a/app/assets/javascripts/discourse/app/controllers/download-calendar.js +++ b/app/assets/javascripts/discourse/app/controllers/download-calendar.js @@ -1,9 +1,8 @@ import { action } from "@ember/object"; -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { downloadGoogle, downloadIcs } from "discourse/lib/download-calendar"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ selectedCalendar: "ics", remember: false, diff --git a/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js b/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js index b3da2b873a..53ca71aa1b 100644 --- a/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js +++ b/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js @@ -1,7 +1,6 @@ import { fromSeconds, toSeconds } from "discourse/helpers/slow-mode"; -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import Topic from "discourse/models/topic"; import { action } from "@ember/object"; import discourseComputed from "discourse-common/utils/decorators"; @@ -9,7 +8,7 @@ import { equal, or } from "@ember/object/computed"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { timeShortcuts } from "discourse/lib/time-shortcut"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ selectedSlowMode: null, hours: null, minutes: null, diff --git a/app/assets/javascripts/discourse/app/controllers/edit-topic-timer.js b/app/assets/javascripts/discourse/app/controllers/edit-topic-timer.js index d6ebfa9c43..ae82ec19b6 100644 --- a/app/assets/javascripts/discourse/app/controllers/edit-topic-timer.js +++ b/app/assets/javascripts/discourse/app/controllers/edit-topic-timer.js @@ -1,8 +1,7 @@ import EmberObject, { setProperties } from "@ember/object"; -import Controller from "@ember/controller"; import { FORMAT } from "select-kit/components/future-date-input-selector"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import TopicTimer from "discourse/models/topic-timer"; import { alias } from "@ember/object/computed"; import discourseComputed from "discourse-common/utils/decorators"; @@ -16,7 +15,7 @@ export const DELETE_STATUS_TYPE = "delete"; export const BUMP_TYPE = "bump"; export const DELETE_REPLIES_TYPE = "delete_replies"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, isPublic: "true", diff --git a/app/assets/javascripts/discourse/app/controllers/edit-user-directory-columns.js b/app/assets/javascripts/discourse/app/controllers/edit-user-directory-columns.js index 771d5b9b30..06ee38045a 100644 --- a/app/assets/javascripts/discourse/app/controllers/edit-user-directory-columns.js +++ b/app/assets/javascripts/discourse/app/controllers/edit-user-directory-columns.js @@ -1,5 +1,4 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import EmberObject, { action } from "@ember/object"; import { extractError } from "discourse/lib/ajax-error"; @@ -8,7 +7,7 @@ import { reload } from "discourse/helpers/page-reloader"; const UP = "up"; const DOWN = "down"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: true, columns: null, labelKey: null, diff --git a/app/assets/javascripts/discourse/app/controllers/explain-reviewable.js b/app/assets/javascripts/discourse/app/controllers/explain-reviewable.js index 0827d1b45b..e86b0beda7 100644 --- a/app/assets/javascripts/discourse/app/controllers/explain-reviewable.js +++ b/app/assets/javascripts/discourse/app/controllers/explain-reviewable.js @@ -1,7 +1,6 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: null, reviewableExplanation: null, diff --git a/app/assets/javascripts/discourse/app/controllers/feature-topic-on-profile.js b/app/assets/javascripts/discourse/app/controllers/feature-topic-on-profile.js index 946a455106..557c32567e 100644 --- a/app/assets/javascripts/discourse/app/controllers/feature-topic-on-profile.js +++ b/app/assets/javascripts/discourse/app/controllers/feature-topic-on-profile.js @@ -1,10 +1,9 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { none } from "@ember/object/computed"; import { popupAjaxError } from "discourse/lib/ajax-error"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ newFeaturedTopic: null, saving: false, noTopicSelected: none("newFeaturedTopic"), diff --git a/app/assets/javascripts/discourse/app/controllers/feature-topic.js b/app/assets/javascripts/discourse/app/controllers/feature-topic.js index d6ac71574d..cfbdc96f2f 100644 --- a/app/assets/javascripts/discourse/app/controllers/feature-topic.js +++ b/app/assets/javascripts/discourse/app/controllers/feature-topic.js @@ -1,13 +1,13 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import EmberObject from "@ember/object"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { categoryLinkHTML } from "discourse/helpers/category-link"; import discourseComputed from "discourse-common/utils/decorators"; import { inject as service } from "@ember/service"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ topicController: controller("topic"), dialog: service(), diff --git a/app/assets/javascripts/discourse/app/controllers/flag.js b/app/assets/javascripts/discourse/app/controllers/flag.js index 8d2f6bbbe9..3f865a02e8 100644 --- a/app/assets/javascripts/discourse/app/controllers/flag.js +++ b/app/assets/javascripts/discourse/app/controllers/flag.js @@ -1,8 +1,7 @@ import { schedule } from "@ember/runloop"; -import Controller from "@ember/controller"; import I18n from "I18n"; import { MAX_MESSAGE_LENGTH } from "discourse/models/post-action-type"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { Promise } from "rsvp"; import User from "discourse/models/user"; import discourseComputed, { bind } from "discourse-common/utils/decorators"; @@ -10,7 +9,7 @@ import { not } from "@ember/object/computed"; import optionalService from "discourse/lib/optional-service"; import { classify } from "@ember/string"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ adminTools: optionalService(), userDetails: null, selected: null, diff --git a/app/assets/javascripts/discourse/app/controllers/forgot-password.js b/app/assets/javascripts/discourse/app/controllers/forgot-password.js index 7733fed4ec..cf36aeb55b 100644 --- a/app/assets/javascripts/discourse/app/controllers/forgot-password.js +++ b/app/assets/javascripts/discourse/app/controllers/forgot-password.js @@ -1,6 +1,5 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import cookie from "discourse/lib/cookie"; import discourseComputed from "discourse-common/utils/decorators"; @@ -9,7 +8,7 @@ import { extractError } from "discourse/lib/ajax-error"; import getURL from "discourse-common/lib/get-url"; import { isEmpty } from "@ember/utils"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ offerHelp: null, helpSeen: false, diff --git a/app/assets/javascripts/discourse/app/controllers/fullscreen-code.js b/app/assets/javascripts/discourse/app/controllers/fullscreen-code.js index 81108cb545..6161775274 100644 --- a/app/assets/javascripts/discourse/app/controllers/fullscreen-code.js +++ b/app/assets/javascripts/discourse/app/controllers/fullscreen-code.js @@ -1,10 +1,9 @@ -import Controller from "@ember/controller"; import { afterRender } from "discourse-common/utils/decorators"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import highlightSyntax from "discourse/lib/highlight-syntax"; import CodeblockButtons from "discourse/lib/codeblock-buttons"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ onShow() { this._applyCodeblockButtons(); }, diff --git a/app/assets/javascripts/discourse/app/controllers/grant-badge.js b/app/assets/javascripts/discourse/app/controllers/grant-badge.js index 0b09e32661..8122acc8e8 100644 --- a/app/assets/javascripts/discourse/app/controllers/grant-badge.js +++ b/app/assets/javascripts/discourse/app/controllers/grant-badge.js @@ -2,7 +2,7 @@ import Controller, { inject as controller } from "@ember/controller"; import Badge from "discourse/models/badge"; import GrantBadgeController from "discourse/mixins/grant-badge-controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import UserBadge from "discourse/models/user-badge"; import { all } from "rsvp"; import discourseComputed from "discourse-common/utils/decorators"; diff --git a/app/assets/javascripts/discourse/app/controllers/group-add-members.js b/app/assets/javascripts/discourse/app/controllers/group-add-members.js index b6bd5e51a4..6b15a04659 100644 --- a/app/assets/javascripts/discourse/app/controllers/group-add-members.js +++ b/app/assets/javascripts/discourse/app/controllers/group-add-members.js @@ -1,13 +1,12 @@ -import Controller from "@ember/controller"; import { action } from "@ember/object"; import { isEmpty } from "@ember/utils"; import discourseComputed from "discourse-common/utils/decorators"; import { extractError } from "discourse/lib/ajax-error"; import { emailValid } from "discourse/lib/utilities"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import I18n from "I18n"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, usernamesAndEmails: null, diff --git a/app/assets/javascripts/discourse/app/controllers/group-default-notifications.js b/app/assets/javascripts/discourse/app/controllers/group-default-notifications.js index 8c3a264898..68adf0d66b 100644 --- a/app/assets/javascripts/discourse/app/controllers/group-default-notifications.js +++ b/app/assets/javascripts/discourse/app/controllers/group-default-notifications.js @@ -1,5 +1,5 @@ import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import ModalUpdateExistingUsers from "discourse/mixins/modal-update-existing-users"; export default Controller.extend(ModalFunctionality, ModalUpdateExistingUsers); diff --git a/app/assets/javascripts/discourse/app/controllers/history.js b/app/assets/javascripts/discourse/app/controllers/history.js index 0d428b226b..d7f7b7b4b2 100644 --- a/app/assets/javascripts/discourse/app/controllers/history.js +++ b/app/assets/javascripts/discourse/app/controllers/history.js @@ -6,9 +6,8 @@ import discourseComputed, { } from "discourse-common/utils/decorators"; import { propertyGreaterThan, propertyLessThan } from "discourse/lib/computed"; import Category from "discourse/models/category"; -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import Post from "discourse/models/post"; import { categoryBadgeHTML } from "discourse/helpers/category-link"; import { iconHTML } from "discourse-common/lib/icon-library"; @@ -26,7 +25,7 @@ function customTagArray(val) { } // This controller handles displaying of history -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ dialog: service(), loading: true, viewMode: "side_by_side", diff --git a/app/assets/javascripts/discourse/app/controllers/ignore-duration-with-username.js b/app/assets/javascripts/discourse/app/controllers/ignore-duration-with-username.js index 89c5250382..4c4299e983 100644 --- a/app/assets/javascripts/discourse/app/controllers/ignore-duration-with-username.js +++ b/app/assets/javascripts/discourse/app/controllers/ignore-duration-with-username.js @@ -1,12 +1,11 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import User from "discourse/models/user"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { timeShortcuts } from "discourse/lib/time-shortcut"; import discourseComputed from "discourse-common/utils/decorators"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, ignoredUntil: null, ignoredUsername: null, diff --git a/app/assets/javascripts/discourse/app/controllers/ignore-duration.js b/app/assets/javascripts/discourse/app/controllers/ignore-duration.js index 6522d58b01..7896f7e3b9 100644 --- a/app/assets/javascripts/discourse/app/controllers/ignore-duration.js +++ b/app/assets/javascripts/discourse/app/controllers/ignore-duration.js @@ -1,11 +1,10 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { timeShortcuts } from "discourse/lib/time-shortcut"; import discourseComputed from "discourse-common/utils/decorators"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, ignoredUntil: null, diff --git a/app/assets/javascripts/discourse/app/controllers/insert-hyperlink.js b/app/assets/javascripts/discourse/app/controllers/insert-hyperlink.js index dab1a788b5..b638fff311 100644 --- a/app/assets/javascripts/discourse/app/controllers/insert-hyperlink.js +++ b/app/assets/javascripts/discourse/app/controllers/insert-hyperlink.js @@ -1,13 +1,12 @@ import { cancel, schedule } from "@ember/runloop"; -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { bind } from "discourse-common/utils/decorators"; import discourseDebounce from "discourse-common/lib/debounce"; import { isEmpty } from "@ember/utils"; import { prefixProtocol } from "discourse/lib/url"; import { searchForTerm } from "discourse/lib/search"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ _debounced: null, _activeSearch: null, diff --git a/app/assets/javascripts/discourse/app/controllers/json-schema-editor.js b/app/assets/javascripts/discourse/app/controllers/json-schema-editor.js index db1f37686c..46504bc5fb 100644 --- a/app/assets/javascripts/discourse/app/controllers/json-schema-editor.js +++ b/app/assets/javascripts/discourse/app/controllers/json-schema-editor.js @@ -1,8 +1,7 @@ import { action } from "@ember/object"; -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ editor: null, @action diff --git a/app/assets/javascripts/discourse/app/controllers/jump-to-post.js b/app/assets/javascripts/discourse/app/controllers/jump-to-post.js index 968b3e78ea..9efebb5496 100644 --- a/app/assets/javascripts/discourse/app/controllers/jump-to-post.js +++ b/app/assets/javascripts/discourse/app/controllers/jump-to-post.js @@ -1,9 +1,8 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { reads } from "@ember/object/computed"; import { action } from "@ember/object"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ model: null, postNumber: null, postDate: null, diff --git a/app/assets/javascripts/discourse/app/controllers/keyboard-shortcuts-help.js b/app/assets/javascripts/discourse/app/controllers/keyboard-shortcuts-help.js index 64462a746a..f689f45939 100644 --- a/app/assets/javascripts/discourse/app/controllers/keyboard-shortcuts-help.js +++ b/app/assets/javascripts/discourse/app/controllers/keyboard-shortcuts-help.js @@ -1,7 +1,6 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; import { translateModKey } from "discourse/lib/utilities"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { extraKeyboardShortcutsHelp } from "discourse/lib/keyboard-shortcuts"; const KEY = "keyboard_shortcuts_help"; @@ -10,7 +9,6 @@ const ALT = translateModKey("Alt"); const META = translateModKey("Meta"); const CTRL = I18n.t("shortcut_modifier_key.ctrl"); const ENTER = I18n.t("shortcut_modifier_key.enter"); - const COMMA = I18n.t(`${KEY}.shortcut_key_delimiter_comma`); const PLUS = I18n.t(`${KEY}.shortcut_key_delimiter_plus`); @@ -59,7 +57,7 @@ function buildShortcut( return I18n.t(`${KEY}.${key}`, context); } -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ onShow() { this.set("modal.modalClass", "keyboard-shortcuts-modal"); this._defineShortcuts(); diff --git a/app/assets/javascripts/discourse/app/controllers/login.js b/app/assets/javascripts/discourse/app/controllers/login.js index 9d35dc7c97..90faf1a43c 100644 --- a/app/assets/javascripts/discourse/app/controllers/login.js +++ b/app/assets/javascripts/discourse/app/controllers/login.js @@ -1,11 +1,11 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import { alias, not, or, readOnly } from "@ember/object/computed"; import { areCookiesEnabled, escapeExpression } from "discourse/lib/utilities"; import cookie, { removeCookie } from "discourse/lib/cookie"; import { next, schedule } from "@ember/runloop"; import EmberObject, { action } from "@ember/object"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { SECOND_FACTOR_METHODS } from "discourse/models/user"; import { ajax } from "discourse/lib/ajax"; import discourseComputed from "discourse-common/utils/decorators"; @@ -29,7 +29,7 @@ const AuthErrors = [ "not_allowed_from_ip_address", ]; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ createAccount: controller(), forgotPassword: controller(), application: controller(), diff --git a/app/assets/javascripts/discourse/app/controllers/modal.js b/app/assets/javascripts/discourse/app/controllers/modal.js index cf6c4e3aa2..1b981c4200 100644 --- a/app/assets/javascripts/discourse/app/controllers/modal.js +++ b/app/assets/javascripts/discourse/app/controllers/modal.js @@ -1,2 +1,26 @@ import Controller from "@ember/controller"; -export default Controller.extend(); +import { action } from "@ember/object"; +import { inject as service } from "@ember/service"; +import showModal from "discourse/lib/show-modal"; + +export default Controller.extend({ + appEvents: service(), + + flash(text, messageClass) { + this.appEvents.trigger("modal-body:flash", { text, messageClass }); + }, + + clearFlash() { + this.appEvents.trigger("modal-body:clearFlash"); + }, + + showModal(...args) { + return showModal(...args); + }, + + @action + closeModal() { + this.modal.send("closeModal"); + this.set("panels", []); + }, +}); diff --git a/app/assets/javascripts/discourse/app/controllers/move-to-topic.js b/app/assets/javascripts/discourse/app/controllers/move-to-topic.js index c5f80bcab2..c6b037befa 100644 --- a/app/assets/javascripts/discourse/app/controllers/move-to-topic.js +++ b/app/assets/javascripts/discourse/app/controllers/move-to-topic.js @@ -1,15 +1,15 @@ -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import { alias, equal } from "@ember/object/computed"; import { mergeTopic, movePosts } from "discourse/models/topic"; import DiscourseURL from "discourse/lib/url"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import discourseComputed from "discourse-common/utils/decorators"; import { extractError } from "discourse/lib/ajax-error"; import { isEmpty } from "@ember/utils"; import { next } from "@ember/runloop"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ topicName: null, saving: false, categoryId: null, diff --git a/app/assets/javascripts/discourse/app/controllers/not-activated.js b/app/assets/javascripts/discourse/app/controllers/not-activated.js index bb9bfc6728..9b79be8143 100644 --- a/app/assets/javascripts/discourse/app/controllers/not-activated.js +++ b/app/assets/javascripts/discourse/app/controllers/not-activated.js @@ -1,8 +1,7 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { resendActivationEmail } from "discourse/lib/user-activation"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ actions: { sendActivationEmail() { resendActivationEmail(this.username).then(() => { diff --git a/app/assets/javascripts/discourse/app/controllers/publish-page.js b/app/assets/javascripts/discourse/app/controllers/publish-page.js index f237944de4..24fedee248 100644 --- a/app/assets/javascripts/discourse/app/controllers/publish-page.js +++ b/app/assets/javascripts/discourse/app/controllers/publish-page.js @@ -1,7 +1,7 @@ import { action, computed } from "@ember/object"; import { equal, not } from "@ember/object/computed"; import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; diff --git a/app/assets/javascripts/discourse/app/controllers/raw-email.js b/app/assets/javascripts/discourse/app/controllers/raw-email.js index b2a5a8ec1e..8ca30b3b93 100644 --- a/app/assets/javascripts/discourse/app/controllers/raw-email.js +++ b/app/assets/javascripts/discourse/app/controllers/raw-email.js @@ -1,11 +1,10 @@ -import Controller from "@ember/controller"; import IncomingEmail from "admin/models/incoming-email"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import Post from "discourse/models/post"; import { equal } from "@ember/object/computed"; // This controller handles displaying of raw email -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ rawEmail: "", textPart: "", htmlPart: "", diff --git a/app/assets/javascripts/discourse/app/controllers/reject-reason-reviewable.js b/app/assets/javascripts/discourse/app/controllers/reject-reason-reviewable.js index c1b4b7239e..1896849e40 100644 --- a/app/assets/javascripts/discourse/app/controllers/reject-reason-reviewable.js +++ b/app/assets/javascripts/discourse/app/controllers/reject-reason-reviewable.js @@ -1,8 +1,7 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ rejectReason: null, sendEmail: false, diff --git a/app/assets/javascripts/discourse/app/controllers/reorder-categories.js b/app/assets/javascripts/discourse/app/controllers/reorder-categories.js index 36b2d9d9eb..d99048589b 100644 --- a/app/assets/javascripts/discourse/app/controllers/reorder-categories.js +++ b/app/assets/javascripts/discourse/app/controllers/reorder-categories.js @@ -2,7 +2,7 @@ import discourseComputed, { on } from "discourse-common/utils/decorators"; import BufferedProxy from "ember-buffered-proxy/proxy"; import Controller from "@ember/controller"; import Evented from "@ember/object/evented"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { sort } from "@ember/object/computed"; diff --git a/app/assets/javascripts/discourse/app/controllers/request-group-membership-form.js b/app/assets/javascripts/discourse/app/controllers/request-group-membership-form.js index 0d3b52f77f..ee3f9db30b 100644 --- a/app/assets/javascripts/discourse/app/controllers/request-group-membership-form.js +++ b/app/assets/javascripts/discourse/app/controllers/request-group-membership-form.js @@ -1,13 +1,12 @@ -import Controller from "@ember/controller"; import DiscourseURL from "discourse/lib/url"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { alias } from "@ember/object/computed"; import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { popupAjaxError } from "discourse/lib/ajax-error"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, reason: alias("model.membership_request_template"), diff --git a/app/assets/javascripts/discourse/app/controllers/second-factor-add-security-key.js b/app/assets/javascripts/discourse/app/controllers/second-factor-add-security-key.js index 9bda6f81c1..6d8449c637 100644 --- a/app/assets/javascripts/discourse/app/controllers/second-factor-add-security-key.js +++ b/app/assets/javascripts/discourse/app/controllers/second-factor-add-security-key.js @@ -3,12 +3,11 @@ import { isWebauthnSupported, stringToBuffer, } from "discourse/lib/webauthn"; -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; // model for this controller is user -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, errorMessage: null, diff --git a/app/assets/javascripts/discourse/app/controllers/second-factor-add-totp.js b/app/assets/javascripts/discourse/app/controllers/second-factor-add-totp.js index 2ed9127535..0949b20b65 100644 --- a/app/assets/javascripts/discourse/app/controllers/second-factor-add-totp.js +++ b/app/assets/javascripts/discourse/app/controllers/second-factor-add-totp.js @@ -1,9 +1,8 @@ -import Controller from "@ember/controller"; import { action } from "@ember/object"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, secondFactorImage: null, secondFactorKey: null, diff --git a/app/assets/javascripts/discourse/app/controllers/second-factor-backup-edit.js b/app/assets/javascripts/discourse/app/controllers/second-factor-backup-edit.js index 6854102fe0..357a246553 100644 --- a/app/assets/javascripts/discourse/app/controllers/second-factor-backup-edit.js +++ b/app/assets/javascripts/discourse/app/controllers/second-factor-backup-edit.js @@ -1,11 +1,10 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { SECOND_FACTOR_METHODS } from "discourse/models/user"; import { alias } from "@ember/object/computed"; import discourseLater from "discourse-common/lib/later"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ loading: false, errorMessage: null, successMessage: null, diff --git a/app/assets/javascripts/discourse/app/controllers/second-factor-edit-security-key.js b/app/assets/javascripts/discourse/app/controllers/second-factor-edit-security-key.js index 352fc5bbf3..ec6a7551fe 100644 --- a/app/assets/javascripts/discourse/app/controllers/second-factor-edit-security-key.js +++ b/app/assets/javascripts/discourse/app/controllers/second-factor-edit-security-key.js @@ -1,7 +1,6 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ actions: { disableSecurityKey() { this.user diff --git a/app/assets/javascripts/discourse/app/controllers/second-factor-edit.js b/app/assets/javascripts/discourse/app/controllers/second-factor-edit.js index 88eaedd645..a3873c1fd3 100644 --- a/app/assets/javascripts/discourse/app/controllers/second-factor-edit.js +++ b/app/assets/javascripts/discourse/app/controllers/second-factor-edit.js @@ -1,7 +1,6 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ actions: { editSecondFactor() { this.user diff --git a/app/assets/javascripts/discourse/app/controllers/share-and-invite.js b/app/assets/javascripts/discourse/app/controllers/share-and-invite.js index 06110e0113..ede611d0e0 100644 --- a/app/assets/javascripts/discourse/app/controllers/share-and-invite.js +++ b/app/assets/javascripts/discourse/app/controllers/share-and-invite.js @@ -1,4 +1,4 @@ import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; export default Controller.extend(ModalFunctionality); diff --git a/app/assets/javascripts/discourse/app/controllers/share-topic.js b/app/assets/javascripts/discourse/app/controllers/share-topic.js index 5f9766af2c..42887dd9b1 100644 --- a/app/assets/javascripts/discourse/app/controllers/share-topic.js +++ b/app/assets/javascripts/discourse/app/controllers/share-topic.js @@ -8,7 +8,7 @@ import { longDateNoYear } from "discourse/lib/formatter"; import Sharing from "discourse/lib/sharing"; import showModal from "discourse/lib/show-modal"; import { bufferedProperty } from "discourse/mixins/buffered-content"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import I18n from "I18n"; import Category from "discourse/models/category"; import { getOwner } from "discourse-common/lib/get-owner"; diff --git a/app/assets/javascripts/discourse/app/controllers/sidebar-section-form.js b/app/assets/javascripts/discourse/app/controllers/sidebar-section-form.js index ec2c8605cb..568a906792 100644 --- a/app/assets/javascripts/discourse/app/controllers/sidebar-section-form.js +++ b/app/assets/javascripts/discourse/app/controllers/sidebar-section-form.js @@ -1,5 +1,4 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { ajax } from "discourse/lib/ajax"; import { isEmpty } from "@ember/utils"; import { extractError } from "discourse/lib/ajax-error"; @@ -93,7 +92,7 @@ class SectionLink { } } -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ dialog: service(), router: service(), diff --git a/app/assets/javascripts/discourse/app/controllers/topic-bulk-actions.js b/app/assets/javascripts/discourse/app/controllers/topic-bulk-actions.js index 9bbc155890..fd0ab183fb 100644 --- a/app/assets/javascripts/discourse/app/controllers/topic-bulk-actions.js +++ b/app/assets/javascripts/discourse/app/controllers/topic-bulk-actions.js @@ -1,7 +1,7 @@ import { alias, empty } from "@ember/object/computed"; -import Controller, { inject as controller } from "@ember/controller"; +import { inject as controller } from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { Promise } from "rsvp"; import Topic from "discourse/models/topic"; @@ -117,7 +117,7 @@ addBulkButton("deleteTopics", "delete", { }); // Modal for performing bulk actions on topics -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ userPrivateMessages: controller("user-private-messages"), dialog: service(), tags: null, diff --git a/app/assets/javascripts/discourse/app/controllers/user-status.js b/app/assets/javascripts/discourse/app/controllers/user-status.js index 5627f93ead..a2bdda047f 100644 --- a/app/assets/javascripts/discourse/app/controllers/user-status.js +++ b/app/assets/javascripts/discourse/app/controllers/user-status.js @@ -1,5 +1,4 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { popupAjaxError } from "discourse/lib/ajax-error"; import discourseComputed from "discourse-common/utils/decorators"; @@ -9,7 +8,7 @@ import { timeShortcuts, } from "discourse/lib/time-shortcut"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ showDeleteButton: false, prefilledDateTime: null, timeShortcuts: null, diff --git a/app/assets/javascripts/discourse/app/mixins/modal-functionality.js b/app/assets/javascripts/discourse/app/mixins/modal-functionality.js index 6287199a75..43aac5cc99 100644 --- a/app/assets/javascripts/discourse/app/mixins/modal-functionality.js +++ b/app/assets/javascripts/discourse/app/mixins/modal-functionality.js @@ -1,7 +1,19 @@ import Mixin from "@ember/object/mixin"; +import deprecated from "discourse-common/lib/deprecated"; import showModal from "discourse/lib/show-modal"; export default Mixin.create({ + init() { + this._super(...arguments); + deprecated( + "`modal-functionality` mixin is deprecated. Extend `modal` controller (`discourse/controllers/modal`) instead.", + { + id: "modal-functionality", + since: "3.1.0.beta3", + } + ); + }, + flash(text, messageClass) { this.appEvents.trigger("modal-body:flash", { text, messageClass }); }, diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-channel-archive-modal-inner.js b/plugins/chat/assets/javascripts/discourse/components/chat-channel-archive-modal-inner.js index 5519e771f2..6a8694de05 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat-channel-archive-modal-inner.js +++ b/plugins/chat/assets/javascripts/discourse/components/chat-channel-archive-modal-inner.js @@ -13,7 +13,7 @@ import { } from "discourse/plugins/chat/discourse/components/chat-to-topic-selector"; import { CHANNEL_STATUSES } from "discourse/plugins/chat/discourse/models/chat-channel"; import { htmlSafe } from "@ember/template"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; export default Component.extend(ModalFunctionality, { chat: service(), diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-channel-delete-modal-inner.js b/plugins/chat/assets/javascripts/discourse/components/chat-channel-delete-modal-inner.js index 9a34dd80e5..a9df3f9e5e 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat-channel-delete-modal-inner.js +++ b/plugins/chat/assets/javascripts/discourse/components/chat-channel-delete-modal-inner.js @@ -7,7 +7,7 @@ import { inject as service } from "@ember/service"; import { popupAjaxError } from "discourse/lib/ajax-error"; import discourseLater from "discourse-common/lib/later"; import { htmlSafe } from "@ember/template"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; export default Component.extend(ModalFunctionality, { chat: service(), diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-archive-modal.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-archive-modal.js index d46a9f241d..dc10015448 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-archive-modal.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-archive-modal.js @@ -1,8 +1,5 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default class ChatChannelArchiveModalController extends Controller.extend( - ModalFunctionality -) { +export default class ChatChannelArchiveModalController extends Modal { chatChannel = null; } diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-delete-modal.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-delete-modal.js index ad230c1021..1c882e21fa 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-delete-modal.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-delete-modal.js @@ -1,8 +1,5 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default class ChatChannelDeleteModalController extends Controller.extend( - ModalFunctionality -) { +export default class ChatChannelDeleteModalController extends Modal { chatChannel = null; } diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-description.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-description.js index 664a1993ba..38f3d18979 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-description.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-description.js @@ -1,14 +1,11 @@ -import Controller from "@ember/controller"; import { action, computed } from "@ember/object"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { tracked } from "@glimmer/tracking"; import { inject as service } from "@ember/service"; const DESCRIPTION_MAX_LENGTH = 280; -export default class ChatChannelEditDescriptionController extends Controller.extend( - ModalFunctionality -) { +export default class ChatChannelEditDescriptionController extends Modal { @service chatApi; @tracked editedDescription = this.model.description || ""; diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-name-slug.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-name-slug.js index be4d23e727..0f631ed1ae 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-name-slug.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-edit-name-slug.js @@ -1,14 +1,12 @@ -import Controller from "@ember/controller"; import discourseDebounce from "discourse-common/lib/debounce"; import { ajax } from "discourse/lib/ajax"; import { cancel } from "@ember/runloop"; import { action, computed } from "@ember/object"; import { extractError } from "discourse/lib/ajax-error"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { inject as service } from "@ember/service"; -export default class ChatChannelEditTitleController extends Controller.extend( - ModalFunctionality -) { + +export default class ChatChannelEditTitleController extends Modal { @service chatApi; editedName = ""; editedSlug = ""; diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-info-about.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-info-about.js index b21daefbe2..32f578de52 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-info-about.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-info-about.js @@ -1,11 +1,8 @@ -import Controller from "@ember/controller"; import { action } from "@ember/object"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import showModal from "discourse/lib/show-modal"; -export default class ChatChannelInfoAboutController extends Controller.extend( - ModalFunctionality -) { +export default class ChatChannelInfoAboutController extends Modal { @action onEditChatChannelName() { showModal("chat-channel-edit-name-slug", { model: this.model }); diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-selector-modal.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-selector-modal.js index ac07dd2483..c14b8de98c 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-selector-modal.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-selector-modal.js @@ -1,10 +1,7 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; -export default class ChatChannelSelectorModalController extends Controller.extend( - ModalFunctionality -) { +export default class ChatChannelSelectorModalController extends Modal { @action closeSelf() { this.send("closeModal"); diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-toggle.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-toggle.js index a9cba248a8..1409660bdd 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-toggle.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-channel-toggle.js @@ -1,11 +1,8 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { inject as service } from "@ember/service"; -export default class ChatChannelToggleController extends Controller.extend( - ModalFunctionality -) { +export default class ChatChannelToggleController extends Modal { @service chat; @service router; diff --git a/plugins/chat/assets/javascripts/discourse/controllers/chat-message-move-to-channel-modal.js b/plugins/chat/assets/javascripts/discourse/controllers/chat-message-move-to-channel-modal.js index 86ebd1e8ab..9cfcf220a8 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/chat-message-move-to-channel-modal.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/chat-message-move-to-channel-modal.js @@ -1,8 +1,5 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; -export default class ChatMessageMoveToChannelModalController extends Controller.extend( - ModalFunctionality -) { +export default class ChatMessageMoveToChannelModalController extends Modal { chatChannel = null; } diff --git a/plugins/chat/assets/javascripts/discourse/controllers/create-channel.js b/plugins/chat/assets/javascripts/discourse/controllers/create-channel.js index 17d698cb8d..20e171dab5 100644 --- a/plugins/chat/assets/javascripts/discourse/controllers/create-channel.js +++ b/plugins/chat/assets/javascripts/discourse/controllers/create-channel.js @@ -1,10 +1,9 @@ +import Modal from "discourse/controllers/modal"; import { escapeExpression } from "discourse/lib/utilities"; import { ajax } from "discourse/lib/ajax"; import { cancel } from "@ember/runloop"; import discourseDebounce from "discourse-common/lib/debounce"; -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; import { action, computed } from "@ember/object"; import { gt, notEmpty } from "@ember/object/computed"; import { inject as service } from "@ember/service"; @@ -18,9 +17,7 @@ const DEFAULT_HINT = htmlSafe( }) ); -export default class CreateChannelController extends Controller.extend( - ModalFunctionality -) { +export default class CreateChannelController extends Modal { @service chat; @service dialog; @service chatChannelsManager; diff --git a/plugins/discourse-local-dates/assets/javascripts/discourse/controllers/discourse-local-dates-create-modal.js b/plugins/discourse-local-dates/assets/javascripts/discourse/controllers/discourse-local-dates-create-modal.js index a27b641a9b..15a4023a1d 100644 --- a/plugins/discourse-local-dates/assets/javascripts/discourse/controllers/discourse-local-dates-create-modal.js +++ b/plugins/discourse-local-dates/assets/javascripts/discourse/controllers/discourse-local-dates-create-modal.js @@ -1,8 +1,7 @@ -import Controller from "@ember/controller"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { schedule } from "@ember/runloop"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ onShow() { schedule("afterRender", () => { const fromButton = document.getElementById("from-date-time"); diff --git a/plugins/poll/assets/javascripts/controllers/poll-breakdown.js b/plugins/poll/assets/javascripts/controllers/poll-breakdown.js index 1361dbd567..f09557c401 100644 --- a/plugins/poll/assets/javascripts/controllers/poll-breakdown.js +++ b/plugins/poll/assets/javascripts/controllers/poll-breakdown.js @@ -1,6 +1,5 @@ -import Controller from "@ember/controller"; import I18n from "I18n"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import { action } from "@ember/object"; import { ajax } from "discourse/lib/ajax"; import { classify } from "@ember/string"; @@ -10,7 +9,7 @@ import loadScript from "discourse/lib/load-script"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { inject as service } from "@ember/service"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ dialog: service(), model: null, charts: null, diff --git a/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js b/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js index ad199be1a3..c303b7e3f3 100644 --- a/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js +++ b/plugins/poll/assets/javascripts/controllers/poll-ui-builder.js @@ -1,9 +1,8 @@ -import Controller from "@ember/controller"; import EmberObject, { action } from "@ember/object"; import { gt, or } from "@ember/object/computed"; import { next } from "@ember/runloop"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; -import ModalFunctionality from "discourse/mixins/modal-functionality"; +import Modal from "discourse/controllers/modal"; import I18n from "I18n"; export const BAR_CHART_TYPE = "bar"; @@ -18,7 +17,7 @@ const VOTE_POLL_RESULT = "on_vote"; const CLOSED_POLL_RESULT = "on_close"; const STAFF_POLL_RESULT = "staff_only"; -export default Controller.extend(ModalFunctionality, { +export default Modal.extend({ showAdvanced: false, pollType: REGULAR_POLL_TYPE,