diff options
author | Trushita <trushita@gmail.com> | 2020-05-23 22:22:53 -0400 |
---|---|---|
committer | Ascrod <32915892+Ascrod@users.noreply.github.com> | 2020-05-25 14:31:31 -0400 |
commit | 54329daab7ed6a7805ab06f22d3846b44f893ca4 (patch) | |
tree | e5c254e2ac5a642f6be49a00ab20c3da3ed3fa42 /toolkit | |
parent | 7ce31fc2a47daf6a9b5c637b884567172691d3c3 (diff) | |
download | uxp-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.jsm | 42 |
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 |