Skip to content
This repository has been archived by the owner on Nov 27, 2018. It is now read-only.

a very simple change to make the toolbar button toggle the readability mode #18

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion manifest.json
@@ -1,6 +1,6 @@
{
"name": "Readability Redux",
"version": "1.3",
"version": "1.3.2",
"description": "Readability for Chrome. Now fully customizable!",
"background_page": "redux/background.html",
"browser_action": { "default_icon": "icon.png" },
Expand Down
8 changes: 8 additions & 0 deletions readability/readability.css
Expand Up @@ -85,3 +85,11 @@ a.rdbTK-powered span{display:inline-block;height:22px;margin-left:2px;background
#kindle-container,#email-container{position:fixed;top:60px;left:50%;width:500px;height:490px;border:solid 3px #666;background-color:#fff;z-index:100!important;overflow:hidden;margin:0 0 0 -240px;padding:0;}
/* Override html styling attributes */
table,tr,td{background-color:transparent!important;}

/* We know we installed readability; hide it from the article */
#readability-logo, #arc90-logo, #readability-url,
#rdb-footer-right a.footer-twitterLink {
display: none;
}


221 changes: 90 additions & 131 deletions redux/background.js
@@ -1,161 +1,120 @@
/* vim:noet:ts=4:sw=4
*/

var default_settings = {
style: 'style-newspaper',
size: 'size-large',
margin: 'margin-wide',
enable_footnotes: false,
enable_keys: false,
enable_experimental: false,
remote: true,
keys: []
};


function createJavascript(settings)
{
if(settings['remote'])
{
console.log('Using remote Readability.');

js_url = "http://lab.arc90.com/experiments/readability/js/readability.js?x="+(Math.random());
css_url = "http://lab.arc90.com/experiments/readability/css/readability.css";
print_url = "http://lab.arc90.com/experiments/readability/css/readability-print.css";
} else
{
if(settings.enable_experimental)
{
console.log('Using local, experimental Readability.');
var js_url = chrome.extension.getURL('readability/readability-x.js');
} else
{
console.log('Using local Readability.');
var js_url = chrome.extension.getURL('readability/readability.js');
}

var css_url = chrome.extension.getURL('readability/readability.css');
var print_url = chrome.extension.getURL('readability/readability-print.css');
}

var code = "(function(){readConvertLinksToFootnotes=" + settings['enable_links'] + ";readStyle='" + settings['style'] + "';readSize='" + settings['size'] + "';readMargin='" + settings['margin'] + "';_readability_script=document.createElement('SCRIPT');_readability_script.type='text/javascript';_readability_script.src='" + js_url + "';document.getElementsByTagName('head')[0].appendChild(_readability_script);_readability_css=document.createElement('LINK');_readability_css.rel='stylesheet';_readability_css.href='" + css_url + "';_readability_css.type='text/css';_readability_css.media='screen';document.getElementsByTagName('head')[0].appendChild(_readability_css);_readability_print_css=document.createElement('LINK');_readability_print_css.rel='stylesheet';_readability_print_css.href='" + print_url + "';_readability_print_css.media='print';_readability_print_css.type='text/css';document.getElementsByTagName('head')[0].appendChild(_readability_print_css);})();";

return code;
var js_url, css_url, print_url;

if (settings.remote && !settings.enable_experimental) {
var arc90 = "http://lab.arc90.com/experiments/readability/";
js_url = arc90 + "js/readability.js?x="+(Math.random());
css_url = arc90 + "/css/readability.css";
print_url = arc90 + "/css/readability-print.css";
} else {
if (settings.enable_experimental)
{
js_url = chrome.extension.getURL('readability/readability-x.js');
} else {
js_url = chrome.extension.getURL('readability/readability.js');
}

css_url = chrome.extension.getURL('readability/readability.css');
print_url = chrome.extension.getURL('readability/readability-print.css');
}

var code = "(function(){readConvertLinksToFootnotes=" + settings['enable_footnotes'] + ";readStyle='" + settings['style'] + "';readSize='" + settings['size'] + "';readMargin='" + settings['margin'] + "';_readability_script=document.createElement('SCRIPT');_readability_script.type='text/javascript';_readability_script.src='" + js_url + "';document.getElementsByTagName('head')[0].appendChild(_readability_script);_readability_css=document.createElement('LINK');_readability_css.rel='stylesheet';_readability_css.href='" + css_url + "';_readability_css.type='text/css';_readability_css.media='screen';document.getElementsByTagName('head')[0].appendChild(_readability_css);_readability_print_css=document.createElement('LINK');_readability_print_css.rel='stylesheet';_readability_print_css.href='" + print_url + "';_readability_print_css.media='print';_readability_print_css.type='text/css';document.getElementsByTagName('head')[0].appendChild(_readability_print_css);})();";

return code;
}

function render(tab_id)
{
var settings = getSettings();
console.log(settings);

chrome.tabs.sendRequest(tab_id, {'type': 'render'});
chrome.tabs.sendRequest(tab_id, {'type': 'render'});
}

function getSettings()
{
function parse(x)
{
try
{
return JSON.parse(x);
} catch(e)
{
return undefined;
}
}

var settings = {
style: localStorage['style'],
size: localStorage['size'],
margin: localStorage['margin'],
enable_links: !!parse(localStorage['enable_links']),
enable_experimental: !!parse(localStorage['enable_experimental']),
enable_keys: !!parse(localStorage['enable_keys']),
keys: parse(localStorage['keys'])
};

if(!_.isArray(settings['keys']))
settings['keys'] = [];

var defaults = {
style: 'style-newspaper',
size: 'size-large',
margin: 'margin-wide',
enable_links: false,
enable_keys: false,
enable_experimental: false,
keys: []
};

return _.extend(defaults, settings);
var settings = {};
for (var opt in default_settings) {
settings[opt] = default_settings[opt];
if (!_.isUndefined(localStorage[opt])) {
settings[opt] = JSON.parse(localStorage[opt]);
}
}

return settings;
}

function setSettings(settings)
{
var keys = _.keys(settings);

if(_.include(keys, 'style'))
settings['style'] = settings['style']

if(_.include(keys, 'size'))
settings['size'] = settings['size']

if(_.include(keys, 'margin'))
settings['margin'] = settings['margin']

if(_.include(_.keys(settings), 'enable_links'))
settings['enable_links'] = JSON.stringify(!!settings['enable_links']);

if(_.include(_.keys(settings), 'enable_experimental'))
settings['enable_experimental'] = JSON.stringify(!!settings['enable_experimental']);
// console.log('setSettings called with ' + JSON.stringify(settings));
for (var opt in default_settings) {
if (_.isUndefined(settings[opt]) || settings[opt] === '') {
continue;
}
if (typeof(default_settings[opt]) == 'boolean' &&
typeof(settings[opt]) != 'boolean') {
settings[opt] = settings[opt] == 'true';
}
localStorage[opt] = JSON.stringify(settings[opt]);
}
// console.log('Settings now: ' + JSON.stringify(localStorage));

chrome.windows.getAll({'populate': true}, function(windows)
{
_.each(windows, function(window)
{
_.each(window.tabs, function(tab)
{
chrome.tabs.sendRequest(tab.id, {'type': 'newSettings', 'settings': getSettings()});
});
});
});
}

if(_.include(_.keys(settings), 'enable_keys'))
settings['enable_keys'] = JSON.stringify(!!settings['enable_keys']);
function requestHandler(data, sender, callback)
{
var result = undefined;

if(_.include(_.keys(settings), 'keys'))
settings['keys'] = JSON.stringify(settings['keys']);
if (data['type'] == 'javascript') {
if (_.include(_.keys(data), 'settings'))
result = createJavascript(data['settings']);
else
result = createJavascript(getSettings());
}

console.log('setSettings', settings);
if (data['type'] == 'setSettings') {
setSettings(data['settings']);
}

_.extend(localStorage, settings);
if (data['type'] == 'getSettings') {
result = getSettings();
}

chrome.windows.getAll({'populate': true}, function(windows)
{
_.each(windows, function(window)
{
_.each(window.tabs, function(tab)
{
chrome.tabs.sendRequest(tab.id, {'type': 'newSettings', 'settings': getSettings()});
});
});
});
}
if (data['type'] == 'render') {
render(data['tab_id']);
}

function requestHandler(data, sender, callback)
{
if(data['type'] == 'javascript')
{
if(_.include(_.keys(data), 'settings'))
callback(createJavascript(data['settings']));
else
callback(createJavascript(getSettings()));
}
if(data['type'] == 'setSettings')
{
setSettings(data['settings']);
callback();
}
if(data['type'] == 'getSettings')
{
callback(getSettings());
}
if(data['type'] == 'render')
{
render(data['tab_id']);
callback();
}
callback(result);
}

chrome.extension.onRequest.addListener(requestHandler);
chrome.extension.onRequestExternal.addListener(requestHandler);

chrome.browserAction.onClicked.addListener(function(tab)
{
render(tab.id);
render(tab.id);
});

/*chrome.contextMenus.create({
'title': 'Readability',
'contexts': ['page', 'selection'],
'onclick': function(selection, tab)
{
render(tab.id);
}
});*/

22 changes: 14 additions & 8 deletions redux/contentscript.js
Expand Up @@ -85,20 +85,26 @@ var listener = {
this.enabled = settings["enable_keys"];
this.goal = settings["keys"];
this.current_state = [];
console.log(settings);
//console.log(settings);
}

};

