www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 6dad7d5a9e801b0b5a451214f73a2b101b32cf0d
parent c8dc3a20f761f86e5d1878205409fe438d918fd3
Author: Davide P. Cervone <dpvc@union.edu>
Date:   Tue, 14 May 2013 14:54:38 -0400

Merge branch 'safe-patch' into v2.2-beta

Diffstat:
Munpacked/config/Safe.js | 9+++++----
Munpacked/extensions/Safe.js | 59+++++++++++++++++++++++++++++++++++++++++------------------
Munpacked/jax/input/TeX/jax.js | 13++++++++-----
3 files changed, 54 insertions(+), 27 deletions(-)

diff --git a/unpacked/config/Safe.js b/unpacked/config/Safe.js @@ -29,7 +29,9 @@ * limitations under the License. */ -if (!MathJax.Hub.config.extensions) {MathJax.Hub.config.extensions = []} -MathJax.Hub.config.extensions.push("Safe.js"); +MathJax.Hub.Register.StartupHook("End Config", function () { + if (!MathJax.Hub.config.extensions) {MathJax.Hub.config.extensions = []} + MathJax.Hub.config.extensions.push("Safe.js"); +}); -MathJax.Ajax.loadComplete("[MathJax]/config/Safe.js"); -\ No newline at end of file +MathJax.Ajax.loadComplete("[MathJax]/config/Safe.js"); diff --git a/unpacked/extensions/Safe.js b/unpacked/extensions/Safe.js @@ -97,6 +97,20 @@ config: CONFIG, div1: document.createElement("div"), // for CSS processing div2: document.createElement("div"), + + // + // Methods called for MathML attribute processing + // + filter: { + "class": "filterClass", + style: "filterStyles", + id: "filterID", + fontsize: "filterFontSize", + mathsize: "filterFontSize", + scriptminsize: "filterFontSize", + scriptsizemultiplier: "filterSizeMultiplier", + scriptlevel: "filterScriptLevel" + }, // // Filter HREF URL's @@ -113,12 +127,12 @@ // filterClass: function (CLASS) { if (ALLOW.classes === "none" || - (ALLOW.classes !== "all" && !CLASS.match(/^MJX-/))) {CLASS = null} + (ALLOW.classes !== "all" && !CLASS.match(/^MJX-[-a-zA-Z0-9_.]+$/))) {CLASS = null} return CLASS; }, filterID: function (id) { if (ALLOW.cssIDs === "none" || - (ALLOW.cssIDs !== "all" && !id.match(/^MJX-/))) {id = null} + (ALLOW.cssIDs !== "all" && !id.match(/^MJX-[-a-zA-Z0-9_.]+$/))) {id = null} return id; }, @@ -172,6 +186,23 @@ }, // + // Filter scriptsizemultiplier + // + filterSizeMultiplier: function (size) { + if (ALLOW.fontsize === "none") {size = null} + else if (ALLOW.fontsize !== "all") {size = Math.min(1,Math.max(.6,size)).toString()} + return size; + }, + // + // Filter scriptLevel + // + filterScriptLevel: function (level) { + if (ALLOW.fontsize === "none") {level = null} + else if (ALLOW.fontsize !== "all") {level = Math.max(0,level).toString()} + return level; + }, + + // // Filter TeX extension names // filterRequire: function (name) { @@ -242,9 +273,10 @@ }); HUB.Register.StartupHook("TeX Jax Ready",function () { - var TEX = MathJax.InputJax.TeX; + var TEX = MathJax.InputJax.TeX, + PARSE = TEX.Parse, METHOD = SAFE.filter; - TEX.Parse.Augment({ + PARSE.Augment({ // // Implements \require{name} with filtering @@ -258,11 +290,9 @@ // // Controls \mmlToken attributes // - MmlTokenAllow: { - fontsize: (ALLOW.fontsize === "all"), - id: (ALLOW.cssIDs === "all"), - "class": (ALLOW.classes === "all"), - style: (ALLOW.styles === "all") + MmlFilterAttribute: function (name,value) { + if (METHOD[name]) {value = SAFE[METHOD[name]](value)} + return value; }, // @@ -292,16 +322,9 @@ }); HUB.Register.StartupHook("MathML Jax Ready",function () { - var PARSE = MathJax.InputJax.MathML.Parse; + var PARSE = MathJax.InputJax.MathML.Parse, + METHOD = SAFE.filter; - var METHOD = { - href: "filterURL", - "class": "filterClass", - id: "filterID", - fontsize: "filterFontSize", - style: "filterStyles" - }; - // // Filter MathML attributes // diff --git a/unpacked/jax/input/TeX/jax.js b/unpacked/jax/input/TeX/jax.js @@ -1441,15 +1441,18 @@ "%1 is not a recognized attribute for %2", match[1],type]); } - var value = match[2].replace(/^(['"])(.*)\1$/,"$2"); - if (value.toLowerCase() === "true") {value = true} - else if (value.toLowerCase() === "false") {value = false} - def[match[1]] = value; - def.attrNames.push(match[1]); + var value = this.MmlFilterAttribute(match[1],match[2].replace(/^(['"])(.*)\1$/,"$2")); + if (value) { + if (value.toLowerCase() === "true") {value = true} + else if (value.toLowerCase() === "false") {value = false} + def[match[1]] = value; + def.attrNames.push(match[1]); + } attr = attr.substr(match[0].length); } this.Push(this.mmlToken(MML[type](data).With(def))); }, + MmlFilterAttribute: function (name,value) {return value}, MmlTokenAllow: { fontfamily:1, fontsize:1, fontweight:1, fontstyle:1, color:1, background:1,