-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
554e2bc
commit 1ba6463
Showing
1 changed file
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
/* See LICENSE file for copyright, license and warranty details. */ | ||
|
||
if(window.content && window.content.document && window.content.document.simplyread_original === undefined) window.content.document.simplyread_original = false; | ||
|
||
function simplyread(nostyle, nolinks) | ||
{ | ||
/* count the number of <p> tags that are direct children of parenttag */ | ||
function count_p(parenttag) | ||
{ | ||
var n = 0; | ||
var c = parenttag.childNodes; | ||
for (var i = 0; i < c.length; i++) { | ||
if (c[i].tagName == "p" || c[i].tagName == "P") | ||
n++; | ||
} | ||
return n; | ||
} | ||
|
||
var doc; | ||
doc = (document.body === undefined) | ||
? window.content.document : document; | ||
|
||
/* if simplyread_original is set, then the simplyread version is currently active, | ||
* so switch to the simplyread_original html */ | ||
if (doc.simplyread_original) { | ||
doc.body.innerHTML = doc.simplyread_original; | ||
for (var i = 0; i < doc.styleSheets.length; i++) | ||
doc.styleSheets[i].disabled = false; | ||
doc.simplyread_original = false | ||
return 0; | ||
} | ||
|
||
doc.simplyread_original = doc.body.innerHTML; | ||
doc.body.innerHTML = doc.body.innerHTML.replace(/<br[^>]*>\s*<br[^>]*>/g, "<p>"); | ||
|
||
var biggest_num = 0; | ||
var biggest_tag; | ||
|
||
/* search for tag with most direct children <p> tags */ | ||
var t = doc.getElementsByTagName("*"); | ||
for (var i = 0; i < t.length; i++) { | ||
var p_num = count_p(t[i]); | ||
if (p_num > biggest_num) { | ||
biggest_num = p_num; | ||
biggest_tag = t[i]; | ||
} | ||
} | ||
|
||
if (biggest_num == 0) return 1; | ||
|
||
/* save and sanitise content of chosen tag */ | ||
var fresh = doc.createElement("div"); | ||
fresh.innerHTML = biggest_tag.innerHTML; | ||
fresh.innerHTML = fresh.innerHTML.replace(/<\/?font[^>]*>/g, ""); | ||
fresh.innerHTML = fresh.innerHTML.replace(/style="[^"]*"/g, ""); | ||
if(nolinks) | ||
fresh.innerHTML = fresh.innerHTML.replace(/<\/?a[^>]*>/g, ""); | ||
fresh.innerHTML = fresh.innerHTML.replace(/<\/?span[^>]*>/g, ""); | ||
fresh.innerHTML = fresh.innerHTML.replace(/<style[^>]*>/g, "<style media=\"aural\">"); /* ensures contents of style tag are ignored */ | ||
|
||
for (var i = 0; i < doc.styleSheets.length; i++) | ||
doc.styleSheets[i].disabled = true; | ||
|
||
srstyle = | ||
"p{margin:0ex auto;} h1,h2,h3,h4{font-weight:normal}" + | ||
"p+p{text-indent:2em;} body{background:#f9f9f9 none}" + | ||
"img{display:block; margin-left: auto; margin-right: auto;}" + | ||
"h1{text-align:center;text-transform:uppercase}" + | ||
"div#sr{padding-top:2em;" + | ||
" background-color:#f9f9f9; margin:auto; line-height:1.4;" + | ||
" text-align:justify; font-family:'Segoe UI'; hyphens:auto;}"; | ||
/* text-rendering:optimizeLegibility; - someday this will work, | ||
* but at present it just ruins justify, so is disabled */ | ||
|
||
doc.body.innerHTML = | ||
"<style type=\"text/css\">" + (nostyle ? "" : srstyle) + "</style>" + | ||
"<div id=\"sr\">" + "<h1>"+doc.title+"</h1>" + fresh.innerHTML + "</div>"; | ||
|
||
return 0; | ||
} | ||
|
||
simplyread(); |