Skip to content

Commit cec0d7f

Browse files
committed
new deployment
1 parent b710ba3 commit cec0d7f

File tree

9 files changed

+207
-26
lines changed

9 files changed

+207
-26
lines changed

404/index.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ <h1>Page not found</h1>
1616
<p>The page you were looking for was not found.</p>
1717
</div>
1818

19-
<footer class="container">
19+
<footer class="container padv">
2020
<p><a href="/">CoderStats</a> is a free service that displays statistics for coders with public Git repositories on GitHub.<br>
21-
<a href="https://github.com/coderstats/coderstats.net">Source Code</a>
21+
<a href="https://github.com/coderstats/coderstats.net">Source Code</a>
2222
<a href="https://chrome.google.com/webstore/detail/necogepejonacpphmlmcagmbjaogpbng">Chrome Extension</a><a href="https://addons.mozilla.org/en-US/firefox/addon/coderstats/">Firefox Add-on</a><a href="https://teespring.com/stores/codershirts" title="T-Shirts, hoodies, mugs and stickers for coders">CoderShirts Store</a>
2323
</footer>
2424

25-
<script src="//unpkg.com/vue@2.4.4/dist/vue.min.js"></script>
26-
<script src="//unpkg.com/vue-resource@1.3.4/dist/vue-resource.min.js"></script>
27-
<script src="//d3js.org/d3-collection.v1.min.js"></script>
28-
<script src="//d3js.org/d3-array.v1.min.js"></script>
25+
<script src="//cdn.jsdelivr.net/npm/vue"></script>
26+
<script src="//cdn.jsdelivr.net/npm/vue-resource@1.5.1/dist/vue-resource.min.js"></script>
27+
<script src="//cdn.jsdelivr.net/npm/d3-collection@1.0.7/dist/d3-collection.min.js"></script>
28+
<script src="//cdn.jsdelivr.net/npm/d3-array@2.2.0/dist/d3-array.min.js"></script>
2929
</body>
3030
</html>

compiled/coder.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiled/coder.js

