feat: v1.3.68 — Info modal: copy buttons only on name/pkg/route, add curl copy field
This commit is contained in:
@@ -55,7 +55,7 @@ spec:
|
||||
serviceAccountName: fission-console
|
||||
containers:
|
||||
- name: console
|
||||
image: naeel/fission-console:v1.3.67
|
||||
image: naeel/fission-console:v1.3.68
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 8090
|
||||
|
||||
@@ -102,7 +102,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.67</div>
|
||||
<div style="font-size:0.65rem; color:var(--text-secondary); margin-left:10px; align-self:center; opacity:0.7;">v1.3.68</div>
|
||||
</div>
|
||||
<div class="row" style="margin:0;">
|
||||
<button class="btn ghost" onclick="reloadAll()">Refresh</button>
|
||||
@@ -485,7 +485,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.67</span>
|
||||
<span style="font-size:0.75rem; color:var(--text-secondary);">v1.3.68</span>
|
||||
<button class="btn ghost" onclick="closeHelp()">Закрыть</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+44
-23
@@ -193,33 +193,54 @@ function openInfo(name, btn) {
|
||||
return;
|
||||
}
|
||||
|
||||
// copyBtn — кнопка копирования конкретного значения в буфер.
|
||||
function copyBtn(val) {
|
||||
return val && val !== '-'
|
||||
? ' <button class="btn ghost" style="padding:1px 6px; font-size:11px;" onclick="navigator.clipboard.writeText(\'' + val.replace(/\\/g, '\\\\').replace(/'/g, "\\'") + '\')">📋</button>'
|
||||
: '';
|
||||
if (!val || val === '-') return '';
|
||||
var safe = val.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
||||
return ' <button class="btn ghost" style="padding:1px 6px; font-size:11px;" onclick="navigator.clipboard.writeText(\'' + safe + '\')">📋</button>';
|
||||
}
|
||||
|
||||
var rows = [
|
||||
['Имя', info.name],
|
||||
['Окружение', info.env],
|
||||
['Пакет', info.pkg],
|
||||
['Entrypoint', info.entrypoint],
|
||||
['Таймаут', info.timeout ? info.timeout + ' сек' : '-'],
|
||||
['Тип источника', info.sourceType === 'archive' ? '📦 archive' : '📝 code'],
|
||||
['Маршрут', info.route],
|
||||
['Методы', Array.isArray(info.methods) && info.methods.length ? info.methods.join(', ') : '-'],
|
||||
['Cron', info.cron || '-'],
|
||||
['Создана', info.createdAt],
|
||||
['Изменена', info.updatedAt],
|
||||
];
|
||||
// Строки без кнопки копирования (только отображение).
|
||||
function plain(val) {
|
||||
return '<td class="mono" style="word-break:break-all;padding:4px 0;">' + h(val || '-') + '</td>';
|
||||
}
|
||||
|
||||
var html = rows.map(function(r) {
|
||||
var val = r[1] || '-';
|
||||
return '<tr>' +
|
||||
'<td style="color:var(--text-secondary);padding:4px 10px 4px 0;white-space:nowrap;vertical-align:top;">' + h(r[0]) + '</td>' +
|
||||
'<td class="mono" style="word-break:break-all;padding:4px 0;">' + h(val) + copyBtn(val) + '</td>' +
|
||||
'</tr>';
|
||||
}).join('');
|
||||
// Строки с кнопкой копирования (Имя, Пакет, Маршрут — генерируемые или идентификаторы).
|
||||
function withCopy(val) {
|
||||
return '<td class="mono" style="word-break:break-all;padding:4px 0;">' + h(val || '-') + copyBtn(val) + '</td>';
|
||||
}
|
||||
|
||||
function labelTd(label) {
|
||||
return '<td style="color:var(--text-secondary);padding:4px 10px 4px 0;white-space:nowrap;vertical-align:top;">' + h(label) + '</td>';
|
||||
}
|
||||
|
||||
// CURL-строка для внешнего вызова (полная, с токеном из localStorage).
|
||||
var token = localStorage.getItem('auth_token') || '';
|
||||
var method = (Array.isArray(info.methods) && info.methods.length) ? info.methods[0] : 'GET';
|
||||
var externalUrl = window.location.origin + '/fn' + (info.route !== '-' ? info.route : '');
|
||||
var curlFull = 'curl -H "X-Auth-Token: ' + token + '" -X ' + method + ' "' + externalUrl + '"';
|
||||
// В отображении скрываем токен — показываем только метод и URL.
|
||||
var curlDisplay = 'curl ... -X ' + method + ' "' + externalUrl + '"';
|
||||
var curlSafe = curlFull.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
||||
|
||||
var html = [
|
||||
'<tr>' + labelTd('Имя') + withCopy(info.name) + '</tr>',
|
||||
'<tr>' + labelTd('Окружение') + plain(info.env) + '</tr>',
|
||||
'<tr>' + labelTd('Пакет') + withCopy(info.pkg) + '</tr>',
|
||||
'<tr>' + labelTd('Entrypoint') + plain(info.entrypoint) + '</tr>',
|
||||
'<tr>' + labelTd('Таймаут') + plain(info.timeout ? info.timeout + ' сек' : '-') + '</tr>',
|
||||
'<tr>' + labelTd('Тип источника') + plain(info.sourceType === 'archive' ? '📦 archive' : '📝 code') + '</tr>',
|
||||
'<tr>' + labelTd('Маршрут') + withCopy(info.route) + '</tr>',
|
||||
'<tr>' + labelTd('Методы') + plain(Array.isArray(info.methods) && info.methods.length ? info.methods.join(', ') : '-') + '</tr>',
|
||||
'<tr>' + labelTd('Cron') + plain(info.cron || '-') + '</tr>',
|
||||
'<tr>' + labelTd('Создана') + plain(info.createdAt) + '</tr>',
|
||||
'<tr>' + labelTd('Изменена') + plain(info.updatedAt) + '</tr>',
|
||||
'<tr>' + labelTd('curl') +
|
||||
'<td class="mono" style="word-break:break-all;padding:4px 0;color:var(--text-secondary);">' +
|
||||
h(curlDisplay) +
|
||||
' <button class="btn ghost" style="padding:1px 6px; font-size:11px;" onclick="navigator.clipboard.writeText(\'' + curlSafe + '\')">📋</button>' +
|
||||
'</td></tr>',
|
||||
].join('');
|
||||
|
||||
document.getElementById('info-title').textContent = 'Информация: ' + name;
|
||||
document.getElementById('info-rows').innerHTML = html;
|
||||
|
||||
Reference in New Issue
Block a user