aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-01-06 13:26:30 -0500
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-01-06 13:26:30 -0500
commit1a7d407ce2c5be64711686c94528ae31adaea400 (patch)
tree9d16d9283db13a52dbbb16d6bdadd8124fc61e9c
parente4fb816e77a852230490817bb53aa6f9ceb3725e (diff)
Add hovertext to primitives in syntax explainer
-rw-r--r--docs/repl.js13
1 files changed, 11 insertions, 2 deletions
diff --git a/docs/repl.js b/docs/repl.js
index 976882b8..2fc88caa 100644
--- a/docs/repl.js
+++ b/docs/repl.js
@@ -65,7 +65,15 @@ if (doc.doexplain) doc.doexplain.onclick = () => {
,[[0,1,0,31],[0,0,516,4],[0,0,603,8],[0,0,723,3],[0,0,736,10],[0,0,987,3],[0,0,997,3],[0,0,1007,3],[0,0,1023,4],[0,0,1074,3],[1,1,1099,2],[0,0,1129,3],[0,0,1143,33],[0,0,2052,3],[1,0,2095,5],[0,0,2107,3],[0,0,2146,4],[0,0,2236,4],[1,1,2337,2],[0,1,2367,2],[0,0,2469,22],[0,0,2999,5],[0,0,3081,3]]
);
explain = (s,c) => {
- doc.explain.innerHTML = s?drawEval(s,c).map(l=>l.join("")).join("\n"):'';
+ let e = doc.explain;
+ e.innerHTML = s?drawEval(s,c).map(l=>l.join("")).join("\n"):'';
+ setTimeout(() => {
+ e.querySelectorAll('tspan').forEach(t => {
+ let h = primhelp[t.textContent];
+ if (!h) return;
+ t.innerHTML = t.textContent+'<title>'+h+'</title>';
+ });
+ }, 0);
}
}
explain(); // Clear
@@ -104,13 +112,14 @@ let syncls={ v:"Value", f:"Function", m:"Modifier", d:"Modifier2", n:"Number", g
let keydesc='f+Conjugate;Add_f-Negate;Subtract_f×Sign;Multiply_f÷Reciprocal;Divide_f⋆Exponential;Power_f√Square Root;Root_f⌊Floor;Minimum_f⌈Ceiling;Maximum_f∧Sort Up;And_f∨Sort Down;Or_f¬Not;Span_f|Absolute Value;Modulus_f≤Less Than or Equal to_f<Enclose;Less Than_f>Merge;Greater Than_f≥Greater Than or Equal to_f=Rank;Equals_f≠Length;Not Equals_f≡Depth;Match_f≢Shape;Not Match_f⊣Identity;Left_f⊢Identity;Right_f⥊Deshape;Reshape_f∾Join;Join to_f≍Solo;Couple_f↑Prefixes;Take_f↓Suffixes;Drop_f↕Range;Windows_f«Shift Before_f»Shift After_f⌽Reverse;Rotate_f⍉Transpose;Reorder axes_f/Indices;Replicate_f⍋Grade Up;Bins Up_f⍒Grade Down;Bins Down_f⊏First Cell;Select_f⊑First;Pick_f⊐Index of_f⊒Occurrence Count;Progressive Index of_f∊Unique Mask;Member of_f⍷Deduplicate;Find_f⊔Group Indices;Group_f!Assert;Assert with message_m˙Constant_m˜Self/Swap_d∘Atop_d○Over_d⊸Before/Bind_d⟜After/Bind_d⌾Under_d⊘Valences_d◶Choose_d⎉Rank_m˘Cells_d⚇Depth_m¨Each_m⌜Table_d⍟Repeat_m⁼Undo_m´Fold_m˝Insert_m`Scan_g←Define_g⇐Export_g↩Change_g→Return_s⋄Separator_s,Separator_p(Begin expression_p)End expression_k{Begin block_k}End block_b⟨Begin list_b⟩End list_l‿Strand_n·Nothing_v•System_v𝕨Left argument_f𝕎Left argument (as function)_v𝕩Right argument_f𝕏Right argument (as function)_v𝕗Modifier left operand (as subject)_f𝔽Modifier left operand_v𝕘2-modifier right operand (as subject)_f𝔾2-modifier right operand_v𝕤Current function (as subject)_f𝕊Current function_m𝕣Current modifier_n¯Minus_nπPi_n∞Infinity_a@Null character_c#Comment'.split(/[\n_]/);
let kk=Array.from('`123456890-=~!@#$%^&*()_+qwertuiop[]QWERTIOP{}asdfghjkl;ASFGHKL:"zxcvbm,./XVBM<>? \'');
let kv=Array.from('˜˘¨⁼⌜´˝∞¯•÷׬⎉⚇⍟◶⊘⎊⍎⍕⟨⟩√⋆⌽𝕨∊↑∧⊔⊏⊐π←→↙𝕎⍷𝕣⍋⊑⊒⍳⊣⊢⍉𝕤↕𝕗𝕘⊸∘○⟜⋄↖𝕊𝔽𝔾«⌾»·˙⥊𝕩↓∨⌊≡∾≍≠𝕏⍒⌈≢≤≥⇐‿↩');
-let keys={}, revkeys={};
+let keys={}, revkeys={}, primhelp={};
kk.map((k,i)=>{keys[k]=kv[i];revkeys[kv[i]]=k;});
doc.kb.innerHTML = keydesc.map(d=>{
let s = syncls[d[0]];
let c = Array.from(d)[1];
let t = d.slice(1+c.length).replace(';','\n');
let k = revkeys[c]; if (k) t += '\n\\ '+(k==='"'?'&quot;':k);
+ primhelp[c] = t;
return '<span title="'+t+'" class="'+s+'">'+c+'</span>'
}).join("&#8203;"); // zero-width space
doc.kb.onmousedown = ev => {