Lines changed: 142 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,142 @@
1-
const DEV=0;let bar_options={axisX:{onlyInteger:!0},axisY:{offset:100,showGrid:!1},horizontalBars:!0,reverseData:!0},github_user=null;document.location.hash?github_user=document.location.hash.replace('#',''):document.location.href='/',document.title=`CoderStats(${github_user})`,document.getElementsByClassName('brand')[0].textContent=document.title;let url_user=`https://api.github.com/users/${github_user}`,url_repos=`${url_user}/repos?sort=pushed&per_page=100`,months_short=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];let coder=new Vue({el:'#coder',data:{repos:[],response:{},sort_orders:{},sort_key:'',user:null},computed:{repos_pushed:function(){return this.repos.filter((a)=>a.pushed_at>a.created_at)},repos_pushed_ratio:function(){return this.repos.length?this.repos_pushed.length/this.repos.length:0},languages:function(){return d3.nest().key((a)=>a.language).rollup((a)=>a.length).entries(this.repos_pushed.filter((a)=>a.language)).sort((c,a)=>a.value-c.value)},issues:function(){return this.repoRanking('open_issues_count')},forks:function(){return this.repoRanking('forks_count')},stars:function(){return this.repoRanking('stargazers_count')},total_forks:function(){return d3.sum(this.forks,(a)=>a.forks_count)},total_issues:function(){return d3.sum(this.issues,(a)=>a.open_issues_count)},total_stars:function(){return d3.sum(this.stars,(a)=>a.stargazers_count)}},filters:{fixURL:(a)=>(a.startsWith('http')||(a=`http://${a}`),a),formatDate:(a)=>{let b=new Date(a);return`${b.getDate()} ${months_short[b.getMonth()]} ${b.getYear()+1900}`},formatURL:(a)=>a.split('://').pop().replace(/\/$/,'')},created:function(){this.fetchRepos(),this.fetchUser()},updated:function(){let a=this.languages.slice(0,10);new Chartist.Bar('#language-ranking',{labels:a.map((a)=>a.key),series:[a.map((a)=>a.value)]},bar_options),this.rankingGraph(this.issues.slice(0,10),'open_issues_count','#issues-ranking'),this.rankingGraph(this.forks.slice(0,10),'forks_count','#forks-ranking'),this.rankingGraph(this.stars.slice(0,10),'stargazers_count','#stars-ranking')},methods:{fetchRepos:function(){this.$http.get(url_repos).then((a)=>{this.response.repos=a,this.repos=a.body})},fetchUser:function(){this.$http.get(url_user).then((a)=>{this.response.user=a,this.user=a.body,this.user.name||(this.user.name=this.user.login)})},order:function(a){return 0>this.sort_orders[a]?'dsc':'asc'},rankingGraph:function(a,b,c){a.length&&new Chartist.Bar(c,{labels:a.map((a)=>a.name),series:[a.map((a)=>a[b])]},bar_options)},repoRanking:function(c){return this.repos_pushed.filter((a)=>a[c]).sort((d,a)=>a[c]-d[c])},sortBy:function(c,d='number'){let e='string'===d?'':0;this.sort_key=c,this.sort_orders[c]=-1*(this.sort_orders[c]||1),this.repos.sort((f,a)=>{let b=f[c]||e,g=a[c]||e;return'string'===d&&(b=b.toLowerCase(),g=g.toLowerCase()),(b===g?0:b>g?1:-1)*this.sort_orders[c]})}}});
1+
const DEV = 0;
2+
3+
let bar_options = {
4+
axisX: { onlyInteger: true },
5+
axisY: { offset: 100, showGrid: false },
6+
horizontalBars: true,
7+
reverseData: true
8+
};
9+
10+
let github_user = null;
11+
if (document.location.hash) {
12+
github_user = document.location.hash.replace('#', '');
13+
} else {
14+
document.location.href = '/';
15+
}
16+
// Set these values here because they are outside of vue's scope.
17+
document.title = `CoderStats(${github_user})`;
18+
document.getElementsByClassName('brand')[0].textContent = document.title;
19+
20+
let url_user = `https://api.github.com/users/${github_user}`,
21+
url_repos = `${url_user}/repos?sort=pushed&per_page=100`,
22+
months_short = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');
23+
24+
if (DEV) {
25+
url_user = '/data/user.json';
26+
url_repos = '/data/repos.json';
27+
}
28+
29+
let coder = new Vue({
30+
el: '#coder',
31+
data: {
32+
repos: [],
33+
response: {},
34+
sort_orders: {},
35+
sort_key: '',
36+
user: null
37+
},
38+
computed: {
39+
// Only repos the user actually pushed at, i.e. no forks with no user commits.
40+
repos_pushed: function () {
41+
return this.repos.filter(d => d.pushed_at > d.created_at);
42+
},
43+
repos_pushed_ratio: function () {
44+
return this.repos.length ? this.repos_pushed.length / this.repos.length : 0;
45+
},
46+
languages: function () {
47+
return d3.nest().key(d => d.language).rollup(leaves => leaves.length).entries(this.repos_pushed.filter(d => d.language)).sort((a, b) => b.value - a.value);
48+
},
49+
issues: function () {
50+
return this.repoRanking('open_issues_count');
51+
},
52+
forks: function () {
53+
return this.repoRanking('forks_count');
54+
},
55+
stars: function () {
56+
return this.repoRanking('stargazers_count');
57+
},
58+
total_forks: function () {
59+
return d3.sum(this.forks, d => d.forks_count);
60+
},
61+
total_issues: function () {
62+
return d3.sum(this.issues, d => d.open_issues_count);
63+
},
64+
total_stars: function () {
65+
return d3.sum(this.stars, d => d.stargazers_count);
66+
}
67+
},
68+
filters: {
69+
fixURL: value => {
70+
if (!value.startsWith('http')) {
71+
value = `http://${value}`;
72+
}
73+
return value;
74+
},
75+
formatDate: value => {
76+
let dt = new Date(value);
77+
return `${dt.getDate()} ${months_short[dt.getMonth()]} ${dt.getYear() + 1900}`;
78+
},
79+
formatURL: value => {
80+
return value.split('://').pop().replace(/\/$/, '');
81+
}
82+
},
83+
created: function () {
84+
this.fetchRepos();
85+
this.fetchUser();
86+
},
87+
updated: function () {
88+
let language_ranking = this.languages.slice(0, 10);
89+
new Chartist.Bar('#language-ranking', {
90+
labels: language_ranking.map(d => d.key),
91+
series: [language_ranking.map(d => d.value)]
92+
}, bar_options);
93+
94+
this.rankingGraph(this.issues.slice(0, 10), 'open_issues_count', '#issues-ranking');
95+
this.rankingGraph(this.forks.slice(0, 10), 'forks_count', '#forks-ranking');
96+
this.rankingGraph(this.stars.slice(0, 10), 'stargazers_count', '#stars-ranking');
97+
},
98+
methods: {
99+
fetchRepos: function () {
100+
this.$http.get(url_repos).then(response => {
101+
this.response.repos = response;
102+
this.repos = response.body;
103+
});
104+
},
105+
fetchUser: function () {
106+
this.$http.get(url_user).then(response => {
107+
this.response.user = response;
108+
this.user = response.body;
109+
if (!this.user.name) this.user.name = this.user.login;
110+
});
111+
},
112+
order: function (key) {
113+
// asc is default, because sort orders are initially unset
114+
return this.sort_orders[key] < 0 ? 'dsc' : 'asc';
115+
},
116+
rankingGraph: function (series, property, selector) {
117+
if (series.length) {
118+
new Chartist.Bar(selector, {
119+
labels: series.map(d => d.name),
120+
series: [series.map(d => d[property])]
121+
}, bar_options);
122+
}
123+
},
124+
repoRanking: function (property) {
125+
return this.repos_pushed.filter(d => d[property]).sort((a, b) => b[property] - a[property]);
126+
},
127+
sortBy: function (key, type = 'number') {
128+
let default_value = type === 'string' ? '' : 0;
129+
this.sort_key = key;
130+
this.sort_orders[key] = (this.sort_orders[key] || 1) * -1;
131+
this.repos.sort((a, b) => {
132+
let x = a[key] || default_value,
133+
y = b[key] || default_value;
134+
if (type === 'string') {
135+
x = x.toLowerCase();
136+
y = y.toLowerCase();
137+
}
138+
return (x === y ? 0 : x > y ? 1 : -1) * this.sort_orders[key];
139+
});
140+
}
141+
}
142+
});

