aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2021-07-30 18:17:54 +0200
committerWojtek Kosior <koszko@koszko.org>2021-07-30 18:17:54 +0200
commitb87b7351866e52f2b740162e6a3422d32e0dd380 (patch)
tree0404cc1854453ac000c56d2fe1c658ad0b4ed997
downloadhachette_fixes_tmp-b87b7351866e52f2b740162e6a3422d32e0dd380.tar.gz
hachette_fixes_tmp-b87b7351866e52f2b740162e6a3422d32e0dd380.zip
gather initial fixes
-rw-r--r--phttps____.bandcamp.com_track__.json1
-rw-r--r--phttps___acsv.centrum24.pl_ACS_servlet_ACSAuthoriz.json1
-rw-r--r--phttps___actions.sumofus.org_a__.json1
-rw-r--r--phttps___docs.google.com_spreadsheets_d___.json1
-rw-r--r--phttps___drive.google.com_file_d___.json1
-rw-r--r--phttps___opencores.org_projects.json1
-rw-r--r--phttps___stackexchange.com__.json1
-rw-r--r--phttps___stallman.org_.json1
-rw-r--r--phttps___worldcat.org_title___.json1
-rw-r--r--phttps___www.abc.net.au_.json1
-rw-r--r--phttps___www.phoronix.com____.json1
-rw-r--r--phttps___www.worldcat.org_title___.json1
12 files changed, 12 insertions, 0 deletions
diff --git a/phttps____.bandcamp.com_track__.json b/phttps____.bandcamp.com_track__.json
new file mode 100644
index 0000000..e4b76f3
--- /dev/null
+++ b/phttps____.bandcamp.com_track__.json
@@ -0,0 +1 @@
+[{"sbandcamp":{"url":"","hash":"","text":"/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nvar div, player, playerBox = document.querySelector('.inline_player');\nplayerBox.innerHTML = '';\n\nfor (var track of JSON.parse(document.querySelector('[data-tralbum]').dataset.tralbum).trackinfo) {\n\tdiv = document.createElement('div');\n\tplayer = document.createElement('audio');\n\tplayer.controls = 'controls';\n\t\n\tdiv.innerText = track.title + ': ';\n\tplayer.src = track.file['mp3-128']; // Is this always available?\n\tdiv.append(player);\n\tplayerBox.append(div);\n}"}},{"phttps://*.bandcamp.com/track/*":{"components":["s","bandcamp"]}}] \ No newline at end of file
diff --git a/phttps___acsv.centrum24.pl_ACS_servlet_ACSAuthoriz.json b/phttps___acsv.centrum24.pl_ACS_servlet_ACSAuthoriz.json
new file mode 100644
index 0000000..1695dbe
--- /dev/null
+++ b/phttps___acsv.centrum24.pl_ACS_servlet_ACSAuthoriz.json
@@ -0,0 +1 @@
+[{"scentrum24 Santander 3D-Secure":{"url":"","hash":"","text":"/**\n * Copyright 2021 Wojtek Kosior\n *\n * Available under the terms of Creative Commons Zero.\n */\n\nconst submit_button = document.getElementById(\"submit\");\nsubmit_button.classList.remove(\"disabled\");\nsubmit_button.removeAttribute(\"disabled\");\n\nconsole.log(document.querySelectorAll(\".noscript\"));\n\nfor (const noscript_element of document.querySelectorAll(\".noscript\"))\n noscript_element.remove();\n"}},{"phttps://acsv.centrum24.pl/ACS/servlet/ACSAuthoriz":{"components":["s","centrum24 Santander 3D-Secure"],"allow":false}}] \ No newline at end of file
diff --git a/phttps___actions.sumofus.org_a__.json b/phttps___actions.sumofus.org_a__.json
new file mode 100644
index 0000000..08998ad
--- /dev/null
+++ b/phttps___actions.sumofus.org_a__.json
@@ -0,0 +1 @@
+[{"ssumofus (sign petition)":{"text":"/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nfunction submitFormItem() {\n\tvar name, val, queryString = '', xhr = new content.XMLHttpRequest();\n\tfor (var formItem of this.querySelectorAll('select, input:not([type=\"radio\"]):not([type=\"checkbox\"])' +\n\t\t':not([type=\"submit\"]):not([type=\"reset\"])')) {\n\t\tqueryString += (queryString && '&') + formItem.name + '=' + encodeURIComponent(formItem.value);\n\t}\n\t\n\txhr.onreadystatechange = function () {\n\t\tif (this.readyState === 4) {\n\t\t\tif (this.status === 200) location.href = JSON.parse(this.responseText).follow_up_url;\n\t\t\telse if (this.status === 422) {\n\t\t\t\tvar failMessage = [], response = JSON.parse(this.responseText);\n\t\t\t\tfor (field in response.errors) for (error of response.errors[field]) {\n\t\t\t\t\tfailMessage.push('Field \"' + field + '\" ' + error);\n\t\t\t\t}\n\t\t\t\talert(failMessage.join('\\n'));\n\t\t\t}\n\t\t\telse alert('Submission failed: response code ' + this.status);\n\t\t}\n\t}\n\t\n\txhr.open('POST', this.action, true); // Manually add the domain, as it's not properly handled in extensions\n\txhr.setRequestHeader('X-CSRF-Token', csrf);\n\txhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\txhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\txhr.send(queryString);\n\treturn false;\n}\n\n// Apply CSS as necessary\nif (notice = document.querySelector('#petition-bar-main > span')) notice.style.display = 'none'; // Hide the totally mistaken (even without this extension) anti-anti-JS warning\ndocument.querySelector('.script-dependent').style.display = 'block';\ndocument.querySelector('.button-wrapper').style.position = 'static'; // Stop the \"submit\" button obscuring the form\n\n\n\ncsrf = document.querySelector('meta[name=\"csrf-token\"]').content\nfor (var button of document.querySelectorAll('button[type=\"submit\"].button.action-form__submit-button')) button.form.onsubmit = submitFormItem;"}},{"phttps://actions.sumofus.org/a/*":{"components":["s","sumofus (sign petition)"]}}] \ No newline at end of file
diff --git a/phttps___docs.google.com_spreadsheets_d___.json b/phttps___docs.google.com_spreadsheets_d___.json
new file mode 100644
index 0000000..ee2aad3
--- /dev/null
+++ b/phttps___docs.google.com_spreadsheets_d___.json
@@ -0,0 +1 @@
+[{"sgoogle sheets download":{"url":"","hash":"","text":"/**\n * Copyright 2021 Wojtek Kosior\n *\n * This program is free software; you can redistribute it\n * and/or modify it under the terms of either:\n * - the GNU General Public License as published by the Free\n * Software Foundation; either version 3 of the License, or (at\n * your option) any later version, or\n * - the \"A\" license: <https://koszko.org/alicense.txt>; explained\n * at: <https://koszko.org/en/articles/my-new-license.html>\n *\n * As additional permission under GNU GPL version 3 section 7, you\n * may distribute forms of that code without the copy of the GNU\n * GPL normally required by section 4, provided you include this\n * license notice and, in case of non-source distribution, a URL\n * through which recipients can access the Corresponding Source.\n * If you modify file(s) with this exception, you may extend this\n * exception to your version of the file(s), but you are not\n * obligated to do so. If you do not wish to do so, delete this\n * exception statement from your version. If you delete this\n * exception statement from all source files in the program, then\n * also delete it here.\n *\n * As a special exception to the GPL, any HTML file which merely\n * makes function calls to this code, and for that purpose\n * includes it by reference shall be deemed a separate work for\n * copyright law purposes. If you modify this code, you may extend\n * this exception to your version of the code, but you are not\n * obligated to do so. If you do not wish to do so, delete this\n * exception statement from your version.\n */\n\n\n/* Make the view scrollable. */\n\ndocument.body.setAttribute(\"style\",\n\t\t\t \"width: 100vw; height: 100vh; overflow: scroll;\" +\n\t\t\t (document.body.getAttribute(\"style\") || \"\"));\n\nlet container = document.querySelectorAll(\".waffle\")[0];\nlet main_gid = null;\n\nwhile (container) {\n container = container.parentElement;\n console.log(container);\n if (container === document.body || !container)\n\tbreak;\n\n const match = /([0-9]+)-grid-container/.exec(container.id);\n if (match)\n\tmain_gid = match[1];\n\n container.setAttribute(\"style\",\n\t\t\t \"width: fit-content; width: -moz-fit-content;\");\n}\n\n\n/* Remove editor toolbars and bottom bar - these don't work anyway. */\n\nconst docs_chrome = document.getElementById(\"docs-chrome\");\nif (docs_chrome)\n docs_chrome.remove()\nconst grid_bottom_bar = document.getElementById(\"grid-bottom-bar\");\nif (grid_bottom_bar)\n grid_bottom_bar.remove()\n\n\n/* Remove no Javascript warning. */\n\nfor (const no_js_warning of document.querySelectorAll(\"noscript\"))\n no_js_warning.remove();\n\n\n/* Get opengraph data. */\n\nconst og = {};\n\nfor (const node of document.head.childNodes) {\n if (node.tagName === \"STYLE\") {\n\tdocument.head.removeChild(node);\n\tcontinue;\n }\n\n if (node.tagName !== \"META\")\n\tcontinue;\n\n const match = /^og:(.+)/.exec(node.getAttribute(\"property\"));\n if (!match)\n\tcontinue;\n\n og[match[1]] = node.getAttribute(\"content\");\n}\n\n\n/* Construct download link. */\n\nlet download_link = null;\n\nconst match = new RegExp(\"/spreadsheets/d/([^/]+)\").exec(document.URL);\nif (match)\n download_link = `https://docs.google.com/spreadsheets/d/${match[1]}/export`;\n\n\n/* Add title bar with sheet name and download button. */\n\nconst title_bar = document.createElement(\"div\");\nconst title_heading = document.createElement(\"h1\");\nconst title_text = document.createElement(\"span\");\nconst main_download_button = document.createElement(\"a\");\n\nmain_download_button.textContent = \"download\";\nmain_download_button.setAttribute(\"style\", \"border-radius: 10px; padding: 20px; color: #333; background-color: lightgreen; text-decoration: none; box-shadow: -4px 8px 8px #888; display: inline-block;\");\n\nif (og.title) {\n title_text.textContent = og.title;\n title_heading.appendChild(title_text);\n}\n\ntitle_text.setAttribute(\"style\", \"margin-right: 10px;\");\n\nif (download_link) {\n main_download_button.setAttribute(\"href\", download_link);\n title_heading.appendChild(main_download_button);\n}\n\ntitle_bar.setAttribute(\"style\", \"padding: 0 20px; color: #555;\");\n\ntitle_bar.appendChild(title_heading);\n\ndocument.body.insertBefore(title_bar, document.body.firstElementChild);\n\n\n/* Extract sheet data from a script that sets the `bootstrapData' variable. */\n\nlet data = null;\nfor (const script of document.scripts) {\n const match = /bootstrapData = ({([^;]|[^}];)+})/.exec(script.textContent);\n if (!match)\n\tcontinue;\n data = JSON.parse(match[1]);\n}\n\n/*\n * Add download buttons for individual sheets belonging to this spreadsheet.\n * Data schema has been observed by looking at various spreadsheets.\n */\n\nfunction add_sheet_download(data)\n{\n if (!Array.isArray(data))\n\treturn;\n\n const gid = data[2];\n if (![\"string\", \"number\"].includes(typeof gid))\n\treturn;\n\n const sheet_download_link = `${download_link}?gid=${gid}`;\n const sheet_download_button = document.createElement(\"a\");\n\n sheet_download_button.setAttribute(\"style\", \"border-radius: 5px; padding: 10px; color: #333; background-color: lightgreen; text-decoration: none; box-shadow: -4px 8px 8px #888; display: inline-block; margin: 0 5px 5px 0;\");\n sheet_download_button.setAttribute(\"href\", sheet_download_link);\n\n let sheet_name = null;\n if (Array.isArray(data[3]) &&\n\tdata[3][0] && typeof data[3][0] === \"object\"\n\t&& Array.isArray(data[3][0][1]) &&\n\tArray.isArray(data[3][0][1][0]) &&\n\ttypeof data[3][0][1][0][2] === \"string\") {\n\n\tconst sheet_name = data[3][0][1][0][2];\n\tsheet_download_button.textContent = sheet_name;\n if (gid == main_gid)\n\t title_text.textContent = `${title_text.textContent} - ${sheet_name}`;\n } else {\n\tsheet_download_button.textContent = `<sheet gid=${gid}>`;\n }\n\n title_bar.appendChild(sheet_download_button);\n}\n\nif (download_link) {\n for (const entry of data.changes.topsnapshot) {\n\tif (!Array.isArray(entry) || entry[0] !== 21350203 ||\n\t typeof entry[1] !== \"string\")\n\t continue;\n\n\tlet entry_data = null;\n\n\ttry {\n\t entry_data = JSON.parse(entry[1]);\n\t} catch (e) {\n\t console.log(e);\n\t continue;\n\t}\n\n\tadd_sheet_download(entry_data);\n }\n}\n"}},{"phttps://docs.google.com/spreadsheets/d/**":{"components":["s","google sheets download"],"allow":false}}] \ No newline at end of file
diff --git a/phttps___drive.google.com_file_d___.json b/phttps___drive.google.com_file_d___.json
new file mode 100644
index 0000000..fdb9107
--- /dev/null
+++ b/phttps___drive.google.com_file_d___.json
@@ -0,0 +1 @@
+[{"sgoogle drive download file":{"url":"","hash":"","text":"/**\n * Copyright 2021 Wojtek Kosior\n *\n * This program is free software; you can redistribute it\n * and/or modify it under the terms of either:\n * - the GNU General Public License as published by the Free\n * Software Foundation; either version 3 of the License, or (at\n * your option) any later version, or\n * - the \"A\" license: <https://koszko.org/alicense.txt>; explained\n * at: <https://koszko.org/en/articles/my-new-license.html>\n *\n * As additional permission under GNU GPL version 3 section 7, you\n * may distribute forms of that code without the copy of the GNU\n * GPL normally required by section 4, provided you include this\n * license notice and, in case of non-source distribution, a URL\n * through which recipients can access the Corresponding Source.\n * If you modify file(s) with this exception, you may extend this\n * exception to your version of the file(s), but you are not\n * obligated to do so. If you do not wish to do so, delete this\n * exception statement from your version. If you delete this\n * exception statement from all source files in the program, then\n * also delete it here.\n *\n * As a special exception to the GPL, any HTML file which merely\n * makes function calls to this code, and for that purpose\n * includes it by reference shall be deemed a separate work for\n * copyright law purposes. If you modify this code, you may extend\n * this exception to your version of the code, but you are not\n * obligated to do so. If you do not wish to do so, delete this\n * exception statement from your version.\n */\n\nconst og = {};\n\nfor (const node of document.head.childNodes) {\n if (node.tagName === \"STYLE\") {\n\tdocument.head.removeChild(node);\n\tcontinue;\n }\n\n if (node.tagName !== \"META\")\n\tcontinue;\n\n const match = /^og:(.+)/.exec(node.getAttribute(\"property\"));\n if (!match)\n\tcontinue;\n\n og[match[1]] = node.getAttribute(\"content\");\n}\n\nlet download_link = null;\n\nconst match = new RegExp(\"/file/d/([^/]+)\").exec(document.URL);\nif (match)\n download_link = `https://drive.google.com/uc?export=download&id=${match[1]}`;\n\nconst body = document.createElement(\"body\");\nconst name_div = document.createElement(\"div\");\nconst download_div = document.createElement(\"div\");\nconst download_button = document.createElement(\"a\");\nconst type_div = document.createElement(\"div\");\nconst type_span = document.createElement(\"span\");\nconst show_image_div = document.createElement(\"div\");\nconst show_image_button = document.createElement(\"button\");\nconst image = document.createElement(\"img\");\n\n\nlet button_text = \"download\";\n\nif (!og.title)\n button_text += \" file\";\nelse\n name_div.textContent = og.title;\n\nname_div.setAttribute(\"style\", \"font-weight: bold; display:inline-block;\");\n\n\nif (download_link)\n download_button.setAttribute(\"href\", download_link);\nelse\n button_text += \" (unavailable)\";\n\ndownload_button.textContent = button_text;\ndownload_button.setAttribute(\"style\", \"border-radius: 5px; padding: 10px; color: black; background-color: lightgreen; text-decoration: none; box-shadow: -4px 8px 8px #888;\");\n\n\ndownload_div.appendChild(download_button);\ndownload_div.setAttribute(\"style\", \"padding: 10px; display: inline-block; margin: 0 0 10px;\");\n\n\ntype_span.textContent = \"type: \";\ntype_span.setAttribute(\"style\", \"font-weight: bold; display:inline-block; white-space: pre;\");\n\ntype_div.setAttribute(\"style\", \"margin: 0 0 10px;\");\ntype_div.appendChild(type_span);\nif (og.type)\n type_div.append(og.type);\n\n\nfunction show_image()\n{\n const image = document.createElement(\"img\");\n image.setAttribute(\"src\", og.image);\n image.setAttribute(\"width\", og[\"image:width\"]);\n image.setAttribute(\"height\", og[\"image:height\"]);\n image.setAttribute(\"style\", \"border: 1px solid #eee;\");\n\n document.body.replaceChild(image, show_image_div);\n}\n\nshow_image_button.setAttribute(\"style\", \"border-radius: 5px; padding: 10px; color: black; background-color: lightgreen; box-shadow: -4px 8px 8px #888; font-family: inherit; font-size: inherit; border: none;\");\nshow_image_button.textContent = \"show image\";\nshow_image_button.addEventListener(\"click\", show_image);\nshow_image_div.appendChild(show_image_button);\n\n\nbody.setAttribute(\"style\", \"margin: 20px;\");\nif (og.title)\n body.appendChild(name_div);\nbody.appendChild(download_div);\nif (og.type)\n body.appendChild(type_div);\nif (og.image && og[\"image:width\"] && og[\"image:height\"])\n body.appendChild(show_image_div);\n\ndocument.documentElement.replaceChild(body, document.body);\n"}},{"phttps://drive.google.com/file/d/**":{"allow":false,"components":["s","google drive download file"]}}] \ No newline at end of file
diff --git a/phttps___opencores.org_projects.json b/phttps___opencores.org_projects.json
new file mode 100644
index 0000000..3168a6d
--- /dev/null
+++ b/phttps___opencores.org_projects.json
@@ -0,0 +1 @@
+[{"sopencores":{"url":"","hash":"","text":"/**\n * Copyright 2021 Wojtek Kosior\n *\n * Available under the terms of Creative Commons Zero.\n */\n\nlet data = JSON.parse(document.getElementById(\"__NEXT_DATA__\").textContent);\nlet sections = {};\nfor (let h1 of document.getElementsByClassName(\"cMJCrc\")) {\n let ul = document.createElement(\"ul\");\n if (h1.nextElementSibling !== null)\n\th1.parentNode.insertBefore(ul, h1.nextElementSibling);\n else\n\th1.parentNode.appendChild(ul);\n\n sections[h1.children[1].firstChild.textContent] = ul;\n}\n\nfor (let prop of data.props.pageProps.list) {\n let ul = sections[prop.category];\n if (ul === undefined) {\n\tconsole.log(`unknown category \"${prop.category}\" for project \"${prop.title}\"`);\n\tcontinue;\n }\n\n let li = document.createElement(\"li\");\n let a = document.createElement(\"a\");\n a.setAttribute(\"href\", \"/projects/\" + prop.slug);\n a.textContent = prop.title;\n\n li.appendChild(a);\n ul.appendChild(li);\n}\n"}},{"phttps://opencores.org/projects":{"components":["s","opencores"]}}] \ No newline at end of file
diff --git a/phttps___stackexchange.com__.json b/phttps___stackexchange.com__.json
new file mode 100644
index 0000000..b758639
--- /dev/null
+++ b/phttps___stackexchange.com__.json
@@ -0,0 +1 @@
+[{"sstack overflow":{"url":"","hash":"","text":"/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nconst jcb = document.querySelector('.js-consent-banner');\ndocument.querySelector('.js-accept-cookies').onclick = e => jcb.parentNode.removeChild(jcb);"}},{"phttps://stackoverflow.com/***":{"components":["s","stack overflow"],"allow":false}},{"phttps://serverfault.com/***":{"components":["s","stack overflow"],"allow":false}},{"phttps://superuser.com/***":{"components":["s","stack overflow"],"allow":false}},{"phttps://askubuntu.com/***":{"components":["s","stack overflow"],"allow":false}},{"phttps://stackapps.com/***":{"components":["s","stack overflow"],"allow":false}},{"phttps://mathoverflow.net/***":{"components":["s","stack overflow"],"allow":false}},{"phttps://*.stackexchange.com/***":{"components":["s","stack overflow"],"allow":false}},{"phttps://*.stackoverflow.com/***":{"components":["s","stack overflow"],"allow":false}}]
diff --git a/phttps___stallman.org_.json b/phttps___stallman.org_.json
new file mode 100644
index 0000000..62c0026
--- /dev/null
+++ b/phttps___stallman.org_.json
@@ -0,0 +1 @@
+[{"sSParse layout generator":{"url":"","hash":"","text":"/*\n\tGenerate simple yet clean single-page site(oids)\n\t\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nfunction Sparse(navItems, opts) {\n\topts = opts || {};\n\tvar width = opts.width || 10,\n\t text = opts.text || 'black',\n\t bg = opts.bgcolor || opts.background || 'yellow',\n\t pagebg = opts.tabcolor || 'white';\n\t gap = opts.gap || '10px';\n\t\n\tvar body = document.createElement('body'),\n\t nav = document.createElement('nav'),\n\t style = document.createElement('style');\n\t\n\tvar link, activeLink, paneWidths;\n\t\n\tstyle.innerText = `\n\tbody {\n\t\tdisplay: grid;\n\t\tgrid-column-gap: ${gap};\n\t\tcolumn-gap: ${gap};\n\t\tgrid-template-columns: ${width}%;\n\t}\n\t\n\tnav {\n\t\tgrid-column: 1;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t}\n\t\n\tnav > a:not([href]) {\n\t\tcolor: ${text};\n\t\tfont-weight: bold;\n\t}\n\t\n\tbody, nav { background-color: ${bg}; }\n\tbody > * { grid-row: 1; }\n\tbody > *:not(nav) { background-color: ${pagebg} }\n\t`\n\t\n\tbody.append(style);\n\tbody.append(nav);\n\t\n\tfunction onLinkClick(e) {\n\t\tvar link;\n\t\tif (activeLink) {\n\t\t\tlink = activeLink.inactive\n\t\t\tnav.replaceChild(link, activeLink);\n\t\t\tfor (pane of link.panes) body.removeChild(pane);\n\t\t\t\n\t\t\tdelete activeLink.inactive;\n\t\t}\n\t\t\n\t\tlink = e.target;\n\t\tactiveLink = document.createElement('span');\n\t\tactiveLink.innerText = link.textContent;\n\t\tactiveLink.inactive = link;\n\t\tnav.replaceChild(activeLink, link);\n\t\t\n\t\tlink.panes.forEach((pane, i) => {\n\t\t\tpane.style.gridColumn = (i + 2).toString();\n\t\t\tbody.append(pane);\n\t\t});\n\t}\n\t\n\tfor (var item of navItems) {\n\t\tlink = document.createElement('a');\n\t\tif (typeof item === 'string') link.innerText = item;\n\t\telse {\n\t\t\tlink.innerText = item.shift();\n\t\t\tif (typeof item[0] === 'string') link.href = item[0];\n\t\t\telse {\n\t\t\t\tlink.onclick = onLinkClick;\n\t\t\t\tlink.href = '#';\n\t\t\t\tlink.panes = item;\n\t\t\t}\n\t\t\t\n\t\t\tif (link.textContent.startsWith('* ')) {\n\t\t\t\tlink.innerText = link.textContent.substr(2);\n\t\t\t\t\n\t\t\t\tvar bullet = document.createElement('a');\n\t\t\t\tbullet.innerText = '• ';\n\t\t\t\tnav.append(bullet);\n\t\t\t}\n\t\t}\n\t\t\n\t\tnav.append(link);\n\t\tnav.append(document.createElement('br'));\n\t}\n\t\n\tdocument.body.parentNode.replaceChild(body, document.body);\n\tnav.querySelector('a[href]').click();\n}"}},{"sstallman.org":{"url":"","hash":"","text":"/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nvar div1 = document.querySelector('.column1'),\n div2 = document.querySelector('.column2'),\n div3 = document.querySelector('.column3'),\n rest = document.querySelector('.rest'),\n head = document.body;\n\nhead.removeChild(div1);\nhead.removeChild(div2);\nhead.removeChild(div3);\nhead.removeChild(rest);\n\nvar wrapper, chaseHeader = div1.querySelector('#urgent');\nvar urgent = chaseHeader.parentNode.nextElementSibling;\nchaseHeader.parentNode.removeChild(chaseHeader);\nurgent.parentNode.removeChild(urgent);\n\nwrapper = document.createElement('div');\nchaseHeader = document.createElement('h3');\nchaseHeader.innerText = 'Urgent action items';\nwrapper.append(chaseHeader);\nwrapper.append(urgent);\nurgent = wrapper;\n\nvar chaseHeader = div1.querySelector('#oughttobe');\nvar oughttobe = chaseHeader.parentNode.nextElementSibling;\nvar oughttobe_more = oughttobe.nextElementSibling;\nchaseHeader.parentNode.removeChild(chaseHeader);\noughttobe.parentNode.removeChild(oughttobe)\noughttobe_more.parentNode.removeChild(oughttobe_more)\n\nwrapper = document.createElement('div');\nchaseHeader = document.createElement('h3');\noughttobe_more.innerText = 'There Ought to Be a Law';\nchaseHeader.append(oughttobe_more);\nwrapper.append(chaseHeader);\nwrapper.append(oughttobe);\noughttobe = wrapper;\n\ndiv1.style.width = '100%';\n\nvar polnotes = div2.querySelector('iframe');\npolnotes.parentNode.removeChild(polnotes);\n\nSparse([\n\t'stallman.org',\n\t['Home', urgent, polnotes],\n\t['* Urgent Action', urgent],\n\t['* Political Notes', polnotes],\n\t['Needed Laws', oughttobe],\n\t['Miscellaneous', div1],\n\t'Miscellaneous',\n\t['* Misc. 2', div2],\n\t['* Misc. 3', div3],\n\t['* Misc. 4', rest],\n\t['* Misc. 5', head]\n]);"}},{"bstallman.org":[["s","SParse layout generator"],["s","stallman.org"]]},{"phttps://stallman.org/":{"components":["b","stallman.org"],"allow":false}}] \ No newline at end of file
diff --git a/phttps___worldcat.org_title___.json b/phttps___worldcat.org_title___.json
new file mode 100644
index 0000000..98378e8
--- /dev/null
+++ b/phttps___worldcat.org_title___.json
@@ -0,0 +1 @@
+[{"sworldcat (library holdings)":{"text":"/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nvar pathParts = location.pathname.split('/'), itemRef = pathParts[pathParts.length - 1];\n\n// Generate a function which, when invoked, loads the catalog holdings starting at i (one-indexed) focused on loc\nfunction generateGoTo(i, set_loc) {\n\treturn function () {\n\t\t; // If this is a new search, \"set_loc\" won't be set; set it\n\t\tvar xhr = new content.XMLHttpRequest(), loc = set_loc || encodeURIComponent(locInput.value);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (this.readyState === 4) {\n\t\t\t\tif (this.status === 200) {\n\t\t\t\t\tretrieved.innerHTML = this.responseText;\n\t\t\t\t\t\n\t\t\t\t\tvar i, node = document.getElementById('libslocator');\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t\tfor (node of retrieved.querySelectorAll('a[href^=\"javascript:findLibs(\\'\\', \"]')) {\n\t\t\t\t\t\ti = parseInt(node.href.split(',', 2)[1]);\n\t\t\t\t\t\tnode.onclick = generateGoTo(i, loc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse alert('Search failed: response code ' + this.status);\n\t\t\t}\n\t\t}\n\t\t\n\t\txhr.open('GET', 'https://www.worldcat.org/wcpa/servlet/org.oclc.lac.ui.ajax.ServiceServlet?wcoclcnum=' + itemRef + '&start_holding='\n\t\t\t\t+ i + '&serviceCommand=holdingsdata&loc=' + loc, true);\n\t\txhr.send();\n\t\treturn false; // Make sure the browser doesn't try to submit any holding form\n\t};\n}\n\n\nvar retriever = document.querySelector('.retrieving'), retrieved = document.getElementById('donelocator');\n\nvar locForm = document.createElement('form'), locLabel = document.createElement('label'), locInput = document.createElement('input'),\n\tlocSubmit = document.createElement('input');\n\nlocForm.appendChild(locLabel);\nlocForm.appendChild(locInput);\nlocForm.appendChild(locSubmit);\n\nlocInput.name = locLabel.htmlFor = 'cat_location';\nlocInput.type = 'text';\nlocInput.required = 'yes';\nlocLabel.innerText = 'Find copies closest to: ';\nlocSubmit.value = 'Go';\nlocSubmit.type = 'submit';\nlocForm.onsubmit = generateGoTo(1);\n\nretriever.parentNode.replaceChild(locForm, retriever);"}},{"phttps://worldcat.org/title/**":{"components":["s","worldcat (library holdings)"]}}] \ No newline at end of file
diff --git a/phttps___www.abc.net.au_.json b/phttps___www.abc.net.au_.json
new file mode 100644
index 0000000..ada3bc8
--- /dev/null
+++ b/phttps___www.abc.net.au_.json
@@ -0,0 +1 @@
+[{"sSParse layout generator":{"url":"","hash":"","text":"/*\n\tGenerate simple yet clean single-page site(oids)\n\t\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nfunction Sparse(navItems, opts) {\n\topts = opts || {};\n\tvar width = opts.width || 10,\n\t text = opts.text || 'black',\n\t bg = opts.bgcolor || opts.background || 'yellow',\n\t pagebg = opts.tabcolor || 'white';\n\t gap = opts.gap || '10px';\n\t\n\tvar body = document.createElement('body'),\n\t nav = document.createElement('nav'),\n\t style = document.createElement('style');\n\t\n\tvar link, activeLink, paneWidths;\n\t\n\tstyle.innerText = `\n\tbody {\n\t\tdisplay: grid;\n\t\tgrid-column-gap: ${gap};\n\t\tcolumn-gap: ${gap};\n\t\tgrid-template-columns: ${width}%;\n\t}\n\t\n\tnav {\n\t\tgrid-column: 1;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t}\n\t\n\tnav > a:not([href]) {\n\t\tcolor: ${text};\n\t\tfont-weight: bold;\n\t}\n\t\n\tbody, nav { background-color: ${bg}; }\n\tbody > * { grid-row: 1; }\n\tbody > *:not(nav) { background-color: ${pagebg} }\n\t`\n\t\n\tbody.append(style);\n\tbody.append(nav);\n\t\n\tfunction onLinkClick(e) {\n\t\tvar link;\n\t\tif (activeLink) {\n\t\t\tlink = activeLink.inactive\n\t\t\tnav.replaceChild(link, activeLink);\n\t\t\tfor (pane of link.panes) body.removeChild(pane);\n\t\t\t\n\t\t\tdelete activeLink.inactive;\n\t\t}\n\t\t\n\t\tlink = e.target;\n\t\tactiveLink = document.createElement('span');\n\t\tactiveLink.innerText = link.textContent;\n\t\tactiveLink.inactive = link;\n\t\tnav.replaceChild(activeLink, link);\n\t\t\n\t\tlink.panes.forEach((pane, i) => {\n\t\t\tpane.style.gridColumn = (i + 2).toString();\n\t\t\tbody.append(pane);\n\t\t});\n\t}\n\t\n\tfor (var item of navItems) {\n\t\tlink = document.createElement('a');\n\t\tif (typeof item === 'string') link.innerText = item;\n\t\telse {\n\t\t\tlink.innerText = item.shift();\n\t\t\tif (typeof item[0] === 'string') link.href = item[0];\n\t\t\telse {\n\t\t\t\tlink.onclick = onLinkClick;\n\t\t\t\tlink.href = '#';\n\t\t\t\tlink.panes = item;\n\t\t\t}\n\t\t\t\n\t\t\tif (link.textContent.startsWith('* ')) {\n\t\t\t\tlink.innerText = link.textContent.substr(2);\n\t\t\t\t\n\t\t\t\tvar bullet = document.createElement('a');\n\t\t\t\tbullet.innerText = '• ';\n\t\t\t\tnav.append(bullet);\n\t\t\t}\n\t\t}\n\t\t\n\t\tnav.append(link);\n\t\tnav.append(document.createElement('br'));\n\t}\n\t\n\tdocument.body.parentNode.replaceChild(body, document.body);\n\tnav.querySelector('a[href]').click();\n}"}},{"sABC Aus":{"url":"","hash":"","text":"/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nvar pages = [], home = ['Home'], comp,\n comps = document.getElementById('content').children;\n\npages.push(home);\nfor (i = 0; i < comps.length; i++) {\n\tcomp = comps[i];\n\tif (!comp.dataset.component) continue;\n\t\n\tvar section = document.createElement('div'),\n\t wrapper = document.createElement('h3'),\n\t heading = comp.querySelector(\n\t\t'[data-component=\"Heading\"], [data-component=\"CollectionHeading\"]'\n\t );\n\t\n\theading = heading ? heading.innerText : 'Featured';\n\twrapper.innerText = heading;\n\tsection.append(wrapper);\n\t\n\tvar cards = comp.querySelectorAll('[data-component$=Card]');\n\tif (!cards.length) continue;\n\t\n\tfor (var card of cards) {\n\t\tvar text = card.innerHTML.replace(/<[^<]*>/g, '\\n').replace(/\\n\\n+/g, '\\n').replace(/^\\n/, ''),\n\t\t link = card.querySelector('a');\n\t\t\n\t\twrapper = document.createElement('a');\n\t\twrapper.href = link.href;\n\t\twrapper.style.display = 'block';\n\t\twrapper.style.fontWeight = 'bold';\n\t\tsection.append(wrapper);\n\t\t\n\t\tvar index = text.indexOf('\\n');\n\t\tif (index === -1) wrapper.innerText = text;\n\t\telse {\n\t\t\twrapper.innerText = text.substr(0, index);\n\t\t\twrapper = document.createElement('p');\n\t\t\twrapper.innerText = text.substr(index + 1);\n\t\t\tsection.append(wrapper);\n\t\t}\n\t}\n\t\n\tif (heading === 'Moments in History') heading = 'Historical';\n\telse if (heading === 'Top Stories from ABC News') heading = 'Top';\n\t\n\tpages.push(['* ' + heading, section])\n\tif (i < 3) home.push(section);\n}\n\npages.push(['Just in', '/news/justin']);\npages.push(['Ed. Standards', 'https://about.abc.net.au/how-the-abc-is-run/what-guides-us/abc-editorial-standards/'])\npages.push(['Footer', document.querySelector('[data-component=\"Footer\"]')]);\nSparse(pages, {bgcolor: 'pink'});"}},{"bABC Aus":[["s","SParse layout generator"],["s","ABC Aus"]]},{"phttps://abc.net.au/":{"components":["b","ABC Aus"],"allow":false}},{"phttps://www.abc.net.au/":{"components":["b","ABC Aus"],"allow":false}}]
diff --git a/phttps___www.phoronix.com____.json b/phttps___www.phoronix.com____.json
new file mode 100644
index 0000000..453b501
--- /dev/null
+++ b/phttps___www.phoronix.com____.json
@@ -0,0 +1 @@
+[{"sphoronix benchmarks":{"url":"","hash":"","text":"/**\n * Copyright 2021 Wojtek Kosior\n *\n * Available under the terms of Creative Commons Zero.\n */\n\n/* Use with https://www.phoronix.com/*** */\n\n/*\n * Phoronix normally includes scripts that call document.write() to inject\n * <img> tags. The most obvious way o code a fix would then be do download and\n * parse the contents of those scripts. CORS, however, doesn't allow this.\n * Instead, we notice that the openbenchmarking embed script url is related to\n * the actual image url we need, so we can create <img>'s from it straight away.\n */\nfor (const script of document.scripts) {\n const match = /openbenchmarking.org\\/+(embed.php\\?.*)p=0$/.exec(script.src);\n if (!match) continue;\n\n const img = document.createElement(\"img\");\n img.src = `https://openbenchmarking.org/${match[1]}p=2`;\n img.setAttribute(\"type\", \"image/svg+xml\");\n img.setAttribute(\"width\", \"100%\");\n img.setAttribute(\"height\", \"auto\");\n\n script.parentElement.insertBefore(img, script);\n}\n"}},{"phttps://www.phoronix.com/***":{"components":["s","phoronix benchmarks"],"allow":false}}] \ No newline at end of file
diff --git a/phttps___www.worldcat.org_title___.json b/phttps___www.worldcat.org_title___.json
new file mode 100644
index 0000000..ad6df3c
--- /dev/null
+++ b/phttps___www.worldcat.org_title___.json
@@ -0,0 +1 @@
+[{"sworldcat (library holdings)":{"text":"/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nvar pathParts = location.pathname.split('/'), itemRef = pathParts[pathParts.length - 1];\n\n// Generate a function which, when invoked, loads the catalog holdings starting at i (one-indexed) focused on loc\nfunction generateGoTo(i, set_loc) {\n\treturn function () {\n\t\t; // If this is a new search, \"set_loc\" won't be set; set it\n\t\tvar xhr = new content.XMLHttpRequest(), loc = set_loc || encodeURIComponent(locInput.value);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (this.readyState === 4) {\n\t\t\t\tif (this.status === 200) {\n\t\t\t\t\tretrieved.innerHTML = this.responseText;\n\t\t\t\t\t\n\t\t\t\t\tvar i, node = document.getElementById('libslocator');\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t\tfor (node of retrieved.querySelectorAll('a[href^=\"javascript:findLibs(\\'\\', \"]')) {\n\t\t\t\t\t\ti = parseInt(node.href.split(',', 2)[1]);\n\t\t\t\t\t\tnode.onclick = generateGoTo(i, loc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse alert('Search failed: response code ' + this.status);\n\t\t\t}\n\t\t}\n\t\t\n\t\txhr.open('GET', 'https://www.worldcat.org/wcpa/servlet/org.oclc.lac.ui.ajax.ServiceServlet?wcoclcnum=' + itemRef + '&start_holding='\n\t\t\t\t+ i + '&serviceCommand=holdingsdata&loc=' + loc, true);\n\t\txhr.send();\n\t\treturn false; // Make sure the browser doesn't try to submit any holding form\n\t};\n}\n\n\nvar retriever = document.querySelector('.retrieving'), retrieved = document.getElementById('donelocator');\n\nvar locForm = document.createElement('form'), locLabel = document.createElement('label'), locInput = document.createElement('input'),\n\tlocSubmit = document.createElement('input');\n\nlocForm.appendChild(locLabel);\nlocForm.appendChild(locInput);\nlocForm.appendChild(locSubmit);\n\nlocInput.name = locLabel.htmlFor = 'cat_location';\nlocInput.type = 'text';\nlocInput.required = 'yes';\nlocLabel.innerText = 'Find copies closest to: ';\nlocSubmit.value = 'Go';\nlocSubmit.type = 'submit';\nlocForm.onsubmit = generateGoTo(1);\n\nretriever.parentNode.replaceChild(locForm, retriever);"}},{"phttps://www.worldcat.org/title/**":{"components":["s","worldcat (library holdings)"]}}] \ No newline at end of file