Version bump

This commit is contained in:
Neil Lalonde 2019-11-06 12:31:38 -05:00
commit c35ecbea89
1418 changed files with 18481 additions and 7415 deletions

13
Gemfile
View File

@ -36,21 +36,12 @@ gem 'mail', require: false
gem 'mini_mime'
gem 'mini_suffix'
gem 'hiredis'
# holding off redis upgrade temporarily as it is having issues with our current
# freedom patch, we will follow this up.
#
# FrozenError: can't modify frozen Hash
# /var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.1.0/lib/redis/client.rb:93:in `delete'
# /var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.1.0/lib/redis/client.rb:93:in `initialize'
# /var/www/discourse/lib/freedom_patches/redis.rb:7:in `initialize'
gem 'redis', '4.0.1', require: ["redis", "redis/connection/hiredis"]
gem 'redis', '4.1.3'
gem 'redis-namespace'
gem 'active_model_serializers', '~> 0.8.3'
gem 'onebox', '1.9.17'
gem 'onebox', '1.9.21'
gem 'http_accept_language', '~>2.0.5', require: false

View File

@ -143,7 +143,6 @@ GEM
hashdiff (0.3.9)
hashie (3.6.0)
highline (1.7.10)
hiredis (0.6.3)
hkdf (0.3.0)
htmlentities (4.3.4)
http_accept_language (2.0.5)
@ -173,7 +172,7 @@ GEM
logstash-event (1.2.02)
logstash-logger (0.26.1)
logstash-event (~> 1.2)
logster (2.3.3)
logster (2.4.1)
loofah (2.2.3)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
@ -183,7 +182,7 @@ GEM
mini_mime (>= 0.1.1)
maxminddb (0.1.22)
memory_profiler (0.9.13)
message_bus (2.2.2)
message_bus (2.2.3)
rack (>= 1.1.3)
metaclass (0.0.4)
method_source (0.9.2)
@ -200,7 +199,6 @@ GEM
mocha (1.8.0)
metaclass (~> 0.0.1)
mock_redis (0.19.0)
moneta (1.1.1)
msgpack (1.2.10)
multi_json (1.13.1)
multi_xml (0.6.0)
@ -245,9 +243,8 @@ GEM
omniauth-twitter (1.4.0)
omniauth-oauth (~> 1.1)
rack
onebox (1.9.17)
onebox (1.9.21)
htmlentities (~> 4.3)
moneta (~> 1.0)
multi_json (~> 1.11)
mustache
nokogiri (~> 1.7)
@ -274,7 +271,7 @@ GEM
puma (3.12.1)
r2 (0.2.7)
rack (2.0.7)
rack-mini-profiler (1.1.0)
rack-mini-profiler (1.1.3)
rack (>= 1.2.0)
rack-openid (1.3.1)
rack (>= 1.1.0)
@ -310,7 +307,7 @@ GEM
msgpack (>= 0.4.3)
optimist (>= 3.0.0)
rchardet (1.8.0)
redis (4.0.1)
redis (4.1.3)
redis-namespace (1.6.0)
redis (>= 3.0.4)
request_store (1.4.1)
@ -467,7 +464,6 @@ DEPENDENCIES
flamegraph
gc_tracer
highline (~> 1.7.0)
hiredis
htmlentities
http_accept_language (~> 2.0.5)
listen
@ -501,7 +497,7 @@ DEPENDENCIES
omniauth-oauth2
omniauth-openid
omniauth-twitter
onebox (= 1.9.17)
onebox (= 1.9.21)
openid-redis-store
parallel_tests
pg
@ -518,7 +514,7 @@ DEPENDENCIES
rb-inotify (~> 0.9)
rbtrace
rchardet
redis (= 4.0.1)
redis (= 4.1.3)
redis-namespace
rinku
rotp

View File

@ -0,0 +1,11 @@
import RESTAdapter from "discourse/adapters/rest";
export default RESTAdapter.extend({
basePath() {
return "/admin/api/";
},
apiNameFor() {
return "key";
}
});

View File

@ -0,0 +1,5 @@
import RestAdapter from "discourse/adapters/rest";
export default RestAdapter.extend({
jsonMode: true
});

View File

@ -1,7 +1,9 @@
import Component from "@ember/component";
import loadScript from "discourse/lib/load-script";
import { observes } from "ember-addons/ember-computed-decorators";
import { on } from "@ember/object/evented";
export default Ember.Component.extend({
export default Component.extend({
mode: "css",
classNames: ["ace-wrapper"],
_editor: null,
@ -48,7 +50,7 @@ export default Ember.Component.extend({
}
},
_destroyEditor: function() {
_destroyEditor: on("willDestroyElement", function() {
if (this._editor) {
this._editor.destroy();
this._editor = null;
@ -59,7 +61,7 @@ export default Ember.Component.extend({
}
$(window).off("ace:resize");
}.on("willDestroyElement"),
}),
resize() {
if (this._editor) {

View File

@ -1,10 +1,12 @@
import { scheduleOnce } from "@ember/runloop";
import Component from "@ember/component";
import debounce from "discourse/lib/debounce";
import { renderSpinner } from "discourse/helpers/loading-spinner";
import { escapeExpression } from "discourse/lib/utilities";
import { bufferedRender } from "discourse-common/lib/buffered-render";
import { observes, on } from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend(
export default Component.extend(
bufferedRender({
classNames: ["admin-backups-logs"],
@ -52,7 +54,7 @@ export default Ember.Component.extend(
// force rerender
this.rerenderBuffer();
Ember.run.scheduleOnce("afterRender", this, this._scrollDown);
scheduleOnce("afterRender", this, this._scrollDown);
}, 150),
buildBuffer(buffer) {

View File

@ -1,7 +1,8 @@
import Component from "@ember/component";
import { iconHTML } from "discourse-common/lib/icon-library";
import { bufferedRender } from "discourse-common/lib/buffered-render";
export default Ember.Component.extend(
export default Component.extend(
bufferedRender({
tagName: "th",
classNames: ["sortable"],

View File

@ -1,4 +1,5 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: "",
buffer: "",

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
classNames: ["row"]
});

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import loadScript from "discourse/lib/load-script";
export default Ember.Component.extend({
export default Component.extend({
tagName: "canvas",
type: "line",

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: ""
});

View File

@ -1,7 +1,11 @@
import { makeArray } from "discourse-common/lib/helpers";
import { debounce } from "@ember/runloop";
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
import { number } from "discourse/lib/formatter";
import loadScript from "discourse/lib/load-script";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["admin-report-chart"],
limit: 8,
total: 0,
@ -10,7 +14,7 @@ export default Ember.Component.extend({
this._super(...arguments);
this.resizeHandler = () =>
Ember.run.debounce(this, this._scheduleChartRendering, 500);
debounce(this, this._scheduleChartRendering, 500);
},
didInsertElement() {
@ -30,11 +34,11 @@ export default Ember.Component.extend({
didReceiveAttrs() {
this._super(...arguments);
Ember.run.debounce(this, this._scheduleChartRendering, 100);
debounce(this, this._scheduleChartRendering, 100);
},
_scheduleChartRendering() {
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
this._renderChart(
this.model,
this.element && this.element.querySelector(".chart-canvas")
@ -46,10 +50,8 @@ export default Ember.Component.extend({
if (!chartCanvas) return;
const context = chartCanvas.getContext("2d");
const chartData = Ember.makeArray(
model.get("chartData") || model.get("data")
);
const prevChartData = Ember.makeArray(
const chartData = makeArray(model.get("chartData") || model.get("data"));
const prevChartData = makeArray(
model.get("prevChartData") || model.get("prev_data")
);

View File

@ -1,4 +1,5 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
classNames: ["admin-report-counters"],
attributeBindings: ["model.description:title"]

View File

@ -1,7 +1,9 @@
export default Ember.Component.extend({
import { match } from "@ember/object/computed";
import Component from "@ember/component";
export default Component.extend({
allTime: true,
tagName: "tr",
reverseColors: Ember.computed.match(
reverseColors: match(
"report.type",
/^(time_to_first_response|topics_with_no_response)$/
),

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
classNames: ["admin-report-inline-table"]
});

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: "tr"
});

View File

@ -1,14 +1,18 @@
import { makeArray } from "discourse-common/lib/helpers";
import { debounce } from "@ember/runloop";
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
import { number } from "discourse/lib/formatter";
import loadScript from "discourse/lib/load-script";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["admin-report-chart", "admin-report-stacked-chart"],
init() {
this._super(...arguments);
this.resizeHandler = () =>
Ember.run.debounce(this, this._scheduleChartRendering, 500);
debounce(this, this._scheduleChartRendering, 500);
},
didInsertElement() {
@ -28,11 +32,11 @@ export default Ember.Component.extend({
didReceiveAttrs() {
this._super(...arguments);
Ember.run.debounce(this, this._scheduleChartRendering, 100);
debounce(this, this._scheduleChartRendering, 100);
},
_scheduleChartRendering() {
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
if (!this.element) {
return;
}
@ -49,9 +53,7 @@ export default Ember.Component.extend({
const context = chartCanvas.getContext("2d");
const chartData = Ember.makeArray(
model.get("chartData") || model.get("data")
);
const chartData = makeArray(model.get("chartData") || model.get("data"));
const data = {
labels: chartData[0].data.map(cd => cd.x),

View File

@ -1,12 +1,14 @@
import { alias } from "@ember/object/computed";
import Component from "@ember/component";
import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["admin-report-storage-stats"],
backupLocation: setting("backup_location"),
backupStats: Ember.computed.alias("model.data.backups"),
uploadStats: Ember.computed.alias("model.data.uploads"),
backupStats: alias("model.data.backups"),
uploadStats: alias("model.data.uploads"),
@computed("backupStats")
showBackupStats(stats) {

View File

@ -1,6 +1,8 @@
import { alias } from "@ember/object/computed";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
tagName: "td",
classNames: ["admin-report-table-cell"],
classNameBindings: ["type", "property"],
@ -11,8 +13,8 @@ export default Ember.Component.extend({
return label.compute(data, options || {});
},
type: Ember.computed.alias("label.type"),
property: Ember.computed.alias("label.mainProperty"),
formatedValue: Ember.computed.alias("computedLabel.formatedValue"),
value: Ember.computed.alias("computedLabel.value")
type: alias("label.type"),
property: alias("label.mainProperty"),
formatedValue: alias("computedLabel.formatedValue"),
value: alias("computedLabel.value")
});

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
tagName: "th",
classNames: ["admin-report-table-header"],
classNameBindings: ["label.mainProperty", "label.type", "isCurrentSort"],

View File

@ -1,4 +1,5 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: "tr",
classNames: ["admin-report-table-row"],
options: null

View File

@ -1,13 +1,16 @@
import { makeArray } from "discourse-common/lib/helpers";
import { alias } from "@ember/object/computed";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
const PAGES_LIMIT = 8;
export default Ember.Component.extend({
export default Component.extend({
classNameBindings: ["sortable", "twoColumns"],
classNames: ["admin-report-table"],
sortable: false,
sortDirection: 1,
perPage: Ember.computed.alias("options.perPage"),
perPage: alias("options.perPage"),
page: 0,
@computed("model.computedLabels.length")
@ -89,7 +92,7 @@ export default Ember.Component.extend({
@computed("sortLabel", "sortDirection", "model.data.[]")
sortedData(sortLabel, sortDirection, data) {
data = Ember.makeArray(data);
data = makeArray(data);
if (sortLabel) {
const compare = (label, direction) => {

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: "tr"
});

View File

@ -1,3 +1,8 @@
import { makeArray } from "discourse-common/lib/helpers";
import { alias, or, and, reads, equal, notEmpty } from "@ember/object/computed";
import EmberObject from "@ember/object";
import { next } from "@ember/runloop";
import Component from "@ember/component";
import ReportLoader from "discourse/lib/reports-loader";
import { exportEntity } from "discourse/lib/export-csv";
import { outputExportResult } from "discourse/lib/export-result";
@ -34,7 +39,7 @@ function collapseWeekly(data, average) {
return aggregate;
}
export default Ember.Component.extend({
export default Component.extend({
classNameBindings: ["isEnabled", "isLoading", "dasherizedDataSourceName"],
classNames: ["admin-report"],
isEnabled: true,
@ -54,12 +59,9 @@ export default Ember.Component.extend({
showHeader: true,
showTitle: true,
showFilteringUI: false,
showDatesOptions: Ember.computed.alias("model.dates_filtering"),
showRefresh: Ember.computed.or(
"showDatesOptions",
"model.available_filters.length"
),
shouldDisplayTrend: Ember.computed.and("showTrend", "model.prev_period"),
showDatesOptions: alias("model.dates_filtering"),
showRefresh: or("showDatesOptions", "model.available_filters.length"),
shouldDisplayTrend: and("showTrend", "model.prev_period"),
init() {
this._super(...arguments);
@ -67,8 +69,8 @@ export default Ember.Component.extend({
this._reports = [];
},
startDate: Ember.computed.reads("filters.startDate"),
endDate: Ember.computed.reads("filters.endDate"),
startDate: reads("filters.startDate"),
endDate: reads("filters.endDate"),
didReceiveAttrs() {
this._super(...arguments);
@ -80,16 +82,12 @@ export default Ember.Component.extend({
}
},
showError: Ember.computed.or(
"showTimeoutError",
"showExceptionError",
"showNotFoundError"
),
showNotFoundError: Ember.computed.equal("model.error", "not_found"),
showTimeoutError: Ember.computed.equal("model.error", "timeout"),
showExceptionError: Ember.computed.equal("model.error", "exception"),
showError: or("showTimeoutError", "showExceptionError", "showNotFoundError"),
showNotFoundError: equal("model.error", "not_found"),
showTimeoutError: equal("model.error", "timeout"),
showExceptionError: equal("model.error", "exception"),
hasData: Ember.computed.notEmpty("model.data"),
hasData: notEmpty("model.data"),
@computed("dataSourceName", "model.type")
dasherizedDataSourceName(dataSourceName, type) {
@ -111,7 +109,7 @@ export default Ember.Component.extend({
displayedModes(currentMode, reportModes, forcedModes) {
const modes = forcedModes ? forcedModes.split(",") : reportModes;
return Ember.makeArray(modes).map(mode => {
return makeArray(modes).map(mode => {
const base = `btn-default mode-btn ${mode}`;
const cssClass = currentMode === mode ? `${base} is-current` : base;
@ -311,7 +309,7 @@ export default Ember.Component.extend({
this.setProperties({ isLoading: true, rateLimitationString: null });
Ember.run.next(() => {
next(() => {
let payload = this._buildPayload(["prev_period"]);
const callback = response => {
@ -367,12 +365,12 @@ export default Ember.Component.extend({
_buildOptions(mode) {
if (mode === "table") {
const tableOptions = JSON.parse(JSON.stringify(TABLE_OPTIONS));
return Ember.Object.create(
return EmberObject.create(
Object.assign(tableOptions, this.get("reportOptions.table") || {})
);
} else {
const chartOptions = JSON.parse(JSON.stringify(CHART_OPTIONS));
return Ember.Object.create(
return EmberObject.create(
Object.assign(chartOptions, this.get("reportOptions.chart") || {})
);
}

View File

@ -1,7 +1,9 @@
import { next } from "@ember/runloop";
import Component from "@ember/component";
import { default as computed } from "ember-addons/ember-computed-decorators";
import { fmt } from "discourse/lib/computed";
export default Ember.Component.extend({
export default Component.extend({
@computed("theme.targets", "onlyOverridden", "showAdvanced")
visibleTargets(targets, onlyOverridden, showAdvanced) {
return targets.filter(target => {
@ -82,7 +84,7 @@ export default Ember.Component.extend({
toggleMaximize: function() {
this.toggleProperty("maximized");
Ember.run.next(() => this.appEvents.trigger("ace:resize"));
next(() => this.appEvents.trigger("ace:resize"));
},
onlyOverriddenChanged(value) {

View File

@ -1,3 +1,7 @@
import { isEmpty } from "@ember/utils";
import { empty } from "@ember/object/computed";
import { scheduleOnce } from "@ember/runloop";
import Component from "@ember/component";
import UserField from "admin/models/user-field";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import { popupAjaxError } from "discourse/lib/ajax-error";
@ -9,8 +13,8 @@ import {
on
} from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend(bufferedProperty("userField"), {
editing: Ember.computed.empty("userField.id"),
export default Component.extend(bufferedProperty("userField"), {
editing: empty("userField.id"),
classNameBindings: [":user-field"],
cantMoveUp: propertyEqual("userField", "firstField"),
@ -27,7 +31,7 @@ export default Ember.Component.extend(bufferedProperty("userField"), {
@observes("editing")
_focusOnEdit() {
if (this.editing) {
Ember.run.scheduleOnce("afterRender", this, "_focusName");
scheduleOnce("afterRender", this, "_focusName");
}
},
@ -93,7 +97,7 @@ export default Ember.Component.extend(bufferedProperty("userField"), {
cancel() {
const id = this.get("userField.id");
if (Ember.isEmpty(id)) {
if (isEmpty(id)) {
this.destroyAction(this.userField);
} else {
this.rollbackBuffer();

View File

@ -1,8 +1,9 @@
import Component from "@ember/component";
import { iconHTML } from "discourse-common/lib/icon-library";
import { bufferedRender } from "discourse-common/lib/buffered-render";
import { escapeExpression } from "discourse/lib/utilities";
export default Ember.Component.extend(
export default Component.extend(
bufferedRender({
classNames: ["watched-word"],

View File

@ -1,8 +1,10 @@
import { alias } from "@ember/object/computed";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["hook-event"],
typeName: Ember.computed.alias("type.name"),
typeName: alias("type.name"),
@computed("typeName")
name(typeName) {

View File

@ -1,9 +1,10 @@
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { ensureJSON, plainJSON, prettyJSON } from "discourse/lib/formatter";
export default Ember.Component.extend({
export default Component.extend({
tagName: "li",
expandDetails: null,
expandDetailsRequestKey: "request",

View File

@ -1,8 +1,9 @@
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
import { iconHTML } from "discourse-common/lib/icon-library";
import { bufferedRender } from "discourse-common/lib/buffered-render";
export default Ember.Component.extend(
export default Component.extend(
bufferedRender({
classes: ["text-muted", "text-danger", "text-successful", "text-muted"],
icons: ["far-circle", "times-circle", "circle", "circle"],

View File

@ -1,4 +1,5 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
didInsertElement() {
this._super(...arguments);
$("body").addClass("admin-interface");

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: ""
});

View File

@ -1,3 +1,5 @@
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
import { default as loadScript, loadCSS } from "discourse/lib/load-script";
/**
@ -7,7 +9,7 @@ import { default as loadScript, loadCSS } from "discourse/lib/load-script";
@param brightnessValue is a number from 0 to 255 representing the brightness of the color. See ColorSchemeColor.
@params valid is a boolean indicating if the input field is a valid color.
**/
export default Ember.Component.extend({
export default Component.extend({
classNames: ["color-picker"],
hexValueChanged: function() {
var hex = this.hexValue;
@ -36,7 +38,7 @@ export default Ember.Component.extend({
didInsertElement() {
loadScript("/javascripts/spectrum.js").then(() => {
loadCSS("/javascripts/spectrum.css").then(() => {
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
$(this.element.querySelector(".picker"))
.spectrum({ color: "#" + this.hexValue })
.on("change.spectrum", (me, color) => {
@ -46,7 +48,7 @@ export default Ember.Component.extend({
});
});
});
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
this.hexValueChanged();
});
}

View File

@ -1,7 +1,14 @@
import { reads } from "@ember/object/computed";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
editorId: Ember.computed.reads("fieldName"),
export default Component.extend({
editorId: reads("fieldName"),
@computed("fieldName")
currentEditorMode(fieldName) {
return fieldName === "css" ? "scss" : fieldName;
},
@computed("fieldName", "styles.html", "styles.css")
resetDisabled(fieldName) {

View File

@ -1,26 +1,30 @@
import { isEmpty } from "@ember/utils";
import { or } from "@ember/object/computed";
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import computed from "ember-addons/ember-computed-decorators";
import { on, observes } from "ember-addons/ember-computed-decorators";
import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Component.extend(bufferedProperty("host"), {
export default Component.extend(bufferedProperty("host"), {
editToggled: false,
tagName: "tr",
categoryId: null,
editing: Ember.computed.or("host.isNew", "editToggled"),
editing: or("host.isNew", "editToggled"),
@on("didInsertElement")
@observes("editing")
_focusOnInput() {
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
this.element.querySelector(".host-name").focus();
});
},
@computed("buffered.host", "host.isSaving")
cantSave(host, isSaving) {
return isSaving || Ember.isEmpty(host);
return isSaving || isEmpty(host);
},
actions: {

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["embed-setting"],
@computed("field")

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
classNames: ["flag-user-lists"]
});

View File

@ -1,7 +1,8 @@
import Component from "@ember/component";
import { on, observes } from "ember-addons/ember-computed-decorators";
import highlightSyntax from "discourse/lib/highlight-syntax";
export default Ember.Component.extend({
export default Component.extend({
@on("didInsertElement")
@observes("code")
_refresh: function() {

View File

@ -1,9 +1,10 @@
import Component from "@ember/component";
import {
default as computed,
observes
} from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["inline-edit"],
checked: null,

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
classNames: ["install-theme-item"]
});

View File

@ -1,9 +1,12 @@
import EmberObject from "@ember/object";
import { later } from "@ember/runloop";
import Component from "@ember/component";
import { default as computed } from "ember-addons/ember-computed-decorators";
import { ajax } from "discourse/lib/ajax";
import AdminUser from "admin/models/admin-user";
import copyText from "discourse/lib/copy-text";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["ip-lookup"],
@computed("other_accounts.length", "totalOthersWithSameIP")
@ -20,7 +23,7 @@ export default Ember.Component.extend({
if (!this.location) {
ajax("/admin/users/ip-info", { data: { ip: this.ip } }).then(location =>
this.set("location", Ember.Object.create(location))
this.set("location", EmberObject.create(location))
);
}
@ -76,7 +79,7 @@ export default Ember.Component.extend({
$(document.body).append($copyRange);
if (copyText(text, $copyRange[0])) {
this.set("copied", true);
Ember.run.later(() => this.set("copied", false), 2000);
later(() => this.set("copied", false), 2000);
}
$copyRange.remove();
},

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: "tr"
});

View File

@ -1,8 +1,11 @@
import { equal } from "@ember/object/computed";
import { scheduleOnce } from "@ember/runloop";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
const ACTIONS = ["delete", "delete_replies", "edit", "none"];
export default Ember.Component.extend({
export default Component.extend({
postId: null,
postAction: null,
postEdit: null,
@ -14,7 +17,7 @@ export default Ember.Component.extend({
});
},
editing: Ember.computed.equal("postAction", "edit"),
editing: equal("postAction", "edit"),
actions: {
penaltyChanged() {
@ -22,7 +25,7 @@ export default Ember.Component.extend({
// If we switch to edit mode, jump to the edit textarea
if (postAction === "edit") {
Ember.run.scheduleOnce("afterRender", () => {
scheduleOnce("afterRender", () => {
let elem = this.element;
let body = elem.closest(".modal-body");
body.scrollTop(body.height());

View File

@ -1,8 +1,10 @@
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
import { default as computed } from "ember-addons/ember-computed-decorators";
import { fmt } from "discourse/lib/computed";
import Permalink from "admin/models/permalink";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["permalink-form"],
formSubmitted: false,
permalinkType: "topic_id",
@ -19,7 +21,7 @@ export default Ember.Component.extend({
},
focusPermalink() {
Ember.run.schedule("afterRender", () =>
schedule("afterRender", () =>
this.element.querySelector(".permalink-url").focus()
);
},
@ -68,7 +70,7 @@ export default Ember.Component.extend({
didInsertElement() {
this._super(...arguments);
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
$(this.element.querySelector(".external-url")).keydown(e => {
// enter key
if (e.keyCode === 13) {

View File

@ -1,4 +1,5 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
actions: {
onChange(value) {
this.applyFilter(this.get("filter.id"), value);

View File

@ -1,3 +1,6 @@
import { schedule } from "@ember/runloop";
import { later } from "@ember/runloop";
import Component from "@ember/component";
import { iconHTML } from "discourse-common/lib/icon-library";
import { bufferedRender } from "discourse-common/lib/buffered-render";
import {
@ -17,7 +20,7 @@ import {
uploadText="UPLOAD"
}}
**/
export default Ember.Component.extend(
export default Component.extend(
bufferedRender({
tagName: "button",
classNames: ["btn", "ru"],
@ -44,18 +47,16 @@ export default Ember.Component.extend(
this.resumable.upload();
// mark as uploading
Ember.run.later(() => this.set("isUploading", true));
later(() => this.set("isUploading", true));
});
this.resumable.on("fileProgress", file => {
// update progress
Ember.run.later(() =>
this.set("progress", parseInt(file.progress() * 100, 10))
);
later(() => this.set("progress", parseInt(file.progress() * 100, 10)));
});
this.resumable.on("fileSuccess", file => {
Ember.run.later(() => {
later(() => {
// mark as not uploading anymore
this._reset();
@ -65,7 +66,7 @@ export default Ember.Component.extend(
});
this.resumable.on("fileError", (file, message) => {
Ember.run.later(() => {
later(() => {
// mark as not uploading anymore
this._reset();
@ -77,7 +78,7 @@ export default Ember.Component.extend(
@on("didInsertElement")
_assignBrowse() {
Ember.run.schedule("afterRender", () =>
schedule("afterRender", () =>
this.resumable.assignBrowse($(this.element))
);
},
@ -116,7 +117,7 @@ export default Ember.Component.extend(
click() {
if (this.isUploading) {
this.resumable.cancel();
Ember.run.later(() => this._reset());
later(() => this._reset());
return false;
} else {
return true;

View File

@ -1,9 +1,11 @@
import { or } from "@ember/object/computed";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["controls"],
buttonDisabled: Ember.computed.or("model.isSaving", "saveDisabled"),
buttonDisabled: or("model.isSaving", "saveDisabled"),
@computed("model.isSaving")
savingText(saving) {

View File

@ -1,3 +1,5 @@
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
/**
A form to create an IP address that will be blocked or whitelisted.
Example usage:
@ -13,7 +15,7 @@ import ScreenedIpAddress from "admin/models/screened-ip-address";
import computed from "ember-addons/ember-computed-decorators";
import { on } from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["screened-ip-address-form"],
formSubmitted: false,
actionName: "block",
@ -61,7 +63,7 @@ export default Ember.Component.extend({
.then(result => {
this.setProperties({ ip_address: "", formSubmitted: false });
this.action(ScreenedIpAddress.create(result.screened_ip_address));
Ember.run.schedule("afterRender", () =>
schedule("afterRender", () =>
this.element.querySelector(".ip-address-input").focus()
);
})
@ -83,7 +85,7 @@ export default Ember.Component.extend({
@on("didInsertElement")
_init() {
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
$(this.element.querySelector(".ip-address-input")).keydown(e => {
if (e.keyCode === 13) {
this.send("submit");

View File

@ -1,6 +1,9 @@
import { isEmpty } from "@ember/utils";
import Component from "@ember/component";
import { on } from "ember-addons/ember-computed-decorators";
import { set } from "@ember/object";
export default Ember.Component.extend({
export default Component.extend({
classNameBindings: [":value-list", ":secret-value-list"],
inputDelimiter: null,
collection: null,
@ -42,7 +45,7 @@ export default Ember.Component.extend({
_checkInvalidInput(inputs) {
this.set("validationMessage", null);
for (let input of inputs) {
if (Ember.isEmpty(input) || input.includes("|")) {
if (isEmpty(input) || input.includes("|")) {
this.set(
"validationMessage",
I18n.t("admin.site_settings.secret_list.invalid_input")
@ -65,7 +68,7 @@ export default Ember.Component.extend({
_replaceValue(index, newValue, keyName) {
let item = this.collection[index];
Ember.set(item, keyName, newValue);
set(item, keyName, newValue);
this._saveValues();
},

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: ""
});

View File

@ -1,10 +1,15 @@
import Component from "@ember/component";
import BufferedContent from "discourse/mixins/buffered-content";
import SiteSetting from "admin/models/site-setting";
import SettingComponent from "admin/mixins/setting-component";
export default Ember.Component.extend(BufferedContent, SettingComponent, {
export default Component.extend(BufferedContent, SettingComponent, {
updateExistingUsers: null,
_save() {
const setting = this.buffered;
return SiteSetting.update(setting.get("setting"), setting.get("value"));
return SiteSetting.update(setting.get("setting"), setting.get("value"), {
updateExistingUsers: this.updateExistingUsers
});
}
});

View File

@ -1,10 +1,12 @@
import { isEmpty } from "@ember/utils";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
@computed("value")
enabled: {
get(value) {
if (Ember.isEmpty(value)) {
if (isEmpty(value)) {
return false;
}
return value.toString() === "true";

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
@computed("value")
selectedCategories: {
get(value) {

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
@computed()
groupChoices() {
return this.site.get("groups").map(g => {

View File

@ -0,0 +1,15 @@
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
export default Component.extend({
@computed("value")
selectedTags: {
get(value) {
return value.split("|");
},
set(value) {
this.set("value", value.join("|"));
return value;
}
}
});

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import showModal from "discourse/lib/show-modal";
export default Ember.Component.extend({
export default Component.extend({
actions: {
showUploadModal({ value, setting }) {
showModal("admin-uploaded-image-list", {

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import { on } from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["site-text"],
classNameBindings: ["siteText.overridden"],

View File

@ -1,6 +1,7 @@
import Component from "@ember/component";
import DiscourseURL from "discourse/lib/url";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["table", "staff-actions"],
willDestroyElement() {

View File

@ -1,3 +1,4 @@
export default Ember.Component.extend({
import Component from "@ember/component";
export default Component.extend({
tagName: ""
});

View File

@ -1,9 +1,11 @@
import { alias } from "@ember/object/computed";
import Component from "@ember/component";
import UploadMixin from "discourse/mixins/upload";
export default Ember.Component.extend(UploadMixin, {
export default Component.extend(UploadMixin, {
type: "csv",
uploadUrl: "/tags/upload",
addDisabled: Ember.computed.alias("uploading"),
addDisabled: alias("uploading"),
elementId: "tag-uploader",
validateUploadedFilesOptions() {

View File

@ -1,10 +1,11 @@
import Component from "@ember/component";
import BufferedContent from "discourse/mixins/buffered-content";
import SettingComponent from "admin/mixins/setting-component";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Component.extend(BufferedContent, SettingComponent, {
export default Component.extend(BufferedContent, SettingComponent, {
layoutName: "admin/templates/components/site-setting",
_save() {
return ajax(`/admin/themes/${this.model.id}/setting`, {
type: "PUT",
@ -12,6 +13,6 @@ export default Ember.Component.extend(BufferedContent, SettingComponent, {
name: this.setting.setting,
value: this.get("buffered.value")
}
}).catch(popupAjaxError);
});
}
});

View File

@ -1,11 +1,13 @@
import { alias } from "@ember/object/computed";
import Component from "@ember/component";
import BufferedContent from "discourse/mixins/buffered-content";
import SettingComponent from "admin/mixins/setting-component";
export default Ember.Component.extend(BufferedContent, SettingComponent, {
export default Component.extend(BufferedContent, SettingComponent, {
layoutName: "admin/templates/components/site-setting",
setting: Ember.computed.alias("translation"),
setting: alias("translation"),
type: "string",
settingName: Ember.computed.alias("translation.key"),
settingName: alias("translation.key"),
_save() {
return this.model.saveTranslation(

View File

@ -1,3 +1,6 @@
import { gt, and } from "@ember/object/computed";
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
import {
default as computed,
observes
@ -7,13 +10,13 @@ import { escape } from "pretty-text/sanitizer";
const MAX_COMPONENTS = 4;
export default Ember.Component.extend({
export default Component.extend({
childrenExpanded: false,
classNames: ["themes-list-item"],
classNameBindings: ["theme.selected:selected"],
hasComponents: Ember.computed.gt("children.length", 0),
displayComponents: Ember.computed.and("hasComponents", "theme.isActive"),
displayHasMore: Ember.computed.gt("theme.childThemes.length", MAX_COMPONENTS),
hasComponents: gt("children.length", 0),
displayComponents: and("hasComponents", "theme.isActive"),
displayHasMore: gt("theme.childThemes.length", MAX_COMPONENTS),
click(e) {
if (!$(e.target).hasClass("others-count")) {
@ -32,7 +35,7 @@ export default Ember.Component.extend({
},
scheduleAnimation() {
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
this.animate(true);
});
},

View File

@ -1,18 +1,20 @@
import { gt, equal } from "@ember/object/computed";
import Component from "@ember/component";
import { THEMES, COMPONENTS } from "admin/models/theme";
import { default as computed } from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
THEMES: THEMES,
COMPONENTS: COMPONENTS,
classNames: ["themes-list"],
hasThemes: Ember.computed.gt("themesList.length", 0),
hasActiveThemes: Ember.computed.gt("activeThemes.length", 0),
hasInactiveThemes: Ember.computed.gt("inactiveThemes.length", 0),
hasThemes: gt("themesList.length", 0),
hasActiveThemes: gt("activeThemes.length", 0),
hasInactiveThemes: gt("inactiveThemes.length", 0),
themesTabActive: Ember.computed.equal("currentTab", THEMES),
componentsTabActive: Ember.computed.equal("currentTab", COMPONENTS),
themesTabActive: equal("currentTab", THEMES),
componentsTabActive: equal("currentTab", COMPONENTS),
@computed("themes", "components", "currentTab")
themesList(themes, components) {

View File

@ -1,17 +1,20 @@
import { makeArray } from "discourse-common/lib/helpers";
import { empty, alias } from "@ember/object/computed";
import Component from "@ember/component";
import { on } from "ember-addons/ember-computed-decorators";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNameBindings: [":value-list"],
inputInvalid: Ember.computed.empty("newValue"),
inputInvalid: empty("newValue"),
inputDelimiter: null,
inputType: null,
newValue: "",
collection: null,
values: null,
noneKey: Ember.computed.alias("addKey"),
noneKey: alias("addKey"),
@on("didReceiveAttrs")
_setupCollection() {
@ -29,7 +32,7 @@ export default Ember.Component.extend({
@computed("choices.[]", "collection.[]")
filteredChoices(choices, collection) {
return Ember.makeArray(choices).filter(i => collection.indexOf(i) < 0);
return makeArray(choices).filter(i => collection.indexOf(i) < 0);
},
keyDown(event) {

View File

@ -1,3 +1,6 @@
import { isEmpty } from "@ember/utils";
import { schedule } from "@ember/runloop";
import Component from "@ember/component";
import WatchedWord from "admin/models/watched-word";
import {
default as computed,
@ -5,7 +8,7 @@ import {
observes
} from "ember-addons/ember-computed-decorators";
export default Ember.Component.extend({
export default Component.extend({
classNames: ["watched-word-form"],
formSubmitted: false,
actionKey: null,
@ -21,7 +24,7 @@ export default Ember.Component.extend({
@observes("word")
removeMessage() {
if (this.showMessage && !Ember.isEmpty(this.word)) {
if (this.showMessage && !isEmpty(this.word)) {
this.set("showMessage", false);
}
},
@ -63,7 +66,7 @@ export default Ember.Component.extend({
message: I18n.t("admin.watched_words.form.success")
});
this.action(WatchedWord.create(result));
Ember.run.schedule("afterRender", () =>
schedule("afterRender", () =>
this.element.querySelector(".watched-word-input").focus()
);
})
@ -85,7 +88,7 @@ export default Ember.Component.extend({
@on("didInsertElement")
_init() {
Ember.run.schedule("afterRender", () => {
schedule("afterRender", () => {
$(this.element.querySelector(".watched-word-input")).keydown(e => {
if (e.keyCode === 13) {
this.send("submit");

View File

@ -1,11 +1,13 @@
import { alias } from "@ember/object/computed";
import Component from "@ember/component";
import computed from "ember-addons/ember-computed-decorators";
import UploadMixin from "discourse/mixins/upload";
export default Ember.Component.extend(UploadMixin, {
export default Component.extend(UploadMixin, {
type: "txt",
classNames: "watched-words-uploader",
uploadUrl: "/admin/logs/watched_words/upload",
addDisabled: Ember.computed.alias("uploading"),
addDisabled: alias("uploading"),
validateUploadedFilesOptions() {
return { skipValidation: true };

View File

@ -0,0 +1,13 @@
import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Controller.extend({
actions: {
revokeKey(key) {
key.revoke().catch(popupAjaxError);
},
undoRevokeKey(key) {
key.undoRevoke().catch(popupAjaxError);
}
}
});

View File

@ -0,0 +1,39 @@
import { default as computed } from "ember-addons/ember-computed-decorators";
import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Controller.extend({
userModes: [
{ id: "all", name: I18n.t("admin.api.all_users") },
{ id: "single", name: I18n.t("admin.api.single_user") }
],
@computed("userMode")
showUserSelector(mode) {
return mode === "single";
},
@computed("model.description", "model.username", "userMode")
saveDisabled(description, username, userMode) {
if (Ember.isBlank(description)) return true;
if (userMode === "single" && Ember.isBlank(username)) return true;
return false;
},
actions: {
changeUserMode(value) {
if (value === "all") {
this.model.set("username", null);
}
this.set("userMode", value);
},
save() {
this.model
.save()
.then(() => {
this.transitionToRoute("adminApiKeys.show", this.model.id);
})
.catch(popupAjaxError);
}
}
});

View File

@ -0,0 +1,54 @@
import { bufferedProperty } from "discourse/mixins/buffered-content";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { empty } from "@ember/object/computed";
export default Ember.Controller.extend(bufferedProperty("model"), {
isNew: empty("model.id"),
actions: {
saveDescription() {
const buffered = this.buffered;
const attrs = buffered.getProperties("description");
this.model
.save(attrs)
.then(() => {
this.set("editingDescription", false);
this.rollbackBuffer();
})
.catch(popupAjaxError);
},
cancel() {
const id = this.get("userField.id");
if (Ember.isEmpty(id)) {
this.destroyAction(this.userField);
} else {
this.rollbackBuffer();
this.set("editing", false);
}
},
editDescription() {
this.toggleProperty("editingDescription");
if (!this.editingDescription) {
this.rollbackBuffer();
}
},
revokeKey(key) {
key.revoke().catch(popupAjaxError);
},
deleteKey(key) {
key
.destroyRecord()
.then(() => this.transitionToRoute("adminApiKeys.index"))
.catch(popupAjaxError);
},
undoRevokeKey(key) {
key.undoRevoke().catch(popupAjaxError);
}
}
});

View File

@ -1,41 +0,0 @@
import ApiKey from "admin/models/api-key";
import { default as computed } from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend({
@computed("model.[]")
hasMasterKey(model) {
return !!model.findBy("user", null);
},
actions: {
generateMasterKey() {
ApiKey.generateMasterKey().then(key => this.model.pushObject(key));
},
regenerateKey(key) {
bootbox.confirm(
I18n.t("admin.api.confirm_regen"),
I18n.t("no_value"),
I18n.t("yes_value"),
result => {
if (result) {
key.regenerate();
}
}
);
},
revokeKey(key) {
bootbox.confirm(
I18n.t("admin.api.confirm_revoke"),
I18n.t("no_value"),
I18n.t("yes_value"),
result => {
if (result) {
key.revoke().then(() => this.model.removeObject(key));
}
}
);
}
}
});

View File

@ -1,13 +1,16 @@
import { alias, equal } from "@ember/object/computed";
import { inject } from "@ember/controller";
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import { default as computed } from "ember-addons/ember-computed-decorators";
import { setting, i18n } from "discourse/lib/computed";
export default Ember.Controller.extend({
adminBackups: Ember.inject.controller(),
status: Ember.computed.alias("adminBackups.model"),
export default Controller.extend({
adminBackups: inject(),
status: alias("adminBackups.model"),
uploadLabel: i18n("admin.backups.upload.label"),
backupLocation: setting("backup_location"),
localBackupStorage: Ember.computed.equal("backupLocation", "local"),
localBackupStorage: equal("backupLocation", "local"),
@computed("status.allowRestore", "status.isOperationRunning")
restoreTitle(allowRestore, isOperationRunning) {

View File

@ -1,6 +1,9 @@
export default Ember.Controller.extend({
adminBackups: Ember.inject.controller(),
status: Ember.computed.alias("adminBackups.model"),
import { alias } from "@ember/object/computed";
import { inject } from "@ember/controller";
import Controller from "@ember/controller";
export default Controller.extend({
adminBackups: inject(),
status: alias("adminBackups.model"),
init() {
this._super(...arguments);

View File

@ -1,9 +1,11 @@
export default Ember.Controller.extend({
noOperationIsRunning: Ember.computed.not("model.isOperationRunning"),
rollbackEnabled: Ember.computed.and(
import { not, and } from "@ember/object/computed";
import Controller from "@ember/controller";
export default Controller.extend({
noOperationIsRunning: not("model.isOperationRunning"),
rollbackEnabled: and(
"model.canRollback",
"model.restoreEnabled",
"noOperationIsRunning"
),
rollbackDisabled: Ember.computed.not("rollbackEnabled")
rollbackDisabled: not("rollbackEnabled")
});

View File

@ -1,21 +1,22 @@
import { alias } from "@ember/object/computed";
import { inject } from "@ember/controller";
import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import { propertyNotEqual } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend(bufferedProperty("model"), {
adminBadges: Ember.inject.controller(),
export default Controller.extend(bufferedProperty("model"), {
adminBadges: inject(),
saving: false,
savingStatus: "",
badgeTypes: Ember.computed.alias("adminBadges.badgeTypes"),
badgeGroupings: Ember.computed.alias("adminBadges.badgeGroupings"),
badgeTriggers: Ember.computed.alias("adminBadges.badgeTriggers"),
protectedSystemFields: Ember.computed.alias(
"adminBadges.protectedSystemFields"
),
badgeTypes: alias("adminBadges.badgeTypes"),
badgeGroupings: alias("adminBadges.badgeGroupings"),
badgeTriggers: alias("adminBadges.badgeTriggers"),
protectedSystemFields: alias("adminBadges.protectedSystemFields"),
readOnly: Ember.computed.alias("buffered.system"),
readOnly: alias("buffered.system"),
showDisplayName: propertyNotEqual("name", "displayName"),
@computed("model.query", "buffered.query")

View File

@ -1 +1,2 @@
export default Ember.Controller.extend();
import Controller from "@ember/controller";
export default Controller.extend();

View File

@ -1,6 +1,8 @@
import { later } from "@ember/runloop";
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend({
export default Controller.extend({
@computed("model.colors", "onlyOverridden")
colors(allColors, onlyOverridden) {
if (onlyOverridden) {
@ -40,7 +42,7 @@ export default Ember.Controller.extend({
);
}
Ember.run.later(() => {
later(() => {
this.set("model.savingStatus", null);
}, 2000);

View File

@ -1,7 +1,9 @@
import EmberObject from "@ember/object";
import Controller from "@ember/controller";
import showModal from "discourse/lib/show-modal";
import { default as computed } from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend({
export default Controller.extend({
@computed("model.@each.id")
baseColorScheme() {
return this.model.findBy("is_base", true);
@ -14,7 +16,7 @@ export default Ember.Controller.extend({
@computed("baseColorScheme")
baseColors(baseColorScheme) {
const baseColorsHash = Ember.Object.create({});
const baseColorsHash = EmberObject.create({});
baseColorScheme.get("colors").forEach(color => {
baseColorsHash.set(color.get("name"), color);
});

View File

@ -1,6 +1,7 @@
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend({
export default Controller.extend({
@computed("model.isSaving")
saveButtonText(isSaving) {
return isSaving ? I18n.t("saving") : I18n.t("admin.customize.save");

View File

@ -1,8 +1,9 @@
import Controller from "@ember/controller";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import computed from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend(bufferedProperty("emailTemplate"), {
export default Controller.extend(bufferedProperty("emailTemplate"), {
saved: false,
@computed("buffered.body", "buffered.subject")

View File

@ -1,6 +1,8 @@
export default Ember.Controller.extend({
import { sort } from "@ember/object/computed";
import Controller from "@ember/controller";
export default Controller.extend({
emailTemplates: null,
sortedTemplates: Ember.computed.sort("emailTemplates", "titleSorting"),
sortedTemplates: sort("emailTemplates", "titleSorting"),
init() {
this._super(...arguments);

View File

@ -1,12 +1,14 @@
import { not } from "@ember/object/computed";
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import { propertyEqual } from "discourse/lib/computed";
export default Ember.Controller.extend(bufferedProperty("model"), {
export default Controller.extend(bufferedProperty("model"), {
saved: false,
isSaving: false,
saveDisabled: propertyEqual("model.robots_txt", "buffered.robots_txt"),
resetDisbaled: Ember.computed.not("model.overridden"),
resetDisbaled: not("model.overridden"),
actions: {
save() {

View File

@ -1,7 +1,8 @@
import Controller from "@ember/controller";
import { url } from "discourse/lib/computed";
import { default as computed } from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend({
export default Controller.extend({
section: null,
currentTarget: 0,
maximized: false,

View File

@ -1,3 +1,6 @@
import { makeArray } from "discourse-common/lib/helpers";
import { empty, notEmpty, match } from "@ember/object/computed";
import Controller from "@ember/controller";
import { default as computed } from "ember-addons/ember-computed-decorators";
import { url } from "discourse/lib/computed";
import { popupAjaxError } from "discourse/lib/ajax-error";
@ -7,10 +10,10 @@ import { THEMES, COMPONENTS } from "admin/models/theme";
const THEME_UPLOAD_VAR = 2;
export default Ember.Controller.extend({
export default Controller.extend({
downloadUrl: url("model.id", "/admin/customize/themes/%@/export"),
previewUrl: url("model.id", "/admin/themes/%@/preview"),
addButtonDisabled: Ember.computed.empty("selectedChildThemeId"),
addButtonDisabled: empty("selectedChildThemeId"),
editRouteName: "adminCustomizeThemes.edit",
@computed("model.editedFields")
@ -79,14 +82,14 @@ export default Ember.Controller.extend({
return settings.map(setting => ThemeSettings.create(setting));
},
hasSettings: Ember.computed.notEmpty("settings"),
hasSettings: notEmpty("settings"),
@computed("model.translations")
translations(translations) {
return translations.map(setting => ThemeSettings.create(setting));
},
hasTranslations: Ember.computed.notEmpty("translations"),
hasTranslations: notEmpty("translations"),
@computed("model.remoteError", "updatingRemote")
showRemoteError(errorMessage, updating) {
@ -124,8 +127,8 @@ export default Ember.Controller.extend({
});
this.get("parentController.model.content").forEach(theme => {
const children = Ember.makeArray(theme.get("childThemes"));
const rawChildren = Ember.makeArray(theme.get("child_themes"));
const children = makeArray(theme.get("childThemes"));
const rawChildren = makeArray(theme.get("child_themes"));
const index = children ? children.indexOf(model) : -1;
if (index > -1) {
children.splice(index, 1);
@ -147,10 +150,7 @@ export default Ember.Controller.extend({
"scss"
);
},
sourceIsHttp: Ember.computed.match(
"model.remote_theme.remote_url",
/^http(s)?:\/\//
),
sourceIsHttp: match("model.remote_theme.remote_url", /^http(s)?:\/\//),
actions: {
updateToLatest() {
this.set("updatingRemote", true);

View File

@ -1,7 +1,8 @@
import Controller from "@ember/controller";
import { default as computed } from "ember-addons/ember-computed-decorators";
import { THEMES } from "admin/models/theme";
export default Ember.Controller.extend({
export default Controller.extend({
currentTab: THEMES,
@computed("model", "model.@each.component")

View File

@ -1,3 +1,6 @@
import { makeArray } from "discourse-common/lib/helpers";
import { inject } from "@ember/controller";
import Controller from "@ember/controller";
import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
import AdminDashboard from "admin/models/admin-dashboard";
@ -6,16 +9,14 @@ import PeriodComputationMixin from "admin/mixins/period-computation";
function staticReport(reportType) {
return Ember.computed("reports.[]", function() {
return Ember.makeArray(this.reports).find(
report => report.type === reportType
);
return makeArray(this.reports).find(report => report.type === reportType);
});
}
export default Ember.Controller.extend(PeriodComputationMixin, {
export default Controller.extend(PeriodComputationMixin, {
isLoading: false,
dashboardFetchedAt: null,
exceptionController: Ember.inject.controller("exception"),
exceptionController: inject("exception"),
logSearchQueriesEnabled: setting("log_search_queries"),
basePath: Discourse.BaseUri,
@ -93,7 +94,7 @@ export default Ember.Controller.extend(PeriodComputationMixin, {
this.setProperties({
dashboardFetchedAt: new Date(),
model: adminDashboardModel,
reports: Ember.makeArray(adminDashboardModel.reports).map(x =>
reports: makeArray(adminDashboardModel.reports).map(x =>
Report.create(x)
)
});

View File

@ -1,7 +1,8 @@
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import PeriodComputationMixin from "admin/mixins/period-computation";
export default Ember.Controller.extend(PeriodComputationMixin, {
export default Controller.extend(PeriodComputationMixin, {
@computed
flagsStatusOptions() {
return {

View File

@ -1,7 +1,9 @@
import { debounce } from "@ember/runloop";
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
const { get } = Ember;
export default Ember.Controller.extend({
export default Controller.extend({
filter: null,
@computed("model.[]", "filter")
@ -20,7 +22,7 @@ export default Ember.Controller.extend({
actions: {
filterReports(filter) {
Ember.run.debounce(this, this._performFiltering, filter, 250);
debounce(this, this._performFiltering, filter, 250);
}
},

View File

@ -1,3 +1,5 @@
import { inject } from "@ember/controller";
import Controller from "@ember/controller";
import { setting } from "discourse/lib/computed";
import computed from "ember-addons/ember-computed-decorators";
import AdminDashboard from "admin/models/admin-dashboard";
@ -5,10 +7,10 @@ import VersionCheck from "admin/models/version-check";
const PROBLEMS_CHECK_MINUTES = 1;
export default Ember.Controller.extend({
export default Controller.extend({
isLoading: false,
dashboardFetchedAt: null,
exceptionController: Ember.inject.controller("exception"),
exceptionController: inject("exception"),
showVersionChecks: setting("version_checks"),
@computed("problems.length")

View File

@ -1,7 +1,8 @@
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Controller.extend({
export default Controller.extend({
email: null,
text: null,
elided: null,

View File

@ -1,11 +1,13 @@
import { empty } from "@ember/object/computed";
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
export default Ember.Controller.extend({
export default Controller.extend({
/**
Is the "send test email" button disabled?
@property sendTestEmailDisabled
**/
sendTestEmailDisabled: Ember.computed.empty("testEmailAddress"),
sendTestEmailDisabled: empty("testEmailAddress"),
/**
Clears the 'sentTestEmail' property on successful send.

View File

@ -1,6 +1,7 @@
import Controller from "@ember/controller";
import EmailLog from "admin/models/email-log";
export default Ember.Controller.extend({
export default Controller.extend({
loading: false,
loadLogs(sourceModel, loadMore) {

View File

@ -1,14 +1,16 @@
import { empty, or, notEmpty } from "@ember/object/computed";
import Controller from "@ember/controller";
import EmailPreview from "admin/models/email-preview";
import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Controller.extend({
export default Controller.extend({
username: null,
lastSeen: null,
emailEmpty: Ember.computed.empty("email"),
sendEmailDisabled: Ember.computed.or("emailEmpty", "sendingEmail"),
showSendEmailForm: Ember.computed.notEmpty("model.html_content"),
htmlEmpty: Ember.computed.empty("model.html_content"),
emailEmpty: empty("email"),
sendEmailDisabled: or("emailEmpty", "sendingEmail"),
showSendEmailForm: notEmpty("model.html_content"),
htmlEmpty: empty("model.html_content"),
actions: {
refresh() {

View File

@ -1,7 +1,8 @@
import Controller from "@ember/controller";
import computed from "ember-addons/ember-computed-decorators";
import { popupAjaxError } from "discourse/lib/ajax-error";
export default Ember.Controller.extend({
export default Controller.extend({
saved: false,
embedding: null,

View File

@ -1,6 +1,9 @@
import { sort } from "@ember/object/computed";
import EmberObject from "@ember/object";
import Controller from "@ember/controller";
import { ajax } from "discourse/lib/ajax";
export default Ember.Controller.extend({
sortedEmojis: Ember.computed.sort("model", "emojiSorting"),
export default Controller.extend({
sortedEmojis: sort("model", "emojiSorting"),
init() {
this._super(...arguments);
@ -11,7 +14,7 @@ export default Ember.Controller.extend({
actions: {
emojiUploaded(emoji) {
emoji.url += "?t=" + new Date().getTime();
this.model.pushObject(Ember.Object.create(emoji));
this.model.pushObject(EmberObject.create(emoji));
},
destroy(emoji) {

View File

@ -1,8 +1,9 @@
import Controller from "@ember/controller";
import { exportEntity } from "discourse/lib/export-csv";
import { outputExportResult } from "discourse/lib/export-result";
import ScreenedEmail from "admin/models/screened-email";
export default Ember.Controller.extend({
export default Controller.extend({
loading: false,
actions: {

View File

@ -1,9 +1,10 @@
import Controller from "@ember/controller";
import debounce from "discourse/lib/debounce";
import { outputExportResult } from "discourse/lib/export-result";
import { exportEntity } from "discourse/lib/export-csv";
import ScreenedIpAddress from "admin/models/screened-ip-address";
export default Ember.Controller.extend({
export default Controller.extend({
loading: false,
filter: null,
savedIpAddress: null,

View File

@ -1,8 +1,9 @@
import Controller from "@ember/controller";
import { exportEntity } from "discourse/lib/export-csv";
import { outputExportResult } from "discourse/lib/export-result";
import ScreenedUrl from "admin/models/screened-url";
export default Ember.Controller.extend({
export default Controller.extend({
loading: false,
show() {

View File

@ -1,3 +1,7 @@
import { gt } from "@ember/object/computed";
import EmberObject from "@ember/object";
import { scheduleOnce } from "@ember/runloop";
import Controller from "@ember/controller";
import { exportEntity } from "discourse/lib/export-csv";
import { outputExportResult } from "discourse/lib/export-result";
import {
@ -5,10 +9,10 @@ import {
on
} from "ember-addons/ember-computed-decorators";
export default Ember.Controller.extend({
export default Controller.extend({
model: null,
filters: null,
filtersExists: Ember.computed.gt("filterCount", 0),
filtersExists: gt("filterCount", 0),
userHistoryActions: null,
@computed("filters.action_name")
@ -19,14 +23,14 @@ export default Ember.Controller.extend({
@on("init")
resetFilters() {
this.setProperties({
model: Ember.Object.create({ loadingMore: true }),
filters: Ember.Object.create()
model: EmberObject.create({ loadingMore: true }),
filters: EmberObject.create()
});
this.scheduleRefresh();
},
_changeFilters(props) {
this.set("model", Ember.Object.create({ loadingMore: true }));
this.set("model", EmberObject.create({ loadingMore: true }));
this.filters.setProperties(props);
this.scheduleRefresh();
},
@ -66,7 +70,7 @@ export default Ember.Controller.extend({
},
scheduleRefresh() {
Ember.run.scheduleOnce("afterRender", this, this._refresh);
scheduleOnce("afterRender", this, this._refresh);
},
actions: {

View File

@ -1,7 +1,8 @@
import Controller from "@ember/controller";
import debounce from "discourse/lib/debounce";
import Permalink from "admin/models/permalink";
export default Ember.Controller.extend({
export default Controller.extend({
loading: false,
filter: null,

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