compiled/events.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,25 @@
1-
let events=new Vue({el:'#events',data:{events:null,response:null},computed:{users:function(){return d3.nest().key((a)=>a.actor.login).entries(this.events.filter((a)=>'PushEvent'===a.type)).sort((c,a)=>a.values.length-c.values.length)}},created:function(){this.fetchEvents()},methods:{fetchEvents:function(){this.$http.get('https://api.github.com/events').then((a)=>{this.response=a,this.events=a.body})}}});
1+
let events = new Vue({
2+
el: '#events',
3+
data: {
4+
events: null,
5+
response: null
6+
},
7+
computed: {
8+
users: function () {
9+
return d3.nest().key(d => d.actor.login).entries(this.events.filter(d => d.type === 'PushEvent')).sort((a, b) => b.values.length - a.values.length);
10+
}
11+
},
12+
created: function () {
13+
this.fetchEvents();
14+
},
15+
methods: {
16+
fetchEvents: function () {
17+
let url = 'https://api.github.com/events';
18+
//url = '/data/events.json';
19+
this.$http.get(url).then(response => {
20+
this.response = response;
21+
this.events = response.body;
22+
});
23+
}
24+
}
25+
});

compiled/search.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,13 @@
1-
let search=new Vue({el:'#search',data:{username:''},methods:{coder:function(){this.username&&(document.location.href=`/github#${this.username}`)}}});
1+
let search = new Vue({
2+
el: '#search',
3+
data: {
4+
username: ''
5+
},
6+
methods: {
7+
coder: function () {
8+
if (this.username) {
9+
document.location.href = `/github#${this.username}`;
10+
}
11+
}
12+
}
13+
});

compiled/style.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

github/index.html

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<div v-if="user" class="flex">
3232
<div class="sidebar padh">
3333
<header>
34-
<h4>{{ user.name }}</h4>
34+
<h3>{{ user.name }}</h3>
3535
</header>
3636
<img :src="user.avatar_url" :alt="user.name" class="img-fluid">
3737
<p>Joined GitHub {{ user.created_at|formatDate }}</p>
@@ -130,7 +130,11 @@ <h2 id="repos">Repositories</h2>
130130
<tbody>
131131
<tr v-for="(repo, idx) in repos_pushed" :title="repo.description">
132132
<td>{{ idx + 1}}</td>
133-
<td><strong><a v-bind:href="repo.html_url">{{ repo.name }}</a></strong> <i v-if="repo.fork" class="fa fa-code-fork" aria-hidden="true"></i></td>
133+
<td>
134+
<strong><a v-bind:href="repo.html_url">{{ repo.name }}</a></strong>
135+
<i v-if="repo.fork" class="fa fa-code-fork" aria-hidden="true" title="Forked Repository"></i>
136+
<i v-if="repo.archived" class="fa fa-archive" aria-hidden="true" title="Archived Repository"></i>
137+
</td>
134138
<td>{{ repo.language }}</td>
135139
<td class="text-right">{{ repo.created_at | formatDate }}</td>
136140
<td class="text-right">{{ repo.pushed_at | formatDate }}</td>
@@ -149,16 +153,16 @@ <h2 id="repos">Repositories</h2>
149153

