123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822 |
- "use strict";
- var __read = (this && this.__read) || function (o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
- };
- var __values = (this && this.__values) || function(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m) return m.call(o);
- if (o && typeof o.length === "number") return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
- };
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Menu = void 0;
- var mathjax_js_1 = require("../../mathjax.js");
- var MathItem_js_1 = require("../../core/MathItem.js");
- var global_js_1 = require("../../components/global.js");
- var Options_js_1 = require("../../util/Options.js");
- var MJContextMenu_js_1 = require("./MJContextMenu.js");
- var MmlVisitor_js_1 = require("./MmlVisitor.js");
- var SelectableInfo_js_1 = require("./SelectableInfo.js");
- var info_js_1 = require("mj-context-menu/js/info.js");
- var parse_js_1 = require("mj-context-menu/js/parse.js");
- var item_rule_js_1 = require("mj-context-menu/js/item_rule.js");
- var css_util_js_1 = require("mj-context-menu/js/css_util.js");
- var sre_js_1 = __importDefault(require("../../a11y/sre.js"));
- var MathJax = global_js_1.MathJax;
- var isMac = (typeof window !== 'undefined' &&
- window.navigator && window.navigator.platform.substr(0, 3) === 'Mac');
- var Menu = (function () {
- function Menu(document, options) {
- if (options === void 0) { options = {}; }
- var _this = this;
- this.settings = null;
- this.defaultSettings = null;
- this.menu = null;
- this.MmlVisitor = new MmlVisitor_js_1.MmlVisitor();
- this.jax = {
- CHTML: null,
- SVG: null
- };
- this.rerenderStart = MathItem_js_1.STATE.LAST;
- this.about = new info_js_1.Info('<b style="font-size:120%;">MathJax</b> v' + mathjax_js_1.mathjax.version, function () {
- var lines = [];
- lines.push('Input Jax: ' + _this.document.inputJax.map(function (jax) { return jax.name; }).join(', '));
- lines.push('Output Jax: ' + _this.document.outputJax.name);
- lines.push('Document Type: ' + _this.document.kind);
- return lines.join('<br/>');
- }, '<a href="https://www.mathjax.org">www.mathjax.org</a>');
- this.help = new info_js_1.Info('<b>MathJax Help</b>', function () {
- return [
- '<p><b>MathJax</b> is a JavaScript library that allows page',
- ' authors to include mathematics within their web pages.',
- ' As a reader, you don\'t need to do anything to make that happen.</p>',
- '<p><b>Browsers</b>: MathJax works with all modern browsers including',
- ' Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.</p>',
- '<p><b>Math Menu</b>: MathJax adds a contextual menu to equations.',
- ' Right-click or CTRL-click on any mathematics to access the menu.</p>',
- '<div style="margin-left: 1em;">',
- '<p><b>Show Math As:</b> These options allow you to view the formula\'s',
- ' source markup (as MathML or in its original format).</p>',
- '<p><b>Copy to Clipboard:</b> These options copy the formula\'s source markup,',
- ' as MathML or in its original format, to the clipboard',
- ' (in browsers that support that).</p>',
- '<p><b>Math Settings:</b> These give you control over features of MathJax,',
- ' such the size of the mathematics, and the mechanism used',
- ' to display equations.</p>',
- '<p><b>Accessibility</b>: MathJax can work with screen',
- ' readers to make mathematics accessible to the visually impaired.',
- ' Turn on the explorer to enable generation of speech strings',
- ' and the ability to investigate expressions interactively.</p>',
- '<p><b>Language</b>: This menu lets you select the language used by MathJax',
- ' for its menus and warning messages. (Not yet implemented in version 3.)</p>',
- '</div>',
- '<p><b>Math Zoom</b>: If you are having difficulty reading an',
- ' equation, MathJax can enlarge it to help you see it better, or',
- ' you can scall all the math on the page to make it larger.',
- ' Turn these features on in the <b>Math Settings</b> menu.</p>',
- '<p><b>Preferences</b>: MathJax uses your browser\'s localStorage database',
- ' to save the preferences set via this menu locally in your browser. These',
- ' are not used to track you, and are not transferred or used remotely by',
- ' MathJax in any way.</p>'
- ].join('\n');
- }, '<a href="https://www.mathjax.org">www.mathjax.org</a>');
- this.mathmlCode = new SelectableInfo_js_1.SelectableInfo('MathJax MathML Expression', function () {
- if (!_this.menu.mathItem)
- return '';
- var text = _this.toMML(_this.menu.mathItem);
- return '<pre>' + _this.formatSource(text) + '</pre>';
- }, '');
- this.originalText = new SelectableInfo_js_1.SelectableInfo('MathJax Original Source', function () {
- if (!_this.menu.mathItem)
- return '';
- var text = _this.menu.mathItem.math;
- return '<pre style="font-size:125%; margin:0">' + _this.formatSource(text) + '</pre>';
- }, '');
- this.annotationText = new SelectableInfo_js_1.SelectableInfo('MathJax Annotation Text', function () {
- if (!_this.menu.mathItem)
- return '';
- var text = _this.menu.annotation;
- return '<pre style="font-size:125%; margin:0">' + _this.formatSource(text) + '</pre>';
- }, '');
- this.zoomBox = new info_js_1.Info('MathJax Zoomed Expression', function () {
- if (!_this.menu.mathItem)
- return '';
- var element = _this.menu.mathItem.typesetRoot.cloneNode(true);
- element.style.margin = '0';
- var scale = 1.25 * parseFloat(_this.settings.zscale);
- return '<div style="font-size: ' + scale + '%">' + element.outerHTML + '</div>';
- }, '');
- this.document = document;
- this.options = (0, Options_js_1.userOptions)((0, Options_js_1.defaultOptions)({}, this.constructor.OPTIONS), options);
- this.initSettings();
- this.mergeUserSettings();
- this.initMenu();
- this.applySettings();
- }
- Object.defineProperty(Menu.prototype, "isLoading", {
- get: function () {
- return Menu.loading > 0;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Menu.prototype, "loadingPromise", {
- get: function () {
- if (!this.isLoading) {
- return Promise.resolve();
- }
- if (!Menu._loadingPromise) {
- Menu._loadingPromise = new Promise(function (ok, failed) {
- Menu._loadingOK = ok;
- Menu._loadingFailed = failed;
- });
- }
- return Menu._loadingPromise;
- },
- enumerable: false,
- configurable: true
- });
- Menu.prototype.initSettings = function () {
- this.settings = this.options.settings;
- this.jax = this.options.jax;
- var jax = this.document.outputJax;
- this.jax[jax.name] = jax;
- this.settings.renderer = jax.name;
- if (MathJax._.a11y && MathJax._.a11y.explorer) {
- Object.assign(this.settings, this.document.options.a11y);
- }
- this.settings.scale = jax.options.scale;
- this.defaultSettings = Object.assign({}, this.settings);
- };
- Menu.prototype.initMenu = function () {
- var _this = this;
- var parser = new parse_js_1.Parser([['contextMenu', MJContextMenu_js_1.MJContextMenu.fromJson.bind(MJContextMenu_js_1.MJContextMenu)]]);
- this.menu = parser.parse({
- type: 'contextMenu',
- id: 'MathJax_Menu',
- pool: [
- this.variable('texHints'),
- this.variable('semantics'),
- this.variable('zoom'),
- this.variable('zscale'),
- this.variable('renderer', function (jax) { return _this.setRenderer(jax); }),
- this.variable('alt'),
- this.variable('cmd'),
- this.variable('ctrl'),
- this.variable('shift'),
- this.variable('scale', function (scale) { return _this.setScale(scale); }),
- this.variable('explorer', function (explore) { return _this.setExplorer(explore); }),
- this.a11yVar('highlight'),
- this.a11yVar('backgroundColor'),
- this.a11yVar('backgroundOpacity'),
- this.a11yVar('foregroundColor'),
- this.a11yVar('foregroundOpacity'),
- this.a11yVar('speech'),
- this.a11yVar('subtitles'),
- this.a11yVar('braille'),
- this.a11yVar('viewBraille'),
- this.a11yVar('locale', function (value) { return sre_js_1.default.setupEngine({ locale: value }); }),
- this.a11yVar('speechRules', function (value) {
- var _a = __read(value.split('-'), 2), domain = _a[0], style = _a[1];
- _this.document.options.sre.domain = domain;
- _this.document.options.sre.style = style;
- }),
- this.a11yVar('magnification'),
- this.a11yVar('magnify'),
- this.a11yVar('treeColoring'),
- this.a11yVar('infoType'),
- this.a11yVar('infoRole'),
- this.a11yVar('infoPrefix'),
- this.variable('autocollapse'),
- this.variable('collapsible', function (collapse) { return _this.setCollapsible(collapse); }),
- this.variable('inTabOrder', function (tab) { return _this.setTabOrder(tab); }),
- this.variable('assistiveMml', function (mml) { return _this.setAssistiveMml(mml); })
- ],
- items: [
- this.submenu('Show', 'Show Math As', [
- this.command('MathMLcode', 'MathML Code', function () { return _this.mathmlCode.post(); }),
- this.command('Original', 'Original Form', function () { return _this.originalText.post(); }),
- this.submenu('Annotation', 'Annotation')
- ]),
- this.submenu('Copy', 'Copy to Clipboard', [
- this.command('MathMLcode', 'MathML Code', function () { return _this.copyMathML(); }),
- this.command('Original', 'Original Form', function () { return _this.copyOriginal(); }),
- this.submenu('Annotation', 'Annotation')
- ]),
- this.rule(),
- this.submenu('Settings', 'Math Settings', [
- this.submenu('Renderer', 'Math Renderer', this.radioGroup('renderer', [['CHTML'], ['SVG']])),
- this.rule(),
- this.submenu('ZoomTrigger', 'Zoom Trigger', [
- this.command('ZoomNow', 'Zoom Once Now', function () { return _this.zoom(null, '', _this.menu.mathItem); }),
- this.rule(),
- this.radioGroup('zoom', [
- ['Click'], ['DoubleClick', 'Double-Click'], ['NoZoom', 'No Zoom']
- ]),
- this.rule(),
- this.label('TriggerRequires', 'Trigger Requires:'),
- this.checkbox((isMac ? 'Option' : 'Alt'), (isMac ? 'Option' : 'Alt'), 'alt'),
- this.checkbox('Command', 'Command', 'cmd', { hidden: !isMac }),
- this.checkbox('Control', 'Control', 'ctrl', { hiddne: isMac }),
- this.checkbox('Shift', 'Shift', 'shift')
- ]),
- this.submenu('ZoomFactor', 'Zoom Factor', this.radioGroup('zscale', [
- ['150%'], ['175%'], ['200%'], ['250%'], ['300%'], ['400%']
- ])),
- this.rule(),
- this.command('Scale', 'Scale All Math...', function () { return _this.scaleAllMath(); }),
- this.rule(),
- this.checkbox('texHints', 'Add TeX hints to MathML', 'texHints'),
- this.checkbox('semantics', 'Add original as annotation', 'semantics'),
- this.rule(),
- this.command('Reset', 'Reset to defaults', function () { return _this.resetDefaults(); })
- ]),
- this.submenu('Accessibility', 'Accessibility', [
- this.checkbox('Activate', 'Activate', 'explorer'),
- this.submenu('Speech', 'Speech', [
- this.checkbox('Speech', 'Speech Output', 'speech'),
- this.checkbox('Subtitles', 'Speech Subtitles', 'subtitles'),
- this.checkbox('Braille', 'Braille Output', 'braille'),
- this.checkbox('View Braille', 'Braille Subtitles', 'viewBraille'),
- this.rule(),
- this.submenu('A11yLanguage', 'Language'),
- this.rule(),
- this.submenu('Mathspeak', 'Mathspeak Rules', this.radioGroup('speechRules', [
- ['mathspeak-default', 'Verbose'],
- ['mathspeak-brief', 'Brief'],
- ['mathspeak-sbrief', 'Superbrief']
- ])),
- this.submenu('Clearspeak', 'Clearspeak Rules', this.radioGroup('speechRules', [
- ['clearspeak-default', 'Auto']
- ])),
- this.submenu('ChromeVox', 'ChromeVox Rules', this.radioGroup('speechRules', [
- ['chromevox-default', 'Standard'],
- ['chromevox-alternative', 'Alternative']
- ]))
- ]),
- this.submenu('Highlight', 'Highlight', [
- this.submenu('Background', 'Background', this.radioGroup('backgroundColor', [
- ['Blue'], ['Red'], ['Green'], ['Yellow'], ['Cyan'], ['Magenta'], ['White'], ['Black']
- ])),
- { 'type': 'slider',
- 'variable': 'backgroundOpacity',
- 'content': ' '
- },
- this.submenu('Foreground', 'Foreground', this.radioGroup('foregroundColor', [
- ['Black'], ['White'], ['Magenta'], ['Cyan'], ['Yellow'], ['Green'], ['Red'], ['Blue']
- ])),
- { 'type': 'slider',
- 'variable': 'foregroundOpacity',
- 'content': ' '
- },
- this.rule(),
- this.radioGroup('highlight', [
- ['None'], ['Hover'], ['Flame']
- ]),
- this.rule(),
- this.checkbox('TreeColoring', 'Tree Coloring', 'treeColoring')
- ]),
- this.submenu('Magnification', 'Magnification', [
- this.radioGroup('magnification', [
- ['None'], ['Keyboard'], ['Mouse']
- ]),
- this.rule(),
- this.radioGroup('magnify', [
- ['200%'], ['300%'], ['400%'], ['500%']
- ])
- ]),
- this.submenu('Semantic Info', 'Semantic Info', [
- this.checkbox('Type', 'Type', 'infoType'),
- this.checkbox('Role', 'Role', 'infoRole'),
- this.checkbox('Prefix', 'Prefix', 'infoPrefix')
- ], true),
- this.rule(),
- this.checkbox('Collapsible', 'Collapsible Math', 'collapsible'),
- this.checkbox('AutoCollapse', 'Auto Collapse', 'autocollapse', { disabled: true }),
- this.rule(),
- this.checkbox('InTabOrder', 'Include in Tab Order', 'inTabOrder'),
- this.checkbox('AssistiveMml', 'Include Hidden MathML', 'assistiveMml')
- ]),
- this.submenu('Language', 'Language'),
- this.rule(),
- this.command('About', 'About MathJax', function () { return _this.about.post(); }),
- this.command('Help', 'MathJax Help', function () { return _this.help.post(); })
- ]
- });
- var menu = this.menu;
- this.about.attachMenu(menu);
- this.help.attachMenu(menu);
- this.originalText.attachMenu(menu);
- this.annotationText.attachMenu(menu);
- this.mathmlCode.attachMenu(menu);
- this.zoomBox.attachMenu(menu);
- this.checkLoadableItems();
- this.enableExplorerItems(this.settings.explorer);
- menu.showAnnotation = this.annotationText;
- menu.copyAnnotation = this.copyAnnotation.bind(this);
- menu.annotationTypes = this.options.annotationTypes;
- css_util_js_1.CssStyles.addInfoStyles(this.document.document);
- css_util_js_1.CssStyles.addMenuStyles(this.document.document);
- };
- Menu.prototype.checkLoadableItems = function () {
- var e_1, _a;
- if (MathJax && MathJax._ && MathJax.loader && MathJax.startup) {
- if (this.settings.collapsible && (!MathJax._.a11y || !MathJax._.a11y.complexity)) {
- this.loadA11y('complexity');
- }
- if (this.settings.explorer && (!MathJax._.a11y || !MathJax._.a11y.explorer)) {
- this.loadA11y('explorer');
- }
- if (this.settings.assistiveMml && (!MathJax._.a11y || !MathJax._.a11y['assistive-mml'])) {
- this.loadA11y('assistive-mml');
- }
- }
- else {
- var menu = this.menu;
- try {
- for (var _b = __values(Object.keys(this.jax)), _c = _b.next(); !_c.done; _c = _b.next()) {
- var name_1 = _c.value;
- if (!this.jax[name_1]) {
- menu.findID('Settings', 'Renderer', name_1).disable();
- }
- }
- }
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_1) throw e_1.error; }
- }
- menu.findID('Accessibility', 'Activate').disable();
- menu.findID('Accessibility', 'AutoCollapse').disable();
- menu.findID('Accessibility', 'Collapsible').disable();
- }
- };
- Menu.prototype.enableExplorerItems = function (enable) {
- var e_2, _a;
- var menu = this.menu.findID('Accessibility', 'Activate').menu;
- try {
- for (var _b = __values(menu.items.slice(1)), _c = _b.next(); !_c.done; _c = _b.next()) {
- var item = _c.value;
- if (item instanceof item_rule_js_1.Rule)
- break;
- enable ? item.enable() : item.disable();
- }
- }
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_2) throw e_2.error; }
- }
- };
- Menu.prototype.mergeUserSettings = function () {
- try {
- var settings = localStorage.getItem(Menu.MENU_STORAGE);
- if (!settings)
- return;
- Object.assign(this.settings, JSON.parse(settings));
- this.setA11y(this.settings);
- }
- catch (err) {
- console.log('MathJax localStorage error: ' + err.message);
- }
- };
- Menu.prototype.saveUserSettings = function () {
- var e_3, _a;
- var settings = {};
- try {
- for (var _b = __values(Object.keys(this.settings)), _c = _b.next(); !_c.done; _c = _b.next()) {
- var name_2 = _c.value;
- if (this.settings[name_2] !== this.defaultSettings[name_2]) {
- settings[name_2] = this.settings[name_2];
- }
- }
- }
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_3) throw e_3.error; }
- }
- try {
- if (Object.keys(settings).length) {
- localStorage.setItem(Menu.MENU_STORAGE, JSON.stringify(settings));
- }
- else {
- localStorage.removeItem(Menu.MENU_STORAGE);
- }
- }
- catch (err) {
- console.log('MathJax localStorage error: ' + err.message);
- }
- };
- Menu.prototype.setA11y = function (options) {
- if (MathJax._.a11y && MathJax._.a11y.explorer) {
- MathJax._.a11y.explorer_ts.setA11yOptions(this.document, options);
- }
- };
- Menu.prototype.getA11y = function (option) {
- if (MathJax._.a11y && MathJax._.a11y.explorer) {
- if (this.document.options.a11y[option] !== undefined) {
- return this.document.options.a11y[option];
- }
- return this.document.options.sre[option];
- }
- };
- Menu.prototype.applySettings = function () {
- this.setTabOrder(this.settings.inTabOrder);
- this.document.options.enableAssistiveMml = this.settings.assistiveMml;
- this.document.outputJax.options.scale = parseFloat(this.settings.scale);
- if (this.settings.renderer !== this.defaultSettings.renderer) {
- this.setRenderer(this.settings.renderer);
- }
- };
- Menu.prototype.setScale = function (scale) {
- this.document.outputJax.options.scale = parseFloat(scale);
- this.document.rerender();
- };
- Menu.prototype.setRenderer = function (jax) {
- var _this = this;
- if (this.jax[jax]) {
- this.setOutputJax(jax);
- }
- else {
- var name_3 = jax.toLowerCase();
- this.loadComponent('output/' + name_3, function () {
- var startup = MathJax.startup;
- if (name_3 in startup.constructors) {
- startup.useOutput(name_3, true);
- startup.output = startup.getOutputJax();
- _this.jax[jax] = startup.output;
- _this.setOutputJax(jax);
- }
- });
- }
- };
- Menu.prototype.setOutputJax = function (jax) {
- this.jax[jax].setAdaptor(this.document.adaptor);
- this.document.outputJax = this.jax[jax];
- this.rerender();
- };
- Menu.prototype.setTabOrder = function (tab) {
- this.menu.store.inTaborder(tab);
- };
- Menu.prototype.setAssistiveMml = function (mml) {
- this.document.options.enableAssistiveMml = mml;
- if (!mml || (MathJax._.a11y && MathJax._.a11y['assistive-mml'])) {
- this.rerender();
- }
- else {
- this.loadA11y('assistive-mml');
- }
- };
- Menu.prototype.setExplorer = function (explore) {
- this.enableExplorerItems(explore);
- this.document.options.enableExplorer = explore;
- if (!explore || (MathJax._.a11y && MathJax._.a11y.explorer)) {
- this.rerender(this.settings.collapsible ? MathItem_js_1.STATE.RERENDER : MathItem_js_1.STATE.COMPILED);
- }
- else {
- this.loadA11y('explorer');
- }
- };
- Menu.prototype.setCollapsible = function (collapse) {
- this.document.options.enableComplexity = collapse;
- if (!collapse || (MathJax._.a11y && MathJax._.a11y.complexity)) {
- this.rerender(MathItem_js_1.STATE.COMPILED);
- }
- else {
- this.loadA11y('complexity');
- }
- };
- Menu.prototype.scaleAllMath = function () {
- var scale = (parseFloat(this.settings.scale) * 100).toFixed(1).replace(/.0$/, '');
- var percent = prompt('Scale all mathematics (compared to surrounding text) by', scale + '%');
- if (percent) {
- if (percent.match(/^\s*\d+(\.\d*)?\s*%?\s*$/)) {
- var scale_1 = parseFloat(percent) / 100;
- if (scale_1) {
- this.menu.pool.lookup('scale').setValue(String(scale_1));
- }
- else {
- alert('The scale should not be zero');
- }
- }
- else {
- alert('The scale should be a percentage (e.g., 120%)');
- }
- }
- };
- Menu.prototype.resetDefaults = function () {
- var e_4, _a;
- Menu.loading++;
- var pool = this.menu.pool;
- var settings = this.defaultSettings;
- try {
- for (var _b = __values(Object.keys(this.settings)), _c = _b.next(); !_c.done; _c = _b.next()) {
- var name_4 = _c.value;
- var variable = pool.lookup(name_4);
- if (variable) {
- variable.setValue(settings[name_4]);
- var item = variable.items[0];
- if (item) {
- item.executeCallbacks_();
- }
- }
- else {
- this.settings[name_4] = settings[name_4];
- }
- }
- }
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_4) throw e_4.error; }
- }
- Menu.loading--;
- this.rerender(MathItem_js_1.STATE.COMPILED);
- };
- Menu.prototype.checkComponent = function (name) {
- var promise = Menu.loadingPromises.get(name);
- if (promise) {
- mathjax_js_1.mathjax.retryAfter(promise);
- }
- };
- Menu.prototype.loadComponent = function (name, callback) {
- if (Menu.loadingPromises.has(name))
- return;
- var loader = MathJax.loader;
- if (!loader)
- return;
- Menu.loading++;
- var promise = loader.load(name).then(function () {
- Menu.loading--;
- Menu.loadingPromises.delete(name);
- callback();
- if (Menu.loading === 0 && Menu._loadingPromise) {
- Menu._loadingPromise = null;
- Menu._loadingOK();
- }
- }).catch(function (err) {
- if (Menu._loadingPromise) {
- Menu._loadingPromise = null;
- Menu._loadingFailed(err);
- }
- else {
- console.log(err);
- }
- });
- Menu.loadingPromises.set(name, promise);
- };
- Menu.prototype.loadA11y = function (component) {
- var _this = this;
- var noEnrich = !MathItem_js_1.STATE.ENRICHED;
- this.loadComponent('a11y/' + component, function () {
- var startup = MathJax.startup;
- mathjax_js_1.mathjax.handlers.unregister(startup.handler);
- startup.handler = startup.getHandler();
- mathjax_js_1.mathjax.handlers.register(startup.handler);
- var document = _this.document;
- _this.document = startup.document = startup.getDocument();
- _this.document.menu = _this;
- _this.document.outputJax.reset();
- _this.transferMathList(document);
- _this.document.processed = document.processed;
- if (!Menu._loadingPromise) {
- _this.document.outputJax.reset();
- _this.rerender(component === 'complexity' || noEnrich ? MathItem_js_1.STATE.COMPILED : MathItem_js_1.STATE.TYPESET);
- }
- });
- };
- Menu.prototype.transferMathList = function (document) {
- var e_5, _a;
- var MathItem = this.document.options.MathItem;
- try {
- for (var _b = __values(document.math), _c = _b.next(); !_c.done; _c = _b.next()) {
- var item = _c.value;
- var math = new MathItem();
- Object.assign(math, item);
- this.document.math.push(math);
- }
- }
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_5) throw e_5.error; }
- }
- };
- Menu.prototype.formatSource = function (text) {
- return text.trim().replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
- };
- Menu.prototype.toMML = function (math) {
- return this.MmlVisitor.visitTree(math.root, math, {
- texHints: this.settings.texHints,
- semantics: (this.settings.semantics && math.inputJax.name !== 'MathML')
- });
- };
- Menu.prototype.zoom = function (event, type, math) {
- if (!event || this.isZoomEvent(event, type)) {
- this.menu.mathItem = math;
- if (event) {
- this.menu.post(event);
- }
- this.zoomBox.post();
- }
- };
- Menu.prototype.isZoomEvent = function (event, zoom) {
- return (this.settings.zoom === zoom &&
- (!this.settings.alt || event.altKey) &&
- (!this.settings.ctrl || event.ctrlKey) &&
- (!this.settings.cmd || event.metaKey) &&
- (!this.settings.shift || event.shiftKey));
- };
- Menu.prototype.rerender = function (start) {
- if (start === void 0) { start = MathItem_js_1.STATE.TYPESET; }
- this.rerenderStart = Math.min(start, this.rerenderStart);
- if (!Menu.loading) {
- if (this.rerenderStart <= MathItem_js_1.STATE.COMPILED) {
- this.document.reset({ inputJax: [] });
- }
- this.document.rerender(this.rerenderStart);
- this.rerenderStart = MathItem_js_1.STATE.LAST;
- }
- };
- Menu.prototype.copyMathML = function () {
- this.copyToClipboard(this.toMML(this.menu.mathItem));
- };
- Menu.prototype.copyOriginal = function () {
- this.copyToClipboard(this.menu.mathItem.math.trim());
- };
- Menu.prototype.copyAnnotation = function () {
- this.copyToClipboard(this.menu.annotation.trim());
- };
- Menu.prototype.copyToClipboard = function (text) {
- var input = document.createElement('textarea');
- input.value = text;
- input.setAttribute('readonly', '');
- input.style.cssText = 'height: 1px; width: 1px; padding: 1px; position: absolute; left: -10px';
- document.body.appendChild(input);
- input.select();
- try {
- document.execCommand('copy');
- }
- catch (error) {
- alert('Can\'t copy to clipboard: ' + error.message);
- }
- document.body.removeChild(input);
- };
- Menu.prototype.addMenu = function (math) {
- var _this = this;
- var element = math.typesetRoot;
- element.addEventListener('contextmenu', function () { return _this.menu.mathItem = math; }, true);
- element.addEventListener('keydown', function () { return _this.menu.mathItem = math; }, true);
- element.addEventListener('click', function (event) { return _this.zoom(event, 'Click', math); }, true);
- element.addEventListener('dblclick', function (event) { return _this.zoom(event, 'DoubleClick', math); }, true);
- this.menu.store.insert(element);
- };
- Menu.prototype.clear = function () {
- this.menu.store.clear();
- };
- Menu.prototype.variable = function (name, action) {
- var _this = this;
- return {
- name: name,
- getter: function () { return _this.settings[name]; },
- setter: function (value) {
- _this.settings[name] = value;
- action && action(value);
- _this.saveUserSettings();
- }
- };
- };
- Menu.prototype.a11yVar = function (name, action) {
- var _this = this;
- return {
- name: name,
- getter: function () { return _this.getA11y(name); },
- setter: function (value) {
- _this.settings[name] = value;
- var options = {};
- options[name] = value;
- _this.setA11y(options);
- action && action(value);
- _this.saveUserSettings();
- }
- };
- };
- Menu.prototype.submenu = function (id, content, entries, disabled) {
- var e_6, _a;
- if (entries === void 0) { entries = []; }
- if (disabled === void 0) { disabled = false; }
- var items = [];
- try {
- for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
- var entry = entries_1_1.value;
- if (Array.isArray(entry)) {
- items = items.concat(entry);
- }
- else {
- items.push(entry);
- }
- }
- }
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
- finally {
- try {
- if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
- }
- finally { if (e_6) throw e_6.error; }
- }
- return { type: 'submenu', id: id, content: content, menu: { items: items }, disabled: (items.length === 0) || disabled };
- };
- Menu.prototype.command = function (id, content, action, other) {
- if (other === void 0) { other = {}; }
- return Object.assign({ type: 'command', id: id, content: content, action: action }, other);
- };
- Menu.prototype.checkbox = function (id, content, variable, other) {
- if (other === void 0) { other = {}; }
- return Object.assign({ type: 'checkbox', id: id, content: content, variable: variable }, other);
- };
- Menu.prototype.radioGroup = function (variable, radios) {
- var _this = this;
- return radios.map(function (def) { return _this.radio(def[0], def[1] || def[0], variable); });
- };
- Menu.prototype.radio = function (id, content, variable, other) {
- if (other === void 0) { other = {}; }
- return Object.assign({ type: 'radio', id: id, content: content, variable: variable }, other);
- };
- Menu.prototype.label = function (id, content) {
- return { type: 'label', id: id, content: content };
- };
- Menu.prototype.rule = function () {
- return { type: 'rule' };
- };
- Menu.MENU_STORAGE = 'MathJax-Menu-Settings';
- Menu.OPTIONS = {
- settings: {
- texHints: true,
- semantics: false,
- zoom: 'NoZoom',
- zscale: '200%',
- renderer: 'CHTML',
- alt: false,
- cmd: false,
- ctrl: false,
- shift: false,
- scale: 1,
- autocollapse: false,
- collapsible: false,
- inTabOrder: true,
- assistiveMml: true,
- explorer: false
- },
- jax: {
- CHTML: null,
- SVG: null
- },
- annotationTypes: (0, Options_js_1.expandable)({
- TeX: ['TeX', 'LaTeX', 'application/x-tex'],
- StarMath: ['StarMath 5.0'],
- Maple: ['Maple'],
- ContentMathML: ['MathML-Content', 'application/mathml-content+xml'],
- OpenMath: ['OpenMath']
- })
- };
- Menu.loading = 0;
- Menu.loadingPromises = new Map();
- Menu._loadingPromise = null;
- Menu._loadingOK = null;
- Menu._loadingFailed = null;
- return Menu;
- }());
- exports.Menu = Menu;
- //# sourceMappingURL=Menu.js.map
|