Enable SW mode

Former-commit-id: 4299774f0f2a88983fb35799e53c315f72d2309d [formerly 39a92426de9b44ffe73a018f65f8bfc825db0f00]
Former-commit-id: dae887b44d1512cd2426a6b0eba1f1e89f24cea1
This commit is contained in:
Jaifroid 2019-07-01 11:13:07 +01:00
parent e696fb840d
commit cdf798c41b
2 changed files with 41 additions and 16 deletions

View File

@ -2424,8 +2424,11 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'images', 'cookies', 'q', 'trans
htmlArticle = htmlArticle.replace(/href\s*=\s*["']javascript:[^"']+["']/gi, 'href=""'); htmlArticle = htmlArticle.replace(/href\s*=\s*["']javascript:[^"']+["']/gi, 'href=""');
//MathJax detection: //MathJax detection:
params.containsMathTexRaw = params.useMathJax && /stackexchange|askubuntu|superuser|stackoverflow|mathoverflow|serverfault|stackapps/i.test(params.storedFile) ? params.containsMathTexRaw = params.useMathJax &&
/(\$\$?)((?:\\(?!\\\$)[\s\S]|(?!\1)[\s\S])+)\1(?:[\s<.,;:?!'")([{\]-])/.test(htmlArticle) : false; /stackexchange|askubuntu|superuser|stackoverflow|mathoverflow|serverfault|stackapps/i.test(params.storedFile) ?
/[^\\](\$\$?)((?:\\\$|(?!\1)[\s\S])+)\1/.test(htmlArticle) : false;
// Below regex is a more complex version, probably erroneous
// /(\$\$?)((?:\\(?!\\\$)[\s\S]|(?!\1)[\s\S])+)\1(?:[\s<.,;:?!'")([{\]-])/.test(htmlArticle) : false;
//Simplify any configuration script //Simplify any configuration script
//if (params.containsMathTexRaw) htmlArticle = htmlArticle.replace(/(<script\s+[^>]*?type\s*=\s*['"]\s*text\/x-mathjax-config[^>]+>[^<]+?Hub\.Config\s*\(\s*{\s*)[^<]*?(tex2jax\s*:[^}]+?})\s*,[^<]+(<\/script>)/i, "$1$2});$3"); //if (params.containsMathTexRaw) htmlArticle = htmlArticle.replace(/(<script\s+[^>]*?type\s*=\s*['"]\s*text\/x-mathjax-config[^>]+>[^<]+?Hub\.Config\s*\(\s*{\s*)[^<]*?(tex2jax\s*:[^}]+?})\s*,[^<]+(<\/script>)/i, "$1$2});$3");
// Remove MathJax config script and convert $ delimiters // Remove MathJax config script and convert $ delimiters
@ -2440,13 +2443,13 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'images', 'cookies', 'q', 'trans
// }); // });
// } // }
//Replace all TeX SVGs with MathJax scripts //Replace all TeX SVGs with MathJax scripts
if (params.useMathJax) { // if (params.useMathJax) {
htmlArticle = htmlArticle.replace(/<img\s+(?=[^>]+?math-fallback-image)[^>]*?alt\s*=\s*(['"])((?:[^"']|(?!\1)[\s\S])+)[^>]+>/ig, function (p0, p1, math) { // htmlArticle = htmlArticle.replace(/<img\s+(?=[^>]+?math-fallback-image)[^>]*?alt\s*=\s*(['"])((?:[^"']|(?!\1)[\s\S])+)[^>]+>/ig, function (p0, p1, math) {
// Remove any rogue ampersands in MathJax due to double escaping (by Wikipedia) // // Remove any rogue ampersands in MathJax due to double escaping (by Wikipedia)
math = math.replace(/&amp;/g, '&'); // math = math.replace(/&amp;/g, '&');
return '<script type="math/tex">' + math + '</script>'; // return '<script type="math/tex">' + math + '</script>';
}); // });
} // }
params.containsMathTex = params.useMathJax ? /<script\s+type\s*=\s*['"]\s*math\/tex\s*['"]/i.test(htmlArticle) : false; params.containsMathTex = params.useMathJax ? /<script\s+type\s*=\s*['"]\s*math\/tex\s*['"]/i.test(htmlArticle) : false;
params.containsMathSVG = params.useMathJax ? /<img\s+(?=[^>]+?math-fallback-image)[^>]*?alt\s*=\s*['"][^'"]+[^>]+>/i.test(htmlArticle) : false; params.containsMathSVG = params.useMathJax ? /<img\s+(?=[^>]+?math-fallback-image)[^>]*?alt\s*=\s*['"][^'"]+[^>]+>/i.test(htmlArticle) : false;

View File

@ -59,6 +59,21 @@ define(['uiUtil'], function (uiUtil) {
if (!imageUrl) { checkbatch(); return; } if (!imageUrl) { checkbatch(); return; }
image.removeAttribute('data-kiwixurl'); image.removeAttribute('data-kiwixurl');
var title = decodeURIComponent(imageUrl); var title = decodeURIComponent(imageUrl);
// Code below enables MathJax display in SW mode for WikiMedia
var isMathFallback = false;
if (params.useMathJax && image.alt && image.classList.length > 0) {
for (var c = image.classList.length; c--;) {
if (/math-fallback-image/.test(image.classList[c])) isMathFallback = true;
}
if (isMathFallback) {
var mathTex = image.getAttribute('alt');
if (mathTex && iframe.contentWindow.katex) {
iframe.contentWindow.katex.render(mathTex, image.parentElement);
extractorBusy--;
return;
}
}
}
if (params.contentInjectionMode === 'serviceworker') { if (params.contentInjectionMode === 'serviceworker') {
image.addEventListener('load', function () { image.addEventListener('load', function () {
image.style.opacity = '1'; image.style.opacity = '1';
@ -194,6 +209,7 @@ define(['uiUtil'], function (uiUtil) {
* Prepares an array or collection of image nodes that have been disabled in Service Worker for manual extraction * Prepares an array or collection of image nodes that have been disabled in Service Worker for manual extraction
*/ */
function prepareImagesServiceWorker () { function prepareImagesServiceWorker () {
loadMathJax();
var doc = iframe.contentDocument.documentElement; var doc = iframe.contentDocument.documentElement;
documentImages = doc.getElementsByTagName('img'); documentImages = doc.getElementsByTagName('img');
if (!documentImages.length) return; if (!documentImages.length) return;
@ -235,7 +251,7 @@ define(['uiUtil'], function (uiUtil) {
// User wishes to extract images manually // User wishes to extract images manually
prepareManualExtraction(); prepareManualExtraction();
} }
loadMathJax(); //loadMathJax();
//setTimeout(loadMathJax, 3000); //setTimeout(loadMathJax, 3000);
} }
@ -280,26 +296,32 @@ define(['uiUtil'], function (uiUtil) {
} }
function loadMathJax() { function loadMathJax() {
if (params.useMathJax && (params.containsMathTexRaw || params.containsMathTex || params.containsMathSVG)) { if (!params.useMathJax) return;
var doc = iframe.contentDocument; var doc = iframe.contentDocument;
var prefix = '';
if (params.contentInjectionMode === 'serviceworker') {
params.containsMathSVG = /<img\s+(?=[^>]+?math-fallback-image)[^>]*?alt\s*=\s*['"][^'"]+[^>]+>/i.test(doc.body.innerHTML);
prefix = window.location.href.replace(/^((?!.*\?).*\/|.*\/(?=[^\/]*\?)).*$/, '$1');
}
if (params.containsMathTexRaw || params.containsMathTex || params.containsMathSVG) {
var script1, script2, script3; var script1, script2, script3;
var link = doc.createElement("link"); var link = doc.createElement("link");
link.rel = "stylesheet"; link.rel = "stylesheet";
link.href = "js/katex/katex.min.css"; link.href = prefix + "js/katex/katex.min.css";
doc.head.appendChild(link); doc.head.appendChild(link);
script1 = doc.createElement("script"); script1 = doc.createElement("script");
script1.type = "text/javascript"; script1.type = "text/javascript";
//script.src = "js/MathJax/MathJax.js?config=TeX-AMS_HTML-full"; //script.src = "js/MathJax/MathJax.js?config=TeX-AMS_HTML-full";
script1.src = "js/katex/katex.min.js"; script1.src = prefix + "js/katex/katex.min.js";
if (params.containsMathTex) { if (params.containsMathTex) {
script2 = doc.createElement("script"); script2 = doc.createElement("script");
script2.type = "text/javascript"; script2.type = "text/javascript";
script2.src = "js/katex/contrib/mathtex-script-type.min.js"; script2.src = prefix + "js/katex/contrib/mathtex-script-type.min.js";
} }
if (params.containsMathTexRaw) { if (params.containsMathTexRaw) {
script3 = doc.createElement("script"); script3 = doc.createElement("script");
script3.type = "text/javascript"; script3.type = "text/javascript";
script3.src = "js/katex/contrib/auto-render.min.js"; script3.src = prefix + "js/katex/contrib/auto-render.min.js";
script3.onload = function() { script3.onload = function() {
iframe.contentWindow.renderMathInElement(doc.body, { iframe.contentWindow.renderMathInElement(doc.body, {
delimiters: [{ delimiters: [{