discourse/app/assets/javascripts/admin/components/admin-backups-logs.js.es6

58 lines
1.8 KiB
Plaintext
Raw Normal View History

2015-08-10 17:11:27 -04:00
import debounce from 'discourse/lib/debounce';
2014-11-13 14:15:36 -05:00
import { renderSpinner } from 'discourse/helpers/loading-spinner';
import { escapeExpression } from 'discourse/lib/utilities';
import { bufferedRender } from 'discourse-common/lib/buffered-render';
2014-02-12 23:35:46 -05:00
export default Ember.Component.extend(bufferedRender({
2014-02-12 23:35:46 -05:00
classNames: ["admin-backups-logs"],
init() {
this._super();
this._reset();
},
2014-02-12 23:35:46 -05:00
_reset() {
2014-02-12 23:35:46 -05:00
this.setProperties({ formattedLogs: "", index: 0 });
},
2016-10-27 11:57:33 -04:00
_scrollDown() {
const $div = this.$()[0];
$div.scrollTop = $div.scrollHeight;
},
2015-08-10 17:11:27 -04:00
_updateFormattedLogs: debounce(function() {
const logs = this.get("logs");
2014-02-12 23:35:46 -05: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
let formattedLogs = this.get("formattedLogs");
for (let i = this.get("index"), length = logs.length; i < length; i++) {
const date = logs[i].get("timestamp"),
message = escapeExpression(logs[i].get("message"));
2014-02-12 23:35:46 -05:00
formattedLogs += "[" + date + "] " + message + "\n";
}
// update the formatted logs & cache index
this.setProperties({ formattedLogs: formattedLogs, index: logs.length });
// force rerender
this.rerenderBuffer();
2014-02-12 23:35:46 -05:00
}
2016-10-27 11:57:33 -04:00
Ember.run.scheduleOnce('afterRender', this, this._scrollDown);
}, 150).observes("logs.[]").on('init'),
2014-02-12 23:35:46 -05:00
buildBuffer(buffer) {
const formattedLogs = this.get("formattedLogs");
2014-02-12 23:35:46 -05: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
if (this.get("status.isOperationRunning")) {
2014-11-13 14:15:36 -05:00
buffer.push(renderSpinner('small'));
2014-02-12 23:35:46 -05:00
}
2016-10-27 11:57:33 -04:00
}
}));