Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
1cf20ee5bd
commit
83ddda6df5
230
js/ui/webui/monitor.js
Normal file
230
js/ui/webui/monitor.js
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
/****************** MONITOR *******************/
|
||||||
|
/* Monitor logger with single command line */
|
||||||
|
|
||||||
|
Monitors = []
|
||||||
|
Monitor = {
|
||||||
|
index : 0,
|
||||||
|
create : function (options) {
|
||||||
|
var id = Monitor.index++;
|
||||||
|
var monitor = {
|
||||||
|
cell : 'MonitorWinOutput'+id,
|
||||||
|
input : 'MonitorWinInput'+id,
|
||||||
|
id : 'monitor'+id,
|
||||||
|
index : id,
|
||||||
|
}
|
||||||
|
if (options.run) monitor.run=options.run;
|
||||||
|
monitor.add = function (line,cls) {
|
||||||
|
if (line[0]!='<') line=line.replace(/&/g,'&')
|
||||||
|
.replace(/</g,'<')
|
||||||
|
.replace(/>/g,'>')
|
||||||
|
.replace(/\n/g,'<br>');
|
||||||
|
var cell = $('#MonitorWinOutput'+id);
|
||||||
|
var hline = $('<span/>',{
|
||||||
|
class:'',
|
||||||
|
style:'width:100%;display:inline-block;'+(cls=='error'?'color:red;':cls=='warning'?'color:green;':'color:black;word-break: break-all;font-family: droidsansmonow01 , monospace !important;'),
|
||||||
|
});
|
||||||
|
hline.html(line);
|
||||||
|
hline.appendTo(cell);
|
||||||
|
if (UI('MonitorWinLog'+id).scrollAuto) $('div[view_id="MonitorWinLog'+id+'"]').scrollTop(1000000)
|
||||||
|
}
|
||||||
|
monitor.clear = function () {
|
||||||
|
var cell = $('#MonitorWinOutput'+id);
|
||||||
|
cell.empty();
|
||||||
|
}
|
||||||
|
function print() {
|
||||||
|
var msg=Array.prototype.slice.call(arguments);
|
||||||
|
function unwrap(str) {
|
||||||
|
if (str[0]=='"'||str[0]=="'") return str.slice(1,str.length-1);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
if (msg.length==1) msg=msg[0];
|
||||||
|
else if (msg.length==0) msg='undefined';
|
||||||
|
else {
|
||||||
|
msg=msg.map(inspect).map(unwrap).join(' ');
|
||||||
|
}
|
||||||
|
if (msg==undefined) msg='undefined';
|
||||||
|
if (typeof(msg) == 'object') {
|
||||||
|
msg=inspect(msg);
|
||||||
|
}
|
||||||
|
msg=String(msg);
|
||||||
|
monitor.add(msg!=undefined?msg:'undefined')
|
||||||
|
}
|
||||||
|
function printError() {
|
||||||
|
var msg=Array.prototype.slice.call(arguments);
|
||||||
|
function unwrap(str) {
|
||||||
|
if (str[0]=='"'||str[0]=="'") return str.slice(1,str.length-1);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
if (msg.length==1) msg=msg[0];
|
||||||
|
else if (msg.length==0) msg='undefined';
|
||||||
|
else {
|
||||||
|
msg=msg.map(inspect).map(unwrap).join(' ');
|
||||||
|
}
|
||||||
|
if (msg==undefined) msg='undefined';
|
||||||
|
if (typeof(msg) == 'object') {
|
||||||
|
msg=inspect(msg);
|
||||||
|
}
|
||||||
|
msg=String(msg);
|
||||||
|
|
||||||
|
monitor.add(msg,'error')
|
||||||
|
}
|
||||||
|
monitor.env = {
|
||||||
|
clear:clear,
|
||||||
|
print:print,
|
||||||
|
error:printError,
|
||||||
|
}
|
||||||
|
monitor.print=print;
|
||||||
|
monitor.error=printError;
|
||||||
|
|
||||||
|
Monitors[id]=monitor;
|
||||||
|
// Simple command line with history
|
||||||
|
setTimeout(function () {
|
||||||
|
var history = [],
|
||||||
|
historyIndex = 0,
|
||||||
|
command = $('#'+monitor.input),
|
||||||
|
prefix = $('<span/>',{style:'font-weight:bold;'}),
|
||||||
|
input = $('<input/>',{id:monitor.input+'-input',style:'padding-left:5px; width:80%;border:0px;'});
|
||||||
|
prefix.text(' >');
|
||||||
|
prefix.appendTo(command)
|
||||||
|
input.appendTo(command);
|
||||||
|
input.on('keydown',function (ev) {
|
||||||
|
switch (ev.keyCode) {
|
||||||
|
// Enter
|
||||||
|
case 13:
|
||||||
|
var line = input.val();
|
||||||
|
history.push(line);
|
||||||
|
historyIndex=history.length;
|
||||||
|
input.val('');
|
||||||
|
if (monitor.run) monitor.run(line,print,printError);
|
||||||
|
break;
|
||||||
|
// ArrowUp
|
||||||
|
case 38:
|
||||||
|
if (historyIndex>1) {
|
||||||
|
input.val(history[historyIndex-1]);
|
||||||
|
historyIndex--;
|
||||||
|
} else if (historyIndex) input.val(history[historyIndex-1]);
|
||||||
|
break;
|
||||||
|
// ArrowDown
|
||||||
|
case 40:
|
||||||
|
if (historyIndex<history.length) {
|
||||||
|
historyIndex++;
|
||||||
|
input.val(history[historyIndex-1]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},50)
|
||||||
|
return monitor;
|
||||||
|
},
|
||||||
|
default : function (options) {
|
||||||
|
options=options||{}
|
||||||
|
var monitor = Monitor.monitor({
|
||||||
|
label : options.label||'Monitor',
|
||||||
|
run : options.run,
|
||||||
|
hide : options.hide,
|
||||||
|
close : options.close,
|
||||||
|
});
|
||||||
|
if (options.actions) {
|
||||||
|
options.actions.widget(monitor);
|
||||||
|
monitor.on('close',options.actions.close);
|
||||||
|
}
|
||||||
|
return monitor;
|
||||||
|
},
|
||||||
|
exit : function (id) {
|
||||||
|
id=String(id).replace('monitor','');
|
||||||
|
if (!Monitors[id]) return;
|
||||||
|
delete Monitors[id];
|
||||||
|
},
|
||||||
|
monitor : function (options) {
|
||||||
|
// WEBUI API
|
||||||
|
var monitor = Monitor.create(options),
|
||||||
|
id = monitor.index,
|
||||||
|
label = options.label||('#'+id);
|
||||||
|
|
||||||
|
|
||||||
|
function collapse(mini) {
|
||||||
|
var container = $('[view_id=MonitorWin'+id+']'),
|
||||||
|
head = container.find('.webix_win_head');
|
||||||
|
if (mini && options.collapsed) {
|
||||||
|
return {width:head.width(),height:head.height()}
|
||||||
|
}
|
||||||
|
options.collapsed=!options.collapsed;
|
||||||
|
if (options.collapsed) {
|
||||||
|
options._height=container.height();
|
||||||
|
container.height(head.height());
|
||||||
|
} else container.height(options._height);
|
||||||
|
return options.collapsed?{width:head.width(),height:head.height()}:
|
||||||
|
{width:container.width(),height:container.height()};
|
||||||
|
}
|
||||||
|
var toolbar = [
|
||||||
|
{ view:"button", type:"icon", icon:"eraser", tooltip:'Clear', width:30, click:function () {
|
||||||
|
monitor.clear()
|
||||||
|
}},
|
||||||
|
{ view:"button", type:"icon", icon:"arrow-circle-down", tooltip:'Scroll Auto', id:'MonitorWinLogFilmBut'+id, width:30, click:function () {
|
||||||
|
UI('MonitorWinLog'+id).scrollAuto=!UI('MonitorWinLog'+id).scrollAuto;
|
||||||
|
if (UI('MonitorWinLog'+id).scrollAuto) this.define('icon','arrow-circle-down')
|
||||||
|
else this.define('icon','dot-circle-o');
|
||||||
|
this.refresh();
|
||||||
|
}},
|
||||||
|
{ view:"label", label:label, id:'MonitorWinLabel'+id, align:'right'},
|
||||||
|
{ view:"button", type:"icon", icon:"caret-down", tooltip:'Collapse Editor', width:30, click:function () {
|
||||||
|
collapse()
|
||||||
|
}},
|
||||||
|
{ view:"button", type:"icon", icon:"windows", tooltip:'Hide Edutor', width:30, click:function () {
|
||||||
|
if (options.hide!==false) window.hide();
|
||||||
|
}},
|
||||||
|
];
|
||||||
|
if (options.close!==false) toolbar.push({ view:"button", type:"icon", icon:"close", tooltip:'Kill', width:30, click:function () {
|
||||||
|
Monitor.exit(id);
|
||||||
|
window.close();
|
||||||
|
if (monitor.handlers.close) monitor.handlers.close();
|
||||||
|
}});
|
||||||
|
var window = webix.ui({
|
||||||
|
id:'MonitorWin'+id,
|
||||||
|
view:"window",
|
||||||
|
height:350,
|
||||||
|
width:600,
|
||||||
|
left:350, top:250,
|
||||||
|
move:true,
|
||||||
|
resize: true,
|
||||||
|
toFront:true,
|
||||||
|
css:'black_toolbar',
|
||||||
|
head: {
|
||||||
|
view:"toolbar",
|
||||||
|
cols: toolbar
|
||||||
|
},
|
||||||
|
body: {
|
||||||
|
id : 'MonitorWinLog'+id,
|
||||||
|
view : 'scrollview',
|
||||||
|
scroll : 'y',
|
||||||
|
body : {
|
||||||
|
id:'MonitorWinLogText'+id,
|
||||||
|
rows : [
|
||||||
|
{template:('<div id="MonitorWinOutput'+id+'" '+
|
||||||
|
'spellcheck="false" style="width:100%;font-family:mono; padding-bottom: 1em;">'), height:"auto", borderless:true},
|
||||||
|
{template:('<div id="MonitorWinInput'+id+'" '+
|
||||||
|
'spellcheck="false" style="font-family:mono;background-color:#fff; padding:5px; position:absolute; left:0; bottom:0; width:90%;">'), height:"auto", borderless:true},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
UI('MonitorWinLog'+id).scrollAuto=true;
|
||||||
|
window.show();
|
||||||
|
monitor.window=window;
|
||||||
|
monitor.collapse=collapse;
|
||||||
|
monitor.close = function () {
|
||||||
|
window.close();
|
||||||
|
Monitor.exit(id);
|
||||||
|
}
|
||||||
|
monitor.setLabel = function (label) {
|
||||||
|
UI('MonitorWinLabel'+id).setValue(label);
|
||||||
|
}
|
||||||
|
monitor.handlers=[];
|
||||||
|
monitor.on = function (ev,handler) {
|
||||||
|
monitor.handlers[ev]=handler;
|
||||||
|
}
|
||||||
|
return monitor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UI.Monitor=Monitor;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user