Skip to content

Commit 8fccb49

Browse files
committed
✨ Added members count for orgs (closes jerone#54);
Added default object logic; Fixed not always saving new values; Improved some logging;
1 parent c4b5fcc commit 8fccb49

2 files changed

Lines changed: 94 additions & 18 deletions

File tree

Github_User_Info/Github_User_Info.user.js

Lines changed: 91 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,26 @@
278278
userOrgsText.classList.add('text-muted');
279279
userOrgs.appendChild(userOrgsText);
280280

281+
var userMembers = document.createElement('a');
282+
userMembers.style =
283+
'display: none;' +
284+
'float: left;' +
285+
'width: 20%;' +
286+
'text-decoration: none;';
287+
userMembers.classList.add('vcard-stat');
288+
userMembers.setAttribute('target', '_blank');
289+
userMembers.setAttribute('title', 'Public members');
290+
userCounts.appendChild(userMembers);
291+
var userMembersCount = document.createElement('strong');
292+
userMembersCount.style =
293+
'display: block;' +
294+
'font-size: 28px;';
295+
userMembers.appendChild(userMembersCount);
296+
var userMembersText = document.createElement('span');
297+
userMembersText.appendChild(document.createTextNode('Members'));
298+
userMembersText.classList.add('text-muted');
299+
userMembers.appendChild(userMembersText);
300+
281301
var userGists = document.createElement('a');
282302
userGists.style =
283303
'display: none;' +
@@ -318,14 +338,15 @@
318338
var date = new Date(users[username].checked_at),
319339
now = new Date();
320340
if (date > now.setDate(now.getDate() - UPDATE_INTERVAL_DAYS)) {
321-
console.log('GithubUserInfo:getData', 'CACHED');
322-
fillData(users[username].data, position, avatarSize);
341+
var data = users[username].data;
342+
console.log('GithubUserInfo:getData', 'CACHED', data);
343+
fillData(defaultData(data), position, avatarSize);
323344
} else {
324-
console.log('GithubUserInfo:getData', 'AJAX - OUTDATED');
345+
console.log('GithubUserInfo:getData', 'AJAX - OUTDATED', username);
325346
fetchData(username, position, avatarSize);
326347
}
327348
} else {
328-
console.log('GithubUserInfo:getData', 'AJAX - NON-EXISTING');
349+
console.log('GithubUserInfo:getData', 'AJAX - NON-EXISTING', username);
329350
fetchData(username, position, avatarSize);
330351
}
331352
}
@@ -344,26 +365,53 @@
344365
if (!dataParsed) {
345366
return;
346367
}
347-
var dataNormalized = normalizeData(dataParsed);
348-
console.log('GithubUserInfo:parseUserData', dataNormalized.username);
368+
var data = defaultData(normalizeData(dataParsed));
369+
console.log('GithubUserInfo:parseUserData', data.username);
349370

350371
GM_xmlhttpRequest({
351372
method: 'GET',
352-
url: 'https://api.github.com/users/' + dataNormalized.username + '/orgs',
353-
onload: proxy(parseOrgsData, position, avatarSize, dataNormalized)
373+
url: 'https://api.github.com/users/' + data.username + '/orgs',
374+
onload: proxy(parseOrgsData, position, avatarSize, data)
354375
});
355376
}
356377

