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..a64a2e34798 100644 --- a/app/assets/javascripts/admin/components/admin-report-chart.js.es6 +++ b/app/assets/javascripts/admin/components/admin-report-chart.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { debounce } from "@ember/runloop"; import { schedule } from "@ember/runloop"; import Component from "@ember/component"; @@ -49,10 +50,10 @@ export default Component.extend({ if (!chartCanvas) return; const context = chartCanvas.getContext("2d"); - const chartData = Ember.makeArray( + const chartData = makeArray( model.get("chartData") || model.get("data") ); - const prevChartData = Ember.makeArray( + const prevChartData = makeArray( model.get("prevChartData") || model.get("prev_data") ); 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..d233d131e2b 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,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { debounce } from "@ember/runloop"; import { schedule } from "@ember/runloop"; import Component from "@ember/component"; @@ -52,7 +53,7 @@ export default Component.extend({ const context = chartCanvas.getContext("2d"); - const chartData = Ember.makeArray( + const chartData = makeArray( model.get("chartData") || model.get("data") ); diff --git a/app/assets/javascripts/admin/components/admin-report-table.js.es6 b/app/assets/javascripts/admin/components/admin-report-table.js.es6 index c82896d577f..7cba55bf3a8 100644 --- a/app/assets/javascripts/admin/components/admin-report-table.js.es6 +++ b/app/assets/javascripts/admin/components/admin-report-table.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { alias } from "@ember/object/computed"; import Component from "@ember/component"; import computed from "ember-addons/ember-computed-decorators"; @@ -91,7 +92,7 @@ export default Component.extend({ @computed("sortLabel", "sortDirection", "model.data.[]") sortedData(sortLabel, sortDirection, data) { - data = Ember.makeArray(data); + data = makeArray(data); if (sortLabel) { const compare = (label, direction) => { diff --git a/app/assets/javascripts/admin/components/admin-report.js.es6 b/app/assets/javascripts/admin/components/admin-report.js.es6 index d0a841ca21b..d7ddfc21515 100644 --- a/app/assets/javascripts/admin/components/admin-report.js.es6 +++ b/app/assets/javascripts/admin/components/admin-report.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { alias, or, and, reads, equal, notEmpty } from "@ember/object/computed"; import EmberObject from "@ember/object"; import { next } from "@ember/runloop"; @@ -108,7 +109,7 @@ export default Component.extend({ displayedModes(currentMode, reportModes, forcedModes) { const modes = forcedModes ? forcedModes.split(",") : reportModes; - return Ember.makeArray(modes).map(mode => { + return makeArray(modes).map(mode => { const base = `btn-default mode-btn ${mode}`; const cssClass = currentMode === mode ? `${base} is-current` : base; diff --git a/app/assets/javascripts/admin/components/value-list.js.es6 b/app/assets/javascripts/admin/components/value-list.js.es6 index aa21a2f48b0..5ab15aa63ed 100644 --- a/app/assets/javascripts/admin/components/value-list.js.es6 +++ b/app/assets/javascripts/admin/components/value-list.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { empty, alias } from "@ember/object/computed"; import Component from "@ember/component"; import { on } from "ember-addons/ember-computed-decorators"; @@ -31,7 +32,7 @@ export default Component.extend({ @computed("choices.[]", "collection.[]") filteredChoices(choices, collection) { - return Ember.makeArray(choices).filter(i => collection.indexOf(i) < 0); + return makeArray(choices).filter(i => collection.indexOf(i) < 0); }, keyDown(event) { diff --git a/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js.es6 b/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js.es6 index 2ef5ee09b66..c554586f6af 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-customize-themes-show.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { empty, notEmpty, match } from "@ember/object/computed"; import Controller from "@ember/controller"; import { default as computed } from "ember-addons/ember-computed-decorators"; @@ -126,8 +127,8 @@ export default Controller.extend({ }); this.get("parentController.model.content").forEach(theme => { - const children = Ember.makeArray(theme.get("childThemes")); - const rawChildren = Ember.makeArray(theme.get("child_themes")); + const children = makeArray(theme.get("childThemes")); + const rawChildren = makeArray(theme.get("child_themes")); const index = children ? children.indexOf(model) : -1; if (index > -1) { children.splice(index, 1); diff --git a/app/assets/javascripts/admin/controllers/admin-dashboard-general.js.es6 b/app/assets/javascripts/admin/controllers/admin-dashboard-general.js.es6 index 23bdbcf5f02..da78555f079 100644 --- a/app/assets/javascripts/admin/controllers/admin-dashboard-general.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-dashboard-general.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { inject } from "@ember/controller"; import Controller from "@ember/controller"; import { setting } from "discourse/lib/computed"; @@ -8,7 +9,7 @@ import PeriodComputationMixin from "admin/mixins/period-computation"; function staticReport(reportType) { return Ember.computed("reports.[]", function() { - return Ember.makeArray(this.reports).find( + return makeArray(this.reports).find( report => report.type === reportType ); }); @@ -95,7 +96,7 @@ export default Controller.extend(PeriodComputationMixin, { this.setProperties({ dashboardFetchedAt: new Date(), model: adminDashboardModel, - reports: Ember.makeArray(adminDashboardModel.reports).map(x => + reports: makeArray(adminDashboardModel.reports).map(x => Report.create(x) ) }); diff --git a/app/assets/javascripts/admin/models/report.js.es6 b/app/assets/javascripts/admin/models/report.js.es6 index df99f0b5be6..4416e1e9f3a 100644 --- a/app/assets/javascripts/admin/models/report.js.es6 +++ b/app/assets/javascripts/admin/models/report.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { isEmpty } from "@ember/utils"; import EmberObject from "@ember/object"; import { escapeExpression } from "discourse/lib/utilities"; @@ -137,7 +138,7 @@ const Report = Discourse.Model.extend({ @computed("data", "currentTotal") currentAverage(data, total) { - return Ember.makeArray(data).length === 0 + return makeArray(data).length === 0 ? 0 : parseFloat((total / parseFloat(data.length)).toFixed(1)); }, diff --git a/app/assets/javascripts/discourse/lib/utilities.js.es6 b/app/assets/javascripts/discourse/lib/utilities.js.es6 index 599c3a4965a..eac6471bc70 100644 --- a/app/assets/javascripts/discourse/lib/utilities.js.es6 +++ b/app/assets/javascripts/discourse/lib/utilities.js.es6 @@ -3,6 +3,13 @@ import toMarkdown from "discourse/lib/to-markdown"; const homepageSelector = "meta[name=discourse_current_homepage]"; +export function makeArray(obj) { + if (obj === null || obj === undefined) { + return []; + } + return Array.isArray(obj) ? obj : [obj]; +} + export function translateSize(size) { switch (size) { case "tiny": diff --git a/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 b/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 index faf7ebe164a..02a4ae32d16 100644 --- a/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 +++ b/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { createWidget } from "discourse/widgets/widget"; import { h } from "virtual-dom"; import { avatarFor, avatarImg } from "discourse/widgets/post"; @@ -146,7 +147,7 @@ export default createWidget("private-message-map", { if ( !this.state.isEditing && this.site.mobileView && - Ember.makeArray(participants[0]).length > 4 + makeArray(participants[0]).length > 4 ) { hideNamesClass = ".hide-names"; } diff --git a/app/assets/javascripts/select-kit/components/category-selector.js.es6 b/app/assets/javascripts/select-kit/components/category-selector.js.es6 index c9f1f974fa9..b53e8ea2a82 100644 --- a/app/assets/javascripts/select-kit/components/category-selector.js.es6 +++ b/app/assets/javascripts/select-kit/components/category-selector.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import MultiSelectComponent from "select-kit/components/multi-select"; import Category from "discourse/models/category"; @@ -28,7 +29,7 @@ export default MultiSelectComponent.extend({ }, computeValues() { - return Ember.makeArray(this.categories).map(c => c.id); + return makeArray(this.categories).map(c => c.id); }, mutateValues(values) { @@ -43,7 +44,7 @@ export default MultiSelectComponent.extend({ }, computeContent() { - const blacklist = Ember.makeArray(this.blacklist); + const blacklist = makeArray(this.blacklist); return Category.list().filter(category => { return ( this.categories.includes(category) || !blacklist.includes(category) diff --git a/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 b/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 index 4d579c4d539..bfd9a44af80 100644 --- a/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 +++ b/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import Category from "discourse/models/category"; import ComboBox from "select-kit/components/combo-box"; import TagsMixin from "select-kit/mixins/tags"; @@ -5,7 +6,7 @@ import { default as computed } from "ember-addons/ember-computed-decorators"; import renderTag from "discourse/lib/render-tag"; import { escapeExpression } from "discourse/lib/utilities"; import { iconHTML } from "discourse-common/lib/icon-library"; -const { get, isEmpty, run, makeArray } = Ember; +const { get, isEmpty, run } = Ember; export default ComboBox.extend(TagsMixin, { allowContentReplacement: true, @@ -226,7 +227,7 @@ export default ComboBox.extend(TagsMixin, { }, destroyTags(tags) { - tags = Ember.makeArray(tags).map(c => get(c, "value")); + tags = makeArray(tags).map(c => get(c, "value")); // work around usage with buffered proxy // it does not listen on array changes, similar hack already on select diff --git a/app/assets/javascripts/select-kit/components/multi-select/multi-select-header.js.es6 b/app/assets/javascripts/select-kit/components/multi-select/multi-select-header.js.es6 index 191e694e6f6..e53746cbfe6 100644 --- a/app/assets/javascripts/select-kit/components/multi-select/multi-select-header.js.es6 +++ b/app/assets/javascripts/select-kit/components/multi-select/multi-select-header.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { on } from "ember-addons/ember-computed-decorators"; import computed from "ember-addons/ember-computed-decorators"; import SelectKitHeaderComponent from "select-kit/components/select-kit/select-kit-header"; @@ -39,14 +40,14 @@ export default SelectKitHeaderComponent.extend({ @computed("computedContent.selection.[]") names(selection) { - return Ember.makeArray(selection) + return makeArray(selection) .map(s => s.name) .join(","); }, @computed("computedContent.selection.[]") values(selection) { - return Ember.makeArray(selection) + return makeArray(selection) .map(s => s.value) .join(","); } diff --git a/app/assets/javascripts/select-kit/components/tag-chooser.js.es6 b/app/assets/javascripts/select-kit/components/tag-chooser.js.es6 index e03450bab2b..b218df9a25c 100644 --- a/app/assets/javascripts/select-kit/components/tag-chooser.js.es6 +++ b/app/assets/javascripts/select-kit/components/tag-chooser.js.es6 @@ -2,7 +2,8 @@ import MultiSelectComponent from "select-kit/components/multi-select"; import TagsMixin from "select-kit/mixins/tags"; import renderTag from "discourse/lib/render-tag"; import computed from "ember-addons/ember-computed-decorators"; -const { get, run, makeArray } = Ember; +import { makeArray } from "discourse/lib/utilities"; +const { get, run } = Ember; export default MultiSelectComponent.extend(TagsMixin, { pluginApiIdentifiers: ["tag-chooser"], diff --git a/app/assets/javascripts/select-kit/components/tag-drop.js.es6 b/app/assets/javascripts/select-kit/components/tag-drop.js.es6 index d88ec1614c5..d173c60bb0f 100644 --- a/app/assets/javascripts/select-kit/components/tag-drop.js.es6 +++ b/app/assets/javascripts/select-kit/components/tag-drop.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import ComboBoxComponent from "select-kit/components/combo-box"; import DiscourseURL from "discourse/lib/url"; import TagsMixin from "select-kit/mixins/tags"; @@ -123,7 +124,7 @@ export default ComboBoxComponent.extend(TagsMixin, { if (this.siteSettings.tags_sort_alphabetically && topTags) { return shortcuts.concat(topTags.sort()); } else { - return shortcuts.concat(Ember.makeArray(topTags)); + return shortcuts.concat(makeArray(topTags)); } }, diff --git a/app/assets/javascripts/select-kit/mixins/events.js.es6 b/app/assets/javascripts/select-kit/mixins/events.js.es6 index 0d6e7013a74..b43c2542d0f 100644 --- a/app/assets/javascripts/select-kit/mixins/events.js.es6 +++ b/app/assets/javascripts/select-kit/mixins/events.js.es6 @@ -1,3 +1,4 @@ +import { makeArray } from "discourse/lib/utilities"; import { isEmpty } from "@ember/utils"; import { throttle } from "@ember/runloop"; import { schedule } from "@ember/runloop"; @@ -293,7 +294,7 @@ export default Mixin.create({ if (!this.highlightedSelection.length) { // try to highlight the last non locked item from the current selection - Ember.makeArray(this.selection) + makeArray(this.selection) .slice() .reverse() .some(selection => { @@ -311,7 +312,7 @@ export default Mixin.create({ }, didPressSelectAll() { - this.highlightSelection(Ember.makeArray(this.selection)); + this.highlightSelection(makeArray(this.selection)); }, didClickOutside(event) {