From a1bfe0afcf9e5705d1c9abae1977d73a92baad69 Mon Sep 17 00:00:00 2001 From: zorkow Date: Fri, 29 Jan 2016 17:22:09 +0000 Subject: [PATCH 1/4] Adds configuration for excluding MathJax elements from tab order. --- unpacked/MathJax.js | 10 +++++++--- unpacked/config/default.js | 1 + unpacked/extensions/MathMenu.js | 13 +++++++++++-- unpacked/jax/output/CommonHTML/jax.js | 2 +- unpacked/jax/output/HTML-CSS/jax.js | 2 +- unpacked/jax/output/NativeMML/jax.js | 2 +- unpacked/jax/output/PlainSource/jax.js | 2 +- unpacked/jax/output/PreviewHTML/jax.js | 2 +- unpacked/jax/output/SVG/jax.js | 2 +- 9 files changed, 25 insertions(+), 11 deletions(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index 689ef5a17..f589243e4 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -1880,7 +1880,7 @@ MathJax.Hub = { showMathMenu: true, // attach math context menu to typeset math? showMathMenuMSIE: true, // separtely determine if MSIE should have math menu // (since the code for that is a bit delicate) - + menuSettings: { zoom: "None", // when to do MathZoom CTRL: false, // require CTRL for MathZoom? @@ -1896,6 +1896,7 @@ MathJax.Hub = { mpContext: false, // true means pass menu events to MathPlayer in IE mpMouse: false, // true means pass mouse events to MathPlayer in IE texHints: true, // include class names for TeXAtom elements + inTabOrder: false, // set to false if math elements should be included in the tabindex semantics: false // add semantics tag with original form in MathML output }, @@ -2367,14 +2368,14 @@ MathJax.Hub = { error.oncontextmenu = EVENT.Menu; error.onmousedown = EVENT.Mousedown; error.onkeydown = EVENT.Keydown; - error.tabIndex = 0; + error.tabIndex = this.getTabOrder(); } else { MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js",function () { var EVENT = MathJax.Extension.MathEvents.Event; error.oncontextmenu = EVENT.Menu; error.onmousedown = EVENT.Mousedown; error.keydown = EVENT.Keydown; - error.tabIndex = 0; + error.tabIndex = this.getTabOrder(); }); } // @@ -2462,6 +2463,9 @@ MathJax.Hub = { return dst; }, + getTabOrder: function() { + return this.config.menuSettings.inTabOrder ? 0 : -1}, + // Old browsers (e.g. Internet Explorer <= 8) do not support trim(). SplitList: ("trim" in String.prototype ? function (list) {return list.trim().split(/\s+/)} : diff --git a/unpacked/config/default.js b/unpacked/config/default.js index a6aee2f4f..6f92045d2 100644 --- a/unpacked/config/default.js +++ b/unpacked/config/default.js @@ -246,6 +246,7 @@ MathJax.Hub.Config({ mpContext: false, // true means pass menu events to MathPlayer in IE mpMouse: false, // true means pass mouse events to MathPlayer in IE texHints: true, // include class names for TeXAtom elements + inTabOrder: true, // set to true if math elements should be included in the tabindex semantics: false // add semantics tag with original form in MathML output }, diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js index caa69de33..23c8bfec6 100644 --- a/unpacked/extensions/MathMenu.js +++ b/unpacked/extensions/MathMenu.js @@ -546,6 +546,9 @@ Activate: function(event, menu) { var jaxs = MENU.AllNodes(); for (var j = 0, jax; jax = jaxs[j]; j++) { + if (jax.tabIndex > 0) { + jax.oldTabIndex = jax.tabIndex; + } jax.tabIndex = -1; } MENU.posted = true; @@ -554,7 +557,12 @@ MENU.ActiveNode().tabIndex = -1; var jaxs = MENU.AllNodes(); for (var j = 0, jax; jax = jaxs[j]; j++) { - jax.tabIndex = 0; + if (jax.oldTabIndex !== undefined) { + jax.tabIndex = jax.oldTabIndex + delete jax.oldTabIndex; + } else { + jax.tabIndex = HUB.getTabOrder(); + } } MENU.FocusNode(MENU.CurrentNode()); MENU.posted = false; @@ -1534,7 +1542,8 @@ ITEM.RADIO("PlainSource","renderer", {action: MENU.Renderer, value:"PlainSource"}), ITEM.RULE(), ITEM.CHECKBOX("Fast Preview", "FastPreview"), - ITEM.CHECKBOX("Assistive MathML", "assistiveMML", {action:MENU.AssistiveMML}) + ITEM.CHECKBOX("Assistive MathML", "assistiveMML", {action:MENU.AssistiveMML}), + ITEM.CHECKBOX("Include in Tab Order", "inTabOrder", {action:CONFIG.inTabOrder}) ), ITEM.SUBMENU("MathPlayer", {hidden:!HUB.Browser.isMSIE || !CONFIG.showMathPlayer, disabled:!HUB.Browser.hasMathPlayer}, diff --git a/unpacked/jax/output/CommonHTML/jax.js b/unpacked/jax/output/CommonHTML/jax.js index 54b0f75c3..354bfecf9 100644 --- a/unpacked/jax/output/CommonHTML/jax.js +++ b/unpacked/jax/output/CommonHTML/jax.js @@ -403,7 +403,7 @@ onmouseover:EVENT.Mouseover, onmouseout:EVENT.Mouseout, onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: "0" + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() }); if (jax.CHTML.display) { // diff --git a/unpacked/jax/output/HTML-CSS/jax.js b/unpacked/jax/output/HTML-CSS/jax.js index a2ee58dd1..92792601b 100644 --- a/unpacked/jax/output/HTML-CSS/jax.js +++ b/unpacked/jax/output/HTML-CSS/jax.js @@ -578,7 +578,7 @@ onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: "0" + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() }); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start; diff --git a/unpacked/jax/output/NativeMML/jax.js b/unpacked/jax/output/NativeMML/jax.js index f830881d6..028fc19ef 100644 --- a/unpacked/jax/output/NativeMML/jax.js +++ b/unpacked/jax/output/NativeMML/jax.js @@ -328,7 +328,7 @@ container.ondblclick = EVENT.DblClick; // Added for keyboard accessible menu. container.onkeydown = EVENT.Keydown; - container.tabIndex = "0"; + container.tabIndex = HUB.getTabOrder(); if (HUB.Browser.noContextMenu) { container.ontouchstart = TOUCH.start; container.ontouchend = TOUCH.end; diff --git a/unpacked/jax/output/PlainSource/jax.js b/unpacked/jax/output/PlainSource/jax.js index 69f8fe2b4..b217246e0 100644 --- a/unpacked/jax/output/PlainSource/jax.js +++ b/unpacked/jax/output/PlainSource/jax.js @@ -91,7 +91,7 @@ ondblclick: EVENT.DblClick, // Added for keyboard accessible menu. onkeydown: EVENT.Keydown, - tabIndex: "0" + tabIndex: HUB.getTabOrder() },[["span"]]); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start; diff --git a/unpacked/jax/output/PreviewHTML/jax.js b/unpacked/jax/output/PreviewHTML/jax.js index 52125e84b..5e9f91dbf 100644 --- a/unpacked/jax/output/PreviewHTML/jax.js +++ b/unpacked/jax/output/PreviewHTML/jax.js @@ -199,7 +199,7 @@ onmouseover:EVENT.Mouseover, onmouseout:EVENT.Mouseout, onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: "0" + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() }); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start; diff --git a/unpacked/jax/output/SVG/jax.js b/unpacked/jax/output/SVG/jax.js index 05e72453b..aa8ff7893 100644 --- a/unpacked/jax/output/SVG/jax.js +++ b/unpacked/jax/output/SVG/jax.js @@ -222,7 +222,7 @@ onmouseover:EVENT.Mouseover, onmouseout:EVENT.Mouseout, onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: "0" + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() }); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start; From 7df65c9d7a9d6b7e302534b33614f9c1c3c89bbd Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 5 Feb 2016 18:20:41 -0500 Subject: [PATCH 2/4] Fix inTabOrder menu action, change default, and factor out code for setting/unsetting the tab index (in case the page author wants to call it. --- unpacked/MathJax.js | 2 +- unpacked/extensions/MathMenu.js | 43 ++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index f589243e4..d8ff07460 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -1896,7 +1896,7 @@ MathJax.Hub = { mpContext: false, // true means pass menu events to MathPlayer in IE mpMouse: false, // true means pass mouse events to MathPlayer in IE texHints: true, // include class names for TeXAtom elements - inTabOrder: false, // set to false if math elements should be included in the tabindex + inTabOrder: true, // set to false if math elements should be included in the tabindex semantics: false // add semantics tag with original form in MathML output }, diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js index 23c8bfec6..ba8ce1f39 100644 --- a/unpacked/extensions/MathMenu.js +++ b/unpacked/extensions/MathMenu.js @@ -544,26 +544,12 @@ MENU.FocusNode(menu); }, Activate: function(event, menu) { - var jaxs = MENU.AllNodes(); - for (var j = 0, jax; jax = jaxs[j]; j++) { - if (jax.tabIndex > 0) { - jax.oldTabIndex = jax.tabIndex; - } - jax.tabIndex = -1; - } + MENU.UnsetTabIndex(); MENU.posted = true; }, Unfocus: function() { MENU.ActiveNode().tabIndex = -1; - var jaxs = MENU.AllNodes(); - for (var j = 0, jax; jax = jaxs[j]; j++) { - if (jax.oldTabIndex !== undefined) { - jax.tabIndex = jax.oldTabIndex - delete jax.oldTabIndex; - } else { - jax.tabIndex = HUB.getTabOrder(); - } - } + MENU.SetTabIndex(); MENU.FocusNode(MENU.CurrentNode()); MENU.posted = false; }, @@ -585,6 +571,26 @@ Left: function(event, menu) { MENU.MoveHorizontal(event, menu, function(x) {return x - 1;}); }, + UnsetTabIndex: function () { + var jaxs = MENU.AllNodes(); + for (var j = 0, jax; jax = jaxs[j]; j++) { + if (jax.tabIndex > 0) { + jax.oldTabIndex = jax.tabIndex; + } + jax.tabIndex = -1; + } + }, + SetTabIndex: function () { + var jaxs = MENU.AllNodes(); + for (var j = 0, jax; jax = jaxs[j]; j++) { + if (jax.oldTabIndex !== undefined) { + jax.tabIndex = jax.oldTabIndex + delete jax.oldTabIndex; + } else { + jax.tabIndex = HUB.getTabOrder(); + } + } + }, //TODO: Move to utility class. // Computes a mod n. @@ -1336,6 +1342,9 @@ } }; + /* + * Toggle assistive MML settings + */ MENU.AssistiveMML = function (item,restart) { var AMML = MathJax.Extension.AssistiveMML; if (!AMML) { @@ -1543,7 +1552,7 @@ ITEM.RULE(), ITEM.CHECKBOX("Fast Preview", "FastPreview"), ITEM.CHECKBOX("Assistive MathML", "assistiveMML", {action:MENU.AssistiveMML}), - ITEM.CHECKBOX("Include in Tab Order", "inTabOrder", {action:CONFIG.inTabOrder}) + ITEM.CHECKBOX("Include in Tab Order", "inTabOrder") ), ITEM.SUBMENU("MathPlayer", {hidden:!HUB.Browser.isMSIE || !CONFIG.showMathPlayer, disabled:!HUB.Browser.hasMathPlayer}, From a597f2107ea32b3dd9369cddbd89536a43e3a3ee Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sat, 6 Feb 2016 07:56:39 -0500 Subject: [PATCH 3/4] Fix formatting --- unpacked/MathJax.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index d8ff07460..39110eb28 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -2464,7 +2464,8 @@ MathJax.Hub = { }, getTabOrder: function() { - return this.config.menuSettings.inTabOrder ? 0 : -1}, + return this.config.menuSettings.inTabOrder ? 0 : -1; + }, // Old browsers (e.g. Internet Explorer <= 8) do not support trim(). SplitList: ("trim" in String.prototype ? From d1a569c905e73287429b4465a895f92e75efb403 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sat, 6 Feb 2016 10:35:31 -0500 Subject: [PATCH 4/4] Add jax parameter to getTabOrder() so that, if overridden, you can identify the jax (and it asociated script). --- unpacked/MathJax.js | 6 +++--- unpacked/extensions/MathMenu.js | 2 +- unpacked/jax/output/CommonHTML/jax.js | 2 +- unpacked/jax/output/HTML-CSS/jax.js | 2 +- unpacked/jax/output/NativeMML/jax.js | 2 +- unpacked/jax/output/PlainSource/jax.js | 2 +- unpacked/jax/output/PreviewHTML/jax.js | 2 +- unpacked/jax/output/SVG/jax.js | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/unpacked/MathJax.js b/unpacked/MathJax.js index 39110eb28..353c00ed9 100644 --- a/unpacked/MathJax.js +++ b/unpacked/MathJax.js @@ -2368,14 +2368,14 @@ MathJax.Hub = { error.oncontextmenu = EVENT.Menu; error.onmousedown = EVENT.Mousedown; error.onkeydown = EVENT.Keydown; - error.tabIndex = this.getTabOrder(); + error.tabIndex = this.getTabOrder(this.getJaxFor(script)); } else { MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js",function () { var EVENT = MathJax.Extension.MathEvents.Event; error.oncontextmenu = EVENT.Menu; error.onmousedown = EVENT.Mousedown; error.keydown = EVENT.Keydown; - error.tabIndex = this.getTabOrder(); + error.tabIndex = this.getTabOrder(this.getJaxFor(script)); }); } // @@ -2463,7 +2463,7 @@ MathJax.Hub = { return dst; }, - getTabOrder: function() { + getTabOrder: function(script) { return this.config.menuSettings.inTabOrder ? 0 : -1; }, diff --git a/unpacked/extensions/MathMenu.js b/unpacked/extensions/MathMenu.js index ba8ce1f39..360231487 100644 --- a/unpacked/extensions/MathMenu.js +++ b/unpacked/extensions/MathMenu.js @@ -587,7 +587,7 @@ jax.tabIndex = jax.oldTabIndex delete jax.oldTabIndex; } else { - jax.tabIndex = HUB.getTabOrder(); + jax.tabIndex = HUB.getTabOrder(jax); } } }, diff --git a/unpacked/jax/output/CommonHTML/jax.js b/unpacked/jax/output/CommonHTML/jax.js index 354bfecf9..bed4fe2bb 100644 --- a/unpacked/jax/output/CommonHTML/jax.js +++ b/unpacked/jax/output/CommonHTML/jax.js @@ -403,7 +403,7 @@ onmouseover:EVENT.Mouseover, onmouseout:EVENT.Mouseout, onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder(jax) }); if (jax.CHTML.display) { // diff --git a/unpacked/jax/output/HTML-CSS/jax.js b/unpacked/jax/output/HTML-CSS/jax.js index 92792601b..f00dfe6d1 100644 --- a/unpacked/jax/output/HTML-CSS/jax.js +++ b/unpacked/jax/output/HTML-CSS/jax.js @@ -578,7 +578,7 @@ onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder(jax) }); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start; diff --git a/unpacked/jax/output/NativeMML/jax.js b/unpacked/jax/output/NativeMML/jax.js index 028fc19ef..c7c436587 100644 --- a/unpacked/jax/output/NativeMML/jax.js +++ b/unpacked/jax/output/NativeMML/jax.js @@ -328,7 +328,7 @@ container.ondblclick = EVENT.DblClick; // Added for keyboard accessible menu. container.onkeydown = EVENT.Keydown; - container.tabIndex = HUB.getTabOrder(); + container.tabIndex = HUB.getTabOrder(jax); if (HUB.Browser.noContextMenu) { container.ontouchstart = TOUCH.start; container.ontouchend = TOUCH.end; diff --git a/unpacked/jax/output/PlainSource/jax.js b/unpacked/jax/output/PlainSource/jax.js index b217246e0..a34ca39d4 100644 --- a/unpacked/jax/output/PlainSource/jax.js +++ b/unpacked/jax/output/PlainSource/jax.js @@ -91,7 +91,7 @@ ondblclick: EVENT.DblClick, // Added for keyboard accessible menu. onkeydown: EVENT.Keydown, - tabIndex: HUB.getTabOrder() + tabIndex: HUB.getTabOrder(jax) },[["span"]]); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start; diff --git a/unpacked/jax/output/PreviewHTML/jax.js b/unpacked/jax/output/PreviewHTML/jax.js index 5e9f91dbf..1ff2c6c2e 100644 --- a/unpacked/jax/output/PreviewHTML/jax.js +++ b/unpacked/jax/output/PreviewHTML/jax.js @@ -199,7 +199,7 @@ onmouseover:EVENT.Mouseover, onmouseout:EVENT.Mouseout, onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder(jax) }); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start; diff --git a/unpacked/jax/output/SVG/jax.js b/unpacked/jax/output/SVG/jax.js index aa8ff7893..ea221f1d7 100644 --- a/unpacked/jax/output/SVG/jax.js +++ b/unpacked/jax/output/SVG/jax.js @@ -222,7 +222,7 @@ onmouseover:EVENT.Mouseover, onmouseout:EVENT.Mouseout, onmousemove:EVENT.Mousemove, onclick:EVENT.Click, ondblclick:EVENT.DblClick, // Added for keyboard accessible menu. - onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder() + onkeydown: EVENT.Keydown, tabIndex: HUB.getTabOrder(jax) }); if (HUB.Browser.noContextMenu) { span.ontouchstart = TOUCH.start;