aboutsummaryrefslogtreecommitdiff
path: root/js/mathjax/extensions/a11y/accessibility-menu.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/mathjax/extensions/a11y/accessibility-menu.js')
-rw-r--r--js/mathjax/extensions/a11y/accessibility-menu.js186
1 files changed, 186 insertions, 0 deletions
diff --git a/js/mathjax/extensions/a11y/accessibility-menu.js b/js/mathjax/extensions/a11y/accessibility-menu.js
new file mode 100644
index 0000000..7262c22
--- /dev/null
+++ b/js/mathjax/extensions/a11y/accessibility-menu.js
@@ -0,0 +1,186 @@
+// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7dn=apache-2.0.txt Apache-2.0
+/*************************************************************
+ *
+ * [Contrib]/a11y/accessibility-menu.js
+ *
+ * A thin extension to add opt-in menu items for the accessibility
+ * extensions in the a11y contributed directory.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2016-2017 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(HUB,EXTENSIONS) {
+ var SETTINGS = HUB.config.menuSettings;
+ var ITEM, MENU; // filled in when MathMenu extension loads
+
+ var BIND = (Function.prototype.bind ? function (f,t) {return f.bind(t)} :
+ function (f,t) {return function () {f.apply(t,arguments)}});
+ var KEYS = Object.keys || function (obj) {
+ var keys = [];
+ for (var id in obj) {if (obj.hasOwnProperty(id)) keys.push(id)}
+ return keys;
+ };
+
+ //
+ // Set up the a11y path,if it isn't already in place
+ //
+ var PATH = MathJax.Ajax.config.path;
+ if (!PATH.a11y) PATH.a11y = HUB.config.root + "/extensions/a11y";
+
+ var Accessibility = EXTENSIONS["accessibility-menu"] = {
+ version: '1.6.0',
+ prefix: '', //'Accessibility-',
+ defaults: {},
+ modules: [],
+ MakeOption: function(name) {
+ return Accessibility.prefix + name;
+ },
+ GetOption: function(option) {
+ return SETTINGS[Accessibility.MakeOption(option)];
+ },
+ AddDefaults: function() {
+ var keys = KEYS(Accessibility.defaults);
+ for (var i = 0, key; key = keys[i]; i++) {
+ var option = Accessibility.MakeOption(key);
+ if (typeof(SETTINGS[option]) === 'undefined') {
+ SETTINGS[option] = Accessibility.defaults[key];
+ }
+ }
+ },
+ // Attaches the menu items;
+ AddMenu: function() {
+ var items = Array(this.modules.length);
+ for (var i = 0, module; module = this.modules[i]; i++) items[i] = module.placeHolder;
+ var menu = MENU.FindId('Accessibility');
+ if (menu) {
+ items.unshift(ITEM.RULE());
+ menu.submenu.items.push.apply(menu.submenu.items,items);
+ } else {
+ var renderer = (MENU.FindId("Settings","Renderer")||{}).submenu;
+ if (renderer) {
+ // move AssitiveMML and InTabOrder from Renderer to Accessibility menu
+ items.unshift(ITEM.RULE());
+ items.unshift(renderer.items.pop());
+ items.unshift(renderer.items.pop());
+ }
+ items.unshift("Accessibility");
+ var menu = ITEM.SUBMENU.apply(ITEM.SUBMENU,items);
+ var locale = MENU.IndexOfId('Locale');
+ if (locale) {
+ MENU.items.splice(locale,0,menu);
+ } else {
+ MENU.items.push(ITEM.RULE(), menu);
+ }
+ }
+ },
+ Register: function(module) {
+ Accessibility.defaults[module.option] = false;
+ Accessibility.modules.push(module);
+ },
+ Startup: function() {
+ ITEM = MathJax.Menu.ITEM;
+ MENU = MathJax.Menu.menu;
+ for (var i = 0, module; module = this.modules[i]; i++) module.CreateMenu();
+ this.AddMenu();
+ },
+ LoadExtensions: function () {
+ var extensions = [];
+ for (var i = 0, module; module = this.modules[i]; i++) {
+ if (SETTINGS[module.option]) extensions.push(module.module);
+ }
+ return (extensions.length ? HUB.Startup.loadArray(extensions) : null);
+ }
+ };
+
+ var ModuleLoader = MathJax.Extension.ModuleLoader = MathJax.Object.Subclass({
+ option: '',
+ name: ['',''],
+ module: '',
+ placeHolder: null,
+ submenu: false,
+ extension: null,
+ Init: function(option, name, module, extension, submenu) {
+ this.option = option;
+ this.name = [name.replace(/ /g,''),name];
+ this.module = module;
+ this.extension = extension;
+ this.submenu = (submenu || false);
+ },
+ CreateMenu: function() {
+ var load = BIND(this.Load,this);
+ if (this.submenu) {
+ this.placeHolder =
+ ITEM.SUBMENU(this.name,
+ ITEM.CHECKBOX(["Activate","Activate"],
+ Accessibility.MakeOption(this.option), {action: load}),
+ ITEM.RULE(),
+ ITEM.COMMAND(["OptionsWhenActive","(Options when Active)"],null,{disabled:true})
+ );
+ } else {
+ this.placeHolder = ITEM.CHECKBOX(
+ this.name, Accessibility.MakeOption(this.option), {action: load}
+ );
+ }
+ },
+ Load: function() {
+ HUB.Queue(["Require",MathJax.Ajax,this.module,["Enable",this]]);
+ },
+ Enable: function(menu) {
+ var extension = MathJax.Extension[this.extension];
+ if (extension) {
+ extension.Enable(true,true);
+ MathJax.Menu.saveCookie();
+ }
+ }
+ });
+
+ Accessibility.Register(
+ ModuleLoader(
+ 'collapsible', 'Collapsible Math', '[a11y]/collapsible.js', 'collapsible'
+ )
+ );
+ Accessibility.Register(
+ ModuleLoader(
+ 'autocollapse', 'Auto Collapse', '[a11y]/auto-collapse.js', 'auto-collapse'
+ )
+ );
+ Accessibility.Register(
+ ModuleLoader(
+ 'explorer', 'Explorer', '[a11y]/explorer.js', 'explorer', true
+ )
+ );
+
+ Accessibility.AddDefaults();
+
+ HUB.Register.StartupHook('End Extensions', function () {
+ HUB.Register.StartupHook('MathMenu Ready', function () {
+ Accessibility.Startup();
+ HUB.Startup.signal.Post('Accessibility Menu Ready');
+ },5); // run before other extensions' menu hooks even if they are loaded first
+ },5);
+
+ MathJax.Hub.Register.StartupHook("End Cookie", function () {
+ MathJax.Callback.Queue(
+ ["LoadExtensions",Accessibility],
+ ["loadComplete",MathJax.Ajax,"[a11y]/accessibility-menu.js"]
+ );
+ });
+
+})(MathJax.Hub,MathJax.Extension);
+
+
+// @license-end