function render()
{
chrome.extension.sendRequest({'type': 'javascript'}, function(response)
{
var script = document.createElement('script');
script.appendChild(document.createTextNode(response));
console.log(document.getElementsByTagName('head'));
document.getElementsByTagName('head')[0].appendChild(script);
});
var head = document.getElementsByTagName('head')[0];
if (head.readability_redux) {
window.location.reload();
} else {
chrome.extension.sendRequest({'type': 'javascript'},
function(response) {
var script = document.createElement('script');
script.appendChild(document.createTextNode(response));
head.readability_redux = true;
head.appendChild(script);
}
);
}
}

chrome.extension.onRequest.addListener(function(data, sender, callback)
Expand Down
2 changes: 1 addition & 1 deletion redux/example.html
Expand Up @@ -170,7 +170,7 @@ <H5 lang="en" xml:lang="en">Print/export</H5>
<script type="text/javascript">
function inject(js)
{
document.location = 'javascript:' + js;
eval(js);
}

parent.settings.hello_from_child(window);
Expand Down
12 changes: 9 additions & 3 deletions redux/options.html
Expand Up @@ -45,8 +45,8 @@
</p>

<p>
<input type="checkbox" id="enable_links" />
<label for="enable_links">Convert links to footnotes(<a href="http://blog.arc90.com/2010/06/03/readability-updated-an-end-to-the-yank-of-the-hyperlink/">more</a>).</label>
<input type="checkbox" id="enable_footnotes" />
<label for="enable_footnotes">Convert links to footnotes (<a target="_new" href="http://blog.arc90.com/2010/06/03/readability-updated-an-end-to-the-yank-of-the-hyperlink/">more</a>).</label>
</p>

<p>
Expand All @@ -57,9 +57,15 @@

<p>
<input type="checkbox" id="enable_experimental" name="enable_experimental" />
<label for="enable_experimental">Apply Readability only to selected fragment (experimental).</label>
<label for="enable_experimental">Apply Readability only to selected fragment (experimental; forces use of bundled Readability).</label>
</p>

<p>
<input type="checkbox" id="remote" name="remote" />
<label for="remote">Use remote Readability hosted by arc90 (requires additional network traffic; otherwise, use bundled version 1.7.1)</label>
</p>


<p>
<button id="save">Save</button>
<button id="cancel"> Cancel</button>
Expand Down