aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Häggqvist <[email protected]>2014-06-30 17:17:39 +0200
committerVictor Häggqvist <[email protected]>2014-06-30 17:17:39 +0200
commit2d9af9e620e73726d839bb9dde41e0281a3ceed4 (patch)
treeb0df5b62df5bff3b713f86348f35dd032bc419cc
parentef1a2cf063d886084b122b110411d5a71cda1bec (diff)
rewrite
-rw-r--r--index.html12
-rw-r--r--lastcommit.js110
2 files changed, 114 insertions, 8 deletions
diff --git a/index.html b/index.html
index 51c973f..076d216 100644
--- a/index.html
+++ b/index.html
@@ -3,16 +3,14 @@
<head>
<title>You are only as good as your last commit</title>
<link rel="stylesheet" href="app.css">
- <link rel="stylesheet" href="widget.css">
+ <!-- <link rel="stylesheet" href="widget.css"> -->
</head>
<body>
<h1>You are only as good as your last commit</h1>
<p>An old <a href="http://twitter.com/sauy7">friend</a> once told me this, so here's mine.</p>
- <span class="lastcommit-widget"
- data-user="johannilsson">
- </span>
+ <span class="lastcommit-widget" data-user="victorhaggqvist"></span>
<p>And now you!</p>
@@ -27,9 +25,7 @@
<p>Fork it on GitHub.</p>
<p>Thank you</p>
<p><a href="http://twitter.com/johanni">Johan</a></p>
- <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
- <script src="http://code.jquery.com/jquery-1.7.min.js"></script>
- <script src="widget.js"></script>
+ <script src="lastcommit.js"></script>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/lastcommit.js b/lastcommit.js
new file mode 100644
index 0000000..ddb1b81
--- /dev/null
+++ b/lastcommit.js
@@ -0,0 +1,110 @@
+/**
+ * Widget that shows the last commit made in a users github repositories.
+ *
+ * Rewritten from https://github.com/johannilsson/lastcommit without jQuery
+ *
+ * By Victor Häggqvist (http://victorhaggqvist.com/)
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2014 Victor Häggqvist
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+(function(){
+
+ var element = document.getElementsByClassName('lastcommit-widget')[0];
+ user = element.getAttribute('data-user');
+
+ getLastCommit(user, function (repo, commit) {
+ renderWidget(element, {
+ user: user,
+ repo: repo,
+ commit: commit
+ });
+ });
+
+ /**
+ * Wrapper function for widget, gets latest commit for user
+ *
+ * @param string user The user
+ * @param function callback Callback to be pased on to getCommitFromRepo
+ */
+ function getLastCommit(user, callback) {
+
+ if (!user) { console.error('Did not find username on lastcommit widget'); return;};
+
+ var r = new XMLHttpRequest();
+ r.open('GET', 'https://api.github.com/users/' + user + '/repos', true);
+
+ r.onreadystatechange = function () {
+ if (r.readyState !== 4 || r.status !== 200) return;
+
+ var respData = JSON.parse(r.responseText);
+ respData.sort(function(a, b) { // sort latest first
+ return Date.parse(b.pushed_at) - Date.parse(a.pushed_at);
+ });
+
+ // console.log("Success: " + respData[0].pushed_at);
+ getCommitFromRepo(user, respData[0], callback);
+ };
+ r.send();
+ }
+
+ /**
+ * Gets the last commit by user in specityed repo
+ *
+ * @param string user The user
+ * @param object repo Repository object as found in https://developer.github.com/v3/repos/#list-your-repositories
+ * @param function callback Function to called on successfull retrival of commit
+ */
+ function getCommitFromRepo(user, repo, callback) {
+ // console.log(repo);
+ var r = new XMLHttpRequest();
+ r.open('GET', 'https://api.github.com/repos/' + user + '/' + repo.name + '/commits', true);
+
+ r.onreadystatechange = function () {
+ if (r.readyState !== 4 || r.status !== 200) return;
+
+ var respData = JSON.parse(r.responseText);
+
+ // filter only user commits
+ var userCommits = respData.filter(function(a){
+ if (a.committer.login === user) return true;
+ });
+
+ // console.log("Success: " + userCommits[0].commit.message);
+ callback(repo, userCommits[0].commit);
+ };
+ r.send();
+ }
+
+ /**
+ * Render widget.
+ *
+ * @param element The element to render the widget to.
+ * @param data Data to populate the widget with.
+ */
+ function renderWidget(element, data) {
+ url = 'https://github.com/' + data.user + '/' + data.repo.name +'/commit/' + data.commit.sha
+ var html = '<a href="' + url +'"> ' + data.commit.message + '</a>';
+ element.innerHTML = html;
+ }
+
+})();