DEV: Move computed to discourseComputed (#8312)

This commit is contained in:
Mark VanLandingham 2019-11-07 15:38:28 -06:00 committed by GitHub
parent d74546f50e
commit 6275c05c0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
395 changed files with 1770 additions and 1649 deletions

View File

@ -1,6 +1,6 @@
import Component from "@ember/component"; import Component from "@ember/component";
import loadScript from "discourse/lib/load-script"; import loadScript from "discourse/lib/load-script";
import { observes } from "ember-addons/ember-computed-decorators"; import { observes } from "discourse-common/utils/decorators";
import { on } from "@ember/object/evented"; import { on } from "@ember/object/evented";
export default Component.extend({ export default Component.extend({

View File

@ -4,7 +4,7 @@ import debounce from "discourse/lib/debounce";
import { renderSpinner } from "discourse/helpers/loading-spinner"; import { renderSpinner } from "discourse/helpers/loading-spinner";
import { escapeExpression } from "discourse/lib/utilities"; import { escapeExpression } from "discourse/lib/utilities";
import { bufferedRender } from "discourse-common/lib/buffered-render"; import { bufferedRender } from "discourse-common/lib/buffered-render";
import { observes, on } from "ember-addons/ember-computed-decorators"; import { observes, on } from "discourse-common/utils/decorators";
export default Component.extend( export default Component.extend(
bufferedRender({ bufferedRender({

View File

@ -1,7 +1,7 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import { setting } from "discourse/lib/computed"; import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
classNames: ["admin-report-storage-stats"], classNames: ["admin-report-storage-stats"],
@ -10,32 +10,32 @@ export default Component.extend({
backupStats: alias("model.data.backups"), backupStats: alias("model.data.backups"),
uploadStats: alias("model.data.uploads"), uploadStats: alias("model.data.uploads"),
@computed("backupStats") @discourseComputed("backupStats")
showBackupStats(stats) { showBackupStats(stats) {
return stats && this.currentUser.admin; return stats && this.currentUser.admin;
}, },
@computed("backupLocation") @discourseComputed("backupLocation")
backupLocationName(backupLocation) { backupLocationName(backupLocation) {
return I18n.t(`admin.backups.location.${backupLocation}`); return I18n.t(`admin.backups.location.${backupLocation}`);
}, },
@computed("backupStats.used_bytes") @discourseComputed("backupStats.used_bytes")
usedBackupSpace(bytes) { usedBackupSpace(bytes) {
return I18n.toHumanSize(bytes); return I18n.toHumanSize(bytes);
}, },
@computed("backupStats.free_bytes") @discourseComputed("backupStats.free_bytes")
freeBackupSpace(bytes) { freeBackupSpace(bytes) {
return I18n.toHumanSize(bytes); return I18n.toHumanSize(bytes);
}, },
@computed("uploadStats.used_bytes") @discourseComputed("uploadStats.used_bytes")
usedUploadSpace(bytes) { usedUploadSpace(bytes) {
return I18n.toHumanSize(bytes); return I18n.toHumanSize(bytes);
}, },
@computed("uploadStats.free_bytes") @discourseComputed("uploadStats.free_bytes")
freeUploadSpace(bytes) { freeUploadSpace(bytes) {
return I18n.toHumanSize(bytes); return I18n.toHumanSize(bytes);
} }

View File

@ -1,6 +1,6 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
tagName: "td", tagName: "td",
@ -8,7 +8,7 @@ export default Component.extend({
classNameBindings: ["type", "property"], classNameBindings: ["type", "property"],
options: null, options: null,
@computed("label", "data", "options") @discourseComputed("label", "data", "options")
computedLabel(label, data, options) { computedLabel(label, data, options) {
return label.compute(data, options || {}); return label.compute(data, options || {});
}, },

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
tagName: "th", tagName: "th",
@ -7,12 +7,12 @@ export default Component.extend({
classNameBindings: ["label.mainProperty", "label.type", "isCurrentSort"], classNameBindings: ["label.mainProperty", "label.type", "isCurrentSort"],
attributeBindings: ["label.title:title"], attributeBindings: ["label.title:title"],
@computed("currentSortLabel.sortProperty", "label.sortProperty") @discourseComputed("currentSortLabel.sortProperty", "label.sortProperty")
isCurrentSort(currentSortField, labelSortField) { isCurrentSort(currentSortField, labelSortField) {
return currentSortField === labelSortField; return currentSortField === labelSortField;
}, },
@computed("currentSortDirection") @discourseComputed("currentSortDirection")
sortIcon(currentSortDirection) { sortIcon(currentSortDirection) {
return currentSortDirection === 1 ? "caret-up" : "caret-down"; return currentSortDirection === 1 ? "caret-up" : "caret-down";
} }

View File

@ -1,7 +1,7 @@
import discourseComputed from "discourse-common/utils/decorators";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
const PAGES_LIMIT = 8; const PAGES_LIMIT = 8;
@ -13,12 +13,16 @@ export default Component.extend({
perPage: alias("options.perPage"), perPage: alias("options.perPage"),
page: 0, page: 0,
@computed("model.computedLabels.length") @discourseComputed("model.computedLabels.length")
twoColumns(labelsLength) { twoColumns(labelsLength) {
return labelsLength === 2; return labelsLength === 2;
}, },
@computed("totalsForSample", "options.total", "model.dates_filtering") @discourseComputed(
"totalsForSample",
"options.total",
"model.dates_filtering"
)
showTotalForSample(totalsForSample, total, datesFiltering) { showTotalForSample(totalsForSample, total, datesFiltering) {
// check if we have at least one cell which contains a value // check if we have at least one cell which contains a value
const sum = totalsForSample const sum = totalsForSample
@ -29,12 +33,16 @@ export default Component.extend({
return sum >= 1 && total && datesFiltering; return sum >= 1 && total && datesFiltering;
}, },
@computed("model.total", "options.total", "twoColumns") @discourseComputed("model.total", "options.total", "twoColumns")
showTotal(reportTotal, total, twoColumns) { showTotal(reportTotal, total, twoColumns) {
return reportTotal && total && twoColumns; return reportTotal && total && twoColumns;
}, },
@computed("model.{average,data}", "totalsForSample.1.value", "twoColumns") @discourseComputed(
"model.{average,data}",
"totalsForSample.1.value",
"twoColumns"
)
showAverage(model, sampleTotalValue, hasTwoColumns) { showAverage(model, sampleTotalValue, hasTwoColumns) {
return ( return (
model.average && model.average &&
@ -44,17 +52,17 @@ export default Component.extend({
); );
}, },
@computed("totalsForSample.1.value", "model.data.length") @discourseComputed("totalsForSample.1.value", "model.data.length")
averageForSample(totals, count) { averageForSample(totals, count) {
return (totals / count).toFixed(0); return (totals / count).toFixed(0);
}, },
@computed("model.data.length") @discourseComputed("model.data.length")
showSortingUI(dataLength) { showSortingUI(dataLength) {
return dataLength >= 5; return dataLength >= 5;
}, },
@computed("totalsForSampleRow", "model.computedLabels") @discourseComputed("totalsForSampleRow", "model.computedLabels")
totalsForSample(row, labels) { totalsForSample(row, labels) {
return labels.map(label => { return labels.map(label => {
const computedLabel = label.compute(row); const computedLabel = label.compute(row);
@ -64,7 +72,7 @@ export default Component.extend({
}); });
}, },
@computed("model.data", "model.computedLabels") @discourseComputed("model.data", "model.computedLabels")
totalsForSampleRow(rows, labels) { totalsForSampleRow(rows, labels) {
if (!rows || !rows.length) return {}; if (!rows || !rows.length) return {};
@ -90,7 +98,7 @@ export default Component.extend({
return totalsRow; return totalsRow;
}, },
@computed("sortLabel", "sortDirection", "model.data.[]") @discourseComputed("sortLabel", "sortDirection", "model.data.[]")
sortedData(sortLabel, sortDirection, data) { sortedData(sortLabel, sortDirection, data) {
data = makeArray(data); data = makeArray(data);
@ -110,7 +118,7 @@ export default Component.extend({
return data; return data;
}, },
@computed("sortedData.[]", "perPage", "page") @discourseComputed("sortedData.[]", "perPage", "page")
paginatedData(data, perPage, page) { paginatedData(data, perPage, page) {
if (perPage < data.length) { if (perPage < data.length) {
const start = perPage * page; const start = perPage * page;
@ -120,7 +128,7 @@ export default Component.extend({
return data; return data;
}, },
@computed("model.data", "perPage", "page") @discourseComputed("model.data", "perPage", "page")
pages(data, perPage, page) { pages(data, perPage, page) {
if (!data || data.length <= perPage) return []; if (!data || data.length <= perPage) return [];

View File

@ -1,3 +1,4 @@
import discourseComputed from "discourse-common/utils/decorators";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
import { alias, or, and, reads, equal, notEmpty } from "@ember/object/computed"; import { alias, or, and, reads, equal, notEmpty } from "@ember/object/computed";
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
@ -8,7 +9,6 @@ import { exportEntity } from "discourse/lib/export-csv";
import { outputExportResult } from "discourse/lib/export-result"; import { outputExportResult } from "discourse/lib/export-result";
import { isNumeric } from "discourse/lib/utilities"; import { isNumeric } from "discourse/lib/utilities";
import { SCHEMA_VERSION, default as Report } from "admin/models/report"; import { SCHEMA_VERSION, default as Report } from "admin/models/report";
import computed from "ember-addons/ember-computed-decorators";
import ENV from "discourse-common/config/environment"; import ENV from "discourse-common/config/environment";
const TABLE_OPTIONS = { const TABLE_OPTIONS = {
@ -90,23 +90,23 @@ export default Component.extend({
hasData: notEmpty("model.data"), hasData: notEmpty("model.data"),
@computed("dataSourceName", "model.type") @discourseComputed("dataSourceName", "model.type")
dasherizedDataSourceName(dataSourceName, type) { dasherizedDataSourceName(dataSourceName, type) {
return (dataSourceName || type || "undefined").replace(/_/g, "-"); return (dataSourceName || type || "undefined").replace(/_/g, "-");
}, },
@computed("dataSourceName", "model.type") @discourseComputed("dataSourceName", "model.type")
dataSource(dataSourceName, type) { dataSource(dataSourceName, type) {
dataSourceName = dataSourceName || type; dataSourceName = dataSourceName || type;
return `/admin/reports/${dataSourceName}`; return `/admin/reports/${dataSourceName}`;
}, },
@computed("displayedModes.length") @discourseComputed("displayedModes.length")
showModes(displayedModesLength) { showModes(displayedModesLength) {
return displayedModesLength > 1; return displayedModesLength > 1;
}, },
@computed("currentMode", "model.modes", "forcedModes") @discourseComputed("currentMode", "model.modes", "forcedModes")
displayedModes(currentMode, reportModes, forcedModes) { displayedModes(currentMode, reportModes, forcedModes) {
const modes = forcedModes ? forcedModes.split(",") : reportModes; const modes = forcedModes ? forcedModes.split(",") : reportModes;
@ -122,12 +122,12 @@ export default Component.extend({
}); });
}, },
@computed("currentMode") @discourseComputed("currentMode")
modeComponent(currentMode) { modeComponent(currentMode) {
return `admin-report-${currentMode}`; return `admin-report-${currentMode}`;
}, },
@computed("startDate") @discourseComputed("startDate")
normalizedStartDate(startDate) { normalizedStartDate(startDate) {
return startDate && typeof startDate.isValid === "function" return startDate && typeof startDate.isValid === "function"
? moment ? moment
@ -139,7 +139,7 @@ export default Component.extend({
.format("YYYYMMDD"); .format("YYYYMMDD");
}, },
@computed("endDate") @discourseComputed("endDate")
normalizedEndDate(endDate) { normalizedEndDate(endDate) {
return endDate && typeof endDate.isValid === "function" return endDate && typeof endDate.isValid === "function"
? moment ? moment
@ -151,7 +151,7 @@ export default Component.extend({
.format("YYYYMMDD"); .format("YYYYMMDD");
}, },
@computed( @discourseComputed(
"dataSourceName", "dataSourceName",
"normalizedStartDate", "normalizedStartDate",
"normalizedEndDate", "normalizedEndDate",

View File

@ -1,10 +1,10 @@
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { fmt } from "discourse/lib/computed"; import { fmt } from "discourse/lib/computed";
export default Component.extend({ export default Component.extend({
@computed("theme.targets", "onlyOverridden", "showAdvanced") @discourseComputed("theme.targets", "onlyOverridden", "showAdvanced")
visibleTargets(targets, onlyOverridden, showAdvanced) { visibleTargets(targets, onlyOverridden, showAdvanced) {
return targets.filter(target => { return targets.filter(target => {
if (target.advanced && !showAdvanced) { if (target.advanced && !showAdvanced) {
@ -17,7 +17,7 @@ export default Component.extend({
}); });
}, },
@computed("currentTargetName", "onlyOverridden", "theme.fields") @discourseComputed("currentTargetName", "onlyOverridden", "theme.fields")
visibleFields(targetName, onlyOverridden, fields) { visibleFields(targetName, onlyOverridden, fields) {
fields = fields[targetName]; fields = fields[targetName];
if (onlyOverridden) { if (onlyOverridden) {
@ -26,14 +26,14 @@ export default Component.extend({
return fields; return fields;
}, },
@computed("currentTargetName", "fieldName") @discourseComputed("currentTargetName", "fieldName")
activeSectionMode(targetName, fieldName) { activeSectionMode(targetName, fieldName) {
if (["settings", "translations"].includes(targetName)) return "yaml"; if (["settings", "translations"].includes(targetName)) return "yaml";
if (["extra_scss"].includes(targetName)) return "scss"; if (["extra_scss"].includes(targetName)) return "scss";
return fieldName && fieldName.indexOf("scss") > -1 ? "scss" : "html"; return fieldName && fieldName.indexOf("scss") > -1 ? "scss" : "html";
}, },
@computed("fieldName", "currentTargetName", "theme") @discourseComputed("fieldName", "currentTargetName", "theme")
activeSection: { activeSection: {
get(fieldName, target, model) { get(fieldName, target, model) {
return model.getField(target, fieldName); return model.getField(target, fieldName);
@ -46,17 +46,21 @@ export default Component.extend({
editorId: fmt("fieldName", "currentTargetName", "%@|%@"), editorId: fmt("fieldName", "currentTargetName", "%@|%@"),
@computed("maximized") @discourseComputed("maximized")
maximizeIcon(maximized) { maximizeIcon(maximized) {
return maximized ? "discourse-compress" : "discourse-expand"; return maximized ? "discourse-compress" : "discourse-expand";
}, },
@computed("currentTargetName", "theme.targets") @discourseComputed("currentTargetName", "theme.targets")
showAddField(currentTargetName, targets) { showAddField(currentTargetName, targets) {
return targets.find(t => t.name === currentTargetName).customNames; return targets.find(t => t.name === currentTargetName).customNames;
}, },
@computed("currentTargetName", "fieldName", "theme.theme_fields.@each.error") @discourseComputed(
"currentTargetName",
"fieldName",
"theme.theme_fields.@each.error"
)
error(target, fieldName) { error(target, fieldName) {
return this.theme.getError(target, fieldName); return this.theme.getError(target, fieldName);
}, },

View File

@ -8,10 +8,10 @@ import { popupAjaxError } from "discourse/lib/ajax-error";
import { propertyEqual } from "discourse/lib/computed"; import { propertyEqual } from "discourse/lib/computed";
import { i18n } from "discourse/lib/computed"; import { i18n } from "discourse/lib/computed";
import { import {
default as computed, default as discourseComputed,
observes, observes,
on on
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
export default Component.extend(bufferedProperty("userField"), { export default Component.extend(bufferedProperty("userField"), {
editing: empty("userField.id"), editing: empty("userField.id"),
@ -22,7 +22,7 @@ export default Component.extend(bufferedProperty("userField"), {
userFieldsDescription: i18n("admin.user_fields.description"), userFieldsDescription: i18n("admin.user_fields.description"),
@computed("buffered.field_type") @discourseComputed("buffered.field_type")
bufferedFieldType(fieldType) { bufferedFieldType(fieldType) {
return UserField.fieldTypeById(fieldType); return UserField.fieldTypeById(fieldType);
}, },
@ -39,12 +39,12 @@ export default Component.extend(bufferedProperty("userField"), {
$(".user-field-name").select(); $(".user-field-name").select();
}, },
@computed("userField.field_type") @discourseComputed("userField.field_type")
fieldName(fieldType) { fieldName(fieldType) {
return UserField.fieldTypeById(fieldType).get("name"); return UserField.fieldTypeById(fieldType).get("name");
}, },
@computed( @discourseComputed(
"userField.editable", "userField.editable",
"userField.required", "userField.required",
"userField.show_on_profile", "userField.show_on_profile",

View File

@ -1,27 +1,27 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
classNames: ["hook-event"], classNames: ["hook-event"],
typeName: alias("type.name"), typeName: alias("type.name"),
@computed("typeName") @discourseComputed("typeName")
name(typeName) { name(typeName) {
return I18n.t(`admin.web_hooks.${typeName}_event.name`); return I18n.t(`admin.web_hooks.${typeName}_event.name`);
}, },
@computed("typeName") @discourseComputed("typeName")
details(typeName) { details(typeName) {
return I18n.t(`admin.web_hooks.${typeName}_event.details`); return I18n.t(`admin.web_hooks.${typeName}_event.details`);
}, },
@computed("model.[]", "typeName") @discourseComputed("model.[]", "typeName")
eventTypeExists(eventTypes, typeName) { eventTypeExists(eventTypes, typeName) {
return eventTypes.any(event => event.name === typeName); return eventTypes.any(event => event.name === typeName);
}, },
@computed("eventTypeExists") @discourseComputed("eventTypeExists")
enabled: { enabled: {
get(eventTypeExists) { get(eventTypeExists) {
return eventTypeExists; return eventTypeExists;

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { ensureJSON, plainJSON, prettyJSON } from "discourse/lib/formatter"; import { ensureJSON, plainJSON, prettyJSON } from "discourse/lib/formatter";
@ -10,7 +10,7 @@ export default Component.extend({
expandDetailsRequestKey: "request", expandDetailsRequestKey: "request",
expandDetailsResponseKey: "response", expandDetailsResponseKey: "response",
@computed("model.status") @discourseComputed("model.status")
statusColorClasses(status) { statusColorClasses(status) {
if (!status) return ""; if (!status) return "";
@ -21,25 +21,25 @@ export default Component.extend({
} }
}, },
@computed("model.created_at") @discourseComputed("model.created_at")
createdAt(createdAt) { createdAt(createdAt) {
return moment(createdAt).format("YYYY-MM-DD HH:mm:ss"); return moment(createdAt).format("YYYY-MM-DD HH:mm:ss");
}, },
@computed("model.duration") @discourseComputed("model.duration")
completion(duration) { completion(duration) {
const seconds = Math.floor(duration / 10.0) / 100.0; const seconds = Math.floor(duration / 10.0) / 100.0;
return I18n.t("admin.web_hooks.events.completed_in", { count: seconds }); return I18n.t("admin.web_hooks.events.completed_in", { count: seconds });
}, },
@computed("expandDetails") @discourseComputed("expandDetails")
expandRequestIcon(expandDetails) { expandRequestIcon(expandDetails) {
return expandDetails === this.expandDetailsRequestKey return expandDetails === this.expandDetailsRequestKey
? "ellipsis-h" ? "ellipsis-h"
: "ellipsis-v"; : "ellipsis-v";
}, },
@computed("expandDetails") @discourseComputed("expandDetails")
expandResponseIcon(expandDetails) { expandResponseIcon(expandDetails) {
return expandDetails === this.expandDetailsResponseKey return expandDetails === this.expandDetailsResponseKey
? "ellipsis-h" ? "ellipsis-h"

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
import { iconHTML } from "discourse-common/lib/icon-library"; import { iconHTML } from "discourse-common/lib/icon-library";
import { bufferedRender } from "discourse-common/lib/buffered-render"; import { bufferedRender } from "discourse-common/lib/buffered-render";
@ -8,17 +8,17 @@ export default Component.extend(
classes: ["text-muted", "text-danger", "text-successful", "text-muted"], classes: ["text-muted", "text-danger", "text-successful", "text-muted"],
icons: ["far-circle", "times-circle", "circle", "circle"], icons: ["far-circle", "times-circle", "circle", "circle"],
@computed("deliveryStatuses", "model.last_delivery_status") @discourseComputed("deliveryStatuses", "model.last_delivery_status")
status(deliveryStatuses, lastDeliveryStatus) { status(deliveryStatuses, lastDeliveryStatus) {
return deliveryStatuses.find(s => s.id === lastDeliveryStatus); return deliveryStatuses.find(s => s.id === lastDeliveryStatus);
}, },
@computed("status.id", "icons") @discourseComputed("status.id", "icons")
icon(statusId, icons) { icon(statusId, icons) {
return icons[statusId - 1]; return icons[statusId - 1];
}, },
@computed("status.id", "classes") @discourseComputed("status.id", "classes")
class(statusId, classes) { class(statusId, classes) {
return classes[statusId - 1]; return classes[statusId - 1];
}, },

View File

@ -1,16 +1,16 @@
import discourseComputed from "discourse-common/utils/decorators";
import { reads } from "@ember/object/computed"; import { reads } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
editorId: reads("fieldName"), editorId: reads("fieldName"),
@computed("fieldName") @discourseComputed("fieldName")
currentEditorMode(fieldName) { currentEditorMode(fieldName) {
return fieldName === "css" ? "scss" : fieldName; return fieldName === "css" ? "scss" : fieldName;
}, },
@computed("fieldName", "styles.html", "styles.css") @discourseComputed("fieldName", "styles.html", "styles.css")
resetDisabled(fieldName) { resetDisabled(fieldName) {
return ( return (
this.get(`styles.${fieldName}`) === this.get(`styles.${fieldName}`) ===
@ -18,7 +18,7 @@ export default Component.extend({
); );
}, },
@computed("styles", "fieldName") @discourseComputed("styles", "fieldName")
editorContents: { editorContents: {
get(styles, fieldName) { get(styles, fieldName) {
return styles[fieldName]; return styles[fieldName];

View File

@ -1,10 +1,10 @@
import discourseComputed from "discourse-common/utils/decorators";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import { or } from "@ember/object/computed"; import { or } from "@ember/object/computed";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import { bufferedProperty } from "discourse/mixins/buffered-content"; import { bufferedProperty } from "discourse/mixins/buffered-content";
import computed from "ember-addons/ember-computed-decorators"; import { on, observes } from "discourse-common/utils/decorators";
import { on, observes } from "ember-addons/ember-computed-decorators";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
export default Component.extend(bufferedProperty("host"), { export default Component.extend(bufferedProperty("host"), {
@ -22,7 +22,7 @@ export default Component.extend(bufferedProperty("host"), {
}); });
}, },
@computed("buffered.host", "host.isSaving") @discourseComputed("buffered.host", "host.isSaving")
cantSave(host, isSaving) { cantSave(host, isSaving) {
return isSaving || isEmpty(host); return isSaving || isEmpty(host);
}, },

View File

@ -1,25 +1,25 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
classNames: ["embed-setting"], classNames: ["embed-setting"],
@computed("field") @discourseComputed("field")
inputId(field) { inputId(field) {
return field.dasherize(); return field.dasherize();
}, },
@computed("field") @discourseComputed("field")
translationKey(field) { translationKey(field) {
return `admin.embedding.${field}`; return `admin.embedding.${field}`;
}, },
@computed("type") @discourseComputed("type")
isCheckbox(type) { isCheckbox(type) {
return type === "checkbox"; return type === "checkbox";
}, },
@computed("value") @discourseComputed("value")
checked: { checked: {
get(value) { get(value) {
return !!value; return !!value;

View File

@ -1,5 +1,5 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { on, observes } from "ember-addons/ember-computed-decorators"; import { on, observes } from "discourse-common/utils/decorators";
import highlightSyntax from "discourse/lib/highlight-syntax"; import highlightSyntax from "discourse/lib/highlight-syntax";
export default Component.extend({ export default Component.extend({

View File

@ -1,8 +1,8 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { import {
default as computed, default as discourseComputed,
observes observes
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
classNames: ["inline-edit"], classNames: ["inline-edit"],
@ -21,12 +21,12 @@ export default Component.extend({
this.set("checkedInternal", this.checked); this.set("checkedInternal", this.checked);
}, },
@computed("labelKey") @discourseComputed("labelKey")
label(key) { label(key) {
return I18n.t(key); return I18n.t(key);
}, },
@computed("checked", "checkedInternal") @discourseComputed("checked", "checkedInternal")
changed(checked, checkedInternal) { changed(checked, checkedInternal) {
return !!checked !== !!checkedInternal; return !!checked !== !!checkedInternal;
}, },

View File

@ -1,7 +1,7 @@
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import { later } from "@ember/runloop"; import { later } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import AdminUser from "admin/models/admin-user"; import AdminUser from "admin/models/admin-user";
import copyText from "discourse/lib/copy-text"; import copyText from "discourse/lib/copy-text";
@ -9,7 +9,7 @@ import copyText from "discourse/lib/copy-text";
export default Component.extend({ export default Component.extend({
classNames: ["ip-lookup"], classNames: ["ip-lookup"],
@computed("other_accounts.length", "totalOthersWithSameIP") @discourseComputed("other_accounts.length", "totalOthersWithSameIP")
otherAccountsToDelete(otherAccountsLength, totalOthersWithSameIP) { otherAccountsToDelete(otherAccountsLength, totalOthersWithSameIP) {
// can only delete up to 50 accounts at a time // can only delete up to 50 accounts at a time
const total = Math.min(50, totalOthersWithSameIP || 0); const total = Math.min(50, totalOthersWithSameIP || 0);

View File

@ -1,7 +1,7 @@
import discourseComputed from "discourse-common/utils/decorators";
import { equal } from "@ember/object/computed"; import { equal } from "@ember/object/computed";
import { scheduleOnce } from "@ember/runloop"; import { scheduleOnce } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
const ACTIONS = ["delete", "delete_replies", "edit", "none"]; const ACTIONS = ["delete", "delete_replies", "edit", "none"];
@ -10,7 +10,7 @@ export default Component.extend({
postAction: null, postAction: null,
postEdit: null, postEdit: null,
@computed @discourseComputed
penaltyActions() { penaltyActions() {
return ACTIONS.map(id => { return ACTIONS.map(id => {
return { id, name: I18n.t(`admin.user.penalty_post_${id}`) }; return { id, name: I18n.t(`admin.user.penalty_post_${id}`) };

View File

@ -1,6 +1,6 @@
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { fmt } from "discourse/lib/computed"; import { fmt } from "discourse/lib/computed";
import Permalink from "admin/models/permalink"; import Permalink from "admin/models/permalink";
@ -10,7 +10,7 @@ export default Component.extend({
permalinkType: "topic_id", permalinkType: "topic_id",
permalinkTypePlaceholder: fmt("permalinkType", "admin.permalink.%@"), permalinkTypePlaceholder: fmt("permalinkType", "admin.permalink.%@"),
@computed @discourseComputed
permalinkTypes() { permalinkTypes() {
return [ return [
{ id: "topic_id", name: I18n.t("admin.permalink.topic_id") }, { id: "topic_id", name: I18n.t("admin.permalink.topic_id") },

View File

@ -1,5 +1,5 @@
import Category from "discourse/models/category"; import Category from "discourse/models/category";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import FilterComponent from "admin/components/report-filters/filter"; import FilterComponent from "admin/components/report-filters/filter";
export default FilterComponent.extend({ export default FilterComponent.extend({
@ -7,7 +7,7 @@ export default FilterComponent.extend({
layoutName: "admin/templates/components/report-filters/category", layoutName: "admin/templates/components/report-filters/category",
@computed("filter.default") @discourseComputed("filter.default")
category(categoryId) { category(categoryId) {
return Category.findById(categoryId); return Category.findById(categoryId);
}, },

View File

@ -1,19 +1,19 @@
import FilterComponent from "admin/components/report-filters/filter"; import FilterComponent from "admin/components/report-filters/filter";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
export default FilterComponent.extend({ export default FilterComponent.extend({
classNames: ["group-filter"], classNames: ["group-filter"],
layoutName: "admin/templates/components/report-filters/group", layoutName: "admin/templates/components/report-filters/group",
@computed() @discourseComputed()
groupOptions() { groupOptions() {
return (this.site.groups || []).map(group => { return (this.site.groups || []).map(group => {
return { name: group["name"], value: group["id"] }; return { name: group["name"], value: group["id"] };
}); });
}, },
@computed("filter.default") @discourseComputed("filter.default")
groupId(filterDefault) { groupId(filterDefault) {
return filterDefault ? parseInt(filterDefault, 10) : null; return filterDefault ? parseInt(filterDefault, 10) : null;
} }

View File

@ -4,9 +4,9 @@ import Component from "@ember/component";
import { iconHTML } from "discourse-common/lib/icon-library"; import { iconHTML } from "discourse-common/lib/icon-library";
import { bufferedRender } from "discourse-common/lib/buffered-render"; import { bufferedRender } from "discourse-common/lib/buffered-render";
import { import {
default as computed, default as discourseComputed,
on on
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
/*global Resumable:true */ /*global Resumable:true */
@ -91,12 +91,12 @@ export default Component.extend(
} }
}, },
@computed("title", "text") @discourseComputed("title", "text")
translatedTitle(title, text) { translatedTitle(title, text) {
return title ? I18n.t(title) : text; return title ? I18n.t(title) : text;
}, },
@computed("isUploading", "progress") @discourseComputed("isUploading", "progress")
text(isUploading, progress) { text(isUploading, progress) {
if (isUploading) { if (isUploading) {
return progress + " %"; return progress + " %";

View File

@ -1,13 +1,13 @@
import discourseComputed from "discourse-common/utils/decorators";
import { or } from "@ember/object/computed"; import { or } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
classNames: ["controls"], classNames: ["controls"],
buttonDisabled: or("model.isSaving", "saveDisabled"), buttonDisabled: or("model.isSaving", "saveDisabled"),
@computed("model.isSaving") @discourseComputed("model.isSaving")
savingText(saving) { savingText(saving) {
return saving ? "saving" : "save"; return saving ? "saving" : "save";
} }

View File

@ -1,3 +1,4 @@
import discourseComputed from "discourse-common/utils/decorators";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
/** /**
@ -12,20 +13,19 @@ import Component from "@ember/component";
**/ **/
import ScreenedIpAddress from "admin/models/screened-ip-address"; import ScreenedIpAddress from "admin/models/screened-ip-address";
import computed from "ember-addons/ember-computed-decorators"; import { on } from "discourse-common/utils/decorators";
import { on } from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
classNames: ["screened-ip-address-form"], classNames: ["screened-ip-address-form"],
formSubmitted: false, formSubmitted: false,
actionName: "block", actionName: "block",
@computed @discourseComputed
adminWhitelistEnabled() { adminWhitelistEnabled() {
return Discourse.SiteSettings.use_admin_ip_whitelist; return Discourse.SiteSettings.use_admin_ip_whitelist;
}, },
@computed("adminWhitelistEnabled") @discourseComputed("adminWhitelistEnabled")
actionNames(adminWhitelistEnabled) { actionNames(adminWhitelistEnabled) {
if (adminWhitelistEnabled) { if (adminWhitelistEnabled) {
return [ return [

View File

@ -1,6 +1,6 @@
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import Component from "@ember/component"; import Component from "@ember/component";
import { on } from "ember-addons/ember-computed-decorators"; import { on } from "discourse-common/utils/decorators";
import { set } from "@ember/object"; import { set } from "@ember/object";
export default Component.extend({ export default Component.extend({

View File

@ -1,9 +1,9 @@
import discourseComputed from "discourse-common/utils/decorators";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
@computed("value") @discourseComputed("value")
enabled: { enabled: {
get(value) { get(value) {
if (isEmpty(value)) { if (isEmpty(value)) {

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
@computed("value") @discourseComputed("value")
selectedCategories: { selectedCategories: {
get(value) { get(value) {
return Discourse.Category.findByIds(value.split("|")); return Discourse.Category.findByIds(value.split("|"));

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
@computed() @discourseComputed()
groupChoices() { groupChoices() {
return this.site.get("groups").map(g => { return this.site.get("groups").map(g => {
return { name: g.name, id: g.id.toString() }; return { name: g.name, id: g.id.toString() };

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
@computed("value") @discourseComputed("value")
selectedTags: { selectedTags: {
get(value) { get(value) {
return value.split("|"); return value.split("|");

View File

@ -1,5 +1,5 @@
import Component from "@ember/component"; import Component from "@ember/component";
import { on } from "ember-addons/ember-computed-decorators"; import { on } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
classNames: ["site-text"], classNames: ["site-text"],

View File

@ -2,9 +2,9 @@ import { gt, and } from "@ember/object/computed";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import { import {
default as computed, default as discourseComputed,
observes observes
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
import { iconHTML } from "discourse-common/lib/icon-library"; import { iconHTML } from "discourse-common/lib/icon-library";
import { escape } from "pretty-text/sanitizer"; import { escape } from "pretty-text/sanitizer";
import ENV from "discourse-common/config/environment"; import ENV from "discourse-common/config/environment";
@ -55,7 +55,7 @@ export default Component.extend({
} }
}, },
@computed( @discourseComputed(
"theme.component", "theme.component",
"theme.childThemes.@each.name", "theme.childThemes.@each.name",
"theme.childThemes.length", "theme.childThemes.length",
@ -76,12 +76,12 @@ export default Component.extend({
}); });
}, },
@computed("children") @discourseComputed("children")
childrenString(children) { childrenString(children) {
return children.join(", "); return children.join(", ");
}, },
@computed( @discourseComputed(
"theme.childThemes.length", "theme.childThemes.length",
"theme.component", "theme.component",
"childrenExpanded", "childrenExpanded",

View File

@ -1,7 +1,7 @@
import { gt, equal } from "@ember/object/computed"; import { gt, equal } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import { THEMES, COMPONENTS } from "admin/models/theme"; import { THEMES, COMPONENTS } from "admin/models/theme";
import { default as computed } from "ember-addons/ember-computed-decorators"; import discourseComputed from "discourse-common/utils/decorators";
import { getOwner } from "@ember/application"; import { getOwner } from "@ember/application";
export default Component.extend({ export default Component.extend({
@ -17,7 +17,7 @@ export default Component.extend({
themesTabActive: equal("currentTab", THEMES), themesTabActive: equal("currentTab", THEMES),
componentsTabActive: equal("currentTab", COMPONENTS), componentsTabActive: equal("currentTab", COMPONENTS),
@computed("themes", "components", "currentTab") @discourseComputed("themes", "components", "currentTab")
themesList(themes, components) { themesList(themes, components) {
if (this.themesTabActive) { if (this.themesTabActive) {
return themes; return themes;
@ -26,7 +26,7 @@ export default Component.extend({
} }
}, },
@computed( @discourseComputed(
"themesList", "themesList",
"currentTab", "currentTab",
"themesList.@each.user_selectable", "themesList.@each.user_selectable",
@ -41,7 +41,7 @@ export default Component.extend({
); );
}, },
@computed( @discourseComputed(
"themesList", "themesList",
"currentTab", "currentTab",
"themesList.@each.user_selectable", "themesList.@each.user_selectable",

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
import { empty, alias } from "@ember/object/computed"; import { empty, alias } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import { on } from "ember-addons/ember-computed-decorators"; import { on } from "discourse-common/utils/decorators";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({ export default Component.extend({
classNameBindings: [":value-list"], classNameBindings: [":value-list"],
@ -30,7 +30,7 @@ export default Component.extend({
); );
}, },
@computed("choices.[]", "collection.[]") @discourseComputed("choices.[]", "collection.[]")
filteredChoices(choices, collection) { filteredChoices(choices, collection) {
return makeArray(choices).filter(i => collection.indexOf(i) < 0); return makeArray(choices).filter(i => collection.indexOf(i) < 0);
}, },

View File

@ -3,10 +3,10 @@ import { schedule } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import WatchedWord from "admin/models/watched-word"; import WatchedWord from "admin/models/watched-word";
import { import {
default as computed, default as discourseComputed,
on, on,
observes observes
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
classNames: ["watched-word-form"], classNames: ["watched-word-form"],
@ -14,7 +14,7 @@ export default Component.extend({
actionKey: null, actionKey: null,
showMessage: false, showMessage: false,
@computed("regularExpressions") @discourseComputed("regularExpressions")
placeholderKey(regularExpressions) { placeholderKey(regularExpressions) {
return ( return (
"admin.watched_words.form.placeholder" + "admin.watched_words.form.placeholder" +
@ -29,7 +29,7 @@ export default Component.extend({
} }
}, },
@computed("word") @discourseComputed("word")
isUniqueWord(word) { isUniqueWord(word) {
const words = this.filteredContent || []; const words = this.filteredContent || [];
const filtered = words.filter(content => content.action === this.actionKey); const filtered = words.filter(content => content.action === this.actionKey);

View File

@ -1,6 +1,6 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
import UploadMixin from "discourse/mixins/upload"; import UploadMixin from "discourse/mixins/upload";
export default Component.extend(UploadMixin, { export default Component.extend(UploadMixin, {
@ -13,7 +13,7 @@ export default Component.extend(UploadMixin, {
return { skipValidation: true }; return { skipValidation: true };
}, },
@computed("actionKey") @discourseComputed("actionKey")
data(actionKey) { data(actionKey) {
return { action_key: actionKey }; return { action_key: actionKey };
}, },

View File

@ -1,4 +1,4 @@
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Controller.extend({ export default Ember.Controller.extend({
@ -7,12 +7,12 @@ export default Ember.Controller.extend({
{ id: "single", name: I18n.t("admin.api.single_user") } { id: "single", name: I18n.t("admin.api.single_user") }
], ],
@computed("userMode") @discourseComputed("userMode")
showUserSelector(mode) { showUserSelector(mode) {
return mode === "single"; return mode === "single";
}, },
@computed("model.description", "model.username", "userMode") @discourseComputed("model.description", "model.username", "userMode")
saveDisabled(description, username, userMode) { saveDisabled(description, username, userMode) {
if (Ember.isBlank(description)) return true; if (Ember.isBlank(description)) return true;
if (userMode === "single" && Ember.isBlank(username)) return true; if (userMode === "single" && Ember.isBlank(username)) return true;

View File

@ -2,7 +2,7 @@ import { alias, equal } from "@ember/object/computed";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { setting, i18n } from "discourse/lib/computed"; import { setting, i18n } from "discourse/lib/computed";
export default Controller.extend({ export default Controller.extend({
@ -12,7 +12,7 @@ export default Controller.extend({
backupLocation: setting("backup_location"), backupLocation: setting("backup_location"),
localBackupStorage: equal("backupLocation", "local"), localBackupStorage: equal("backupLocation", "local"),
@computed("status.allowRestore", "status.isOperationRunning") @discourseComputed("status.allowRestore", "status.isOperationRunning")
restoreTitle(allowRestore, isOperationRunning) { restoreTitle(allowRestore, isOperationRunning) {
if (!allowRestore) { if (!allowRestore) {
return "admin.backups.operations.restore.is_disabled"; return "admin.backups.operations.restore.is_disabled";

View File

@ -1,10 +1,10 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content"; import { bufferedProperty } from "discourse/mixins/buffered-content";
import { propertyNotEqual } from "discourse/lib/computed"; import { propertyNotEqual } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(bufferedProperty("model"), { export default Controller.extend(bufferedProperty("model"), {
adminBadges: inject(), adminBadges: inject(),
@ -19,7 +19,7 @@ export default Controller.extend(bufferedProperty("model"), {
readOnly: alias("buffered.system"), readOnly: alias("buffered.system"),
showDisplayName: propertyNotEqual("name", "displayName"), showDisplayName: propertyNotEqual("name", "displayName"),
@computed("model.query", "buffered.query") @discourseComputed("model.query", "buffered.query")
hasQuery(modelQuery, bufferedQuery) { hasQuery(modelQuery, bufferedQuery) {
if (bufferedQuery) { if (bufferedQuery) {
return bufferedQuery.trim().length > 0; return bufferedQuery.trim().length > 0;

View File

@ -1,9 +1,9 @@
import discourseComputed from "discourse-common/utils/decorators";
import { later } from "@ember/runloop"; import { later } from "@ember/runloop";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({ export default Controller.extend({
@computed("model.colors", "onlyOverridden") @discourseComputed("model.colors", "onlyOverridden")
colors(allColors, onlyOverridden) { colors(allColors, onlyOverridden) {
if (onlyOverridden) { if (onlyOverridden) {
return allColors.filter(color => color.get("overridden")); return allColors.filter(color => color.get("overridden"));

View File

@ -1,20 +1,20 @@
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import showModal from "discourse/lib/show-modal"; import showModal from "discourse/lib/show-modal";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
export default Controller.extend({ export default Controller.extend({
@computed("model.@each.id") @discourseComputed("model.@each.id")
baseColorScheme() { baseColorScheme() {
return this.model.findBy("is_base", true); return this.model.findBy("is_base", true);
}, },
@computed("model.@each.id") @discourseComputed("model.@each.id")
baseColorSchemes() { baseColorSchemes() {
return this.model.filterBy("is_base", true); return this.model.filterBy("is_base", true);
}, },
@computed("baseColorScheme") @discourseComputed("baseColorScheme")
baseColors(baseColorScheme) { baseColors(baseColorScheme) {
const baseColorsHash = EmberObject.create({}); const baseColorsHash = EmberObject.create({});
baseColorScheme.get("colors").forEach(color => { baseColorScheme.get("colors").forEach(color => {

View File

@ -1,13 +1,13 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({ export default Controller.extend({
@computed("model.isSaving") @discourseComputed("model.isSaving")
saveButtonText(isSaving) { saveButtonText(isSaving) {
return isSaving ? I18n.t("saving") : I18n.t("admin.customize.save"); return isSaving ? I18n.t("saving") : I18n.t("admin.customize.save");
}, },
@computed("model.changed", "model.isSaving") @discourseComputed("model.changed", "model.isSaving")
saveDisabled(changed, isSaving) { saveDisabled(changed, isSaving) {
return !changed || isSaving; return !changed || isSaving;
}, },

View File

@ -1,19 +1,19 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content"; import { bufferedProperty } from "discourse/mixins/buffered-content";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(bufferedProperty("emailTemplate"), { export default Controller.extend(bufferedProperty("emailTemplate"), {
saved: false, saved: false,
@computed("buffered.body", "buffered.subject") @discourseComputed("buffered.body", "buffered.subject")
saveDisabled(body, subject) { saveDisabled(body, subject) {
return ( return (
this.emailTemplate.body === body && this.emailTemplate.subject === subject this.emailTemplate.body === body && this.emailTemplate.subject === subject
); );
}, },
@computed("buffered") @discourseComputed("buffered")
hasMultipleSubjects(buffered) { hasMultipleSubjects(buffered) {
if (buffered.getProperties("subject")["subject"]) { if (buffered.getProperties("subject")["subject"]) {
return false; return false;

View File

@ -1,6 +1,6 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { url } from "discourse/lib/computed"; import { url } from "discourse/lib/computed";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
export default Controller.extend({ export default Controller.extend({
section: null, section: null,
@ -16,7 +16,7 @@ export default Controller.extend({
this.set("currentTarget", target && target.id); this.set("currentTarget", target && target.id);
}, },
@computed("currentTarget") @discourseComputed("currentTarget")
currentTargetName(id) { currentTargetName(id) {
const target = this.get("model.targets").find( const target = this.get("model.targets").find(
t => t.id === parseInt(id, 10) t => t.id === parseInt(id, 10)
@ -24,12 +24,12 @@ export default Controller.extend({
return target && target.name; return target && target.name;
}, },
@computed("model.isSaving") @discourseComputed("model.isSaving")
saveButtonText(isSaving) { saveButtonText(isSaving) {
return isSaving ? I18n.t("saving") : I18n.t("admin.customize.save"); return isSaving ? I18n.t("saving") : I18n.t("admin.customize.save");
}, },
@computed("model.changed", "model.isSaving") @discourseComputed("model.changed", "model.isSaving")
saveDisabled(changed, isSaving) { saveDisabled(changed, isSaving) {
return !changed || isSaving; return !changed || isSaving;
}, },

View File

@ -1,7 +1,7 @@
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
import { empty, notEmpty, match } from "@ember/object/computed"; import { empty, notEmpty, match } from "@ember/object/computed";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { url } from "discourse/lib/computed"; import { url } from "discourse/lib/computed";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import showModal from "discourse/lib/show-modal"; import showModal from "discourse/lib/show-modal";
@ -16,7 +16,7 @@ export default Controller.extend({
addButtonDisabled: empty("selectedChildThemeId"), addButtonDisabled: empty("selectedChildThemeId"),
editRouteName: "adminCustomizeThemes.edit", editRouteName: "adminCustomizeThemes.edit",
@computed("model.editedFields") @discourseComputed("model.editedFields")
editedFieldsFormatted() { editedFieldsFormatted() {
const descriptions = []; const descriptions = [];
["common", "desktop", "mobile"].forEach(target => { ["common", "desktop", "mobile"].forEach(target => {
@ -34,13 +34,13 @@ export default Controller.extend({
return descriptions; return descriptions;
}, },
@computed("colorSchemeId", "model.color_scheme_id") @discourseComputed("colorSchemeId", "model.color_scheme_id")
colorSchemeChanged(colorSchemeId, existingId) { colorSchemeChanged(colorSchemeId, existingId) {
colorSchemeId = colorSchemeId === null ? null : parseInt(colorSchemeId); colorSchemeId = colorSchemeId === null ? null : parseInt(colorSchemeId);
return colorSchemeId !== existingId; return colorSchemeId !== existingId;
}, },
@computed("availableChildThemes", "model.childThemes.[]", "model") @discourseComputed("availableChildThemes", "model.childThemes.[]", "model")
selectableChildThemes(available, childThemes) { selectableChildThemes(available, childThemes) {
if (available) { if (available) {
const themes = !childThemes const themes = !childThemes
@ -50,7 +50,7 @@ export default Controller.extend({
} }
}, },
@computed("allThemes", "model.component", "model") @discourseComputed("allThemes", "model.component", "model")
availableChildThemes(allThemes) { availableChildThemes(allThemes) {
if (!this.get("model.component")) { if (!this.get("model.component")) {
const themeId = this.get("model.id"); const themeId = this.get("model.id");
@ -60,38 +60,38 @@ export default Controller.extend({
} }
}, },
@computed("model.component") @discourseComputed("model.component")
convertKey(component) { convertKey(component) {
const type = component ? "component" : "theme"; const type = component ? "component" : "theme";
return `admin.customize.theme.convert_${type}`; return `admin.customize.theme.convert_${type}`;
}, },
@computed("model.component") @discourseComputed("model.component")
convertIcon(component) { convertIcon(component) {
return component ? "cube" : ""; return component ? "cube" : "";
}, },
@computed("model.component") @discourseComputed("model.component")
convertTooltip(component) { convertTooltip(component) {
const type = component ? "component" : "theme"; const type = component ? "component" : "theme";
return `admin.customize.theme.convert_${type}_tooltip`; return `admin.customize.theme.convert_${type}_tooltip`;
}, },
@computed("model.settings") @discourseComputed("model.settings")
settings(settings) { settings(settings) {
return settings.map(setting => ThemeSettings.create(setting)); return settings.map(setting => ThemeSettings.create(setting));
}, },
hasSettings: notEmpty("settings"), hasSettings: notEmpty("settings"),
@computed("model.translations") @discourseComputed("model.translations")
translations(translations) { translations(translations) {
return translations.map(setting => ThemeSettings.create(setting)); return translations.map(setting => ThemeSettings.create(setting));
}, },
hasTranslations: notEmpty("translations"), hasTranslations: notEmpty("translations"),
@computed("model.remoteError", "updatingRemote") @discourseComputed("model.remoteError", "updatingRemote")
showRemoteError(errorMessage, updating) { showRemoteError(errorMessage, updating) {
return errorMessage && !updating; return errorMessage && !updating;
}, },

View File

@ -1,21 +1,21 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { THEMES } from "admin/models/theme"; import { THEMES } from "admin/models/theme";
export default Controller.extend({ export default Controller.extend({
currentTab: THEMES, currentTab: THEMES,
@computed("model", "model.@each.component") @discourseComputed("model", "model.@each.component")
fullThemes(themes) { fullThemes(themes) {
return themes.filter(t => !t.get("component")); return themes.filter(t => !t.get("component"));
}, },
@computed("model", "model.@each.component") @discourseComputed("model", "model.@each.component")
childThemes(themes) { childThemes(themes) {
return themes.filter(t => t.get("component")); return themes.filter(t => t.get("component"));
}, },
@computed("model", "model.@each.component") @discourseComputed("model", "model.@each.component")
installedThemes(themes) { installedThemes(themes) {
return themes.map(t => t.name); return themes.map(t => t.name);
} }

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { setting } from "discourse/lib/computed"; import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
import AdminDashboard from "admin/models/admin-dashboard"; import AdminDashboard from "admin/models/admin-dashboard";
import Report from "admin/models/report"; import Report from "admin/models/report";
import PeriodComputationMixin from "admin/mixins/period-computation"; import PeriodComputationMixin from "admin/mixins/period-computation";
@ -20,12 +20,12 @@ export default Controller.extend(PeriodComputationMixin, {
logSearchQueriesEnabled: setting("log_search_queries"), logSearchQueriesEnabled: setting("log_search_queries"),
basePath: Discourse.BaseUri, basePath: Discourse.BaseUri,
@computed("siteSettings.dashboard_general_tab_activity_metrics") @discourseComputed("siteSettings.dashboard_general_tab_activity_metrics")
activityMetrics(metrics) { activityMetrics(metrics) {
return (metrics || "").split("|").filter(m => m); return (metrics || "").split("|").filter(m => m);
}, },
@computed @discourseComputed
activityMetricsFilters() { activityMetricsFilters() {
return { return {
startDate: this.lastMonth, startDate: this.lastMonth,
@ -33,14 +33,14 @@ export default Controller.extend(PeriodComputationMixin, {
}; };
}, },
@computed @discourseComputed
topReferredTopicsOptions() { topReferredTopicsOptions() {
return { return {
table: { total: false, limit: 8 } table: { total: false, limit: 8 }
}; };
}, },
@computed @discourseComputed
topReferredTopicsFilters() { topReferredTopicsFilters() {
return { return {
startDate: moment() startDate: moment()
@ -50,7 +50,7 @@ export default Controller.extend(PeriodComputationMixin, {
}; };
}, },
@computed @discourseComputed
trendingSearchFilters() { trendingSearchFilters() {
return { return {
startDate: moment() startDate: moment()
@ -60,14 +60,14 @@ export default Controller.extend(PeriodComputationMixin, {
}; };
}, },
@computed @discourseComputed
trendingSearchOptions() { trendingSearchOptions() {
return { return {
table: { total: false, limit: 8 } table: { total: false, limit: 8 }
}; };
}, },
@computed @discourseComputed
trendingSearchDisabledLabel() { trendingSearchDisabledLabel() {
return I18n.t("admin.dashboard.reports.trending_search.disabled", { return I18n.t("admin.dashboard.reports.trending_search.disabled", {
basePath: Discourse.BaseUri basePath: Discourse.BaseUri
@ -107,7 +107,7 @@ export default Controller.extend(PeriodComputationMixin, {
} }
}, },
@computed("startDate", "endDate") @discourseComputed("startDate", "endDate")
filters(startDate, endDate) { filters(startDate, endDate) {
return { startDate, endDate }; return { startDate, endDate };
}, },

View File

@ -1,9 +1,9 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import PeriodComputationMixin from "admin/mixins/period-computation"; import PeriodComputationMixin from "admin/mixins/period-computation";
export default Controller.extend(PeriodComputationMixin, { export default Controller.extend(PeriodComputationMixin, {
@computed @discourseComputed
flagsStatusOptions() { flagsStatusOptions() {
return { return {
table: { table: {
@ -13,7 +13,7 @@ export default Controller.extend(PeriodComputationMixin, {
}; };
}, },
@computed @discourseComputed
userFlaggingRatioOptions() { userFlaggingRatioOptions() {
return { return {
table: { table: {
@ -23,12 +23,12 @@ export default Controller.extend(PeriodComputationMixin, {
}; };
}, },
@computed("startDate", "endDate") @discourseComputed("startDate", "endDate")
filters(startDate, endDate) { filters(startDate, endDate) {
return { startDate, endDate }; return { startDate, endDate };
}, },
@computed("lastWeek", "endDate") @discourseComputed("lastWeek", "endDate")
lastWeekfilters(startDate, endDate) { lastWeekfilters(startDate, endDate) {
return { startDate, endDate }; return { startDate, endDate };
}, },

View File

@ -1,12 +1,13 @@
import discourseComputed from "discourse-common/utils/decorators";
import { debounce } from "@ember/runloop"; import { debounce } from "@ember/runloop";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
const { get } = Ember; const { get } = Ember;
export default Controller.extend({ export default Controller.extend({
filter: null, filter: null,
@computed("model.[]", "filter") @discourseComputed("model.[]", "filter")
filterReports(reports, filter) { filterReports(reports, filter) {
if (filter) { if (filter) {
filter = filter.toLowerCase(); filter = filter.toLowerCase();

View File

@ -1,7 +1,7 @@
import discourseComputed from "discourse-common/utils/decorators";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { setting } from "discourse/lib/computed"; import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
import AdminDashboard from "admin/models/admin-dashboard"; import AdminDashboard from "admin/models/admin-dashboard";
import VersionCheck from "admin/models/version-check"; import VersionCheck from "admin/models/version-check";
@ -13,7 +13,7 @@ export default Controller.extend({
exceptionController: inject("exception"), exceptionController: inject("exception"),
showVersionChecks: setting("version_checks"), showVersionChecks: setting("version_checks"),
@computed("problems.length") @discourseComputed("problems.length")
foundProblems(problemsLength) { foundProblems(problemsLength) {
return this.currentUser.get("admin") && (problemsLength || 0) > 0; return this.currentUser.get("admin") && (problemsLength || 0) > 0;
}, },
@ -77,7 +77,7 @@ export default Controller.extend({
.finally(() => this.set("loadingProblems", false)); .finally(() => this.set("loadingProblems", false));
}, },
@computed("problemsFetchedAt") @discourseComputed("problemsFetchedAt")
problemsTimestamp(problemsFetchedAt) { problemsTimestamp(problemsFetchedAt) {
return moment(problemsFetchedAt) return moment(problemsFetchedAt)
.locale("en") .locale("en")

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
export default Controller.extend({ export default Controller.extend({
@ -7,13 +7,13 @@ export default Controller.extend({
embedding: null, embedding: null,
// show settings if we have at least one created host // show settings if we have at least one created host
@computed("embedding.embeddable_hosts.@each.isCreated") @discourseComputed("embedding.embeddable_hosts.@each.isCreated")
showSecondary() { showSecondary() {
const hosts = this.get("embedding.embeddable_hosts"); const hosts = this.get("embedding.embeddable_hosts");
return hosts.length && hosts.findBy("isCreated"); return hosts.length && hosts.findBy("isCreated");
}, },
@computed("embedding.base_url") @discourseComputed("embedding.base_url")
embeddingCode(baseUrl) { embeddingCode(baseUrl) {
const html = `<div id='discourse-comments'></div> const html = `<div id='discourse-comments'></div>

View File

@ -5,9 +5,9 @@ import Controller from "@ember/controller";
import { exportEntity } from "discourse/lib/export-csv"; import { exportEntity } from "discourse/lib/export-csv";
import { outputExportResult } from "discourse/lib/export-result"; import { outputExportResult } from "discourse/lib/export-result";
import { import {
default as computed, default as discourseComputed,
on on
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
export default Controller.extend({ export default Controller.extend({
model: null, model: null,
@ -15,7 +15,7 @@ export default Controller.extend({
filtersExists: gt("filterCount", 0), filtersExists: gt("filterCount", 0),
userHistoryActions: null, userHistoryActions: null,
@computed("filters.action_name") @discourseComputed("filters.action_name")
actionFilter(name) { actionFilter(name) {
return name ? I18n.t("admin.logs.staff_actions.actions." + name) : null; return name ? I18n.t("admin.logs.staff_actions.actions." + name) : null;
}, },

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({ export default Controller.extend({
@computed @discourseComputed
adminRoutes: function() { adminRoutes: function() {
return this.model return this.model
.map(p => { .map(p => {

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({ export default Controller.extend({
queryParams: ["start_date", "end_date", "filters"], queryParams: ["start_date", "end_date", "filters"],
@ -7,7 +7,7 @@ export default Controller.extend({
end_date: null, end_date: null,
filters: null, filters: null,
@computed("model.type") @discourseComputed("model.type")
reportOptions(type) { reportOptions(type) {
let options = { table: { perPage: 50, limit: 50, formatNumbers: false } }; let options = { table: { perPage: 50, limit: 50, formatNumbers: false } };

View File

@ -1,17 +1,17 @@
import discourseComputed from "discourse-common/utils/decorators";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({ export default Controller.extend({
categoryNameKey: null, categoryNameKey: null,
adminSiteSettings: inject(), adminSiteSettings: inject(),
@computed("adminSiteSettings.visibleSiteSettings", "categoryNameKey") @discourseComputed("adminSiteSettings.visibleSiteSettings", "categoryNameKey")
category(categories, nameKey) { category(categories, nameKey) {
return (categories || []).findBy("nameKey", nameKey); return (categories || []).findBy("nameKey", nameKey);
}, },
@computed("category") @discourseComputed("category")
filteredContent(category) { filteredContent(category) {
return category ? category.siteSettings : []; return category ? category.siteSettings : [];
} }

View File

@ -1,12 +1,12 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content"; import { bufferedProperty } from "discourse/mixins/buffered-content";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(bufferedProperty("siteText"), { export default Controller.extend(bufferedProperty("siteText"), {
saved: false, saved: false,
@computed("buffered.value") @discourseComputed("buffered.value")
saveDisabled(value) { saveDisabled(value) {
return this.siteText.value === value; return this.siteText.value === value;
}, },

View File

@ -1,10 +1,10 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias, sort } from "@ember/object/computed"; import { alias, sort } from "@ember/object/computed";
import { next } from "@ember/runloop"; import { next } from "@ember/runloop";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import GrantBadgeController from "discourse/mixins/grant-badge-controller"; import GrantBadgeController from "discourse/mixins/grant-badge-controller";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(GrantBadgeController, { export default Controller.extend(GrantBadgeController, {
adminUser: inject(), adminUser: inject(),
@ -19,7 +19,7 @@ export default Controller.extend(GrantBadgeController, {
this.badgeSortOrder = ["granted_at:desc"]; this.badgeSortOrder = ["granted_at:desc"];
}, },
@computed("model", "model.[]", "model.expandedBadges.[]") @discourseComputed("model", "model.[]", "model.expandedBadges.[]")
groupedBadges() { groupedBadges() {
const allBadges = this.model; const allBadges = this.model;

View File

@ -6,7 +6,7 @@ import CanCheckEmails from "discourse/mixins/can-check-emails";
import { propertyNotEqual, setting } from "discourse/lib/computed"; import { propertyNotEqual, setting } from "discourse/lib/computed";
import { userPath } from "discourse/lib/url"; import { userPath } from "discourse/lib/url";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { fmt } from "discourse/lib/computed"; import { fmt } from "discourse/lib/computed";
import { htmlSafe } from "@ember/template"; import { htmlSafe } from "@ember/template";
@ -30,12 +30,12 @@ export default Controller.extend(CanCheckEmails, {
"model.can_disable_second_factor" "model.can_disable_second_factor"
), ),
@computed("model.customGroups") @discourseComputed("model.customGroups")
customGroupIds(customGroups) { customGroupIds(customGroups) {
return customGroups.mapBy("id"); return customGroups.mapBy("id");
}, },
@computed("customGroupIdsBuffer", "customGroupIds") @discourseComputed("customGroupIdsBuffer", "customGroupIds")
customGroupsDirty(buffer, original) { customGroupsDirty(buffer, original) {
if (buffer === null) return false; if (buffer === null) return false;
@ -44,7 +44,7 @@ export default Controller.extend(CanCheckEmails, {
: true; : true;
}, },
@computed("model.automaticGroups") @discourseComputed("model.automaticGroups")
automaticGroups(automaticGroups) { automaticGroups(automaticGroups) {
return automaticGroups return automaticGroups
.map(group => { .map(group => {
@ -54,26 +54,30 @@ export default Controller.extend(CanCheckEmails, {
.join(", "); .join(", ");
}, },
@computed("model.associated_accounts") @discourseComputed("model.associated_accounts")
associatedAccountsLoaded(associatedAccounts) { associatedAccountsLoaded(associatedAccounts) {
return typeof associatedAccounts !== "undefined"; return typeof associatedAccounts !== "undefined";
}, },
@computed("model.associated_accounts") @discourseComputed("model.associated_accounts")
associatedAccounts(associatedAccounts) { associatedAccounts(associatedAccounts) {
return associatedAccounts return associatedAccounts
.map(provider => `${provider.name} (${provider.description})`) .map(provider => `${provider.name} (${provider.description})`)
.join(", "); .join(", ");
}, },
@computed("model.user_fields.[]") @discourseComputed("model.user_fields.[]")
userFields(userFields) { userFields(userFields) {
return this.site.collectUserFields(userFields); return this.site.collectUserFields(userFields);
}, },
preferencesPath: fmt("model.username_lower", userPath("%@/preferences")), preferencesPath: fmt("model.username_lower", userPath("%@/preferences")),
@computed("model.can_delete_all_posts", "model.staff", "model.post_count") @discourseComputed(
"model.can_delete_all_posts",
"model.staff",
"model.post_count"
)
deleteAllPostsExplanation(canDeleteAllPosts, staff, postCount) { deleteAllPostsExplanation(canDeleteAllPosts, staff, postCount) {
if (canDeleteAllPosts) { if (canDeleteAllPosts) {
return null; return null;
@ -93,7 +97,7 @@ export default Controller.extend(CanCheckEmails, {
} }
}, },
@computed("model.canBeDeleted", "model.staff") @discourseComputed("model.canBeDeleted", "model.staff")
deleteExplanation(canBeDeleted, staff) { deleteExplanation(canBeDeleted, staff) {
if (canBeDeleted) { if (canBeDeleted) {
return null; return null;

View File

@ -1,9 +1,9 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import debounce from "discourse/lib/debounce"; import debounce from "discourse/lib/debounce";
import { i18n } from "discourse/lib/computed"; import { i18n } from "discourse/lib/computed";
import AdminUser from "admin/models/admin-user"; import AdminUser from "admin/models/admin-user";
import CanCheckEmails from "discourse/mixins/can-check-emails"; import CanCheckEmails from "discourse/mixins/can-check-emails";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend(CanCheckEmails, { export default Controller.extend(CanCheckEmails, {
model: null, model: null,
@ -24,7 +24,7 @@ export default Controller.extend(CanCheckEmails, {
this._canLoadMore = true; this._canLoadMore = true;
}, },
@computed("query") @discourseComputed("query")
title(query) { title(query) {
return I18n.t("admin.users.titles." + query); return I18n.t("admin.users.titles." + query);
}, },

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import { or } from "@ember/object/computed"; import { or } from "@ember/object/computed";
import { schedule } from "@ember/runloop"; import { schedule } from "@ember/runloop";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import WatchedWord from "admin/models/watched-word"; import WatchedWord from "admin/models/watched-word";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { fmt } from "discourse/lib/computed"; import { fmt } from "discourse/lib/computed";
@ -27,22 +27,22 @@ export default Controller.extend({
); );
}, },
@computed("actionNameKey", "adminWatchedWords.model") @discourseComputed("actionNameKey", "adminWatchedWords.model")
currentAction(actionName) { currentAction(actionName) {
return this.findAction(actionName); return this.findAction(actionName);
}, },
@computed("currentAction.words.[]", "adminWatchedWords.model") @discourseComputed("currentAction.words.[]", "adminWatchedWords.model")
filteredContent(words) { filteredContent(words) {
return words || []; return words || [];
}, },
@computed("actionNameKey") @discourseComputed("actionNameKey")
actionDescription(actionNameKey) { actionDescription(actionNameKey) {
return I18n.t("admin.watched_words.action_descriptions." + actionNameKey); return I18n.t("admin.watched_words.action_descriptions." + actionNameKey);
}, },
@computed("currentAction.count") @discourseComputed("currentAction.count")
wordCount(count) { wordCount(count) {
return count || 0; return count || 0;
}, },

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import computed from "ember-addons/ember-computed-decorators";
export default Controller.extend({ export default Controller.extend({
pingDisabled: false, pingDisabled: false,
@ -14,7 +14,7 @@ export default Controller.extend({
this.incomingEventIds = []; this.incomingEventIds = [];
}, },
@computed("incomingCount") @discourseComputed("incomingCount")
hasIncoming(incomingCount) { hasIncoming(incomingCount) {
return incomingCount > 0; return incomingCount > 0;
}, },

View File

@ -1,10 +1,10 @@
import discourseComputed from "discourse-common/utils/decorators";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import { alias } from "@ember/object/computed"; import { alias } from "@ember/object/computed";
import { inject } from "@ember/controller"; import { inject } from "@ember/controller";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { extractDomainFromUrl } from "discourse/lib/utilities"; import { extractDomainFromUrl } from "discourse/lib/utilities";
import computed from "ember-addons/ember-computed-decorators";
import InputValidation from "discourse/models/input-validation"; import InputValidation from "discourse/models/input-validation";
export default Controller.extend({ export default Controller.extend({
@ -13,12 +13,12 @@ export default Controller.extend({
defaultEventTypes: alias("adminWebHooks.defaultEventTypes"), defaultEventTypes: alias("adminWebHooks.defaultEventTypes"),
contentTypes: alias("adminWebHooks.contentTypes"), contentTypes: alias("adminWebHooks.contentTypes"),
@computed @discourseComputed
showTagsFilter() { showTagsFilter() {
return this.siteSettings.tagging_enabled; return this.siteSettings.tagging_enabled;
}, },
@computed("model.isSaving", "saved", "saveButtonDisabled") @discourseComputed("model.isSaving", "saved", "saveButtonDisabled")
savingStatus(isSaving, saved, saveButtonDisabled) { savingStatus(isSaving, saved, saveButtonDisabled) {
if (isSaving) { if (isSaving) {
return I18n.t("saving"); return I18n.t("saving");
@ -30,14 +30,14 @@ export default Controller.extend({
return ""; return "";
}, },
@computed("model.isNew") @discourseComputed("model.isNew")
saveButtonText(isNew) { saveButtonText(isNew) {
return isNew return isNew
? I18n.t("admin.web_hooks.create") ? I18n.t("admin.web_hooks.create")
: I18n.t("admin.web_hooks.save"); : I18n.t("admin.web_hooks.save");
}, },
@computed("model.secret") @discourseComputed("model.secret")
secretValidation(secret) { secretValidation(secret) {
if (!isEmpty(secret)) { if (!isEmpty(secret)) {
if (secret.indexOf(" ") !== -1) { if (secret.indexOf(" ") !== -1) {
@ -56,7 +56,7 @@ export default Controller.extend({
} }
}, },
@computed("model.wildcard_web_hook", "model.web_hook_event_types.[]") @discourseComputed("model.wildcard_web_hook", "model.web_hook_event_types.[]")
eventTypeValidation(isWildcard, eventTypes) { eventTypeValidation(isWildcard, eventTypes) {
if (!isWildcard && isEmpty(eventTypes)) { if (!isWildcard && isEmpty(eventTypes)) {
return InputValidation.create({ return InputValidation.create({
@ -66,7 +66,7 @@ export default Controller.extend({
} }
}, },
@computed( @discourseComputed(
"model.isSaving", "model.isSaving",
"secretValidation", "secretValidation",
"eventTypeValidation", "eventTypeValidation",

View File

@ -1,22 +1,22 @@
import discourseComputed from "discourse-common/utils/decorators";
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import { dasherize } from "@ember/string"; import { dasherize } from "@ember/string";
export default Controller.extend({ export default Controller.extend({
router: service(), router: service(),
@computed("siteSettings.enable_group_directory") @discourseComputed("siteSettings.enable_group_directory")
showGroups(enableGroupDirectory) { showGroups(enableGroupDirectory) {
return !enableGroupDirectory; return !enableGroupDirectory;
}, },
@computed("siteSettings.enable_badges") @discourseComputed("siteSettings.enable_badges")
showBadges(enableBadges) { showBadges(enableBadges) {
return this.currentUser.get("admin") && enableBadges; return this.currentUser.get("admin") && enableBadges;
}, },
@computed("router._router.currentPath") @discourseComputed("router._router.currentPath")
adminContentsClassName(currentPath) { adminContentsClassName(currentPath) {
let cssClasses = currentPath let cssClasses = currentPath
.split(".") .split(".")

View File

@ -5,9 +5,9 @@ import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality"; import ModalFunctionality from "discourse/mixins/modal-functionality";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { import {
default as computed, default as discourseComputed,
observes observes
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
const THEME_FIELD_VARIABLE_TYPE_IDS = [2, 3, 4]; const THEME_FIELD_VARIABLE_TYPE_IDS = [2, 3, 4];
@ -69,7 +69,7 @@ export default Controller.extend(ModalFunctionality, {
enabled: and("nameValid", "fileSelected"), enabled: and("nameValid", "fileSelected"),
disabled: not("enabled"), disabled: not("enabled"),
@computed("name", "adminCustomizeThemesShow.model.theme_fields") @discourseComputed("name", "adminCustomizeThemesShow.model.theme_fields")
errorMessage(name, themeFields) { errorMessage(name, themeFields) {
if (name) { if (name) {
if (!name.match(/^[a-z_][a-z0-9_-]*$/i)) { if (!name.match(/^[a-z_][a-z0-9_-]*$/i)) {
@ -94,7 +94,7 @@ export default Controller.extend(ModalFunctionality, {
return null; return null;
}, },
@computed("errorMessage") @discourseComputed("errorMessage")
nameValid(errorMessage) { nameValid(errorMessage) {
return null === errorMessage; return null === errorMessage;
}, },

View File

@ -1,6 +1,6 @@
import { alias, map } from "@ember/object/computed"; import { alias, map } from "@ember/object/computed";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { escapeExpression } from "discourse/lib/utilities"; import { escapeExpression } from "discourse/lib/utilities";
export default Controller.extend({ export default Controller.extend({
@ -8,7 +8,7 @@ export default Controller.extend({
errors: alias("model.errors"), errors: alias("model.errors"),
count: alias("model.grant_count"), count: alias("model.grant_count"),
@computed("count", "sample.length") @discourseComputed("count", "sample.length")
countWarning(count, sampleLength) { countWarning(count, sampleLength) {
if (count <= 10) { if (count <= 10) {
return sampleLength !== count; return sampleLength !== count;
@ -17,12 +17,12 @@ export default Controller.extend({
} }
}, },
@computed("model.query_plan") @discourseComputed("model.query_plan")
hasQueryPlan(queryPlan) { hasQueryPlan(queryPlan) {
return !!queryPlan; return !!queryPlan;
}, },
@computed("model.query_plan") @discourseComputed("model.query_plan")
queryPlanHtml(queryPlan) { queryPlanHtml(queryPlan) {
let output = `<pre class="badge-query-plan">`; let output = `<pre class="badge-query-plan">`;

View File

@ -1,7 +1,7 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import ModalFunctionality from "discourse/mixins/modal-functionality"; import ModalFunctionality from "discourse/mixins/modal-functionality";
import { observes } from "ember-addons/ember-computed-decorators"; import { observes } from "discourse-common/utils/decorators";
export default Controller.extend(ModalFunctionality, { export default Controller.extend(ModalFunctionality, {
@observes("model") @observes("model")

View File

@ -1,12 +1,12 @@
import discourseComputed from "discourse-common/utils/decorators";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import ModalFunctionality from "discourse/mixins/modal-functionality"; import ModalFunctionality from "discourse/mixins/modal-functionality";
import IncomingEmail from "admin/models/incoming-email"; import IncomingEmail from "admin/models/incoming-email";
import computed from "ember-addons/ember-computed-decorators";
import { longDate } from "discourse/lib/formatter"; import { longDate } from "discourse/lib/formatter";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
export default Controller.extend(ModalFunctionality, { export default Controller.extend(ModalFunctionality, {
@computed("model.date") @discourseComputed("model.date")
date(d) { date(d) {
return longDate(d); return longDate(d);
}, },

View File

@ -5,9 +5,9 @@ import ModalFunctionality from "discourse/mixins/modal-functionality";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { import {
default as computed, default as discourseComputed,
observes observes
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
import { THEMES, COMPONENTS } from "admin/models/theme"; import { THEMES, COMPONENTS } from "admin/models/theme";
import { POPULAR_THEMES } from "discourse-common/helpers/popular-themes"; import { POPULAR_THEMES } from "discourse-common/helpers/popular-themes";
import { set } from "@ember/object"; import { set } from "@ember/object";
@ -43,7 +43,7 @@ export default Controller.extend(ModalFunctionality, {
]; ];
}, },
@computed("themesController.installedThemes") @discourseComputed("themesController.installedThemes")
themes(installedThemes) { themes(installedThemes) {
return POPULAR_THEMES.map(t => { return POPULAR_THEMES.map(t => {
if (installedThemes.includes(t.name)) { if (installedThemes.includes(t.name)) {
@ -53,7 +53,7 @@ export default Controller.extend(ModalFunctionality, {
}); });
}, },
@computed( @discourseComputed(
"loading", "loading",
"remote", "remote",
"uploadUrl", "uploadUrl",
@ -102,12 +102,12 @@ export default Controller.extend(ModalFunctionality, {
} }
}, },
@computed("name") @discourseComputed("name")
nameTooShort(name) { nameTooShort(name) {
return !name || name.length < MIN_NAME_LENGTH; return !name || name.length < MIN_NAME_LENGTH;
}, },
@computed("component") @discourseComputed("component")
placeholder(component) { placeholder(component) {
if (component) { if (component) {
return I18n.t("admin.customize.theme.component_name"); return I18n.t("admin.customize.theme.component_name");
@ -116,14 +116,14 @@ export default Controller.extend(ModalFunctionality, {
} }
}, },
@computed("selection") @discourseComputed("selection")
submitLabel(selection) { submitLabel(selection) {
return `admin.customize.theme.${ return `admin.customize.theme.${
selection === "create" ? "create" : "install" selection === "create" ? "create" : "install"
}`; }`;
}, },
@computed("privateChecked", "checkPrivate", "publicKey") @discourseComputed("privateChecked", "checkPrivate", "publicKey")
showPublicKey(privateChecked, checkPrivate, publicKey) { showPublicKey(privateChecked, checkPrivate, publicKey) {
return privateChecked && checkPrivate && publicKey; return privateChecked && checkPrivate && publicKey;
}, },

View File

@ -1,6 +1,6 @@
import discourseComputed from "discourse-common/utils/decorators";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import PenaltyController from "admin/mixins/penalty-controller"; import PenaltyController from "admin/mixins/penalty-controller";
export default Controller.extend(PenaltyController, { export default Controller.extend(PenaltyController, {
@ -12,7 +12,7 @@ export default Controller.extend(PenaltyController, {
this.setProperties({ silenceUntil: null, silencing: false }); this.setProperties({ silenceUntil: null, silencing: false });
}, },
@computed("silenceUntil", "reason", "silencing") @discourseComputed("silenceUntil", "reason", "silencing")
submitDisabled(silenceUntil, reason, silencing) { submitDisabled(silenceUntil, reason, silencing) {
return silencing || isEmpty(silenceUntil) || !reason || reason.length < 1; return silencing || isEmpty(silenceUntil) || !reason || reason.length < 1;
}, },

View File

@ -1,6 +1,6 @@
import discourseComputed from "discourse-common/utils/decorators";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import PenaltyController from "admin/mixins/penalty-controller"; import PenaltyController from "admin/mixins/penalty-controller";
export default Controller.extend(PenaltyController, { export default Controller.extend(PenaltyController, {
@ -12,7 +12,7 @@ export default Controller.extend(PenaltyController, {
this.setProperties({ suspendUntil: null, suspending: false }); this.setProperties({ suspendUntil: null, suspending: false });
}, },
@computed("suspendUntil", "reason", "suspending") @discourseComputed("suspendUntil", "reason", "suspending")
submitDisabled(suspendUntil, reason, suspending) { submitDisabled(suspendUntil, reason, suspending) {
return suspending || isEmpty(suspendUntil) || !reason || reason.length < 1; return suspending || isEmpty(suspendUntil) || !reason || reason.length < 1;
}, },

View File

@ -1,5 +1,5 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { on, observes } from "ember-addons/ember-computed-decorators"; import { on, observes } from "discourse-common/utils/decorators";
import ModalFunctionality from "discourse/mixins/modal-functionality"; import ModalFunctionality from "discourse/mixins/modal-functionality";
export default Controller.extend(ModalFunctionality, { export default Controller.extend(ModalFunctionality, {

View File

@ -1,9 +1,9 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import ModalFunctionality from "discourse/mixins/modal-functionality"; import ModalFunctionality from "discourse/mixins/modal-functionality";
export default Controller.extend(ModalFunctionality, { export default Controller.extend(ModalFunctionality, {
@computed("value", "model.compiledRegularExpression") @discourseComputed("value", "model.compiledRegularExpression")
matches(value, regexpString) { matches(value, regexpString) {
if (!value || !regexpString) return; if (!value || !regexpString) return;
let censorRegexp = new RegExp(regexpString, "ig"); let censorRegexp = new RegExp(regexpString, "ig");

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import DiscourseURL from "discourse/lib/url"; import DiscourseURL from "discourse/lib/url";
import computed from "ember-addons/ember-computed-decorators";
import Mixin from "@ember/object/mixin"; import Mixin from "@ember/object/mixin";
export default Mixin.create({ export default Mixin.create({
@ -12,7 +12,7 @@ export default Mixin.create({
this.availablePeriods = ["yearly", "quarterly", "monthly", "weekly"]; this.availablePeriods = ["yearly", "quarterly", "monthly", "weekly"];
}, },
@computed("period") @discourseComputed("period")
startDate(period) { startDate(period) {
let fullDay = moment() let fullDay = moment()
.locale("en") .locale("en")
@ -37,7 +37,7 @@ export default Mixin.create({
} }
}, },
@computed() @discourseComputed()
lastWeek() { lastWeek() {
return moment() return moment()
.locale("en") .locale("en")
@ -46,7 +46,7 @@ export default Mixin.create({
.subtract(1, "week"); .subtract(1, "week");
}, },
@computed() @discourseComputed()
lastMonth() { lastMonth() {
return moment() return moment()
.locale("en") .locale("en")
@ -55,7 +55,7 @@ export default Mixin.create({
.subtract(1, "month"); .subtract(1, "month");
}, },
@computed() @discourseComputed()
endDate() { endDate() {
return moment() return moment()
.locale("en") .locale("en")
@ -64,7 +64,7 @@ export default Mixin.create({
.endOf("day"); .endOf("day");
}, },
@computed() @discourseComputed()
today() { today() {
return moment() return moment()
.locale("en") .locale("en")

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import { alias, oneWay } from "@ember/object/computed"; import { alias, oneWay } from "@ember/object/computed";
import computed from "ember-addons/ember-computed-decorators";
import { categoryLinkHTML } from "discourse/helpers/category-link"; import { categoryLinkHTML } from "discourse/helpers/category-link";
import { on } from "@ember/object/evented"; import { on } from "@ember/object/evented";
import Mixin from "@ember/object/mixin"; import Mixin from "@ember/object/mixin";
@ -32,7 +32,7 @@ export default Mixin.create({
validationMessage: null, validationMessage: null,
isSecret: oneWay("setting.secret"), isSecret: oneWay("setting.secret"),
@computed("buffered.value", "setting.value") @discourseComputed("buffered.value", "setting.value")
dirty(bufferVal, settingVal) { dirty(bufferVal, settingVal) {
if (bufferVal === null || bufferVal === undefined) bufferVal = ""; if (bufferVal === null || bufferVal === undefined) bufferVal = "";
if (settingVal === null || settingVal === undefined) settingVal = ""; if (settingVal === null || settingVal === undefined) settingVal = "";
@ -40,7 +40,7 @@ export default Mixin.create({
return bufferVal.toString() !== settingVal.toString(); return bufferVal.toString() !== settingVal.toString();
}, },
@computed("setting", "buffered.value") @discourseComputed("setting", "buffered.value")
preview(setting, value) { preview(setting, value) {
// A bit hacky, but allows us to use helpers // A bit hacky, but allows us to use helpers
if (setting.get("setting") === "category_style") { if (setting.get("setting") === "category_style") {
@ -62,22 +62,22 @@ export default Mixin.create({
} }
}, },
@computed("componentType") @discourseComputed("componentType")
typeClass(componentType) { typeClass(componentType) {
return componentType.replace(/\_/g, "-"); return componentType.replace(/\_/g, "-");
}, },
@computed("setting.setting") @discourseComputed("setting.setting")
settingName(setting) { settingName(setting) {
return setting.replace(/\_/g, " "); return setting.replace(/\_/g, " ");
}, },
@computed("type") @discourseComputed("type")
componentType(type) { componentType(type) {
return CUSTOM_TYPES.indexOf(type) !== -1 ? type : "string"; return CUSTOM_TYPES.indexOf(type) !== -1 ? type : "string";
}, },
@computed("setting") @discourseComputed("setting")
type(setting) { type(setting) {
if (setting.type === "list" && setting.list_type) { if (setting.type === "list" && setting.list_type) {
return `${setting.list_type}_list`; return `${setting.list_type}_list`;
@ -86,12 +86,12 @@ export default Mixin.create({
return setting.type; return setting.type;
}, },
@computed("typeClass") @discourseComputed("typeClass")
componentName(typeClass) { componentName(typeClass) {
return "site-settings/" + typeClass; return "site-settings/" + typeClass;
}, },
@computed("setting.default", "buffered.value") @discourseComputed("setting.default", "buffered.value")
overridden(settingDefault, bufferedValue) { overridden(settingDefault, bufferedValue) {
return settingDefault !== bufferedValue; return settingDefault !== bufferedValue;
}, },

View File

@ -1,8 +1,8 @@
import computed from "ember-addons/ember-computed-decorators"; import discourseComputed from "discourse-common/utils/decorators";
import Mixin from "@ember/object/mixin"; import Mixin from "@ember/object/mixin";
export default Mixin.create({ export default Mixin.create({
@computed("value", "default") @discourseComputed("value", "default")
overridden(val, defaultVal) { overridden(val, defaultVal) {
if (val === null) val = ""; if (val === null) val = "";
if (defaultVal === null) defaultVal = ""; if (defaultVal === null) defaultVal = "";
@ -10,7 +10,7 @@ export default Mixin.create({
return val.toString() !== defaultVal.toString(); return val.toString() !== defaultVal.toString();
}, },
@computed("valid_values") @discourseComputed("valid_values")
validValues(validValues) { validValues(validValues) {
const vals = [], const vals = [],
translateNames = this.translate_names; translateNames = this.translate_names;
@ -25,7 +25,7 @@ export default Mixin.create({
return vals; return vals;
}, },
@computed("valid_values") @discourseComputed("valid_values")
allowsNone(validValues) { allowsNone(validValues) {
if (validValues && validValues.indexOf("") >= 0) { if (validValues && validValues.indexOf("") >= 0) {
return "admin.settings.none"; return "admin.settings.none";

View File

@ -1,7 +1,7 @@
import discourseComputed from "discourse-common/utils/decorators";
import { filter, or, gt, lt, not } from "@ember/object/computed"; import { filter, or, gt, lt, not } from "@ember/object/computed";
import { iconHTML } from "discourse-common/lib/icon-library"; import { iconHTML } from "discourse-common/lib/icon-library";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import computed from "ember-addons/ember-computed-decorators";
import { propertyNotEqual } from "discourse/lib/computed"; import { propertyNotEqual } from "discourse/lib/computed";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import Group from "discourse/models/group"; import Group from "discourse/models/group";
@ -17,7 +17,7 @@ const AdminUser = Discourse.User.extend({
canViewProfile: or("active", "staged"), canViewProfile: or("active", "staged"),
@computed("bounce_score", "reset_bounce_score_after") @discourseComputed("bounce_score", "reset_bounce_score_after")
bounceScore(bounce_score, reset_bounce_score_after) { bounceScore(bounce_score, reset_bounce_score_after) {
if (bounce_score > 0) { if (bounce_score > 0) {
return `${bounce_score} - ${moment(reset_bounce_score_after).format( return `${bounce_score} - ${moment(reset_bounce_score_after).format(
@ -28,7 +28,7 @@ const AdminUser = Discourse.User.extend({
} }
}, },
@computed("bounce_score") @discourseComputed("bounce_score")
bounceScoreExplanation(bounce_score) { bounceScoreExplanation(bounce_score) {
if (bounce_score === 0) { if (bounce_score === 0) {
return I18n.t("admin.user.bounce_score_explanation.none"); return I18n.t("admin.user.bounce_score_explanation.none");
@ -39,7 +39,7 @@ const AdminUser = Discourse.User.extend({
} }
}, },
@computed @discourseComputed
bounceLink() { bounceLink() {
return Discourse.getURL("/admin/email/bounced"); return Discourse.getURL("/admin/email/bounced");
}, },
@ -278,7 +278,7 @@ const AdminUser = Discourse.User.extend({
canSuspend: not("staff"), canSuspend: not("staff"),
@computed("suspended_till", "suspended_at") @discourseComputed("suspended_till", "suspended_at")
suspendDuration(suspendedTill, suspendedAt) { suspendDuration(suspendedTill, suspendedAt) {
suspendedAt = moment(suspendedAt); suspendedAt = moment(suspendedAt);
suspendedTill = moment(suspendedTill); suspendedTill = moment(suspendedTill);
@ -513,20 +513,20 @@ const AdminUser = Discourse.User.extend({
}); });
}, },
@computed("tl3_requirements") @discourseComputed("tl3_requirements")
tl3Requirements(requirements) { tl3Requirements(requirements) {
if (requirements) { if (requirements) {
return this.store.createRecord("tl3Requirements", requirements); return this.store.createRecord("tl3Requirements", requirements);
} }
}, },
@computed("suspended_by") @discourseComputed("suspended_by")
suspendedBy: wrapAdmin, suspendedBy: wrapAdmin,
@computed("silenced_by") @discourseComputed("silenced_by")
silencedBy: wrapAdmin, silencedBy: wrapAdmin,
@computed("approved_by") @discourseComputed("approved_by")
approvedBy: wrapAdmin, approvedBy: wrapAdmin,
_formatError(event) { _formatError(event) {

View File

@ -1,7 +1,7 @@
import discourseComputed from "discourse-common/utils/decorators";
import AdminUser from "admin/models/admin-user"; import AdminUser from "admin/models/admin-user";
import RestModel from "discourse/models/rest"; import RestModel from "discourse/models/rest";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import computed from "ember-addons/ember-computed-decorators";
const ApiKey = RestModel.extend({ const ApiKey = RestModel.extend({
user: Ember.computed("_user", { user: Ember.computed("_user", {
@ -18,12 +18,12 @@ const ApiKey = RestModel.extend({
} }
}), }),
@computed("key") @discourseComputed("key")
shortKey(key) { shortKey(key) {
return `${key.substring(0, 4)}...`; return `${key.substring(0, 4)}...`;
}, },
@computed("description") @discourseComputed("description")
shortDescription(description) { shortDescription(description) {
if (!description || description.length < 40) return description; if (!description || description.length < 40) return description;
return `${description.substring(0, 40)}...`; return `${description.substring(0, 40)}...`;
@ -45,7 +45,7 @@ const ApiKey = RestModel.extend({
return this.getProperties("description", "username"); return this.getProperties("description", "username");
}, },
@computed() @discourseComputed()
basePath() { basePath() {
return this.store return this.store
.adapterFor("api-key") .adapterFor("api-key")

View File

@ -1,10 +1,10 @@
import discourseComputed from "discourse-common/utils/decorators";
import { not } from "@ember/object/computed"; import { not } from "@ember/object/computed";
import computed from "ember-addons/ember-computed-decorators";
export default Discourse.Model.extend({ export default Discourse.Model.extend({
restoreDisabled: not("restoreEnabled"), restoreDisabled: not("restoreEnabled"),
@computed("allowRestore", "isOperationRunning") @discourseComputed("allowRestore", "isOperationRunning")
restoreEnabled(allowRestore, isOperationRunning) { restoreEnabled(allowRestore, isOperationRunning) {
return allowRestore && !isOperationRunning; return allowRestore && !isOperationRunning;
} }

View File

@ -1,8 +1,8 @@
import { import {
default as computed, default as discourseComputed,
observes, observes,
on on
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
import { propertyNotEqual } from "discourse/lib/computed"; import { propertyNotEqual } from "discourse/lib/computed";
const ColorSchemeColor = Discourse.Model.extend({ const ColorSchemeColor = Discourse.Model.extend({
@ -15,7 +15,7 @@ const ColorSchemeColor = Discourse.Model.extend({
}, },
// Whether value has changed since it was last saved. // Whether value has changed since it was last saved.
@computed("hex") @discourseComputed("hex")
changed(hex) { changed(hex) {
if (!this.originals) return false; if (!this.originals) return false;
if (hex !== this.originals.hex) return true; if (hex !== this.originals.hex) return true;
@ -27,7 +27,7 @@ const ColorSchemeColor = Discourse.Model.extend({
overridden: propertyNotEqual("hex", "default_hex"), overridden: propertyNotEqual("hex", "default_hex"),
// Whether the saved value is different than Discourse's default color scheme. // Whether the saved value is different than Discourse's default color scheme.
@computed("default_hex", "hex") @discourseComputed("default_hex", "hex")
savedIsOverriden(defaultHex) { savedIsOverriden(defaultHex) {
return this.originals.hex !== defaultHex; return this.originals.hex !== defaultHex;
}, },
@ -42,7 +42,7 @@ const ColorSchemeColor = Discourse.Model.extend({
} }
}, },
@computed("name") @discourseComputed("name")
translatedName(name) { translatedName(name) {
if (!this.is_advanced) { if (!this.is_advanced) {
return I18n.t(`admin.customize.colors.${name}.name`); return I18n.t(`admin.customize.colors.${name}.name`);
@ -51,7 +51,7 @@ const ColorSchemeColor = Discourse.Model.extend({
} }
}, },
@computed("name") @discourseComputed("name")
description(name) { description(name) {
if (!this.is_advanced) { if (!this.is_advanced) {
return I18n.t(`admin.customize.colors.${name}.description`); return I18n.t(`admin.customize.colors.${name}.description`);
@ -66,7 +66,7 @@ const ColorSchemeColor = Discourse.Model.extend({
@property brightness @property brightness
**/ **/
@computed("hex") @discourseComputed("hex")
brightness(hex) { brightness(hex) {
if (hex.length === 6 || hex.length === 3) { if (hex.length === 6 || hex.length === 3) {
if (hex.length === 3) { if (hex.length === 3) {
@ -94,7 +94,7 @@ const ColorSchemeColor = Discourse.Model.extend({
} }
}, },
@computed("hex") @discourseComputed("hex")
valid(hex) { valid(hex) {
return hex.match(/^([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/) !== null; return hex.match(/^([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/) !== null;
} }

View File

@ -1,7 +1,7 @@
import discourseComputed from "discourse-common/utils/decorators";
import { not } from "@ember/object/computed"; import { not } from "@ember/object/computed";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import ColorSchemeColor from "admin/models/color-scheme-color"; import ColorSchemeColor from "admin/models/color-scheme-color";
import computed from "ember-addons/ember-computed-decorators";
const ColorScheme = Discourse.Model.extend(Ember.Copyable, { const ColorScheme = Discourse.Model.extend(Ember.Copyable, {
init() { init() {
@ -10,7 +10,7 @@ const ColorScheme = Discourse.Model.extend(Ember.Copyable, {
this.startTrackingChanges(); this.startTrackingChanges();
}, },
@computed @discourseComputed
description() { description() {
return "" + this.name; return "" + this.name;
}, },
@ -42,7 +42,7 @@ const ColorScheme = Discourse.Model.extend(Ember.Copyable, {
return newScheme; return newScheme;
}, },
@computed("name", "colors.@each.changed", "saving") @discourseComputed("name", "colors.@each.changed", "saving")
changed(name) { changed(name) {
if (!this.originals) return false; if (!this.originals) return false;
if (this.originals.name !== name) return true; if (this.originals.name !== name) return true;
@ -51,7 +51,7 @@ const ColorScheme = Discourse.Model.extend(Ember.Copyable, {
return false; return false;
}, },
@computed("changed") @discourseComputed("changed")
disableSave(changed) { disableSave(changed) {
if (this.theme_id) { if (this.theme_id) {
return false; return false;

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import RestModel from "discourse/models/rest"; import RestModel from "discourse/models/rest";
import computed from "ember-addons/ember-computed-decorators";
export default RestModel.extend({ export default RestModel.extend({
@computed("id") @discourseComputed("id")
name(id) { name(id) {
return I18n.t(`admin.flags.summary.action_type_${id}`, { count: 1 }); return I18n.t(`admin.flags.summary.action_type_${id}`, { count: 1 });
} }

View File

@ -1,3 +1,4 @@
import discourseComputed from "discourse-common/utils/decorators";
import { makeArray } from "discourse-common/lib/helpers"; import { makeArray } from "discourse-common/lib/helpers";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import EmberObject from "@ember/object"; import EmberObject from "@ember/object";
@ -9,7 +10,6 @@ import {
formatUsername, formatUsername,
toNumber toNumber
} from "discourse/lib/utilities"; } from "discourse/lib/utilities";
import computed from "ember-addons/ember-computed-decorators";
import { number, durationTiny } from "discourse/lib/formatter"; import { number, durationTiny } from "discourse/lib/formatter";
import { renderAvatar } from "discourse/helpers/user-avatar"; import { renderAvatar } from "discourse/helpers/user-avatar";
@ -22,12 +22,12 @@ const Report = Discourse.Model.extend({
percent: false, percent: false,
higher_is_better: true, higher_is_better: true,
@computed("modes") @discourseComputed("modes")
isTable(modes) { isTable(modes) {
return modes.some(mode => mode === "table"); return modes.some(mode => mode === "table");
}, },
@computed("type", "start_date", "end_date") @discourseComputed("type", "start_date", "end_date")
reportUrl(type, start_date, end_date) { reportUrl(type, start_date, end_date) {
start_date = moment start_date = moment
.utc(start_date) .utc(start_date)
@ -83,32 +83,32 @@ const Report = Discourse.Model.extend({
} }
}, },
@computed("data", "average") @discourseComputed("data", "average")
todayCount() { todayCount() {
return this.valueAt(0); return this.valueAt(0);
}, },
@computed("data", "average") @discourseComputed("data", "average")
yesterdayCount() { yesterdayCount() {
return this.valueAt(1); return this.valueAt(1);
}, },
@computed("data", "average") @discourseComputed("data", "average")
sevenDaysAgoCount() { sevenDaysAgoCount() {
return this.valueAt(7); return this.valueAt(7);
}, },
@computed("data", "average") @discourseComputed("data", "average")
thirtyDaysAgoCount() { thirtyDaysAgoCount() {
return this.valueAt(30); return this.valueAt(30);
}, },
@computed("data", "average") @discourseComputed("data", "average")
lastSevenDaysCount() { lastSevenDaysCount() {
return this.averageCount(7, this.valueFor(1, 7)); return this.averageCount(7, this.valueFor(1, 7));
}, },
@computed("data", "average") @discourseComputed("data", "average")
lastThirtyDaysCount() { lastThirtyDaysCount() {
return this.averageCount(30, this.valueFor(1, 30)); return this.averageCount(30, this.valueFor(1, 30));
}, },
@ -117,12 +117,12 @@ const Report = Discourse.Model.extend({
return this.average ? value / count : value; return this.average ? value / count : value;
}, },
@computed("yesterdayCount", "higher_is_better") @discourseComputed("yesterdayCount", "higher_is_better")
yesterdayTrend(yesterdayCount, higherIsBetter) { yesterdayTrend(yesterdayCount, higherIsBetter) {
return this._computeTrend(this.valueAt(2), yesterdayCount, higherIsBetter); return this._computeTrend(this.valueAt(2), yesterdayCount, higherIsBetter);
}, },
@computed("lastSevenDaysCount", "higher_is_better") @discourseComputed("lastSevenDaysCount", "higher_is_better")
sevenDaysTrend(lastSevenDaysCount, higherIsBetter) { sevenDaysTrend(lastSevenDaysCount, higherIsBetter) {
return this._computeTrend( return this._computeTrend(
this.valueFor(8, 14), this.valueFor(8, 14),
@ -131,50 +131,55 @@ const Report = Discourse.Model.extend({
); );
}, },
@computed("data") @discourseComputed("data")
currentTotal(data) { currentTotal(data) {
return data.reduce((cur, pair) => cur + pair.y, 0); return data.reduce((cur, pair) => cur + pair.y, 0);
}, },
@computed("data", "currentTotal") @discourseComputed("data", "currentTotal")
currentAverage(data, total) { currentAverage(data, total) {
return makeArray(data).length === 0 return makeArray(data).length === 0
? 0 ? 0
: parseFloat((total / parseFloat(data.length)).toFixed(1)); : parseFloat((total / parseFloat(data.length)).toFixed(1));
}, },
@computed("trend", "higher_is_better") @discourseComputed("trend", "higher_is_better")
trendIcon(trend, higherIsBetter) { trendIcon(trend, higherIsBetter) {
return this._iconForTrend(trend, higherIsBetter); return this._iconForTrend(trend, higherIsBetter);
}, },
@computed("sevenDaysTrend", "higher_is_better") @discourseComputed("sevenDaysTrend", "higher_is_better")
sevenDaysTrendIcon(sevenDaysTrend, higherIsBetter) { sevenDaysTrendIcon(sevenDaysTrend, higherIsBetter) {
return this._iconForTrend(sevenDaysTrend, higherIsBetter); return this._iconForTrend(sevenDaysTrend, higherIsBetter);
}, },
@computed("thirtyDaysTrend", "higher_is_better") @discourseComputed("thirtyDaysTrend", "higher_is_better")
thirtyDaysTrendIcon(thirtyDaysTrend, higherIsBetter) { thirtyDaysTrendIcon(thirtyDaysTrend, higherIsBetter) {
return this._iconForTrend(thirtyDaysTrend, higherIsBetter); return this._iconForTrend(thirtyDaysTrend, higherIsBetter);
}, },
@computed("yesterdayTrend", "higher_is_better") @discourseComputed("yesterdayTrend", "higher_is_better")
yesterdayTrendIcon(yesterdayTrend, higherIsBetter) { yesterdayTrendIcon(yesterdayTrend, higherIsBetter) {
return this._iconForTrend(yesterdayTrend, higherIsBetter); return this._iconForTrend(yesterdayTrend, higherIsBetter);
}, },
@computed("prev_period", "currentTotal", "currentAverage", "higher_is_better") @discourseComputed(
"prev_period",
"currentTotal",
"currentAverage",
"higher_is_better"
)
trend(prev, currentTotal, currentAverage, higherIsBetter) { trend(prev, currentTotal, currentAverage, higherIsBetter) {
const total = this.average ? currentAverage : currentTotal; const total = this.average ? currentAverage : currentTotal;
return this._computeTrend(prev, total, higherIsBetter); return this._computeTrend(prev, total, higherIsBetter);
}, },
@computed("prev30Days", "lastThirtyDaysCount", "higher_is_better") @discourseComputed("prev30Days", "lastThirtyDaysCount", "higher_is_better")
thirtyDaysTrend(prev30Days, lastThirtyDaysCount, higherIsBetter) { thirtyDaysTrend(prev30Days, lastThirtyDaysCount, higherIsBetter) {
return this._computeTrend(prev30Days, lastThirtyDaysCount, higherIsBetter); return this._computeTrend(prev30Days, lastThirtyDaysCount, higherIsBetter);
}, },
@computed("type") @discourseComputed("type")
method(type) { method(type) {
if (type === "time_to_first_response") { if (type === "time_to_first_response") {
return "average"; return "average";
@ -195,7 +200,7 @@ const Report = Discourse.Model.extend({
} }
}, },
@computed("prev_period", "currentTotal", "currentAverage") @discourseComputed("prev_period", "currentTotal", "currentAverage")
trendTitle(prev, currentTotal, currentAverage) { trendTitle(prev, currentTotal, currentAverage) {
let current = this.average ? currentAverage : currentTotal; let current = this.average ? currentAverage : currentTotal;
let percent = this.percentChangeString(prev, current); let percent = this.percentChangeString(prev, current);
@ -228,12 +233,12 @@ const Report = Discourse.Model.extend({
return title; return title;
}, },
@computed("yesterdayCount") @discourseComputed("yesterdayCount")
yesterdayCountTitle(yesterdayCount) { yesterdayCountTitle(yesterdayCount) {
return this.changeTitle(this.valueAt(2), yesterdayCount, "two days ago"); return this.changeTitle(this.valueAt(2), yesterdayCount, "two days ago");
}, },
@computed("lastSevenDaysCount") @discourseComputed("lastSevenDaysCount")
sevenDaysCountTitle(lastSevenDaysCount) { sevenDaysCountTitle(lastSevenDaysCount) {
return this.changeTitle( return this.changeTitle(
this.valueFor(8, 14), this.valueFor(8, 14),
@ -242,7 +247,7 @@ const Report = Discourse.Model.extend({
); );
}, },
@computed("prev30Days", "lastThirtyDaysCount") @discourseComputed("prev30Days", "lastThirtyDaysCount")
thirtyDaysCountTitle(prev30Days, lastThirtyDaysCount) { thirtyDaysCountTitle(prev30Days, lastThirtyDaysCount) {
return this.changeTitle( return this.changeTitle(
prev30Days, prev30Days,
@ -251,18 +256,18 @@ const Report = Discourse.Model.extend({
); );
}, },
@computed("data") @discourseComputed("data")
sortedData(data) { sortedData(data) {
return this.xAxisIsDate ? data.toArray().reverse() : data.toArray(); return this.xAxisIsDate ? data.toArray().reverse() : data.toArray();
}, },
@computed("data") @discourseComputed("data")
xAxisIsDate() { xAxisIsDate() {
if (!this.data[0]) return false; if (!this.data[0]) return false;
return this.data && this.data[0].x.match(/\d{4}-\d{1,2}-\d{1,2}/); return this.data && this.data[0].x.match(/\d{4}-\d{1,2}-\d{1,2}/);
}, },
@computed("labels") @discourseComputed("labels")
computedLabels(labels) { computedLabels(labels) {
return labels.map(label => { return labels.map(label => {
const type = label.type || "string"; const type = label.type || "string";

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import computed from "ember-addons/ember-computed-decorators";
const ScreenedEmail = Discourse.Model.extend({ const ScreenedEmail = Discourse.Model.extend({
@computed("action") @discourseComputed("action")
actionName(action) { actionName(action) {
return I18n.t("admin.logs.screened_actions." + action); return I18n.t("admin.logs.screened_actions." + action);
}, },

View File

@ -1,16 +1,16 @@
import discourseComputed from "discourse-common/utils/decorators";
import { equal } from "@ember/object/computed"; import { equal } from "@ember/object/computed";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import computed from "ember-addons/ember-computed-decorators";
const ScreenedIpAddress = Discourse.Model.extend({ const ScreenedIpAddress = Discourse.Model.extend({
@computed("action_name") @discourseComputed("action_name")
actionName(actionName) { actionName(actionName) {
return I18n.t(`admin.logs.screened_ips.actions.${actionName}`); return I18n.t(`admin.logs.screened_ips.actions.${actionName}`);
}, },
isBlocked: equal("action_name", "block"), isBlocked: equal("action_name", "block"),
@computed("ip_address") @discourseComputed("ip_address")
isRange(ipAddress) { isRange(ipAddress) {
return ipAddress.indexOf("/") > 0; return ipAddress.indexOf("/") > 0;
}, },

View File

@ -1,8 +1,8 @@
import discourseComputed from "discourse-common/utils/decorators";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import computed from "ember-addons/ember-computed-decorators";
const ScreenedUrl = Discourse.Model.extend({ const ScreenedUrl = Discourse.Model.extend({
@computed("action") @discourseComputed("action")
actionName(action) { actionName(action) {
return I18n.t("admin.logs.screened_actions." + action); return I18n.t("admin.logs.screened_actions." + action);
} }

View File

@ -1,4 +1,4 @@
import computed from "ember-addons/ember-computed-decorators"; import discourseComputed from "discourse-common/utils/decorators";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import AdminUser from "admin/models/admin-user"; import AdminUser from "admin/models/admin-user";
import { escapeExpression } from "discourse/lib/utilities"; import { escapeExpression } from "discourse/lib/utilities";
@ -13,12 +13,12 @@ function format(label, value, escape = true) {
const StaffActionLog = RestModel.extend({ const StaffActionLog = RestModel.extend({
showFullDetails: false, showFullDetails: false,
@computed("action_name") @discourseComputed("action_name")
actionName(actionName) { actionName(actionName) {
return I18n.t(`admin.logs.staff_actions.actions.${actionName}`); return I18n.t(`admin.logs.staff_actions.actions.${actionName}`);
}, },
@computed( @discourseComputed(
"email", "email",
"ip_address", "ip_address",
"topic_id", "topic_id",
@ -69,12 +69,12 @@ const StaffActionLog = RestModel.extend({
return formatted.length > 0 ? formatted + "<br/>" : ""; return formatted.length > 0 ? formatted + "<br/>" : "";
}, },
@computed("details") @discourseComputed("details")
useModalForDetails(details) { useModalForDetails(details) {
return details && details.length > 100; return details && details.length > 100;
}, },
@computed("action_name") @discourseComputed("action_name")
useCustomModalForDetails(actionName) { useCustomModalForDetails(actionName) {
return ["change_theme", "delete_theme"].includes(actionName); return ["change_theme", "delete_theme"].includes(actionName);
} }

View File

@ -2,7 +2,7 @@ import { get } from "@ember/object";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import { or, gt } from "@ember/object/computed"; import { or, gt } from "@ember/object/computed";
import RestModel from "discourse/models/rest"; import RestModel from "discourse/models/rest";
import { default as computed } from "ember-addons/ember-computed-decorators"; import { default as discourseComputed } from "discourse-common/utils/decorators";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { escapeExpression } from "discourse/lib/utilities"; import { escapeExpression } from "discourse/lib/utilities";
@ -20,7 +20,7 @@ const Theme = RestModel.extend({
isPendingUpdates: gt("remote_theme.commits_behind", 0), isPendingUpdates: gt("remote_theme.commits_behind", 0),
hasEditedFields: gt("editedFields.length", 0), hasEditedFields: gt("editedFields.length", 0),
@computed("theme_fields.[]") @discourseComputed("theme_fields.[]")
targets() { targets() {
return [ return [
{ id: 0, name: "common" }, { id: 0, name: "common" },
@ -48,7 +48,7 @@ const Theme = RestModel.extend({
}); });
}, },
@computed("theme_fields.[]") @discourseComputed("theme_fields.[]")
fieldNames() { fieldNames() {
const common = [ const common = [
"scss", "scss",
@ -82,7 +82,11 @@ const Theme = RestModel.extend({
}; };
}, },
@computed("fieldNames", "theme_fields.[]", "theme_fields.@each.error") @discourseComputed(
"fieldNames",
"theme_fields.[]",
"theme_fields.@each.error"
)
fields(fieldNames) { fields(fieldNames) {
const hash = {}; const hash = {};
Object.keys(fieldNames).forEach(target => { Object.keys(fieldNames).forEach(target => {
@ -112,7 +116,7 @@ const Theme = RestModel.extend({
return hash; return hash;
}, },
@computed("theme_fields") @discourseComputed("theme_fields")
themeFields(fields) { themeFields(fields) {
if (!fields) { if (!fields) {
this.set("theme_fields", []); this.set("theme_fields", []);
@ -128,7 +132,7 @@ const Theme = RestModel.extend({
return hash; return hash;
}, },
@computed("theme_fields", "theme_fields.[]") @discourseComputed("theme_fields", "theme_fields.[]")
uploads(fields) { uploads(fields) {
if (!fields) { if (!fields) {
return []; return [];
@ -138,19 +142,19 @@ const Theme = RestModel.extend({
); );
}, },
@computed("theme_fields", "theme_fields.@each.error") @discourseComputed("theme_fields", "theme_fields.@each.error")
isBroken(fields) { isBroken(fields) {
return fields && fields.any(field => field.error && field.error.length > 0); return fields && fields.any(field => field.error && field.error.length > 0);
}, },
@computed("theme_fields.[]") @discourseComputed("theme_fields.[]")
editedFields(fields) { editedFields(fields) {
return fields.filter( return fields.filter(
field => !Ember.isBlank(field.value) && field.type_id !== SETTINGS_TYPE_ID field => !Ember.isBlank(field.value) && field.type_id !== SETTINGS_TYPE_ID
); );
}, },
@computed("remote_theme.last_error_text") @discourseComputed("remote_theme.last_error_text")
remoteError(errorText) { remoteError(errorText) {
if (errorText && errorText.length > 0) { if (errorText && errorText.length > 0) {
return errorText; return errorText;
@ -241,7 +245,7 @@ const Theme = RestModel.extend({
} }
}, },
@computed("childThemes.[]") @discourseComputed("childThemes.[]")
child_theme_ids(childThemes) { child_theme_ids(childThemes) {
if (childThemes) { if (childThemes) {
return childThemes.map(theme => get(theme, "id")); return childThemes.map(theme => get(theme, "id"));
@ -265,7 +269,7 @@ const Theme = RestModel.extend({
return this.saveChanges("child_theme_ids"); return this.saveChanges("child_theme_ids");
}, },
@computed("name", "default") @discourseComputed("name", "default")
description: function(name, isDefault) { description: function(name, isDefault) {
if (isDefault) { if (isDefault) {
return I18n.t("admin.customize.theme.default_name", { name: name }); return I18n.t("admin.customize.theme.default_name", { name: name });

View File

@ -1,17 +1,17 @@
import computed from "ember-addons/ember-computed-decorators"; import discourseComputed from "discourse-common/utils/decorators";
export default Discourse.Model.extend({ export default Discourse.Model.extend({
@computed("days_visited", "time_period") @discourseComputed("days_visited", "time_period")
days_visited_percent(daysVisited, timePeriod) { days_visited_percent(daysVisited, timePeriod) {
return Math.round((daysVisited * 100) / timePeriod); return Math.round((daysVisited * 100) / timePeriod);
}, },
@computed("min_days_visited", "time_period") @discourseComputed("min_days_visited", "time_period")
min_days_visited_percent(minDaysVisited, timePeriod) { min_days_visited_percent(minDaysVisited, timePeriod) {
return Math.round((minDaysVisited * 100) / timePeriod); return Math.round((minDaysVisited * 100) / timePeriod);
}, },
@computed( @discourseComputed(
"days_visited", "days_visited",
"min_days_visited", "min_days_visited",
"num_topics_replied_to", "num_topics_replied_to",

View File

@ -1,30 +1,30 @@
import discourseComputed from "discourse-common/utils/decorators";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import computed from "ember-addons/ember-computed-decorators";
const VersionCheck = Discourse.Model.extend({ const VersionCheck = Discourse.Model.extend({
@computed("updated_at") @discourseComputed("updated_at")
noCheckPerformed(updatedAt) { noCheckPerformed(updatedAt) {
return updatedAt === null; return updatedAt === null;
}, },
@computed("missing_versions_count") @discourseComputed("missing_versions_count")
upToDate(missingVersionsCount) { upToDate(missingVersionsCount) {
return missingVersionsCount === 0 || missingVersionsCount === null; return missingVersionsCount === 0 || missingVersionsCount === null;
}, },
@computed("missing_versions_count") @discourseComputed("missing_versions_count")
behindByOneVersion(missingVersionsCount) { behindByOneVersion(missingVersionsCount) {
return missingVersionsCount === 1; return missingVersionsCount === 1;
}, },
@computed("installed_sha") @discourseComputed("installed_sha")
gitLink(installedSHA) { gitLink(installedSHA) {
if (installedSHA) { if (installedSHA) {
return `https://github.com/discourse/discourse/commits/${installedSHA}`; return `https://github.com/discourse/discourse/commits/${installedSHA}`;
} }
}, },
@computed("installed_sha") @discourseComputed("installed_sha")
shortSha(installedSHA) { shortSha(installedSHA) {
if (installedSHA) { if (installedSHA) {
return installedSHA.substr(0, 10); return installedSHA.substr(0, 10);

View File

@ -3,9 +3,9 @@ import RestModel from "discourse/models/rest";
import Category from "discourse/models/category"; import Category from "discourse/models/category";
import Group from "discourse/models/group"; import Group from "discourse/models/group";
import { import {
default as computed, default as discourseComputed,
observes observes
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
export default RestModel.extend({ export default RestModel.extend({
content_type: 1, // json content_type: 1, // json
@ -16,7 +16,7 @@ export default RestModel.extend({
web_hook_event_types: null, web_hook_event_types: null,
groupsFilterInName: null, groupsFilterInName: null,
@computed("wildcard_web_hook") @discourseComputed("wildcard_web_hook")
webHookType: { webHookType: {
get(wildcard) { get(wildcard) {
return wildcard ? "wildcard" : "individual"; return wildcard ? "wildcard" : "individual";
@ -26,7 +26,7 @@ export default RestModel.extend({
} }
}, },
@computed("category_ids") @discourseComputed("category_ids")
categories(categoryIds) { categories(categoryIds) {
return Category.findByIds(categoryIds); return Category.findByIds(categoryIds);
}, },
@ -49,7 +49,7 @@ export default RestModel.extend({
return Group.findAll({ term: term, ignore_automatic: false }); return Group.findAll({ term: term, ignore_automatic: false });
}, },
@computed("wildcard_web_hook", "web_hook_event_types.[]") @discourseComputed("wildcard_web_hook", "web_hook_event_types.[]")
description(isWildcardWebHook, types) { description(isWildcardWebHook, types) {
let desc = ""; let desc = "";

View File

@ -1,10 +1,9 @@
//= require_tree ./ember-addons/utils //= require_tree ./ember-addons/utils
//= require_tree ./discourse-common
//= require ./ember-addons/decorator-alias //= require ./ember-addons/decorator-alias
//= require ./ember-addons/macro-alias //= require ./ember-addons/macro-alias
//= require ./ember-addons/ember-computed-decorators
//= require ./ember-addons/fmt //= require ./ember-addons/fmt
//= require ./polyfills //= require ./polyfills
//= require_tree ./discourse-common
//= require_tree ./select-kit //= require_tree ./select-kit
//= require ./discourse //= require ./discourse
//= require ./deprecated //= require ./deprecated

View File

@ -1,6 +1,6 @@
// This is a mechanism for quickly rendering templates which is Ember aware // This is a mechanism for quickly rendering templates which is Ember aware
// templates are highly compatible with Ember so you don't need to worry about calling "get" // templates are highly compatible with Ember so you don't need to worry about calling "get"
// and computed properties function, additionally it uses stringParams like Ember does // and discourseComputed properties function, additionally it uses stringParams like Ember does
const RawHandlebars = Handlebars.create(); const RawHandlebars = Handlebars.create();

View File

@ -1,9 +1,9 @@
import handleDescriptor from "./utils/handle-descriptor"; import handleDescriptor from "ember-addons/utils/handle-descriptor";
import isDescriptor from "./utils/is-descriptor"; import isDescriptor from "ember-addons/utils/is-descriptor";
import extractValue from "./utils/extract-value"; import extractValue from "ember-addons/utils/extract-value";
export default function computedDecorator(...params) { export default function discourseComputedDecorator(...params) {
// determine if user called as @computed('blah', 'blah') or @computed // determine if user called as @discourseComputed('blah', 'blah') or @discourseComputed
if (isDescriptor(params[params.length - 1])) { if (isDescriptor(params[params.length - 1])) {
return handleDescriptor(...arguments); return handleDescriptor(...arguments);
} else { } else {
@ -25,7 +25,7 @@ export function readOnly(target, name, desc) {
}; };
} }
import decoratorAlias from "./decorator-alias"; import decoratorAlias from "ember-addons/decorator-alias";
export var on = decoratorAlias(Ember.on, "Can not `on` without event names"); export var on = decoratorAlias(Ember.on, "Can not `on` without event names");
export var observes = decoratorAlias( export var observes = decoratorAlias(
@ -33,7 +33,7 @@ export var observes = decoratorAlias(
"Can not `observe` without property names" "Can not `observe` without property names"
); );
import macroAlias from "./macro-alias"; import macroAlias from "ember-addons/macro-alias";
export var alias = macroAlias(Ember.computed.alias); export var alias = macroAlias(Ember.computed.alias);
export var and = macroAlias(Ember.computed.and); export var and = macroAlias(Ember.computed.and);

View File

@ -3,6 +3,10 @@ var define, requirejs;
(function() { (function() {
// In future versions of ember we don't need this // In future versions of ember we don't need this
var EMBER_MODULES = {}; var EMBER_MODULES = {};
var ALIASES = {
"ember-addons/ember-computed-decorators":
"discourse-common/utils/decorators"
};
if (typeof Ember !== "undefined") { if (typeof Ember !== "undefined") {
EMBER_MODULES = { EMBER_MODULES = {
jquery: { default: $ }, jquery: { default: $ },
@ -76,7 +80,7 @@ var define, requirejs;
"@ember/utils": { "@ember/utils": {
isEmpty: Ember.isEmpty isEmpty: Ember.isEmpty
}, },
"rsvp": { rsvp: {
Promise: Ember.RSVP.Promise, Promise: Ember.RSVP.Promise,
hash: Ember.RSVP.hash, hash: Ember.RSVP.hash,
all: Ember.RSVP.all all: Ember.RSVP.all
@ -213,6 +217,7 @@ var define, requirejs;
} }
function requireFrom(name, origin) { function requireFrom(name, origin) {
name = checkForAlias(name);
var mod = EMBER_MODULES[name] || registry[name]; var mod = EMBER_MODULES[name] || registry[name];
if (!mod) { if (!mod) {
throw new Error( throw new Error(
@ -226,6 +231,10 @@ var define, requirejs;
throw new Error("Could not find module " + name); throw new Error("Could not find module " + name);
} }
function checkForAlias(name) {
return ALIASES[name] ? ALIASES[name] : name;
}
requirejs = require = function(name) { requirejs = require = function(name) {
if (EMBER_MODULES[name]) { if (EMBER_MODULES[name]) {
return EMBER_MODULES[name]; return EMBER_MODULES[name];

View File

@ -1,9 +1,9 @@
/*global Mousetrap:true*/ /*global Mousetrap:true*/
import { buildResolver } from "discourse-common/resolver"; import { buildResolver } from "discourse-common/resolver";
import { import {
default as computed, default as discourseComputed,
observes observes
} from "ember-addons/ember-computed-decorators"; } from "discourse-common/utils/decorators";
import FocusEvent from "discourse-common/mixins/focus-event"; import FocusEvent from "discourse-common/mixins/focus-event";
const _pluginCallbacks = []; const _pluginCallbacks = [];
@ -66,7 +66,7 @@ const Discourse = Ember.Application.extend(FocusEvent, {
document.title = title; document.title = title;
}, },
@computed("contextCount", "notificationCount") @discourseComputed("contextCount", "notificationCount")
displayCount() { displayCount() {
return Discourse.User.current() && return Discourse.User.current() &&
Discourse.User.currentProp("title_count_mode") === "notifications" Discourse.User.currentProp("title_count_mode") === "notifications"
@ -179,7 +179,7 @@ const Discourse = Ember.Application.extend(FocusEvent, {
}); });
}, },
@computed("currentAssetVersion", "desiredAssetVersion") @discourseComputed("currentAssetVersion", "desiredAssetVersion")
requiresRefresh(currentAssetVersion, desiredAssetVersion) { requiresRefresh(currentAssetVersion, desiredAssetVersion) {
return desiredAssetVersion && currentAssetVersion !== desiredAssetVersion; return desiredAssetVersion && currentAssetVersion !== desiredAssetVersion;
}, },

View File

@ -1,6 +1,6 @@
import { scheduleOnce } from "@ember/runloop"; import { scheduleOnce } from "@ember/runloop";
import Component from "@ember/component"; import Component from "@ember/component";
import { observes } from "ember-addons/ember-computed-decorators"; import { observes } from "discourse-common/utils/decorators";
export default Component.extend({ export default Component.extend({
_slug: null, _slug: null,

View File

@ -1,4 +1,4 @@
import { observes } from "ember-addons/ember-computed-decorators"; import { observes } from "discourse-common/utils/decorators";
import MountWidget from "discourse/components/mount-widget"; import MountWidget from "discourse/components/mount-widget";
export default MountWidget.extend({ export default MountWidget.extend({

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
import UploadMixin from "discourse/mixins/upload"; import UploadMixin from "discourse/mixins/upload";
export default Component.extend(UploadMixin, { export default Component.extend(UploadMixin, {
@ -21,7 +21,7 @@ export default Component.extend(UploadMixin, {
this.done(); this.done();
}, },
@computed("user_id") @discourseComputed("user_id")
data(user_id) { data(user_id) {
return { user_id }; return { user_id };
} }

View File

@ -1,5 +1,5 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
// https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding // https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
function b64EncodeUnicode(str) { function b64EncodeUnicode(str) {
@ -32,10 +32,10 @@ export default Component.extend({
} }
}, },
@computed("formattedBackupCodes") @discourseComputed("formattedBackupCodes")
base64BackupCode: b64EncodeUnicode, base64BackupCode: b64EncodeUnicode,
@computed("backupCodes") @discourseComputed("backupCodes")
formattedBackupCodes(backupCodes) { formattedBackupCodes(backupCodes) {
if (!backupCodes) return null; if (!backupCodes) return null;

View File

@ -1,14 +1,14 @@
import discourseComputed from "discourse-common/utils/decorators";
import Component from "@ember/component"; import Component from "@ember/component";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import computed from "ember-addons/ember-computed-decorators";
import UploadMixin from "discourse/mixins/upload"; import UploadMixin from "discourse/mixins/upload";
import { on } from "@ember/object/evented"; import { on } from "@ember/object/evented";
export default Component.extend(UploadMixin, { export default Component.extend(UploadMixin, {
tagName: "span", tagName: "span",
@computed("uploading", "uploadProgress") @discourseComputed("uploading", "uploadProgress")
uploadButtonText(uploading, progress) { uploadButtonText(uploading, progress) {
return uploading return uploading
? I18n.t("admin.backups.upload.uploading_progress", { progress }) ? I18n.t("admin.backups.upload.uploading_progress", { progress })

Some files were not shown because too many files have changed in this diff Show More