Skip to content

Instantly share code, notes, and snippets.

@mattslack
Last active August 10, 2017 17:11
Show Gist options
  • Save mattslack/4597671 to your computer and use it in GitHub Desktop.
Save mattslack/4597671 to your computer and use it in GitHub Desktop.
Improve the readability on Pocket (formerly Read it Later).
// ==UserScript==
// @name Pocket Readability
// @version 1.3
// @author Matt Slack
// @description Improve the readability on Pocket (formerly Read it Later).
// @match https://getpocket.com/a/*
// ==/UserScript==
// Stolen from https://developer.mozilla.org/en-US/docs/DOM/CSSStyleSheet/insertRule
function addStylesheetRules(decls) {
"use strict";
var decl, dl, i, j, rl, rule, rulesStr, s, selector, style = document.createElement('style');
document.getElementsByTagName('head')[0].appendChild(style);
if (!window.createPopup) { /* For Safari */
style.appendChild(document.createTextNode(''));
}
s = document.styleSheets[document.styleSheets.length - 1];
for (i = 0, dl = decls.length; i < dl; i++) {
j = 1;
decl = decls[i];
selector = decl[0];
rulesStr = '';
if (Object.prototype.toString.call(decl[1][0]) === '[object Array]') {
decl = decl[1];
j = 0;
}
for (rl = decl.length; j < rl; j++) {
rule = decl[j];
rulesStr += rule[0] + ':' + rule[1] + (rule[2] ? ' !important' : '') + ';\n';
}
if (s.insertRule) {
s.insertRule(selector + '{' + rulesStr + '}', s.cssRules.length);
} else { /* IE */
s.addRule(selector, rulesStr, -1);
}
}
}
function fix_dashes(e) {
var endash = new RegExp('(\\d)(-)(\\d)', 'gm'),
emdash = new RegExp('(\\s+)(--|—)(\\s+)?', 'gm'),
apostrophe = new RegExp('([A-Za-z])\'([a-z])', 'gm'),
open_dumbquote = new RegExp('(\\s|^)(\')', 'gm'),
close_dumbquote = new RegExp('(\')(\\s|"|$)', 'gm'),
open_doubledumbquote = new RegExp('(\\s|"|^)(")', 'gm'),
close_doubledumbquote = new RegExp('(")(\\s|$)', 'gm'),
widont = new RegExp('(\\s)([^\\s]+)$'),
ellipses = new RegExp('(\\.(\\s)?\\.(\\s)?\\.)', 'gm');
return e.textContent.replace(apostrophe, "$1’$2")
.replace(open_dumbquote, "$1‘")
.replace(close_dumbquote, "’$2")
.replace(open_doubledumbquote, "$1“")
.replace(close_doubledumbquote, "”$2")
.replace(endash, '$1–$3')
.replace(emdash, "\u200a—\u200a")
.replace(widont, "\u00a0$2")
.replace(ellipses, "…");
}
function textNodesUnder(el) {
var n, a=[], walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false);
n = walk.nextNode();
while(n){ a.push(n); n = walk.nextNode();}
return a;
}
function init() {
"use strict";
var reader = document.getElementById('page_reader');
if (reader !== null) {
for (var i of textNodesUnder(reader)){
(i).textContent = fix_dashes(i);
}
addStylesheetRules([
['#page_reader.readability',
['text-rendering', 'optimizeLegibility'],
['-webkit-font-feature-settings', "'kern' 1, 'liga' 1, 'onum' 1, 'pnum', 'frac'"]
],
['.readability.font-serif .text_body p',
['font-family', 'ETBookOT, Andada, "OFL Sorts Mill Goudy","Hoefler Text", Georgia, serif']
],
['.readability.font-serif .reader_content',
['font-family', 'ETBookOT, Andada, "OFL Sorts Mill Goudy","Hoefler Text", Georgia, serif']
],
['.readability.font-sans .text_body strong',
['font-family', 'Thonburi, Helvetica, Arial, sans-serif']
],
['.readability.font-sans .text_body p',
['font-family', 'Thonburi, Helvetica, Arial, sans-serif']
],
['.pkt-nav',
['opacity', '0'],
['-webkit-transition', 'opacity .2s ease-in-out'],
['transition', 'opacity .2s ease-in-out']
],
['.pkt-nav:hover',
['opacity', '1']
],
['figcaption',
['margin', '0 0 2em'],
['font-size', '60%']
]
]);
reader.classList.add('readability');
}
}
var readyStateCheckInterval = setInterval(function () {
"use strict";
if (document.readyState === "complete") {
init();
clearInterval(readyStateCheckInterval);
}
}, 10);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment