UI-korjaus korjattu (GTFO gemini)
This commit is contained in:
@@ -2,7 +2,10 @@
|
|||||||
<div id="panel-editor" class="panel">
|
<div id="panel-editor" class="panel">
|
||||||
<div style="display:flex;flex:1;min-height:0;gap:0;border:1px solid var(--border);border-radius:6px;overflow:hidden">
|
<div style="display:flex;flex:1;min-height:0;gap:0;border:1px solid var(--border);border-radius:6px;overflow:hidden">
|
||||||
<div id="editor-filetree" style="width:200px;min-width:150px;background:var(--bg);border-right:1px solid var(--border);overflow:auto;resize:horizontal;font-family:'Courier New',monospace;font-size:13px">
|
<div id="editor-filetree" style="width:200px;min-width:150px;background:var(--bg);border-right:1px solid var(--border);overflow:auto;resize:horizontal;font-family:'Courier New',monospace;font-size:13px">
|
||||||
<div style="padding:10px 12px;color:#8b949e;font-size:11px;text-transform:uppercase;letter-spacing:0.5px;border-bottom:1px solid var(--border)">Tiedostot</div>
|
<div style="padding:10px 12px;color:#8b949e;font-size:11px;display:flex;justify-content:space-between;align-items:center;text-transform:uppercase;letter-spacing:0.5px;border-bottom:1px solid var(--border)">
|
||||||
|
<span>Tiedostot</span>
|
||||||
|
<button class="btn btn-green" style="padding:2px 6px;font-size:10px" onclick="downloadProjectZip()">.ZIP</button>
|
||||||
|
</div>
|
||||||
<div id="editor-file-list" style="padding:4px 0">
|
<div id="editor-file-list" style="padding:4px 0">
|
||||||
<div style="padding:8px 16px;color:#8b949e;font-size:12px">Generoi projekti:<br><code style="color:var(--accent)">kpn project "..."</code></div>
|
<div style="padding:8px 16px;color:#8b949e;font-size:12px">Generoi projekti:<br><code style="color:var(--accent)">kpn project "..."</code></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1430,7 +1430,9 @@ Blog → Author: name,email,bio(Text|None) / Post: title, content(Text), author_
|
|||||||
// Oppimispolku
|
// Oppimispolku
|
||||||
renderLearnView(promptLog);
|
renderLearnView(promptLog);
|
||||||
|
|
||||||
renderProjectCard(files, task);
|
termLog(`\n<span style="color:#8b949e">Siirretään tiedostot Editoriin...</span>`);
|
||||||
|
window._currentProjectName = task;
|
||||||
|
setTimeout(() => window.openInEditor(files), 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function kpnPipelineSimple(task) {
|
async function kpnPipelineSimple(task) {
|
||||||
@@ -1456,41 +1458,7 @@ Blog → Author: name,email,bio(Text|None) / Post: title, content(Text), author_
|
|||||||
termLog(`\n<span style="color:var(--purple);font-weight:bold">━━━ Done ━━━</span>`);
|
termLog(`\n<span style="color:var(--purple);font-weight:bold">━━━ Done ━━━</span>`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// === Project card ===
|
// === Poistettiin renderProjectCard ja siirryttiin suoraan Editorin käyttöön ===
|
||||||
window._projectFiles = {}; // id → files
|
|
||||||
|
|
||||||
function renderProjectCard(files, name) {
|
|
||||||
const entries = Object.entries(files);
|
|
||||||
if (!entries.length) return;
|
|
||||||
const id = 'proj-' + Date.now();
|
|
||||||
window._projectFiles[id] = files;
|
|
||||||
|
|
||||||
const tabs = entries.map(([n],i) =>
|
|
||||||
`<div class="project-tab${i===0?' active':''}" data-card="${id}" data-i="${i}" onclick="switchProjTab('${id}',${i})">${esc(n)}</div>`
|
|
||||||
).join('');
|
|
||||||
|
|
||||||
const panels = entries.map(([n,c],i) =>
|
|
||||||
`<div class="proj-panel" data-card="${id}" data-i="${i}" style="${i>0?'display:none':''}">` +
|
|
||||||
`<div style="text-align:right;padding:4px 8px;background:var(--bg);border-bottom:1px solid #21262d">` +
|
|
||||||
`<button class="btn btn-muted" onclick="copyProjectFile('${id}','${esc(n)}')">Kopioi</button></div>` +
|
|
||||||
`<pre class="code-block">${highlightCode(c)}</pre></div>`
|
|
||||||
).join('');
|
|
||||||
|
|
||||||
const html = `<div id="${id}" class="project-card">` +
|
|
||||||
`<div class="project-header">` +
|
|
||||||
`<span style="color:var(--purple);font-weight:600">${esc(name||'Projekti')} <span style="color:#8b949e;font-weight:normal">(${entries.length})</span></span>` +
|
|
||||||
`<span style="display:flex;gap:6px">` +
|
|
||||||
`<button class="btn btn-muted" onclick="copyAllProjectFiles('${id}')">Kopioi kaikki</button>` +
|
|
||||||
`<button class="btn btn-muted" onclick="downloadProjectZip('${id}','${esc(name||'projekti')}')">Lataa .zip</button>` +
|
|
||||||
`<button class="btn btn-green" onclick="openInEditor(window._projectFiles['${id}'])">Avaa editorissa</button>` +
|
|
||||||
`</span></div>` +
|
|
||||||
`<div class="project-tabs">${tabs}</div>${panels}</div>`;
|
|
||||||
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.innerHTML = html;
|
|
||||||
termPanel.appendChild(div.firstElementChild);
|
|
||||||
termPanel.scrollTop = termPanel.scrollHeight;
|
|
||||||
}
|
|
||||||
window.copyProjectFile = function(id, name) {
|
window.copyProjectFile = function(id, name) {
|
||||||
const files = window._projectFiles[id];
|
const files = window._projectFiles[id];
|
||||||
if (files && files[name]) navigator.clipboard.writeText(files[name]);
|
if (files && files[name]) navigator.clipboard.writeText(files[name]);
|
||||||
@@ -1501,8 +1469,9 @@ Blog → Author: name,email,bio(Text|None) / Post: title, content(Text), author_
|
|||||||
const text = Object.entries(files).map(([n,c]) => '# --- ' + n + ' ---\n' + c).join('\n\n');
|
const text = Object.entries(files).map(([n,c]) => '# --- ' + n + ' ---\n' + c).join('\n\n');
|
||||||
navigator.clipboard.writeText(text);
|
navigator.clipboard.writeText(text);
|
||||||
};
|
};
|
||||||
window.downloadProjectZip = function(id, name) {
|
window.downloadProjectZip = function() {
|
||||||
const files = window._projectFiles[id];
|
const files = window._currentEditorFiles;
|
||||||
|
const name = window._currentProjectName || 'projekti';
|
||||||
if (!files) return;
|
if (!files) return;
|
||||||
const enc = new TextEncoder();
|
const enc = new TextEncoder();
|
||||||
const entries = Object.entries(files);
|
const entries = Object.entries(files);
|
||||||
@@ -1618,6 +1587,7 @@ Blog → Author: name,email,bio(Text|None) / Post: title, content(Text), author_
|
|||||||
const langMap = {py:'python',rs:'rust',js:'javascript',ts:'typescript',toml:'toml',json:'json',html:'html',css:'css',md:'markdown',txt:'plaintext'};
|
const langMap = {py:'python',rs:'rust',js:'javascript',ts:'typescript',toml:'toml',json:'json',html:'html',css:'css',md:'markdown',txt:'plaintext'};
|
||||||
|
|
||||||
window.openInEditor = async function(files) {
|
window.openInEditor = async function(files) {
|
||||||
|
window._currentEditorFiles = files;
|
||||||
switchTab('editor');
|
switchTab('editor');
|
||||||
try { await initMonaco(); } catch(e) { console.error('Monaco-virhe:', e); return; }
|
try { await initMonaco(); } catch(e) { console.error('Monaco-virhe:', e); return; }
|
||||||
const m = window.monaco;
|
const m = window.monaco;
|
||||||
|
|||||||
Reference in New Issue
Block a user