Skip to content

Instantly share code, notes, and snippets.

@erikvold
Last active December 30, 2015 12:29
Show Gist options
  • Save erikvold/7828919 to your computer and use it in GitHub Desktop.
Save erikvold/7828919 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @id sdk-doc-extractor@erikvold.com
// @name SDK Docs Extractor
// @version 1.0.7
// @namespace erikvold
// @author Erik Vold
// @description
// @include file:///*/addon-sdk/doc/*
// @grant GM_registerMenuCommand
// @grant GM_safeHTMLParser
// @grant GM_xpath
// @grant GM_setClipboard
// @run-at document-end
// ==/UserScript==
GM_registerMenuCommand(
"Grab SDK Documentation HTML",
function() {
// remove table of contents
let toc = document.getElementById('toc');
toc && toc.parentNode.removeChild(toc);
let searchResults = document.getElementById('search-results');
searchResults && searchResults.parentNode.removeChild(searchResults);
let contentDiv = document.getElementById('main-content-column');
let HTML = contentDiv.innerHTML;
let parsed = GM_safeHTMLParser(HTML, document.location);
let classes = GM_xpath({
paths: ["//*[@class]", "//*[@id]", "//*[@style]"],
node: parsed.documentElement,
all: true
});
classes.forEach(function(ele) {
ele.removeAttribute('class');
ele.removeAttribute('id');
ele.removeAttribute('style');
});
let divs = parsed.documentElement.firstChild.getElementsByTagName('div');
for (let ii = divs.length, i = 0; i < ii ; i++) {
let div = divs[i];
if (!div || !div.children.length)
continue;
let p = div.parentNode;
if (!p)
continue;
for (let len = div.children.length, c = 0; c < len; c++) {
p.insertBefore(div.children[0], div);
}
p.removeChild(div);
}
let pres = parsed.documentElement.firstChild.getElementsByTagName('pre');
for (let ii = pres.length, i = 0; i < ii ; i++) {
let pre = pres[i];
if (!pre) continue;
if (pre.children.length == 1 && pre.children[0].tagName == 'CODE') {
let code = pre.children[0];
pre.insertBefore(document.createTextNode(code.innerHTML), code);
pre.removeChild(code);
pre.setAttribute("class", "brush: js"); // HACK: assume js
}
}
HTML = parsed.documentElement.firstChild.innerHTML.trim();
alert(HTML);
GM_setClipboard(HTML);
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment