2015-08-11 05:11:27 +08:00
|
|
|
import debounce from 'discourse/lib/debounce';
|
2014-11-14 03:15:36 +08:00
|
|
|
import { renderSpinner } from 'discourse/helpers/loading-spinner';
|
2014-02-13 12:35:46 +08:00
|
|
|
|
2015-08-12 00:27:07 +08:00
|
|
|
export default Ember.View.extend({
|
2014-02-13 12:35:46 +08:00
|
|
|
classNames: ["admin-backups-logs"],
|
|
|
|
|
|
|
|
_initialize: function() { this._reset(); }.on("init"),
|
|
|
|
|
2015-08-07 23:34:58 +08:00
|
|
|
_reset() {
|
2014-02-13 12:35:46 +08:00
|
|
|
this.setProperties({ formattedLogs: "", index: 0 });
|
|
|
|
},
|
|
|
|
|
2015-08-11 05:11:27 +08:00
|
|
|
_updateFormattedLogs: debounce(function() {
|
2015-08-07 23:34:58 +08:00
|
|
|
const logs = this.get("controller.model");
|
2014-02-13 12:35:46 +08:00
|
|
|
if (logs.length === 0) {
|
|
|
|
this._reset(); // reset the cached logs whenever the model is reset
|
|
|
|
} else {
|
|
|
|
// do the log formatting only once for HELLish performance
|
2015-08-07 23:34:58 +08:00
|
|
|
let formattedLogs = this.get("formattedLogs");
|
|
|
|
for (let i = this.get("index"), length = logs.length; i < length; i++) {
|
|
|
|
const date = logs[i].get("timestamp"),
|
2015-11-25 05:07:47 +08:00
|
|
|
message = Discourse.Utilities.escapeExpression(logs[i].get("message"));
|
2014-02-13 12:35:46 +08:00
|
|
|
formattedLogs += "[" + date + "] " + message + "\n";
|
|
|
|
}
|
|
|
|
// update the formatted logs & cache index
|
|
|
|
this.setProperties({ formattedLogs: formattedLogs, index: logs.length });
|
|
|
|
// force rerender
|
|
|
|
this.rerender();
|
|
|
|
}
|
2015-02-09 23:53:28 +08:00
|
|
|
}, 150).observes("controller.model.@each"),
|
2014-02-13 12:35:46 +08:00
|
|
|
|
2015-08-07 23:34:58 +08:00
|
|
|
render(buffer) {
|
|
|
|
const formattedLogs = this.get("formattedLogs");
|
2014-02-13 12:35:46 +08:00
|
|
|
if (formattedLogs && formattedLogs.length > 0) {
|
|
|
|
buffer.push("<pre>");
|
|
|
|
buffer.push(formattedLogs);
|
|
|
|
buffer.push("</pre>");
|
|
|
|
} else {
|
|
|
|
buffer.push("<p>" + I18n.t("admin.backups.logs.none") + "</p>");
|
|
|
|
}
|
|
|
|
// add a loading indicator
|
2015-08-07 23:34:58 +08:00
|
|
|
if (this.get("controller.status.model.isOperationRunning")) {
|
2014-11-14 03:15:36 +08:00
|
|
|
buffer.push(renderSpinner('small'));
|
2014-02-13 12:35:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
_forceScrollToBottom: function() {
|
2015-08-07 23:34:58 +08:00
|
|
|
const $div = this.$()[0];
|
2014-02-13 12:35:46 +08:00
|
|
|
$div.scrollTop = $div.scrollHeight;
|
|
|
|
}.on("didInsertElement")
|
|
|
|
|
|
|
|
});
|