72 lines
2.6 KiB
JavaScript
72 lines
2.6 KiB
JavaScript
/* fn-code.js — создание функции из кода (независимый модуль) */
|
|
|
|
function onLangChangeCode() {
|
|
var lang = document.getElementById('cc-lang').value;
|
|
var t = LANG_TEMPLATES[lang];
|
|
if (t) {
|
|
document.getElementById('cc-entry').value = t.entrypoint;
|
|
document.getElementById('cc-code').value = t.code;
|
|
}
|
|
}
|
|
|
|
function openCreateCode() {
|
|
document.getElementById('cc-lang').value = 'python';
|
|
onLangChangeCode();
|
|
document.getElementById('cc-name').value = '';
|
|
document.getElementById('cc-route').value = '';
|
|
document.getElementById('cc-methods').value = 'GET';
|
|
document.getElementById('cc-timeout').value = '60';
|
|
document.getElementById('cc-schedule-enabled').checked = false;
|
|
document.getElementById('cc-cron').value = '';
|
|
toggleScheduleFields('cc');
|
|
var aiRes = document.getElementById('cc-ai-result');
|
|
if (aiRes) { aiRes.style.display = 'none'; aiRes.textContent = ''; }
|
|
document.getElementById('create-code-modal').classList.add('open');
|
|
document.getElementById('cc-name').focus();
|
|
}
|
|
|
|
function closeCreateCode() {
|
|
document.getElementById('create-code-modal').classList.remove('open');
|
|
}
|
|
|
|
async function submitCreateCode() {
|
|
const btn = document.getElementById('cc-submit');
|
|
btn.disabled = true;
|
|
const progress = startTimedStatus('Создаём функцию...', 'Создание функции...', explainDelay);
|
|
try {
|
|
const name = document.getElementById('cc-name').value.trim();
|
|
if (!name) throw new Error('name is required');
|
|
const lang = document.getElementById('cc-lang').value.trim();
|
|
if (!lang) throw new Error('language is required');
|
|
|
|
await requestJSON(API_BASE + '/functions', 'POST', {
|
|
name: name,
|
|
language: lang,
|
|
entrypoint: document.getElementById('cc-entry').value.trim(),
|
|
route: document.getElementById('cc-route').value.trim(),
|
|
methods: parseMethods(document.getElementById('cc-methods').value),
|
|
timeout: parseTimeout(document.getElementById('cc-timeout').value),
|
|
code: document.getElementById('cc-code').value
|
|
});
|
|
|
|
try {
|
|
await syncScheduleForFunction(name, 'cc');
|
|
} catch (scheduleErr) {
|
|
try {
|
|
await requestJSON(API_BASE + '/functions/' + encodeURIComponent(name), 'DELETE');
|
|
} catch (rollbackErr) {
|
|
scheduleErr.message += '; rollback failed: ' + rollbackErr.message;
|
|
}
|
|
throw scheduleErr;
|
|
}
|
|
|
|
closeCreateCode();
|
|
progress.stop('Функция создана: ' + name, 'ok');
|
|
await reloadAll();
|
|
} catch (e) {
|
|
progress.stop('Ошибка создания: ' + e.message, 'err');
|
|
} finally {
|
|
btn.disabled = false;
|
|
}
|
|
}
|