Skip to content

Commit 754f31f

Browse files
committed
fixes alexadam#52
1 parent 04f9e5d commit 754f31f

File tree

1 file changed

+31
-28
lines changed

1 file changed

+31
-28
lines changed

web-extension/extractHtml.js

+31-28
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var allowedTags = [
1818
'math', 'maction', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot',
1919
'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'msgroup', 'mlongdiv', 'mscarries',
2020
'mscarry', 'mstack', 'semantics'
21-
// TODO ?
21+
// TODO ?
2222
// ,'form', 'button'
2323

2424
// TODO svg support ?
@@ -38,12 +38,12 @@ var tmpIdsToNewCssSTRING = {};
3838
var supportedCss = [
3939
'background-color',
4040
'border',
41-
'color',
41+
'color',
4242
'font',
4343
'line-height',
4444
'list-style',
4545
'padding',
46-
'text-align',
46+
'text-align',
4747
];
4848
//////
4949

@@ -73,7 +73,7 @@ function getImageSrc(srcTxt) {
7373
filename: newImgFileName, // TODO name
7474
data: getBase64ImgData(srcTxt)
7575
});
76-
} else {
76+
} else {
7777
allImages.push({
7878
originalUrl: getImgDownloadUrl(srcTxt),
7979
filename: newImgFileName, // TODO name
@@ -118,28 +118,31 @@ function extractSvgToImg($htmlObject) {
118118

119119
// replaces all iframes by divs with the same innerHTML content
120120
function extractIFrames() {
121-
let allIframes = document.getElementsByTagName('iframe')
122-
let changeIFrames = []
123-
let newDivs = []
124-
for (let iFrame of allIframes) {
125-
if (!iFrame.contentDocument || !iFrame.contentDocument.body) {
126-
continue
127-
}
128-
let bodyContent = iFrame.contentDocument.body.innerHTML
129-
let bbox = iFrame.getBoundingClientRect()
130-
let newDiv = document.createElement('div')
131-
newDiv.style.width = bbox.width
132-
newDiv.style.height = bbox.height
133-
newDiv.innerHTML = bodyContent
134-
changeIFrames.push(iFrame)
135-
newDivs.push(newDiv)
136-
}
137-
for (let i = 0; i < newDivs.length; i++) {
138-
let newDiv = newDivs[i]
139-
let iFrame = changeIFrames[i]
140-
let iframeParent = iFrame.parentNode
141-
iframeParent.replaceChild(newDiv, iFrame)
121+
function editStyle(style, id) {
122+
return style.split("\n").map(function (line) {
123+
if(!/\{/.test(line)) {
124+
return line;
125+
}
126+
return "#" + id + " " + line.replace("body", "");
127+
}).join("\n");
142128
}
129+
let iframes = Array.from(document.querySelectorAll("iframe"));
130+
const divs = iframes.map(function (iframe, index) {
131+
const div = document.createElement("div");
132+
div.id = "save-as-ebook-iframe-" + index;
133+
if (!iframe.contentDocument || !iframe.contentDocument.body) {
134+
return div;
135+
}
136+
let bbox = iframe.getBoundingClientRect();
137+
div.style.width = bbox.width;
138+
div.style.height = bbox.height;
139+
div.innerHTML = iframe.contentDocument.body.innerHTML ?? "";
140+
Array.from(div.querySelectorAll("style")).forEach(function (style) {
141+
style.innerHTML = editStyle(style.innerHTML, div.id);
142+
});
143+
return div;
144+
});
145+
iframes.forEach((iframe, i) => iframe.parentNode.replaceChild(divs[i], iframe));
143146
}
144147

145148
function preProcess($htmlObject) {
@@ -381,7 +384,7 @@ function extractCss(includeStyle, appliedStyles) {
381384

382385
function deferredAddZip(url, filename) {
383386
let deferred = $.Deferred();
384-
JSZipUtils.getBinaryContent(url, function(err, data) {
387+
JSZipUtils.getBinaryContent(url, function(err, data) {
385388
if (err) {
386389
// deferred.reject(err); TODO
387390
console.log('Error:', err);
@@ -408,13 +411,13 @@ function deferredAddZip(url, filename) {
408411
}
409412
tmpGlobalContent = tmpGlobalContent.replace(oldFilename, filename)
410413
}
411-
414+
412415
extractedImages.push({
413416
filename: filename,
414417
// TODO - must be JSON serializable
415418
data: base64ArrayBuffer(data)
416419
});
417-
420+
418421
deferred.resolve();
419422
}
420423
});

0 commit comments

Comments
 (0)