diff options
| author | Yuchen Pei <me@ypei.me> | 2021-06-24 17:50:34 +1000 | 
|---|---|---|
| committer | Yuchen Pei <me@ypei.me> | 2021-06-24 17:50:34 +1000 | 
| commit | 11011d7c373c655830053b155eeaf632c2658ac7 (patch) | |
| tree | 2e7ae85b013041fef7e733ddb4c74dd197c17f56 /js/mathjax/extensions/AssistiveMML.js | |
| parent | 4f5ad1a70089365c5b6949d06386930433e09193 (diff) | |
Updated.
- added mathjax (freed)
- added rss.py
- updated publish.el
- etc.
Diffstat (limited to 'js/mathjax/extensions/AssistiveMML.js')
| -rw-r--r-- | js/mathjax/extensions/AssistiveMML.js | 167 | 
1 files changed, 167 insertions, 0 deletions
| diff --git a/js/mathjax/extensions/AssistiveMML.js b/js/mathjax/extensions/AssistiveMML.js new file mode 100644 index 0000000..a41b24b --- /dev/null +++ b/js/mathjax/extensions/AssistiveMML.js @@ -0,0 +1,167 @@ +// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7dn=apache-2.0.txt Apache-2.0 +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + *  MathJax/extensions/AssistiveMML.js + *   + *  Implements an extension that inserts hidden MathML into the + *  page for screen readers or other asistive technology. + *   + *  --------------------------------------------------------------------- + *   + *  Copyright (c) 2015-2020 The MathJax Consortium + *  + *  Licensed under the Apache License, Version 2.0 (the "License"); + *  you may not use this file except in compliance with the License. + *  You may obtain a copy of the License at + *  + *      http://www.apache.org/licenses/LICENSE-2.0 + *  + *  Unless required by applicable law or agreed to in writing, software + *  distributed under the License is distributed on an "AS IS" BASIS, + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + *  See the License for the specific language governing permissions and + *  limitations under the License. + */ + +(function (AJAX,CALLBACK,HUB,HTML) { +  var SETTINGS = HUB.config.menuSettings; +   +  var AssistiveMML = MathJax.Extension["AssistiveMML"] = { +    version: "2.7.9", +     +    config: HUB.CombineConfig("AssistiveMML",{ +      disabled: false, +      styles: { +        ".MJX_Assistive_MathML": { +          position:"absolute!important", +          top: 0, left: 0, +          clip: (HUB.Browser.isMSIE && (document.documentMode||0) < 8 ? +                 "rect(1px 1px 1px 1px)" : "rect(1px, 1px, 1px, 1px)"), +          padding: "1px 0 0 0!important", +          border: "0!important", +          height: "1px!important", +          width: "1px!important", +          overflow: "hidden!important", +          display:"block!important", +          // +          //  Don't allow the assistive MathML become part of the selection +          // +          "-webkit-touch-callout": "none", +          "-webkit-user-select": "none", +          "-khtml-user-select": "none", +          "-moz-user-select": "none", +          "-ms-user-select": "none", +          "user-select": "none" +        }, +        ".MJX_Assistive_MathML.MJX_Assistive_MathML_Block": { +          width: "100%!important" +        } +      } +    }), +     +    Config: function () { +      if (!this.config.disabled && SETTINGS.assistiveMML == null) +        HUB.Config({menuSettings:{assistiveMML:true}}); +      AJAX.Styles(this.config.styles); +      HUB.Register.MessageHook("End Math",function (msg) { +        if (SETTINGS.assistiveMML) return AssistiveMML.AddAssistiveMathML(msg[1]) +      }); +    }, +     +    // +    //  This sets up a state object that lists the jax and index into the jax, +    //    and a dummy callback that is used to synchronizing with MathJax. +    //    It will be called when the jax are all processed, and that will +    //    let the MathJax queue continue (it will block until then). +    // +    AddAssistiveMathML: function (node) { +      var state = { +        jax: HUB.getAllJax(node), i: 0, +        callback: MathJax.Callback({}) +      }; +      this.HandleMML(state); +      return state.callback; +    }, + +    // +    //  This removes the data-mathml attribute and the assistive MathML from +    //  all the jax. +    // +    RemoveAssistiveMathML: function (node) { +      var jax = HUB.getAllJax(node), frame; +      for (var i = 0, m = jax.length; i < m; i++) { +        frame = document.getElementById(jax[i].inputID+"-Frame"); +        if (frame && frame.getAttribute("data-mathml")) { +          frame.removeAttribute("data-mathml"); +          if (frame.lastChild && frame.lastChild.className.match(/MJX_Assistive_MathML/)) +            frame.removeChild(frame.lastChild); +        } +      } +    }, + +    // +    //  For each jax in the state, look up the frame. +    //  If the jax doesn't use NativeMML and hasn't already been handled: +    //    Get the MathML for the jax, taking resets into account. +    //    Add a data-mathml attribute to the frame, and +    //    Create a span that is not visible on screen and put the MathML in it, +    //      and add it to the frame. +    //  When all the jax are processed, call the callback. +    // +    HandleMML: function (state) { +      var m = state.jax.length, jax, mml, frame, span; +      var MML = MathJax.ElementJax.mml; +      MML.copyAttributes.id = 1; +      while (state.i < m) { +        jax = state.jax[state.i]; +        frame = document.getElementById(jax.inputID+"-Frame"); +        if (jax.outputJax !== "NativeMML" && jax.outputJax !== "PlainSource" && +            frame && !frame.getAttribute("data-mathml")) { +          try { +            mml = jax.root.toMathML("").replace(/\n */g,"").replace(/<!--.*?-->/g,""); +          } catch (err) { +            MML.copyAttributes.id = true; +            if (!err.restart) throw err; // an actual error +            return MathJax.Callback.After(["HandleMML",this,state],err.restart); +          } +          frame.setAttribute("data-mathml",mml); +          span = HTML.addElement(frame,"span",{ +            isMathJax: true, unselectable: "on", +            className: "MJX_Assistive_MathML" +              + (jax.root.Get("display") === "block" ? " MJX_Assistive_MathML_Block" : "") +          }); +          try {span.innerHTML = mml} catch (err) {} +          frame.style.position = "relative"; +          frame.setAttribute("role","presentation"); +          frame.firstChild.setAttribute("aria-hidden","true"); +          span.setAttribute("role","presentation"); +        } +        state.i++; +      } +      MML.copyAttributes.id = true; +      state.callback(); +    } +     +  }; + +  HUB.Startup.signal.Post("AssistiveMML Ready"); + +})(MathJax.Ajax,MathJax.Callback,MathJax.Hub,MathJax.HTML); + +// +//  Make sure the toMathML extension is loaded before we signal +//  the load complete for this extension.  Then wait for the end +//  of the user configuration before configuring this extension.  +// +MathJax.Callback.Queue( +  ["Require",MathJax.Ajax,"[MathJax]/extensions/toMathML.js"], +  ["loadComplete",MathJax.Ajax,"[MathJax]/extensions/AssistiveMML.js"], +  function () { +    MathJax.Hub.Register.StartupHook("End Config",["Config",MathJax.Extension.AssistiveMML]); +  } +); + +// @license-end | 
