IE8 and below doesn't do split() properly, so implement it by hand for those browsers. Fixes a problem with localization substitution in IE8 and below.

This commit is contained in:
Davide P. Cervone 2013-05-01 18:49:07 -04:00
parent 99e21b3fee
commit b700cc9482

View File

@ -1075,6 +1075,25 @@ MathJax.Localization = {
// %n or %{n} or %{plural:%n|option1|option1|...} or %c
//
pattern: /%(\d+|\{\d+\}|\{[a-z]+:\%\d+(?:\|(?:%\{\d+\}|%.|[^\}])*)+\}|.)/g,
SPLIT: ("axb".split(/(x)/).length === 3 ?
function (string,regex) {return string.split(regex)} :
//
// IE8 and below don't do split() correctly when the pattern includes
// parentheses (the split should include the matched exrepssions).
// So implement it by hand here.
//
function (string,regex) {
var result = [], match, last = 0;
regex.lastIndex = 0;
while (match = regex.exec(string)) {
result.push(string.substr(last,match.index));
result.push.apply(result,match.slice(1));
last = match.index + match[0].length;
}
result.push(string.substr(last));
return result;
}),
_: function (id,phrase) {
if (phrase instanceof Array) {return this.processSnippet(id,phrase)}
@ -1094,7 +1113,7 @@ MathJax.Localization = {
//
// Split string at escapes and process them individually
//
var parts = string.split(this.pattern);
var parts = this.SPLIT(string,this.pattern);
for (i = 1, m = parts.length; i < m; i += 2) {
var c = parts[i].charAt(0); // first char will be { or \d or a char to be kept literally
if (c >= "0" && c <= "9") { // %n