@@ 19,19 19,30 @@ const sanitizePre = html => sanitizer(html, {
const convert = (dom, title) => {
let output = "";
- output += "NOTICE: This page was generated from HTML. Your mileage may vary.\n\n";
-
const elements = [...dom.querySelectorAll(`
.page h1, .page h2, .page h3, .page h4, .page h5,
.page p,
.page img,
.page blockquote,
- .page pre
+ .page pre,
+ .page a,
+ .page ul, .page ol
`)];
if (elements[0].tagName.toLowerCase() !== "h1") {
output += `# ${title}\n\n`;
}
+ const emitLink = link => {
+ let desc = sanitize(link.innerHTML);
+ if (desc === "") {
+ const img = el.querySelector("img");
+ if (img) {
+ desc = `${img.alt ? " " + img.alt : ""}\n\n`;
+ }
+ }
+ output += `=> ${link.href} ${desc}\n`;
+ };
+
let visited = [];
for (let i = 0; i < elements.length; i++) {
let el = elements[i];
@@ 40,22 51,31 @@ const convert = (dom, title) => {
}
visited.push(el);
+ let links = [];
switch (el.tagName.toLowerCase()) {
case 'p':
output += sanitize(el.innerHTML) + "\n\n";
- const links = [...el.querySelectorAll("a")];
- links.map(link => {
- let desc = sanitize(link.innerHTML);
- if (desc === "") {
- const img = el.querySelector("img");
- if (img) {
- desc = `${img.alt ? " " + img.alt : ""}\n\n`;
- }
- }
- output += `=> ${link.href} ${desc}\n`;
+ links = [...el.querySelectorAll("a")];
+ links.map(emitLink);
+ if (links.length !== 0) {
+ output += "\n";
+ }
+ break;
+ case 'a':
+ emitLink(el);
+ break;
+ case 'ul':
+ case 'ol':
+ links = [...el.querySelectorAll("a")];
+ [...el.children].map(item => {
+ output += `* ${sanitize(item.innerHTML)}\n`;
});
+ output += "\n";
+
if (links.length !== 0) {
output += "\n";
+ links.map(emitLink);
+ output += "\n";
}
break;
case 'h1':