mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-15 04:53:00 +08:00
💋 Sync 2026-11-02 01:02:56
This commit is contained in:
1 parent
d97dc35e3d
commit
2f941f0ffb
48 files changed
+4891
-1002
No files matched your search
@@ -0,0 +1,101 @@
|
||||
'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
|
||||
])
|
||||
]);
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user