aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/browser-gates.js
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-20 03:14:51 -0400
committerCraig Jennings <c@cjennings.net>2026-06-20 03:14:51 -0400
commit350ccfa05732066baaa577bf05c98f2ac60dc2d3 (patch)
treed04f618e403c10559df22c5805973d30a5164a8a /scripts/theme-studio/browser-gates.js
parent7e8f771408b7051066fb91fa9c68e80fa52405f7 (diff)
downloaddotemacs-350ccfa05732066baaa577bf05c98f2ac60dc2d3.tar.gz
dotemacs-350ccfa05732066baaa577bf05c98f2ac60dc2d3.zip
feat(theme-studio): show face docstrings in element hovers
Each table row's category cell now shows the face's Emacs docstring on hover, on top of whatever the cell showed before. The package cell keeps the face name underneath. The syntax and UI cells had no prior tooltip, so they show just the docstring. The label-span hints are left alone. I added face-docs-dump.el, which emits face-docs.json from a live Emacs: a face-name to first-doc-line map for the UI and package tables, and a category to doc map for the syntax table. The category to font-lock-face mapping is read from build-theme.el's own map, so it isn't copied a third time. generate.py inlines both maps. A pure composeHoverTitle helper composes the tooltip, covered by Node, Python, and a new browser gate.
Diffstat (limited to 'scripts/theme-studio/browser-gates.js')
-rw-r--r--scripts/theme-studio/browser-gates.js17
1 files changed, 17 insertions, 0 deletions
diff --git a/scripts/theme-studio/browser-gates.js b/scripts/theme-studio/browser-gates.js
index ebd4a3f00..86ec37e9f 100644
--- a/scripts/theme-studio/browser-gates.js
+++ b/scripts/theme-studio/browser-gates.js
@@ -971,3 +971,20 @@ if(location.hash==='#usagetest'){let ok=true;const notes=[];const A=(c,n)=>{if(!
PALETTE=saveP;for(const k in MAP)delete MAP[k];Object.assign(MAP,saveM);for(const f in UIMAP)delete UIMAP[f];Object.assign(UIMAP,saveU);syncSyntaxFromCache();renderPalette();
document.title='USAGETEST '+(ok?'PASS':'FAIL');
const d=document.createElement('div');d.id='usagetest';d.textContent='USAGETEST '+(ok?'PASS':'FAIL')+(notes.length?' fails='+notes.join(','):'');document.body.appendChild(d);}
+// Element-docstring hovers (open with #hovertest): each table's category cell
+// carries the face's Emacs docstring on top of its prior hover text, and the
+// existing label-span hints are left intact (added in addition, not replaced).
+if(location.hash==='#hovertest'){let ok=true;const notes=[];const A=(c,n)=>{if(!c){ok=false;notes.push(n);}};
+ buildTable();buildUITable();buildPkgTable();
+ const synCell=document.querySelector('#legbody tr[data-kind="kw"] .cat');
+ A(synCell&&synCell.title===SYNTAX_DOCS['kw'],'syntax cat cell shows the category face docstring: '+(synCell&&synCell.title));
+ const synLbl=document.querySelector('#legbody tr[data-kind="kw"] .cat span');
+ A(synLbl&&synLbl.title==='flash this category in the code','syntax label-span hint left intact');
+ const uiCell=document.querySelector('#uibody tr[data-face="mode-line"] .cat');
+ A(uiCell&&uiCell.title===FACE_DOCS['mode-line'],'ui cat cell shows the face docstring: '+(uiCell&&uiCell.title));
+ const app=curApp(),docFace=APPS[app].faces.map(r=>r[0]).find(f=>FACE_DOCS[f]);
+ A(docFace,'a package face with a docstring exists to test');
+ if(docFace){const pkgCell=document.querySelector('#pkgbody tr[data-face="'+docFace+'"] .cat');
+ A(pkgCell&&pkgCell.title===FACE_DOCS[docFace]+'\n\n'+docFace,'package cat cell shows docstring on top of the face name: '+(pkgCell&&JSON.stringify(pkgCell.title)));}
+ document.title='HOVERTEST '+(ok?'PASS':'FAIL');
+ const d=document.createElement('div');d.id='hovertest';d.textContent='HOVERTEST '+(ok?'PASS':'FAIL')+(notes.length?' fails='+notes.join(','):'');document.body.appendChild(d);}