81 lines
2.8 KiB
JavaScript
Executable File
81 lines
2.8 KiB
JavaScript
Executable File
/* See COPYING 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:#cccccc none}" +
|
|
"img{display:block; max-width: 32em; padding:1em; margin: auto}" +
|
|
"h1{text-align:center;text-transform:uppercase}" +
|
|
"div#sr{width:34em; padding:8em; padding-top:2em;" +
|
|
" background-color:white; margin:auto; line-height:1.4;" +
|
|
" text-align:justify; font-family:serif; 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;
|
|
}
|