Skip to content

Commit 9e7617f

Browse files
authored
Miscellanous diffs (#1952)
* Match style regex when semicolon is omitted * Move FootnoteExtractor to its own file * Cover more WordPress sites * Move Information page header out of div * Add webRequestBlocking for Firefox instead of remove for Chrome * Add missing images in pack.js
1 parent b0e2836 commit 9e7617f

7 files changed

Lines changed: 63 additions & 53 deletions

File tree

eslint/pack.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,10 @@ var packNonManifestExtensionFiles = function(zip, packedFileName) {
178178
return addImageFileToZip(zip, "ChapterStateNone.svg");
179179
}).then(function () {
180180
return addImageFileToZip(zip, "ChapterStateSleeping.svg");
181+
}).then(function () {
182+
return addImageFileToZip(zip, "FileEarmarkCheck.svg");
183+
}).then(function () {
184+
return addImageFileToZip(zip, "FileEarmarkCheckFill.svg");
181185
}).then(function () {
182186
return addCssFileToZip(zip, "default.css");
183187
}).then(function () {
@@ -212,6 +216,10 @@ var makeManifestForFirefox = function(data) {
212216
// fix permissions/host_permissions
213217
let permissions = manifest.permissions;
214218
permissions = permissions.filter(p => p != "scripting");
219+
// Add webRequestBlocking for Firefox
220+
if (permissions.includes("webRequest") && !permissions.includes("webRequestBlocking")) {
221+
permissions.push("webRequestBlocking");
222+
}
215223
manifest.permissions = permissions.concat(manifest.host_permissions);
216224
delete manifest.host_permissions;
217225

plugin/js/FootnoteExtractor.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class FootnoteExtractor {
2+
scriptElementsToFootnotes(dom) {
3+
let indexedFootnotes = new Map();
4+
[...dom.querySelectorAll("script")]
5+
.map(s => s.textContent)
6+
.filter(s => s.includes("toolTips('.classtoolTips"))
7+
.forEach(s => indexedFootnotes.set(this.getId(s), this.extractFootnoteText(s)));
8+
9+
return this.getIdsUsedOnPage(dom)
10+
.map(id => this.makeSpan(indexedFootnotes.get(id), dom));
11+
}
12+
13+
getIdsUsedOnPage(dom) {
14+
let extractId = (span) => [...span.classList]
15+
.filter(s => s.startsWith("class"))[0];
16+
17+
return [...dom.querySelectorAll("span.tooltipsall")]
18+
.map(extractId);
19+
}
20+
21+
getId(script) {
22+
return this.extractSubstring(script, "toolTips('.", ",").replace("'", "");
23+
}
24+
25+
makeSpan(content, dom) {
26+
let span = dom.createElement("span");
27+
span.textContent = content;
28+
return span;
29+
}
30+
31+
extractFootnoteText(content) {
32+
return this.extractSubstring(content, "tt_store_content = \"", "\"; toolTips('");
33+
}
34+
35+
extractSubstring(content, startTag, endTag) {
36+
content = content.substring(content.indexOf(startTag) + startTag.length);
37+
return content.substring(0, content.indexOf(endTag));
38+
}
39+
}

plugin/js/Parser.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,9 @@ class Parser {
369369

370370
makeInformationEpubItem(dom) {
371371
let titleText = chrome.i18n.getMessage("informationPageTitle");
372-
let div = document.createElement("div");
373372
let title = document.createElement("h1");
374373
title.appendChild(document.createTextNode(titleText));
375-
div.appendChild(title);
374+
let div = document.createElement("div");
376375
let urlElement = document.createElement("p");
377376
let bold = document.createElement("b");
378377
bold.textContent = chrome.i18n.getMessage("tableOfContentsUrl");
@@ -381,7 +380,7 @@ class Parser {
381380
div.appendChild(urlElement);
382381
let infoDiv = document.createElement("div");
383382
this.populateInfoDiv(infoDiv, dom);
384-
let childNodes = [div, infoDiv];
383+
let childNodes = [title, div, infoDiv];
385384
let chapter = {
386385
sourceUrl: this.state.chapterListUrl,
387386
title: titleText,

plugin/js/Util.js

Lines changed: 6 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -978,16 +978,16 @@ var util = (function () {
978978
}
979979
}
980980

981-
const replaceSemanticInlineStylesWithTags = function(element, removeLeftoverStyles = false) {
981+
const replaceSemanticInlineStylesWithTags = function (element, removeLeftoverStyles = false) {
982982
if (element.hasAttribute("style")) {
983983
let styleText = element.getAttribute("style");
984984

985985
// Map of style patterns to their semantic HTML equivalents
986986
const styleToTag = [
987-
{ regex: /font-style\s*:\s*(italic|oblique)\s*;/g, tag: "i" },
988-
{ regex: /font-weight\s*:\s*(bold|[7-9]\d\d)\s*;/g, tag: "b" },
989-
{ regex: /text-decoration\s*:\s*underline\s*;/g, tag: "u" },
990-
{ regex: /text-decoration\s*:\s*line-through\s*;/g, tag: "s" }
987+
{ regex: /font-style\s*:\s*(italic|oblique)\s*;?/g, tag: "i" },
988+
{ regex: /font-weight\s*:\s*(bold|[7-9]\d\d)\s*;?/g, tag: "b" },
989+
{ regex: /text-decoration\s*:\s*underline\s*;?/g, tag: "u" },
990+
{ regex: /text-decoration\s*:\s*line-through\s*;?/g, tag: "s" }
991991
];
992992

993993
// Apply semantic tags and remove corresponding styles
@@ -1001,7 +1001,7 @@ var util = (function () {
10011001
}
10021002

10031003
// Remove non-semantic font-weight
1004-
styleText = styleText.replace(/font-weight\s*:\s*(normal|[1-4]\d\d)\s*;/g, "");
1004+
styleText = styleText.replace(/font-weight\s*:\s*(normal|[1-4]\d\d)\s*;?/g, "");
10051005
styleText = styleText.trim();
10061006

10071007
if (styleText && (!removeLeftoverStyles || /italic|bold|font-weight|underline|line-through/.test(styleText))) {
@@ -1137,43 +1137,3 @@ var util = (function () {
11371137
wrapInnerContentInTag: wrapInnerContentInTag
11381138
};
11391139
})();
1140-
1141-
class FootnoteExtractor {
1142-
scriptElementsToFootnotes(dom) {
1143-
let indexedFootnotes = new Map();
1144-
[...dom.querySelectorAll("script")]
1145-
.map(s => s.textContent)
1146-
.filter(s => s.includes("toolTips('.classtoolTips"))
1147-
.forEach(s => indexedFootnotes.set(this.getId(s), this.extractFootnoteText(s)));
1148-
1149-
return this.getIdsUsedOnPage(dom)
1150-
.map(id => this.makeSpan(indexedFootnotes.get(id), dom));
1151-
}
1152-
1153-
getIdsUsedOnPage(dom) {
1154-
let extractId = (span) => [...span.classList]
1155-
.filter(s => s.startsWith("class"))[0];
1156-
1157-
return [...dom.querySelectorAll("span.tooltipsall")]
1158-
.map(extractId);
1159-
}
1160-
1161-
getId(script) {
1162-
return this.extractSubstring(script, "toolTips('.", ",").replace("'", "");
1163-
}
1164-
1165-
makeSpan(content, dom) {
1166-
let span = dom.createElement("span");
1167-
span.textContent = content;
1168-
return span;
1169-
}
1170-
1171-
extractFootnoteText(content) {
1172-
return this.extractSubstring(content, "tt_store_content = \"", "\"; toolTips('");
1173-
}
1174-
1175-
extractSubstring(content, startTag, endTag) {
1176-
content = content.substring(content.indexOf(startTag) + startTag.length);
1177-
return content.substring(0, content.indexOf(endTag));
1178-
}
1179-
}

plugin/js/parsers/WordpressBaseParser.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ parserFactory.register("skythewoodtl.com", function() { return new WordpressBase
1818
//dead url
1919
parserFactory.register("yoraikun.wordpress.com", function() { return new WordpressBaseParser() });
2020
parserFactory.register("wanderertl130.id", function() { return new Wanderertl130Parser() });
21+
parserFactory.register("sasakitomyiano.wordpress.com", function() { return new WordpressBaseParser() });
2122

2223
parserFactory.registerRule(
2324
// return probability (0.0 to 1.0) web page is a Wordpress page
@@ -29,7 +30,7 @@ parserFactory.registerRule(
2930
);
3031

3132
parserFactory.registerManualSelect(
32-
"Wordpress",
33+
"Wordpress",
3334
function() { return new WordpressBaseParser() }
3435
);
3536

@@ -46,7 +47,9 @@ class WordpressBaseParser extends Parser {
4647

4748
static findContentElement(dom) {
4849
return dom.querySelector("div.entry-content") ||
49-
dom.querySelector("div.post-content");
50+
dom.querySelector("div.post-content") ||
51+
dom.querySelector("ul.wp-block-post-template") ||
52+
dom.querySelector(".wp-block-cover__inner-container");
5053
}
5154

5255
// find the node(s) holding the story content
@@ -65,7 +68,8 @@ class WordpressBaseParser extends Parser {
6568
dom.querySelector(".page-title") ||
6669
dom.querySelector("header.post-title h1") ||
6770
dom.querySelector(".post-title") ||
68-
dom.querySelector("#chapter-heading");
71+
dom.querySelector("#chapter-heading") ||
72+
dom.querySelector(".wp-block-post-title");
6973
}
7074

7175
findChapterTitle(dom) {

plugin/manifest.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"cookies",
1111
"downloads",
1212
"webRequest",
13-
"webRequestBlocking",
1413
"declarativeNetRequest",
1514
"scripting",
1615
"storage",

plugin/popup.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,7 @@ <h3>Instructions</h3>
536536
<script src="js/EpubMetaInfo.js"></script>
537537
<script src="js/ErrorLog.js"></script>
538538
<script src="js/Util.js"></script>
539+
<script src="js/FootnoteExtractor.js"></script>
539540
<script src="js/Firefox.js"></script>
540541
<script src="js/Sanitize.js"></script>
541542
<script src="js/Download.js"></script>

0 commit comments

Comments
 (0)