readability-js
#721
- Author
- winny
- Created
- April 3, 2023, 6:48 p.m.
- Expires
- Never
- Size
- 2.2 KB
- Hits
- 164
- Syntax
- JavaScript
- Private
- ✗ No
#!/usr/bin/env node
//
// # Description
//
// Summarize the current page in a new tab, by processing it with the standalone readability
// library used for Firefox Reader View.
//
// # Prerequisites
//
// - NODE_PATH might be required to point to your global node libraries:
// export NODE_PATH=$NODE_PATH:$(npm root -g)
// - Mozilla's readability library (npm install -g https://github.com/mozilla/readability.git)
// NOTE: You might have to *login* as root for a system-wide installation to work (e.g. sudo -s)
// - jsdom (npm install -g jsdom)
// - qutejs (npm install -g qutejs)
//
// # Usage
//
// :spawn --userscript readability-js
//
// One may wish to define an easy to type command alias in Qutebrowser's configuration file:
// c.aliases = {"readability" : "spawn --userscript readability-js", ...}
const Readability = require('readability');
const qute = require('qutejs');
const JSDOM = require('jsdom').JSDOM;
const fs = require('fs');
const path = require('path');
const util = require('util');
const HEADER = `
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, text/html, charset=UTF-8" http-equiv="Content-Type">
</meta>
<title>%s</title>
<style type="text/css">
body {
margin: 30px auto;
max-width: 650px;
line-height: 1.4;
padding: 0 10px;
}
h1, h2, h3 {
line-height: 1.2;
}
</style>
</head>`;
const scriptsDir = path.join(process.env.QUTE_DATA_DIR, 'userscripts');
const tmpFile = path.join(scriptsDir, '/readability.html');
const domOpts = {url: process.env.QUTE_URL, contentType: "text/html; charset=utf-8"}
if (!fs.existsSync(scriptsDir)){
fs.mkdirSync(scriptsDir);
}
JSDOM.fromFile(process.env.QUTE_HTML, domOpts).then(dom => {
let reader = new Readability(dom.window.document);
let article = reader.parse();
let content = util.format(HEADER, article.title) + article.content;
fs.writeFile(tmpFile, content, (err) => {
if (err) {
qute.messageError([`"${err}"`])
return 1;
}
// Success
qute.open(['-t', tmpFile]);
})
});