From fcb1ca52f96bdff1a49d558a4ffb18107d8334de Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Tue, 29 Oct 2019 17:10:47 -0400 Subject: [PATCH] Revert Ember.run refactors This reverts commit 5ca60fcb6b592524086f98279d3e4fd949598343. --- .../components/admin-backups-logs.js.es6 | 3 +- .../components/admin-report-chart.js.es6 | 8 ++-- .../admin-report-stacked-chart.js.es6 | 8 ++-- .../admin/components/admin-report.js.es6 | 3 +- .../components/admin-theme-editor.js.es6 | 3 +- .../components/admin-user-field-item.js.es6 | 3 +- .../admin/components/color-input.js.es6 | 5 +-- .../admin/components/embeddable-host.js.es6 | 3 +- .../admin/components/ip-lookup.js.es6 | 3 +- .../components/penalty-post-action.js.es6 | 3 +- .../admin/components/permalink-form.js.es6 | 5 +-- .../admin/components/resumable-upload.js.es6 | 16 ++++---- .../screened-ip-address-form.js.es6 | 5 +-- .../admin/components/themes-list-item.js.es6 | 3 +- .../admin/components/watched-word-form.js.es6 | 5 +-- .../admin-customize-colors-show.js.es6 | 3 +- .../admin-dashboard-reports.js.es6 | 3 +- .../admin-logs-staff-action-logs.js.es6 | 3 +- .../controllers/admin-site-text-index.js.es6 | 5 +-- .../controllers/admin-user-badges.js.es6 | 3 +- .../admin-watched-words-action.js.es6 | 3 +- .../lib/buffered-render.js.es6 | 3 +- .../mixins/focus-event.js.es6 | 3 +- app/assets/javascripts/discourse-loader.js | 18 --------- .../add-category-tag-classes.js.es6 | 3 +- .../components/choose-message.js.es6 | 5 ++- .../discourse/components/choose-topic.js.es6 | 3 +- .../discourse/components/composer-body.js.es6 | 15 +++---- .../components/composer-editor.js.es6 | 39 ++++++++++--------- .../components/composer-messages.js.es6 | 3 +- .../components/composer-title.js.es6 | 13 +++---- .../components/composer-user-selector.js.es6 | 3 +- .../discourse/components/cook-text.js.es6 | 3 +- .../discourse/components/d-editor.js.es6 | 26 ++++++------- .../discourse/components/d-modal-body.js.es6 | 3 +- .../discourse/components/d-modal.js.es6 | 5 +-- .../discourse/components/date-input.js.es6 | 3 +- .../discourse/components/date-picker.js.es6 | 3 +- .../components/discourse-topic.js.es6 | 12 ++---- .../components/discovery-topics-list.js.es6 | 10 ++--- .../components/edit-category-tab.js.es6 | 3 +- .../edit-category-topic-template.js.es6 | 3 +- .../components/edit-topic-timer-form.js.es6 | 3 +- .../components/expanding-text-area.js.es6 | 3 +- .../components/flag-selection.js.es6 | 3 +- .../discourse/components/footer-nav.js.es6 | 3 +- .../discourse/components/global-notice.js.es6 | 8 ++-- .../components/group-flair-inputs.js.es6 | 3 +- .../components/image-uploader.js.es6 | 5 +-- .../discourse/components/link-to-input.js.es6 | 3 +- .../discourse/components/login-modal.js.es6 | 3 +- .../discourse/components/mobile-nav.js.es6 | 5 +-- .../discourse/components/mount-widget.js.es6 | 10 ++--- .../components/navigation-bar.js.es6 | 5 +-- .../components/pwa-install-banner.js.es6 | 6 ++- .../discourse/components/quote-button.js.es6 | 3 +- .../components/scroll-tracker.js.es6 | 3 +- .../components/scrolling-post-stream.js.es6 | 12 +++--- .../components/search-advanced-options.js.es6 | 6 +-- .../discourse/components/share-panel.js.es6 | 3 +- .../discourse/components/share-popup.js.es6 | 10 ++--- .../discourse/components/signup-cta.js.es6 | 6 ++- .../discourse/components/site-header.js.es6 | 9 ++--- .../discourse/components/text-overflow.js.es6 | 3 +- .../discourse/components/time-input.js.es6 | 3 +- .../components/topic-entrance.js.es6 | 3 +- .../discourse/components/topic-list.js.es6 | 5 ++- .../components/topic-navigation.js.es6 | 10 ++--- .../components/topic-progress.js.es6 | 14 ++++--- .../components/topic-timeline.js.es6 | 3 +- .../components/topic-timer-info.js.es6 | 10 +++-- .../discourse/components/user-stream.js.es6 | 3 +- .../discourse/controllers/auth-token.js.es6 | 3 +- .../discourse/controllers/change-owner.js.es6 | 3 +- .../controllers/change-timestamp.js.es6 | 3 +- .../discourse/controllers/composer.js.es6 | 3 +- .../discourse/controllers/exception.js.es6 | 3 +- .../controllers/insert-hyperlink.js.es6 | 9 ++--- .../discourse/controllers/jump-to-post.js.es6 | 3 +- .../discourse/controllers/login.js.es6 | 6 +-- .../controllers/move-to-topic.js.es6 | 3 +- .../second-factor-backup-edit.js.es6 | 3 +- .../discourse/controllers/topic.js.es6 | 6 +-- .../initializers/asset-version.js.es6 | 3 +- .../initializers/auth-complete.js.es6 | 3 +- .../discourse/initializers/mobile.js.es6 | 3 +- .../javascripts/discourse/lib/ajax.js.es6 | 7 ++-- .../discourse/lib/autocomplete.js.es6 | 10 ++--- .../discourse/lib/clean-dom.js.es6 | 3 +- .../discourse/lib/click-track.js.es6 | 3 +- .../javascripts/discourse/lib/debounce.js.es6 | 3 +- .../lib/desktop-notifications.js.es6 | 5 +-- .../discourse/lib/keyboard-shortcuts.js.es6 | 8 ++-- .../lib/link-category-hashtags.js.es6 | 3 +- .../discourse/lib/link-mentions.js.es6 | 3 +- .../discourse/lib/link-tag-hashtag.js.es6 | 3 +- .../discourse/lib/load-script.js.es6 | 3 +- .../discourse/lib/page-tracker.js.es6 | 3 +- .../discourse/lib/safari-hacks.js.es6 | 6 ++- .../discourse/lib/screen-track.js.es6 | 3 +- .../javascripts/discourse/lib/throttle.js.es6 | 3 +- .../javascripts/discourse/lib/url.js.es6 | 10 ++--- .../mixins/card-contents-base.js.es6 | 9 ++--- .../discourse/mixins/docking.js.es6 | 3 +- .../mixins/mobile-scroll-direction.js.es6 | 3 +- .../discourse/mixins/scroll-top.js.es6 | 3 +- .../discourse/mixins/scrolling.js.es6 | 3 +- .../discourse/models/composer.js.es6 | 9 ++--- .../discourse/routes/application.js.es6 | 6 +-- .../discourse/routes/associate-account.js.es6 | 3 +- .../discourse/routes/discourse.js.es6 | 3 +- .../routes/discovery-categories.js.es6 | 5 ++- .../discourse/routes/forgot-password.js.es6 | 3 +- .../javascripts/discourse/routes/login.js.es6 | 3 +- .../discourse/routes/new-message.js.es6 | 5 +-- .../discourse/routes/new-topic.js.es6 | 3 +- .../discourse/routes/signup.js.es6 | 5 +-- .../discourse/routes/topic-from-params.js.es6 | 3 +- .../javascripts/discourse/routes/topic.js.es6 | 13 +++---- .../widgets/component-connector.js.es6 | 3 +- .../discourse/widgets/connector.js.es6 | 3 +- .../javascripts/discourse/widgets/glue.js.es6 | 8 ++-- .../discourse/widgets/hamburger-menu.js.es6 | 3 +- .../discourse/widgets/header.js.es6 | 3 +- .../discourse/widgets/post-menu.js.es6 | 6 +-- .../discourse/widgets/post-stream.js.es6 | 3 +- .../discourse/widgets/search-menu.js.es6 | 6 +-- .../discourse/widgets/topic-timeline.js.es6 | 3 +- .../discourse/widgets/user-menu.js.es6 | 3 +- .../javascripts/pretty-text/oneboxer.js.es6 | 5 +-- .../pretty-text/upload-short-url.js.es6 | 3 +- .../select-kit/mixins/dom-helpers.js.es6 | 14 +++---- .../select-kit/mixins/events.js.es6 | 8 ++-- .../wizard/components/invite-list.js.es6 | 3 +- .../wizard/components/radio-button.js.es6 | 3 +- .../wizard/components/wizard-step.js.es6 | 5 +-- app/assets/javascripts/wizard/lib/ajax.js.es6 | 5 +-- .../javascripts/wizard/lib/preview.js.es6 | 3 +- .../wizard/test/acceptance/wizard-test.js.es6 | 3 +- .../wizard/test/helpers/start-app.js.es6 | 3 +- lib/pretty_text.rb | 1 - .../discourse-local-dates-create-form.js.es6 | 7 ++-- .../composer-presence-display.js.es6 | 13 +++---- .../components/topic-presence-display.js.es6 | 6 +-- .../acceptance/composer-test.js.es6 | 3 +- test/javascripts/acceptance/modal-test.js.es6 | 3 +- .../components/d-editor-test.js.es6 | 3 +- .../javascripts/controllers/topic-test.js.es6 | 3 +- test/javascripts/helpers/qunit-helpers.js.es6 | 6 +-- test/javascripts/lib/click-track-test.js.es6 | 3 +- test/javascripts/models/nav-item-test.js.es6 | 3 +- test/javascripts/test_helper.js | 9 ++++- test/javascripts/widgets/widget-test.js.es6 | 3 +- 153 files changed, 319 insertions(+), 493 deletions(-) diff --git a/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 b/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 index ccacb2e705d..67bc308948a 100644 --- a/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 +++ b/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import debounce from "discourse/lib/debounce"; import { renderSpinner } from "discourse/helpers/loading-spinner"; @@ -54,7 +53,7 @@ export default Component.extend( // force rerender this.rerenderBuffer(); - scheduleOnce("afterRender", this, this._scrollDown); + Ember.run.scheduleOnce("afterRender", this, this._scrollDown); }, 150), buildBuffer(buffer) { diff --git a/app/assets/javascripts/admin/components/admin-report-chart.js.es6 b/app/assets/javascripts/admin/components/admin-report-chart.js.es6 index 1f23998d6b8..6ad48208b4a 100644 --- a/app/assets/javascripts/admin/components/admin-report-chart.js.es6 +++ b/app/assets/javascripts/admin/components/admin-report-chart.js.es6 @@ -1,5 +1,3 @@ -import { debounce } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { number } from "discourse/lib/formatter"; import loadScript from "discourse/lib/load-script"; @@ -13,7 +11,7 @@ export default Component.extend({ this._super(...arguments); this.resizeHandler = () => - debounce(this, this._scheduleChartRendering, 500); + Ember.run.debounce(this, this._scheduleChartRendering, 500); }, didInsertElement() { @@ -33,11 +31,11 @@ export default Component.extend({ didReceiveAttrs() { this._super(...arguments); - debounce(this, this._scheduleChartRendering, 100); + Ember.run.debounce(this, this._scheduleChartRendering, 100); }, _scheduleChartRendering() { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this._renderChart( this.model, this.element && this.element.querySelector(".chart-canvas") diff --git a/app/assets/javascripts/admin/components/admin-report-stacked-chart.js.es6 b/app/assets/javascripts/admin/components/admin-report-stacked-chart.js.es6 index 77604527ede..1d70da8fed7 100644 --- a/app/assets/javascripts/admin/components/admin-report-stacked-chart.js.es6 +++ b/app/assets/javascripts/admin/components/admin-report-stacked-chart.js.es6 @@ -1,5 +1,3 @@ -import { debounce } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { number } from "discourse/lib/formatter"; import loadScript from "discourse/lib/load-script"; @@ -11,7 +9,7 @@ export default Component.extend({ this._super(...arguments); this.resizeHandler = () => - debounce(this, this._scheduleChartRendering, 500); + Ember.run.debounce(this, this._scheduleChartRendering, 500); }, didInsertElement() { @@ -31,11 +29,11 @@ export default Component.extend({ didReceiveAttrs() { this._super(...arguments); - debounce(this, this._scheduleChartRendering, 100); + Ember.run.debounce(this, this._scheduleChartRendering, 100); }, _scheduleChartRendering() { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { if (!this.element) { return; } diff --git a/app/assets/javascripts/admin/components/admin-report.js.es6 b/app/assets/javascripts/admin/components/admin-report.js.es6 index 5b3fbdd9a54..4efdf099263 100644 --- a/app/assets/javascripts/admin/components/admin-report.js.es6 +++ b/app/assets/javascripts/admin/components/admin-report.js.es6 @@ -1,5 +1,4 @@ import EmberObject from "@ember/object"; -import { next } from "@ember/runloop"; import Component from "@ember/component"; import ReportLoader from "discourse/lib/reports-loader"; import { exportEntity } from "discourse/lib/export-csv"; @@ -314,7 +313,7 @@ export default Component.extend({ this.setProperties({ isLoading: true, rateLimitationString: null }); - next(() => { + Ember.run.next(() => { let payload = this._buildPayload(["prev_period"]); const callback = response => { diff --git a/app/assets/javascripts/admin/components/admin-theme-editor.js.es6 b/app/assets/javascripts/admin/components/admin-theme-editor.js.es6 index 1dec9fce37b..81204568218 100644 --- a/app/assets/javascripts/admin/components/admin-theme-editor.js.es6 +++ b/app/assets/javascripts/admin/components/admin-theme-editor.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed } from "ember-addons/ember-computed-decorators"; import { fmt } from "discourse/lib/computed"; @@ -84,7 +83,7 @@ export default Component.extend({ toggleMaximize: function() { this.toggleProperty("maximized"); - next(() => this.appEvents.trigger("ace:resize")); + Ember.run.next(() => this.appEvents.trigger("ace:resize")); }, onlyOverriddenChanged(value) { diff --git a/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 b/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 index f186b291f1e..7b6cef45273 100644 --- a/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 +++ b/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import UserField from "admin/models/user-field"; import { bufferedProperty } from "discourse/mixins/buffered-content"; @@ -29,7 +28,7 @@ export default Component.extend(bufferedProperty("userField"), { @observes("editing") _focusOnEdit() { if (this.editing) { - scheduleOnce("afterRender", this, "_focusName"); + Ember.run.scheduleOnce("afterRender", this, "_focusName"); } }, diff --git a/app/assets/javascripts/admin/components/color-input.js.es6 b/app/assets/javascripts/admin/components/color-input.js.es6 index 6c02f78dd59..f6f0025354d 100644 --- a/app/assets/javascripts/admin/components/color-input.js.es6 +++ b/app/assets/javascripts/admin/components/color-input.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { default as loadScript, loadCSS } from "discourse/lib/load-script"; @@ -38,7 +37,7 @@ export default Component.extend({ didInsertElement() { loadScript("/javascripts/spectrum.js").then(() => { loadCSS("/javascripts/spectrum.css").then(() => { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element.querySelector(".picker")) .spectrum({ color: "#" + this.hexValue }) .on("change.spectrum", (me, color) => { @@ -48,7 +47,7 @@ export default Component.extend({ }); }); }); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this.hexValueChanged(); }); } diff --git a/app/assets/javascripts/admin/components/embeddable-host.js.es6 b/app/assets/javascripts/admin/components/embeddable-host.js.es6 index debb6b25b16..746bfeede30 100644 --- a/app/assets/javascripts/admin/components/embeddable-host.js.es6 +++ b/app/assets/javascripts/admin/components/embeddable-host.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { bufferedProperty } from "discourse/mixins/buffered-content"; import computed from "ember-addons/ember-computed-decorators"; @@ -15,7 +14,7 @@ export default Component.extend(bufferedProperty("host"), { @on("didInsertElement") @observes("editing") _focusOnInput() { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this.element.querySelector(".host-name").focus(); }); }, diff --git a/app/assets/javascripts/admin/components/ip-lookup.js.es6 b/app/assets/javascripts/admin/components/ip-lookup.js.es6 index 8438a4ee5c4..f97deff7113 100644 --- a/app/assets/javascripts/admin/components/ip-lookup.js.es6 +++ b/app/assets/javascripts/admin/components/ip-lookup.js.es6 @@ -1,5 +1,4 @@ import EmberObject from "@ember/object"; -import { later } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed } from "ember-addons/ember-computed-decorators"; import { ajax } from "discourse/lib/ajax"; @@ -79,7 +78,7 @@ export default Component.extend({ $(document.body).append($copyRange); if (copyText(text, $copyRange[0])) { this.set("copied", true); - later(() => this.set("copied", false), 2000); + Ember.run.later(() => this.set("copied", false), 2000); } $copyRange.remove(); }, diff --git a/app/assets/javascripts/admin/components/penalty-post-action.js.es6 b/app/assets/javascripts/admin/components/penalty-post-action.js.es6 index 7fefa0f3e5f..dcb3bd3ba59 100644 --- a/app/assets/javascripts/admin/components/penalty-post-action.js.es6 +++ b/app/assets/javascripts/admin/components/penalty-post-action.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import computed from "ember-addons/ember-computed-decorators"; @@ -24,7 +23,7 @@ export default Component.extend({ // If we switch to edit mode, jump to the edit textarea if (postAction === "edit") { - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { let elem = this.element; let body = elem.closest(".modal-body"); body.scrollTop(body.height()); diff --git a/app/assets/javascripts/admin/components/permalink-form.js.es6 b/app/assets/javascripts/admin/components/permalink-form.js.es6 index b1f82ea2958..74efe085d96 100644 --- a/app/assets/javascripts/admin/components/permalink-form.js.es6 +++ b/app/assets/javascripts/admin/components/permalink-form.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed } from "ember-addons/ember-computed-decorators"; import { fmt } from "discourse/lib/computed"; @@ -21,7 +20,7 @@ export default Component.extend({ }, focusPermalink() { - schedule("afterRender", () => + Ember.run.schedule("afterRender", () => this.element.querySelector(".permalink-url").focus() ); }, @@ -70,7 +69,7 @@ export default Component.extend({ didInsertElement() { this._super(...arguments); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element.querySelector(".external-url")).keydown(e => { // enter key if (e.keyCode === 13) { diff --git a/app/assets/javascripts/admin/components/resumable-upload.js.es6 b/app/assets/javascripts/admin/components/resumable-upload.js.es6 index d63a1a651de..8f6a2913253 100644 --- a/app/assets/javascripts/admin/components/resumable-upload.js.es6 +++ b/app/assets/javascripts/admin/components/resumable-upload.js.es6 @@ -1,5 +1,3 @@ -import { schedule } from "@ember/runloop"; -import { later } from "@ember/runloop"; import Component from "@ember/component"; import { iconHTML } from "discourse-common/lib/icon-library"; import { bufferedRender } from "discourse-common/lib/buffered-render"; @@ -47,16 +45,18 @@ export default Component.extend( this.resumable.upload(); // mark as uploading - later(() => this.set("isUploading", true)); + Ember.run.later(() => this.set("isUploading", true)); }); this.resumable.on("fileProgress", file => { // update progress - later(() => this.set("progress", parseInt(file.progress() * 100, 10))); + Ember.run.later(() => + this.set("progress", parseInt(file.progress() * 100, 10)) + ); }); this.resumable.on("fileSuccess", file => { - later(() => { + Ember.run.later(() => { // mark as not uploading anymore this._reset(); @@ -66,7 +66,7 @@ export default Component.extend( }); this.resumable.on("fileError", (file, message) => { - later(() => { + Ember.run.later(() => { // mark as not uploading anymore this._reset(); @@ -78,7 +78,7 @@ export default Component.extend( @on("didInsertElement") _assignBrowse() { - schedule("afterRender", () => + Ember.run.schedule("afterRender", () => this.resumable.assignBrowse($(this.element)) ); }, @@ -117,7 +117,7 @@ export default Component.extend( click() { if (this.isUploading) { this.resumable.cancel(); - later(() => this._reset()); + Ember.run.later(() => this._reset()); return false; } else { return true; diff --git a/app/assets/javascripts/admin/components/screened-ip-address-form.js.es6 b/app/assets/javascripts/admin/components/screened-ip-address-form.js.es6 index 8b6db577649..1b20d7f39c0 100644 --- a/app/assets/javascripts/admin/components/screened-ip-address-form.js.es6 +++ b/app/assets/javascripts/admin/components/screened-ip-address-form.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; /** A form to create an IP address that will be blocked or whitelisted. @@ -63,7 +62,7 @@ export default Component.extend({ .then(result => { this.setProperties({ ip_address: "", formSubmitted: false }); this.action(ScreenedIpAddress.create(result.screened_ip_address)); - schedule("afterRender", () => + Ember.run.schedule("afterRender", () => this.element.querySelector(".ip-address-input").focus() ); }) @@ -85,7 +84,7 @@ export default Component.extend({ @on("didInsertElement") _init() { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element.querySelector(".ip-address-input")).keydown(e => { if (e.keyCode === 13) { this.send("submit"); diff --git a/app/assets/javascripts/admin/components/themes-list-item.js.es6 b/app/assets/javascripts/admin/components/themes-list-item.js.es6 index 6d68f4d8e3b..62e5dff8844 100644 --- a/app/assets/javascripts/admin/components/themes-list-item.js.es6 +++ b/app/assets/javascripts/admin/components/themes-list-item.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -34,7 +33,7 @@ export default Component.extend({ }, scheduleAnimation() { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this.animate(true); }); }, diff --git a/app/assets/javascripts/admin/components/watched-word-form.js.es6 b/app/assets/javascripts/admin/components/watched-word-form.js.es6 index 74bbeeff1eb..919f6de9ef1 100644 --- a/app/assets/javascripts/admin/components/watched-word-form.js.es6 +++ b/app/assets/javascripts/admin/components/watched-word-form.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import WatchedWord from "admin/models/watched-word"; import { @@ -65,7 +64,7 @@ export default Component.extend({ message: I18n.t("admin.watched_words.form.success") }); this.action(WatchedWord.create(result)); - schedule("afterRender", () => + Ember.run.schedule("afterRender", () => this.element.querySelector(".watched-word-input").focus() ); }) @@ -87,7 +86,7 @@ export default Component.extend({ @on("didInsertElement") _init() { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element.querySelector(".watched-word-input")).keydown(e => { if (e.keyCode === 13) { this.send("submit"); diff --git a/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js.es6 b/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js.es6 index ce99c2cfea4..df5d71d3de0 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-customize-colors-show.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import Controller from "@ember/controller"; import computed from "ember-addons/ember-computed-decorators"; @@ -42,7 +41,7 @@ export default Controller.extend({ ); } - later(() => { + Ember.run.later(() => { this.set("model.savingStatus", null); }, 2000); diff --git a/app/assets/javascripts/admin/controllers/admin-dashboard-reports.js.es6 b/app/assets/javascripts/admin/controllers/admin-dashboard-reports.js.es6 index b582f733aa3..12cc0400f17 100644 --- a/app/assets/javascripts/admin/controllers/admin-dashboard-reports.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-dashboard-reports.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; import Controller from "@ember/controller"; import computed from "ember-addons/ember-computed-decorators"; const { get } = Ember; @@ -22,7 +21,7 @@ export default Controller.extend({ actions: { filterReports(filter) { - debounce(this, this._performFiltering, filter, 250); + Ember.run.debounce(this, this._performFiltering, filter, 250); } }, diff --git a/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 b/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 index 65df52b7f6e..da3afb72c59 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 @@ -1,5 +1,4 @@ import EmberObject from "@ember/object"; -import { scheduleOnce } from "@ember/runloop"; import Controller from "@ember/controller"; import { exportEntity } from "discourse/lib/export-csv"; import { outputExportResult } from "discourse/lib/export-result"; @@ -69,7 +68,7 @@ export default Controller.extend({ }, scheduleRefresh() { - scheduleOnce("afterRender", this, this._refresh); + Ember.run.scheduleOnce("afterRender", this, this._refresh); }, actions: { diff --git a/app/assets/javascripts/admin/controllers/admin-site-text-index.js.es6 b/app/assets/javascripts/admin/controllers/admin-site-text-index.js.es6 index 1a1b266ae10..15a16be72b7 100644 --- a/app/assets/javascripts/admin/controllers/admin-site-text-index.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-site-text-index.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; import Controller from "@ember/controller"; let lastSearch; @@ -28,14 +27,14 @@ export default Controller.extend({ toggleOverridden() { this.toggleProperty("overridden"); this.set("searching", true); - debounce(this, this._performSearch, 400); + Ember.run.debounce(this, this._performSearch, 400); }, search() { const q = this.q; if (q !== lastSearch) { this.set("searching", true); - debounce(this, this._performSearch, 400); + Ember.run.debounce(this, this._performSearch, 400); lastSearch = q; } } diff --git a/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 b/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 index eed2c23ec44..51f1787fe01 100644 --- a/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import GrantBadgeController from "discourse/mixins/grant-badge-controller"; @@ -72,7 +71,7 @@ export default Controller.extend(GrantBadgeController, { ).then( () => { this.set("badgeReason", ""); - next(() => { + Ember.run.next(() => { // Update the selected badge ID after the combobox has re-rendered. const newSelectedBadge = this.grantableBadges[0]; if (newSelectedBadge) { diff --git a/app/assets/javascripts/admin/controllers/admin-watched-words-action.js.es6 b/app/assets/javascripts/admin/controllers/admin-watched-words-action.js.es6 index 4435eb9b25e..be982921db5 100644 --- a/app/assets/javascripts/admin/controllers/admin-watched-words-action.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-watched-words-action.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import computed from "ember-addons/ember-computed-decorators"; @@ -52,7 +51,7 @@ export default Controller.extend({ if (a) { a.words.unshiftObject(arg); a.incrementProperty("count"); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { // remove from other actions lists let match = null; this.get("adminWatchedWords.model").forEach(action => { diff --git a/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 b/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 index d3d301212ae..8e23ba55ee9 100644 --- a/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 +++ b/app/assets/javascripts/discourse-common/lib/buffered-render.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; // Ember 2.0 removes buffered rendering, but we can still implement it ourselves. // In the long term we'll want to remove this. @@ -14,7 +13,7 @@ const Mixin = { }, rerenderBuffer() { - scheduleOnce("render", this, this._customRender); + Ember.run.scheduleOnce("render", this, this._customRender); } }; diff --git a/app/assets/javascripts/discourse-common/mixins/focus-event.js.es6 b/app/assets/javascripts/discourse-common/mixins/focus-event.js.es6 index 974d73c958a..3f70e353b89 100644 --- a/app/assets/javascripts/discourse-common/mixins/focus-event.js.es6 +++ b/app/assets/javascripts/discourse-common/mixins/focus-event.js.es6 @@ -1,11 +1,10 @@ -import { bind } from "@ember/runloop"; import { getOwner } from "discourse-common/lib/get-owner"; export default Ember.Mixin.create({ ready() { this._super(...arguments); - this._onChangeHandler = bind(this, this._onChange); + this._onChangeHandler = Ember.run.bind(this, this._onChange); // Default to true Discourse.set("hasFocus", true); diff --git a/app/assets/javascripts/discourse-loader.js b/app/assets/javascripts/discourse-loader.js index 68128b1f6a6..1762d116aac 100644 --- a/app/assets/javascripts/discourse-loader.js +++ b/app/assets/javascripts/discourse-loader.js @@ -14,29 +14,11 @@ var define, requirejs; "@ember/object": { default: Ember.Object }, "@ember/object/proxy": { default: Ember.ObjectProxy }, "@ember/routing/route": { default: Ember.Route }, - "@ember/runloop": { - bind: Ember.run.bind, - cancel: Ember.run.cancel, - debounce: Ember.testing ? Ember.run : Ember.run.debounce, - later: Ember.run.later, - next: Ember.run.next, - once: Ember.run.once, - run: Ember.run, - schedule: Ember.run.schedule, - scheduleOnce: Ember.run.scheduleOnce, - throttle: Ember.run.throttle - }, "@ember/service": { default: Ember.Service, inject: Ember.inject.service } }; - } else if (typeof __PRETTY_TEXT !== "undefined") { - // This is a hack because our server side code includes the pretty_text bundle - // which relies on ember now that we're using modules properly. - // The proper fix would be to move the upload urls code out of the pretty text - // bundle and remove this code. It should never be called; - EMBER_MODULES["@ember/runloop"] = {}; } var _isArray; diff --git a/app/assets/javascripts/discourse/components/add-category-tag-classes.js.es6 b/app/assets/javascripts/discourse/components/add-category-tag-classes.js.es6 index d4a75e6ebe3..209367e8298 100644 --- a/app/assets/javascripts/discourse/components/add-category-tag-classes.js.es6 +++ b/app/assets/javascripts/discourse/components/add-category-tag-classes.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import { observes } from "ember-addons/ember-computed-decorators"; @@ -27,7 +26,7 @@ export default Component.extend({ @observes("category.fullSlug", "tags") refreshClass() { - scheduleOnce("afterRender", this, this._updateClass); + Ember.run.scheduleOnce("afterRender", this, this._updateClass); }, _removeClass() { diff --git a/app/assets/javascripts/discourse/components/choose-message.js.es6 b/app/assets/javascripts/discourse/components/choose-message.js.es6 index be174ad685a..b4518c2c4f6 100644 --- a/app/assets/javascripts/discourse/components/choose-message.js.es6 +++ b/app/assets/javascripts/discourse/components/choose-message.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import debounce from "discourse/lib/debounce"; import { searchForTerm } from "discourse/lib/search"; @@ -58,7 +57,9 @@ export default Component.extend({ chooseMessage(message) { const messageId = Ember.get(message, "id"); this.set("selectedTopicId", messageId); - next(() => $(`#choose-message-${messageId}`).prop("checked", "true")); + Ember.run.next(() => + $(`#choose-message-${messageId}`).prop("checked", "true") + ); return false; } } diff --git a/app/assets/javascripts/discourse/components/choose-topic.js.es6 b/app/assets/javascripts/discourse/components/choose-topic.js.es6 index a31aa5eee4c..df0d3b1c476 100644 --- a/app/assets/javascripts/discourse/components/choose-topic.js.es6 +++ b/app/assets/javascripts/discourse/components/choose-topic.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import debounce from "discourse/lib/debounce"; import { searchForTerm } from "discourse/lib/search"; @@ -63,7 +62,7 @@ export default Component.extend({ actions: { chooseTopic(topic) { this.set("selectedTopicId", topic.id); - next(() => { + Ember.run.next(() => { document.getElementById(`choose-topic-${topic.id}`).checked = true; }); return false; diff --git a/app/assets/javascripts/discourse/components/composer-body.js.es6 b/app/assets/javascripts/discourse/components/composer-body.js.es6 index f265917279b..7fea43389d2 100644 --- a/app/assets/javascripts/discourse/components/composer-body.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-body.js.es6 @@ -1,8 +1,3 @@ -import { throttle } from "@ember/runloop"; -import { run } from "@ember/runloop"; -import { cancel } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; -import { later } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -65,7 +60,7 @@ export default Component.extend(KeyEnterEscape, { "composer.canEditTopicFeaturedLink" ) resize() { - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { if (!this.element || this.isDestroying || this.isDestroyed) { return; } @@ -83,8 +78,8 @@ export default Component.extend(KeyEnterEscape, { // One second from now, check to see if the last key was hit when // we recorded it. If it was, the user paused typing. - cancel(this._lastKeyTimeout); - this._lastKeyTimeout = later(() => { + Ember.run.cancel(this._lastKeyTimeout); + this._lastKeyTimeout = Ember.run.later(() => { if (lastKeyUp !== this._lastKeyUp) { return; } @@ -121,7 +116,7 @@ export default Component.extend(KeyEnterEscape, { const throttledPerformDrag = (event => { event.preventDefault(); - throttle(this, performDrag, event, THROTTLE_RATE); + Ember.run.throttle(this, performDrag, event, THROTTLE_RATE); }).bind(this); const endDrag = () => { @@ -158,7 +153,7 @@ export default Component.extend(KeyEnterEscape, { this._super(...arguments); this.setupComposerResizeEvents(); - const resize = () => run(() => this.resize()); + const resize = () => Ember.run(() => this.resize()); const triggerOpen = () => { if (this.get("composer.composeState") === Composer.OPEN) { this.appEvents.trigger("composer:opened"); diff --git a/app/assets/javascripts/discourse/components/composer-editor.js.es6 b/app/assets/javascripts/discourse/components/composer-editor.js.es6 index 8042d248da4..cc419e1af90 100644 --- a/app/assets/javascripts/discourse/components/composer-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-editor.js.es6 @@ -1,8 +1,3 @@ -import { throttle } from "@ember/runloop"; -import { next } from "@ember/runloop"; -import { debounce } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; -import { later } from "@ember/runloop"; import Component from "@ember/component"; import userSearch from "discourse/lib/user-search"; import { @@ -188,7 +183,7 @@ export default Component.extend({ transformComplete: v => v.username || v.name, afterComplete() { // ensures textarea scroll position is correct - scheduleOnce("afterRender", () => $input.blur().focus()); + Ember.run.scheduleOnce("afterRender", () => $input.blur().focus()); } }); } @@ -197,7 +192,13 @@ export default Component.extend({ this._initInputPreviewSync($input, $preview); } else { $input.on("scroll", () => - throttle(this, this._syncEditorAndPreviewScroll, $input, $preview, 20) + Ember.run.throttle( + this, + this._syncEditorAndPreviewScroll, + $input, + $preview, + 20 + ) ); } @@ -315,7 +316,7 @@ export default Component.extend({ this.appEvents.on(event, this, this._resetShouldBuildScrollMap); }); - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { $input.on("touchstart mouseenter", () => { if (!$preview.is(":visible")) return; $preview.off("scroll"); @@ -341,7 +342,7 @@ export default Component.extend({ this.set("shouldBuildScrollMap", false); } - throttle(this, $callback, $input, $preview, this.scrollMap, 20); + Ember.run.throttle(this, $callback, $input, $preview, this.scrollMap, 20); }, _teardownInputPreviewSync() { @@ -558,7 +559,7 @@ export default Component.extend({ }, _warnMentionedGroups($preview) { - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { var found = this.warnedGroupMentions || []; $preview.find(".mention-group.notify").each((idx, e) => { const $e = $(e); @@ -586,7 +587,7 @@ export default Component.extend({ return; } - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { let found = this.warnedCannotSeeMentions || []; $preview.find(".mention.cannot-see").each((idx, e) => { @@ -596,7 +597,7 @@ export default Component.extend({ if (found.indexOf(name) === -1) { // add a delay to allow for typing, so you don't open the warning right away // previously we would warn after @bob even if you were about to mention @bob2 - later( + Ember.run.later( this, () => { if ( @@ -617,7 +618,7 @@ export default Component.extend({ }, _resetUpload(removePlaceholder) { - next(() => { + Ember.run.next(() => { if (this._validUploads > 0) { this._validUploads--; } @@ -896,9 +897,9 @@ export default Component.extend({ @on("willDestroyElement") _composerClosed() { this.appEvents.trigger("composer:will-close"); - next(() => { + Ember.run.next(() => { // need to wait a bit for the "slide down" transition of the composer - later( + Ember.run.later( () => this.appEvents.trigger("composer:closed"), Ember.testing ? 0 : 400 ); @@ -969,7 +970,7 @@ export default Component.extend({ // Paint mentions const unseenMentions = linkSeenMentions($preview, this.siteSettings); if (unseenMentions.length) { - debounce( + Ember.run.debounce( this, this._renderUnseenMentions, $preview, @@ -984,7 +985,7 @@ export default Component.extend({ // Paint category hashtags const unseenCategoryHashtags = linkSeenCategoryHashtags($preview); if (unseenCategoryHashtags.length) { - debounce( + Ember.run.debounce( this, this._renderUnseenCategoryHashtags, $preview, @@ -997,7 +998,7 @@ export default Component.extend({ if (this.siteSettings.tagging_enabled) { const unseenTagHashtags = linkSeenTagHashtags($preview); if (unseenTagHashtags.length) { - debounce( + Ember.run.debounce( this, this._renderUnseenTagHashtags, $preview, @@ -1008,7 +1009,7 @@ export default Component.extend({ } // Paint oneboxes - debounce( + Ember.run.debounce( this, () => { const oneboxes = {}; diff --git a/app/assets/javascripts/discourse/components/composer-messages.js.es6 b/app/assets/javascripts/discourse/components/composer-messages.js.es6 index 82a4fceeaf8..fb07997b809 100644 --- a/app/assets/javascripts/discourse/components/composer-messages.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-messages.js.es6 @@ -1,5 +1,4 @@ import EmberObject from "@ember/object"; -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import LinkLookup from "discourse/lib/link-lookup"; @@ -25,7 +24,7 @@ export default Component.extend({ this.appEvents.on("composer:find-similar", this, this._findSimilar); this.appEvents.on("composer-messages:close", this, this._closeTop); this.appEvents.on("composer-messages:create", this, this._create); - scheduleOnce("afterRender", this, this.reset); + Ember.run.scheduleOnce("afterRender", this, this.reset); }, willDestroyElement() { diff --git a/app/assets/javascripts/discourse/components/composer-title.js.es6 b/app/assets/javascripts/discourse/components/composer-title.js.es6 index 540f1b36eb1..459d1bd0a6e 100644 --- a/app/assets/javascripts/discourse/components/composer-title.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-title.js.es6 @@ -1,6 +1,3 @@ -import { next } from "@ember/runloop"; -import { debounce } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -27,7 +24,7 @@ export default Component.extend({ } if (this.get("composer.titleLength") > 0) { - debounce(this, this._titleChanged, 10); + Ember.run.debounce(this, this._titleChanged, 10); } }, @@ -82,13 +79,13 @@ export default Component.extend({ } if (Ember.testing) { - next(() => + Ember.run.next(() => // not ideal but we don't want to run this in current // runloop to avoid an error in console this._checkForUrl() ); } else { - debounce(this, this._checkForUrl, 500); + Ember.run.debounce(this, this._checkForUrl, 500); } }, @@ -137,14 +134,14 @@ export default Component.extend({ }) .finally(() => { this.set("composer.loading", false); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element.querySelector("input")).putCursorAtEnd(); }); }); } else { this._updatePost(loadOnebox); this.set("composer.loading", false); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element.querySelector("input")).putCursorAtEnd(); }); } diff --git a/app/assets/javascripts/discourse/components/composer-user-selector.js.es6 b/app/assets/javascripts/discourse/components/composer-user-selector.js.es6 index 3e9aa03784c..694db1cfd37 100644 --- a/app/assets/javascripts/discourse/components/composer-user-selector.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-user-selector.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -77,7 +76,7 @@ export default Component.extend({ toggleSelector() { this.set("showSelector", true); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element) .find("input") .focus(); diff --git a/app/assets/javascripts/discourse/components/cook-text.js.es6 b/app/assets/javascripts/discourse/components/cook-text.js.es6 index 256636a3c58..e9e19b338fc 100644 --- a/app/assets/javascripts/discourse/components/cook-text.js.es6 +++ b/app/assets/javascripts/discourse/components/cook-text.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import { cookAsync } from "discourse/lib/text"; import { ajax } from "discourse/lib/ajax"; @@ -13,7 +12,7 @@ const CookText = Component.extend({ this.set("cooked", cooked); // no choice but to defer this cause // pretty text may only be loaded now - next(() => + Ember.run.next(() => window .requireModule("pretty-text/upload-short-url") .resolveAllShortUrls(ajax) diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index e839fad6c6f..185223be34e 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -1,8 +1,3 @@ -import { next } from "@ember/runloop"; -import { debounce } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; -import { later } from "@ember/runloop"; import { inject as service } from "@ember/service"; import Component from "@ember/component"; /*global Mousetrap:true */ @@ -254,7 +249,7 @@ export default Component.extend({ this._applyEmojiAutocomplete($editorInput); this._applyCategoryHashtagAutocomplete($editorInput); - scheduleOnce("afterRender", this, this._readyNow); + Ember.run.scheduleOnce("afterRender", this, this._readyNow); const mouseTrap = Mousetrap(this.element.querySelector(".d-editor-input")); const shortcuts = this.get("toolbar.shortcuts"); @@ -353,7 +348,7 @@ export default Component.extend({ return; } this.set("preview", cooked); - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { if (this._state !== "inDOM") { return; } @@ -377,7 +372,7 @@ export default Component.extend({ if (Ember.testing) { this._updatePreview(); } else { - debounce(this, this._updatePreview, 30); + Ember.run.debounce(this, this._updatePreview, 30); } }, @@ -437,14 +432,17 @@ export default Component.extend({ emojiPickerIsActive: true }); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { const filterInput = document.querySelector( ".emoji-picker input[name='filter']" ); if (filterInput) { filterInput.value = v.term; - later(() => filterInput.dispatchEvent(new Event("input")), 50); + Ember.run.later( + () => filterInput.dispatchEvent(new Event("input")), + 50 + ); } }); @@ -549,7 +547,7 @@ export default Component.extend({ }, _selectText(from, length) { - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { const textarea = this.element.querySelector("textarea.d-editor-input"); const $textarea = $(textarea); const oldScrollPos = $textarea.scrollTop(); @@ -558,7 +556,7 @@ export default Component.extend({ } textarea.selectionStart = from; textarea.selectionEnd = from + length; - next(() => $textarea.trigger("change")); + Ember.run.next(() => $textarea.trigger("change")); $textarea.scrollTop(oldScrollPos); }); }, @@ -787,7 +785,7 @@ export default Component.extend({ $textarea.val(value); $textarea.prop("selectionStart", insert.length); $textarea.prop("selectionEnd", insert.length); - next(() => $textarea.trigger("change")); + Ember.run.next(() => $textarea.trigger("change")); this._focusTextArea(); }, @@ -888,7 +886,7 @@ export default Component.extend({ // ensures textarea scroll position is correct _focusTextArea() { const textarea = this.element.querySelector("textarea.d-editor-input"); - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { textarea.blur(); textarea.focus(); }); diff --git a/app/assets/javascripts/discourse/components/d-modal-body.js.es6 b/app/assets/javascripts/discourse/components/d-modal-body.js.es6 index a8543095abb..33b444d05b3 100644 --- a/app/assets/javascripts/discourse/components/d-modal-body.js.es6 +++ b/app/assets/javascripts/discourse/components/d-modal-body.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; export default Component.extend({ classNames: ["modal-body"], @@ -15,7 +14,7 @@ export default Component.extend({ fixedParent.modal("show"); } - scheduleOnce("afterRender", this, this._afterFirstRender); + Ember.run.scheduleOnce("afterRender", this, this._afterFirstRender); this.appEvents.on("modal-body:flash", this, "_flash"); this.appEvents.on("modal-body:clearFlash", this, "_clearFlash"); }, diff --git a/app/assets/javascripts/discourse/components/d-modal.js.es6 b/app/assets/javascripts/discourse/components/d-modal.js.es6 index 19d4d2264c5..0c83f529ad9 100644 --- a/app/assets/javascripts/discourse/components/d-modal.js.es6 +++ b/app/assets/javascripts/discourse/components/d-modal.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import { on } from "ember-addons/ember-computed-decorators"; import Component from "@ember/component"; @@ -33,11 +32,11 @@ export default Component.extend({ setUp() { $("html").on("keydown.discourse-modal", e => { if (e.which === 27 && this.dismissable) { - next(() => $(".modal-header button.modal-close").click()); + Ember.run.next(() => $(".modal-header button.modal-close").click()); } if (e.which === 13 && this.triggerClickOnEnter(e)) { - next(() => $(".modal-footer .btn-primary").click()); + Ember.run.next(() => $(".modal-footer .btn-primary").click()); } }); diff --git a/app/assets/javascripts/discourse/components/date-input.js.es6 b/app/assets/javascripts/discourse/components/date-input.js.es6 index 927be37881a..0161fb8aa21 100644 --- a/app/assets/javascripts/discourse/components/date-input.js.es6 +++ b/app/assets/javascripts/discourse/components/date-input.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; /* global Pikaday:true */ import loadScript from "discourse/lib/load-script"; @@ -38,7 +37,7 @@ export default Component.extend({ _loadPikadayPicker(container) { loadScript("/javascripts/pikaday.js").then(() => { - next(() => { + Ember.run.next(() => { const default_opts = { field: this.element.querySelector(".date-picker"), container: container || this.element, diff --git a/app/assets/javascripts/discourse/components/date-picker.js.es6 b/app/assets/javascripts/discourse/components/date-picker.js.es6 index e9403326bbd..7fc28a50ef2 100644 --- a/app/assets/javascripts/discourse/components/date-picker.js.es6 +++ b/app/assets/javascripts/discourse/components/date-picker.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; /* global Pikaday:true */ import loadScript from "discourse/lib/load-script"; @@ -31,7 +30,7 @@ export default Component.extend({ _loadPikadayPicker(container) { loadScript("/javascripts/pikaday.js").then(() => { - next(() => { + Ember.run.next(() => { const options = { field: this.element.querySelector(".date-picker"), container: container || null, diff --git a/app/assets/javascripts/discourse/components/discourse-topic.js.es6 b/app/assets/javascripts/discourse/components/discourse-topic.js.es6 index 796e0a90683..53ab8edbbe3 100644 --- a/app/assets/javascripts/discourse/components/discourse-topic.js.es6 +++ b/app/assets/javascripts/discourse/components/discourse-topic.js.es6 @@ -1,7 +1,3 @@ -import { throttle } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; -import { later } from "@ember/runloop"; import Component from "@ember/component"; import DiscourseURL from "discourse/lib/url"; import AddArchetypeClass from "discourse/mixins/add-archetype-class"; @@ -54,13 +50,13 @@ export default Component.extend( const enteredAt = this.enteredAt; if (enteredAt && this.lastEnteredAt !== enteredAt) { this._lastShowTopic = null; - schedule("afterRender", () => this.scrolled()); + Ember.run.schedule("afterRender", () => this.scrolled()); this.set("lastEnteredAt", enteredAt); } }, _highlightPost(postNumber) { - scheduleOnce("afterRender", null, highlight, postNumber); + Ember.run.scheduleOnce("afterRender", null, highlight, postNumber); }, _hideTopicInHeader() { @@ -82,7 +78,7 @@ export default Component.extend( this.pauseHeaderTopicUpdate = true; this._lastShowTopic = true; - later(() => { + Ember.run.later(() => { this._lastShowTopic = false; this.pauseHeaderTopicUpdate = false; }, debounceDuration); @@ -196,7 +192,7 @@ export default Component.extend( // at the start of the scroll. This feels a lot more snappy compared to waiting // for the scroll to end if we debounce. if (this.site.mobileView && this.hasScrolled) { - throttle( + Ember.run.throttle( this, this.calculateDirection, offset, diff --git a/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 b/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 index 6706cacd4ad..c9b2bb92bb9 100644 --- a/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 +++ b/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6 @@ -1,5 +1,3 @@ -import { schedule } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import { on, observes } from "ember-addons/ember-computed-decorators"; import LoadMore from "discourse/mixins/load-more"; @@ -14,9 +12,11 @@ const DiscoveryTopicsListComponent = Component.extend(UrlRefresh, LoadMore, { _readjustScrollPosition() { const scrollTo = this.session.get("topicListScrollPosition"); if (scrollTo && scrollTo >= 0) { - schedule("afterRender", () => $(window).scrollTop(scrollTo + 1)); + Ember.run.schedule("afterRender", () => + $(window).scrollTop(scrollTo + 1) + ); } else { - scheduleOnce("afterRender", this, this.loadMoreUnlessFull); + Ember.run.scheduleOnce("afterRender", this, this.loadMoreUnlessFull); } }, @@ -38,7 +38,7 @@ const DiscoveryTopicsListComponent = Component.extend(UrlRefresh, LoadMore, { loadMore() { Discourse.updateContextCount(0); this.model.loadMore().then(hasMoreResults => { - schedule("afterRender", () => this.saveScrollPosition()); + Ember.run.schedule("afterRender", () => this.saveScrollPosition()); if (!hasMoreResults) { this.eyeline.flushRest(); } else if ($(window).height() >= $(document).height()) { diff --git a/app/assets/javascripts/discourse/components/edit-category-tab.js.es6 b/app/assets/javascripts/discourse/components/edit-category-tab.js.es6 index 42be7233afb..15aae0ed284 100644 --- a/app/assets/javascripts/discourse/components/edit-category-tab.js.es6 +++ b/app/assets/javascripts/discourse/components/edit-category-tab.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import { propertyEqual } from "discourse/lib/computed"; import computed from "ember-addons/ember-computed-decorators"; @@ -21,7 +20,7 @@ export default Component.extend({ didInsertElement() { this._super(...arguments); - scheduleOnce("afterRender", this, this._addToCollection); + Ember.run.scheduleOnce("afterRender", this, this._addToCollection); }, _addToCollection: function() { diff --git a/app/assets/javascripts/discourse/components/edit-category-topic-template.js.es6 b/app/assets/javascripts/discourse/components/edit-category-topic-template.js.es6 index c3254cc3d6e..b1d5c79d812 100644 --- a/app/assets/javascripts/discourse/components/edit-category-topic-template.js.es6 +++ b/app/assets/javascripts/discourse/components/edit-category-topic-template.js.es6 @@ -1,10 +1,9 @@ -import { scheduleOnce } from "@ember/runloop"; import { buildCategoryPanel } from "discourse/components/edit-category-panel"; export default buildCategoryPanel("topic-template", { _activeTabChanged: function() { if (this.activeTab) { - scheduleOnce("afterRender", () => + Ember.run.scheduleOnce("afterRender", () => this.element.querySelector(".d-editor-input").focus() ); } diff --git a/app/assets/javascripts/discourse/components/edit-topic-timer-form.js.es6 b/app/assets/javascripts/discourse/components/edit-topic-timer-form.js.es6 index c46af80e2f6..5d01c739e7e 100644 --- a/app/assets/javascripts/discourse/components/edit-topic-timer-form.js.es6 +++ b/app/assets/javascripts/discourse/components/edit-topic-timer-form.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -74,7 +73,7 @@ export default Component.extend({ @observes("selection") _updateBasedOnLastPost() { if (!this.autoClose) { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this.set("topicTimer.based_on_last_post", false); }); } diff --git a/app/assets/javascripts/discourse/components/expanding-text-area.js.es6 b/app/assets/javascripts/discourse/components/expanding-text-area.js.es6 index d2b980a8f23..7008eb1d013 100644 --- a/app/assets/javascripts/discourse/components/expanding-text-area.js.es6 +++ b/app/assets/javascripts/discourse/components/expanding-text-area.js.es6 @@ -1,11 +1,10 @@ -import { scheduleOnce } from "@ember/runloop"; import { on, observes } from "ember-addons/ember-computed-decorators"; import autosize from "discourse/lib/autosize"; export default Ember.TextArea.extend({ @on("didInsertElement") _startWatching() { - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { $(this.element).focus(); autosize(this.element); }); diff --git a/app/assets/javascripts/discourse/components/flag-selection.js.es6 b/app/assets/javascripts/discourse/components/flag-selection.js.es6 index b52f5449078..f039b306600 100644 --- a/app/assets/javascripts/discourse/components/flag-selection.js.es6 +++ b/app/assets/javascripts/discourse/components/flag-selection.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import { observes } from "ember-addons/ember-computed-decorators"; @@ -17,6 +16,6 @@ export default Component.extend({ @observes("nameKey") selectedChanged() { - next(this, this._selectRadio); + Ember.run.next(this, this._selectRadio); } }); diff --git a/app/assets/javascripts/discourse/components/footer-nav.js.es6 b/app/assets/javascripts/discourse/components/footer-nav.js.es6 index d94910364ec..7ac143225a1 100644 --- a/app/assets/javascripts/discourse/components/footer-nav.js.es6 +++ b/app/assets/javascripts/discourse/components/footer-nav.js.es6 @@ -1,4 +1,3 @@ -import { throttle } from "@ember/runloop"; import MountWidget from "discourse/components/mount-widget"; import MobileScrollDirection from "discourse/mixins/mobile-scroll-direction"; import Scrolling from "discourse/mixins/scrolling"; @@ -79,7 +78,7 @@ const FooterNavComponent = MountWidget.extend( const offset = window.pageYOffset || $("html").scrollTop(); - throttle( + Ember.run.throttle( this, this.calculateDirection, offset, diff --git a/app/assets/javascripts/discourse/components/global-notice.js.es6 b/app/assets/javascripts/discourse/components/global-notice.js.es6 index 1b288f54293..5bacd98013e 100644 --- a/app/assets/javascripts/discourse/components/global-notice.js.es6 +++ b/app/assets/javascripts/discourse/components/global-notice.js.es6 @@ -1,4 +1,3 @@ -import { bind } from "@ember/runloop"; import Component from "@ember/component"; import { on } from "ember-addons/ember-computed-decorators"; import { iconHTML } from "discourse-common/lib/icon-library"; @@ -89,10 +88,13 @@ export default Component.extend( @on("didInsertElement") _setupLogsNotice() { - this._boundRerenderBuffer = bind(this, this.rerenderBuffer); + this._boundRerenderBuffer = Ember.run.bind(this, this.rerenderBuffer); LogsNotice.current().addObserver("hidden", this._boundRerenderBuffer); - this._boundResetCurrentProp = bind(this, this._resetCurrentProp); + this._boundResetCurrentProp = Ember.run.bind( + this, + this._resetCurrentProp + ); $(this.element).on( "click.global-notice", ".alert-logs-notice .close", diff --git a/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6 b/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6 index a190ffda1db..a80512b93d7 100644 --- a/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6 +++ b/app/assets/javascripts/discourse/components/group-flair-inputs.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; import Component from "@ember/component"; import computed from "ember-addons/ember-computed-decorators"; import { observes } from "ember-addons/ember-computed-decorators"; @@ -26,7 +25,7 @@ export default Component.extend({ @observes("model.flair_url") _loadSVGIcon() { - debounce(this, this._loadIcon, 1000); + Ember.run.debounce(this, this._loadIcon, 1000); }, _loadIcon() { diff --git a/app/assets/javascripts/discourse/components/image-uploader.js.es6 b/app/assets/javascripts/discourse/components/image-uploader.js.es6 index ca919959a8a..9142c17e60e 100644 --- a/app/assets/javascripts/discourse/components/image-uploader.js.es6 +++ b/app/assets/javascripts/discourse/components/image-uploader.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import computed from "ember-addons/ember-computed-decorators"; import UploadMixin from "discourse/mixins/upload"; @@ -78,13 +77,13 @@ export default Component.extend(UploadMixin, { }, _openLightbox() { - next(() => + Ember.run.next(() => $(this.element.querySelector("a.lightbox")).magnificPopup("open") ); }, _applyLightbox() { - if (this.imageUrl) next(() => lightbox($(this.element))); + if (this.imageUrl) Ember.run.next(() => lightbox($(this.element))); }, actions: { diff --git a/app/assets/javascripts/discourse/components/link-to-input.js.es6 b/app/assets/javascripts/discourse/components/link-to-input.js.es6 index 19015ec0e8f..653761018eb 100644 --- a/app/assets/javascripts/discourse/components/link-to-input.js.es6 +++ b/app/assets/javascripts/discourse/components/link-to-input.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; export default Component.extend({ showInput: false, @@ -6,7 +5,7 @@ export default Component.extend({ click() { this.onClick(); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $(this.element) .find("input") .focus(); diff --git a/app/assets/javascripts/discourse/components/login-modal.js.es6 b/app/assets/javascripts/discourse/components/login-modal.js.es6 index 2ee72f87225..e8bbe98c876 100644 --- a/app/assets/javascripts/discourse/components/login-modal.js.es6 +++ b/app/assets/javascripts/discourse/components/login-modal.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; export default Component.extend({ didInsertElement() { @@ -15,7 +14,7 @@ export default Component.extend({ this.set("loginName", $.cookie("email")); } - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $( "#login-account-password, #login-account-name, #login-second-factor" ).keydown(e => { diff --git a/app/assets/javascripts/discourse/components/mobile-nav.js.es6 b/app/assets/javascripts/discourse/components/mobile-nav.js.es6 index a47c09c5c47..a60a1070794 100644 --- a/app/assets/javascripts/discourse/components/mobile-nav.js.es6 +++ b/app/assets/javascripts/discourse/components/mobile-nav.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import { on, observes } from "ember-addons/ember-computed-decorators"; @@ -22,7 +21,7 @@ export default Component.extend({ @observes("currentPath") currentPathChanged() { this.set("expanded", false); - next(() => this._updateSelectedHtml()); + Ember.run.next(() => this._updateSelectedHtml()); }, _updateSelectedHtml() { @@ -42,7 +41,7 @@ export default Component.extend({ toggleExpanded() { this.toggleProperty("expanded"); - next(() => { + Ember.run.next(() => { if (this.expanded) { $(window) .off("click.mobile-nav") diff --git a/app/assets/javascripts/discourse/components/mount-widget.js.es6 b/app/assets/javascripts/discourse/components/mount-widget.js.es6 index 1363750b81d..5f0e584977b 100644 --- a/app/assets/javascripts/discourse/components/mount-widget.js.es6 +++ b/app/assets/javascripts/discourse/components/mount-widget.js.es6 @@ -1,5 +1,3 @@ -import { cancel } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import { diff, patch } from "virtual-dom"; import { WidgetClickHook } from "discourse/widgets/hooks"; @@ -52,7 +50,7 @@ export default Component.extend({ this._rootNode = document.createElement("div"); this.element.appendChild(this._rootNode); - this._timeout = scheduleOnce("render", this, this.rerenderWidget); + this._timeout = Ember.run.scheduleOnce("render", this, this.rerenderWidget); }, willClearRender() { @@ -70,7 +68,7 @@ export default Component.extend({ const [eventName, caller] = evt; this.appEvents.off(eventName, this, caller); }); - cancel(this._timeout); + Ember.run.cancel(this._timeout); }, afterRender() {}, @@ -99,13 +97,13 @@ export default Component.extend({ this._renderCallback = callback; } - scheduleOnce("render", this, this.rerenderWidget); + Ember.run.scheduleOnce("render", this, this.rerenderWidget); }, buildArgs() {}, rerenderWidget() { - cancel(this._timeout); + Ember.run.cancel(this._timeout); if (this._rootNode) { if (!this._widgetClass) { diff --git a/app/assets/javascripts/discourse/components/navigation-bar.js.es6 b/app/assets/javascripts/discourse/components/navigation-bar.js.es6 index bf2947fc1db..01dacde789d 100644 --- a/app/assets/javascripts/discourse/components/navigation-bar.js.es6 +++ b/app/assets/javascripts/discourse/components/navigation-bar.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -70,7 +69,7 @@ export default Component.extend({ if (this.expanded) { DiscourseURL.appEvents.on("dom:clean", this, this.ensureDropClosed); - next(() => { + Ember.run.next(() => { if (!this.expanded) { return; } @@ -78,7 +77,7 @@ export default Component.extend({ $(this.element.querySelector(".drop a")).on("click", () => { this.element.querySelector(".drop").style.display = "none"; - next(() => { + Ember.run.next(() => { if (!this.element || this.isDestroying || this.isDestroyed) { return; } diff --git a/app/assets/javascripts/discourse/components/pwa-install-banner.js.es6 b/app/assets/javascripts/discourse/components/pwa-install-banner.js.es6 index e2e60f3d88c..b6c9df818bb 100644 --- a/app/assets/javascripts/discourse/components/pwa-install-banner.js.es6 +++ b/app/assets/javascripts/discourse/components/pwa-install-banner.js.es6 @@ -1,4 +1,3 @@ -import { bind } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -19,7 +18,10 @@ export default Component.extend({ @on("didInsertElement") _registerListener() { - this._promptEventHandler = bind(this, this._handleInstallPromptEvent); + this._promptEventHandler = Ember.run.bind( + this, + this._handleInstallPromptEvent + ); window.addEventListener("beforeinstallprompt", this._promptEventHandler); }, diff --git a/app/assets/javascripts/discourse/components/quote-button.js.es6 b/app/assets/javascripts/discourse/components/quote-button.js.es6 index ec8b8c47e88..f16bf6690d7 100644 --- a/app/assets/javascripts/discourse/components/quote-button.js.es6 +++ b/app/assets/javascripts/discourse/components/quote-button.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import debounce from "discourse/lib/debounce"; import { selectedText } from "discourse/lib/utilities"; @@ -104,7 +103,7 @@ export default Component.extend({ } // change the position of the button - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { let top = markerOffset.top; let left = markerOffset.left + Math.max(0, parentScrollLeft); diff --git a/app/assets/javascripts/discourse/components/scroll-tracker.js.es6 b/app/assets/javascripts/discourse/components/scroll-tracker.js.es6 index 7637845c1e3..dad7447f0c2 100644 --- a/app/assets/javascripts/discourse/components/scroll-tracker.js.es6 +++ b/app/assets/javascripts/discourse/components/scroll-tracker.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import Scrolling from "discourse/mixins/scrolling"; @@ -20,7 +19,7 @@ export default Component.extend(Scrolling, { const data = this.session.get(this.trackerName); if (data && data.position >= 0 && data.tag === this.tag) { - next(() => $(window).scrollTop(data.position + 1)); + Ember.run.next(() => $(window).scrollTop(data.position + 1)); } }, diff --git a/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 b/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 index 04f0897eb65..89a48126f30 100644 --- a/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 +++ b/app/assets/javascripts/discourse/components/scrolling-post-stream.js.es6 @@ -1,6 +1,3 @@ -import { next } from "@ember/runloop"; -import { debounce } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import DiscourseURL from "discourse/lib/url"; import MountWidget from "discourse/components/mount-widget"; import { cloak, uncloak } from "discourse/widgets/post-stream"; @@ -207,7 +204,7 @@ export default MountWidget.extend({ // will cause the browser to scroll to the top of the document // in Chrome. This makes sure the scroll works correctly if that // happens. - next(() => $("html, body").scrollTop(whereY)); + Ember.run.next(() => $("html, body").scrollTop(whereY)); } }); }; @@ -273,7 +270,7 @@ export default MountWidget.extend({ }, _scrollTriggered() { - scheduleOnce("afterRender", this, this.scrolled); + Ember.run.scheduleOnce("afterRender", this, this.scrolled); }, _posted(staged) { @@ -309,12 +306,13 @@ export default MountWidget.extend({ }, _debouncedScroll() { - debounce(this, this._scrollTriggered, 10); + Ember.run.debounce(this, this._scrollTriggered, 10); }, didInsertElement() { this._super(...arguments); - const debouncedScroll = () => debounce(this, this._scrollTriggered, 10); + const debouncedScroll = () => + Ember.run.debounce(this, this._scrollTriggered, 10); this._previouslyNearby = {}; diff --git a/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 b/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 index 8f1779487d2..333b6d65492 100644 --- a/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 +++ b/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 @@ -1,5 +1,3 @@ -import { debounce } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import { observes } from "ember-addons/ember-computed-decorators"; import { escapeExpression } from "discourse/lib/utilities"; @@ -74,13 +72,13 @@ export default Component.extend({ this._init(); - scheduleOnce("afterRender", () => this._update()); + Ember.run.scheduleOnce("afterRender", () => this._update()); }, @observes("searchTerm") _updateOptions() { this._update(); - debounce(this, this._update, 250); + Ember.run.debounce(this, this._update, 250); }, _init() { diff --git a/app/assets/javascripts/discourse/components/share-panel.js.es6 b/app/assets/javascripts/discourse/components/share-panel.js.es6 index 45b9317145d..65f5cfd9641 100644 --- a/app/assets/javascripts/discourse/components/share-panel.js.es6 +++ b/app/assets/javascripts/discourse/components/share-panel.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { escapeExpression } from "discourse/lib/utilities"; import { default as computed } from "ember-addons/ember-computed-decorators"; @@ -48,7 +47,7 @@ export default Component.extend({ this.element.querySelector(".topic-share-url-for-touch a") ); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { if (!this.capabilities.touch) { $linkForTouch.parent().remove(); diff --git a/app/assets/javascripts/discourse/components/share-popup.js.es6 b/app/assets/javascripts/discourse/components/share-popup.js.es6 index 49d8f677235..17e05c47c97 100644 --- a/app/assets/javascripts/discourse/components/share-popup.js.es6 +++ b/app/assets/javascripts/discourse/components/share-popup.js.es6 @@ -1,5 +1,3 @@ -import { bind } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import { wantsNewWindow } from "discourse/lib/intercept-click"; import { longDateNoYear } from "discourse/lib/formatter"; @@ -91,7 +89,7 @@ export default Component.extend({ this.set("link", url); this.set("visible", true); - scheduleOnce("afterRender", this, this._focusUrl); + Ember.run.scheduleOnce("afterRender", this, this._focusUrl); }, _mouseDownHandler(event) { @@ -156,9 +154,9 @@ export default Component.extend({ @on("init") _setupHandlers() { - this._boundMouseDownHandler = bind(this, this._mouseDownHandler); - this._boundClickHandler = bind(this, this._clickHandler); - this._boundKeydownHandler = bind(this, this._keydownHandler); + this._boundMouseDownHandler = Ember.run.bind(this, this._mouseDownHandler); + this._boundClickHandler = Ember.run.bind(this, this._clickHandler); + this._boundKeydownHandler = Ember.run.bind(this, this._keydownHandler); }, didInsertElement() { diff --git a/app/assets/javascripts/discourse/components/signup-cta.js.es6 b/app/assets/javascripts/discourse/components/signup-cta.js.es6 index 49536eff37b..d7630e26817 100644 --- a/app/assets/javascripts/discourse/components/signup-cta.js.es6 +++ b/app/assets/javascripts/discourse/components/signup-cta.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import Component from "@ember/component"; export default Component.extend({ action: "showCreateAccount", @@ -11,7 +10,10 @@ export default Component.extend({ hideForSession() { this.session.set("hideSignupCta", true); this.keyValueStore.setItem("anon-cta-hidden", new Date().getTime()); - later(() => this.session.set("showSignupCta", false), 20 * 1000); + Ember.run.later( + () => this.session.set("showSignupCta", false), + 20 * 1000 + ); } }, diff --git a/app/assets/javascripts/discourse/components/site-header.js.es6 b/app/assets/javascripts/discourse/components/site-header.js.es6 index b7b82071c1a..41c71a48e52 100644 --- a/app/assets/javascripts/discourse/components/site-header.js.es6 +++ b/app/assets/javascripts/discourse/components/site-header.js.es6 @@ -1,6 +1,3 @@ -import { cancel } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; -import { later } from "@ember/runloop"; import MountWidget from "discourse/components/mount-widget"; import { observes } from "ember-addons/ember-computed-decorators"; import Docking from "discourse/mixins/docking"; @@ -41,7 +38,7 @@ const SiteHeaderComponent = MountWidget.extend(Docking, PanEvents, { _animateClosing($panel, menuOrigin, windowWidth) { $panel.css(menuOrigin, -windowWidth); this._animate = true; - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this.eventDispatched("dom:clean", "header"); this._panMenuOffset = 0; }); @@ -225,7 +222,7 @@ const SiteHeaderComponent = MountWidget.extend(Docking, PanEvents, { this.appEvents.off("header:hide-topic", this, "setTopic"); this.appEvents.off("dom:clean", this, "_cleanDom"); - cancel(this._scheduledRemoveAnimate); + Ember.run.cancel(this._scheduledRemoveAnimate); window.cancelAnimationFrame(this._scheduledMovingAnimation); }, @@ -349,7 +346,7 @@ const SiteHeaderComponent = MountWidget.extend(Docking, PanEvents, { if (this._animate) { $panel.addClass("animate"); $headerCloak.addClass("animate"); - this._scheduledRemoveAnimate = later(() => { + this._scheduledRemoveAnimate = Ember.run.later(() => { $panel.removeClass("animate"); $headerCloak.removeClass("animate"); }, 200); diff --git a/app/assets/javascripts/discourse/components/text-overflow.js.es6 b/app/assets/javascripts/discourse/components/text-overflow.js.es6 index d5bc066fb02..37a4cb29598 100644 --- a/app/assets/javascripts/discourse/components/text-overflow.js.es6 +++ b/app/assets/javascripts/discourse/components/text-overflow.js.es6 @@ -1,9 +1,8 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; export default Component.extend({ didInsertElement() { this._super(...arguments); - next(null, () => { + Ember.run.next(null, () => { const $this = $(this.element); if ($this) { diff --git a/app/assets/javascripts/discourse/components/time-input.js.es6 b/app/assets/javascripts/discourse/components/time-input.js.es6 index 6ec44fb3067..c9c65e1034a 100644 --- a/app/assets/javascripts/discourse/components/time-input.js.es6 +++ b/app/assets/javascripts/discourse/components/time-input.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { isNumeric } from "discourse/lib/utilities"; @@ -37,7 +36,7 @@ export default Component.extend({ this._processMinutesChange(value); } - schedule("afterRender", () => (event.target.value = value)); + Ember.run.schedule("afterRender", () => (event.target.value = value)); } }, diff --git a/app/assets/javascripts/discourse/components/topic-entrance.js.es6 b/app/assets/javascripts/discourse/components/topic-entrance.js.es6 index ead6913e821..f55197d8044 100644 --- a/app/assets/javascripts/discourse/components/topic-entrance.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-entrance.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import DiscourseURL from "discourse/lib/url"; import CleansUp from "discourse/mixins/cleans-up"; @@ -78,7 +77,7 @@ export default Component.extend(CleansUp, { this.setProperties({ topic: data.topic, visible: true }); - scheduleOnce("afterRender", this, this._setCSS); + Ember.run.scheduleOnce("afterRender", this, this._setCSS); $("html") .off("mousedown.topic-entrance") diff --git a/app/assets/javascripts/discourse/components/topic-list.js.es6 b/app/assets/javascripts/discourse/components/topic-list.js.es6 index 870c68f9c89..c099c8b7906 100644 --- a/app/assets/javascripts/discourse/components/topic-list.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-list.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -70,7 +69,9 @@ export default Component.extend(LoadMore, { let scrollTo = this.session.get("topicListScrollPosition"); if (scrollTo && scrollTo >= 0) { - schedule("afterRender", () => $(window).scrollTop(scrollTo + 1)); + Ember.run.schedule("afterRender", () => + $(window).scrollTop(scrollTo + 1) + ); } }, diff --git a/app/assets/javascripts/discourse/components/topic-navigation.js.es6 b/app/assets/javascripts/discourse/components/topic-navigation.js.es6 index b2115e755d6..4a67114f1a7 100644 --- a/app/assets/javascripts/discourse/components/topic-navigation.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-navigation.js.es6 @@ -1,6 +1,4 @@ import EmberObject from "@ember/object"; -import { scheduleOnce } from "@ember/runloop"; -import { later } from "@ember/runloop"; import Component from "@ember/component"; import { observes } from "ember-addons/ember-computed-decorators"; import showModal from "discourse/lib/show-modal"; @@ -54,7 +52,7 @@ export default Component.extend(PanEvents, { }, _checkSize() { - scheduleOnce("afterRender", this, this._performCheckSize); + Ember.run.scheduleOnce("afterRender", this, this._performCheckSize); }, // we need to store this so topic progress has something to init with @@ -90,7 +88,7 @@ export default Component.extend(PanEvents, { composerOpened() { this.set("composerOpen", true); // we need to do the check after animation is done - later(() => this._checkSize(), 500); + Ember.run.later(() => this._checkSize(), 500); }, composerClosed() { @@ -101,7 +99,7 @@ export default Component.extend(PanEvents, { _collapseFullscreen() { if (this.get("info.topicProgressExpanded")) { $(".timeline-fullscreen").removeClass("show"); - later(() => { + Ember.run.later(() => { if (!this.element || this.isDestroying || this.isDestroyed) { return; } @@ -139,7 +137,7 @@ export default Component.extend(PanEvents, { } else if (offset <= 0) { $timelineContainer.css("bottom", ""); } else { - later(() => this._handlePanDone(offset, event), 20); + Ember.run.later(() => this._handlePanDone(offset, event), 20); } }, diff --git a/app/assets/javascripts/discourse/components/topic-progress.js.es6 b/app/assets/javascripts/discourse/components/topic-progress.js.es6 index 19ec394b035..61db49b425c 100644 --- a/app/assets/javascripts/discourse/components/topic-progress.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-progress.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -74,7 +73,7 @@ export default Component.extend({ @observes("postStream.stream.[]") _updateBar() { - scheduleOnce("afterRender", this, this._updateProgressBar); + Ember.run.scheduleOnce("afterRender", this, this._updateProgressBar); }, _topicScrolled(event) { @@ -101,11 +100,16 @@ export default Component.extend({ const prevEvent = this.prevEvent; if (prevEvent) { - scheduleOnce("afterRender", this, this._topicScrolled, prevEvent); + Ember.run.scheduleOnce( + "afterRender", + this, + this._topicScrolled, + prevEvent + ); } else { - scheduleOnce("afterRender", this, this._updateProgressBar); + Ember.run.scheduleOnce("afterRender", this, this._updateProgressBar); } - scheduleOnce("afterRender", this, this._dock); + Ember.run.scheduleOnce("afterRender", this, this._dock); }, willDestroyElement() { diff --git a/app/assets/javascripts/discourse/components/topic-timeline.js.es6 b/app/assets/javascripts/discourse/components/topic-timeline.js.es6 index 9aa65410652..1d9ec49b787 100644 --- a/app/assets/javascripts/discourse/components/topic-timeline.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-timeline.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import MountWidget from "discourse/components/mount-widget"; import Docking from "discourse/mixins/docking"; import { observes } from "ember-addons/ember-computed-decorators"; @@ -95,7 +94,7 @@ export default MountWidget.extend(Docking, { this._super(...arguments); if (this.fullscreen && !this.addShowClass) { - next(() => { + Ember.run.next(() => { this.set("addShowClass", true); this.queueRerender(); }); diff --git a/app/assets/javascripts/discourse/components/topic-timer-info.js.es6 b/app/assets/javascripts/discourse/components/topic-timer-info.js.es6 index bb26e0caba4..c7e2ed244a1 100644 --- a/app/assets/javascripts/discourse/components/topic-timer-info.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-timer-info.js.es6 @@ -1,5 +1,3 @@ -import { cancel } from "@ember/runloop"; -import { later } from "@ember/runloop"; import Component from "@ember/component"; import { iconHTML } from "discourse-common/lib/icon-library"; import { bufferedRender } from "discourse-common/lib/buffered-render"; @@ -87,7 +85,11 @@ export default Component.extend( // TODO Sam: concerned this can cause a heavy rerender loop if (!Ember.testing) { - this._delayedRerender = later(this, this.rerender, rerenderDelay); + this._delayedRerender = Ember.run.later( + this, + this.rerender, + rerenderDelay + ); } } }, @@ -108,7 +110,7 @@ export default Component.extend( $(this.element).off("click.topic-timer-remove", this.removeTopicTimer); if (this._delayedRerender) { - cancel(this._delayedRerender); + Ember.run.cancel(this._delayedRerender); } }, diff --git a/app/assets/javascripts/discourse/components/user-stream.js.es6 b/app/assets/javascripts/discourse/components/user-stream.js.es6 index 16c7e1fb79c..cbb9b779bc5 100644 --- a/app/assets/javascripts/discourse/components/user-stream.js.es6 +++ b/app/assets/javascripts/discourse/components/user-stream.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; import LoadMore from "discourse/mixins/load-more"; import ClickTrack from "discourse/lib/click-track"; @@ -24,7 +23,7 @@ export default Component.extend(LoadMore, { classNames: ["user-stream"], _scrollTopOnModelChange: function() { - schedule("afterRender", () => $(document).scrollTop(0)); + Ember.run.schedule("afterRender", () => $(document).scrollTop(0)); }.observes("stream.user.id"), _inserted: Ember.on("didInsertElement", function() { diff --git a/app/assets/javascripts/discourse/controllers/auth-token.js.es6 b/app/assets/javascripts/discourse/controllers/auth-token.js.es6 index a24f6a53b18..0a02adf2231 100644 --- a/app/assets/javascripts/discourse/controllers/auth-token.js.es6 +++ b/app/assets/javascripts/discourse/controllers/auth-token.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Controller from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; import { ajax } from "discourse/lib/ajax"; @@ -25,7 +24,7 @@ export default Controller.extend(ModalFunctionality, { highlightSecure() { this.send("closeModal"); - next(() => { + Ember.run.next(() => { const $prefPasswordDiv = $(".pref-password"); $prefPasswordDiv.addClass("highlighted"); diff --git a/app/assets/javascripts/discourse/controllers/change-owner.js.es6 b/app/assets/javascripts/discourse/controllers/change-owner.js.es6 index 6496ccb0be8..28acef583ea 100644 --- a/app/assets/javascripts/discourse/controllers/change-owner.js.es6 +++ b/app/assets/javascripts/discourse/controllers/change-owner.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; @@ -54,7 +53,7 @@ export default Controller.extend(ModalFunctionality, { if (this.get("topicController.multiSelect")) { this.topicController.send("toggleMultiSelect"); } - next(() => + Ember.run.next(() => DiscourseURL.routeTo(this.get("topicController.model.url")) ); }, diff --git a/app/assets/javascripts/discourse/controllers/change-timestamp.js.es6 b/app/assets/javascripts/discourse/controllers/change-timestamp.js.es6 index 0251ab88834..7744b066e1d 100644 --- a/app/assets/javascripts/discourse/controllers/change-timestamp.js.es6 +++ b/app/assets/javascripts/discourse/controllers/change-timestamp.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; @@ -48,7 +47,7 @@ export default Controller.extend(ModalFunctionality, { .then(() => { this.send("closeModal"); this.setProperties({ date: "", time: "", saving: false }); - next(() => DiscourseURL.routeTo(topic.url)); + Ember.run.next(() => DiscourseURL.routeTo(topic.url)); }) .catch(() => this.flash(I18n.t("topic.change_timestamp.error"), "alert-error") diff --git a/app/assets/javascripts/discourse/controllers/composer.js.es6 b/app/assets/javascripts/discourse/controllers/composer.js.es6 index a4ecfb84761..01867e7c6a9 100644 --- a/app/assets/javascripts/discourse/controllers/composer.js.es6 +++ b/app/assets/javascripts/discourse/controllers/composer.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; import { inject as service } from "@ember/service"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; @@ -1047,7 +1046,7 @@ export default Controller.extend({ @observes("model.reply", "model.title") _shouldSaveDraft() { - debounce(this, this._saveDraft, 2000); + Ember.run.debounce(this, this._saveDraft, 2000); }, @computed("model.categoryId", "lastValidatedAt") diff --git a/app/assets/javascripts/discourse/controllers/exception.js.es6 b/app/assets/javascripts/discourse/controllers/exception.js.es6 index 2e3f44ae749..7b8a1bec8f0 100644 --- a/app/assets/javascripts/discourse/controllers/exception.js.es6 +++ b/app/assets/javascripts/discourse/controllers/exception.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Controller from "@ember/controller"; import { on, @@ -114,7 +113,7 @@ export default Controller.extend({ tryLoading() { this.set("loading", true); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this.lastTransition.retry(); this.set("loading", false); }); diff --git a/app/assets/javascripts/discourse/controllers/insert-hyperlink.js.es6 b/app/assets/javascripts/discourse/controllers/insert-hyperlink.js.es6 index 63b724f89cc..e1d714be399 100644 --- a/app/assets/javascripts/discourse/controllers/insert-hyperlink.js.es6 +++ b/app/assets/javascripts/discourse/controllers/insert-hyperlink.js.es6 @@ -1,6 +1,3 @@ -import { debounce } from "@ember/runloop"; -import { cancel } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import Controller from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; import { searchForTerm } from "discourse/lib/search"; @@ -18,7 +15,7 @@ export default Controller.extend(ModalFunctionality, { selectedRow: -1 }); - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { const element = document.querySelector(".insert-link"); element.addEventListener("keydown", e => this.keyDown(e)); @@ -138,7 +135,7 @@ export default Controller.extend(ModalFunctionality, { .closest(".modal-inner-container") .removeEventListener("mousedown", this.mouseDown); - cancel(this._debounced); + Ember.run.cancel(this._debounced); }, actions: { @@ -177,7 +174,7 @@ export default Controller.extend(ModalFunctionality, { } }, search() { - this._debounced = debounce(this, this.triggerSearch, 400); + this._debounced = Ember.run.debounce(this, this.triggerSearch, 400); } } }); diff --git a/app/assets/javascripts/discourse/controllers/jump-to-post.js.es6 b/app/assets/javascripts/discourse/controllers/jump-to-post.js.es6 index a0d4bd59503..af6fd216f57 100644 --- a/app/assets/javascripts/discourse/controllers/jump-to-post.js.es6 +++ b/app/assets/javascripts/discourse/controllers/jump-to-post.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Controller from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; @@ -11,7 +10,7 @@ export default Controller.extend(ModalFunctionality, { ), onShow() { - next(() => $("#post-jump").focus()); + Ember.run.next(() => $("#post-jump").focus()); }, actions: { diff --git a/app/assets/javascripts/discourse/controllers/login.js.es6 b/app/assets/javascripts/discourse/controllers/login.js.es6 index 25011468057..ca94d979c00 100644 --- a/app/assets/javascripts/discourse/controllers/login.js.es6 +++ b/app/assets/javascripts/discourse/controllers/login.js.es6 @@ -1,6 +1,4 @@ import EmberObject from "@ember/object"; -import { next } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import { ajax } from "discourse/lib/ajax"; @@ -152,7 +150,7 @@ export default Controller.extend(ModalFunctionality, { // only need to focus the 2FA input for TOTP if (!this.showSecurityKey) { - scheduleOnce("afterRender", () => + Ember.run.scheduleOnce("afterRender", () => document .getElementById("second-factor") .querySelector("input") @@ -324,7 +322,7 @@ export default Controller.extend(ModalFunctionality, { const loginError = (errorMsg, className, callback) => { showModal("login"); - next(() => { + Ember.run.next(() => { if (callback) callback(); this.flash(errorMsg, className || "success"); }); diff --git a/app/assets/javascripts/discourse/controllers/move-to-topic.js.es6 b/app/assets/javascripts/discourse/controllers/move-to-topic.js.es6 index 7c8c84648c0..8a89fc8e575 100644 --- a/app/assets/javascripts/discourse/controllers/move-to-topic.js.es6 +++ b/app/assets/javascripts/discourse/controllers/move-to-topic.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import ModalFunctionality from "discourse/mixins/modal-functionality"; @@ -93,7 +92,7 @@ export default Controller.extend(ModalFunctionality, { ); } else if (!this.canSplitTopic) { this.set("selection", "existing_topic"); - next(() => $("#choose-topic-title").focus()); + Ember.run.next(() => $("#choose-topic-title").focus()); } }, diff --git a/app/assets/javascripts/discourse/controllers/second-factor-backup-edit.js.es6 b/app/assets/javascripts/discourse/controllers/second-factor-backup-edit.js.es6 index 6554a77cd1f..ddddfbdb30c 100644 --- a/app/assets/javascripts/discourse/controllers/second-factor-backup-edit.js.es6 +++ b/app/assets/javascripts/discourse/controllers/second-factor-backup-edit.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import Controller from "@ember/controller"; import { default as computed } from "ember-addons/ember-computed-decorators"; import { SECOND_FACTOR_METHODS } from "discourse/models/user"; @@ -103,7 +102,7 @@ export default Controller.extend(ModalFunctionality, { }, _hideCopyMessage() { - later( + Ember.run.later( () => this.setProperties({ successMessage: null, errorMessage: null }), 2000 ); diff --git a/app/assets/javascripts/discourse/controllers/topic.js.es6 b/app/assets/javascripts/discourse/controllers/topic.js.es6 index 06ac89f3ad2..d31fe002922 100644 --- a/app/assets/javascripts/discourse/controllers/topic.js.es6 +++ b/app/assets/javascripts/discourse/controllers/topic.js.es6 @@ -1,6 +1,4 @@ import EmberObject from "@ember/object"; -import { next } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import { bufferedProperty } from "discourse/mixins/buffered-content"; @@ -135,7 +133,7 @@ export default Controller.extend(bufferedProperty("model"), { return; } - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { this.send("showHistory", post, revision); }); }, @@ -1428,7 +1426,7 @@ export default Controller.extend(bufferedProperty("model"), { // automatically unpin topics when the user reaches the bottom const max = _.max(postNumbers); if (topic.get("pinned") && max >= topic.get("highest_post_number")) { - next(() => topic.clearPin()); + Ember.run.next(() => topic.clearPin()); } } } diff --git a/app/assets/javascripts/discourse/initializers/asset-version.js.es6 b/app/assets/javascripts/discourse/initializers/asset-version.js.es6 index f685d1b091a..21faedd6502 100644 --- a/app/assets/javascripts/discourse/initializers/asset-version.js.es6 +++ b/app/assets/javascripts/discourse/initializers/asset-version.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; // Subscribe to "asset-version" change events via the Message Bus export default { name: "asset-version", @@ -17,7 +16,7 @@ export default { if (!timeoutIsSet && Discourse.get("requiresRefresh")) { // Since we can do this transparently for people browsing the forum // hold back the message 24 hours. - later(() => { + Ember.run.later(() => { bootbox.confirm(I18n.t("assets_changed_confirm"), function(result) { if (result) { document.location.reload(); diff --git a/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 b/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 index 31101d9010c..83e0183ff3b 100644 --- a/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 +++ b/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; export default { name: "auth-complete", after: "inject-objects", @@ -14,7 +13,7 @@ export default { if (lastAuthResult) { const router = container.lookup("router:main"); router.one("didTransition", () => { - next(() => + Ember.run.next(() => Discourse.authenticationComplete(JSON.parse(lastAuthResult)) ); }); diff --git a/app/assets/javascripts/discourse/initializers/mobile.js.es6 b/app/assets/javascripts/discourse/initializers/mobile.js.es6 index b0708fca852..a536398e94e 100644 --- a/app/assets/javascripts/discourse/initializers/mobile.js.es6 +++ b/app/assets/javascripts/discourse/initializers/mobile.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import Mobile from "discourse/lib/mobile"; import { setResolverOption } from "discourse-common/resolver"; import { isAppWebview, postRNWebviewMessage } from "discourse/lib/utilities"; @@ -18,7 +17,7 @@ export default { setResolverOption("mobileView", Mobile.mobileView); if (isAppWebview()) { - later(() => { + Ember.run.later(() => { postRNWebviewMessage( "headerBg", $(".d-header").css("background-color") diff --git a/app/assets/javascripts/discourse/lib/ajax.js.es6 b/app/assets/javascripts/discourse/lib/ajax.js.es6 index e2bb45ef085..cafa6e6f709 100644 --- a/app/assets/javascripts/discourse/lib/ajax.js.es6 +++ b/app/assets/javascripts/discourse/lib/ajax.js.es6 @@ -1,4 +1,3 @@ -import { run } from "@ember/runloop"; import pageVisible from "discourse/lib/page-visible"; import logout from "discourse/lib/logout"; @@ -97,7 +96,7 @@ export function ajax() { handleRedirect(data); handleLogoff(xhr); - run(() => { + Ember.run(() => { Discourse.Site.currentProp( "isReadOnly", !!xhr.getResponseHeader("Discourse-Readonly") @@ -108,7 +107,7 @@ export function ajax() { data = { result: data, xhr: xhr }; } - run(null, resolve, data); + Ember.run(null, resolve, data); }; args.error = (xhr, textStatus, errorThrown) => { @@ -129,7 +128,7 @@ export function ajax() { xhr.jqTextStatus = textStatus; xhr.requestedUrl = url; - run(null, reject, { + Ember.run(null, reject, { jqXHR: xhr, textStatus: textStatus, errorThrown: errorThrown diff --git a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 index 0bcb3331c89..18fc9a98e2b 100644 --- a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 +++ b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 @@ -1,5 +1,3 @@ -import { cancel } from "@ember/runloop"; -import { later } from "@ember/runloop"; /** This is a jQuery plugin to support autocompleting values in our text fields. @@ -45,7 +43,7 @@ export default function(options) { if (this.length === 0) return; if (options === "destroy" || options.updateData) { - cancel(inputTimeout); + Ember.run.cancel(inputTimeout); $(this) .off("keyup.autocomplete") @@ -404,7 +402,7 @@ export default function(options) { $(this).on("click.autocomplete", () => closeAutocomplete()); $(this).on("paste.autocomplete", () => { - later(() => me.trigger("keydown"), 50); + Ember.run.later(() => me.trigger("keydown"), 50); }); function checkTriggerRule(opts) { @@ -457,8 +455,8 @@ export default function(options) { if (options.allowAny) { // saves us wiring up a change event as well - cancel(inputTimeout); - inputTimeout = later(function() { + Ember.run.cancel(inputTimeout); + inputTimeout = Ember.run.later(function() { if (inputSelectedItems.length === 0) { inputSelectedItems.push(""); } diff --git a/app/assets/javascripts/discourse/lib/clean-dom.js.es6 b/app/assets/javascripts/discourse/lib/clean-dom.js.es6 index 82cdb2d5371..8d83f4d7f80 100644 --- a/app/assets/javascripts/discourse/lib/clean-dom.js.es6 +++ b/app/assets/javascripts/discourse/lib/clean-dom.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; function _clean() { if (window.MiniProfiler) { window.MiniProfiler.pageTransition(); @@ -36,5 +35,5 @@ function _clean() { } export function cleanDOM() { - scheduleOnce("afterRender", _clean); + Ember.run.scheduleOnce("afterRender", _clean); } diff --git a/app/assets/javascripts/discourse/lib/click-track.js.es6 b/app/assets/javascripts/discourse/lib/click-track.js.es6 index 6e27ebbbe25..42a65623a6b 100644 --- a/app/assets/javascripts/discourse/lib/click-track.js.es6 +++ b/app/assets/javascripts/discourse/lib/click-track.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; import DiscourseURL from "discourse/lib/url"; import { wantsNewWindow } from "discourse/lib/intercept-click"; @@ -135,7 +134,7 @@ export default { $link.attr("href", null); $link.data("auto-route", true); - later(() => { + Ember.run.later(() => { $link.removeClass("no-href"); $link.attr("href", $link.data("href")); $link.data("href", null); diff --git a/app/assets/javascripts/discourse/lib/debounce.js.es6 b/app/assets/javascripts/discourse/lib/debounce.js.es6 index f41b71f0d8e..6ab2eb1e584 100644 --- a/app/assets/javascripts/discourse/lib/debounce.js.es6 +++ b/app/assets/javascripts/discourse/lib/debounce.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; /** Debounce a Javascript function. This means if it's called many times in a time limit it should only be executed once (at the end of the limit counted from the last call made). @@ -14,6 +13,6 @@ export default function(func, wait) { self = this; args = arguments; - debounce(null, later, wait); + Ember.run.debounce(null, later, wait); }; } diff --git a/app/assets/javascripts/discourse/lib/desktop-notifications.js.es6 b/app/assets/javascripts/discourse/lib/desktop-notifications.js.es6 index 330772014d1..41b86bc30e2 100644 --- a/app/assets/javascripts/discourse/lib/desktop-notifications.js.es6 +++ b/app/assets/javascripts/discourse/lib/desktop-notifications.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import DiscourseURL from "discourse/lib/url"; import KeyValueStore from "discourse/lib/key-value-store"; import { formatUsername } from "discourse/lib/utilities"; @@ -80,7 +79,7 @@ function confirmNotification() { const clickEventHandler = () => notification.close(); notification.addEventListener("click", clickEventHandler); - later(() => { + Ember.run.later(() => { notification.close(); notification.removeEventListener("click", clickEventHandler); }, 10 * 1000); @@ -178,7 +177,7 @@ function onNotification(data) { } notification.addEventListener("click", clickEventHandler); - later(() => { + Ember.run.later(() => { notification.close(); notification.removeEventListener("click", clickEventHandler); }, 10 * 1000); diff --git a/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 b/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 index 991644737af..aa0b16efbb3 100644 --- a/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 +++ b/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 @@ -1,5 +1,3 @@ -import { run } from "@ember/runloop"; -import { later } from "@ember/runloop"; import DiscourseURL from "discourse/lib/url"; import Composer from "discourse/models/composer"; import { minimumOffset } from "discourse/lib/offset-calculator"; @@ -142,7 +140,7 @@ export default { quoteReply() { this.sendToSelectedPost("replyToPost"); // lazy but should work for now - later(() => $(".d-editor .quote").click(), 500); + Ember.run.later(() => $(".d-editor .quote").click(), 500); return false; }, @@ -212,7 +210,7 @@ export default { }, showPageSearch(event) { - run(() => { + Ember.run(() => { this.appEvents.trigger("header:keyboard-trigger", { type: "page-search", event @@ -221,7 +219,7 @@ export default { }, printTopic(event) { - run(() => { + Ember.run(() => { if ($(".container.posts").length) { event.preventDefault(); // We need to stop printing the current page in Firefox this.container.lookup("controller:topic").print(); diff --git a/app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 b/app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 index 7179f234f19..d43b0f4a838 100644 --- a/app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 +++ b/app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; import { replaceSpan } from "discourse/lib/category-hashtags"; @@ -8,7 +7,7 @@ const testedKey = "tested"; const testedClass = `hashtag-${testedKey}`; function updateFound($hashtags, categorySlugs) { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $hashtags.each((index, hashtag) => { const categorySlug = categorySlugs[index]; const link = validCategoryHashtags[categorySlug]; diff --git a/app/assets/javascripts/discourse/lib/link-mentions.js.es6 b/app/assets/javascripts/discourse/lib/link-mentions.js.es6 index 68d0b8b5d6f..07f37388e4b 100644 --- a/app/assets/javascripts/discourse/lib/link-mentions.js.es6 +++ b/app/assets/javascripts/discourse/lib/link-mentions.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; import { userPath } from "discourse/lib/url"; import { formatUsername } from "discourse/lib/utilities"; @@ -40,7 +39,7 @@ const checked = {}; const cannotSee = []; function updateFound($mentions, usernames) { - scheduleOnce("afterRender", function() { + Ember.run.scheduleOnce("afterRender", function() { $mentions.each((i, e) => { const $e = $(e); const username = usernames[i]; diff --git a/app/assets/javascripts/discourse/lib/link-tag-hashtag.js.es6 b/app/assets/javascripts/discourse/lib/link-tag-hashtag.js.es6 index 5aa3f6d6120..a0b2c95c467 100644 --- a/app/assets/javascripts/discourse/lib/link-tag-hashtag.js.es6 +++ b/app/assets/javascripts/discourse/lib/link-tag-hashtag.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; import { replaceSpan } from "discourse/lib/category-hashtags"; import { TAG_HASHTAG_POSTFIX } from "discourse/lib/tag-hashtags"; @@ -8,7 +7,7 @@ const checkedTagHashtags = []; const testedClass = "tag-hashtag-tested"; function updateFound($hashtags, tagValues) { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $hashtags.each((index, hashtag) => { const tagValue = tagValues[index]; const link = validTagHashtags[tagValue]; diff --git a/app/assets/javascripts/discourse/lib/load-script.js.es6 b/app/assets/javascripts/discourse/lib/load-script.js.es6 index c1f11ec0f49..34b3f2897b7 100644 --- a/app/assets/javascripts/discourse/lib/load-script.js.es6 +++ b/app/assets/javascripts/discourse/lib/load-script.js.es6 @@ -1,4 +1,3 @@ -import { run } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; const _loaded = {}; const _loading = {}; @@ -23,7 +22,7 @@ function loadWithTag(path, cb) { ) { s = s.onload = s.onreadystatechange = null; if (!abort) { - run(null, cb); + Ember.run(null, cb); } } }; diff --git a/app/assets/javascripts/discourse/lib/page-tracker.js.es6 b/app/assets/javascripts/discourse/lib/page-tracker.js.es6 index 4acbdc4ea36..d7577ed5ae8 100644 --- a/app/assets/javascripts/discourse/lib/page-tracker.js.es6 +++ b/app/assets/javascripts/discourse/lib/page-tracker.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; let _started = false; let cache = {}; let transitionCount = 0; @@ -32,7 +31,7 @@ export function startPageTracking(router, appEvents) { // Refreshing the title is debounced, so we need to trigger this in the // next runloop to have the correct title. - next(() => { + Ember.run.next(() => { let title = Discourse.get("_docTitle"); appEvents.trigger("page:changed", { diff --git a/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 b/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 index ac64d264612..e613ba16e36 100644 --- a/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 +++ b/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import debounce from "discourse/lib/debounce"; import { safariHacksDisabled, @@ -95,7 +94,10 @@ function positioningWorkaround($fixedElement) { if (!iOSWithVisualViewport()) { fixedElement.style.height = oldHeight; - later(() => $(fixedElement).removeClass("no-transition"), 500); + Ember.run.later( + () => $(fixedElement).removeClass("no-transition"), + 500 + ); } $(window).scrollTop(originalScrollTop); diff --git a/app/assets/javascripts/discourse/lib/screen-track.js.es6 b/app/assets/javascripts/discourse/lib/screen-track.js.es6 index 314e1fac0a2..a36b15cb219 100644 --- a/app/assets/javascripts/discourse/lib/screen-track.js.es6 +++ b/app/assets/javascripts/discourse/lib/screen-track.js.es6 @@ -1,4 +1,3 @@ -import { bind } from "@ember/runloop"; import { ajax } from "discourse/lib/ajax"; // We use this class to track how long posts in a topic are on the screen. @@ -27,7 +26,7 @@ export default class { // Create an interval timer if we don't have one. if (!this._interval) { this._interval = setInterval(() => this.tick(), 1000); - this._boundScrolled = bind(this, this.scrolled); + this._boundScrolled = Ember.run.bind(this, this.scrolled); $(window).on("scroll.screentrack", this._boundScrolled); } diff --git a/app/assets/javascripts/discourse/lib/throttle.js.es6 b/app/assets/javascripts/discourse/lib/throttle.js.es6 index 05daa36c5a6..2e8673203ba 100644 --- a/app/assets/javascripts/discourse/lib/throttle.js.es6 +++ b/app/assets/javascripts/discourse/lib/throttle.js.es6 @@ -1,4 +1,3 @@ -import { throttle } from "@ember/runloop"; /** Throttle a Javascript function. This means if it's called many times in a time limit it should only be executed one time at most during this time limit @@ -14,6 +13,6 @@ export default function(func, spacing, immediate) { self = this; args = arguments; - throttle(null, later, spacing, immediate); + Ember.run.throttle(null, later, spacing, immediate); }; } diff --git a/app/assets/javascripts/discourse/lib/url.js.es6 b/app/assets/javascripts/discourse/lib/url.js.es6 index 0dbb7aa3ce2..085619f9e93 100644 --- a/app/assets/javascripts/discourse/lib/url.js.es6 +++ b/app/assets/javascripts/discourse/lib/url.js.es6 @@ -1,6 +1,4 @@ import EmberObject from "@ember/object"; -import { next } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; import offsetCalculator from "discourse/lib/offset-calculator"; import LockOn from "discourse/lib/lock-on"; import { defaultHomepage } from "discourse/lib/utilities"; @@ -68,7 +66,7 @@ export function jumpToElement(elementId) { const selector = `#${elementId}, a[name=${elementId}]`; _jumpScheduled = true; - schedule("afterRender", function() { + Ember.run.schedule("afterRender", function() { const lockon = new LockOn(selector, { finished() { _jumpScheduled = false; @@ -92,7 +90,7 @@ const DiscourseURL = EmberObject.extend({ _transitioning = postNumber > 1; - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { let elementId; let holder; @@ -158,7 +156,7 @@ const DiscourseURL = EmberObject.extend({ // Always use replaceState in the next runloop to prevent weird routes changing // while URLs are loading. For example, while a topic loads it sets `currentPost` // which triggers a replaceState even though the topic hasn't fully loaded yet! - next(() => { + Ember.run.next(() => { const location = DiscourseURL.get("router.location"); if (location && location.replaceURL) { location.replaceURL(path); @@ -252,7 +250,7 @@ const DiscourseURL = EmberObject.extend({ path = rewritePath(path); if (typeof opts.afterRouteComplete === "function") { - schedule("afterRender", opts.afterRouteComplete); + Ember.run.schedule("afterRender", opts.afterRouteComplete); } if (this.navigatedToPost(oldPath, path, opts)) { diff --git a/app/assets/javascripts/discourse/mixins/card-contents-base.js.es6 b/app/assets/javascripts/discourse/mixins/card-contents-base.js.es6 index 69bafea2fb9..212278f2e0f 100644 --- a/app/assets/javascripts/discourse/mixins/card-contents-base.js.es6 +++ b/app/assets/javascripts/discourse/mixins/card-contents-base.js.es6 @@ -1,6 +1,3 @@ -import { throttle } from "@ember/runloop"; -import { next } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; import { wantsNewWindow } from "discourse/lib/intercept-click"; import afterTransition from "discourse/lib/after-transition"; import DiscourseURL from "discourse/lib/url"; @@ -145,7 +142,7 @@ export default Ember.Mixin.create({ _bindMobileScroll() { const mobileScrollEvent = this.mobileScrollEvent; const onScroll = () => { - throttle(this, this._close, 1000); + Ember.run.throttle(this, this._close, 1000); }; $(window).on(mobileScrollEvent, onScroll); @@ -174,7 +171,7 @@ export default Ember.Mixin.create({ let verticalAdjustments = 0; - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { if (target) { if (!this.site.mobileView) { let position = target.offset(); @@ -248,7 +245,7 @@ export default Ember.Mixin.create({ // note: we DO NOT use afterRender here cause _positionCard may // run afterwards, if we allowed this to happen the usercard // may be offscreen and we may scroll all the way to it on focus - next(null, () => { + Ember.run.next(null, () => { const firstLink = this.element.querySelector("a"); firstLink && firstLink.focus(); }); diff --git a/app/assets/javascripts/discourse/mixins/docking.js.es6 b/app/assets/javascripts/discourse/mixins/docking.js.es6 index 18a5ae5bf64..800898ae70a 100644 --- a/app/assets/javascripts/discourse/mixins/docking.js.es6 +++ b/app/assets/javascripts/discourse/mixins/docking.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; const helper = { offset() { const mainOffset = $("#main").offset(); @@ -13,7 +12,7 @@ export default Ember.Mixin.create({ init() { this._super(...arguments); this.queueDockCheck = () => { - debounce(this, this.safeDockCheck, 5); + Ember.run.debounce(this, this.safeDockCheck, 5); }; }, diff --git a/app/assets/javascripts/discourse/mixins/mobile-scroll-direction.js.es6 b/app/assets/javascripts/discourse/mixins/mobile-scroll-direction.js.es6 index edd93096f02..0f27500a094 100644 --- a/app/assets/javascripts/discourse/mixins/mobile-scroll-direction.js.es6 +++ b/app/assets/javascripts/discourse/mixins/mobile-scroll-direction.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; // Small buffer so that very tiny scrolls don't trigger mobile header switch const MOBILE_SCROLL_TOLERANCE = 5; @@ -43,7 +42,7 @@ export default Ember.Mixin.create({ // If the user reaches the very bottom of the topic, we only want to reset // this scroll direction after a second scrolldown. This is a nicer event // similar to what Safari and Chrome do. - debounce(() => { + Ember.run.debounce(() => { this._bottomHit = 1; }, 1000); diff --git a/app/assets/javascripts/discourse/mixins/scroll-top.js.es6 b/app/assets/javascripts/discourse/mixins/scroll-top.js.es6 index f666e9be5a9..630227b8fa5 100644 --- a/app/assets/javascripts/discourse/mixins/scroll-top.js.es6 +++ b/app/assets/javascripts/discourse/mixins/scroll-top.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import DiscourseURL from "discourse/lib/url"; import { deprecated } from "discourse/mixins/scroll-top"; @@ -15,7 +14,7 @@ function scrollTop() { if (DiscourseURL.isJumpScheduled()) { return; } - scheduleOnce("afterRender", context, context._scrollTop); + Ember.run.scheduleOnce("afterRender", context, context._scrollTop); } export default Ember.Mixin.create({ diff --git a/app/assets/javascripts/discourse/mixins/scrolling.js.es6 b/app/assets/javascripts/discourse/mixins/scrolling.js.es6 index f51474c0b20..690bf1168fd 100644 --- a/app/assets/javascripts/discourse/mixins/scrolling.js.es6 +++ b/app/assets/javascripts/discourse/mixins/scrolling.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import debounce from "discourse/lib/debounce"; /** @@ -38,7 +37,7 @@ const Scrolling = Ember.Mixin.create({ if (router.activeTransition) { return; } - return scheduleOnce("afterRender", this, "scrolled"); + return Ember.run.scheduleOnce("afterRender", this, "scrolled"); }; if (opts.debounce) { diff --git a/app/assets/javascripts/discourse/models/composer.js.es6 b/app/assets/javascripts/discourse/models/composer.js.es6 index 3a265ab342b..4d851e6e3a9 100644 --- a/app/assets/javascripts/discourse/models/composer.js.es6 +++ b/app/assets/javascripts/discourse/models/composer.js.es6 @@ -1,7 +1,4 @@ import EmberObject from "@ember/object"; -import { next } from "@ember/runloop"; -import { cancel } from "@ember/runloop"; -import { later } from "@ember/runloop"; import RestModel from "discourse/models/rest"; import Topic from "discourse/models/topic"; import { throwAjaxError } from "discourse/lib/ajax-error"; @@ -997,7 +994,7 @@ const Composer = RestModel.extend({ post.set("reply_count", post.reply_count - 1); } } - next(() => composer.set("composeState", OPEN)); + Ember.run.next(() => composer.set("composeState", OPEN)); }) ); }, @@ -1048,7 +1045,7 @@ const Composer = RestModel.extend({ }); if (this._clearingStatus) { - cancel(this._clearingStatus); + Ember.run.cancel(this._clearingStatus); this._clearingStatus = null; } @@ -1088,7 +1085,7 @@ const Composer = RestModel.extend({ const draftStatus = this.draftStatus; if (draftStatus && !this._clearingStatus) { - this._clearingStatus = later( + this._clearingStatus = Ember.run.later( this, () => { this.setProperties({ draftStatus: null, draftConflictUser: null }); diff --git a/app/assets/javascripts/discourse/routes/application.js.es6 b/app/assets/javascripts/discourse/routes/application.js.es6 index cb1e5f0406c..4130d7ffe63 100644 --- a/app/assets/javascripts/discourse/routes/application.js.es6 +++ b/app/assets/javascripts/discourse/routes/application.js.es6 @@ -1,5 +1,3 @@ -import { once } from "@ember/runloop"; -import { next } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import { ajax } from "discourse/lib/ajax"; import { setting } from "discourse/lib/computed"; @@ -58,7 +56,7 @@ const ApplicationRoute = DiscourseRoute.extend(OpenComposer, { // Ember doesn't provider a router `willTransition` event so let's make one willTransition() { var router = getOwner(this).lookup("router:main"); - once(router, router.trigger, "willTransition"); + Ember.run.once(router, router.trigger, "willTransition"); return this._super(...arguments); }, @@ -228,7 +226,7 @@ const ApplicationRoute = DiscourseRoute.extend(OpenComposer, { activate() { this._super(...arguments); - next(function() { + Ember.run.next(function() { // Support for callbacks once the application has activated ApplicationRoute.trigger("activate"); }); diff --git a/app/assets/javascripts/discourse/routes/associate-account.js.es6 b/app/assets/javascripts/discourse/routes/associate-account.js.es6 index a182e85c88f..7cbfee67548 100644 --- a/app/assets/javascripts/discourse/routes/associate-account.js.es6 +++ b/app/assets/javascripts/discourse/routes/associate-account.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import { ajax } from "discourse/lib/ajax"; import showModal from "discourse/lib/show-modal"; @@ -8,7 +7,7 @@ export default DiscourseRoute.extend({ beforeModel() { const params = this.paramsFor("associate-account"); this.replaceWith(`preferences.account`, this.currentUser).then(() => - next(() => + Ember.run.next(() => ajax(`/associate/${encodeURIComponent(params.token)}.json`) .then(model => showModal("associate-account-confirm", { model })) .catch(popupAjaxError) diff --git a/app/assets/javascripts/discourse/routes/discourse.js.es6 b/app/assets/javascripts/discourse/routes/discourse.js.es6 index 2329168593e..fb828bddd1d 100644 --- a/app/assets/javascripts/discourse/routes/discourse.js.es6 +++ b/app/assets/javascripts/discourse/routes/discourse.js.es6 @@ -1,4 +1,3 @@ -import { once } from "@ember/runloop"; import Composer from "discourse/models/composer"; import { getOwner } from "discourse-common/lib/get-owner"; import Route from "@ember/routing/route"; @@ -56,7 +55,7 @@ const DiscourseRoute = Route.extend({ }, refreshTitle() { - once(this, this._refreshTitleOnce); + Ember.run.once(this, this._refreshTitleOnce); }, clearTopicDraft() { diff --git a/app/assets/javascripts/discourse/routes/discovery-categories.js.es6 b/app/assets/javascripts/discourse/routes/discovery-categories.js.es6 index 125b6bf9d04..19543ae481f 100644 --- a/app/assets/javascripts/discourse/routes/discovery-categories.js.es6 +++ b/app/assets/javascripts/discourse/routes/discovery-categories.js.es6 @@ -1,5 +1,4 @@ import EmberObject from "@ember/object"; -import { next } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import showModal from "discourse/lib/show-modal"; import OpenComposer from "discourse/mixins/open-composer"; @@ -135,7 +134,9 @@ const DiscoveryCategoriesRoute = DiscourseRoute.extend(OpenComposer, { }, didTransition() { - next(() => this.controllerFor("application").set("showFooter", true)); + Ember.run.next(() => + this.controllerFor("application").set("showFooter", true) + ); return true; } } diff --git a/app/assets/javascripts/discourse/routes/forgot-password.js.es6 b/app/assets/javascripts/discourse/routes/forgot-password.js.es6 index 58309565b5d..e88fbdb0821 100644 --- a/app/assets/javascripts/discourse/routes/forgot-password.js.es6 +++ b/app/assets/javascripts/discourse/routes/forgot-password.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import { defaultHomepage } from "discourse/lib/utilities"; import buildStaticRoute from "discourse/routes/build-static-route"; @@ -12,7 +11,7 @@ ForgotPasswordRoute.reopen({ this.replaceWith( loginRequired ? "login" : `discovery.${defaultHomepage()}` ).then(e => { - next(() => e.send("showForgotPassword")); + Ember.run.next(() => e.send("showForgotPassword")); }); } }); diff --git a/app/assets/javascripts/discourse/routes/login.js.es6 b/app/assets/javascripts/discourse/routes/login.js.es6 index c41f884f301..8465ceb6bcc 100644 --- a/app/assets/javascripts/discourse/routes/login.js.es6 +++ b/app/assets/javascripts/discourse/routes/login.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import buildStaticRoute from "discourse/routes/build-static-route"; import { defaultHomepage } from "discourse/lib/utilities"; @@ -8,7 +7,7 @@ LoginRoute.reopen({ beforeModel() { if (!this.siteSettings.login_required) { this.replaceWith(`/${defaultHomepage()}`).then(e => { - next(() => e.send("showLogin")); + Ember.run.next(() => e.send("showLogin")); }); } } diff --git a/app/assets/javascripts/discourse/routes/new-message.js.es6 b/app/assets/javascripts/discourse/routes/new-message.js.es6 index c85001cbbf2..1410c65356f 100644 --- a/app/assets/javascripts/discourse/routes/new-message.js.es6 +++ b/app/assets/javascripts/discourse/routes/new-message.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import User from "discourse/models/user"; import Group from "discourse/models/group"; @@ -16,7 +15,7 @@ export default DiscourseRoute.extend({ User.findByUsername(encodeURIComponent(params.username)) .then(user => { if (user.can_send_private_message_to_user) { - next(() => + Ember.run.next(() => e.send( "createNewMessageViaParams", user.username, @@ -36,7 +35,7 @@ export default DiscourseRoute.extend({ Group.messageable(groupName) .then(result => { if (result.messageable) { - next(() => + Ember.run.next(() => e.send( "createNewMessageViaParams", groupName, diff --git a/app/assets/javascripts/discourse/routes/new-topic.js.es6 b/app/assets/javascripts/discourse/routes/new-topic.js.es6 index 550b4b5341c..82b2b496efa 100644 --- a/app/assets/javascripts/discourse/routes/new-topic.js.es6 +++ b/app/assets/javascripts/discourse/routes/new-topic.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import Category from "discourse/models/category"; @@ -64,7 +63,7 @@ export default DiscourseRoute.extend({ }, _sendTransition(event, transition, categoryId) { - next(() => { + Ember.run.next(() => { event.send( "createNewTopicViaParams", transition.to.queryParams.title, diff --git a/app/assets/javascripts/discourse/routes/signup.js.es6 b/app/assets/javascripts/discourse/routes/signup.js.es6 index 9a732c67d8f..a2753ded2bf 100644 --- a/app/assets/javascripts/discourse/routes/signup.js.es6 +++ b/app/assets/javascripts/discourse/routes/signup.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import buildStaticRoute from "discourse/routes/build-static-route"; const SignupRoute = buildStaticRoute("signup"); @@ -10,13 +9,13 @@ SignupRoute.reopen({ if (!this.siteSettings.login_required) { this.replaceWith("discovery.latest").then(e => { if (canSignUp) { - next(() => e.send("showCreateAccount")); + Ember.run.next(() => e.send("showCreateAccount")); } }); } else { this.replaceWith("login").then(e => { if (canSignUp) { - next(() => e.send("showCreateAccount")); + Ember.run.next(() => e.send("showCreateAccount")); } }); } diff --git a/app/assets/javascripts/discourse/routes/topic-from-params.js.es6 b/app/assets/javascripts/discourse/routes/topic-from-params.js.es6 index 6f626644a4a..c3d0e6cf727 100644 --- a/app/assets/javascripts/discourse/routes/topic-from-params.js.es6 +++ b/app/assets/javascripts/discourse/routes/topic-from-params.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import DiscourseURL from "discourse/lib/url"; import Draft from "discourse/models/draft"; @@ -58,7 +57,7 @@ export default DiscourseRoute.extend({ topicController.subscribe(); // Highlight our post after the next render - scheduleOnce("afterRender", () => + Ember.run.scheduleOnce("afterRender", () => this.appEvents.trigger("post:highlight", closest) ); diff --git a/app/assets/javascripts/discourse/routes/topic.js.es6 b/app/assets/javascripts/discourse/routes/topic.js.es6 index f992c01c5b3..e4b168ec7a9 100644 --- a/app/assets/javascripts/discourse/routes/topic.js.es6 +++ b/app/assets/javascripts/discourse/routes/topic.js.es6 @@ -1,6 +1,3 @@ -import { cancel } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; -import { later } from "@ember/runloop"; import DiscourseRoute from "discourse/routes/discourse"; import DiscourseURL from "discourse/lib/url"; import { ID_CONSTRAINT } from "discourse/models/topic"; @@ -171,9 +168,9 @@ const TopicRoute = DiscourseRoute.extend({ postUrl += "/" + currentPost; } - cancel(scheduledReplace); + Ember.run.cancel(scheduledReplace); lastScrollPos = parseInt($(document).scrollTop(), 10); - scheduledReplace = later( + scheduledReplace = Ember.run.later( this, "_replaceUnlessScrolling", postUrl, @@ -189,7 +186,7 @@ const TopicRoute = DiscourseRoute.extend({ willTransition() { this._super(...arguments); - cancel(scheduledReplace); + Ember.run.cancel(scheduledReplace); isTransitioning = true; return true; } @@ -204,7 +201,7 @@ const TopicRoute = DiscourseRoute.extend({ return; } lastScrollPos = currentPos; - scheduledReplace = later( + scheduledReplace = Ember.run.later( this, "_replaceUnlessScrolling", url, @@ -305,7 +302,7 @@ const TopicRoute = DiscourseRoute.extend({ // We reset screen tracking every time a topic is entered this.screenTrack.start(model.get("id"), controller); - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { this.appEvents.trigger("header:update-topic", model); }); } diff --git a/app/assets/javascripts/discourse/widgets/component-connector.js.es6 b/app/assets/javascripts/discourse/widgets/component-connector.js.es6 index 44eabe7c033..44add9ca7ea 100644 --- a/app/assets/javascripts/discourse/widgets/component-connector.js.es6 +++ b/app/assets/javascripts/discourse/widgets/component-connector.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; export default class ComponentConnector { constructor(widget, componentName, opts, trackedProperties) { this.widget = widget; @@ -14,7 +13,7 @@ export default class ComponentConnector { const elem = $elem[0]; const { opts, widget, componentName } = this; - next(() => { + Ember.run.next(() => { const mounted = widget._findView(); const view = widget.register diff --git a/app/assets/javascripts/discourse/widgets/connector.js.es6 b/app/assets/javascripts/discourse/widgets/connector.js.es6 index d5d1c98f3d2..b077bde0eba 100644 --- a/app/assets/javascripts/discourse/widgets/connector.js.es6 +++ b/app/assets/javascripts/discourse/widgets/connector.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import deprecated from "discourse-common/lib/deprecated"; export default class Connector { @@ -12,7 +11,7 @@ export default class Connector { const elem = $elem[0]; const { opts, widget } = this; - next(() => { + Ember.run.next(() => { const mounted = widget._findView(); if (opts.templateName) { diff --git a/app/assets/javascripts/discourse/widgets/glue.js.es6 b/app/assets/javascripts/discourse/widgets/glue.js.es6 index c3a6af4b802..97fcbd3fe5c 100644 --- a/app/assets/javascripts/discourse/widgets/glue.js.es6 +++ b/app/assets/javascripts/discourse/widgets/glue.js.es6 @@ -1,5 +1,3 @@ -import { cancel } from "@ember/runloop"; -import { scheduleOnce } from "@ember/runloop"; import { diff, patch } from "virtual-dom"; import { queryRegistry } from "discourse/widgets/widget"; import DirtyKeys from "discourse/lib/dirty-keys"; @@ -27,11 +25,11 @@ export default class WidgetGlue { } queueRerender() { - this._timeout = scheduleOnce("render", this, this.rerenderWidget); + this._timeout = Ember.run.scheduleOnce("render", this, this.rerenderWidget); } rerenderWidget() { - cancel(this._timeout); + Ember.run.cancel(this._timeout); // in test mode return early if store cannot be found if (Ember.testing) { @@ -53,6 +51,6 @@ export default class WidgetGlue { } cleanUp() { - cancel(this._timeout); + Ember.run.cancel(this._timeout); } } diff --git a/app/assets/javascripts/discourse/widgets/hamburger-menu.js.es6 b/app/assets/javascripts/discourse/widgets/hamburger-menu.js.es6 index b11689796a6..4b259063505 100644 --- a/app/assets/javascripts/discourse/widgets/hamburger-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/hamburger-menu.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import { createWidget, applyDecorators } from "discourse/widgets/widget"; import { h } from "virtual-dom"; import DiscourseURL from "discourse/lib/url"; @@ -343,7 +342,7 @@ export default createWidget("hamburger-menu", { const $headerCloak = $(".header-cloak"); $headerCloak.addClass("animate"); $headerCloak.css("opacity", 0); - later(() => this.sendWidgetAction("toggleHamburger"), 200); + Ember.run.later(() => this.sendWidgetAction("toggleHamburger"), 200); } }, diff --git a/app/assets/javascripts/discourse/widgets/header.js.es6 b/app/assets/javascripts/discourse/widgets/header.js.es6 index 02fd704dca3..0d1d30cc9aa 100644 --- a/app/assets/javascripts/discourse/widgets/header.js.es6 +++ b/app/assets/javascripts/discourse/widgets/header.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import { createWidget } from "discourse/widgets/widget"; import { iconNode } from "discourse-common/lib/icon-library"; import { avatarImg } from "discourse/widgets/post"; @@ -420,7 +419,7 @@ export default createWidget("header", { this.updateHighlight(); if (this.state.searchVisible) { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { const $searchInput = $("#search-term"); $searchInput.focus().select(); diff --git a/app/assets/javascripts/discourse/widgets/post-menu.js.es6 b/app/assets/javascripts/discourse/widgets/post-menu.js.es6 index 3c70593130a..c44035f76cd 100644 --- a/app/assets/javascripts/discourse/widgets/post-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-menu.js.es6 @@ -1,5 +1,3 @@ -import { run } from "@ember/runloop"; -import { next } from "@ember/runloop"; import { applyDecorators, createWidget } from "discourse/widgets/widget"; import { avatarAtts } from "discourse/widgets/actions-summary"; import { h } from "virtual-dom"; @@ -9,7 +7,7 @@ const LIKE_ACTION = 2; function animateHeart($elem, start, end, complete) { if (Ember.testing) { - return run(this, complete); + return Ember.run(this, complete); } $elem @@ -413,7 +411,7 @@ export default createWidget("post-menu", { const likedPostId = keyValueStore.getInt("likedPostId"); if (likedPostId === attrs.id) { keyValueStore.remove("likedPostId"); - next(() => this.sendWidgetAction("toggleLike")); + Ember.run.next(() => this.sendWidgetAction("toggleLike")); } } diff --git a/app/assets/javascripts/discourse/widgets/post-stream.js.es6 b/app/assets/javascripts/discourse/widgets/post-stream.js.es6 index 6406d1c9e81..9291d8a4e67 100644 --- a/app/assets/javascripts/discourse/widgets/post-stream.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-stream.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; import { createWidget } from "discourse/widgets/widget"; import transformPost from "discourse/lib/transform-post"; import { Placeholder } from "discourse/lib/posts-with-placeholders"; @@ -40,7 +39,7 @@ export function cloak(post, component) { _heights[post.id] = $post.outerHeight(); component.dirtyKeys.keyDirty(`post-${post.id}`); - debounce(component, "queueRerender", 1000); + Ember.run.debounce(component, "queueRerender", 1000); } export function uncloak(post, component) { diff --git a/app/assets/javascripts/discourse/widgets/search-menu.js.es6 b/app/assets/javascripts/discourse/widgets/search-menu.js.es6 index 1bd428a8352..808f3282c3e 100644 --- a/app/assets/javascripts/discourse/widgets/search-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/search-menu.js.es6 @@ -1,5 +1,3 @@ -import { debounce } from "@ember/runloop"; -import { later } from "@ember/runloop"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { searchForTerm, isValidSearchTerm } from "discourse/lib/search"; import { createWidget } from "discourse/widgets/widget"; @@ -32,7 +30,7 @@ const SearchHelper = { } this._cancelSearch = true; - later(() => (this._cancelSearch = false), 400); + Ember.run.later(() => (this._cancelSearch = false), 400); }, perform(widget) { @@ -287,7 +285,7 @@ export default createWidget("search-menu", { searchData.noResults = false; this.searchService().set("highlightTerm", searchData.term); searchData.loading = true; - debounce(SearchHelper, SearchHelper.perform, this, 400); + Ember.run.debounce(SearchHelper, SearchHelper.perform, this, 400); }, moreOfType(type) { diff --git a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 index 813a390ec51..eac0ac7b5c6 100644 --- a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 +++ b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import { createWidget } from "discourse/widgets/widget"; import ComponentConnector from "discourse/widgets/component-connector"; import { h } from "virtual-dom"; @@ -401,7 +400,7 @@ export default createWidget("topic-timeline", { const stream = this.attrs.topic.get("postStream"); // a little debounce to avoid flashing - later(() => { + Ember.run.later(() => { if (!this.state.position === scrollPosition) { return; } diff --git a/app/assets/javascripts/discourse/widgets/user-menu.js.es6 b/app/assets/javascripts/discourse/widgets/user-menu.js.es6 index cf669d1edc4..96e56fb7acd 100644 --- a/app/assets/javascripts/discourse/widgets/user-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/user-menu.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import { createWidget } from "discourse/widgets/widget"; import { h } from "virtual-dom"; import { formatUsername } from "discourse/lib/utilities"; @@ -228,7 +227,7 @@ export default createWidget("user-menu", { const $headerCloak = $(".header-cloak"); $headerCloak.addClass("animate"); $headerCloak.css("opacity", 0); - later(() => this.sendWidgetAction("toggleUserMenu"), 200); + Ember.run.later(() => this.sendWidgetAction("toggleUserMenu"), 200); } }, diff --git a/app/assets/javascripts/pretty-text/oneboxer.js.es6 b/app/assets/javascripts/pretty-text/oneboxer.js.es6 index a500274a777..4753ec80158 100644 --- a/app/assets/javascripts/pretty-text/oneboxer.js.es6 +++ b/app/assets/javascripts/pretty-text/oneboxer.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; let timeout; const loadingQueue = []; let localCache = {}; @@ -83,7 +82,7 @@ function loadNext(ajax) { } ) .finally(() => { - timeout = later(() => loadNext(ajax), timeoutMs); + timeout = Ember.run.later(() => loadNext(ajax), timeoutMs); if (removeLoading) { $elem.removeClass(LOADING_ONEBOX_CSS_CLASS); $elem.data("onebox-loaded"); @@ -130,7 +129,7 @@ export function load({ if (synchronous) { return loadNext(ajax); } else { - timeout = timeout || later(() => loadNext(ajax), 150); + timeout = timeout || Ember.run.later(() => loadNext(ajax), 150); } } diff --git a/app/assets/javascripts/pretty-text/upload-short-url.js.es6 b/app/assets/javascripts/pretty-text/upload-short-url.js.es6 index 3a2f46805c5..8b0b4db2b4d 100644 --- a/app/assets/javascripts/pretty-text/upload-short-url.js.es6 +++ b/app/assets/javascripts/pretty-text/upload-short-url.js.es6 @@ -1,4 +1,3 @@ -import { debounce } from "@ember/runloop"; let _cache = {}; export function lookupCachedUploadUrl(shortUrl) { @@ -101,7 +100,7 @@ export function resolveAllShortUrls(ajax) { $shortUploadUrls = $(attributes); if ($shortUploadUrls.length > 0) { // this is carefully batched so we can do a leading debounce (trigger right away) - return debounce( + return Ember.run.debounce( null, () => _loadShortUrls($shortUploadUrls, ajax), 450, diff --git a/app/assets/javascripts/select-kit/mixins/dom-helpers.js.es6 b/app/assets/javascripts/select-kit/mixins/dom-helpers.js.es6 index 62522d9edd3..b086aa2e434 100644 --- a/app/assets/javascripts/select-kit/mixins/dom-helpers.js.es6 +++ b/app/assets/javascripts/select-kit/mixins/dom-helpers.js.es6 @@ -1,5 +1,3 @@ -import { next } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; import { on } from "ember-addons/ember-computed-decorators"; export default Ember.Mixin.create({ @@ -94,8 +92,8 @@ export default Ember.Mixin.create({ focusFilterOrHeader() { const context = this; // next so we are sure it finised expand/collapse - next(() => { - schedule("afterRender", () => { + Ember.run.next(() => { + Ember.run.schedule("afterRender", () => { if ( !context.$filterInput() || !context.$filterInput().is(":visible") || @@ -131,9 +129,9 @@ export default Ember.Mixin.create({ this.focusFilterOrHeader(); this.autoHighlight(); - next(() => { + Ember.run.next(() => { this._boundaryActionHandler("onExpand", this); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { if (!this.isDestroying && !this.isDestroyed) { this._adjustPosition(); } @@ -146,9 +144,9 @@ export default Ember.Mixin.create({ this.set("isExpanded", false); - next(() => { + Ember.run.next(() => { this._boundaryActionHandler("onCollapse", this); - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { if (!this.isDestroying && !this.isDestroyed) { this._removeFixedPosition(); } diff --git a/app/assets/javascripts/select-kit/mixins/events.js.es6 b/app/assets/javascripts/select-kit/mixins/events.js.es6 index f985da16166..0cbdf5da67c 100644 --- a/app/assets/javascripts/select-kit/mixins/events.js.es6 +++ b/app/assets/javascripts/select-kit/mixins/events.js.es6 @@ -1,5 +1,3 @@ -import { throttle } from "@ember/runloop"; -import { schedule } from "@ember/runloop"; import { on } from "ember-addons/ember-computed-decorators"; const { bind } = Ember.run; @@ -140,7 +138,7 @@ export default Ember.Mixin.create({ this.set("renderedFilterOnce", true); } - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this.$filterInput() .focus() .val(this.$filterInput().val() + String.fromCharCode(keyCode)); @@ -269,7 +267,7 @@ export default Ember.Mixin.create({ const direction = keyCode === 38 ? -1 : 1; - throttle(this, this._moveHighlight, direction, $rows, 32); + Ember.run.throttle(this, this._moveHighlight, direction, $rows, 32); }, didPressBackspaceFromFilter(event) { @@ -430,7 +428,7 @@ export default Ember.Mixin.create({ }, _highlightRow($row) { - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { $row.trigger("mouseover").focus(); this.focus(); }); diff --git a/app/assets/javascripts/wizard/components/invite-list.js.es6 b/app/assets/javascripts/wizard/components/invite-list.js.es6 index de04d70bab5..e8b25973a62 100644 --- a/app/assets/javascripts/wizard/components/invite-list.js.es6 +++ b/app/assets/javascripts/wizard/components/invite-list.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; export default Component.extend({ @@ -61,7 +60,7 @@ export default Component.extend({ this.updateField(); this.set("inviteEmail", ""); - scheduleOnce("afterRender", () => + Ember.run.scheduleOnce("afterRender", () => this.element.querySelector(".invite-email").focus() ); }, diff --git a/app/assets/javascripts/wizard/components/radio-button.js.es6 b/app/assets/javascripts/wizard/components/radio-button.js.es6 index e7ceaa898f7..b40d9839f12 100644 --- a/app/assets/javascripts/wizard/components/radio-button.js.es6 +++ b/app/assets/javascripts/wizard/components/radio-button.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import Component from "@ember/component"; import { observes, on } from "ember-addons/ember-computed-decorators"; @@ -14,7 +13,7 @@ export default Component.extend({ @on("init") updateVal() { const checked = this.value === this.radioValue; - next( + Ember.run.next( () => (this.element.querySelector("input[type=radio]").checked = checked) ); } diff --git a/app/assets/javascripts/wizard/components/wizard-step.js.es6 b/app/assets/javascripts/wizard/components/wizard-step.js.es6 index 1d034d1c47b..c938d1e1672 100644 --- a/app/assets/javascripts/wizard/components/wizard-step.js.es6 +++ b/app/assets/javascripts/wizard/components/wizard-step.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import getUrl from "discourse-common/lib/get-url"; import { @@ -93,7 +92,7 @@ export default Component.extend({ }, autoFocus() { - scheduleOnce("afterRender", () => { + Ember.run.scheduleOnce("afterRender", () => { const $invalid = $(".wizard-field.invalid:eq(0) .wizard-focusable"); if ($invalid.length) { @@ -105,7 +104,7 @@ export default Component.extend({ }, animateInvalidFields() { - scheduleOnce("afterRender", () => + Ember.run.scheduleOnce("afterRender", () => $(".invalid input[type=text], .invalid textarea").wiggle(2, 100) ); }, diff --git a/app/assets/javascripts/wizard/lib/ajax.js.es6 b/app/assets/javascripts/wizard/lib/ajax.js.es6 index 64cc9571cc7..9112c3787ff 100644 --- a/app/assets/javascripts/wizard/lib/ajax.js.es6 +++ b/app/assets/javascripts/wizard/lib/ajax.js.es6 @@ -1,4 +1,3 @@ -import { run } from "@ember/runloop"; import getUrl from "discourse-common/lib/get-url"; import jQuery from "jquery"; @@ -15,8 +14,8 @@ export function getToken() { export function ajax(args) { return new Ember.RSVP.Promise((resolve, reject) => { args.headers = { "X-CSRF-Token": getToken() }; - args.success = data => run(null, resolve, data); - args.error = xhr => run(null, reject, xhr); + args.success = data => Ember.run(null, resolve, data); + args.error = xhr => Ember.run(null, reject, xhr); args.url = getUrl(args.url); jQuery.ajax(args); }); diff --git a/app/assets/javascripts/wizard/lib/preview.js.es6 b/app/assets/javascripts/wizard/lib/preview.js.es6 index d597bfae53f..0ee5a35b276 100644 --- a/app/assets/javascripts/wizard/lib/preview.js.es6 +++ b/app/assets/javascripts/wizard/lib/preview.js.es6 @@ -1,4 +1,3 @@ -import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; /*eslint no-bitwise:0 */ import getUrl from "discourse-common/lib/get-url"; @@ -73,7 +72,7 @@ export function createPreviewComponent(width, height, obj) { }, triggerRepaint() { - scheduleOnce("afterRender", this, "repaint"); + Ember.run.scheduleOnce("afterRender", this, "repaint"); }, repaint() { diff --git a/app/assets/javascripts/wizard/test/acceptance/wizard-test.js.es6 b/app/assets/javascripts/wizard/test/acceptance/wizard-test.js.es6 index 70a7e67fc06..1a4177542ab 100644 --- a/app/assets/javascripts/wizard/test/acceptance/wizard-test.js.es6 +++ b/app/assets/javascripts/wizard/test/acceptance/wizard-test.js.es6 @@ -1,4 +1,3 @@ -import { run } from "@ember/runloop"; import startApp from "wizard/test/helpers/start-app"; var wizard; @@ -8,7 +7,7 @@ QUnit.module("Acceptance: wizard", { }, afterEach() { - run(wizard, "destroy"); + Ember.run(wizard, "destroy"); } }); diff --git a/app/assets/javascripts/wizard/test/helpers/start-app.js.es6 b/app/assets/javascripts/wizard/test/helpers/start-app.js.es6 index d82b237c353..233869bb1a2 100644 --- a/app/assets/javascripts/wizard/test/helpers/start-app.js.es6 +++ b/app/assets/javascripts/wizard/test/helpers/start-app.js.es6 @@ -1,4 +1,3 @@ -import { run } from "@ember/runloop"; import Wizard from "wizard/wizard"; import initializer from "wizard/initializers/load-helpers"; @@ -6,7 +5,7 @@ let app; let started = false; export default function() { - run(() => (app = Wizard.create({ rootElement: "#ember-testing" }))); + Ember.run(() => (app = Wizard.create({ rootElement: "#ember-testing" }))); if (!started) { initializer.initialize(app); diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index 8be13974974..d620320f1b0 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -73,7 +73,6 @@ module PrettyText ctx.attach("console.log", proc { |l| p l }) ctx.eval('window.console = console;') end - ctx.eval("__PRETTY_TEXT = true") ctx_load(ctx, "#{Rails.root}/app/assets/javascripts/discourse-loader.js") ctx_load(ctx, "vendor/assets/javascripts/lodash.js") diff --git a/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 b/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 index 76e3d64088b..6b2f7776f09 100644 --- a/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 +++ b/plugins/discourse-local-dates/assets/javascripts/discourse/components/discourse-local-dates-create-form.js.es6 @@ -1,4 +1,3 @@ -import { schedule } from "@ember/runloop"; import Component from "@ember/component"; /* global Pikaday:true */ import { propertyNotEqual } from "discourse/lib/computed"; @@ -56,7 +55,7 @@ export default Component.extend({ if (markup) { cookAsync(markup).then(result => { this.set("currentPreview", result); - schedule("afterRender", () => + Ember.run.schedule("afterRender", () => this.$(".preview .discourse-local-date").applyLocalDates() ); }); @@ -410,7 +409,7 @@ export default Component.extend({ date = null; } - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this._picker.setMinDate(moment(date, this.dateFormat).toDate()); }); }, @@ -420,7 +419,7 @@ export default Component.extend({ date = null; } - schedule("afterRender", () => { + Ember.run.schedule("afterRender", () => { this._picker.setDate(moment.utc(date), true); }); }, diff --git a/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6 b/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6 index 2e6521008e2..c6818bb2ce8 100644 --- a/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6 +++ b/plugins/discourse-presence/assets/javascripts/discourse/components/composer-presence-display.js.es6 @@ -1,6 +1,3 @@ -import { once } from "@ember/runloop"; -import { debounce } from "@ember/runloop"; -import { cancel } from "@ember/runloop"; import Component from "@ember/component"; import { ajax } from "discourse/lib/ajax"; import { @@ -29,12 +26,12 @@ export default Component.extend({ @on("didInsertElement") composerOpened() { this._lastPublish = new Date(); - once(this, "updateState"); + Ember.run.once(this, "updateState"); }, @observes("action", "post.id", "topic.id") composerStateChanged() { - once(this, "updateState"); + Ember.run.once(this, "updateState"); }, @observes("reply", "title") @@ -47,8 +44,8 @@ export default Component.extend({ @on("willDestroyElement") composerClosing() { this.publish({ previous: this.currentState }); - cancel(this._pingTimer); - cancel(this._clearTimer); + Ember.run.cancel(this._pingTimer); + Ember.run.cancel(this._clearTimer); }, updateState() { @@ -97,7 +94,7 @@ export default Component.extend({ r.messagebus_channel, message => { if (!this.isDestroyed) this.set("presenceUsers", message.users); - this._clearTimer = debounce( + this._clearTimer = Ember.run.debounce( this, "clear", keepAliveDuration + bufferTime diff --git a/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6 b/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6 index 37abc00f301..e6861cdf6ba 100644 --- a/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6 +++ b/plugins/discourse-presence/assets/javascripts/discourse/components/topic-presence-display.js.es6 @@ -1,5 +1,3 @@ -import { debounce } from "@ember/runloop"; -import { cancel } from "@ember/runloop"; import Component from "@ember/component"; import { default as computed, @@ -28,7 +26,7 @@ export default Component.extend({ this.channel, message => { if (!this.isDestroyed) this.set("presenceUsers", message.users); - this._clearTimer = debounce( + this._clearTimer = Ember.run.debounce( this, "clear", keepAliveDuration + bufferTime @@ -40,7 +38,7 @@ export default Component.extend({ @on("willDestroyElement") _destroyed() { - cancel(this._clearTimer); + Ember.run.cancel(this._clearTimer); this.messageBus.unsubscribe(this.channel); }, diff --git a/test/javascripts/acceptance/composer-test.js.es6 b/test/javascripts/acceptance/composer-test.js.es6 index 39573aa31be..262146ab3d4 100644 --- a/test/javascripts/acceptance/composer-test.js.es6 +++ b/test/javascripts/acceptance/composer-test.js.es6 @@ -1,4 +1,3 @@ -import { run } from "@ember/runloop"; import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; import { toggleCheckDraftPopup } from "discourse/controllers/composer"; @@ -85,7 +84,7 @@ QUnit.test("Tests the Composer controls", async assert => { event[mac ? "metaKey" : "ctrlKey"] = true; event.keyCode = 66; - run(() => textarea.dispatchEvent(event)); + Ember.run(() => textarea.dispatchEvent(event)); const example = I18n.t(`composer.bold_text`); assert.equal( diff --git a/test/javascripts/acceptance/modal-test.js.es6 b/test/javascripts/acceptance/modal-test.js.es6 index 13725f4d6cc..45a71146721 100644 --- a/test/javascripts/acceptance/modal-test.js.es6 +++ b/test/javascripts/acceptance/modal-test.js.es6 @@ -1,4 +1,3 @@ -import { run } from "@ember/runloop"; import { acceptance, controllerFor } from "helpers/qunit-helpers"; import showModal from "discourse/lib/show-modal"; @@ -38,7 +37,7 @@ QUnit.test("modal", async function(assert) { '{{#d-modal-body title="" class="" dismissable=false}}test{{/d-modal-body}}' ); - run(() => showModal("not-dismissable", {})); + Ember.run(() => showModal("not-dismissable", {})); assert.ok(find(".d-modal:visible").length === 1, "modal should appear"); diff --git a/test/javascripts/components/d-editor-test.js.es6 b/test/javascripts/components/d-editor-test.js.es6 index 8c6d936e89e..cb008f03233 100644 --- a/test/javascripts/components/d-editor-test.js.es6 +++ b/test/javascripts/components/d-editor-test.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import componentTest from "helpers/component-test"; import { withPluginApi } from "discourse/lib/plugin-api"; import formatTextWithSelection from "helpers/d-editor-helper"; @@ -748,7 +747,7 @@ composerTestCase("replace-text event for composer", async function(assert) { .lookup("service:app-events") .trigger("composer:replace-text", "green", "yellow", { forceFocus: true }); - next(() => { + Ember.run.next(() => { let expect = formatTextWithSelection(AFTER, CASE.after); let actual = formatTextWithSelection( this.value, diff --git a/test/javascripts/controllers/topic-test.js.es6 b/test/javascripts/controllers/topic-test.js.es6 index 695a2042911..f12da986660 100644 --- a/test/javascripts/controllers/topic-test.js.es6 +++ b/test/javascripts/controllers/topic-test.js.es6 @@ -1,5 +1,4 @@ import EmberObject from "@ember/object"; -import { next } from "@ember/runloop"; import Topic from "discourse/models/topic"; import PostStream from "discourse/models/post-stream"; import { Placeholder } from "discourse/lib/posts-with-placeholders"; @@ -546,7 +545,7 @@ QUnit.test( const done = assert.async(); controller.send("deletePost", post); - next(() => { + Ember.run.next(() => { assert.ok(destroyed, "post was destroyed"); done(); }); diff --git a/test/javascripts/helpers/qunit-helpers.js.es6 b/test/javascripts/helpers/qunit-helpers.js.es6 index ca1bd8363a4..5e79f87647a 100644 --- a/test/javascripts/helpers/qunit-helpers.js.es6 +++ b/test/javascripts/helpers/qunit-helpers.js.es6 @@ -1,5 +1,3 @@ -import { run } from "@ember/runloop"; -import { later } from "@ember/runloop"; /* global QUnit, resetSite */ import sessionFixtures from "fixtures/session-fixtures"; @@ -157,7 +155,7 @@ export function controllerFor(controller, model) { export function asyncTestDiscourse(text, func) { QUnit.test(text, function(assert) { const done = assert.async(); - run(() => { + Ember.run(() => { func.call(this, assert); done(); }); @@ -208,7 +206,7 @@ export function waitFor(assert, callback, timeout) { timeout = timeout || 500; const done = assert.async(); - later(() => { + Ember.run.later(() => { callback(); done(); }, timeout); diff --git a/test/javascripts/lib/click-track-test.js.es6 b/test/javascripts/lib/click-track-test.js.es6 index a40e803bd2e..d64823cd2a3 100644 --- a/test/javascripts/lib/click-track-test.js.es6 +++ b/test/javascripts/lib/click-track-test.js.es6 @@ -1,4 +1,3 @@ -import { later } from "@ember/runloop"; import DiscourseURL from "discourse/lib/url"; import ClickTrack from "discourse/lib/click-track"; import { fixture, logIn } from "helpers/qunit-helpers"; @@ -174,7 +173,7 @@ QUnit.skip("restores the href after a while", async assert => { assert.timeout(75); const done = assert.async(); - later(() => { + Ember.run.later(() => { assert.equal(fixture("a").attr("href"), "http://www.google.com"); done(); }); diff --git a/test/javascripts/models/nav-item-test.js.es6 b/test/javascripts/models/nav-item-test.js.es6 index 429b669d7ca..115417e4d48 100644 --- a/test/javascripts/models/nav-item-test.js.es6 +++ b/test/javascripts/models/nav-item-test.js.es6 @@ -1,9 +1,8 @@ -import { run } from "@ember/runloop"; import createStore from "helpers/create-store"; QUnit.module("Discourse.NavItem", { beforeEach() { - run(function() { + Ember.run(function() { const asianCategory = Discourse.Category.create({ name: "确实是这样", id: 343434 diff --git a/test/javascripts/test_helper.js b/test/javascripts/test_helper.js index 1f1f15a0d41..5795795dc03 100644 --- a/test/javascripts/test_helper.js +++ b/test/javascripts/test_helper.js @@ -73,7 +73,8 @@ if (window.Logster) { window.Logster = { enabled: false }; } -var pretender = require("helpers/create-pretender", null, null, false), +var origDebounce = Ember.run.debounce, + pretender = require("helpers/create-pretender", null, null, false), fixtures = require("fixtures/site-fixtures", null, null, false).default, flushMap = require("discourse/models/store", null, null, false).flushMap, ScrollingDOMMethods = require("discourse/mixins/scrolling", null, null, false) @@ -136,9 +137,15 @@ QUnit.testStart(function(ctx) { // Unless we ever need to test this, let's leave it off. $.fn.autocomplete = function() {}; + + // Don't debounce in test unless we're testing debouncing + if (ctx.module.indexOf("debounce") === -1) { + Ember.run.debounce = Ember.run; + } }); QUnit.testDone(function() { + Ember.run.debounce = origDebounce; window.sandbox.restore(); // Destroy any modals diff --git a/test/javascripts/widgets/widget-test.js.es6 b/test/javascripts/widgets/widget-test.js.es6 index 4666285c278..fcb35f96b9a 100644 --- a/test/javascripts/widgets/widget-test.js.es6 +++ b/test/javascripts/widgets/widget-test.js.es6 @@ -1,4 +1,3 @@ -import { next } from "@ember/runloop"; import { moduleForWidget, widgetTest } from "helpers/widget-test"; import { createWidget } from "discourse/widgets/widget"; import { withPluginApi } from "discourse/lib/plugin-api"; @@ -160,7 +159,7 @@ widgetTest("widget update with promise", { click() { return new Ember.RSVP.Promise(resolve => { - next(() => { + Ember.run.next(() => { this.state.name = "Robin"; resolve(); });