357-
function parseOrgsData(response, position, avatarSize, dataNormalized) {
378+
function parseOrgsData(response, position, avatarSize, data) {
358379
var dataParsed = parseRawData(response.responseText);
359380
if (!dataParsed) {
360381
return;
361382
}
362-
dataNormalized.orgs = dataParsed.length;
363-
console.log('GithubUserInfo:parseOrgsData', dataNormalized.username, dataNormalized.orgs);
383+
data.orgs = dataParsed.length;
384+
console.log('GithubUserInfo:parseOrgsData', data.username, data.orgs);
385+
386+
switch (data.type) {
387+
case 'Organization':
388+
{
389+
GM_xmlhttpRequest({
390+
method: 'GET',
391+
url: 'https://api.github.com/orgs/' + data.username + '/members',
392+
onload: proxy(parseMembersData, position, avatarSize, data)
393+
});
394+
break;
395+
}
396+
default:
397+
{
398+
fillData(data, position, avatarSize);
399+
setData(data, data.username);
400+
break;
401+
}
402+
}
403+
}
364404

365-
fillData(dataNormalized, position, avatarSize);
366-
setData(dataNormalized, dataNormalized.username);
405+
function parseMembersData(response, position, avatarSize, data) {
406+
var dataParsed = parseRawData(response.responseText);
407+
if (!dataParsed) {
408+
return;
409+
}
410+
data.members = dataParsed.length;
411+
console.log('GithubUserInfo:parseMembersData', data.username, data.members);
412+
413+
fillData(data, position, avatarSize);
414+
setData(data, data.username);
367415
}
368416

369417
function parseRawData(data) {
@@ -380,8 +428,8 @@
380428
'username': data.login,
381429
'avatar': data.avatar_url,
382430
'type': data.type,
383-
'name': data.name || data.login,
384-
'company': data.site_admin ? 'GitHub' : data.company,
431+
'name': data.name,
432+
'company': data.company,
385433
'blog': data.blog,
386434
'location': data.location,
387435
'mail': data.email,
@@ -390,24 +438,44 @@
390438
'followers': data.followers,
391439
'following': data.following,
392440
'created_at': data.created_at,
393-
'orgs': 0, // This will be filled via another AJAX call;
394441
'admin': !!data.site_admin
395442
};
396443
}
397444

445+
function defaultData(data) {
446+
return {
447+
'username': data.username,
448+
'avatar': data.avatar,
449+
'type': data.type,
450+
'name': data.name || data.username,
451+
'company': data.admin ? 'GitHub' : data.company || '',
452+
'blog': data.blog || '',
453+
'location': data.location || '',
454+
'mail': data.mail || '',
455+
'repos': data.repos || 0,
456+
'gists': data.gists || 0,
457+
'followers': data.followers || 0,
458+
'following': data.following || 0,
459+
'created_at': data.created_at,
460+
'admin': data.admin || false,
461+
'orgs': data.orgs || 0,
462+
'members': data.members || 0
463+
};
464+
}
465+
398466
function setData(data, username) {
467+
console.log('GithubUserInfo:setData', username, data);
399468
var usersString = GM_getValue('users', '{}');
400469
var users = JSON.parse(usersString);
401-
if (!users[username]) {
402470
users[username] = {
403471
checked_at: (new Date()).toJSON(),
404472
data: data
405473
};
406-
}
407474
GM_setValue('users', JSON.stringify(users));
408475
}
409476

410477
function fillData(data, position, avatarSize) {
478+
console.log('GithubUserInfo:fillData', data, position, avatarSize);
411479
userMenu.style.top = Math.max(position.top - 10 - 1, 2) + 'px';
412480
userMenu.style.left = Math.max(position.left - 10 - 1, 2) + 'px';
413481
userMenu.style.display = 'block';
@@ -466,6 +534,11 @@
466534
userOrgs.setAttribute('href', 'https://github.com/' + data.username);
467535
userOrgsCount.textContent = data.orgs;
468536
}
537+
if (hasValue(data.members, userMembers)) {
538+
userCountsHasValue = true;
539+
userMembers.setAttribute('href', 'https://github.com/orgs/' + data.username + '/people');
540+
userMembersCount.textContent = data.members;
541+
}
469542
if (hasValue(data.gists, userGists)) {
470543
userCountsHasValue = true;
471544
userGists.setAttribute('href', 'https://gist.github.com/' + data.username);

Github_User_Info/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ Show user information on avatar hover.
2525

2626
## Version History
2727

28+
* **vNext**
29+
* Fixed local time on second hover (fixes https://github.com/jerone/UserScripts/issues/53);
30+
* Added members count for orgs (closes https://github.com/jerone/UserScripts/issues/54);
2831
* **0.2.0**
2932
* Make location linkable to Google Maps;
3033
* Added admin/staff recognition;

0 commit comments

Comments
 (0)