Last active
November 30, 2021 10:36
-
-
Save wenerme/21c3a8b366ac2e2fed25388a2ba1ead1 to your computer and use it in GitHub Desktop.
Show stars and push time in github repo links.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var AccessToken='YOUR-ACCESS-TOKEN-HERE' // <= Notice | |
var replaceText = (a) => { | |
let v = a.repoData; | |
let tpl = `[ | |
<span style="color:red;opacity:${Math.max(v.stargazers_count / 500, 0.1)}"> | |
★${v.stargazers_count} | |
</span> | |
🕐${new Date(v.updated_at) | |
.toISOString() | |
.replace(/\..*/, "") | |
.replace("T", " ")} | |
]`; | |
a.innerHTML = a.innerHTML.replace(/(\[(.|\s)*?\])?$/, tpl); | |
}; | |
Array.from(document.querySelectorAll("a")) | |
.map((a) => { | |
a.repo = a.href.match(/(https?:\/\/)?github.com\/([^/#?]+\/[^/#?]+)\/?$/); | |
a.repo = a.repo && a.repo[2]; | |
if (!a.repo) { | |
a.repo = a.href.match(/(https?:\/\/)?([^.]+)\.github.io(\/[^/#?]+)\/?/); | |
a.repo = a.repo && a.repo[2] + a.repo[3]; | |
} | |
if (a.repo) { | |
console.log("Found repo ", a.repo, a); | |
} | |
return a; | |
}) | |
.filter((a) => a.repo) | |
.filter((a) => !/^articles|site|settings|organizations|new/.test(a.repo)) | |
.filter((a) => a.text.length > 0) | |
.map((a) => { | |
if (!a.repoData) { | |
a.repoData = JSON.parse(localStorage.getItem(`repos/${a.repo}`)); | |
if (a.repoData && a.repoData.message) { | |
a.repoData = null; | |
} | |
} | |
if (!a.repoData) { | |
fetch( | |
`https://api.github.com/repos/${a.repo}`, | |
{ | |
headers:{ | |
Authorization: `Bearer ${AccessToken}` | |
} | |
} | |
) | |
.then((v) => v.json()) | |
.then((v) => { | |
if (v.message) { | |
console.error("Request failed:" + a.repo, v); | |
return; | |
} | |
// Full field check here https://api.github.com/repos/wenerme/wener | |
// localStorage only support 10mb | |
var stripped = { | |
stargazers_count: v.stargazers_count, | |
updated_at: v.updated_at, | |
}; | |
localStorage.setItem(`repos/${a.repo}`, JSON.stringify(stripped)); | |
a.repoData = stripped; | |
replaceText(a); | |
}); | |
} else { | |
replaceText(a); | |
} | |
return a; | |
}); | |
// TODO Use indexedDB instead localStorage | |
// TODO Slow down the huge request at same time, the browser may stuck | |
// TODO Lazy load | |
// TODO Support gist |
HN discuss
Very interesting. Is there any way to automatically set up this sort of thing to work inside of a Markdown file being rendered on Github?
@markerikson No, Markdown can not contain any script tag.But if you can control the render you can add the script to it.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just open devtool, paste script into console and execute.
sketchplugins
awesome page