All files / src/lib/tinymce/plugins/math-formula mathfieldMenuItems.js

100% Statements 89/89
100% Branches 0/0
100% Functions 86/86
100% Lines 89/89

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163              78x 78x 1514x 1514x     78x         20x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x 18x 18x 18x 18x             18x 18x 18x 18x 18x              
/**
 * Returns grouped context-menu items for a MathLive mathfield instance.
 * Uses MathLive's submenu type to categorize symbols by mathematical domain.
 *
 * @param {object} mathfield - The MathLive mathfield element reference.
 * @returns {Array} Array of submenu item objects compatible with mathfield.menuItems.
 */
const getMathfieldMenuItems = (mathfield) => {
    const insert = (latex) => {
        mathfield.insert(latex);
        mathfield.focus();
    };
 
    return [
        {
            type: "submenu",
            label: "Arithmetic",
            submenu: [
                { label: "Plus  +", onMenuSelect: () => insert("+") },
                { label: "Minus  −", onMenuSelect: () => insert("-") },
                { label: "Plus/Minus  ±", onMenuSelect: () => insert("\\pm") },
                { label: "Multiply  ×", onMenuSelect: () => insert("\\times") },
                { label: "Divide  ÷", onMenuSelect: () => insert("\\div") },
            ],
        },
        {
            type: "submenu",
            label: "Comparison",
            submenu: [
                { label: "Equal  =", onMenuSelect: () => insert("=") },
                { label: "Not Equal  ≠", onMenuSelect: () => insert("\\neq") },
                { label: "Less Than  <", onMenuSelect: () => insert("<") },
                { label: "Greater Than  >", onMenuSelect: () => insert(">") },
                { label: "Less or Equal  ≤", onMenuSelect: () => insert("\\leq") },
                { label: "Greater or Equal  ≥", onMenuSelect: () => insert("\\geq") },
                { label: "Approximately  ≈", onMenuSelect: () => insert("\\approx") },
                { label: "Congruent  ≅", onMenuSelect: () => insert("\\cong") },
                { label: "Similar  ∼", onMenuSelect: () => insert("\\sim") },
                { label: "Proportional  ∝", onMenuSelect: () => insert("\\propto") },
            ],
        },
        {
            type: "submenu",
            label: "Geometry",
            submenu: [
                { label: "Degree  °", onMenuSelect: () => insert("\\degree") },
                { label: "Angle  ∠", onMenuSelect: () => insert("\\angle") },
                { label: "Perpendicular  ⊥", onMenuSelect: () => insert("\\perp") },
                { label: "Parallel  ∥", onMenuSelect: () => insert("\\parallel") },
                { label: "Triangle  △", onMenuSelect: () => insert("\\triangle") },
                { label: "Circle  ○", onMenuSelect: () => insert("\\circ") },
                { label: "Line Segment  —", onMenuSelect: () => insert("\\overline{AB}") },
                { label: "Ray  →", onMenuSelect: () => insert("\\overrightarrow{AB}") },
            ],
        },
        {
            type: "submenu",
            label: "Greek Letters",
            submenu: [
                { label: "Alpha  α", onMenuSelect: () => insert("\\alpha") },
                { label: "Beta  β", onMenuSelect: () => insert("\\beta") },
                { label: "Gamma  γ", onMenuSelect: () => insert("\\gamma") },
                { label: "Delta  δ", onMenuSelect: () => insert("\\delta") },
                { label: "Epsilon  ε", onMenuSelect: () => insert("\\epsilon") },
                { label: "Theta  θ", onMenuSelect: () => insert("\\theta") },
                { label: "Lambda  λ", onMenuSelect: () => insert("\\lambda") },
                { label: "Mu  μ", onMenuSelect: () => insert("\\mu") },
                { label: "Pi  π", onMenuSelect: () => insert("\\pi") },
                { label: "Sigma  σ", onMenuSelect: () => insert("\\sigma") },
                { label: "Phi  φ", onMenuSelect: () => insert("\\phi") },
                { label: "Omega  ω", onMenuSelect: () => insert("\\omega") },
            ],
        },
        {
            type: "submenu",
            label: "Trigonometry",
            submenu: [
                { label: "Sine  sin", onMenuSelect: () => insert("\\sin") },
                { label: "Cosine  cos", onMenuSelect: () => insert("\\cos") },
                { label: "Tangent  tan", onMenuSelect: () => insert("\\tan") },
                { label: "Cosecant  csc", onMenuSelect: () => insert("\\csc") },
                { label: "Secant  sec", onMenuSelect: () => insert("\\sec") },
                { label: "Cotangent  cot", onMenuSelect: () => insert("\\cot") },
                { label: "Arcsin  sin⁻¹", onMenuSelect: () => insert("\\arcsin") },
                { label: "Arccos  cos⁻¹", onMenuSelect: () => insert("\\arccos") },
                { label: "Arctan  tan⁻¹", onMenuSelect: () => insert("\\arctan") },
            ],
        },
        {
            type: "submenu",
            label: "Calculus",
            submenu: [
                { label: "Infinity  ∞", onMenuSelect: () => insert("\\infty") },
                { label: "Summation  ∑", onMenuSelect: () => insert("\\sum") },
                { label: "Product  ∏", onMenuSelect: () => insert("\\prod") },
                { label: "Integral  ∫", onMenuSelect: () => insert("\\int") },
                { label: "Double Integral  ∬", onMenuSelect: () => insert("\\iint") },
                { label: "Partial  ∂", onMenuSelect: () => insert("\\partial") },
                { label: "Nabla  ∇", onMenuSelect: () => insert("\\nabla") },
                { label: "Limit  lim", onMenuSelect: () => insert("\\lim") },
            ],
        },
        {
            type: "submenu",
            label: "Set Theory",
            submenu: [
                { label: "Subset  ⊂", onMenuSelect: () => insert("\\subset") },
                { label: "Superset  ⊃", onMenuSelect: () => insert("\\supset") },
                { label: "Subset or Equal  ⊆", onMenuSelect: () => insert("\\subseteq") },
                { label: "Element Of  ∈", onMenuSelect: () => insert("\\in") },
                { label: "Not Element Of  ∉", onMenuSelect: () => insert("\\notin") },
                { label: "Union  ∪", onMenuSelect: () => insert("\\cup") },
                { label: "Intersection  ∩", onMenuSelect: () => insert("\\cap") },
                { label: "Empty Set  ∅", onMenuSelect: () => insert("\\emptyset") },
                { label: "Universal Set  𝒰", onMenuSelect: () => insert("\\mathcal{U}") },
            ],
        },
        {
            type: "submenu",
            label: "Logic",
            submenu: [
                { label: "And  ∧", onMenuSelect: () => insert("\\land") },
                { label: "Or  ∨", onMenuSelect: () => insert("\\lor") },
                { label: "Not  ¬", onMenuSelect: () => insert("\\lnot") },
                { label: "For All  ∀", onMenuSelect: () => insert("\\forall") },
                { label: "There Exists  ∃", onMenuSelect: () => insert("\\exists") },
                { label: "Therefore  ∴", onMenuSelect: () => insert("\\therefore") },
                { label: "Because  ∵", onMenuSelect: () => insert("\\because") },
                { label: "Implies  ⟹", onMenuSelect: () => insert("\\implies") },
                { label: "If and Only If  ⟺", onMenuSelect: () => insert("\\iff") },
            ],
        },
        {
            type: "submenu",
            label: "Arrows",
            submenu: [
                { label: "Right Arrow  →", onMenuSelect: () => insert("\\rightarrow") },
                { label: "Left Arrow  ←", onMenuSelect: () => insert("\\leftarrow") },
                { label: "Left-Right Arrow  ↔", onMenuSelect: () => insert("\\leftrightarrow") },
                { label: "Up Arrow  ↑", onMenuSelect: () => insert("\\uparrow") },
                { label: "Down Arrow  ↓", onMenuSelect: () => insert("\\downarrow") },
                { label: "Double Right  ⇒", onMenuSelect: () => insert("\\Rightarrow") },
                { label: "Double Left  ⇐", onMenuSelect: () => insert("\\Leftarrow") },
                { label: "Double Left-Right  ⇔", onMenuSelect: () => insert("\\Leftrightarrow") },
                { label: "Maps To  ↦", onMenuSelect: () => insert("\\mapsto") },
            ],
        },
        {
            type: "submenu",
            label: "Number Sets",
            submenu: [
                { label: "Natural Numbers  ℕ", onMenuSelect: () => insert("\\mathbb{N}") },
                { label: "Integers  ℤ", onMenuSelect: () => insert("\\mathbb{Z}") },
                { label: "Rationals  ℚ", onMenuSelect: () => insert("\\mathbb{Q}") },
                { label: "Reals  ℝ", onMenuSelect: () => insert("\\mathbb{R}") },
                { label: "Complex  ℂ", onMenuSelect: () => insert("\\mathbb{C}") },
            ],
        },
    ];
};
 
export default getMathfieldMenuItems;