150154
</div>
151155

152-
<footer class="container">
156+
<footer class="container padv">
153157
<p><a href="/">CoderStats</a> is a free service that displays statistics for coders with public Git repositories on GitHub.<br>
154-
<a href="https://github.com/coderstats/coderstats.net">Source Code</a>
158+
<a href="https://github.com/coderstats/coderstats.net">Source Code</a>
155159
<a href="https://chrome.google.com/webstore/detail/necogepejonacpphmlmcagmbjaogpbng">Chrome Extension</a><a href="https://addons.mozilla.org/en-US/firefox/addon/coderstats/">Firefox Add-on</a><a href="https://teespring.com/stores/codershirts" title="T-Shirts, hoodies, mugs and stickers for coders">CoderShirts Store</a>
156160
</footer>
157161

158-
<script src="//unpkg.com/vue@2.4.4/dist/vue.min.js"></script>
159-
<script src="//unpkg.com/vue-resource@1.3.4/dist/vue-resource.min.js"></script>
160-
<script src="//d3js.org/d3-collection.v1.min.js"></script>
161-
<script src="//d3js.org/d3-array.v1.min.js"></script>
162+
<script src="//cdn.jsdelivr.net/npm/vue"></script>
163+
<script src="//cdn.jsdelivr.net/npm/vue-resource@1.5.1/dist/vue-resource.min.js"></script>
164+
<script src="//cdn.jsdelivr.net/npm/d3-collection@1.0.7/dist/d3-collection.min.js"></script>
165+
<script src="//cdn.jsdelivr.net/npm/d3-array@2.2.0/dist/d3-array.min.js"></script>
162166

163167
<script src="//cdn.jsdelivr.net/chartist.js/latest/chartist.min.js"></script>
164168
<script src="/compiled/coder.js"></script>

index.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@ <h2>Recently active users</h2>
3737
</div>
3838
</div>
3939

40-
<footer class="container">
40+
<footer class="container padv">
4141
<p><a href="/">CoderStats</a> is a free service that displays statistics for coders with public Git repositories on GitHub.<br>
42-
<a href="https://github.com/coderstats/coderstats.net">Source Code</a>
42+
<a href="https://github.com/coderstats/coderstats.net">Source Code</a>
4343
<a href="https://chrome.google.com/webstore/detail/necogepejonacpphmlmcagmbjaogpbng">Chrome Extension</a><a href="https://addons.mozilla.org/en-US/firefox/addon/coderstats/">Firefox Add-on</a><a href="https://teespring.com/stores/codershirts" title="T-Shirts, hoodies, mugs and stickers for coders">CoderShirts Store</a>
4444
</footer>
4545

46-
<script src="//unpkg.com/vue@2.4.4/dist/vue.min.js"></script>
47-
<script src="//unpkg.com/vue-resource@1.3.4/dist/vue-resource.min.js"></script>
48-
<script src="//d3js.org/d3-collection.v1.min.js"></script>
49-
<script src="//d3js.org/d3-array.v1.min.js"></script>
46+
<script src="//cdn.jsdelivr.net/npm/vue"></script>
47+
<script src="//cdn.jsdelivr.net/npm/vue-resource@1.5.1/dist/vue-resource.min.js"></script>
48+
<script src="//cdn.jsdelivr.net/npm/d3-collection@1.0.7/dist/d3-collection.min.js"></script>
49+
<script src="//cdn.jsdelivr.net/npm/d3-array@2.2.0/dist/d3-array.min.js"></script>
5050

5151
<script src="/compiled/events.js"></script>
5252
<script src="/compiled/search.js"></script>

rss.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<channel><title>RSS Feed</title>
44
<link>http://localhost:8080</link>
55
<description>RSS Feed</description>
6-
<lastBuildDate>Sat, 23 Sep 2017 21:03:10 </lastBuildDate>
6+
<lastBuildDate>Sun, 26 May 2019 01:20:06 </lastBuildDate>
77
<generator>Logya</generator>
88
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
99
<item>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy