fix: исправлены ошибки JavaScript с регулярными выражениями

- Исправлено экранирование в регулярных выражениях
- Исправлены шаблонные строки с неправильным экранированием
- Исправлена ошибка 'Invalid regular expression: missing'
- Исправлены проблемы с ANSI escape sequences
- Теперь переключение темы и отображение логов работают корректно
- Автор: Сергей Антропов (https://devops.org.ru)
This commit is contained in:
Сергей Антропов
2025-08-16 11:44:37 +03:00
parent 3654d6699e
commit e2d532c1f5

View File

@@ -236,7 +236,7 @@ function parsePrefixAndStrip(line){
} }
function ansiToHtml(text){ function ansiToHtml(text){
const ESC = '\\u001b['; const ESC = '\u001b[';
const parts = text.split(ESC); const parts = text.split(ESC);
if (parts.length === 1) return escapeHtml(text); if (parts.length === 1) return escapeHtml(text);
let html = escapeHtml(parts[0]); let html = escapeHtml(parts[0]);
@@ -360,8 +360,7 @@ function openWs(svc, panel){
ws.onclose = ()=> setWsState(Object.keys(state.open).length? 'on':'off'); ws.onclose = ()=> setWsState(Object.keys(state.open).length? 'on':'off');
ws.onerror = ()=> setWsState('err'); ws.onerror = ()=> setWsState('err');
ws.onmessage = (ev)=>{ ws.onmessage = (ev)=>{
const parts = (ev.data||'').split(/ const parts = (ev.data||'').split(/\r?\n/);
?
for (let i=0;i<parts.length;i++){ for (let i=0;i<parts.length;i++){
if (parts[i].length===0 && i===parts.length-1) continue; if (parts[i].length===0 && i===parts.length-1) continue;
// harvest instance ids if present // harvest instance ids if present
@@ -397,7 +396,7 @@ function openWs(svc, panel){
} }
function ensurePanel(svc){ function ensurePanel(svc){
function ensurePanel(svc){ let panel = els.grid.querySelector(`.panel[data-cid="${svc.id}"]`);
if (!panel){ if (!panel){
panel = panelTemplate(svc); panel = panelTemplate(svc);
els.grid.appendChild(panel); els.grid.appendChild(panel);
@@ -522,7 +521,7 @@ function openFanGroup(services){
ws.onclose = ()=> setWsState(Object.keys(state.open).length? 'on':'off'); ws.onclose = ()=> setWsState(Object.keys(state.open).length? 'on':'off');
ws.onerror = ()=> setWsState('err'); ws.onerror = ()=> setWsState('err');
ws.onmessage = (ev)=>{ ws.onmessage = (ev)=>{
ws.onmessage = (ev)=>{ const parts = (ev.data||'').split(/\r?\n/);
for (let i=0;i<parts.length;i++){ for (let i=0;i<parts.length;i++){
if (parts[i].length===0 && i===parts.length-1) continue; if (parts[i].length===0 && i===parts.length-1) continue;
const pr = parsePrefixAndStrip(parts[i]); const pr = parsePrefixAndStrip(parts[i]);
@@ -557,7 +556,7 @@ els.tail.onchange = ()=> {
Object.keys(state.open).forEach(id=>{ Object.keys(state.open).forEach(id=>{
const svc = state.services.find(s=> s.id===id); const svc = state.services.find(s=> s.id===id);
if (!svc) return; if (!svc) return;
if (!svc) return; const panel = els.grid.querySelector(`.panel[data-cid="${id}"]`);
if (!panel) return; if (!panel) return;
state.open[id].logEl.textContent=''; state.open[id].logEl.textContent='';
closeWs(id); openWs(svc, panel); closeWs(id); openWs(svc, panel);
@@ -583,7 +582,7 @@ window.addEventListener('keydown', (e)=>{
if (idx>=0 && idx<state.services.length-1) switchToSingle(state.services[idx+1]); if (idx>=0 && idx<state.services.length-1) switchToSingle(state.services[idx+1]);
} }
if (e.key.toLowerCase()==='m'){ if (e.key.toLowerCase()==='m'){
if (e.key.toLowerCase()==='m'){ const list = state.services.map(s=> `${s.id}:${s.service}`).join(', ');
const ans = prompt('IDs через запятую:\n'+list); const ans = prompt('IDs через запятую:\n'+list);
if (ans) openMulti(ans.split(',').map(x=>x.trim()).filter(Boolean)); if (ans) openMulti(ans.split(',').map(x=>x.trim()).filter(Boolean));
} }