diff --git a/www/css/app.css b/www/css/app.css index 012407f3..404ff1db 100644 --- a/www/css/app.css +++ b/www/css/app.css @@ -415,6 +415,10 @@ pre { margin-bottom: 15% !important; } +#dl-panel-body::before, #dl-panel-body::after { + content: '' !important; +} + /*********************************/ /******* Custom checkboxes *******/ /*********************************/ diff --git a/www/js/lib/kiwixServe.js b/www/js/lib/kiwixServe.js index aac49125..5c27a5b1 100644 --- a/www/js/lib/kiwixServe.js +++ b/www/js/lib/kiwixServe.js @@ -208,6 +208,7 @@ define([], function () { pms: 'Piemontèis (Piedmontese)', ps: 'پښتو (Pashto)', pt: 'Português (Portuguese)', + ptbr: 'Português brasileiro (Brazilian Portuguese)', qu: 'Runa Simi (Quechua)', rm: 'Rumantsch (Raeto Romance)', rmy: 'Romani / रोमानी (Romani)', @@ -549,11 +550,17 @@ define([], function () { } dropdownDate += '\r\n'; } + //Add language, subject and date spans to doc + if (/^(?:[^._]+\.stack(?:exchange|overflow)|askubuntu|stackapps|stackoverflow|superuser|serverfault)/mi.test(doc)) { + doc = doc.replace(/^([^>\n\r]+>(?:.+(stackoverflow)|([^.\n\r]+))\.([^_\n\r]+)_([^_\n\r]+)_.*?(\d[\d-]+)\.zi[mp].+)$[\n\r]*/img, '$1
'); + } else { + doc = doc.replace(/^([^_\n\r]+_([^_\n\r]+)_((?:[^_]|_(?!maxi|mini|nopic|\d\d\d\d))+)_.*?(\d[\d-]+)\.zi[mp].+)$[\n\r]*/img, '$1
'); + } + // Normalize languages with a - (from Stackexchange) + doc = doc.replace(/(lang="\w+)-(\w+")/, '$1$2'); doc = dropdownDate ? doc.replace(/<\/h3>/i, '' + (dropdownLang || dropdownSubj ? '' : '\r\n
\r\n') + '
Date:  ' + dropdownDate + '
\r\n
\r\n') : doc; doc = dropdownSubj ? doc.replace(/<\/h3>/i, '' + (dropdownLang ? '' : '\r\n
\r\n') + '
Subject:  ' + dropdownSubj + '
\r\n' + (dropdownDate ? '' : '
\r\n')) : doc; doc = dropdownLang ? doc.replace(/<\/h3>/i, '\r\n
\r\n
Language:  ' + dropdownLang + '
\r\n' + (dropdownSubj || dropdownDate ? '' : '
\r\n')) : doc; - //Add language and date spans to doc - doc = doc.replace(/^([^_\n\r]+_([^_\n\r]+)_([^_\n\r]+)_.*?(\d[\d-]+)\.zi[mp].+)$[\n\r]*/img, '$1
'); } downloadLinks.innerHTML = doc; var langSel = document.getElementById('langs'); @@ -572,7 +579,7 @@ define([], function () { if (subjSel) subjSel.value = subj || 'All'; if (dateSel) dateSel.value = kiwixDate || 'All'; } - if (typeof langArray !== "undefined") { + if (langArray && langSel) { //Set up event listener for language selector langSel.addEventListener("change", function () { var dateID = dateSel ? dateSel.options[dateSel.selectedIndex].value : ''; @@ -604,7 +611,8 @@ define([], function () { var subjList = subjectArray.join('\r\n'); subjList = subjList.replace(/^(.*)[\r\n]*/mg, function (p0, p1) { // DEV: innerText doesn't include hidden items - if (p1 !== 'All' && !~langPanel.innerText.indexOf('_' + p1 + '_')) return ''; + var rgxSubject = new RegExp('_?' + p1 + '[._]', 'i'); + if (p1 !== 'All' && !rgxSubject.test(langPanel.innerText)) return ''; return ''; }); subjSel.innerHTML = subjList; @@ -618,7 +626,7 @@ define([], function () { } }); } - if (typeof subjectArray !== "undefined") { + if (subjectArray && subjSel) { //Set up event listener for subject selector subjSel.addEventListener("change", function () { var langID = langSel ? langSel.options[langSel.selectedIndex].value : ''; @@ -636,9 +644,11 @@ define([], function () { // Prune the language list if (langID === 'All') { var langList = langArray.join('\r\n'); + // We need to normalize language codes in langPanel (for Stackexchange) + // DEV: innerText doesn't include hidden items + var langTestPanel = langPanel.innerText.replace(/(_\w+)-(\w+_)/, '$1$2'); langList = langList.replace(/^(.*)[\r\n]*/mg, function (p0, p1) { - // DEV: innerText doesn't include hidden items - if (p1 !== 'All' && !~langPanel.innerText.indexOf('_' + p1 + '_')) return ''; + if (p1 !== 'All' && !~langTestPanel.indexOf('_' + p1 + '_')) return ''; return ''; }); langSel.innerHTML = langList; @@ -662,7 +672,7 @@ define([], function () { } }); } - if (typeof dateArray !== "undefined") { + if (dateArray && dateSel) { //Set up event listener for date selector dateSel.addEventListener("change", function () { var langID = langSel ? langSel.options[langSel.selectedIndex].value : ''; @@ -680,9 +690,11 @@ define([], function () { // Prune the language list if (langID === 'All') { var langList = langArray.join('\r\n'); + // We need to normalize language codes in langPanel (for Stackexchange) + // DEV: innerText doesn't include hidden items + var langTestPanel = langPanel.innerText.replace(/(_\w+)-(\w+_)/, '$1$2'); langList = langList.replace(/^(.*)[\r\n]*/mg, function (p0, p1) { - // DEV: innerText doesn't include hidden items - if (p1 !== 'All' && !~langPanel.innerText.indexOf('_' + p1 + '_')) return ''; + if (p1 !== 'All' && !~langTestPanel.indexOf('_' + p1 + '_')) return ''; return ''; }); langSel.innerHTML = langList; @@ -692,7 +704,8 @@ define([], function () { var subjList = subjectArray.join('\r\n'); subjList = subjList.replace(/^(.*)[\r\n]*/mg, function (p0, p1) { // DEV: innerText doesn't include hidden items - if (p1 !== 'All' && !~langPanel.innerText.indexOf('_' + p1 + '_')) return ''; + var rgxSubject = new RegExp('_?' + p1 + '[._]', 'i'); + if (p1 !== 'All' && !rgxSubject.test(langPanel.innerText)) return ''; return ''; }); subjSel.innerHTML = subjList; @@ -707,7 +720,7 @@ define([], function () { }); } var links = downloadLinks.getElementsByTagName("a"); - for (var i = 0; i < links.length; i++) { + for (i = 0; i < links.length; i++) { //Store the href - seems it's not useful? //links[i].setAttribute("data-kiwix-dl", links[i].href); links[i].href = "#"; @@ -737,11 +750,11 @@ define([], function () { // Standardize the document for array extraction function getStandardizedDoc(fromDoc) { //Add back any missing carriage returns - var std = fromDoc.replace(/<\/span>