diff --git a/templates/editor.html b/templates/editor.html index e414b50..2c6d003 100644 --- a/templates/editor.html +++ b/templates/editor.html @@ -170,8 +170,8 @@ body{font-family:'Segoe UI',system-ui,sans-serif;background:var(--bg);color:var( HMI Design Tool
- - + {{ user }} + Logout | @@ -284,7 +284,7 @@ body{font-family:'Segoe UI',system-ui,sans-serif;background:var(--bg);color:var( let layout = null; let currentPage = 0; let mode = 'edit'; // 'edit' or 'preview' -let currentUser = localStorage.getItem('bfa-user') || ''; +let currentUser = '{{ user }}'; let simState = {}; // id -> {on:bool, value:number} let commentTarget = null; let sortableInstance = null; @@ -303,17 +303,7 @@ async function init() { renderSchematic(); } -function initUsers() { - const sel = document.getElementById('user-select'); - sel.innerHTML = ''; - (layout.users || []).forEach(u => { - const o = document.createElement('option'); - o.value = u; o.textContent = u; - if (u === currentUser) o.selected = true; - sel.appendChild(o); - }); - sel.onchange = () => { currentUser = sel.value; localStorage.setItem('bfa-user', currentUser); }; -} +function initUsers() { /* handled by login page */ } function initSimState() { layout.pages.forEach(p => p.cards.forEach(c => { @@ -324,15 +314,7 @@ function initSimState() { })); } -async function addUser() { - const name = prompt('Enter name:'); - if (!name) return; - await fetch('api/users', {method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({name})}); - layout.users.push(name); - currentUser = name; - localStorage.setItem('bfa-user', name); - initUsers(); -} +function addUser() { window.location.href = 'logout'; } // ══════════════════════════════════════════════════════ // MODE @@ -849,8 +831,25 @@ function renderSchematic() { } const cc = col||'var(--green)'; if (eq.anim === 'burner') { - g.appendChild(mkSvgEl('circle', {'class':'anim-overlay burner-glow', id:'sim-'+eq.id, - cx:eq.x, cy:eq.y, r:r+4, fill:'none', stroke:col||'var(--amber)', 'stroke-width':'4'})); + // Flame SVG with flicker animation + const fg = mkSvgEl('g', {'class':'anim-overlay', id:'sim-'+eq.id}); + fg.setAttribute('transform', `translate(${eq.x},${eq.y})`); + // Outer flame (orange) + fg.appendChild(mkSvgEl('path', { + d:`M 0 ${-r*0.3} Q ${-r*0.5} ${-r*0.8} ${-r*0.2} ${-r*1.2} Q 0 ${-r*1.5} ${r*0.2} ${-r*1.2} Q ${r*0.5} ${-r*0.8} 0 ${-r*0.3} Z`, + fill:'var(--amber)', opacity:'0.8', 'class':'burner-glow' + })); + // Inner flame (red-orange) + fg.appendChild(mkSvgEl('path', { + d:`M 0 ${-r*0.2} Q ${-r*0.25} ${-r*0.5} ${-r*0.1} ${-r*0.85} Q 0 ${-r*1.05} ${r*0.1} ${-r*0.85} Q ${r*0.25} ${-r*0.5} 0 ${-r*0.2} Z`, + fill:'var(--red)', opacity:'0.9', 'class':'burner-glow', style:'animation-delay:0.2s' + })); + // Core (bright) + fg.appendChild(mkSvgEl('ellipse', { + cx:0, cy: -r*0.4, rx: r*0.12, ry: r*0.25, + fill:'#ffdd44', opacity:'0.9', 'class':'burner-glow', style:'animation-delay:0.4s' + })); + g.appendChild(fg); } else if (eq.anim === 'fan') { // Fan: 4 curved blades spinning inside the circle const ag = mkSvgEl('g', {'class':'anim-overlay', id:'sim-'+eq.id});