Deal with Zimit redirects via meta http-equiv

Former-commit-id: 82c579fa4e5b1cf2ed65ba17d3409f1ea2a2ec7b [formerly 2e50f41b937722e61370ee6c972b04d218752cf1] [formerly 5365b9992af91d557518372a59f327dca9cdb48f] [formerly 04d76202b17365fceeb51ab0d61f3f2abc04eac3 [formerly 947201c8614e808a31e380b112cce39f928adaab [formerly 0dfbb7f094280c42564ad19b440bc125c748e0af]]]
Former-commit-id: e487169e2bc6c61dd3465ed2b4d7251c8d1ea43f [formerly d6aac0bb5f32cef6150aefd238bb094765dad9ba [formerly 17dc2a0c372f2fa85c7cde45cc15b667d8b3e151]]
Former-commit-id: 8abd691802edbc34ccd404c9a3e5f8b705bd9f27 [formerly a058a4c30d4d8272ab3f7ebf06888bc6eb8ffafa]
Former-commit-id: 74ab584198139363fc6fbce1a9f5a008403187a6
This commit is contained in:
Jaifroid 2022-04-30 16:43:27 +01:00
parent 406a7c4424
commit d1d12c07bd

View File

@ -75,7 +75,7 @@ define([], function () {
function transformReplayUrls(dirEntry, data, mimetype, selectedArchive) { function transformReplayUrls(dirEntry, data, mimetype, selectedArchive) {
// Filter links in html files // Filter links in html files
if (/\bhtml\b/.test(mimetype)) { if (/\bhtml\b/i.test(mimetype)) {
var zimitPrefix = data.match(/link\s+rel=["']canonical["']\s+href=(['"])https?:\/\/([^\/]+)(.+?)\1/i); var zimitPrefix = data.match(/link\s+rel=["']canonical["']\s+href=(['"])https?:\/\/([^\/]+)(.+?)\1/i);
zimitPrefix = zimitPrefix ? zimitPrefix[2] : params.zimitPrefix; zimitPrefix = zimitPrefix ? zimitPrefix[2] : params.zimitPrefix;
var regexpZimitHtmlLinks = /(<(?:a|img|script|link|track|meta)\b[^>]*?[\s;])(?:src|href|url)(=(["']))(?=\/|https?:\/\/)([^>]+)(?=\3|\?|#)([^>]*>)/ig; var regexpZimitHtmlLinks = /(<(?:a|img|script|link|track|meta)\b[^>]*?[\s;])(?:src|href|url)(=(["']))(?=\/|https?:\/\/)([^>]+)(?=\3|\?|#)([^>]*>)/ig;
@ -87,6 +87,8 @@ define([], function () {
// For root-relative links, we need to add the zimitPrefix // For root-relative links, we need to add the zimitPrefix
assetUrl = assetUrl.replace(/^\//, dirEntry.namespace + '/' + params.zimitPrefix + '/'); assetUrl = assetUrl.replace(/^\//, dirEntry.namespace + '/' + params.zimitPrefix + '/');
assetUrl = assetUrl.replace(/^https?:\/\//i, dirEntry.namespace + '/'); assetUrl = assetUrl.replace(/^https?:\/\//i, dirEntry.namespace + '/');
// Deal with <meta http-equiv refresh...> directives
if (/<meta\s+http-equiv[^>]+refresh\b/i.test(newBlock)) dirEntry.zimitRedirect = assetUrl;
newBlock = params.contentInjectionMode === 'serviceworker' && !/^<a\s/i.test(match) ? newBlock = params.contentInjectionMode === 'serviceworker' && !/^<a\s/i.test(match) ?
newBlock.replace(relAssetUrl, '/' + selectedArchive._file.name + '/' + assetUrl) : newBlock.replace(relAssetUrl, '/' + selectedArchive._file.name + '/' + assetUrl) :
newBlock.replace(relAssetUrl, '/' + assetUrl); newBlock.replace(relAssetUrl, '/' + assetUrl);
@ -113,15 +115,15 @@ define([], function () {
} }
} }
if (/^text\/css\b/.test(mimetype)) { if (/\b(css|html)\b/i.test(mimetype)) {
var regexpZimitCssLinks = /url\s*\(['"\s]*([^)'"]+\s*\))/ig; var regexpZimitCssLinks = /url\s*\(['"\s]*([^)'"\s]+)/ig;
data = data.replace(regexpZimitCssLinks, function (match, url) { data = data.replace(regexpZimitCssLinks, function (match, url) {
var newBlock = match; var newBlock = match;
var assetUrl = url.replace(/^\//i, dirEntry.namespace + '/' + params.zimitPrefix + '/'); var assetUrl = url.replace(/^\//i, dirEntry.namespace + '/' + params.zimitPrefix + '/');
assetUrl = assetUrl.replace(/^https?:\/\//i, dirEntry.namespace + '/'); assetUrl = assetUrl.replace(/^https?:\/\//i, dirEntry.namespace + '/');
if (assetUrl === url) return match; // If nothing was transformed, return if (assetUrl === url) return match; // If nothing was transformed, return
newBlock = params.contentInjectionMode === 'serviceworker' ? newBlock = params.contentInjectionMode === 'serviceworker' ?
newBlock.replace(url, '/' + selectedArchive._file.name + '/' + assetUrl) : newBlock.replace(url, '/' + selectedArchive._file.name + '/' + assetUrl + '?kiwix-display') :
newBlock.replace(url, '/' + assetUrl); newBlock.replace(url, '/' + assetUrl);
console.debug('Transform: \n' + match + '\n -> ' + newBlock); console.debug('Transform: \n' + match + '\n -> ' + newBlock);
return newBlock; return newBlock;