fenix-claude-plugin 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +13 -13
- package/.mcp.json +11 -11
- package/README.md +33 -40
- package/artifacts/collections.html +149 -0
- package/artifacts/fenix-workspace.html +1285 -0
- package/artifacts/oa-editor.html +210 -0
- package/artifacts/patent-editor.html +325 -0
- package/artifacts/review-workspace.html +1135 -0
- package/commands/fenix-install.md +19 -11
- package/commands/fenix-setup.md +18 -13
- package/package.json +16 -16
- package/skills/fenix-application/SKILL.md +35 -12
- package/skills/fenix-application/VERSION +1 -1
- package/skills/fenix-application/references/claim1-method-drafting.md +1 -1
- package/skills/fenix-application/references/claims.md +4 -5
- package/skills/fenix-application/references/disclosure.md +116 -10
- package/skills/fenix-application/references/editors.md +222 -51
- package/skills/fenix-application/references/figure-description.md +1 -1
- package/skills/fenix-application/references/figure-strategy.md +166 -0
- package/skills/fenix-application/references/figures-guidance.md +1 -1
- package/skills/fenix-application/references/figures.md +51 -14
- package/skills/fenix-application/references/patent-review-checklist.md +3 -1
- package/skills/fenix-application/references/patent-review.md +6 -2
- package/skills/fenix-application/references/patent-safe.md +1 -1
- package/skills/fenix-application/references/patent.md +9 -9
- package/skills/fenix-application/references/spec-guidance.md +1 -1
- package/skills/fenix-application/references/spec.md +17 -7
- package/skills/fenix-application/scripts/figure_strategy_server.py +136 -0
- package/skills/fenix-diagram/SKILL.md +54 -0
- package/skills/fenix-diagram/VERSION +1 -0
- package/skills/fenix-diagram/references/diagram-svg-guide.md +271 -0
- package/skills/fenix-office-action/SKILL.md +6 -4
- package/skills/fenix-office-action/VERSION +1 -1
- package/skills/fenix-office-action/references/oa-analysis.md +14 -4
- package/skills/fenix-office-action/references/oa-drafting.md +98 -21
- package/skills/fenix-office-action/references/oa-response.md +13 -13
- package/skills/fenix-project/SKILL.md +4 -3
- package/skills/fenix-project/VERSION +1 -1
- package/skills/fenix-project/references/create-project.md +11 -1
- package/artifacts/claims-editor.html +0 -205
- package/artifacts/figures-editor.html +0 -237
- package/artifacts/oa-arguments-editor.html +0 -216
- package/artifacts/practice-dashboard.html +0 -469
- package/artifacts/project-overview.html +0 -481
- package/artifacts/sections-editor.html +0 -205
- package/artifacts/user-dashboard.html +0 -368
- package/skills/fenix-application/CUSTOMIZE.md +0 -1
- package/skills/fenix-application/assets/claims_editor.html +0 -86
- package/skills/fenix-application/assets/figures_editor.html +0 -86
- package/skills/fenix-application/assets/spec_editor.html +0 -86
- package/skills/fenix-office-action/CUSTOMIZE.md +0 -1
- package/skills/fenix-project/CUSTOMIZE.md +0 -1
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<title>Claims Editor</title>
|
|
6
|
-
<style>*{box-sizing:border-box;margin:0;padding:0}body{font-family:system-ui,-apple-system,sans-serif;background:#fff7ed;min-height:100vh;padding:20px 16px}.card{background:#fff;max-width:900px;margin:0 auto;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.12);overflow:hidden}.hdr{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid #fed7aa}.hdr img{height:26px;width:auto}.hdiv{width:1px;height:22px;background:#fed7aa;flex-shrink:0}.hdr h1{font-size:15px;font-weight:600;color:#1e293b}.hdr .toggle-all{margin-left:auto;flex-shrink:0}.bdy{padding:20px}.sub{font-size:13px;color:#64748b;margin-bottom:14px}input,select,textarea{font-family:inherit;font-size:13px;border:1.5px solid #fed7aa;border-radius:5px;padding:6px 10px;outline:none;width:100%;transition:border-color .15s;background:#fff}input:focus,select:focus,textarea:focus{border-color:#ea580c}.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.field{margin-bottom:12px}label{display:block;font-size:12px;font-weight:600;color:#374151;margin-bottom:4px}.acc{border:1px solid #fed7aa;overflow:hidden;margin-bottom:-1px}.acc-hd{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;background:#fffbf5;user-select:none}.acc-hd:hover{background:#fff7ed}.acc-hd .chev{color:#ea580c;font-size:12px;transition:transform .15s;flex-shrink:0}.acc.open .chev{transform:rotate(90deg)}.acc-hd .ttl{font-weight:600;font-size:13px;color:#1e293b;flex-shrink:0}.acc-hd .prev{font-size:12px;color:#94a3b8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.acc-hd .badge{font-size:11px;font-weight:600;padding:1px 8px;border-radius:10px;background:#ffedd5;color:#c2410c;flex-shrink:0}.acc-bd{display:none;padding:14px;border-top:1px solid #fed7aa;background:#fff}.acc.open .acc-bd{display:block}table{width:100%;border-collapse:collapse;margin-top:8px}th,td{padding:6px 10px;border:1px solid #fed7aa;font-size:13px;text-align:left}th{background:#fff7ed;font-weight:600;color:#374151}td input{border:none;padding:0;width:100%;background:transparent}td input:focus{outline:1px solid #ea580c;border-radius:3px}.tbl-bar{display:flex;justify-content:space-between;align-items:center;margin-top:8px}.btn-sm{padding:4px 12px;background:#fff;border:1.5px solid #fed7aa;border-radius:5px;font-size:12px;cursor:pointer;color:#374151}.btn-sm:hover{border-color:#ea580c}.del-btn{color:#dc2626;background:none;border:none;cursor:pointer;font-size:16px;line-height:1;padding:0 4px}.rm-item{margin-left:auto;color:#dc2626;background:none;border:none;cursor:pointer;font-size:13px;flex-shrink:0}.bar{margin-top:16px;display:flex;align-items:center;gap:14px}.cta{padding:9px 24px;background:#ea580c;color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s}.cta:hover{background:#c2410c}#st{color:#16a34a;font-size:13px;font-weight:500}textarea.sec{min-height:200px;font-family:Menlo,Consolas,monospace;line-height:1.6;resize:vertical}.addbar{margin:6px 0 4px}.ftr{padding:9px 20px;border-top:1px solid #fed7aa;font-size:11px;color:#94a3b8;display:flex;justify-content:space-between}</style>
|
|
7
|
-
</head>
|
|
8
|
-
<body>
|
|
9
|
-
<div class="card">
|
|
10
|
-
<div class="hdr"><img src="data:image/png;base64,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" alt="Fenix"><div class="hdiv"></div><h1>Claims Editor</h1><button class="btn-sm toggle-all" id="toggleAll" onclick="toggleAll()">Expand all</button></div>
|
|
11
|
-
<div class="bdy">
|
|
12
|
-
<p class="sub">Open any claim to edit it. Add or remove claims as needed. Click Copy for Save and paste into chat.</p>
|
|
13
|
-
<div id="acc"></div>
|
|
14
|
-
<div class="addbar"><button class="btn-sm" onclick="addItem()">+ Add claim</button></div>
|
|
15
|
-
<div class="bar"><button class="cta" onclick="go()">Copy for Save</button><span id="st"></span></div>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="ftr"><span>Fenix Patent Assistant</span><span>v3</span></div>
|
|
18
|
-
</div>
|
|
19
|
-
<script>
|
|
20
|
-
var EDITOR_TYPE="claims";
|
|
21
|
-
var INITIAL_CONTENT="";
|
|
22
|
-
function parseInit(){ var d=INITIAL_CONTENT; if(typeof d==="string"){ var s=d.trim(); if(!s) return null; try{ d=JSON.parse(s); }catch(e){ return s; } } return d; }
|
|
23
|
-
function toItems(){
|
|
24
|
-
var d=parseInit();
|
|
25
|
-
if(EDITOR_TYPE==="claims"){
|
|
26
|
-
if(Array.isArray(d)){ return d.map(function(c){ return {number:String(c.claimNumber||c.number||""),text:Array.isArray(c.claimText)?c.claimText.join("\n"):(c.claimText||c.text||""),orig:c}; }); }
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
if(EDITOR_TYPE==="figures"){ return Array.isArray(d)?d:(d&&d.figures?d.figures:[]); }
|
|
30
|
-
if(EDITOR_TYPE==="sections"){ var arr=[]; if(d&&typeof d==="object"&&!Array.isArray(d)){ Object.keys(d).forEach(function(k){ var v=d[k]; var txt=v&&v.paragraphs?v.paragraphs.map(function(p){return String(p).replace(/<[^>]+>/g,"").trim();}).join("\n\n"):(typeof v==="string"?v:""); arr.push({name:k,text:txt}); }); } return arr; }
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
function elt(tag,cls,txt){ var e=document.createElement(tag); if(cls)e.className=cls; if(txt!=null)e.textContent=txt; return e; }
|
|
34
|
-
function makeAcc(headerTitle,badge,preview,bodyBuilder){
|
|
35
|
-
var wrap=elt("div","acc"); var hd=elt("div","acc-hd");
|
|
36
|
-
hd.appendChild(elt("span","chev","\u25B6")); hd.appendChild(elt("span","ttl",headerTitle));
|
|
37
|
-
if(badge!=null){ hd.appendChild(elt("span","badge",badge)); }
|
|
38
|
-
var prev=elt("span","prev",preview||""); hd.appendChild(prev);
|
|
39
|
-
var rm=elt("button","rm-item","Remove"); rm.onclick=function(ev){ ev.stopPropagation(); wrap.remove(); syncToggle(); }; hd.appendChild(rm);
|
|
40
|
-
hd.onclick=function(){ wrap.classList.toggle("open"); syncToggle(); };
|
|
41
|
-
var bd=elt("div","acc-bd"); bodyBuilder(bd,prev);
|
|
42
|
-
wrap.appendChild(hd); wrap.appendChild(bd); return wrap;
|
|
43
|
-
}
|
|
44
|
-
function claimBody(bd,prev,num,text){
|
|
45
|
-
var f1=elt("div","field"); f1.appendChild(elt("label",null,"Claim Number")); var ni=document.createElement("input"); ni.className="c-num"; ni.value=num||""; f1.appendChild(ni); bd.appendChild(f1);
|
|
46
|
-
var f2=elt("div","field"); f2.appendChild(elt("label",null,"Claim Text")); var ta=document.createElement("textarea"); ta.className="c-txt sec"; ta.value=text||""; ta.oninput=function(){ prev.textContent=(ta.value||"").slice(0,80); }; f2.appendChild(ta); bd.appendChild(f2);
|
|
47
|
-
}
|
|
48
|
-
function addClaim(num,text,orig){ var acc=document.getElementById("acc"); var w=makeAcc("Claim "+(num||"?"),null,(text||"").slice(0,80),function(bd,prev){ claimBody(bd,prev,num,text); }); w.__claim=orig||{}; acc.appendChild(w); return w; }
|
|
49
|
-
function figRow(tbody,num,label,txt){
|
|
50
|
-
var tr=document.createElement("tr");
|
|
51
|
-
var td0=document.createElement("td"); var i0=document.createElement("input"); i0.className="r-num"; i0.style.width="60px"; i0.value=num||""; td0.appendChild(i0); tr.appendChild(td0);
|
|
52
|
-
var td1=document.createElement("td"); var i1=document.createElement("input"); i1.className="r-lab"; i1.value=label||""; td1.appendChild(i1); tr.appendChild(td1);
|
|
53
|
-
var td2=document.createElement("td"); var i2=document.createElement("input"); i2.className="r-txt"; i2.value=txt||""; td2.appendChild(i2); tr.appendChild(td2);
|
|
54
|
-
var td3=document.createElement("td"); var b=document.createElement("button"); b.className="del-btn"; b.textContent="x"; b.onclick=function(){ tr.remove(); }; td3.appendChild(b); tr.appendChild(td3);
|
|
55
|
-
tbody.appendChild(tr);
|
|
56
|
-
}
|
|
57
|
-
function figBody(bd,prev,fig){
|
|
58
|
-
var r=elt("div","row2");
|
|
59
|
-
var c1=elt("div","field"); c1.appendChild(elt("label",null,"Figure Number")); var nn=document.createElement("input"); nn.className="f-num"; nn.value=fig.number||""; c1.appendChild(nn); r.appendChild(c1);
|
|
60
|
-
var c2=elt("div","field"); c2.appendChild(elt("label",null,"Type")); var sel=document.createElement("select"); sel.className="f-type"; ["Flowchart","Device","Placeholder"].forEach(function(o){ var op=document.createElement("option"); op.textContent=o; sel.appendChild(op); }); sel.value=fig.type||"Flowchart"; c2.appendChild(sel); r.appendChild(c2); bd.appendChild(r);
|
|
61
|
-
var fb=elt("div","field"); fb.appendChild(elt("label",null,"Brief Description")); var bi=document.createElement("input"); bi.className="f-brief"; bi.value=fig.briefDescription||""; bi.oninput=function(){ prev.textContent=(bi.value||"").slice(0,70); }; fb.appendChild(bi); bd.appendChild(fb);
|
|
62
|
-
var lbl=elt("label",null,fig.type==="Device"?"Components":"Steps"); lbl.style.marginTop="6px"; bd.appendChild(lbl);
|
|
63
|
-
var tbl=document.createElement("table"); tbl.innerHTML="<thead><tr><th style='width:70px'>#</th><th style='width:170px'>Label</th><th>Description text</th><th style='width:34px'></th></tr></thead>"; var tbody=document.createElement("tbody"); tbl.appendChild(tbody); bd.appendChild(tbl);
|
|
64
|
-
var arr=(fig.type==="Device")?(fig.components||[]):(fig.steps||[]); arr.forEach(function(e){ figRow(tbody,e.number,e.label,e.text); });
|
|
65
|
-
var tb=elt("div","tbl-bar"); var ab=document.createElement("button"); ab.className="btn-sm"; ab.textContent="+ Add row"; ab.onclick=function(){ var rows=tbody.querySelectorAll("tr"); var last=rows.length?parseInt(rows[rows.length-1].querySelector(".r-num").value||"95"):95; figRow(tbody,String(last+5),"",""); }; tb.appendChild(ab); tb.appendChild(elt("span",null,"")); bd.appendChild(tb);
|
|
66
|
-
}
|
|
67
|
-
function addFigure(fig){ fig=fig||{number:"",type:"Flowchart",briefDescription:"",introductory:"",steps:[],components:[]}; var acc=document.getElementById("acc"); var w=makeAcc("FIG. "+(fig.number||"?"),fig.type||"Flowchart",(fig.briefDescription||"").slice(0,70),function(bd,prev){ figBody(bd,prev,fig); }); acc.appendChild(w); return w; }
|
|
68
|
-
function secBody(bd,prev,name,text){
|
|
69
|
-
var f1=elt("div","field"); f1.appendChild(elt("label",null,"Section Name")); var ni=document.createElement("input"); ni.className="s-name"; ni.value=name||""; f1.appendChild(ni); bd.appendChild(f1);
|
|
70
|
-
var f2=elt("div","field"); f2.appendChild(elt("label",null,"Text (blank line = new paragraph)")); var ta=document.createElement("textarea"); ta.className="s-txt sec"; ta.value=text||""; ta.oninput=function(){ prev.textContent=(ta.value||"").replace(/\n/g," ").slice(0,80); }; f2.appendChild(ta); bd.appendChild(f2);
|
|
71
|
-
}
|
|
72
|
-
function addSection(name,text){ var acc=document.getElementById("acc"); var w=makeAcc(name||"Section",null,(text||"").replace(/\n/g," ").slice(0,80),function(bd,prev){ secBody(bd,prev,name,text); }); acc.appendChild(w); return w; }
|
|
73
|
-
function addItem(){ if(EDITOR_TYPE==="claims"){ var rows=document.querySelectorAll("#acc .c-num"); var last=rows.length?parseInt(rows[rows.length-1].value||"0"):0; addClaim(String(last+1),"",{}).classList.add("open"); } else if(EDITOR_TYPE==="figures"){ addFigure(null).classList.add("open"); } else { addSection("New Section","").classList.add("open"); } syncToggle(); }
|
|
74
|
-
function syncToggle(){ var btn=document.getElementById("toggleAll"); if(!btn) return; var accs=document.querySelectorAll("#acc .acc"); if(!accs.length){ btn.style.display="none"; return; } btn.style.display=""; var anyClosed=Array.from(accs).some(function(a){ return !a.classList.contains("open"); }); btn.textContent=anyClosed?"Expand all":"Collapse all"; }
|
|
75
|
-
function toggleAll(){ var accs=document.querySelectorAll("#acc .acc"); var anyClosed=Array.from(accs).some(function(a){ return !a.classList.contains("open"); }); accs.forEach(function(a){ if(anyClosed){ a.classList.add("open"); } else { a.classList.remove("open"); } }); syncToggle(); }
|
|
76
|
-
window.onload=function(){ var items=toItems()||[]; if(EDITOR_TYPE==="claims"){ items.forEach(function(c){ addClaim(c.number,c.text,c.orig); }); } else if(EDITOR_TYPE==="figures"){ items.forEach(function(f){ addFigure(f); }); } else { items.forEach(function(s){ addSection(s.name,s.text); }); } syncToggle(); };
|
|
77
|
-
function collect(){
|
|
78
|
-
var accs=document.querySelectorAll("#acc .acc");
|
|
79
|
-
if(EDITOR_TYPE==="claims"){ var out=[]; accs.forEach(function(a){ var n=a.querySelector(".c-num").value.trim(); var t=a.querySelector(".c-txt").value; var orig=a.__claim||{}; if(n||t.trim()){ out.push({ claimNumber:n, claimStatus:orig.claimStatus||"original", claimType:orig.claimType||"", claimText:t.split(/\n/), parent:orig.parent||"", independentParent:orig.independentParent||"" }); } }); return "[EDITOR SUBMIT - claims]\n"+JSON.stringify(out,null,2); }
|
|
80
|
-
if(EDITOR_TYPE==="figures"){ var figs=[]; accs.forEach(function(a){ var type=a.querySelector(".f-type").value; var isDev=(type==="Device"); var rows=Array.from(a.querySelectorAll("tbody tr")).map(function(tr){ return {type:isDev?"component":"step",number:tr.querySelector(".r-num").value.trim(),label:tr.querySelector(".r-lab").value.trim(),text:tr.querySelector(".r-txt").value.trim(),name:tr.querySelector(".r-lab").value.trim()}; }); figs.push({number:a.querySelector(".f-num").value.trim(),type:type,briefDescription:a.querySelector(".f-brief").value.trim(),steps:isDev?[]:rows,components:isDev?rows:[]}); }); return "[EDITOR SUBMIT - figures]\n"+JSON.stringify(figs,null,2); }
|
|
81
|
-
var secs={}; accs.forEach(function(a){ var nm=a.querySelector(".s-name").value.trim(); var tx=a.querySelector(".s-txt").value; if(nm){ var paras=tx.split(/\n\n+/).map(function(p){return p.trim();}).filter(Boolean).map(function(p){return "<p>"+p.replace(/\n/g," ")+"</p>";}); secs[nm]={paragraphs:paras}; } }); return "[EDITOR SUBMIT - sections]\n"+JSON.stringify(secs,null,2);
|
|
82
|
-
}
|
|
83
|
-
function go(){ var result=collect(); var done=function(){ document.getElementById("st").textContent="\u2713 Copied -- paste into chat."; }; if(navigator.clipboard){ navigator.clipboard.writeText(result).then(done).catch(fb); } else { fb(); } function fb(){ var el=document.createElement("textarea"); el.value=result; el.style.cssText="position:fixed;top:0;left:0;opacity:0;"; document.body.appendChild(el); el.select(); try{ document.execCommand("copy"); done(); }catch(e){ document.getElementById("st").textContent="Copy failed."; } document.body.removeChild(el); } }
|
|
84
|
-
</script>
|
|
85
|
-
</body>
|
|
86
|
-
</html>
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<title>Figures Editor</title>
|
|
6
|
-
<style>*{box-sizing:border-box;margin:0;padding:0}body{font-family:system-ui,-apple-system,sans-serif;background:#fff7ed;min-height:100vh;padding:20px 16px}.card{background:#fff;max-width:900px;margin:0 auto;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.12);overflow:hidden}.hdr{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid #fed7aa}.hdr img{height:26px;width:auto}.hdiv{width:1px;height:22px;background:#fed7aa;flex-shrink:0}.hdr h1{font-size:15px;font-weight:600;color:#1e293b}.hdr .toggle-all{margin-left:auto;flex-shrink:0}.bdy{padding:20px}.sub{font-size:13px;color:#64748b;margin-bottom:14px}input,select,textarea{font-family:inherit;font-size:13px;border:1.5px solid #fed7aa;border-radius:5px;padding:6px 10px;outline:none;width:100%;transition:border-color .15s;background:#fff}input:focus,select:focus,textarea:focus{border-color:#ea580c}.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.field{margin-bottom:12px}label{display:block;font-size:12px;font-weight:600;color:#374151;margin-bottom:4px}.acc{border:1px solid #fed7aa;overflow:hidden;margin-bottom:-1px}.acc-hd{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;background:#fffbf5;user-select:none}.acc-hd:hover{background:#fff7ed}.acc-hd .chev{color:#ea580c;font-size:12px;transition:transform .15s;flex-shrink:0}.acc.open .chev{transform:rotate(90deg)}.acc-hd .ttl{font-weight:600;font-size:13px;color:#1e293b;flex-shrink:0}.acc-hd .prev{font-size:12px;color:#94a3b8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.acc-hd .badge{font-size:11px;font-weight:600;padding:1px 8px;border-radius:10px;background:#ffedd5;color:#c2410c;flex-shrink:0}.acc-bd{display:none;padding:14px;border-top:1px solid #fed7aa;background:#fff}.acc.open .acc-bd{display:block}table{width:100%;border-collapse:collapse;margin-top:8px}th,td{padding:6px 10px;border:1px solid #fed7aa;font-size:13px;text-align:left}th{background:#fff7ed;font-weight:600;color:#374151}td input{border:none;padding:0;width:100%;background:transparent}td input:focus{outline:1px solid #ea580c;border-radius:3px}.tbl-bar{display:flex;justify-content:space-between;align-items:center;margin-top:8px}.btn-sm{padding:4px 12px;background:#fff;border:1.5px solid #fed7aa;border-radius:5px;font-size:12px;cursor:pointer;color:#374151}.btn-sm:hover{border-color:#ea580c}.del-btn{color:#dc2626;background:none;border:none;cursor:pointer;font-size:16px;line-height:1;padding:0 4px}.rm-item{margin-left:auto;color:#dc2626;background:none;border:none;cursor:pointer;font-size:13px;flex-shrink:0}.bar{margin-top:16px;display:flex;align-items:center;gap:14px}.cta{padding:9px 24px;background:#ea580c;color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s}.cta:hover{background:#c2410c}#st{color:#16a34a;font-size:13px;font-weight:500}textarea.sec{min-height:200px;font-family:Menlo,Consolas,monospace;line-height:1.6;resize:vertical}.addbar{margin:6px 0 4px}.ftr{padding:9px 20px;border-top:1px solid #fed7aa;font-size:11px;color:#94a3b8;display:flex;justify-content:space-between}</style>
|
|
7
|
-
</head>
|
|
8
|
-
<body>
|
|
9
|
-
<div class="card">
|
|
10
|
-
<div class="hdr"><img src="data:image/png;base64,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" alt="Fenix"><div class="hdiv"></div><h1>Figures Editor</h1><button class="btn-sm toggle-all" id="toggleAll" onclick="toggleAll()">Expand all</button></div>
|
|
11
|
-
<div class="bdy">
|
|
12
|
-
<p class="sub">Open any figure to edit its details and steps/components. Add or remove figures and rows as needed.</p>
|
|
13
|
-
<div id="acc"></div>
|
|
14
|
-
<div class="addbar"><button class="btn-sm" onclick="addItem()">+ Add figure</button></div>
|
|
15
|
-
<div class="bar"><button class="cta" onclick="go()">Copy for Save</button><span id="st"></span></div>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="ftr"><span>Fenix Patent Assistant</span><span>v3</span></div>
|
|
18
|
-
</div>
|
|
19
|
-
<script>
|
|
20
|
-
var EDITOR_TYPE="figures";
|
|
21
|
-
var INITIAL_CONTENT="";
|
|
22
|
-
function parseInit(){ var d=INITIAL_CONTENT; if(typeof d==="string"){ var s=d.trim(); if(!s) return null; try{ d=JSON.parse(s); }catch(e){ return s; } } return d; }
|
|
23
|
-
function toItems(){
|
|
24
|
-
var d=parseInit();
|
|
25
|
-
if(EDITOR_TYPE==="claims"){
|
|
26
|
-
if(Array.isArray(d)){ return d.map(function(c){ return {number:String(c.claimNumber||c.number||""),text:Array.isArray(c.claimText)?c.claimText.join("\n"):(c.claimText||c.text||""),orig:c}; }); }
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
if(EDITOR_TYPE==="figures"){ return Array.isArray(d)?d:(d&&d.figures?d.figures:[]); }
|
|
30
|
-
if(EDITOR_TYPE==="sections"){ var arr=[]; if(d&&typeof d==="object"&&!Array.isArray(d)){ Object.keys(d).forEach(function(k){ var v=d[k]; var txt=v&&v.paragraphs?v.paragraphs.map(function(p){return String(p).replace(/<[^>]+>/g,"").trim();}).join("\n\n"):(typeof v==="string"?v:""); arr.push({name:k,text:txt}); }); } return arr; }
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
function elt(tag,cls,txt){ var e=document.createElement(tag); if(cls)e.className=cls; if(txt!=null)e.textContent=txt; return e; }
|
|
34
|
-
function makeAcc(headerTitle,badge,preview,bodyBuilder){
|
|
35
|
-
var wrap=elt("div","acc"); var hd=elt("div","acc-hd");
|
|
36
|
-
hd.appendChild(elt("span","chev","\u25B6")); hd.appendChild(elt("span","ttl",headerTitle));
|
|
37
|
-
if(badge!=null){ hd.appendChild(elt("span","badge",badge)); }
|
|
38
|
-
var prev=elt("span","prev",preview||""); hd.appendChild(prev);
|
|
39
|
-
var rm=elt("button","rm-item","Remove"); rm.onclick=function(ev){ ev.stopPropagation(); wrap.remove(); syncToggle(); }; hd.appendChild(rm);
|
|
40
|
-
hd.onclick=function(){ wrap.classList.toggle("open"); syncToggle(); };
|
|
41
|
-
var bd=elt("div","acc-bd"); bodyBuilder(bd,prev);
|
|
42
|
-
wrap.appendChild(hd); wrap.appendChild(bd); return wrap;
|
|
43
|
-
}
|
|
44
|
-
function claimBody(bd,prev,num,text){
|
|
45
|
-
var f1=elt("div","field"); f1.appendChild(elt("label",null,"Claim Number")); var ni=document.createElement("input"); ni.className="c-num"; ni.value=num||""; f1.appendChild(ni); bd.appendChild(f1);
|
|
46
|
-
var f2=elt("div","field"); f2.appendChild(elt("label",null,"Claim Text")); var ta=document.createElement("textarea"); ta.className="c-txt sec"; ta.value=text||""; ta.oninput=function(){ prev.textContent=(ta.value||"").slice(0,80); }; f2.appendChild(ta); bd.appendChild(f2);
|
|
47
|
-
}
|
|
48
|
-
function addClaim(num,text,orig){ var acc=document.getElementById("acc"); var w=makeAcc("Claim "+(num||"?"),null,(text||"").slice(0,80),function(bd,prev){ claimBody(bd,prev,num,text); }); w.__claim=orig||{}; acc.appendChild(w); return w; }
|
|
49
|
-
function figRow(tbody,num,label,txt){
|
|
50
|
-
var tr=document.createElement("tr");
|
|
51
|
-
var td0=document.createElement("td"); var i0=document.createElement("input"); i0.className="r-num"; i0.style.width="60px"; i0.value=num||""; td0.appendChild(i0); tr.appendChild(td0);
|
|
52
|
-
var td1=document.createElement("td"); var i1=document.createElement("input"); i1.className="r-lab"; i1.value=label||""; td1.appendChild(i1); tr.appendChild(td1);
|
|
53
|
-
var td2=document.createElement("td"); var i2=document.createElement("input"); i2.className="r-txt"; i2.value=txt||""; td2.appendChild(i2); tr.appendChild(td2);
|
|
54
|
-
var td3=document.createElement("td"); var b=document.createElement("button"); b.className="del-btn"; b.textContent="x"; b.onclick=function(){ tr.remove(); }; td3.appendChild(b); tr.appendChild(td3);
|
|
55
|
-
tbody.appendChild(tr);
|
|
56
|
-
}
|
|
57
|
-
function figBody(bd,prev,fig){
|
|
58
|
-
var r=elt("div","row2");
|
|
59
|
-
var c1=elt("div","field"); c1.appendChild(elt("label",null,"Figure Number")); var nn=document.createElement("input"); nn.className="f-num"; nn.value=fig.number||""; c1.appendChild(nn); r.appendChild(c1);
|
|
60
|
-
var c2=elt("div","field"); c2.appendChild(elt("label",null,"Type")); var sel=document.createElement("select"); sel.className="f-type"; ["Flowchart","Device","Placeholder"].forEach(function(o){ var op=document.createElement("option"); op.textContent=o; sel.appendChild(op); }); sel.value=fig.type||"Flowchart"; c2.appendChild(sel); r.appendChild(c2); bd.appendChild(r);
|
|
61
|
-
var fb=elt("div","field"); fb.appendChild(elt("label",null,"Brief Description")); var bi=document.createElement("input"); bi.className="f-brief"; bi.value=fig.briefDescription||""; bi.oninput=function(){ prev.textContent=(bi.value||"").slice(0,70); }; fb.appendChild(bi); bd.appendChild(fb);
|
|
62
|
-
var lbl=elt("label",null,fig.type==="Device"?"Components":"Steps"); lbl.style.marginTop="6px"; bd.appendChild(lbl);
|
|
63
|
-
var tbl=document.createElement("table"); tbl.innerHTML="<thead><tr><th style='width:70px'>#</th><th style='width:170px'>Label</th><th>Description text</th><th style='width:34px'></th></tr></thead>"; var tbody=document.createElement("tbody"); tbl.appendChild(tbody); bd.appendChild(tbl);
|
|
64
|
-
var arr=(fig.type==="Device")?(fig.components||[]):(fig.steps||[]); arr.forEach(function(e){ figRow(tbody,e.number,e.label,e.text); });
|
|
65
|
-
var tb=elt("div","tbl-bar"); var ab=document.createElement("button"); ab.className="btn-sm"; ab.textContent="+ Add row"; ab.onclick=function(){ var rows=tbody.querySelectorAll("tr"); var last=rows.length?parseInt(rows[rows.length-1].querySelector(".r-num").value||"95"):95; figRow(tbody,String(last+5),"",""); }; tb.appendChild(ab); tb.appendChild(elt("span",null,"")); bd.appendChild(tb);
|
|
66
|
-
}
|
|
67
|
-
function addFigure(fig){ fig=fig||{number:"",type:"Flowchart",briefDescription:"",introductory:"",steps:[],components:[]}; var acc=document.getElementById("acc"); var w=makeAcc("FIG. "+(fig.number||"?"),fig.type||"Flowchart",(fig.briefDescription||"").slice(0,70),function(bd,prev){ figBody(bd,prev,fig); }); acc.appendChild(w); return w; }
|
|
68
|
-
function secBody(bd,prev,name,text){
|
|
69
|
-
var f1=elt("div","field"); f1.appendChild(elt("label",null,"Section Name")); var ni=document.createElement("input"); ni.className="s-name"; ni.value=name||""; f1.appendChild(ni); bd.appendChild(f1);
|
|
70
|
-
var f2=elt("div","field"); f2.appendChild(elt("label",null,"Text (blank line = new paragraph)")); var ta=document.createElement("textarea"); ta.className="s-txt sec"; ta.value=text||""; ta.oninput=function(){ prev.textContent=(ta.value||"").replace(/\n/g," ").slice(0,80); }; f2.appendChild(ta); bd.appendChild(f2);
|
|
71
|
-
}
|
|
72
|
-
function addSection(name,text){ var acc=document.getElementById("acc"); var w=makeAcc(name||"Section",null,(text||"").replace(/\n/g," ").slice(0,80),function(bd,prev){ secBody(bd,prev,name,text); }); acc.appendChild(w); return w; }
|
|
73
|
-
function addItem(){ if(EDITOR_TYPE==="claims"){ var rows=document.querySelectorAll("#acc .c-num"); var last=rows.length?parseInt(rows[rows.length-1].value||"0"):0; addClaim(String(last+1),"",{}).classList.add("open"); } else if(EDITOR_TYPE==="figures"){ addFigure(null).classList.add("open"); } else { addSection("New Section","").classList.add("open"); } syncToggle(); }
|
|
74
|
-
function syncToggle(){ var btn=document.getElementById("toggleAll"); if(!btn) return; var accs=document.querySelectorAll("#acc .acc"); if(!accs.length){ btn.style.display="none"; return; } btn.style.display=""; var anyClosed=Array.from(accs).some(function(a){ return !a.classList.contains("open"); }); btn.textContent=anyClosed?"Expand all":"Collapse all"; }
|
|
75
|
-
function toggleAll(){ var accs=document.querySelectorAll("#acc .acc"); var anyClosed=Array.from(accs).some(function(a){ return !a.classList.contains("open"); }); accs.forEach(function(a){ if(anyClosed){ a.classList.add("open"); } else { a.classList.remove("open"); } }); syncToggle(); }
|
|
76
|
-
window.onload=function(){ var items=toItems()||[]; if(EDITOR_TYPE==="claims"){ items.forEach(function(c){ addClaim(c.number,c.text,c.orig); }); } else if(EDITOR_TYPE==="figures"){ items.forEach(function(f){ addFigure(f); }); } else { items.forEach(function(s){ addSection(s.name,s.text); }); } syncToggle(); };
|
|
77
|
-
function collect(){
|
|
78
|
-
var accs=document.querySelectorAll("#acc .acc");
|
|
79
|
-
if(EDITOR_TYPE==="claims"){ var out=[]; accs.forEach(function(a){ var n=a.querySelector(".c-num").value.trim(); var t=a.querySelector(".c-txt").value; var orig=a.__claim||{}; if(n||t.trim()){ out.push({ claimNumber:n, claimStatus:orig.claimStatus||"original", claimType:orig.claimType||"", claimText:t.split(/\n/), parent:orig.parent||"", independentParent:orig.independentParent||"" }); } }); return "[EDITOR SUBMIT - claims]\n"+JSON.stringify(out,null,2); }
|
|
80
|
-
if(EDITOR_TYPE==="figures"){ var figs=[]; accs.forEach(function(a){ var type=a.querySelector(".f-type").value; var isDev=(type==="Device"); var rows=Array.from(a.querySelectorAll("tbody tr")).map(function(tr){ return {type:isDev?"component":"step",number:tr.querySelector(".r-num").value.trim(),label:tr.querySelector(".r-lab").value.trim(),text:tr.querySelector(".r-txt").value.trim(),name:tr.querySelector(".r-lab").value.trim()}; }); figs.push({number:a.querySelector(".f-num").value.trim(),type:type,briefDescription:a.querySelector(".f-brief").value.trim(),steps:isDev?[]:rows,components:isDev?rows:[]}); }); return "[EDITOR SUBMIT - figures]\n"+JSON.stringify(figs,null,2); }
|
|
81
|
-
var secs={}; accs.forEach(function(a){ var nm=a.querySelector(".s-name").value.trim(); var tx=a.querySelector(".s-txt").value; if(nm){ var paras=tx.split(/\n\n+/).map(function(p){return p.trim();}).filter(Boolean).map(function(p){return "<p>"+p.replace(/\n/g," ")+"</p>";}); secs[nm]={paragraphs:paras}; } }); return "[EDITOR SUBMIT - sections]\n"+JSON.stringify(secs,null,2);
|
|
82
|
-
}
|
|
83
|
-
function go(){ var result=collect(); var done=function(){ document.getElementById("st").textContent="\u2713 Copied -- paste into chat."; }; if(navigator.clipboard){ navigator.clipboard.writeText(result).then(done).catch(fb); } else { fb(); } function fb(){ var el=document.createElement("textarea"); el.value=result; el.style.cssText="position:fixed;top:0;left:0;opacity:0;"; document.body.appendChild(el); el.select(); try{ document.execCommand("copy"); done(); }catch(e){ document.getElementById("st").textContent="Copy failed."; } document.body.removeChild(el); } }
|
|
84
|
-
</script>
|
|
85
|
-
</body>
|
|
86
|
-
</html>
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<title>Spec Editor</title>
|
|
6
|
-
<style>*{box-sizing:border-box;margin:0;padding:0}body{font-family:system-ui,-apple-system,sans-serif;background:#fff7ed;min-height:100vh;padding:20px 16px}.card{background:#fff;max-width:900px;margin:0 auto;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,.12);overflow:hidden}.hdr{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid #fed7aa}.hdr img{height:26px;width:auto}.hdiv{width:1px;height:22px;background:#fed7aa;flex-shrink:0}.hdr h1{font-size:15px;font-weight:600;color:#1e293b}.hdr .toggle-all{margin-left:auto;flex-shrink:0}.bdy{padding:20px}.sub{font-size:13px;color:#64748b;margin-bottom:14px}input,select,textarea{font-family:inherit;font-size:13px;border:1.5px solid #fed7aa;border-radius:5px;padding:6px 10px;outline:none;width:100%;transition:border-color .15s;background:#fff}input:focus,select:focus,textarea:focus{border-color:#ea580c}.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}.field{margin-bottom:12px}label{display:block;font-size:12px;font-weight:600;color:#374151;margin-bottom:4px}.acc{border:1px solid #fed7aa;overflow:hidden;margin-bottom:-1px}.acc-hd{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;background:#fffbf5;user-select:none}.acc-hd:hover{background:#fff7ed}.acc-hd .chev{color:#ea580c;font-size:12px;transition:transform .15s;flex-shrink:0}.acc.open .chev{transform:rotate(90deg)}.acc-hd .ttl{font-weight:600;font-size:13px;color:#1e293b;flex-shrink:0}.acc-hd .prev{font-size:12px;color:#94a3b8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.acc-hd .badge{font-size:11px;font-weight:600;padding:1px 8px;border-radius:10px;background:#ffedd5;color:#c2410c;flex-shrink:0}.acc-bd{display:none;padding:14px;border-top:1px solid #fed7aa;background:#fff}.acc.open .acc-bd{display:block}table{width:100%;border-collapse:collapse;margin-top:8px}th,td{padding:6px 10px;border:1px solid #fed7aa;font-size:13px;text-align:left}th{background:#fff7ed;font-weight:600;color:#374151}td input{border:none;padding:0;width:100%;background:transparent}td input:focus{outline:1px solid #ea580c;border-radius:3px}.tbl-bar{display:flex;justify-content:space-between;align-items:center;margin-top:8px}.btn-sm{padding:4px 12px;background:#fff;border:1.5px solid #fed7aa;border-radius:5px;font-size:12px;cursor:pointer;color:#374151}.btn-sm:hover{border-color:#ea580c}.del-btn{color:#dc2626;background:none;border:none;cursor:pointer;font-size:16px;line-height:1;padding:0 4px}.rm-item{margin-left:auto;color:#dc2626;background:none;border:none;cursor:pointer;font-size:13px;flex-shrink:0}.bar{margin-top:16px;display:flex;align-items:center;gap:14px}.cta{padding:9px 24px;background:#ea580c;color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s}.cta:hover{background:#c2410c}#st{color:#16a34a;font-size:13px;font-weight:500}textarea.sec{min-height:200px;font-family:Menlo,Consolas,monospace;line-height:1.6;resize:vertical}.addbar{margin:6px 0 4px}.ftr{padding:9px 20px;border-top:1px solid #fed7aa;font-size:11px;color:#94a3b8;display:flex;justify-content:space-between}</style>
|
|
7
|
-
</head>
|
|
8
|
-
<body>
|
|
9
|
-
<div class="card">
|
|
10
|
-
<div class="hdr"><img src="data:image/png;base64,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" alt="Fenix"><div class="hdiv"></div><h1>Spec Editor</h1><button class="btn-sm toggle-all" id="toggleAll" onclick="toggleAll()">Expand all</button></div>
|
|
11
|
-
<div class="bdy">
|
|
12
|
-
<p class="sub">Open any section to edit it. Each figure description is its own section. Click Copy for Save and paste into chat.</p>
|
|
13
|
-
<div id="acc"></div>
|
|
14
|
-
<div class="addbar"><button class="btn-sm" onclick="addItem()">+ Add section</button></div>
|
|
15
|
-
<div class="bar"><button class="cta" onclick="go()">Copy for Save</button><span id="st"></span></div>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="ftr"><span>Fenix Patent Assistant</span><span>v3</span></div>
|
|
18
|
-
</div>
|
|
19
|
-
<script>
|
|
20
|
-
var EDITOR_TYPE="sections";
|
|
21
|
-
var INITIAL_CONTENT="";
|
|
22
|
-
function parseInit(){ var d=INITIAL_CONTENT; if(typeof d==="string"){ var s=d.trim(); if(!s) return null; try{ d=JSON.parse(s); }catch(e){ return s; } } return d; }
|
|
23
|
-
function toItems(){
|
|
24
|
-
var d=parseInit();
|
|
25
|
-
if(EDITOR_TYPE==="claims"){
|
|
26
|
-
if(Array.isArray(d)){ return d.map(function(c){ return {number:String(c.claimNumber||c.number||""),text:Array.isArray(c.claimText)?c.claimText.join("\n"):(c.claimText||c.text||""),orig:c}; }); }
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
if(EDITOR_TYPE==="figures"){ return Array.isArray(d)?d:(d&&d.figures?d.figures:[]); }
|
|
30
|
-
if(EDITOR_TYPE==="sections"){ var arr=[]; if(d&&typeof d==="object"&&!Array.isArray(d)){ Object.keys(d).forEach(function(k){ var v=d[k]; var txt=v&&v.paragraphs?v.paragraphs.map(function(p){return String(p).replace(/<[^>]+>/g,"").trim();}).join("\n\n"):(typeof v==="string"?v:""); arr.push({name:k,text:txt}); }); } return arr; }
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
function elt(tag,cls,txt){ var e=document.createElement(tag); if(cls)e.className=cls; if(txt!=null)e.textContent=txt; return e; }
|
|
34
|
-
function makeAcc(headerTitle,badge,preview,bodyBuilder){
|
|
35
|
-
var wrap=elt("div","acc"); var hd=elt("div","acc-hd");
|
|
36
|
-
hd.appendChild(elt("span","chev","\u25B6")); hd.appendChild(elt("span","ttl",headerTitle));
|
|
37
|
-
if(badge!=null){ hd.appendChild(elt("span","badge",badge)); }
|
|
38
|
-
var prev=elt("span","prev",preview||""); hd.appendChild(prev);
|
|
39
|
-
var rm=elt("button","rm-item","Remove"); rm.onclick=function(ev){ ev.stopPropagation(); wrap.remove(); syncToggle(); }; hd.appendChild(rm);
|
|
40
|
-
hd.onclick=function(){ wrap.classList.toggle("open"); syncToggle(); };
|
|
41
|
-
var bd=elt("div","acc-bd"); bodyBuilder(bd,prev);
|
|
42
|
-
wrap.appendChild(hd); wrap.appendChild(bd); return wrap;
|
|
43
|
-
}
|
|
44
|
-
function claimBody(bd,prev,num,text){
|
|
45
|
-
var f1=elt("div","field"); f1.appendChild(elt("label",null,"Claim Number")); var ni=document.createElement("input"); ni.className="c-num"; ni.value=num||""; f1.appendChild(ni); bd.appendChild(f1);
|
|
46
|
-
var f2=elt("div","field"); f2.appendChild(elt("label",null,"Claim Text")); var ta=document.createElement("textarea"); ta.className="c-txt sec"; ta.value=text||""; ta.oninput=function(){ prev.textContent=(ta.value||"").slice(0,80); }; f2.appendChild(ta); bd.appendChild(f2);
|
|
47
|
-
}
|
|
48
|
-
function addClaim(num,text,orig){ var acc=document.getElementById("acc"); var w=makeAcc("Claim "+(num||"?"),null,(text||"").slice(0,80),function(bd,prev){ claimBody(bd,prev,num,text); }); w.__claim=orig||{}; acc.appendChild(w); return w; }
|
|
49
|
-
function figRow(tbody,num,label,txt){
|
|
50
|
-
var tr=document.createElement("tr");
|
|
51
|
-
var td0=document.createElement("td"); var i0=document.createElement("input"); i0.className="r-num"; i0.style.width="60px"; i0.value=num||""; td0.appendChild(i0); tr.appendChild(td0);
|
|
52
|
-
var td1=document.createElement("td"); var i1=document.createElement("input"); i1.className="r-lab"; i1.value=label||""; td1.appendChild(i1); tr.appendChild(td1);
|
|
53
|
-
var td2=document.createElement("td"); var i2=document.createElement("input"); i2.className="r-txt"; i2.value=txt||""; td2.appendChild(i2); tr.appendChild(td2);
|
|
54
|
-
var td3=document.createElement("td"); var b=document.createElement("button"); b.className="del-btn"; b.textContent="x"; b.onclick=function(){ tr.remove(); }; td3.appendChild(b); tr.appendChild(td3);
|
|
55
|
-
tbody.appendChild(tr);
|
|
56
|
-
}
|
|
57
|
-
function figBody(bd,prev,fig){
|
|
58
|
-
var r=elt("div","row2");
|
|
59
|
-
var c1=elt("div","field"); c1.appendChild(elt("label",null,"Figure Number")); var nn=document.createElement("input"); nn.className="f-num"; nn.value=fig.number||""; c1.appendChild(nn); r.appendChild(c1);
|
|
60
|
-
var c2=elt("div","field"); c2.appendChild(elt("label",null,"Type")); var sel=document.createElement("select"); sel.className="f-type"; ["Flowchart","Device","Placeholder"].forEach(function(o){ var op=document.createElement("option"); op.textContent=o; sel.appendChild(op); }); sel.value=fig.type||"Flowchart"; c2.appendChild(sel); r.appendChild(c2); bd.appendChild(r);
|
|
61
|
-
var fb=elt("div","field"); fb.appendChild(elt("label",null,"Brief Description")); var bi=document.createElement("input"); bi.className="f-brief"; bi.value=fig.briefDescription||""; bi.oninput=function(){ prev.textContent=(bi.value||"").slice(0,70); }; fb.appendChild(bi); bd.appendChild(fb);
|
|
62
|
-
var lbl=elt("label",null,fig.type==="Device"?"Components":"Steps"); lbl.style.marginTop="6px"; bd.appendChild(lbl);
|
|
63
|
-
var tbl=document.createElement("table"); tbl.innerHTML="<thead><tr><th style='width:70px'>#</th><th style='width:170px'>Label</th><th>Description text</th><th style='width:34px'></th></tr></thead>"; var tbody=document.createElement("tbody"); tbl.appendChild(tbody); bd.appendChild(tbl);
|
|
64
|
-
var arr=(fig.type==="Device")?(fig.components||[]):(fig.steps||[]); arr.forEach(function(e){ figRow(tbody,e.number,e.label,e.text); });
|
|
65
|
-
var tb=elt("div","tbl-bar"); var ab=document.createElement("button"); ab.className="btn-sm"; ab.textContent="+ Add row"; ab.onclick=function(){ var rows=tbody.querySelectorAll("tr"); var last=rows.length?parseInt(rows[rows.length-1].querySelector(".r-num").value||"95"):95; figRow(tbody,String(last+5),"",""); }; tb.appendChild(ab); tb.appendChild(elt("span",null,"")); bd.appendChild(tb);
|
|
66
|
-
}
|
|
67
|
-
function addFigure(fig){ fig=fig||{number:"",type:"Flowchart",briefDescription:"",introductory:"",steps:[],components:[]}; var acc=document.getElementById("acc"); var w=makeAcc("FIG. "+(fig.number||"?"),fig.type||"Flowchart",(fig.briefDescription||"").slice(0,70),function(bd,prev){ figBody(bd,prev,fig); }); acc.appendChild(w); return w; }
|
|
68
|
-
function secBody(bd,prev,name,text){
|
|
69
|
-
var f1=elt("div","field"); f1.appendChild(elt("label",null,"Section Name")); var ni=document.createElement("input"); ni.className="s-name"; ni.value=name||""; f1.appendChild(ni); bd.appendChild(f1);
|
|
70
|
-
var f2=elt("div","field"); f2.appendChild(elt("label",null,"Text (blank line = new paragraph)")); var ta=document.createElement("textarea"); ta.className="s-txt sec"; ta.value=text||""; ta.oninput=function(){ prev.textContent=(ta.value||"").replace(/\n/g," ").slice(0,80); }; f2.appendChild(ta); bd.appendChild(f2);
|
|
71
|
-
}
|
|
72
|
-
function addSection(name,text){ var acc=document.getElementById("acc"); var w=makeAcc(name||"Section",null,(text||"").replace(/\n/g," ").slice(0,80),function(bd,prev){ secBody(bd,prev,name,text); }); acc.appendChild(w); return w; }
|
|
73
|
-
function addItem(){ if(EDITOR_TYPE==="claims"){ var rows=document.querySelectorAll("#acc .c-num"); var last=rows.length?parseInt(rows[rows.length-1].value||"0"):0; addClaim(String(last+1),"",{}).classList.add("open"); } else if(EDITOR_TYPE==="figures"){ addFigure(null).classList.add("open"); } else { addSection("New Section","").classList.add("open"); } syncToggle(); }
|
|
74
|
-
function syncToggle(){ var btn=document.getElementById("toggleAll"); if(!btn) return; var accs=document.querySelectorAll("#acc .acc"); if(!accs.length){ btn.style.display="none"; return; } btn.style.display=""; var anyClosed=Array.from(accs).some(function(a){ return !a.classList.contains("open"); }); btn.textContent=anyClosed?"Expand all":"Collapse all"; }
|
|
75
|
-
function toggleAll(){ var accs=document.querySelectorAll("#acc .acc"); var anyClosed=Array.from(accs).some(function(a){ return !a.classList.contains("open"); }); accs.forEach(function(a){ if(anyClosed){ a.classList.add("open"); } else { a.classList.remove("open"); } }); syncToggle(); }
|
|
76
|
-
window.onload=function(){ var items=toItems()||[]; if(EDITOR_TYPE==="claims"){ items.forEach(function(c){ addClaim(c.number,c.text,c.orig); }); } else if(EDITOR_TYPE==="figures"){ items.forEach(function(f){ addFigure(f); }); } else { items.forEach(function(s){ addSection(s.name,s.text); }); } syncToggle(); };
|
|
77
|
-
function collect(){
|
|
78
|
-
var accs=document.querySelectorAll("#acc .acc");
|
|
79
|
-
if(EDITOR_TYPE==="claims"){ var out=[]; accs.forEach(function(a){ var n=a.querySelector(".c-num").value.trim(); var t=a.querySelector(".c-txt").value; var orig=a.__claim||{}; if(n||t.trim()){ out.push({ claimNumber:n, claimStatus:orig.claimStatus||"original", claimType:orig.claimType||"", claimText:t.split(/\n/), parent:orig.parent||"", independentParent:orig.independentParent||"" }); } }); return "[EDITOR SUBMIT - claims]\n"+JSON.stringify(out,null,2); }
|
|
80
|
-
if(EDITOR_TYPE==="figures"){ var figs=[]; accs.forEach(function(a){ var type=a.querySelector(".f-type").value; var isDev=(type==="Device"); var rows=Array.from(a.querySelectorAll("tbody tr")).map(function(tr){ return {type:isDev?"component":"step",number:tr.querySelector(".r-num").value.trim(),label:tr.querySelector(".r-lab").value.trim(),text:tr.querySelector(".r-txt").value.trim(),name:tr.querySelector(".r-lab").value.trim()}; }); figs.push({number:a.querySelector(".f-num").value.trim(),type:type,briefDescription:a.querySelector(".f-brief").value.trim(),steps:isDev?[]:rows,components:isDev?rows:[]}); }); return "[EDITOR SUBMIT - figures]\n"+JSON.stringify(figs,null,2); }
|
|
81
|
-
var secs={}; accs.forEach(function(a){ var nm=a.querySelector(".s-name").value.trim(); var tx=a.querySelector(".s-txt").value; if(nm){ var paras=tx.split(/\n\n+/).map(function(p){return p.trim();}).filter(Boolean).map(function(p){return "<p>"+p.replace(/\n/g," ")+"</p>";}); secs[nm]={paragraphs:paras}; } }); return "[EDITOR SUBMIT - sections]\n"+JSON.stringify(secs,null,2);
|
|
82
|
-
}
|
|
83
|
-
function go(){ var result=collect(); var done=function(){ document.getElementById("st").textContent="\u2713 Copied -- paste into chat."; }; if(navigator.clipboard){ navigator.clipboard.writeText(result).then(done).catch(fb); } else { fb(); } function fb(){ var el=document.createElement("textarea"); el.value=result; el.style.cssText="position:fixed;top:0;left:0;opacity:0;"; document.body.appendChild(el); el.select(); try{ document.execCommand("copy"); done(); }catch(e){ document.getElementById("st").textContent="Copy failed."; } document.body.removeChild(el); } }
|
|
84
|
-
</script>
|
|
85
|
-
</body>
|
|
86
|
-
</html>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
place custom instructions here
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
place custom instructions here
|