ui: harden logs and usage rendering
This commit is contained in:
+10
-5
@@ -54,6 +54,13 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
return date.toISOString().slice(11, 23);
|
return date.toISOString().slice(11, 23);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function element(tag, className, text) {
|
||||||
|
var node = document.createElement(tag);
|
||||||
|
if (className) node.className = className;
|
||||||
|
if (text !== undefined && text !== null) node.textContent = text;
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
function statusClass(statusCode) {
|
function statusClass(statusCode) {
|
||||||
if (!statusCode) {
|
if (!statusCode) {
|
||||||
return '';
|
return '';
|
||||||
@@ -106,11 +113,9 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
|
|
||||||
function renderEmpty(title, message) {
|
function renderEmpty(title, message) {
|
||||||
logList.innerHTML = '';
|
logList.innerHTML = '';
|
||||||
var empty = document.createElement('div');
|
var empty = element('div', 'empty-state');
|
||||||
empty.className = 'empty-state';
|
empty.appendChild(element('div', 'empty-state-title', title));
|
||||||
empty.innerHTML =
|
empty.appendChild(element('div', 'empty-state-text', message));
|
||||||
'<div class="empty-state-title">' + title + '</div>' +
|
|
||||||
'<div class="empty-state-text">' + message + '</div>';
|
|
||||||
logList.appendChild(empty);
|
logList.appendChild(empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+50
-24
@@ -33,6 +33,13 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
return workspace ? workspace.id : null;
|
return workspace ? workspace.id : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function element(tag, className, text) {
|
||||||
|
var node = document.createElement(tag);
|
||||||
|
if (className) node.className = className;
|
||||||
|
if (text !== undefined && text !== null) node.textContent = text;
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
function formatCount(value) {
|
function formatCount(value) {
|
||||||
return Number(value || 0).toLocaleString(currentLocale());
|
return Number(value || 0).toLocaleString(currentLocale());
|
||||||
}
|
}
|
||||||
@@ -196,19 +203,30 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
return normalized;
|
return normalized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildEmptyState(title, message, compact) {
|
||||||
|
var empty = element('div', 'empty-state');
|
||||||
|
if (compact) {
|
||||||
|
empty.style.padding = '0';
|
||||||
|
}
|
||||||
|
empty.appendChild(element('div', 'empty-state-title', title));
|
||||||
|
empty.appendChild(element('div', 'empty-state-text', message));
|
||||||
|
return empty;
|
||||||
|
}
|
||||||
|
|
||||||
function renderEmpty(title, message) {
|
function renderEmpty(title, message) {
|
||||||
chartWrap.innerHTML =
|
chartWrap.innerHTML = '';
|
||||||
'<div class="empty-state" style="width:100%;">' +
|
var chartEmpty = buildEmptyState(title, message, false);
|
||||||
'<div class="empty-state-title">' + title + '</div>' +
|
chartEmpty.style.width = '100%';
|
||||||
'<div class="empty-state-text">' + message + '</div>' +
|
chartWrap.appendChild(chartEmpty);
|
||||||
'</div>';
|
|
||||||
tableBody.innerHTML =
|
tableBody.innerHTML = '';
|
||||||
'<tr><td colspan="7" style="padding:24px;">' +
|
var row = document.createElement('tr');
|
||||||
'<div class="empty-state" style="padding:0;">' +
|
var cell = document.createElement('td');
|
||||||
'<div class="empty-state-title">' + title + '</div>' +
|
cell.colSpan = 7;
|
||||||
'<div class="empty-state-text">' + message + '</div>' +
|
cell.style.padding = '24px';
|
||||||
'</div>' +
|
cell.appendChild(buildEmptyState(title, message, true));
|
||||||
'</td></tr>';
|
row.appendChild(cell);
|
||||||
|
tableBody.appendChild(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderStats() {
|
function renderStats() {
|
||||||
@@ -249,11 +267,13 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
chartWrap.innerHTML = '';
|
chartWrap.innerHTML = '';
|
||||||
|
|
||||||
if (!timeline.length) {
|
if (!timeline.length) {
|
||||||
chartWrap.innerHTML =
|
var chartEmpty = buildEmptyState(
|
||||||
'<div class="empty-state" style="width:100%;">' +
|
tKey('usage.chart.empty.title'),
|
||||||
'<div class="empty-state-title">' + tKey('usage.chart.empty.title') + '</div>' +
|
tKey('usage.chart.empty.sub'),
|
||||||
'<div class="empty-state-text">' + tKey('usage.chart.empty.sub') + '</div>' +
|
false
|
||||||
'</div>';
|
);
|
||||||
|
chartEmpty.style.width = '100%';
|
||||||
|
chartWrap.appendChild(chartEmpty);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,13 +305,19 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
tableBody.innerHTML = '';
|
tableBody.innerHTML = '';
|
||||||
|
|
||||||
if (!operations.length) {
|
if (!operations.length) {
|
||||||
tableBody.innerHTML =
|
var row = document.createElement('tr');
|
||||||
'<tr><td colspan="7" style="padding:24px;">' +
|
var cell = document.createElement('td');
|
||||||
'<div class="empty-state" style="padding:0;">' +
|
cell.colSpan = 7;
|
||||||
'<div class="empty-state-title">' + tKey('usage.table.empty.title') + '</div>' +
|
cell.style.padding = '24px';
|
||||||
'<div class="empty-state-text">' + tKey('usage.table.empty.sub') + '</div>' +
|
cell.appendChild(
|
||||||
'</div>' +
|
buildEmptyState(
|
||||||
'</td></tr>';
|
tKey('usage.table.empty.title'),
|
||||||
|
tKey('usage.table.empty.sub'),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
);
|
||||||
|
row.appendChild(cell);
|
||||||
|
tableBody.appendChild(row);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user