mathjax / mathjax-a11y Goto Github PK
View Code? Open in Web Editor NEWMathJax Accessibility extensions
Home Page: https://mathjax.github.io/MathJax-a11y/
License: Apache License 2.0
MathJax Accessibility extensions
Home Page: https://mathjax.github.io/MathJax-a11y/
License: Apache License 2.0
More an note to self since I can't test right now.
Does the extension disable line-breaking?
Mathml already containing mactions can lead to strange behaviour and potentially incorrect speech output.
We don't handle them yet, right?
My gut feeling would be that they will never get collapsed completely (but might in themselves if they're huge). As in
<...> (<...>)
etc.
More notes from previous F2Fs.
We want to figure out how we can align the new tools (enrichment, collapse, speech/walker) with MathJax-node.
Via stevefaulkner on a11y slackers. the textarea needs associated label <label for="input">Enter TeX code here:</label>
Sigh.
I would like to propose to move the dist and build files back into this repo.
Since we're not putting the final extension in the third-party repo, we might as well push them to the CDN from this repo; the other one just adds noise and confusion.
NVDA reads out single letters.
They are somewhat exclusive and the results can be confusing. But somehow the configuration I added to the walker does not actually deactivate it.
We sometimes call it walker, sometimes explorer. Should these be identical? If so, we should decide on a unique name.
Looks like the old xpath issues are back again. Was anything changed?
Would it be more consistent to name this "none"?
JAWS voices "blank" before each speech string during exploration.
However, it usually stops doing that after a while and start voicing things correctly.
I have not been able to figure out how to trigger this change in behavior. It might be a bug in JAWS or it might be something we can tweak. Let's reach out.
https://mathjax.github.io/MathJax-RespEq/Semantics-Lab/Struik.html gives me processing errors everywhere.
Maybe 2.6 related breakage?
I see this failure at http://codepen.io/pkra/pen/yOWrWQ (with the dist built from current master).
Also, only one expression (the first display-style expression) has the usual Math processing error
in the DOM.
lastError gives
MathJax.Hub.lastError
TypeError: Cannot read property 'root' of null
at Object.AddSpeech (https://beta.mathjax.org/mathjax/contrib/a11y/Assistive-Explore.js?rev=2.6.1:1:5904)
at Object.AddEvent (https://beta.mathjax.org/mathjax/contrib/a11y/Assistive-Explore.js?rev=2.6.1:1:5825)
at Object.Register (https://beta.mathjax.org/mathjax/contrib/a11y/Assistive-Explore.js?rev=2.6.1:1:4595)
at Function.execute (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:3084)
at cb (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:2661)
at Execute (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:7293)
at ExecuteHooks (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:10599)
at Function.execute (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:3084)
at cb (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:2661)
at Execute (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:7293)
at Post (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:9345)
at Object.processOutput (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:40062)
at Function.execute (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:3084)
at Function.WAITEXECUTE (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:5827)
at cb (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:2661)
at Function.WAITEXECUTE (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:6016)
at cb (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:2661)
at Execute (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:7293)
at Object.loadComplete (https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full:19:15890)
at https://cdn.mathjax.org/mathjax/2.6-latest/jax/output/SVG/fonts/TeX/Main/Regular/BasicLatin.js?rev=2.6.1:19:19138
Switching to a different renderer + refreshing the page resets ok.
It seems SRE now forces HTTPS, in particular even loading it over http leads to SRE loading its json data via https.
This leads to problems on WinXP (which doesn't support recent encryption cyphers).
A simple way to grab a copy of all relevant files for local testing would be enough.
Just a note for a future iteration. When collapsing while exploring, ChromeVox will repeat the outer label before re-entering the explorer and reading the live-region again. This lead to repetition.
To compare, it would help to pull up a separate version with regular / enhanced line-breaking.
As an AT user, I want to read documents with mathematics the same way I read other documents, using my AT's smart modes, e.g., to read the entire document or read it line-by-line.
This experience falls short because, e.g., NVDA will (sensibly) read the aria-label ("math") when reading line-by-line, i.e., "When math holds, we get math which implies math".
While some navigation is availabe to reach back (ctrl+tab to go to previous focusable), it is not always reliable (jumping too far behind). Also, once you're on the focused element, I couldn't figure out if there's a way to get back into the flow.
Some ideas.
What else could we do?
Right now, we can't share the demos using https://rawgit.com/mathjax/MathJax-RespEq/master/Semantics-Lab/Semantics-Lab-MML.html since it enforces https.
(@zorkow plans to enable ssl on progressiveaccess.com.)
Some thoughts on what we need for production use
Give them names for usability.
(Suggested by Sina.)
I can't explore beyond it (neither horizontally or vertically).
This files needs at least a loadComplete
call. Since we'll be pushing it to the CDN's third party folder, we need to decide on a path structure, e.g.,
MathJax.Callback.Queue(
["loadComplete",MathJax.Ajax,"[Contrib]/mathjax-a11y/MathJax-accessibility.js"]
);
HammerJS be helpful here.
Hammer.js supports most common single and multi-touch gestures, and is fully extendable to add custom gestures.
I tested Dolphin again.
It reads aria-labels so we have now some support now. However, Dolphin adds a lot of unfortunate noise.
a) it announces all potential click handlers (single/double/right) and the application
b) when navigating passed the label, it will read all characters, so you'd need SVG (but #119)
Nothing for this release but worth thinking about in the next iteration.
Should be spoken once when the first math element gets focus not at start of page as most blind people will stop speech immediately after page load.
(Suggestion by Sina.)
@dpvc
I would have expected the collapsible elements in SVG to have class mjx-svg-maction.
However, they have no classname at all, so hover and flame do not work.
to fix mobile rendering
Here's what I come up with.
It seems in documents with more than one equation, the walker is adding an announcement ("nav. math in page, explore with shift+space") for each equation, leading to as many announcements as there are equations in the page -- that's a bit annoying ๐
Using the walker is difficult in everyday documents because the extension does not have good defaults (i.e., dummy walker).
I was wondering about the name. -Extensions (plural) seems a bit more fitting (but might lead to typos). Something like Accessibility-Loader / a11y-loader is more fitting but perhaps not as easy to remember. Not a huge thing but wanted to raise it (esp in the context of #115)
Just to record this from other conversations. It would be good to revive the older demos that only show some features, e.g.,
The sample from our MathUI paper is throwing an error in the Semantics-Lab (but not in regular MathJax).
\begin{align*}
I_\nu(\nu^{-1},1)
&=\underbrace{\frac{\pi^2}{4}\ln\left(\frac{(1+\nu)^{1+\nu}}{\nu^\nu}
\right)-\frac{7\zeta(3)}{8}\nu}_{\text{Let this be
C}}+2\int^\frac{1-\nu}{1+\nu}_1\frac{\chi_3(v)}{(1+v)^2}{\rm d}v\\
&=C-\left.\frac{2\chi_3(v)}{1+v}\right|^\frac{1-\nu}{1+\nu}_1+2\int^\frac{1-\nu}
{1+\nu}_1\frac{\chi_2(v)}{v(1+v)}{\rm d}v\\
&=C+(1-\nu)\chi_3\left(\frac{1-\nu}{1+\nu}\right)-\frac{7\zeta(3)}{8}
-\left.{\color{white}{\frac{1}{1}}}2\chi_2(v)\ln(1+v)\right|^\frac{1-\nu}{1+\nu}
_1+\int^\frac{1-\nu}{1+\nu}_1\frac{\ln(1+v)\ln\left(\frac{1+v}{1-v}\right)}{v}{
\rm d}v\\
&=C+(1-\nu)\chi_3\left(\frac{1-\nu}{1+\nu}\right)-\frac{7\zeta(3)}{8}
+2\chi_2\left(\frac{1-\nu}{1+\nu}\right)\ln\left(\frac{1+\nu}{2}\right)+\frac{
\pi^2}{4}\ln{2}\\
&\ \ \ \
+\frac{1}{2}\int^\frac{1-\nu}{1+\nu}_1\frac{
\ln^2(1+v)-\ln^2(1-v)+\ln^2\left(\frac{1-v}{1+v}\right)}{v}{\rm d}v
\end{align*}
Where is that entry's text stored/generated?
Also, should we harmonize the naming of this option and Semantic-Collapse.js (where I would have assumed this comes from but I don't see it)?
Something I noticed without time to look into. Due to the bug in 2.6.0 (fixed in 2.6.1), we can't use combined configurations while disabling the AssistiveMML extension. Yet when I switched to just inline configurations, I got Math Processing errors. Probably just a timing issue.
If a MathML semantics annotation element (apparently Mathtype adds those) stops rendering of the enriched expression.
Simple example:
<math><semantics><mrow><mi>a</mi><mi>b</mi></mrow><annotation>implicit times</annotation></semantics></math>
Punctuated with role endpunct or startpunct should not be collapsed.
These are expressions that contain a single punctuation at start or end, only. In most maths expressions this is irrelevant.
For example:
a = b.
will lead to
<.>
Instead it should lead to
<=>.
Just to track this in an issue. The only big regression after switching to role=application
.
Walking up sometimes jumps two levels.
Example: summation formula, navigating into the sigma (go all the way down, then one up will take you up two levels)
Currently, all extensions skip inline math. That makes sense for responsive rendering (though I might argue for that there, too). But for the a11y walker we need to enable inline math elements.
We should add links to GitHub (e.g., https://github.com/mathjax/MathJax-RespEq/wiki/Support-Matrix-a11y-tool) to the demos.
We need to somehow alert the user that the tool is available.
Maybe role=application helps (though @zorkow had problems with it in the past). Otheriwse, we could add a label. I'm thinking it might be something equivalent to role=math, i.e., something that will make AT indicate there's some math.
If an expression is already collapsed on load the aria label reads the full expression.
Should either contain the expression corresponding to the visible expression or the shortest possible one for faster page reading.
data-semantic-complexity
can appear twice in MathML element. That leads to an XML error at my end.
I believe it only happens for mactions on the top level.
Example expression:
i = 1, 2, \ldots, n+1
x
is never voiced when entering the first level (but exploring left, then right gets x
voiced). Similarly, -b
is never voiced when exploring the fraction's numerator.Since no other AT has these problems, maybe it's a bug on NVDA's side. Let's reach out.
Something is wrong with the transferring of complexity
value to the DOM elements created.
http://beta.mathjax.org/mathjax/develop/unpacked/MathJax.js
is a copy of today's develop branch. Let's switch the demos over please. (I keep running into rawgit issues).
Reminder to update gh-pages
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.