summaryrefslogtreecommitdiff
path: root/toolkit
diff options
context:
space:
mode:
authorTrushita <trushita@gmail.com>2020-05-23 22:22:53 -0400
committerAscrod <32915892+Ascrod@users.noreply.github.com>2020-05-25 14:31:31 -0400
commit54329daab7ed6a7805ab06f22d3846b44f893ca4 (patch)
treee5c254e2ac5a642f6be49a00ab20c3da3ed3fa42 /toolkit
parent7ce31fc2a47daf6a9b5c637b884567172691d3c3 (diff)
downloaduxp-54329daab7ed6a7805ab06f22d3846b44f893ca4.tar.gz
Bug 1154295 - use normal formatting for plaintext documents in reader mode
Before this change the plain text document in reader mode was not formatted/styled properly. Tag #361.
Diffstat (limited to 'toolkit')
-rw-r--r--toolkit/components/reader/ReaderMode.jsm42
1 files changed, 42 insertions, 0 deletions
diff --git a/toolkit/components/reader/ReaderMode.jsm b/toolkit/components/reader/ReaderMode.jsm
index d9889e19e5..a1d2c5643a 100644
--- a/toolkit/components/reader/ReaderMode.jsm
+++ b/toolkit/components/reader/ReaderMode.jsm
@@ -346,6 +346,11 @@ this.ReaderMode = {
pathBase: Services.io.newURI(".", null, doc.baseURIObject).spec
};
+ // convert text/plain document, if any, to XHTML format
+ if (this._isDocumentPlainText(doc)) {
+ doc = this._convertPlainTextDocument(doc);
+ }
+
let langAttributes = {
charset: doc.characterSet,
lang: doc.documentElement.lang
@@ -540,6 +545,43 @@ this.ReaderMode = {
return readingSpeed.get(lang) || readingSpeed.get("en");
},
+
+ /**
+ *
+ * Check if the document to be parsed is text document.
+ * @param doc the doc object to be parsed.
+ * @return boolean
+ *
+ */
+ _isDocumentPlainText(doc) {
+ return doc.contentType == "text/plain";
+ },
+
+ /**
+ *
+ * The document to be parsed is text document and is converted to HTML format.
+ * @param doc the doc object to be parsed.
+ * @return doc
+ *
+ */
+ _convertPlainTextDocument(doc) {
+ let preTag = doc.querySelector("pre");
+ let docFrag = doc.createDocumentFragment();
+ let content = preTag.textContent;
+ let paragraphs = content.split(/\r?\n\r?\n/);
+ for (let para of paragraphs) {
+ let pElem = doc.createElement("p");
+ let lines = para.split(/\n/);
+ for (let line of lines) {
+ pElem.append(line);
+ let brElem = doc.createElement("br");
+ pElem.append(brElem);
+ }
+ docFrag.append(pElem);
+ }
+ preTag.parentNode.replaceChild(docFrag, preTag);
+ return doc;
+ },
};
// Don't try to parse the page if it has too many elements (for memory and