<html> <head> <style>
.code { font-family: Monaco, monospace; white-space: pre-wrap;}
</style> <script>
var owner = "";var repo = "";
function clear(elem) { var child = elem.lastElementChild; while (child) { elem.removeChild(child); child = elem.lastElementChild; }}
function appendMessage(msg, className) { var p = document.createElement("p"); p.innerHTML = msg; if (className) p.className = className; document.getElementById("contents").appendChild(p);}
// "Inspired" (stolen) from this StackOverflow answer: https://stackoverflow.com/a/4033310function httpGetAsync(url, callback, data) { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) callback(request.responseText, data); } request.open("GET", url, true); // true for asynchronous request.send(null);}
function printFile(response, name) { try { var obj = JSON.parse(response); appendMessage(name); appendMessage(atob(obj.content), "code"); } catch(err) { appendMessage(err); }}
function recvTree(response) { try { var obj = JSON.parse(response); var i; for (i = 0; i < obj.tree.length; i++) { if (obj.tree[i].type === "tree") { httpGetAsync("https://api.github.com/repos/" + owner + "/" + repo + "/git/trees/" + obj.tree[i].sha, recvTree); } else if (obj.tree[i].type === "blob") { httpGetAsync(obj.tree[i].url, printFile, obj.tree[i].path); } } } catch(err) { appendMessage(err); }}
function recvUrl(response) { try { var obj = JSON.parse(response); httpGetAsync(obj[0].commit.tree.url, recvTree); } catch(err) { appendMessage(err); }}
function get_all() { owner = document.getElementById("owner").value; repo = document.getElementById("repo").value;
var div = document.getElementById("contents"); clear(div);
httpGetAsync("https://api.github.com/repos/" + owner + "/" + repo + "/commits", recvUrl);}
</script> </head> <body> <h1>GitHub Repository - Git All Da Files</h1> <input id="owner" type="text" size="100" placeholder="Owner" /> <br /> <input id="repo" type="text" size="100" placeholder="Repository" /> <br /> <button onclick="get_all()">Git it</button> <br /> <div id="contents"></div> </body></html>