feat: lint-archive endpoint, UI result inline v1.3.38
This commit is contained in:
@@ -100,7 +100,7 @@
|
||||
<div class="nubes">NUBES</div>
|
||||
<div class="product">FISSION CONSOLE</div>
|
||||
</div>
|
||||
<div style="font-size:0.65rem; color:var(--text-secondary); margin-left:10px; align-self:center; opacity:0.7;">v1.3.36</div>
|
||||
<div style="font-size:0.65rem; color:var(--text-secondary); margin-left:10px; align-self:center; opacity:0.7;">v1.3.38</div>
|
||||
</div>
|
||||
<div class="row" style="margin:0;">
|
||||
<button class="btn ghost" onclick="reloadAll()">Refresh</button>
|
||||
@@ -228,7 +228,7 @@
|
||||
<div id="c-archive-area" style="display:none;">
|
||||
<input type="file" id="c-archive-file" accept=".zip" style="display:block; margin-bottom:8px; color:var(--text-primary);">
|
||||
<div style="display:flex; gap:6px; flex-wrap:wrap;">
|
||||
<button class="btn ghost" onclick="lintArchiveFile('c')">🔍 Проверить архив линтером</button>
|
||||
<button id="c-lint-btn" class="btn ghost" onclick="lintArchiveFile('c')">🔍 Проверка архива линтером</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="c-gen-prompt" style="display:none; margin-top:8px; display:none; gap:6px; align-items:center;">
|
||||
@@ -306,7 +306,7 @@
|
||||
<div id="e-archive-area" style="display:none;">
|
||||
<input type="file" id="e-archive-file" accept=".zip" style="display:block; margin-bottom:8px; color:var(--text-primary);">
|
||||
<div style="display:flex; gap:6px; flex-wrap:wrap;">
|
||||
<button class="btn ghost" onclick="lintArchiveFile('e')">🔍 Проверить архив линтером</button>
|
||||
<button id="e-lint-btn" class="btn ghost" onclick="lintArchiveFile('e')">🔍 Проверка архива линтером</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="e-ai-result"
|
||||
@@ -398,7 +398,7 @@
|
||||
</div>
|
||||
|
||||
<div class="actions" style="justify-content:space-between; align-items:center;">
|
||||
<span style="font-size:0.75rem; color:var(--text-secondary);">v1.3.36</span>
|
||||
<span style="font-size:0.75rem; color:var(--text-secondary);">v1.3.38</span>
|
||||
<button class="btn ghost" onclick="closeHelp()">Закрыть</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,15 +17,62 @@ function setCodeMode(prefix, mode) {
|
||||
if (btnArchive) btnArchive.style.opacity = isCode ? '0.5' : '1';
|
||||
}
|
||||
|
||||
// lintArchiveFile — заглушка линтера для архивов.
|
||||
// Реализация (распаковка + пофайловая проверка) добавляется позже.
|
||||
// lintArchiveFile — отправляет zip-архив на /console/api/ai/lint-archive,
|
||||
// показывает результат пофайлово в блоке {prefix}-ai-result рядом с кнопкой.
|
||||
function lintArchiveFile(prefix) {
|
||||
var input = document.getElementById(prefix + '-archive-file');
|
||||
var resEl = document.getElementById(prefix + '-ai-result');
|
||||
var btn = document.getElementById(prefix + '-lint-btn');
|
||||
function showRes(text, bg, color) {
|
||||
if (resEl) {
|
||||
resEl.style.display = 'block';
|
||||
resEl.style.background = bg;
|
||||
resEl.style.color = color;
|
||||
resEl.textContent = text;
|
||||
}
|
||||
}
|
||||
if (!input || !input.files || !input.files[0]) {
|
||||
showStatus('Выберите .zip файл', 'err');
|
||||
showRes('Выберите .zip файл', '#3a1a1a', '#f88');
|
||||
return;
|
||||
}
|
||||
showStatus('Линтинг архива — пока не реализован (скоро)', 'info');
|
||||
var file = input.files[0];
|
||||
if (file.size > 100 * 1024) {
|
||||
showRes('Архив слишком большой: максимум 100 KB', '#3a1a1a', '#f88');
|
||||
return;
|
||||
}
|
||||
if (btn) { btn.disabled = true; btn.textContent = '⏳ Проверяю…'; }
|
||||
showRes('Запускаю линтер…', 'var(--bg-alt)', 'var(--fg)');
|
||||
var fd = new FormData();
|
||||
fd.append('archive', file);
|
||||
fetch(API_BASE + '/ai/lint-archive', {
|
||||
method: 'POST',
|
||||
headers: authHeaders(),
|
||||
body: fd
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(data) {
|
||||
if (btn) { btn.disabled = false; btn.textContent = '🔍 Проверка архива линтером'; }
|
||||
if (data.error) {
|
||||
showRes('Ошибка: ' + data.error, '#3a1a1a', '#f88');
|
||||
return;
|
||||
}
|
||||
var results = data.results || [];
|
||||
if (results.length === 0) {
|
||||
showRes('Нет поддерживаемых файлов в архиве (.py, .js, .rb, .php)', '#3a2a00', '#ffa');
|
||||
return;
|
||||
}
|
||||
var ok = results.filter(function(r) { return r.ok; }).length;
|
||||
var fail = results.filter(function(r) { return !r.ok; }).length;
|
||||
var lines = results.map(function(r) {
|
||||
return (r.ok ? '✅ ' : '❌ ') + r.file + (r.output ? '\n ' + r.output : '');
|
||||
});
|
||||
var summary = ok + ' OK, ' + fail + ' ошибок\n\n' + lines.join('\n');
|
||||
showRes(summary, fail > 0 ? '#3a1a1a' : '#1a3a1a', fail > 0 ? '#f88' : '#8f8');
|
||||
})
|
||||
.catch(function(e) {
|
||||
if (btn) { btn.disabled = false; btn.textContent = '🔍 Проверка архива линтером'; }
|
||||
showRes('Ошибка сети: ' + e.message, '#3a2a00', '#ffa');
|
||||
});
|
||||
}
|
||||
|
||||
function parseMethods(v) {
|
||||
|
||||
Reference in New Issue
Block a user