@pie-lib/math-input-mathlive 1.0.6 → 1.0.9-next.6608

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.
@@ -1,155 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _latexBridge = require("../latex-bridge");
5
- var _input = _interopRequireDefault(require("../mf/input"));
6
- /**
7
- * The imperative surface that @pie-lib/math-toolbar drives
8
- * (editor-and-pad.jsx: clear/command/keystroke/write/latex).
9
- *
10
- * These call the methods against a stub mathfield, because a real
11
- * <math-field> needs a browser. What matters here is the *translation*:
12
- * MathQuill-era arguments must become valid MathLive operations.
13
- */
14
- var stubField = function stubField() {
15
- var calls = {
16
- insert: [],
17
- executeCommand: [],
18
- focus: 0
19
- };
20
- return {
21
- calls: calls,
22
- value: '',
23
- getValue: function getValue() {
24
- return '';
25
- },
26
- insert: function insert(v) {
27
- calls.insert.push(v);
28
- },
29
- executeCommand: function executeCommand(v) {
30
- calls.executeCommand.push(v);
31
- },
32
- focus: function focus() {
33
- calls.focus++;
34
- },
35
- blur: function blur() {}
36
- };
37
- };
38
- var withField = function withField() {
39
- var input = new _input["default"]({});
40
- var f = stubField();
41
- input.mathField = f;
42
- return {
43
- input: input,
44
- f: f
45
- };
46
- };
47
- describe('Input imperative API (drives math-toolbar)', function () {
48
- describe('keystroke', function () {
49
- it('maps MathQuill keystroke names to MathLive selectors', function () {
50
- var _withField = withField(),
51
- input = _withField.input,
52
- f = _withField.f;
53
- input.keystroke('Left');
54
- input.keystroke('Right');
55
- input.keystroke('Backspace');
56
- expect(f.calls.executeCommand).toEqual(['moveToPreviousChar', 'moveToNextChar', 'deleteBackward']);
57
- });
58
- it('passes an unknown value through as a selector', function () {
59
- var _withField2 = withField(),
60
- input = _withField2.input,
61
- f = _withField2.f;
62
- input.keystroke('deleteForward');
63
- expect(f.calls.executeCommand).toEqual(['deleteForward']);
64
- });
65
- it('does not throw when the engine rejects the selector', function () {
66
- var _withField3 = withField(),
67
- input = _withField3.input;
68
- input.mathField.executeCommand = function () {
69
- throw new Error('unknown command');
70
- };
71
- expect(function () {
72
- return input.keystroke('Nonsense');
73
- }).not.toThrow();
74
- });
75
- it('covers every keystroke the keypad emits', function () {
76
- // navigation.js / edit.js only produce these three
77
- ['Left', 'Right', 'Backspace'].forEach(function (k) {
78
- return expect(_latexBridge.KEYSTROKES[k]).toBeDefined();
79
- });
80
- });
81
- });
82
- describe('command', function () {
83
- it('expands argument-taking commands into placeholders', function () {
84
- var _withField4 = withField(),
85
- input = _withField4.input,
86
- f = _withField4.f;
87
- input.command('\\frac');
88
-
89
- // a bare \frac would give no editable slots
90
- expect(f.calls.insert).toEqual(['\\frac{#?}{#?}']);
91
- });
92
- it('handles array commands', function () {
93
- var _withField5 = withField(),
94
- input = _withField5.input,
95
- f = _withField5.f;
96
- input.command(['\\log', '_']);
97
- expect(f.calls.insert).toEqual(['\\log_{#?}']);
98
- });
99
- it('passes argument-less commands through', function () {
100
- var _withField6 = withField(),
101
- input = _withField6.input,
102
- f = _withField6.f;
103
- input.command('\\pi');
104
- expect(f.calls.insert).toEqual(['\\pi']);
105
- });
106
- it('agrees with keyToAction', function () {
107
- expect((0, _latexBridge.keyToAction)({
108
- command: '\\sqrt'
109
- }).value).toEqual('\\sqrt{#?}');
110
- });
111
- });
112
- describe('safety before MathLive loads', function () {
113
- it('every method is a no-op rather than a crash', function () {
114
- var input = new _input["default"]({});
115
-
116
- // mathField is undefined until loadMathLive() resolves
117
- expect(input.latex()).toEqual('');
118
- expect(input.clear()).toEqual('');
119
- expect(input.command('\\frac')).toEqual('');
120
- expect(input.keystroke('Left')).toEqual('');
121
- expect(input.write('x')).toEqual('');
122
- expect(function () {
123
- return input.focus();
124
- }).not.toThrow();
125
- expect(function () {
126
- return input.blur();
127
- }).not.toThrow();
128
- expect(function () {
129
- return input.setLatex('x');
130
- }).not.toThrow();
131
- expect(input.element).toBeUndefined();
132
- });
133
- });
134
- describe('mqCompat facade', function () {
135
- // math-toolbar used to call this.input.mathField.latex(); external
136
- // consumers may still do the same.
137
- it('exposes latex() as a getter', function () {
138
- var _withField7 = withField(),
139
- input = _withField7.input;
140
- input.mathField.getValue = function () {
141
- return '\\frac{1}{2}';
142
- };
143
- expect(input.mqCompat.latex()).toEqual('\\frac{1}{2}');
144
- });
145
- it('exposes latex(v) as a setter and el()', function () {
146
- var _withField8 = withField(),
147
- input = _withField8.input,
148
- f = _withField8.f;
149
- input.mqCompat.latex('x+1');
150
- expect(f.value).toEqual('x+1');
151
- expect(input.mqCompat.el()).toBe(f);
152
- });
153
- });
154
- });
155
- //# sourceMappingURL=input-imperative.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-imperative.test.js","names":["_latexBridge","require","_input","_interopRequireDefault","stubField","calls","insert","executeCommand","focus","value","getValue","v","push","blur","withField","input","Input","f","mathField","describe","it","_withField","keystroke","expect","toEqual","_withField2","_withField3","Error","not","toThrow","forEach","k","KEYSTROKES","toBeDefined","_withField4","command","_withField5","_withField6","keyToAction","latex","clear","write","setLatex","element","toBeUndefined","_withField7","mqCompat","_withField8","el","toBe"],"sources":["../../src/__tests__/input-imperative.test.jsx"],"sourcesContent":["import { KEYSTROKES, keyToAction } from '../latex-bridge';\nimport Input from '../mf/input';\n\n/**\n * The imperative surface that @pie-lib/math-toolbar drives\n * (editor-and-pad.jsx: clear/command/keystroke/write/latex).\n *\n * These call the methods against a stub mathfield, because a real\n * <math-field> needs a browser. What matters here is the *translation*:\n * MathQuill-era arguments must become valid MathLive operations.\n */\nconst stubField = () => {\n const calls = { insert: [], executeCommand: [], focus: 0 };\n\n return {\n calls,\n value: '',\n getValue: () => '',\n insert(v) {\n calls.insert.push(v);\n },\n executeCommand(v) {\n calls.executeCommand.push(v);\n },\n focus() {\n calls.focus++;\n },\n blur() {},\n };\n};\n\nconst withField = () => {\n const input = new Input({});\n const f = stubField();\n\n input.mathField = f;\n\n return { input, f };\n};\n\ndescribe('Input imperative API (drives math-toolbar)', () => {\n describe('keystroke', () => {\n it('maps MathQuill keystroke names to MathLive selectors', () => {\n const { input, f } = withField();\n\n input.keystroke('Left');\n input.keystroke('Right');\n input.keystroke('Backspace');\n\n expect(f.calls.executeCommand).toEqual(['moveToPreviousChar', 'moveToNextChar', 'deleteBackward']);\n });\n\n it('passes an unknown value through as a selector', () => {\n const { input, f } = withField();\n\n input.keystroke('deleteForward');\n\n expect(f.calls.executeCommand).toEqual(['deleteForward']);\n });\n\n it('does not throw when the engine rejects the selector', () => {\n const { input } = withField();\n\n input.mathField.executeCommand = () => {\n throw new Error('unknown command');\n };\n\n expect(() => input.keystroke('Nonsense')).not.toThrow();\n });\n\n it('covers every keystroke the keypad emits', () => {\n // navigation.js / edit.js only produce these three\n ['Left', 'Right', 'Backspace'].forEach((k) => expect(KEYSTROKES[k]).toBeDefined());\n });\n });\n\n describe('command', () => {\n it('expands argument-taking commands into placeholders', () => {\n const { input, f } = withField();\n\n input.command('\\\\frac');\n\n // a bare \\frac would give no editable slots\n expect(f.calls.insert).toEqual(['\\\\frac{#?}{#?}']);\n });\n\n it('handles array commands', () => {\n const { input, f } = withField();\n\n input.command(['\\\\log', '_']);\n\n expect(f.calls.insert).toEqual(['\\\\log_{#?}']);\n });\n\n it('passes argument-less commands through', () => {\n const { input, f } = withField();\n\n input.command('\\\\pi');\n\n expect(f.calls.insert).toEqual(['\\\\pi']);\n });\n\n it('agrees with keyToAction', () => {\n expect(keyToAction({ command: '\\\\sqrt' }).value).toEqual('\\\\sqrt{#?}');\n });\n });\n\n describe('safety before MathLive loads', () => {\n it('every method is a no-op rather than a crash', () => {\n const input = new Input({});\n\n // mathField is undefined until loadMathLive() resolves\n expect(input.latex()).toEqual('');\n expect(input.clear()).toEqual('');\n expect(input.command('\\\\frac')).toEqual('');\n expect(input.keystroke('Left')).toEqual('');\n expect(input.write('x')).toEqual('');\n expect(() => input.focus()).not.toThrow();\n expect(() => input.blur()).not.toThrow();\n expect(() => input.setLatex('x')).not.toThrow();\n expect(input.element).toBeUndefined();\n });\n });\n\n describe('mqCompat facade', () => {\n // math-toolbar used to call this.input.mathField.latex(); external\n // consumers may still do the same.\n it('exposes latex() as a getter', () => {\n const { input } = withField();\n\n input.mathField.getValue = () => '\\\\frac{1}{2}';\n\n expect(input.mqCompat.latex()).toEqual('\\\\frac{1}{2}');\n });\n\n it('exposes latex(v) as a setter and el()', () => {\n const { input, f } = withField();\n\n input.mqCompat.latex('x+1');\n expect(f.value).toEqual('x+1');\n expect(input.mqCompat.el()).toBe(f);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,45 +0,0 @@
1
- "use strict";
2
-
3
- var _keypad = require("../keypad");
4
- var _latexBridge = require("../latex-bridge");
5
- /**
6
- * Keys use empty groups to show a command's shape (`\frac{}{}`, `x^{}`).
7
- * MathLive renders `{}` as nothing, so labels need a visible stand-in - but the
8
- * value that gets *inserted* must stay untouched.
9
- */
10
- describe('keypad label display normalisation', function () {
11
- it('gives empty groups a visible glyph', function () {
12
- var out = (0, _keypad.latexForDisplay)('\\frac{}{}');
13
- expect(out).not.toEqual('\\frac{}{}');
14
- expect(out).toContain('25AB'); // white small square
15
- expect(out).toContain('pie-empty');
16
- });
17
- it('handles every empty-group key shape', function () {
18
- ['\\frac{}{}', '\\overline{}', 'x^{}', 'x_{}', '\\sqrt{}', '\\sqrt[{}]{}', '\\abs{}', '\\log_{}', '\\longdiv{}'].forEach(function (latex) {
19
- expect((0, _keypad.latexForDisplay)(latex)).not.toContain('{}');
20
- });
21
- });
22
- it('treats a whitespace-only group as empty', function () {
23
- // e.g. \frac{x}{ }
24
- expect((0, _keypad.latexForDisplay)('\\frac{x}{ }')).toContain('pie-empty');
25
- });
26
- it('leaves latex without empty groups alone', function () {
27
- ['\\pi', '\\sin', 'x^2', '\\overline{AB}'].forEach(function (latex) {
28
- expect((0, _keypad.latexForDisplay)(latex)).toEqual(latex);
29
- });
30
- });
31
- it('handles nullish input', function () {
32
- expect((0, _keypad.latexForDisplay)(undefined)).toEqual('');
33
- expect((0, _keypad.latexForDisplay)('')).toEqual('');
34
- });
35
- it('does NOT affect what gets inserted into the field', function () {
36
- // the action must use the key's own latex, never the display form
37
- var key = {
38
- name: 'frac',
39
- latex: '\\frac{}{}'
40
- };
41
- expect((0, _latexBridge.keyToAction)(key).value).toEqual('\\frac{}{}');
42
- expect((0, _latexBridge.keyToAction)(key).value).not.toContain('pie-empty');
43
- });
44
- });
45
- //# sourceMappingURL=keypad-label.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keypad-label.test.js","names":["_keypad","require","_latexBridge","describe","it","out","latexForDisplay","expect","not","toEqual","toContain","forEach","latex","undefined","key","name","keyToAction","value"],"sources":["../../src/__tests__/keypad-label.test.jsx"],"sourcesContent":["import { latexForDisplay } from '../keypad';\nimport { keyToAction } from '../latex-bridge';\n\n/**\n * Keys use empty groups to show a command's shape (`\\frac{}{}`, `x^{}`).\n * MathLive renders `{}` as nothing, so labels need a visible stand-in - but the\n * value that gets *inserted* must stay untouched.\n */\ndescribe('keypad label display normalisation', () => {\n it('gives empty groups a visible glyph', () => {\n const out = latexForDisplay('\\\\frac{}{}');\n\n expect(out).not.toEqual('\\\\frac{}{}');\n expect(out).toContain('25AB'); // white small square\n expect(out).toContain('pie-empty');\n });\n\n it('handles every empty-group key shape', () => {\n ['\\\\frac{}{}', '\\\\overline{}', 'x^{}', 'x_{}', '\\\\sqrt{}', '\\\\sqrt[{}]{}', '\\\\abs{}', '\\\\log_{}', '\\\\longdiv{}'].forEach(\n (latex) => {\n expect(latexForDisplay(latex)).not.toContain('{}');\n },\n );\n });\n\n it('treats a whitespace-only group as empty', () => {\n // e.g. \\frac{x}{ }\n expect(latexForDisplay('\\\\frac{x}{ }')).toContain('pie-empty');\n });\n\n it('leaves latex without empty groups alone', () => {\n ['\\\\pi', '\\\\sin', 'x^2', '\\\\overline{AB}'].forEach((latex) => {\n expect(latexForDisplay(latex)).toEqual(latex);\n });\n });\n\n it('handles nullish input', () => {\n expect(latexForDisplay(undefined)).toEqual('');\n expect(latexForDisplay('')).toEqual('');\n });\n\n it('does NOT affect what gets inserted into the field', () => {\n // the action must use the key's own latex, never the display form\n const key = { name: 'frac', latex: '\\\\frac{}{}' };\n\n expect(keyToAction(key).value).toEqual('\\\\frac{}{}');\n expect(keyToAction(key).value).not.toContain('pie-empty');\n });\n});\n"],"mappings":";;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACAE,QAAQ,CAAC,oCAAoC,EAAE,YAAM;EACnDC,EAAE,CAAC,oCAAoC,EAAE,YAAM;IAC7C,IAAMC,GAAG,GAAG,IAAAC,uBAAe,EAAC,YAAY,CAAC;IAEzCC,MAAM,CAACF,GAAG,CAAC,CAACG,GAAG,CAACC,OAAO,CAAC,YAAY,CAAC;IACrCF,MAAM,CAACF,GAAG,CAAC,CAACK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/BH,MAAM,CAACF,GAAG,CAAC,CAACK,SAAS,CAAC,WAAW,CAAC;EACpC,CAAC,CAAC;EAEFN,EAAE,CAAC,qCAAqC,EAAE,YAAM;IAC9C,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAACO,OAAO,CACtH,UAACC,KAAK,EAAK;MACTL,MAAM,CAAC,IAAAD,uBAAe,EAACM,KAAK,CAAC,CAAC,CAACJ,GAAG,CAACE,SAAS,CAAC,IAAI,CAAC;IACpD,CACF,CAAC;EACH,CAAC,CAAC;EAEFN,EAAE,CAAC,yCAAyC,EAAE,YAAM;IAClD;IACAG,MAAM,CAAC,IAAAD,uBAAe,EAAC,cAAc,CAAC,CAAC,CAACI,SAAS,CAAC,WAAW,CAAC;EAChE,CAAC,CAAC;EAEFN,EAAE,CAAC,yCAAyC,EAAE,YAAM;IAClD,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAACO,OAAO,CAAC,UAACC,KAAK,EAAK;MAC5DL,MAAM,CAAC,IAAAD,uBAAe,EAACM,KAAK,CAAC,CAAC,CAACH,OAAO,CAACG,KAAK,CAAC;IAC/C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFR,EAAE,CAAC,uBAAuB,EAAE,YAAM;IAChCG,MAAM,CAAC,IAAAD,uBAAe,EAACO,SAAS,CAAC,CAAC,CAACJ,OAAO,CAAC,EAAE,CAAC;IAC9CF,MAAM,CAAC,IAAAD,uBAAe,EAAC,EAAE,CAAC,CAAC,CAACG,OAAO,CAAC,EAAE,CAAC;EACzC,CAAC,CAAC;EAEFL,EAAE,CAAC,mDAAmD,EAAE,YAAM;IAC5D;IACA,IAAMU,GAAG,GAAG;MAAEC,IAAI,EAAE,MAAM;MAAEH,KAAK,EAAE;IAAa,CAAC;IAEjDL,MAAM,CAAC,IAAAS,wBAAW,EAACF,GAAG,CAAC,CAACG,KAAK,CAAC,CAACR,OAAO,CAAC,YAAY,CAAC;IACpDF,MAAM,CAAC,IAAAS,wBAAW,EAACF,GAAG,CAAC,CAACG,KAAK,CAAC,CAACT,GAAG,CAACE,SAAS,CAAC,WAAW,CAAC;EAC3D,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,186 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
- var _latexBridge = require("../latex-bridge");
6
- describe('latex-bridge', function () {
7
- describe('toMathLive', function () {
8
- it('passes plain latex through', function () {
9
- expect((0, _latexBridge.toMathLive)('\\frac{1}{2}')).toEqual('\\frac{1}{2}');
10
- });
11
- it('handles empty/nullish', function () {
12
- expect((0, _latexBridge.toMathLive)('')).toEqual('');
13
- expect((0, _latexBridge.toMathLive)(undefined)).toEqual('');
14
- expect((0, _latexBridge.toMathLive)(null)).toEqual('');
15
- });
16
- it('converts a newLine embed to a multiline environment', function () {
17
- expect((0, _latexBridge.toMathLive)("a".concat(_latexBridge.NEWLINE_EMBED, "b"))).toEqual('\\displaylines{a \\\\ b}');
18
- });
19
- it('converts multiple newLine embeds', function () {
20
- expect((0, _latexBridge.toMathLive)("a".concat(_latexBridge.NEWLINE_EMBED, "b").concat(_latexBridge.NEWLINE_EMBED, "c"))).toEqual('\\displaylines{a \\\\ b \\\\ c}');
21
- });
22
- it('converts MathQuill answer blocks to placeholders', function () {
23
- expect((0, _latexBridge.toMathLive)('x=\\MathQuillMathField[r1]{}')).toEqual('x=\\placeholder[r1]{}');
24
- });
25
- it('preserves answer block content', function () {
26
- expect((0, _latexBridge.toMathLive)('\\MathQuillMathField[r2]{7}')).toEqual('\\placeholder[r2]{7}');
27
- });
28
- it('defaults an unnamed answer block id', function () {
29
- expect((0, _latexBridge.toMathLive)('\\MathQuillMathField[]{}')).toEqual("\\placeholder[".concat(_latexBridge.DEFAULT_FIELD_ID, "]{}"));
30
- });
31
- it('handles answer blocks and newlines together', function () {
32
- expect((0, _latexBridge.toMathLive)("\\MathQuillMathField[r1]{}".concat(_latexBridge.NEWLINE_EMBED, "x"))).toEqual('\\displaylines{\\placeholder[r1]{} \\\\ x}');
33
- });
34
- });
35
- describe('fromMathLive', function () {
36
- it('passes plain latex through', function () {
37
- expect((0, _latexBridge.fromMathLive)('\\frac{1}{2}')).toEqual('\\frac{1}{2}');
38
- });
39
- it('unwraps displaylines back to newLine embeds', function () {
40
- expect((0, _latexBridge.fromMathLive)('\\displaylines{a \\\\ b}')).toEqual("a".concat(_latexBridge.NEWLINE_EMBED, "b"));
41
- });
42
- it('converts placeholders back to MathQuill answer blocks', function () {
43
- expect((0, _latexBridge.fromMathLive)('x=\\placeholder[r1]{}')).toEqual('x=\\MathQuillMathField[r1]{}');
44
- });
45
- it('round-trips a newline document', function () {
46
- var stored = "a".concat(_latexBridge.NEWLINE_EMBED, "b").concat(_latexBridge.NEWLINE_EMBED, "c");
47
- expect((0, _latexBridge.fromMathLive)((0, _latexBridge.toMathLive)(stored))).toEqual(stored);
48
- });
49
- it('round-trips an answer-block document', function () {
50
- var stored = 'x=\\MathQuillMathField[r1]{}+\\MathQuillMathField[r2]{3}';
51
- expect((0, _latexBridge.fromMathLive)((0, _latexBridge.toMathLive)(stored))).toEqual(stored);
52
- });
53
- it('round-trips answer blocks combined with newlines', function () {
54
- var stored = "\\MathQuillMathField[r1]{}".concat(_latexBridge.NEWLINE_EMBED, "y");
55
- expect((0, _latexBridge.fromMathLive)((0, _latexBridge.toMathLive)(stored))).toEqual(stored);
56
- });
57
- });
58
- describe('fieldIds', function () {
59
- it('returns ids in document order', function () {
60
- expect((0, _latexBridge.fieldIds)('\\MathQuillMathField[r1]{}+\\MathQuillMathField[r2]{}')).toEqual(['r1', 'r2']);
61
- });
62
- it('returns [] when there are none', function () {
63
- expect((0, _latexBridge.fieldIds)('x+y')).toEqual([]);
64
- expect((0, _latexBridge.fieldIds)(undefined)).toEqual([]);
65
- });
66
- it('is repeatable (regex lastIndex is reset)', function () {
67
- var latex = '\\MathQuillMathField[r1]{}';
68
- expect((0, _latexBridge.fieldIds)(latex)).toEqual(['r1']);
69
- expect((0, _latexBridge.fieldIds)(latex)).toEqual(['r1']);
70
- });
71
- });
72
- describe('keyToAction', function () {
73
- it('prefers latex when there is no command', function () {
74
- expect((0, _latexBridge.keyToAction)({
75
- latex: '\\pi',
76
- write: 'p'
77
- })).toEqual({
78
- type: 'insert',
79
- value: '\\pi'
80
- });
81
- });
82
- it('uses write', function () {
83
- expect((0, _latexBridge.keyToAction)({
84
- write: 'x'
85
- })).toEqual({
86
- type: 'insert',
87
- value: 'x'
88
- });
89
- });
90
- it('expands commands that take arguments into placeholders', function () {
91
- expect((0, _latexBridge.keyToAction)({
92
- command: '\\frac'
93
- })).toEqual({
94
- type: 'insert',
95
- value: '\\frac{#?}{#?}'
96
- });
97
- expect((0, _latexBridge.keyToAction)({
98
- command: '\\sqrt'
99
- })).toEqual({
100
- type: 'insert',
101
- value: '\\sqrt{#?}'
102
- });
103
- expect((0, _latexBridge.keyToAction)({
104
- command: '^'
105
- })).toEqual({
106
- type: 'insert',
107
- value: '^{#?}'
108
- });
109
- });
110
- it('passes argument-less commands through', function () {
111
- expect((0, _latexBridge.keyToAction)({
112
- command: '\\pi'
113
- })).toEqual({
114
- type: 'insert',
115
- value: '\\pi'
116
- });
117
- });
118
- it('concatenates array commands (MathQuill cmd() applied them in sequence)', function () {
119
- // Measured Angle
120
- expect((0, _latexBridge.keyToAction)({
121
- command: ['m', '\\angle']
122
- })).toEqual({
123
- type: 'insert',
124
- value: 'm\\angle'
125
- });
126
- // log base n - the `_` part must still expand to a placeholder
127
- expect((0, _latexBridge.keyToAction)({
128
- command: ['\\log', '_']
129
- })).toEqual({
130
- type: 'insert',
131
- value: '\\log_{#?}'
132
- });
133
- });
134
- it('always returns a string value for insert actions', function () {
135
- [{
136
- command: ['m', '\\angle']
137
- }, {
138
- command: '\\frac'
139
- }, {
140
- write: 'x'
141
- }, {
142
- latex: '\\pi'
143
- }].forEach(function (k) {
144
- expect((0, _typeof2["default"])((0, _latexBridge.keyToAction)(k).value)).toBe('string');
145
- });
146
- });
147
- it('maps keystrokes to MathLive selectors', function () {
148
- expect((0, _latexBridge.keyToAction)({
149
- keystroke: 'Left'
150
- })).toEqual({
151
- type: 'command',
152
- value: 'moveToPreviousChar'
153
- });
154
- expect((0, _latexBridge.keyToAction)({
155
- keystroke: 'Right'
156
- })).toEqual({
157
- type: 'command',
158
- value: 'moveToNextChar'
159
- });
160
- expect((0, _latexBridge.keyToAction)({
161
- keystroke: 'Backspace'
162
- })).toEqual({
163
- type: 'command',
164
- value: 'deleteBackward'
165
- });
166
- });
167
- it('returns undefined for unknown/empty input', function () {
168
- expect((0, _latexBridge.keyToAction)(undefined)).toBeUndefined();
169
- expect((0, _latexBridge.keyToAction)({})).toBeUndefined();
170
- expect((0, _latexBridge.keyToAction)({
171
- keystroke: 'Nope'
172
- })).toBeUndefined();
173
- });
174
- it('latex wins over command only when command is absent', function () {
175
- // a key with both should use the command path (matches MathInput.keypadPress)
176
- expect((0, _latexBridge.keyToAction)({
177
- latex: '\\frac{}{}',
178
- command: '\\frac'
179
- })).toEqual({
180
- type: 'insert',
181
- value: '\\frac{#?}{#?}'
182
- });
183
- });
184
- });
185
- });
186
- //# sourceMappingURL=latex-bridge.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"latex-bridge.test.js","names":["_latexBridge","require","describe","it","expect","toMathLive","toEqual","undefined","concat","NEWLINE_EMBED","DEFAULT_FIELD_ID","fromMathLive","stored","fieldIds","latex","keyToAction","write","type","value","command","forEach","k","_typeof2","toBe","keystroke","toBeUndefined"],"sources":["../../src/__tests__/latex-bridge.test.js"],"sourcesContent":["import { toMathLive, fromMathLive, fieldIds, keyToAction, NEWLINE_EMBED, DEFAULT_FIELD_ID } from '../latex-bridge';\n\ndescribe('latex-bridge', () => {\n describe('toMathLive', () => {\n it('passes plain latex through', () => {\n expect(toMathLive('\\\\frac{1}{2}')).toEqual('\\\\frac{1}{2}');\n });\n\n it('handles empty/nullish', () => {\n expect(toMathLive('')).toEqual('');\n expect(toMathLive(undefined)).toEqual('');\n expect(toMathLive(null)).toEqual('');\n });\n\n it('converts a newLine embed to a multiline environment', () => {\n expect(toMathLive(`a${NEWLINE_EMBED}b`)).toEqual('\\\\displaylines{a \\\\\\\\ b}');\n });\n\n it('converts multiple newLine embeds', () => {\n expect(toMathLive(`a${NEWLINE_EMBED}b${NEWLINE_EMBED}c`)).toEqual('\\\\displaylines{a \\\\\\\\ b \\\\\\\\ c}');\n });\n\n it('converts MathQuill answer blocks to placeholders', () => {\n expect(toMathLive('x=\\\\MathQuillMathField[r1]{}')).toEqual('x=\\\\placeholder[r1]{}');\n });\n\n it('preserves answer block content', () => {\n expect(toMathLive('\\\\MathQuillMathField[r2]{7}')).toEqual('\\\\placeholder[r2]{7}');\n });\n\n it('defaults an unnamed answer block id', () => {\n expect(toMathLive('\\\\MathQuillMathField[]{}')).toEqual(`\\\\placeholder[${DEFAULT_FIELD_ID}]{}`);\n });\n\n it('handles answer blocks and newlines together', () => {\n expect(toMathLive(`\\\\MathQuillMathField[r1]{}${NEWLINE_EMBED}x`)).toEqual(\n '\\\\displaylines{\\\\placeholder[r1]{} \\\\\\\\ x}',\n );\n });\n });\n\n describe('fromMathLive', () => {\n it('passes plain latex through', () => {\n expect(fromMathLive('\\\\frac{1}{2}')).toEqual('\\\\frac{1}{2}');\n });\n\n it('unwraps displaylines back to newLine embeds', () => {\n expect(fromMathLive('\\\\displaylines{a \\\\\\\\ b}')).toEqual(`a${NEWLINE_EMBED}b`);\n });\n\n it('converts placeholders back to MathQuill answer blocks', () => {\n expect(fromMathLive('x=\\\\placeholder[r1]{}')).toEqual('x=\\\\MathQuillMathField[r1]{}');\n });\n\n it('round-trips a newline document', () => {\n const stored = `a${NEWLINE_EMBED}b${NEWLINE_EMBED}c`;\n\n expect(fromMathLive(toMathLive(stored))).toEqual(stored);\n });\n\n it('round-trips an answer-block document', () => {\n const stored = 'x=\\\\MathQuillMathField[r1]{}+\\\\MathQuillMathField[r2]{3}';\n\n expect(fromMathLive(toMathLive(stored))).toEqual(stored);\n });\n\n it('round-trips answer blocks combined with newlines', () => {\n const stored = `\\\\MathQuillMathField[r1]{}${NEWLINE_EMBED}y`;\n\n expect(fromMathLive(toMathLive(stored))).toEqual(stored);\n });\n });\n\n describe('fieldIds', () => {\n it('returns ids in document order', () => {\n expect(fieldIds('\\\\MathQuillMathField[r1]{}+\\\\MathQuillMathField[r2]{}')).toEqual(['r1', 'r2']);\n });\n\n it('returns [] when there are none', () => {\n expect(fieldIds('x+y')).toEqual([]);\n expect(fieldIds(undefined)).toEqual([]);\n });\n\n it('is repeatable (regex lastIndex is reset)', () => {\n const latex = '\\\\MathQuillMathField[r1]{}';\n\n expect(fieldIds(latex)).toEqual(['r1']);\n expect(fieldIds(latex)).toEqual(['r1']);\n });\n });\n\n describe('keyToAction', () => {\n it('prefers latex when there is no command', () => {\n expect(keyToAction({ latex: '\\\\pi', write: 'p' })).toEqual({ type: 'insert', value: '\\\\pi' });\n });\n\n it('uses write', () => {\n expect(keyToAction({ write: 'x' })).toEqual({ type: 'insert', value: 'x' });\n });\n\n it('expands commands that take arguments into placeholders', () => {\n expect(keyToAction({ command: '\\\\frac' })).toEqual({ type: 'insert', value: '\\\\frac{#?}{#?}' });\n expect(keyToAction({ command: '\\\\sqrt' })).toEqual({ type: 'insert', value: '\\\\sqrt{#?}' });\n expect(keyToAction({ command: '^' })).toEqual({ type: 'insert', value: '^{#?}' });\n });\n\n it('passes argument-less commands through', () => {\n expect(keyToAction({ command: '\\\\pi' })).toEqual({ type: 'insert', value: '\\\\pi' });\n });\n\n it('concatenates array commands (MathQuill cmd() applied them in sequence)', () => {\n // Measured Angle\n expect(keyToAction({ command: ['m', '\\\\angle'] })).toEqual({ type: 'insert', value: 'm\\\\angle' });\n // log base n - the `_` part must still expand to a placeholder\n expect(keyToAction({ command: ['\\\\log', '_'] })).toEqual({ type: 'insert', value: '\\\\log_{#?}' });\n });\n\n it('always returns a string value for insert actions', () => {\n [{ command: ['m', '\\\\angle'] }, { command: '\\\\frac' }, { write: 'x' }, { latex: '\\\\pi' }].forEach((k) => {\n expect(typeof keyToAction(k).value).toBe('string');\n });\n });\n\n it('maps keystrokes to MathLive selectors', () => {\n expect(keyToAction({ keystroke: 'Left' })).toEqual({ type: 'command', value: 'moveToPreviousChar' });\n expect(keyToAction({ keystroke: 'Right' })).toEqual({ type: 'command', value: 'moveToNextChar' });\n expect(keyToAction({ keystroke: 'Backspace' })).toEqual({ type: 'command', value: 'deleteBackward' });\n });\n\n it('returns undefined for unknown/empty input', () => {\n expect(keyToAction(undefined)).toBeUndefined();\n expect(keyToAction({})).toBeUndefined();\n expect(keyToAction({ keystroke: 'Nope' })).toBeUndefined();\n });\n\n it('latex wins over command only when command is absent', () => {\n // a key with both should use the command path (matches MathInput.keypadPress)\n expect(keyToAction({ latex: '\\\\frac{}{}', command: '\\\\frac' })).toEqual({\n type: 'insert',\n value: '\\\\frac{#?}{#?}',\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,170 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
- describe('mathlive-instance', function () {
6
- var instance;
7
- beforeEach(function () {
8
- jest.resetModules();
9
- // eslint-disable-next-line global-require
10
- instance = require('../mathlive-instance');
11
- instance.__resetEmbeds();
12
- });
13
- describe('registerEmbed', function () {
14
- it('registers a known embed and exposes it as a macro', function () {
15
- instance.registerEmbed('answerBlock', function () {
16
- return {
17
- htmlString: '<div class="answerBlock"></div>',
18
- latex: function latex() {
19
- return '\\embed{answerBlock}[]';
20
- }
21
- };
22
- });
23
- expect(instance.registeredEmbeds()).toEqual(['answerBlock']);
24
- // The macro tags output with data-embed so CSS can target it, replacing
25
- // MathQuill's htmlString hook.
26
- expect(instance.getMacros().answerBlock).toEqual('\\htmlData{embed=answerBlock}{\\placeholder{}}');
27
- });
28
- it('registers newLine as a harmless macro (it is handled by latex-bridge)', function () {
29
- instance.registerEmbed('newLine', function () {
30
- return {
31
- latex: function latex() {
32
- return '\\embed{newLine}[]';
33
- }
34
- };
35
- });
36
- expect(instance.getMacros().newLine).toEqual('\\htmlData{embed=newLine}{}');
37
- });
38
- it('falls back to a placeholder for an unknown embed', function () {
39
- instance.registerEmbed('somethingCustom', function () {
40
- return {
41
- htmlString: '<b>x</b>'
42
- };
43
- });
44
- expect(instance.getMacros().somethingCustom).toEqual('\\htmlData{embed=somethingCustom}{\\placeholder{}}');
45
- });
46
- it('honours an explicit mathliveLatex from the factory', function () {
47
- instance.registerEmbed('custom', function () {
48
- return {
49
- mathliveLatex: '\\alpha'
50
- };
51
- });
52
- expect(instance.getMacros().custom).toEqual('\\htmlData{embed=custom}{\\alpha}');
53
- });
54
- it('does not throw when the factory throws', function () {
55
- expect(function () {
56
- return instance.registerEmbed('bad', function () {
57
- throw new Error('boom');
58
- });
59
- }).not.toThrow();
60
- expect(instance.registeredEmbeds()).toEqual(['bad']);
61
- });
62
- it('ignores bad arguments', function () {
63
- instance.registerEmbed(undefined, function () {
64
- return {};
65
- });
66
- instance.registerEmbed('noFactory', undefined);
67
- expect(instance.registeredEmbeds()).toEqual([]);
68
- });
69
- it('always includes the pie macro set', function () {
70
- var macros = instance.getMacros();
71
- expect(macros.parallelogram).toBeDefined();
72
- expect(macros.longdiv).toBeDefined();
73
- expect(macros.napprox).toEqual('\\not\\approx');
74
- });
75
- });
76
- describe('applyStaticMath', function () {
77
- it('returns undefined without an element', function () {
78
- expect(instance.applyStaticMath(null, 'x')).toBeUndefined();
79
- });
80
- it('defers (returns undefined) when MathLive has not loaded', function () {
81
- var el = document.createElement('div');
82
- expect(instance.applyStaticMath(el, 'x')).toBeUndefined();
83
- });
84
- it('renders synchronously once MathLive is available', function () {
85
- var el = document.createElement('div');
86
- instance.__setMathLiveForTest({
87
- convertLatexToMarkup: function convertLatexToMarkup(l) {
88
- return "<span>".concat(l, "</span>");
89
- }
90
- });
91
- expect(instance.applyStaticMath(el, '\\pi')).toBe(el);
92
- expect(el.innerHTML).toEqual('<span>\\pi</span>');
93
- });
94
- it('falls back to the element textContent when no latex is passed', function () {
95
- var el = document.createElement('div');
96
- el.textContent = '\\theta';
97
- instance.__setMathLiveForTest({
98
- convertLatexToMarkup: function convertLatexToMarkup(l) {
99
- return "<i>".concat(l, "</i>");
100
- }
101
- });
102
- instance.applyStaticMath(el);
103
- expect(el.innerHTML).toEqual('<i>\\theta</i>');
104
- });
105
- it('bridges stored latex (newLine embed) before rendering', function () {
106
- var el = document.createElement('div');
107
- instance.__setMathLiveForTest({
108
- convertLatexToMarkup: function convertLatexToMarkup(l) {
109
- return l;
110
- }
111
- });
112
- instance.applyStaticMath(el, 'a\\embed{newLine}[]b');
113
-
114
- // \embed{newLine}[] must become a multiline environment
115
- expect(el.innerHTML).toContain('displaylines');
116
- });
117
- });
118
- describe('configureFonts', function () {
119
- // MathLive's default fontsDirectory is the relative './fonts/', which it
120
- // resolves against its own (empty, when bundled) script url and throws
121
- // "Invalid base URL" from loadFonts. Paths must become absolute.
122
- it('is exported and callable before MathLive loads', function () {
123
- expect((0, _typeof2["default"])(instance.configureFonts)).toBe('function');
124
- expect(function () {
125
- return instance.configureFonts('/mathlive-fonts');
126
- }).not.toThrow();
127
- });
128
- it('accepts null to disable font loading', function () {
129
- expect(function () {
130
- return instance.configureFonts(null);
131
- }).not.toThrow();
132
- });
133
- it('applies an absolute url to an already-loaded MathfieldElement', function () {
134
- var MathfieldElement = {};
135
-
136
- // simulate a loaded instance
137
- instance.__setMathLiveForTest({
138
- MathfieldElement: MathfieldElement
139
- });
140
- instance.configureFonts('/mathlive-fonts');
141
- expect(MathfieldElement.fontsDirectory).toEqual("".concat(document.baseURI.replace(/\/$/, ''), "/mathlive-fonts"));
142
- expect(MathfieldElement.fontsDirectory.startsWith('http')).toBe(true);
143
- });
144
- it('leaves a fully-qualified url untouched', function () {
145
- var MathfieldElement = {};
146
- instance.__setMathLiveForTest({
147
- MathfieldElement: MathfieldElement
148
- });
149
- instance.configureFonts('https://cdn.example.com/fonts');
150
- expect(MathfieldElement.fontsDirectory).toEqual('https://cdn.example.com/fonts');
151
- });
152
- it('passes null through rather than resolving it', function () {
153
- var MathfieldElement = {};
154
- instance.__setMathLiveForTest({
155
- MathfieldElement: MathfieldElement
156
- });
157
- instance.configureFonts(null);
158
- expect(MathfieldElement.fontsDirectory).toBeNull();
159
- });
160
- });
161
- describe('latexToMarkup', function () {
162
- it('returns empty string when MathLive is not loaded', function () {
163
- expect(instance.latexToMarkup('\\pi')).toEqual('');
164
- });
165
- it('returns empty string for empty latex', function () {
166
- expect(instance.latexToMarkup('')).toEqual('');
167
- });
168
- });
169
- });
170
- //# sourceMappingURL=mathlive-instance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mathlive-instance.test.js","names":["describe","instance","beforeEach","jest","resetModules","require","__resetEmbeds","it","registerEmbed","htmlString","latex","expect","registeredEmbeds","toEqual","getMacros","answerBlock","newLine","somethingCustom","mathliveLatex","custom","Error","not","toThrow","undefined","macros","parallelogram","toBeDefined","longdiv","napprox","applyStaticMath","toBeUndefined","el","document","createElement","__setMathLiveForTest","convertLatexToMarkup","l","concat","toBe","innerHTML","textContent","toContain","_typeof2","configureFonts","MathfieldElement","fontsDirectory","baseURI","replace","startsWith","toBeNull","latexToMarkup"],"sources":["../../src/__tests__/mathlive-instance.test.js"],"sourcesContent":["describe('mathlive-instance', () => {\n let instance;\n\n beforeEach(() => {\n jest.resetModules();\n // eslint-disable-next-line global-require\n instance = require('../mathlive-instance');\n instance.__resetEmbeds();\n });\n\n describe('registerEmbed', () => {\n it('registers a known embed and exposes it as a macro', () => {\n instance.registerEmbed('answerBlock', () => ({\n htmlString: '<div class=\"answerBlock\"></div>',\n latex: () => '\\\\embed{answerBlock}[]',\n }));\n\n expect(instance.registeredEmbeds()).toEqual(['answerBlock']);\n // The macro tags output with data-embed so CSS can target it, replacing\n // MathQuill's htmlString hook.\n expect(instance.getMacros().answerBlock).toEqual('\\\\htmlData{embed=answerBlock}{\\\\placeholder{}}');\n });\n\n it('registers newLine as a harmless macro (it is handled by latex-bridge)', () => {\n instance.registerEmbed('newLine', () => ({ latex: () => '\\\\embed{newLine}[]' }));\n\n expect(instance.getMacros().newLine).toEqual('\\\\htmlData{embed=newLine}{}');\n });\n\n it('falls back to a placeholder for an unknown embed', () => {\n instance.registerEmbed('somethingCustom', () => ({ htmlString: '<b>x</b>' }));\n\n expect(instance.getMacros().somethingCustom).toEqual('\\\\htmlData{embed=somethingCustom}{\\\\placeholder{}}');\n });\n\n it('honours an explicit mathliveLatex from the factory', () => {\n instance.registerEmbed('custom', () => ({ mathliveLatex: '\\\\alpha' }));\n\n expect(instance.getMacros().custom).toEqual('\\\\htmlData{embed=custom}{\\\\alpha}');\n });\n\n it('does not throw when the factory throws', () => {\n expect(() =>\n instance.registerEmbed('bad', () => {\n throw new Error('boom');\n }),\n ).not.toThrow();\n\n expect(instance.registeredEmbeds()).toEqual(['bad']);\n });\n\n it('ignores bad arguments', () => {\n instance.registerEmbed(undefined, () => ({}));\n instance.registerEmbed('noFactory', undefined);\n\n expect(instance.registeredEmbeds()).toEqual([]);\n });\n\n it('always includes the pie macro set', () => {\n const macros = instance.getMacros();\n\n expect(macros.parallelogram).toBeDefined();\n expect(macros.longdiv).toBeDefined();\n expect(macros.napprox).toEqual('\\\\not\\\\approx');\n });\n });\n\n describe('applyStaticMath', () => {\n it('returns undefined without an element', () => {\n expect(instance.applyStaticMath(null, 'x')).toBeUndefined();\n });\n\n it('defers (returns undefined) when MathLive has not loaded', () => {\n const el = document.createElement('div');\n\n expect(instance.applyStaticMath(el, 'x')).toBeUndefined();\n });\n\n it('renders synchronously once MathLive is available', () => {\n const el = document.createElement('div');\n\n instance.__setMathLiveForTest({ convertLatexToMarkup: (l) => `<span>${l}</span>` });\n\n expect(instance.applyStaticMath(el, '\\\\pi')).toBe(el);\n expect(el.innerHTML).toEqual('<span>\\\\pi</span>');\n });\n\n it('falls back to the element textContent when no latex is passed', () => {\n const el = document.createElement('div');\n\n el.textContent = '\\\\theta';\n instance.__setMathLiveForTest({ convertLatexToMarkup: (l) => `<i>${l}</i>` });\n instance.applyStaticMath(el);\n\n expect(el.innerHTML).toEqual('<i>\\\\theta</i>');\n });\n\n it('bridges stored latex (newLine embed) before rendering', () => {\n const el = document.createElement('div');\n\n instance.__setMathLiveForTest({ convertLatexToMarkup: (l) => l });\n instance.applyStaticMath(el, 'a\\\\embed{newLine}[]b');\n\n // \\embed{newLine}[] must become a multiline environment\n expect(el.innerHTML).toContain('displaylines');\n });\n });\n\n describe('configureFonts', () => {\n // MathLive's default fontsDirectory is the relative './fonts/', which it\n // resolves against its own (empty, when bundled) script url and throws\n // \"Invalid base URL\" from loadFonts. Paths must become absolute.\n it('is exported and callable before MathLive loads', () => {\n expect(typeof instance.configureFonts).toBe('function');\n expect(() => instance.configureFonts('/mathlive-fonts')).not.toThrow();\n });\n\n it('accepts null to disable font loading', () => {\n expect(() => instance.configureFonts(null)).not.toThrow();\n });\n\n it('applies an absolute url to an already-loaded MathfieldElement', () => {\n const MathfieldElement = {};\n\n // simulate a loaded instance\n instance.__setMathLiveForTest({ MathfieldElement });\n instance.configureFonts('/mathlive-fonts');\n\n expect(MathfieldElement.fontsDirectory).toEqual(`${document.baseURI.replace(/\\/$/, '')}/mathlive-fonts`);\n expect(MathfieldElement.fontsDirectory.startsWith('http')).toBe(true);\n });\n\n it('leaves a fully-qualified url untouched', () => {\n const MathfieldElement = {};\n\n instance.__setMathLiveForTest({ MathfieldElement });\n instance.configureFonts('https://cdn.example.com/fonts');\n\n expect(MathfieldElement.fontsDirectory).toEqual('https://cdn.example.com/fonts');\n });\n\n it('passes null through rather than resolving it', () => {\n const MathfieldElement = {};\n\n instance.__setMathLiveForTest({ MathfieldElement });\n instance.configureFonts(null);\n\n expect(MathfieldElement.fontsDirectory).toBeNull();\n });\n });\n\n describe('latexToMarkup', () => {\n it('returns empty string when MathLive is not loaded', () => {\n expect(instance.latexToMarkup('\\\\pi')).toEqual('');\n });\n\n it('returns empty string for empty latex', () => {\n expect(instance.latexToMarkup('')).toEqual('');\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}