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 9a57b9cf326..d6e15496f76 100644 --- a/app/assets/javascripts/admin/controllers/admin-dashboard-reports.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-dashboard-reports.js.es6 @@ -1,6 +1,7 @@ import discourseComputed from "discourse-common/utils/decorators"; import { debounce } from "@ember/runloop"; import Controller from "@ember/controller"; +import { INPUT_DELAY } from "discourse-common/config/environment"; const { get } = Ember; @@ -23,7 +24,7 @@ export default Controller.extend({ actions: { filterReports(filter) { - debounce(this, this._performFiltering, filter, 250); + debounce(this, this._performFiltering, filter, INPUT_DELAY); } }, diff --git a/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 index 508bc559c57..bc034db4f71 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 @@ -1,10 +1,11 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import discourseDebounce from "discourse/lib/debounce"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default AdminEmailLogsController.extend({ @observes("filter.{status,user,address,type}") filterEmailLogs: discourseDebounce(function() { this.loadLogs(); - }, 250) + }, INPUT_DELAY) }); diff --git a/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 index 4a3cc363dfe..0942a3dabf6 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 @@ -2,12 +2,13 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import discourseDebounce from "discourse/lib/debounce"; import IncomingEmail from "admin/models/incoming-email"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default AdminEmailLogsController.extend({ @observes("filter.{status,from,to,subject}") filterIncomingEmails: discourseDebounce(function() { this.loadLogs(IncomingEmail); - }, 250), + }, INPUT_DELAY), actions: { loadMore() { diff --git a/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 index 8c6f6767f4f..01882482e78 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 @@ -2,12 +2,13 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import discourseDebounce from "discourse/lib/debounce"; import IncomingEmail from "admin/models/incoming-email"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default AdminEmailLogsController.extend({ @observes("filter.{status,from,to,subject,error}") filterIncomingEmails: discourseDebounce(function() { this.loadLogs(IncomingEmail); - }, 250), + }, INPUT_DELAY), actions: { loadMore() { diff --git a/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 index f727c9d6f44..b76fcf81dc0 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 @@ -1,10 +1,11 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import discourseDebounce from "discourse/lib/debounce"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default AdminEmailLogsController.extend({ @observes("filter.{status,user,address,type,reply_key}") filterEmailLogs: discourseDebounce(function() { this.loadLogs(); - }, 250) + }, INPUT_DELAY) }); diff --git a/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 index 508bc559c57..bc034db4f71 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 @@ -1,10 +1,11 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import discourseDebounce from "discourse/lib/debounce"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default AdminEmailLogsController.extend({ @observes("filter.{status,user,address,type}") filterEmailLogs: discourseDebounce(function() { this.loadLogs(); - }, 250) + }, INPUT_DELAY) }); diff --git a/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 b/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 index baee177c02f..789f070db18 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 @@ -4,6 +4,7 @@ import { outputExportResult } from "discourse/lib/export-result"; import { exportEntity } from "discourse/lib/export-csv"; import ScreenedIpAddress from "admin/models/screened-ip-address"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default Controller.extend({ loading: false, @@ -16,7 +17,7 @@ export default Controller.extend({ ScreenedIpAddress.findAll(this.filter).then(result => { this.setProperties({ model: result, loading: false }); }); - }, 250), + }, INPUT_DELAY), actions: { allow(record) { diff --git a/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 b/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 index a45f8cc89ad..6f0842049c0 100644 --- a/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 @@ -2,6 +2,7 @@ import Controller from "@ember/controller"; import discourseDebounce from "discourse/lib/debounce"; import Permalink from "admin/models/permalink"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default Controller.extend({ loading: false, @@ -13,7 +14,7 @@ export default Controller.extend({ this.set("model", result); this.set("loading", false); }); - }, 250), + }, INPUT_DELAY), actions: { recordAdded(arg) { diff --git a/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 b/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 index 28721de995f..ac84553a71c 100644 --- a/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 @@ -3,6 +3,7 @@ import { alias } from "@ember/object/computed"; import Controller from "@ember/controller"; import discourseDebounce from "discourse/lib/debounce"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default Controller.extend({ filter: null, @@ -84,7 +85,7 @@ export default Controller.extend({ } else { this.filterContentNow(); } - }, 250), + }, INPUT_DELAY), actions: { clearFilter() { diff --git a/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 b/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 index 8776fee466f..8b7adb194ce 100644 --- a/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 @@ -4,6 +4,7 @@ import discourseDebounce from "discourse/lib/debounce"; import { i18n } from "discourse/lib/computed"; import AdminUser from "admin/models/admin-user"; import CanCheckEmails from "discourse/mixins/can-check-emails"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default Controller.extend(CanCheckEmails, { model: null, @@ -32,7 +33,7 @@ export default Controller.extend(CanCheckEmails, { @observes("listFilter") _filterUsers: discourseDebounce(function() { this.resetFilters(); - }, 250), + }, INPUT_DELAY), resetFilters() { this._page = 1; diff --git a/app/assets/javascripts/admin/controllers/admin-watched-words.js.es6 b/app/assets/javascripts/admin/controllers/admin-watched-words.js.es6 index dbc2afe1dc8..636358c629c 100644 --- a/app/assets/javascripts/admin/controllers/admin-watched-words.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-watched-words.js.es6 @@ -4,6 +4,7 @@ import EmberObject from "@ember/object"; import Controller from "@ember/controller"; import discourseDebounce from "discourse/lib/debounce"; import { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default Controller.extend({ filter: null, @@ -48,7 +49,7 @@ export default Controller.extend({ filterContent: discourseDebounce(function() { this.filterContentNow(); this.set("filtered", !isEmpty(this.filter)); - }, 250), + }, INPUT_DELAY), actions: { clearFilter() { diff --git a/app/assets/javascripts/discourse-common/config/environment.js.es6 b/app/assets/javascripts/discourse-common/config/environment.js.es6 index 3bfa2c38c58..18ce3cc9768 100644 --- a/app/assets/javascripts/discourse-common/config/environment.js.es6 +++ b/app/assets/javascripts/discourse-common/config/environment.js.es6 @@ -1 +1,3 @@ +export const INPUT_DELAY = 250; + export default { environment: Ember.testing ? "test" : "development" }; diff --git a/app/assets/javascripts/discourse/components/emoji-picker.js.es6 b/app/assets/javascripts/discourse/components/emoji-picker.js.es6 index fccf3c597f3..2696ca1358e 100644 --- a/app/assets/javascripts/discourse/components/emoji-picker.js.es6 +++ b/app/assets/javascripts/discourse/components/emoji-picker.js.es6 @@ -9,7 +9,7 @@ import { emojiSearch } from "pretty-text/emoji"; import { safariHacksDisabled } from "discourse/lib/utilities"; -import ENV from "discourse-common/config/environment"; +import ENV, { INPUT_DELAY } from "discourse-common/config/environment"; const { run } = Ember; @@ -94,7 +94,7 @@ export default Component.extend({ @observes("filter") filterChanged() { this.$filter.find(".clear-filter").toggle(!_.isEmpty(this.filter)); - const filterDelay = this.site.isMobileDevice ? 400 : 250; + const filterDelay = this.site.isMobileDevice ? 400 : INPUT_DELAY; run.debounce(this, this._filterEmojisList, filterDelay); }, diff --git a/app/assets/javascripts/discourse/components/quote-button.js.es6 b/app/assets/javascripts/discourse/components/quote-button.js.es6 index 2d8df37706d..141d9f32ac8 100644 --- a/app/assets/javascripts/discourse/components/quote-button.js.es6 +++ b/app/assets/javascripts/discourse/components/quote-button.js.es6 @@ -2,6 +2,7 @@ import { scheduleOnce } from "@ember/runloop"; import Component from "@ember/component"; import discourseDebounce from "discourse/lib/debounce"; import { selectedText, selectedElement } from "discourse/lib/utilities"; +import { INPUT_DELAY } from "discourse-common/config/environment"; function getQuoteTitle(element) { const titleEl = element.querySelector(".title"); @@ -146,7 +147,7 @@ export default Component.extend({ didInsertElement() { const { isWinphone, isAndroid } = this.capabilities; - const wait = isWinphone || isAndroid ? 250 : 25; + const wait = isWinphone || isAndroid ? INPUT_DELAY : 25; const onSelectionChanged = discourseDebounce( () => this._selectionChanged(), wait 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 9b3bac5035b..136c416588e 100644 --- a/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 +++ b/app/assets/javascripts/discourse/components/search-advanced-options.js.es6 @@ -5,6 +5,7 @@ import { escapeExpression } from "discourse/lib/utilities"; import Group from "discourse/models/group"; import Badge from "discourse/models/badge"; import Category from "discourse/models/category"; +import { INPUT_DELAY } from "discourse-common/config/environment"; const REGEXP_BLOCKS = /(([^" \t\n\x0B\f\r]+)?(("[^"]+")?))/g; @@ -82,7 +83,7 @@ export default Component.extend({ @observes("searchTerm") _updateOptions() { this._update(); - debounce(this, this._update, 250); + debounce(this, this._update, INPUT_DELAY); }, _init() { diff --git a/app/assets/javascripts/discourse/controllers/user-invited-show.js.es6 b/app/assets/javascripts/discourse/controllers/user-invited-show.js.es6 index 9282265e784..0b8c07d0fb6 100644 --- a/app/assets/javascripts/discourse/controllers/user-invited-show.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user-invited-show.js.es6 @@ -4,6 +4,7 @@ import Invite from "discourse/models/invite"; import discourseDebounce from "discourse/lib/debounce"; import { popupAjaxError } from "discourse/lib/ajax-error"; import discourseComputed, { observes } from "discourse-common/utils/decorators"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default Controller.extend({ user: null, @@ -30,7 +31,7 @@ export default Controller.extend({ this.filter, this.searchTerm ).then(invites => this.set("model", invites)); - }, 250), + }, INPUT_DELAY), inviteRedeemed: equal("filter", "redeemed"), diff --git a/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 b/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 index 69f42cfee16..59840f2b4d7 100644 --- a/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 +++ b/app/assets/javascripts/discourse/lib/keyboard-shortcuts.js.es6 @@ -4,6 +4,7 @@ import Composer from "discourse/models/composer"; import { minimumOffset } from "discourse/lib/offset-calculator"; import { ajax } from "discourse/lib/ajax"; import { throttle } from "@ember/runloop"; +import { INPUT_DELAY } from "discourse-common/config/environment"; const bindings = { "!": { postAction: "showFlags" }, @@ -299,19 +300,19 @@ export default { }, setTrackingToMuted(event) { - throttle(this, "_setTracking", { id: 0, event }, 250, true); + throttle(this, "_setTracking", { id: 0, event }, INPUT_DELAY, true); }, setTrackingToRegular(event) { - throttle(this, "_setTracking", { id: 1, event }, 250, true); + throttle(this, "_setTracking", { id: 1, event }, INPUT_DELAY, true); }, setTrackingToTracking(event) { - throttle(this, "_setTracking", { id: 2, event }, 250, true); + throttle(this, "_setTracking", { id: 2, event }, INPUT_DELAY, true); }, setTrackingToWatching(event) { - throttle(this, "_setTracking", { id: 3, event }, 250, true); + throttle(this, "_setTracking", { id: 3, event }, INPUT_DELAY, true); }, _setTracking(params) { diff --git a/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 b/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 index 799d3c904c2..40d8ee4637d 100644 --- a/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 +++ b/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 @@ -4,6 +4,7 @@ import { safariHacksDisabled, iOSWithVisualViewport } from "discourse/lib/utilities"; +import { INPUT_DELAY } from "discourse-common/config/environment"; // TODO: remove calcHeight once iOS 13 adoption > 90% // In iOS 13 and up we use visualViewport API to calculate height @@ -136,7 +137,7 @@ function positioningWorkaround($fixedElement) { positioningWorkaround.blur(evt); }; - var blurred = discourseDebounce(blurredNow, 250); + var blurred = discourseDebounce(blurredNow, INPUT_DELAY); var positioningHack = function(evt) { // we need this, otherwise changing focus means we never clear 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 374aacad939..df092d9a898 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 @@ -10,6 +10,7 @@ import loadScript from "discourse/lib/load-script"; import computed, { observes } from "discourse-common/utils/decorators"; import { cookAsync } from "discourse/lib/text"; import discourseDebounce from "discourse/lib/debounce"; +import { INPUT_DELAY } from "discourse-common/config/environment"; export default Component.extend({ timeFormat: "HH:mm:ss", @@ -66,7 +67,7 @@ export default Component.extend({ ); }); } - }, 250), + }, INPUT_DELAY), @computed("date", "toDate", "toTime") isRange(date, toDate, toTime) {