UNPKG

githubjs

Version:
5 lines 11.7 kB
/*! * githubjs - v0.1.3 * Copyright (c) 2015-2015 Akshay Sharma <sharmakumar3092@gmail.com> */ !function(a,b){"function"==typeof define&&define.amd?define(["underscore"],b):"object"==typeof exports?module.exports=b(require("underscore")):a.Github=b(a._)}(this,function(a){var b={};b.version="0.1.3";var c="https://api.github.com/";b.userProfile=function(a){if(a=e.initialize(a,["username","selector"],0)){var b=c+"users/"+a.username;e.getData(b,a,e.getUserProfileHTML)}else console.error("Parameters not passed correctly")},b.repoProfile=function(a){if(a=e.initialize(a,["username","selector","reponame"],0)){var b=c+"repos/"+a.username+"/"+a.reponame;e.getData(b,a,e.getRepoProfileHTML)}else console.error("Parameters not passed correctly")},b.orgProfile=function(a){if(a=e.initialize(a,["orgname","selector"],0)){var b=c+"orgs/"+a.orgname;e.getData(b,a,e.getOrgProfileHTML)}else console.error("Parameters not passed correctly")},b.userActivity=function(a){if(a=e.initialize(a,["username","selector"],1)){var b=c+"users/"+a.username,d=b+"/events";e.getData(b,a,e.getUserProfileHTML),e.getData(d,a,e.getPublicActivityHTML)}else console.error("Parameters not passed correctly")},b.repoActivity=function(a){if(a=e.initialize(a,["username","selector","reponame"],1)){var b=c+"repos/"+a.username+"/"+a.reponame,d=b+"/events";e.getData(b,a,e.getRepoProfileHTML),e.getData(d,a,e.getPublicActivityHTML)}else console.error("Parameters not passed correctly")},b.orgActivity=function(a){if(a=e.initialize(a,["orgname","selector"],1)){var b=c+"orgs/"+a.orgname,d=b+"/events";e.getData(b,a,e.getOrgProfileHTML),e.getData(d,a,e.getPublicActivityHTML)}else console.error("Parameters not passed correctly")};var d={parentTpl:'<div class="gt-container"><div class="gt-header gt-shadow"><div class="gt-loading-txt">Loading..</div></div><%if(type){%><div class="gt-activity-cnt gt-scrollbar"><div class="gt-loading-txt">Loading..</div></div><%}%></div>',userProfileTpl:'<div class="gt-usr-avatar"><a target="_blank" href="<%= html_url%>"><div class="gt-usr-img" style="background-image: url(<%= avatar_url%>)"> </div></a></div><div class="gt-usr-name"><span class="user-name"><%= name%></span><a target="_blank" href="<%= html_url%>"><span class="user-login"><%= login%></span></a></div><div class="gt-usr-details"><div class="gt-usr-repo"><a target="_blank" href="<%= html_url%>"><span class="gt-usr-txt"><%= public_repos%></span><span class="gt-usr-dt">Repositories</span></a></div><div class="gt-usr-folwr"><a target="_blank" href="<%= html_url + "/followers"%>"><span class="gt-usr-txt"><%= followers%></span><span class="gt-usr-dt">Followers</span></a></div><div class="gt-usr-folng"><a target="_blank" href="<%= html_url + "/following"%>"><span class="gt-usr-txt"><%= following%></span><span class="gt-usr-dt">Following</span></a></div></div>',repoProfileTpl:'<div class="gt-usr-name"><span class="user-name"><%= name%></span><a target="_blank" href="<%= owner.html_url%>"><span class="user-login"><%= owner.login%></span></a><p><%= description%></p></div><div class="gt-repo-details"><div class="gt-usr-repo"><a target="_blank" href="<%= html_url%>"><span class="gt-usr-txt"><%= stargazers_count%></span><span class="gt-usr-dt">Stars</span></a></div><div class="gt-usr-folwr"><a target="_blank" href="<%= html_url %>"><span class="gt-usr-txt"><%= subscribers_count%></span><span class="gt-usr-dt">Watchers</span></a></div><div class="gt-usr-folng"><a target="_blank" href="<%= html_url %>"><span class="gt-usr-txt"><%= forks_count%></span><span class="gt-usr-dt">Forks</span></a></div><div class="gt-repo-lg-stat"></div></div>',orgProfileTpl:'<div class="gt-org-avatar"><a target="_blank" href="<%= html_url%>"><div class="gt-org-img" style="background-image: url(<%= avatar_url%>)"> </div></a></div><div class="gt-org-name"><span class="user-name"><%= name%></span><%if(blog){%><a target="_blank" href="<%= blog%>" class="gt-org-link"><span class="user-login">Website</span></a><%}%><%if(email){%><a target="_blank" href="mailto:<%= email%>" class="gt-org-link"><span class="user-login">Email</span></a><%}%><br><span class="gt-org-repos"><%= public_repos%></span><span class="gt-org-repos"> Public Repositories</span></div>',gitActivityTpl:'<div class="gt-activity <%=type%>"><div class="gt-avatar-cnt"><a target="_blank" href="https://github.com/<%= actor.login%>"><img src="<%=actor.avatar_url%>" class="gt-usr-avatar"></a></div><div class="gt-act-cnt"><div title="<%= created_at%>" class="gt-time-cnt"><div class="gt-time-str"><%= timeString%></div></div><%= userLink%><%= message%></div><div class="gt-clearfix"></div></div>',CommitCommentEvent:"<span> commented on commit <%= commentLink%> </span><p><%= payload.comment.body%></p>",CreateEvent:"<span> created <%= payload.ref_type%> <%= branchLink%> at <%= repoLink%> </span>",DeleteEvent:"<span> deleted <%= payload.ref%> <%= payload.ref_type%> at <%= repoLink%> </span>",ForkEvent:"<span> forked <%= repoLink%> to <%= forkLink%> </span>",GollumEvent:"<span> <%= actionType%> the <%= repoLink%> wiki</span><p><%= wikiMessage%></p>",IssueCommentEvent:"<span> commented on issue <%= commentLink%> </span><p><%= payload.comment.body%></p>",IssuesEvent:"<span> <%= payload.action%> issue <%= issueUrl%> </span>",MemberEvent:"<span> added <%= memberLink%> to <%= repoLink%> </span>",PublicEvent:"<span> open sourced <%= repoLink%> </span>",PullRequestEvent:'<span> <%= payload.action%> pull request <%= mergeRequestUrl%> </span><p><%= payload.pull_request.title%></p><p class="pull-req-info"><%= payload.pull_request.commits%><%if(payload.pull_request.commits > 1){%> commits <%}else{%> commit <%}%> with <%= payload.pull_request.changed_files%> <%if(payload.pull_request.commits > 1){%> files <%}else{%> file <%}%> changed.</p>',PullRequestReviewCommentEvent:"<span> commented on pull request <%= pullCommentUrl%> </span><p><%= payload.comment.body%></p>",PushEvent:"<span> pushed to <%= branchLink%> at <%= repoLink%> </span><%= commitsHtml%>",ReleaseEvent:"<span> released <%= tagLink%> at <%= repoLink%> </span><br><%= zipLink%>",WatchEvent:"<span> starred <%= repoLink%> </span>",noActivityTpl:'<div class="gt-no-activity"><span> There are no public events for this account in past 90 days. </span></div>',notFoundTpl:'<div class="gt-no-activity"><span> This account does not exist. </span></div>'},e={initialize:function(a,b,c){for(var f=0;f<b.length;f++)if(!a[b[f]])return!1;return e.renderContent(e.getRenderedHTML(d.parentTpl,{type:c}),a.selector),a.limit=e.setLimit(a.limit),a},checkInteger:function(a){return a===parseInt(a,10)?!0:!1},getRenderedHTML:function(b,c){return c?a.template(b)(c):a.template(b)()},getUserProfileHTML:function(a,b){e.renderContent(e.getRenderedHTML(d.userProfileTpl,a),b.selector,".gt-header")},getRepoProfileHTML:function(a,b){var f=c+"repos/"+b.username+"/"+b.reponame+"/languages";e.renderContent(e.getRenderedHTML(d.repoProfileTpl,a),b.selector,".gt-header"),e.getData(f,b,e.getLanguageHTML)},getOrgProfileHTML:function(a,b){e.renderContent(e.getRenderedHTML(d.orgProfileTpl,a),b.selector,".gt-header")},getPublicActivityHTML:function(a,b){var c="",f=b.limit<a.length?b.limit:a.length;if(0==f)c+=e.getRenderedHTML(d.noActivityTpl);else for(var g=0;f>g;g++){var h=a[g],i=h.payload;switch(h.timeString=e.millisecondsToStr(new Date-new Date(h.created_at)),h.userLink=e.getGitHubLink(h.actor.login,h.actor.login),h.repoLink=e.getGitHubLink(h.repo.name,h.repo.name),h.branchLink="",i.ref&&(h.branch="refs/heads/"===i.ref.substring(0,11)?i.ref.substring(11):i.ref,h.branchLink=e.getGitHubLink(h.repo.name+"/tree/"+h.branch,h.branch)),h.type){case"CommitCommentEvent":h.commentLink=e.getLink(i.comment.html_url,h.repo.name+"@"+i.comment.commit_id.substring(0,6));break;case"CreateEvent":break;case"DeleteEvent":break;case"ForkEvent":h.forkLink=e.getGitHubLink(i.forkee.html_url,i.forkee.full_name);break;case"GollumEvent":var j=i.pages[0];h.actionType=j.action,h.wikiMessage=h.actionType.charAt(0).toUpperCase()+h.actionType.slice(1)+" ",h.wikiMessage+=e.getLink(j.html_url,j.title);break;case"IssueCommentEvent":h.commentLink=e.getLink(i.comment.html_url,h.repo.name+"#"+i.issue.number);break;case"IssuesEvent":h.issueUrl=e.getLink(i.issue.html_url,h.repo.name+"#"+i.issue.number);break;case"MemberEvent":h.memberLink=e.getGitHubLink(i.member.login,i.member.login);break;case"PublicEvent":break;case"PullRequestEvent":h.mergeRequestUrl=e.getLink(i.pull_request.html_url,h.repo.name+"#"+i.pull_request.number);break;case"PullRequestReviewCommentEvent":h.pullCommentUrl=e.getLink(i.comment.html_url,h.repo.name+"#"+i.pull_request.number);break;case"PushEvent":h.commitsHtml=e.getCommitsHTML(h);break;case"ReleaseEvent":h.tagLink=e.getLink(i.release.html_url,i.release.tag_name),h.zipLink=e.getLink(i.release.zipball_url,"Download Source Code (zip)");break;case"WatchEvent":}h.message=e.getRenderedHTML(d[h.type],h),c+=e.getRenderedHTML(d.gitActivityTpl,h)}e.renderContent(c,b.selector,".gt-activity-cnt")},getCommitsHTML:function(a){var b,c,d,f,g,h='<ul class="gt-commit-list">',i="",j=a.payload,k=j.commits.length,l=j.before+"..."+j.head;for(g=0;k>g&&!(g>1);g++)f=j.commits[g],b='<li class="gt-commit-item" >',c=e.getGitHubLink(a.repo.name+"/commit/"+f.sha,f.sha.substring(0,6)),d='<span class="gt-commit-msg">'+f.message.substring(0,150)+"</span>",b+=c,b+=d,b+="</li>",h+=b;return 2===k?i=e.getGitHubLink(a.repo.name+"/compare/"+l,"View comparison for these 2 commits &raquo;","gt-compare-link"):k>2&&(i=e.getGitHubLink(a.repo.name+"/compare/"+l,k-2+" more "+e.getPluralWord(k-2,"commit")+" &raquo;","gt-compare-link")),h+="</ul>",h+=i},getData:function(a,b,c){var f,g;g=new XMLHttpRequest,g.open("GET",a,!0),b.OAuth&&g.setRequestHeader("Authorization","Token "+b.OAuth),g.onload=function(){g.status>=200&&g.status<400?(f=JSON.parse(g.responseText),c(f,b)):(e.renderContent(e.getRenderedHTML(d.notFoundTpl,f),b.selector,".gt-container"),console.error("An error occurred while connecting to GitHub API."))},g.onerror=function(){console.error("An error occurred while connecting to GitHub API.")},g.send()},getLink:function(a,b,c){return b||(b=a),"undefined"==typeof c&&(c=""),e.getRenderedHTML('<a class="'+c+'" href="<%=url%>" target="_blank"><%=title%></a>',{url:a,title:b})},getGitHubLink:function(a,b,c){return b||(b=a),"undefined"==typeof c&&(c=""),e.getLink("https://github.com/"+a,b,c)},getPluralWord:function(a,b){return 1!==a?b+"s":b},getLanguageHTML:function(b,c){var d,f=[],g=0,h="";a.each(b,function(a,b){var c={};c.language=b,c.size=a,f.push(c),g+=a}),f=f.sort(function(a,b){return b.size-a.size}),a.each(f,function(a){d=(parseInt(a.size)/g*100).toFixed(1),h+='<div class="gt-repo-lg-cnt" style="width: '+d+"%; background: #"+e.getRandomColor()+'; " > <div class="gt-repo-lg-name" data-title="'+a.language+" ("+d+'%)"> </div> </div>'}),e.renderContent(h,c.selector,".gt-repo-lg-stat")},getRandomColor:function(){return Math.random().toString(16).substring(2,8)},millisecondsToStr:function(a){function b(a){return a>1?"s ago":" ago"}var c=Math.floor(a/1e3),d=Math.floor(c/31536e3);if(d)return d+" year"+b(d);var e=Math.floor((c%=31536e3)/2592e3);if(e)return e+" month"+b(e);var f=Math.floor((c%=2592e3)/86400);if(f)return f+" day"+b(f);var g=Math.floor((c%=86400)/3600);if(g)return"about "+g+" hour"+b(g);var h=Math.floor((c%=3600)/60);if(h)return h+" minute"+b(h);var i=c%60;return i?i+" second"+b(i):"just now"},renderContent:function(a,b,c){for(var d=document.querySelectorAll(b),e=0;e<d.length;e++)selectorDiv=c?d[e].querySelector(c):d[e],selectorDiv.innerHTML=a},setLimit:function(a){var b;return b="undefined"!==a&&e.checkInteger(b=parseInt(a,10))?b>30?30:b:30}};return b});