mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-14 20:48:17 +08:00
102 lines
2.7 KiB
JavaScript
102 lines
2.7 KiB
JavaScript
'use strict';
|
|
'require view';
|
|
'require rpc';
|
|
'require poll';
|
|
'require ui';
|
|
'require dom';
|
|
|
|
var callGetLogs = rpc.declare({
|
|
object: 'luci.cf-optimizer',
|
|
method: 'get_logs'
|
|
});
|
|
|
|
var callClearLogs = rpc.declare({
|
|
object: 'luci.cf-optimizer',
|
|
method: 'clear_logs'
|
|
});
|
|
|
|
return view.extend({
|
|
handleSaveApply: null,
|
|
handleSave: null,
|
|
handleReset: null,
|
|
|
|
load: function() {
|
|
return callGetLogs();
|
|
},
|
|
|
|
handleClearLogs: function(ev) {
|
|
return callClearLogs().then(function() {
|
|
var textarea = document.getElementById('cf-log-textarea');
|
|
if (textarea) textarea.value = '';
|
|
ui.addNotification(null, E('p', {}, _('日志已清空')), 'info');
|
|
}).catch(function(e) {
|
|
ui.addNotification(null, E('p', {}, e.message));
|
|
});
|
|
},
|
|
|
|
render: function(data) {
|
|
data = data || {};
|
|
var lines = Array.isArray(data.logs) ? data.logs : [];
|
|
var logText = lines.join('\n');
|
|
|
|
var textarea = E('textarea', {
|
|
'id': 'cf-log-textarea',
|
|
'class': 'cbi-input-textarea',
|
|
'style': 'width: 100%; height: 480px; font-family: monospace; font-size: 12px; line-height: 1.5; resize: vertical; box-sizing: border-box; padding: 10px; border-radius: 4px;',
|
|
'readonly': 'readonly',
|
|
'wrap': 'off'
|
|
}, logText);
|
|
|
|
// 默认滚动到底部
|
|
setTimeout(function() {
|
|
textarea.scrollTop = textarea.scrollHeight;
|
|
}, 100);
|
|
|
|
var autoRefreshCheckbox = E('input', {
|
|
'type': 'checkbox',
|
|
'id': 'cf-auto-refresh',
|
|
'checked': 'checked',
|
|
'style': 'margin-right: 6px; vertical-align: middle;'
|
|
});
|
|
|
|
var controls = E('div', {
|
|
'style': 'display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;'
|
|
}, [
|
|
E('label', { 'style': 'cursor: pointer; user-select: none; font-size: 13px;' }, [
|
|
autoRefreshCheckbox,
|
|
_('自动刷新 (每 4 秒)')
|
|
]),
|
|
E('button', {
|
|
'class': 'btn cbi-button cbi-button-remove',
|
|
'click': ui.createHandlerFn(this, 'handleClearLogs')
|
|
}, _('清空日志'))
|
|
]);
|
|
|
|
poll.add(function() {
|
|
var chk = document.getElementById('cf-auto-refresh');
|
|
if (!chk || !chk.checked) return;
|
|
|
|
return callGetLogs().then(function(res) {
|
|
res = res || {};
|
|
var ta = document.getElementById('cf-log-textarea');
|
|
if (ta && Array.isArray(res.logs)) {
|
|
var wasAtBottom = (ta.scrollHeight - ta.clientHeight <= ta.scrollTop + 50);
|
|
ta.value = res.logs.join('\n');
|
|
if (wasAtBottom) {
|
|
ta.scrollTop = ta.scrollHeight;
|
|
}
|
|
}
|
|
});
|
|
}, 4);
|
|
|
|
return E('div', { 'class': 'cbi-map' }, [
|
|
E('h2', {}, _('Cloudflare 优选加速') + ' - ' + _('运行日志')),
|
|
E('div', { 'class': 'cbi-map-descr' }, _('查看后台优选测速与 hosts 重载的实时运行记录。')),
|
|
E('fieldset', { 'class': 'cbi-section' }, [
|
|
controls,
|
|
textarea
|
|
])
|
|
]);
|
|
}
|
|
});
|