Dashboard Masticationpedia: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (102 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 1: | Riga 1: | ||
<html> | <html> | ||
<h2>🔧 Dashboard Operativa – Masticationpedia</h2> | |||
<h2>🔧 Dashboard Operativa – Masticationpedia</h2> | <p><em>Centro di comando per progetti, API, file e backup</em></p> | ||
<p><em>Centro di comando per progetti, API, file e backup</em></p> | |||
< | <a href="/dashboard/api/log_view.php" target="_blank">🧾 Apri Log Dashboard</a> | ||
<button onclick="clearServerLog()">🧹 Svuota Log</button> | |||
<button | |||
<div style="margin: 2rem 0; display: flex; flex-wrap: wrap; gap: 1rem;"> | |||
<button class="dashboard-toggle" onclick="toggleDashboardBox('api-settings')">⚙️ Connessione API</button> | |||
<button class="dashboard-toggle" | |||
onclick="(window.showMpAI ? showMpAI() : (function(){var el=document.getElementById('mpAI'); if(el){ el.style.display='block'; el.scrollIntoView({behavior:'smooth'});} else { alert('#mpAI non trovato'); } })())"> | |||
🤖 Masticationpedia AI | |||
</button> | |||
</div> | |||
<button class=" | <!-- ============== MASTICATIONPEDIA AI ============== --> | ||
<div id="mpAI" class="mpai-root" style="display:none"> | |||
<div class="mpai-header"> | |||
<div class="mpai-title">🤖 Masticationpedia <b>AI</b></div> | |||
<div class="mpai-actions"> | |||
<button id="mpai-new-chat" class="mpai-btn ghost">Nuova chat</button> | |||
<button id="mpai-clear" class="mpai-btn danger">Pulisci conversazione</button> | |||
<button id="mpai-save-as-project" class="mpai-btn">💾 Salva come progetto</button> | |||
</div> | |||
</div> | |||
<div class="mpai-grid"> | |||
<aside class="mpai-col mpai-left"> | |||
<h4>📂 Progetti</h4> | |||
<div id="mpai-project-list" class="mpai-projects"> | |||
<em class="muted">Carico progetti…</em> | |||
</div> | |||
<div class="mpai-new-project"> | |||
<input id="mpai-project-name" type="text" placeholder="Nuovo progetto (A-Z 0-9 _ -)" /> | |||
<button id="mpai-project-create" class="mpai-btn">Crea</button> | |||
</div> | |||
<div class="mpai-help muted"> | |||
Ogni progetto mantiene la sua cronologia locale (browser). | |||
</div> | |||
</aside> | |||
< | <main class="mpai-col mpai-center"> | ||
<div id="mpai-uploads" class="mpai-uploads" data-state="idle"> | |||
<div class="mpai-dropzone" id="mpai-dropzone"> | |||
<div> | |||
<div class="muted" style="margin-bottom:6px;">Trascina qui file <b>sanificati</b> oppure</div> | |||
<label class="mpai-file-label"> | |||
<input id="mpai-file-input" type="file" multiple style="display:none;"> | |||
<span class="mpai-btn">📂 Aggiungi file</span> | |||
</label> | |||
</div> | |||
</div> | |||
<div id="mpai-file-list" class="mpai-filelist"></div> | |||
</div> | |||
<div id="mpai-chat" class="mpai-chat"> | |||
<div class="mpai-msg mpai-hint"> | |||
Benvenuto. Seleziona un progetto a sinistra, oppure scrivi subito: se non c’è un progetto creo una conversazione locale. Le risposte appariranno qui sotto in ordine, come in ChatGPT. | |||
</div> | |||
</div> | |||
<div id=" | |||
</div> | |||
<div class="mpai-composer"> | |||
<textarea id="mpai-input" rows="3" placeholder="Scrivi qui la tua domanda..."></textarea> | |||
<div class="mpai-composer-right"> | |||
<label class="mpai-check" style="margin:0 0 6px 0;"> | |||
<input id="mpai-drop-urls" type="checkbox"> | |||
Ignora/Cancella URL e allegati per questo invio | |||
</label> | |||
<button id="mpai-send" class="mpai-btn primary">Invia</button> | |||
</div> | |||
</div> | |||
</main> | |||
<aside class="mpai-col mpai-right"> | |||
<h4>⚙️ Impostazioni</h4> | |||
<label class="mpai-field">Modello | |||
<select id="mpai-model"> | |||
<option value="gpt-4o-2024-05-13" selected>gpt-4o-2024-05-13</option> | |||
<option value="gpt-4-turbo-2024-04-09">gpt-4-turbo-2024-04-09</option> | |||
</select> | |||
</label> | |||
<label class="mpai-field">Temperatura | |||
<input id="mpai-temp" type="number" min="0" max="1" step="0.1" value="0.7"> | |||
</label> | |||
<label class="mpai-check"> | |||
<input id="mpai-sanitized-only" type="checkbox" checked> | |||
Usa solo file <b>sanificati</b> come contesto | |||
</label> | |||
<div class="mpai-help muted"> | |||
Le API key restano lato server (file sicuro). Il browser non vede mai le chiavi. | |||
</div> | |||
</aside> | |||
</div> | |||
</div> | |||
<!-- ============ STILI (CSS) ============ --> | |||
<style> | |||
.mpai-root{--bg:#f7f8fa;--card:#fff;--muted:#6b7280;--line:#e5e7eb;--text:#111827;--primary:#0a7cff;--danger:#e74c3c;--accent:#eef2ff;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:var(--text)} | |||
.mpai-header{display:flex;align-items:center;justify-content:space-between;margin:8px 0 12px} | |||
.mpai-title{font-size:20px;font-weight:700} | |||
.mpai-actions{display:flex;gap:8px} | |||
.mpai-btn{border:1px solid var(--line);background:#fff;padding:.45rem .8rem;border-radius:8px;cursor:pointer} | |||
.mpai-btn:hover{background:#f3f4f6} | |||
.mpai-btn.primary{background:var(--primary);border-color:var(--primary);color:#fff} | |||
.mpai-btn.danger{background:var(--danger);border-color:var(--danger);color:#fff} | |||
.mpai-btn.ghost{background:transparent} | |||
.muted{color:var(--muted)} | |||
.mpai-grid{display:grid;grid-template-columns:260px minmax(0,1fr) 260px;gap:12px} | |||
.mpai-col{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px} | |||
.mpai-left,.mpai-right{max-height:75vh;overflow:auto} | |||
.mpai-projects{display:flex;flex-direction:column;gap:6px;margin:8px 0} | |||
.mpai-projects .row{display:flex;align-items:center;gap:6px;justify-content:space-between;border:1px solid var(--line);border-radius:8px;padding:6px 8px} | |||
.mpai-projects .row .title{font-family:monospace;font-size:12px} | |||
.mpai-new-project{display:flex;gap:6px;margin-top:8px} | |||
.mpai-new-project input{flex:1 1 auto;padding:.45rem .6rem;border:1px solid var(--line);border-radius:8px} | |||
.mpai-field{display:flex;flex-direction:column;gap:4px;margin:8px 0} | |||
.mpai-field input,.mpai-field select{padding:.45rem .6rem;border:1px solid var(--line);border-radius:8px} | |||
.mpai-check{display:flex;align-items:center;gap:8px;margin:8px 0} | |||
.mpai-center{display:flex;flex-direction:column;gap:10px} | |||
.mpai-uploads{border:1px dashed var(--line);border-radius:12px;padding:10px;background:#fafafa} | |||
.mpai-dropzone{display:flex;align-items:center;justify-content:center;border-radius:10px;padding:12px;background:var(--accent);text-align:center} | |||
.mpai-filelist{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px} | |||
.mpai-filepill{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:4px 8px;background:#fff;font-size:12px} | |||
.mpai-filepill button{border:none;background:transparent;cursor:pointer;color:#c00} | |||
.mpai-chat{display:flex;flex-direction:column;gap:10px;max-height:50vh;overflow:auto;border:1px solid var(--line);border-radius:12px;padding:10px;background:#fff} | |||
.mpai-msg{border:1px solid var(--line);border-radius:12px;padding:10px;background:#fff} | |||
.mpai-msg.user{border-color:#bee3f8;background:#eff6ff} | |||
.mpai-msg.assistant{border-color:#d1fae5;background:#f0fdf4} | |||
.mpai-msg.error{border-color:#fecaca;background:#fff1f2} | |||
.mpai-msg .role{font-weight:600;margin-bottom:4px} | |||
.mpai-hint{border-style:dashed;color:var(--muted)} | |||
.mpai-composer{display:flex;gap:8px;align-items:flex-end} | |||
.mpai-composer textarea{flex:1 1 auto;min-height:90px;border:1px solid var(--line);border-radius:12px;padding:10px} | |||
.mpai-composer-right{display:flex;flex-direction:column;gap:6px} | |||
/* --- Blocchi codice nelle risposte + copia --- */ | |||
.mp-code{border:1px solid #e5e7eb;border-radius:10px;overflow:hidden;margin:.5rem 0;background:#fff} | |||
.mp-code__hdr{display:flex;justify-content:space-between;align-items:center;padding:.5rem .75rem;border-bottom:1px solid #e5e7eb;background:#f8fafc} | |||
.mp-code__lang{font-family:ui-monospace, Menlo, Consolas, monospace;color:#334155} | |||
.mp-copy{border:1px solid #e5e7eb;background:#fff;border-radius:8px;padding:.25rem .5rem;cursor:pointer} | |||
.mp-copy:hover{background:#f1f5f9} | |||
.mp-code pre{margin:0;padding:.75rem 1rem;overflow:auto;font-family:ui-monospace, Menlo, Consolas, monospace;font-size:13px} | |||
@media (max-width:1100px){.mpai-grid{grid-template-columns:1fr}.mpai-left,.mpai-right{max-height:none}} | |||
</style> | |||
<!-- ========= SEZIONI LEGACY (nascoste) ========= --> | |||
<div id="api-settings" style="display:none; padding:1rem; border:1px solid #ccc; border-radius:8px; background:#f9f9f9;"> | |||
<strong>Connessione API (protetta dal server)</strong><br><br> | |||
<label>Modello</label> | |||
<select id="model-select" style="width:100%; margin-bottom:0.5rem;"> | |||
<option value="gpt-4o-2024-05-13" selected>gpt-4o-2024-05-13</option> | |||
<option value="gpt-4-turbo-2024-04-09">gpt-4-turbo-2024-04-09</option> | |||
</select> | |||
<label>Prompt di test</label> | |||
<textarea id="test_prompt" rows="3" style="width:100%; margin-bottom:0.5rem;">Dimmi una curiosità sulla mandibola</textarea> | |||
< | <label style="display:inline-flex; gap:.4rem; align-items:center; margin:.25rem 0 .75rem;"> | ||
<input id="test_drop_urls" type="checkbox"> | |||
Ignora/Cancella URL e allegati per questo invio | |||
</label><br> | |||
<button id="test_run">Esegui</button> | |||
< | |||
<pre id="api-result" style="background:#f0f0f0; padding:1rem; border:1px solid #ccc; margin-top:1rem; white-space:pre-wrap;"></pre> | |||
< | |||
</div> | </div> | ||
<script> | |||
// JS minimo temporaneo per sbloccare la pagina | |||
// (serve solo a NON avere errori di sintassi) | |||
</script> | |||
</html> | </html> | ||
Versione attuale delle 15:48, 19 ott 2025
🔧 Dashboard Operativa – Masticationpedia
Centro di comando per progetti, API, file e backup