From f95591934822064aad21dfa868ccffce34387bf1 Mon Sep 17 00:00:00 2001 From: Philip Hofstetter Date: Thu, 4 Aug 2011 20:59:29 +0200 Subject: add github repositories sidebar plugin if you specify github_user: in you _config.yml and once you add asides/github.html to your sidebar items, this plugin will fetch the specified users github repositories and order them so the last pushed ones are shown first. Then it'll list them in the side-bar, including a link and the repository description The plugin will only list your own repositories, not forks, though this might need to be configurable later --- .../classic/source/_includes/asides/github.html | 21 ++++++++++++ .themes/classic/source/javascripts/github.js | 38 ++++++++++++++++++++++ _config.yml | 3 ++ 3 files changed, 62 insertions(+) create mode 100644 .themes/classic/source/_includes/asides/github.html create mode 100644 .themes/classic/source/javascripts/github.js diff --git a/.themes/classic/source/_includes/asides/github.html b/.themes/classic/source/_includes/asides/github.html new file mode 100644 index 00000000..07b37aa4 --- /dev/null +++ b/.themes/classic/source/_includes/asides/github.html @@ -0,0 +1,21 @@ +{% if site.github_user %} +
+

Github Repos

+ + + +
+{% endif %} diff --git a/.themes/classic/source/javascripts/github.js b/.themes/classic/source/javascripts/github.js new file mode 100644 index 00000000..56ebe969 --- /dev/null +++ b/.themes/classic/source/javascripts/github.js @@ -0,0 +1,38 @@ +github = (function(){ + function render(target, repos){ + var i = 0, fragment = '', t = $(target)[0]; + + for(i = 0; i < repos.length; i++) + fragment += '
  • '+repos[i].name+'

    '+repos[i].description+'

  • '; + + t.innerHTML = fragment; + } + return { + showRepos: function(user, target){ + var feed = new jXHR(); + feed.onerror = function (msg,url) { + $(target + ' li.loading').addClass('error').text("Error loading feed"); + } + feed.onreadystatechange = function(data){ + if (feed.readyState === 4) { + var repos = []; + var i; + for (i = 0; i < data.repositories.length; i++){ + if (!data.repositories[i].fork) + repos.push(data.repositories[i]); + } + repos.sort(function(a, b){ + var a = new Date(a.pushed_at), + b = new Date(b.pushed_at); + + if (a.valueOf() == b.valueOf()) return 0; + return a.valueOf() > b.valueOf() ? -1 : 1; + }) + render(target, repos) + } + }; + feed.open("GET","http://github.com/api/v2/json/repos/show/"+user+"?callback=?"); + feed.send(); + } + }; +})(); \ No newline at end of file diff --git a/_config.yml b/_config.yml index 9a48c018..30adf81e 100644 --- a/_config.yml +++ b/_config.yml @@ -55,6 +55,9 @@ twitter_follow_button: true twitter_show_follower_count: false twitter_tweet_button: true +# github repositories +github_user: + # Google Plus google_plus_one: true google_plus_one_size: medium -- cgit v1.2.1 From 08af7b4e383976858ca5b7dd3246525c17bcb941 Mon Sep 17 00:00:00 2001 From: Philip Hofstetter Date: Thu, 4 Aug 2011 21:15:50 +0200 Subject: allow limiting the amount of repos to display by setting github_repo_count to someething that's not 0, you can limit the amount of repositories to render --- .themes/classic/source/_includes/asides/github.html | 7 ++++++- .themes/classic/source/javascripts/github.js | 14 +++++++++----- _config.yml | 1 + 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.themes/classic/source/_includes/asides/github.html b/.themes/classic/source/_includes/asides/github.html index 07b37aa4..5e0b0ed2 100644 --- a/.themes/classic/source/_includes/asides/github.html +++ b/.themes/classic/source/_includes/asides/github.html @@ -13,7 +13,12 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(jxhr, s); } - github.showRepos('{{site.github_user}}', '#gh_repos'); + + github.showRepos({ + user: '{{site.github_user}}', + count: {{site.github_repo_count}}, + target: '#gh_repos' + }); }); diff --git a/.themes/classic/source/javascripts/github.js b/.themes/classic/source/javascripts/github.js index 56ebe969..8af51486 100644 --- a/.themes/classic/source/javascripts/github.js +++ b/.themes/classic/source/javascripts/github.js @@ -8,10 +8,10 @@ github = (function(){ t.innerHTML = fragment; } return { - showRepos: function(user, target){ + showRepos: function(options){ var feed = new jXHR(); feed.onerror = function (msg,url) { - $(target + ' li.loading').addClass('error').text("Error loading feed"); + $(options.target + ' li.loading').addClass('error').text("Error loading feed"); } feed.onreadystatechange = function(data){ if (feed.readyState === 4) { @@ -27,11 +27,15 @@ github = (function(){ if (a.valueOf() == b.valueOf()) return 0; return a.valueOf() > b.valueOf() ? -1 : 1; - }) - render(target, repos) + }); + + if (options.count) + repos.splice(options.count); + + render(options.target, repos) } }; - feed.open("GET","http://github.com/api/v2/json/repos/show/"+user+"?callback=?"); + feed.open("GET","http://github.com/api/v2/json/repos/show/"+options.user+"?callback=?"); feed.send(); } }; diff --git a/_config.yml b/_config.yml index 30adf81e..a50abb3f 100644 --- a/_config.yml +++ b/_config.yml @@ -57,6 +57,7 @@ twitter_tweet_button: true # github repositories github_user: +github_repo_count: 0 # Google Plus google_plus_one: true -- cgit v1.2.1 From 2e1f0c0bfc8d6f7cbc70a753e5424dbfb30b4d44 Mon Sep 17 00:00:00 2001 From: Philip Hofstetter Date: Thu, 4 Aug 2011 21:21:25 +0200 Subject: provide an option to show or not show github profile link --- .themes/classic/source/_includes/asides/github.html | 3 +++ _config.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/.themes/classic/source/_includes/asides/github.html b/.themes/classic/source/_includes/asides/github.html index 5e0b0ed2..74f8ea95 100644 --- a/.themes/classic/source/_includes/asides/github.html +++ b/.themes/classic/source/_includes/asides/github.html @@ -4,6 +4,9 @@
    • Status updating...
    + {% if site.github_show_profile_link %} + @{{site.github_user}} on Github + {% endif %}