From d0606452ccbcae4868cab9f9320106eadc86d444 Mon Sep 17 00:00:00 2001 From: DJohnny Date: Sat, 27 Sep 2014 19:34:49 +0200 Subject: [PATCH 1/5] Added widget for downloading releases. --- demo/release.html | 14 ++++ jquery.githubRepoWidgetRelease.js | 107 ++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 demo/release.html create mode 100644 jquery.githubRepoWidgetRelease.js diff --git a/demo/release.html b/demo/release.html new file mode 100644 index 0000000..ce7f1f0 --- /dev/null +++ b/demo/release.html @@ -0,0 +1,14 @@ + + + + Github widget + + + + +
+ + + + + diff --git a/jquery.githubRepoWidgetRelease.js b/jquery.githubRepoWidgetRelease.js new file mode 100644 index 0000000..02173a2 --- /dev/null +++ b/jquery.githubRepoWidgetRelease.js @@ -0,0 +1,107 @@ +;jQuery(document).ready(function($){ + + var i = 0; + var box_title_png = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAXCAMAAAAx3e/WAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQjIyNkJERkM0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQjIyNkJFMEM0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRCMjI2QkREQzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRCMjI2QkRFQzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+dka2KgAAAEVQTFRFxMTEyMjI0tLSvb29vr6+zc3Ny8vLxcXFz8/P6enp3t7ex8fH0dHR1NTUw8PDwMDAzs7OvLy8wcHBu7u7v7+/zMzM////budQFwAAABd0Uk5T/////////////////////////////wDmQOZeAAAAcklEQVR42tSQSQ7DMAwD6chOukWs5eX/Ty2coo0T9wOdEzEgdRBuzNmnDofgja52JDyz5TCqUp0O6kfrb4bzSXkRiTviEZZ6JKLMJ5VQ2v8iGbtbfEwXmjFMG0VwdQo10hQNxYqtLMv9O6xvpZ/QeAkwAKjwHiJLaJc3AAAAAElFTkSuQmCC'; + var stats_png = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAqCAMAAACEJ4viAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQjIyNkJEQkM0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQjIyNkJEQ0M0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRCMjI2QkQ5QzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRCMjI2QkRBQzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+h1kA9gAAAK5QTFRF+fn5sbGx8fHx09PTmpqa2dnZ/f3919fX9PT00NDQ1dXVpKSk+vr6+/v7vb298vLyycnJ8/PztLS0zc3N6enp/v7+q6ur2NjY9/f3srKy/Pz8p6en7u7uoaGhnJyc4eHhtbW1pqam6Ojo9fX17e3toqKirKys1NTUzs7Ox8fHwcHBwMDA5eXlnZ2dpaWl0dHR9vb25ubm4uLi3d3dqqqqwsLCv7+/oKCgmZmZ////8yEsbwAAAMBJREFUeNrE0tcOgjAUBuDSliUoMhTEvfdef9//xUQjgaLX0Ium/ZLT/+SkRPxZpGykvuf5VMJogy5jY9yjDHcWFhqlcRuHc4o6B1QK0BDg+hcZgNDh3NWTwzItH/bRrhvT+g3zSxZkNGCZpoWGIbU0a3Y6zV5VA6keyeDxiw62P0gUqEW0FbDim4nVikFJbU2zZXybUEaxhCqOQqyh5/G0wpWICUwthyqwD4InOMuXJ7/gs7WkoPdVg1vykF8CDACEFanKO3aSYwAAAABJRU5ErkJggg=='; + + + $('.github-widget').each(function(){ + + if(i == 0) $('head').append( + '' + ); + i++; + + var $container = $(this), $widget, + repo = $container.data('repo'), + vendorName = repo.split('/')[0], + repoName = repo.split('/')[1], + vendorUrl = "http://github.com/" + vendorName, + repoUrl = "http://github.com/" + vendorName + '/' + repoName; + + $widget = $( + '
' + +'
' + +'

' + +'' + vendorName + '' + +'/' + +'' + repoName + '' + +'

' + +'
' + +'?' + +'?' + +'
' + +'
' + +'
' + +'

Read More

' + +'' + +'
' + +'
' + +'
' + //+'Download as zip' + +'Download' + +'
' + +'
' + ); + + $widget.appendTo($container); + + $.ajax({ + url: 'https://api.github.com/repos/' + repo, + dataType: 'jsonp', + success: function(results) { + var repo = results.data, date, pushed_at = 'unknown'; + + if (repo.pushed_at) { + date = new Date(repo.pushed_at); + pushed_at = date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear(); + } + + $widget.find('.watchers').text(repo.watchers_count); + $widget.find('.forks').text(repo.forks_count); + $widget.find('.description span').text(repo.description); + $widget.find('.updated').html('Latest commit to the ' + repo.default_branch + ' branch on ' + pushed_at); + + // Don't show "null" if the repo has no homepage URL. + if(repo.homepage != null) $widget.find('.link').append($('').attr('href', repo.homepage).text(repo.homepage)); + } + }); + $.ajax({ + url: 'https://api.github.com/repos/' + repo+'/releases', + dataType: 'jsonp', + success: function(results) { + var data = results.data; + + $widget.find('.download').attr("href",data[0].assets[0].browser_download_url); + } + }); + + }); + +}); From eec8a19379e1914ec0effce0d33614d1db3614a2 Mon Sep 17 00:00:00 2001 From: DJohnny Date: Sat, 6 Feb 2016 21:10:02 +0100 Subject: [PATCH 2/5] Fixed rendering of date. --- jquery.githubRepoWidgetRelease.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jquery.githubRepoWidgetRelease.js b/jquery.githubRepoWidgetRelease.js index 02173a2..f45b097 100644 --- a/jquery.githubRepoWidgetRelease.js +++ b/jquery.githubRepoWidgetRelease.js @@ -80,7 +80,7 @@ if (repo.pushed_at) { date = new Date(repo.pushed_at); - pushed_at = date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear(); + pushed_at = date.getDate() + '.' + (date.getMonth() + 1) + '.' + date.getFullYear(); } $widget.find('.watchers').text(repo.watchers_count); From ec24ad01b2e1411f693f5bc4d435117029d318a7 Mon Sep 17 00:00:00 2001 From: DJohnny Date: Sat, 6 Feb 2016 23:49:09 +0100 Subject: [PATCH 3/5] Updated release button. --- jquery.githubRepoWidgetRelease.js | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/jquery.githubRepoWidgetRelease.js b/jquery.githubRepoWidgetRelease.js index f45b097..d72ae9e 100644 --- a/jquery.githubRepoWidgetRelease.js +++ b/jquery.githubRepoWidgetRelease.js @@ -42,8 +42,8 @@ repo = $container.data('repo'), vendorName = repo.split('/')[0], repoName = repo.split('/')[1], - vendorUrl = "http://github.com/" + vendorName, - repoUrl = "http://github.com/" + vendorName + '/' + repoName; + vendorUrl = "https://github.com/" + vendorName, + repoUrl = "https://github.com/" + vendorName + '/' + repoName; $widget = $( '
' @@ -65,7 +65,7 @@ +'' +'
' ); @@ -93,12 +93,28 @@ } }); $.ajax({ - url: 'https://api.github.com/repos/' + repo+'/releases', + url: 'https://api.github.com/repos/' + repo + '/releases/latest', dataType: 'jsonp', success: function(results) { - var data = results.data; - - $widget.find('.download').attr("href",data[0].assets[0].browser_download_url); + if(results.data.message!=="Not Found") { + $widget.find('.download').attr("href", results.data.assets[0].browser_download_url); + $widget.find('.download').text("Download " + results.data.tag_name + " release"); + $widget.find('.download').css({ + "color": "#FFF", "text-shadow": "0 -1px 0 rgba(0, 0, 0, 0.25)", + "background-color": "#60B044", "background-image": "linear-gradient(#8ADD6D, #60B044)" + }); + } + else { + function getZipArchive() { + $widget.find('.download').attr("href", repoUrl + "/zipball/master"); + $widget.find('.download').attr("title", "Get an archive of this repository"); + $widget.find('.download').text("Download as zip"); + } + getZipArchive(); + } + }, + error: function(results) { + getZipArchive(); } }); From 1d3ee92c5a3f1f034ac02ac48834e14e7cea690b Mon Sep 17 00:00:00 2001 From: DJohnny Date: Sun, 7 Feb 2016 00:21:28 +0100 Subject: [PATCH 4/5] Added support for authentication. --- apikey.js | 1 + demo/release.html | 6 ++++-- jquery.githubRepoWidgetRelease.js | 24 +++++++++++------------- 3 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 apikey.js diff --git a/apikey.js b/apikey.js new file mode 100644 index 0000000..b8dc455 --- /dev/null +++ b/apikey.js @@ -0,0 +1 @@ +var apikey = "?client_id=xxxx&client_secret=yyyy"; diff --git a/demo/release.html b/demo/release.html index ce7f1f0..c3af4d0 100644 --- a/demo/release.html +++ b/demo/release.html @@ -6,9 +6,11 @@ -
+
+
- + + diff --git a/jquery.githubRepoWidgetRelease.js b/jquery.githubRepoWidgetRelease.js index d72ae9e..9400274 100644 --- a/jquery.githubRepoWidgetRelease.js +++ b/jquery.githubRepoWidgetRelease.js @@ -72,8 +72,12 @@ $widget.appendTo($container); + if(typeof apikey === "undefined") { + apikey = ""; + } + $.ajax({ - url: 'https://api.github.com/repos/' + repo, + url: 'https://api.github.com/repos/' + repo + apikey, dataType: 'jsonp', success: function(results) { var repo = results.data, date, pushed_at = 'unknown'; @@ -86,17 +90,17 @@ $widget.find('.watchers').text(repo.watchers_count); $widget.find('.forks').text(repo.forks_count); $widget.find('.description span').text(repo.description); - $widget.find('.updated').html('Latest commit to the ' + repo.default_branch + ' branch on ' + pushed_at); + $widget.find('.updated').html('Latest commit to the ' + repo.default_branch + ' branch on ' + pushed_at + '.'); // Don't show "null" if the repo has no homepage URL. if(repo.homepage != null) $widget.find('.link').append($('').attr('href', repo.homepage).text(repo.homepage)); } }); $.ajax({ - url: 'https://api.github.com/repos/' + repo + '/releases/latest', + url: 'https://api.github.com/repos/' + repo + '/releases/latest' + apikey, dataType: 'jsonp', success: function(results) { - if(results.data.message!=="Not Found") { + if(results.data.message !== "Not Found") { $widget.find('.download').attr("href", results.data.assets[0].browser_download_url); $widget.find('.download').text("Download " + results.data.tag_name + " release"); $widget.find('.download').css({ @@ -105,16 +109,10 @@ }); } else { - function getZipArchive() { - $widget.find('.download').attr("href", repoUrl + "/zipball/master"); - $widget.find('.download').attr("title", "Get an archive of this repository"); - $widget.find('.download').text("Download as zip"); - } - getZipArchive(); + $widget.find('.download').attr("href", repoUrl + "/zipball/master"); + $widget.find('.download').attr("title", "Get an archive of this repository"); + $widget.find('.download').text("Download as zip"); } - }, - error: function(results) { - getZipArchive(); } }); From da05afbd62fac829d6cfda32639e3e8c5d94c456 Mon Sep 17 00:00:00 2001 From: DJohnny Date: Sun, 7 Feb 2016 01:11:45 +0100 Subject: [PATCH 5/5] Added screenshot of forked version. --- README.markdown | 19 ------------------- demo/screenshotRelease.png | Bin 0 -> 21677 bytes jquery.githubRepoWidgetRelease.min.js | 5 +++++ readme.md | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 19 deletions(-) delete mode 100644 README.markdown create mode 100644 demo/screenshotRelease.png create mode 100644 jquery.githubRepoWidgetRelease.min.js create mode 100644 readme.md diff --git a/README.markdown b/README.markdown deleted file mode 100644 index 01764f0..0000000 --- a/README.markdown +++ /dev/null @@ -1,19 +0,0 @@ -# GitHub jQuery Repo Widget - -Drop this script on your page and it will build you a beautiful widget that displays the status of your GitHub repo. - -## What does it look like? - -![Widget Image](/demo/screenshot.png?raw=true "jQuery Repo Widget Screenshot") - -## How do I use it? - -Everwhere you want a widget to be placed, add the following markup: - -
- -Then include the javascript file somewhere after you've include jQuery: - - - -That's it! All of the styling is included and image assets are pulled from GitHub. diff --git a/demo/screenshotRelease.png b/demo/screenshotRelease.png new file mode 100644 index 0000000000000000000000000000000000000000..edf76e85cf32bc0653b93b603790474147f90d62 GIT binary patch literal 21677 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 n*#j$U!P8&sA.github-box *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}.github-box{font-family:helvetica,arial,sans-serif;font-size:13px;line-height:18px;background:#fafafa;border:1px solid #ddd;color:#666;border-radius:3px}.github-box a{color:#4183c4;border:0;text-decoration:none}.github-box .github-box-title{position:relative;border-bottom:1px solid #ddd;border-radius:3px 3px 0 0;background:#fcfcfc;background:-moz-linear-gradient(#fcfcfc,#ebebeb);background:-webkit-linear-gradient(#fcfcfc,#ebebeb);}.github-box .github-box-title h3{word-wrap:break-word;font-family:helvetica,arial,sans-serif;font-weight:normal;font-size:16px;color:gray;margin:0;padding:10px 10px 10px 30px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAXCAMAAAAx3e/WAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQjIyNkJERkM0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQjIyNkJFMEM0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRCMjI2QkREQzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRCMjI2QkRFQzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+dka2KgAAAEVQTFRFxMTEyMjI0tLSvb29vr6+zc3Ny8vLxcXFz8/P6enp3t7ex8fH0dHR1NTUw8PDwMDAzs7OvLy8wcHBu7u7v7+/zMzM////budQFwAAABd0Uk5T/////////////////////////////wDmQOZeAAAAcklEQVR42tSQSQ7DMAwD6chOukWs5eX/Ty2coo0T9wOdEzEgdRBuzNmnDofgja52JDyz5TCqUp0O6kfrb4bzSXkRiTviEZZ6JKLMJ5VQ2v8iGbtbfEwXmjFMG0VwdQo10hQNxYqtLMv9O6xvpZ/QeAkwAKjwHiJLaJc3AAAAAElFTkSuQmCC) 7px center no-repeat; width: auto;}.github-box .github-box-title h3 .repo{font-weight:bold}.github-box .github-box-title .github-stats{float:right;position:absolute;top:8px;right:10px;font-size:11px;font-weight:bold;line-height:21px;height:auto;min-height:21px}.github-box .github-box-title .github-stats a{display:inline-block;height:21px;color:#666;border:1px solid #ddd;border-radius:3px;padding:0 5px 0 18px;background: white url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAqCAMAAACEJ4viAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQjIyNkJEQkM0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQjIyNkJEQ0M0NjYxMUUxOEFDQzk3ODcxRDkzRjhCRSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkRCMjI2QkQ5QzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRCMjI2QkRBQzQ2NjExRTE4QUNDOTc4NzFEOTNGOEJFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+h1kA9gAAAK5QTFRF+fn5sbGx8fHx09PTmpqa2dnZ/f3919fX9PT00NDQ1dXVpKSk+vr6+/v7vb298vLyycnJ8/PztLS0zc3N6enp/v7+q6ur2NjY9/f3srKy/Pz8p6en7u7uoaGhnJyc4eHhtbW1pqam6Ojo9fX17e3toqKirKys1NTUzs7Ox8fHwcHBwMDA5eXlnZ2dpaWl0dHR9vb25ubm4uLi3d3dqqqqwsLCv7+/oKCgmZmZ////8yEsbwAAAMBJREFUeNrE0tcOgjAUBuDSliUoMhTEvfdef9//xUQjgaLX0Ium/ZLT/+SkRPxZpGykvuf5VMJogy5jY9yjDHcWFhqlcRuHc4o6B1QK0BDg+hcZgNDh3NWTwzItH/bRrhvT+g3zSxZkNGCZpoWGIbU0a3Y6zV5VA6keyeDxiw62P0gUqEW0FbDim4nVikFJbU2zZXybUEaxhCqOQqyh5/G0wpWICUwthyqwD4InOMuXJ7/gs7WkoPdVg1vykF8CDACEFanKO3aSYwAAAABJRU5ErkJggg==) no-repeat}.github-box .github-box-title .github-stats .watchers{border-right:1px solid #ddd}.github-box .github-box-title .github-stats .forks{background-position:-4px -21px;padding-left:15px}.github-box .github-box-content{padding:10px;font-weight:300}.github-box .github-box-content p{margin:0}.github-box .github-box-content .link{font-weight:bold}.github-box .github-box-download{position:relative;border-top:1px solid #ddd;background:white;border-radius:0 0 3px 3px;padding:10px;height:auto;min-height:24px;}.github-box .github-box-download .updated{word-wrap:break-word;margin:0;font-size:11px;color:#666;line-height:24px;font-weight:300;width:auto}.github-box .github-box-download .updated strong{font-weight:bold;color:#000}.github-box .github-box-download .download{float:right;position:absolute;top:10px;right:10px;height:24px;line-height:24px;font-size:12px;color:#666;font-weight:bold;text-shadow:0 1px 0 rgba(255,255,255,0.9);padding:0 10px;border:1px solid #ddd;border-bottom-color:#bbb;border-radius:3px;background:#f5f5f5;background:-moz-linear-gradient(#f5f5f5,#e5e5e5);background:-webkit-linear-gradient(#f5f5f5,#e5e5e5);}.github-box .github-box-download .download:hover{color:#527894;border-color:#cfe3ed;border-bottom-color:#9fc7db;background:#f1f7fa;background:-moz-linear-gradient(#f1f7fa,#dbeaf1);background:-webkit-linear-gradient(#f1f7fa,#dbeaf1);}@media (max-width: 767px) {.github-box .github-box-title{height:auto;min-height:60px}.github-box .github-box-title h3 .repo{display:block}.github-box .github-box-title .github-stats a{display:block;clear:right;float:right;}.github-box .github-box-download{height:auto;min-height:46px;}.github-box .github-box-download .download{top:32px;}}'); +g++;var h=d(this),c,e=h.data("repo"),f=e.split("/")[0],k=e.split("/")[1],l="https://github.com/"+f,a="https://github.com/"+f+"/"+k;c=d('');c.appendTo(h);"undefined"===typeof apikey&&(apikey="");d.ajax({url:"https://api.github.com/repos/"+e+apikey,dataType:"jsonp",success:function(b){b=b.data;var a;a="unknown";b.pushed_at&&(a=new Date(b.pushed_at),a=a.getDate()+"."+(a.getMonth()+1)+"."+a.getFullYear()); +c.find(".watchers").text(b.watchers_count);c.find(".forks").text(b.forks_count);c.find(".description span").text(b.description);c.find(".updated").html("Latest commit to the "+b.default_branch+" branch on "+a+".");null!=b.homepage&&c.find(".link").append(d("").attr("href",b.homepage).text(b.homepage))}});d.ajax({url:"https://api.github.com/repos/"+e+"/releases/latest"+apikey,dataType:"jsonp",success:function(b){"Not Found"!==b.data.message?(c.find(".download").attr("href",b.data.assets[0].browser_download_url), +c.find(".download").text("Download "+b.data.tag_name+" release"),c.find(".download").css({color:"#FFF","text-shadow":"0 -1px 0 rgba(0, 0, 0, 0.25)","background-color":"#60B044","background-image":"linear-gradient(#8ADD6D, #60B044)"})):(c.find(".download").attr("href",a+"/zipball/master"),c.find(".download").attr("title","Get an archive of this repository"),c.find(".download").text("Download as zip"))}})})}); \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..7269337 --- /dev/null +++ b/readme.md @@ -0,0 +1,19 @@ +# GitHub jQuery Repo Widget +Drop this script on your page and it will build you a beautiful widget that displays the status of your GitHub repo. + +## What does it look like? +![Widget Image](/demo/screenshotRelease.png?raw=true "jQuery Repo Widget Screenshot") + +## How do I use it? +Everywhere you want a widget to be placed, add the following markup: + +```
``` + +Then include the javascript file somewhere after you've include jQuery: + +`````` + +That's it! All of the styling is included and image assets are pulled from GitHub. + +### Credits +Thanks to @JoelSutherland for making [original](https://github.com/JoelSutherland/GitHub-jQuery-Repo-Widget) [version](http://www.newmediacampaigns.com/blog/a-beautiful-jquery-github-widget) of this fork.