Skip to content

Instantly share code, notes, and snippets.

@xbalaji
Last active October 21, 2023 17:17
Show Gist options
  • Save xbalaji/28c2e8963c72070ce431306e0616fdb2 to your computer and use it in GitHub Desktop.
Save xbalaji/28c2e8963c72070ce431306e0616fdb2 to your computer and use it in GitHub Desktop.
gist-access-download-bookmark
#! /usr/bin/env bash
function get_public_gists()
{
for uid in ${@}
do
curl -sk -o - "https://api.github.com/users/${uid}/gists?per_page=200" | jq -r --arg dx $uid '.[].files[]| "-sk --create-dirs -o \($dx)/\(.filename) \(.raw_url)"' | xargs -t -L 1 curl
done
}
get_public_gists xbalaji xbalajipge
export gist_rawurl="https://gist.githubusercontent.com/xbalaji/28c2e8963c72070ce431306e0616fdb2/raw/gist-make-bookmark.sh"
curl -sk "${gist_rawurl}" | sed -e "s,.*<script>,,g;s,</script>$,,g" | js-beautify -s2 | sed -e "1i\<script>" -e "\$a</script>" > in.html
# edit in.html, validate your changes
tr -s " " <in.html | tr -d "\n" | sed -e 's#^#data:text/html,#g;$a\' | tee out.js
# save out.js to "gist-make-bookmark.sh"
data:text/html,<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"><script>document.addEventListener("DOMContentLoaded", function() { /* comments has to be single line only */ const mkText = t => document.createTextNode(t); const mkLink = (t, href) => { let anc = document.createElement("a"); anc.setAttribute("href", href); anc.setAttribute("target", "_blank"); anc.textContent = t; return anc; }; function addRow(tr, idata, itransform = mkText, ...transformArgs) { let td = document.createElement("td"); td.appendChild(itransform(idata, ...transformArgs)); tr.appendChild(td); }; function addRowHeader(idata, itransform = mkText, ...transformArgs) { let tr = document.createElement("tr"); for (let cell of idata) { let th = document.createElement("th"); th.appendChild(itransform(cell, ...transformArgs)); th.classList.add("position-sticky"); th.style.top = "0"; tr.appendChild(th); } return tr; }; /* create a table element */ let container = document.createElement("div"); let tbl = document.createElement("table"); let tb = document.createElement("tbody"); let th = document.createElement("thead"); container.classList.add("container", "mt-5"); tbl.classList.add("table", "table-hover", "table-sm", "table-condensed"); th.appendChild(addRowHeader(["S.No", "Raw", "Edit", "URL"])); th.classList.add("thead-dark"); tbl.appendChild(th); tbl.appendChild(tb); container.appendChild(tbl); let sno = 0; fetch("https://api.github.com/users/xbalaji/gists?per_page=150").then(resp => resp.json()).then(gists => { document.body.appendChild(container); let files = gists.flatMap(gist => Object.values(gist.files).map(file => Object.assign(file, { owner: gist.owner.login, id: gist.id, gist_url: gist.html_url, }))); console.log(files); files.sort((file1, file2) => { return file1.filename.localeCompare(file2.filename); }); for (let file of files) { sno += 1; let tr = document.createElement("tr"); addRow(tr, sno.toString().padStart(2, '0')); addRow(tr, "raw", mkLink, file.raw_url); addRow(tr, "edit", mkLink, "https://gist.github.com/" + file.owner + "/" + file.id + "/edit"); addRow(tr, file.filename, mkLink, file.gist_url); tb.appendChild(tr); }; });})</script>
data:text/html,<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"><script>document.addEventListener("DOMContentLoaded", function() { let gitUserId = prompt("Enter github id", "xbalaji"); /* comments has to be single line only */ const mkText = t => document.createTextNode(t); const mkLink = (t, href) => { let anc = document.createElement("a"); anc.setAttribute("href", href); anc.setAttribute("target", "_blank"); anc.textContent = t; return anc; }; function addRow(tr, idata, itransform = mkText, ...transformArgs) { let td = document.createElement("td"); td.appendChild(itransform(idata, ...transformArgs)); tr.appendChild(td); }; function addRowHeader(idata, itransform = mkText, ...transformArgs) { let tr = document.createElement("tr"); for (let cell of idata) { let th = document.createElement("th"); th.appendChild(itransform(cell, ...transformArgs)); th.classList.add("position-sticky"); th.style.top = "0"; tr.appendChild(th); } return tr; }; /* create a table element */ let container = document.createElement("div"); let tbl = document.createElement("table"); let tb = document.createElement("tbody"); let th = document.createElement("thead"); container.classList.add("container", "mt-5"); tbl.classList.add("table", "table-hover", "table-sm", "table-condensed"); th.appendChild(addRowHeader(["S.No", "Raw", "Edit", "URL"])); th.classList.add("thead-dark"); tbl.appendChild(th); tbl.appendChild(tb); container.appendChild(tbl); let sno = 0; fetch(`https://api.github.com/users/${gitUserId}/gists?per_page=150`).then(resp => resp.json()).then(gists => { document.body.appendChild(container); let files = gists.flatMap(gist => Object.values(gist.files).map(file => Object.assign(file, { owner: gist.owner.login, id: gist.id, gist_url: gist.html_url, }))); console.log(files); files.sort((file1, file2) => { return file1.filename.localeCompare(file2.filename); }); for (let file of files) { sno += 1; let tr = document.createElement("tr"); addRow(tr, sno.toString().padStart(2, "0")); addRow(tr, "raw", mkLink, file.raw_url); addRow(tr, "edit", mkLink, "https://gist.github.com/" + file.owner + "/" + file.id + "/edit"); addRow(tr, file.filename, mkLink, file.gist_url); tb.appendChild(tr); }; });})</script>
curl -sk "https://api.github.com/users/xbalaji/gists?per_page=100" | jq -r '.[].files[] | [.filename, .raw_url] | @tsv' | sort | column -t --table-columns "FileName,RawUrl"
curl -sk "https://api.github.com/users/xbalaji/gists?per_page=100" | jq -r '.[] | {html_url:.html_url, files:.files[]} | [.files.filename, .html_url] | @tsv' | sort | column -t --table-columns "FileName,HtmlUrl"| nl
curl -sk "https://api.github.com/users/xbalaji/gists?per_page=200" | jq -r '.[].files[].filename' | sort
curl -sk "https://api.github.com/users/xbalaji/gists?per_page=200" | jq -r '.[].files| to_entries[] | .key' | sort
wget -qL -O - "https://api.github.com/users/xbalaji/gists?per_page=100" | jq -r '.[].files[].filename'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment