This commit is contained in:
184
AutoLaTeX/MathJax/extensions/a11y/accessibility-menu.js
vendored
Normal file
184
AutoLaTeX/MathJax/extensions/a11y/accessibility-menu.js
vendored
Normal file
@@ -0,0 +1,184 @@
|
||||
/*************************************************************
|
||||
*
|
||||
* [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.2.3',
|
||||
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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user