|
278 | 278 | userOrgsText.classList.add('text-muted'); |
279 | 279 | userOrgs.appendChild(userOrgsText); |
280 | 280 |
|
| 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 | + |
281 | 301 | var userGists = document.createElement('a'); |
282 | 302 | userGists.style = |
283 | 303 | 'display: none;' + |
|
318 | 338 | var date = new Date(users[username].checked_at), |
319 | 339 | now = new Date(); |
320 | 340 | 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); |
323 | 344 | } else { |
324 | | - console.log('GithubUserInfo:getData', 'AJAX - OUTDATED'); |
| 345 | + console.log('GithubUserInfo:getData', 'AJAX - OUTDATED', username); |
325 | 346 | fetchData(username, position, avatarSize); |
326 | 347 | } |
327 | 348 | } else { |
328 | | - console.log('GithubUserInfo:getData', 'AJAX - NON-EXISTING'); |
| 349 | + console.log('GithubUserInfo:getData', 'AJAX - NON-EXISTING', username); |
329 | 350 | fetchData(username, position, avatarSize); |
330 | 351 | } |
331 | 352 | } |
|
344 | 365 | if (!dataParsed) { |
345 | 366 | return; |
346 | 367 | } |
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); |
349 | 370 |
|
350 | 371 | GM_xmlhttpRequest({ |
351 | 372 | 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) |
354 | 375 | }); |
355 | 376 | } |
356 | 377 |
|
357 | | - function parseOrgsData(response, position, avatarSize, dataNormalized) { |
| 378 | + function parseOrgsData(response, position, avatarSize, data) { |
358 | 379 | var dataParsed = parseRawData(response.responseText); |
359 | 380 | if (!dataParsed) { |
360 | 381 | return; |
361 | 382 | } |
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 | + } |
364 | 404 |
|
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); |
367 | 415 | } |
368 | 416 |
|
369 | 417 | function parseRawData(data) { |
|
380 | 428 | 'username': data.login, |
381 | 429 | 'avatar': data.avatar_url, |
382 | 430 | '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, |
385 | 433 | 'blog': data.blog, |
386 | 434 | 'location': data.location, |
387 | 435 | 'mail': data.email, |
|
390 | 438 | 'followers': data.followers, |
391 | 439 | 'following': data.following, |
392 | 440 | 'created_at': data.created_at, |
393 | | - 'orgs': 0, // This will be filled via another AJAX call; |
394 | 441 | 'admin': !!data.site_admin |
395 | 442 | }; |
396 | 443 | } |
397 | 444 |
|
| 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 | + |
398 | 466 | function setData(data, username) { |
| 467 | + console.log('GithubUserInfo:setData', username, data); |
399 | 468 | var usersString = GM_getValue('users', '{}'); |
400 | 469 | var users = JSON.parse(usersString); |
401 | | - if (!users[username]) { |
402 | 470 | users[username] = { |
403 | 471 | checked_at: (new Date()).toJSON(), |
404 | 472 | data: data |
405 | 473 | }; |
406 | | - } |
407 | 474 | GM_setValue('users', JSON.stringify(users)); |
408 | 475 | } |
409 | 476 |
|
410 | 477 | function fillData(data, position, avatarSize) { |
| 478 | + console.log('GithubUserInfo:fillData', data, position, avatarSize); |
411 | 479 | userMenu.style.top = Math.max(position.top - 10 - 1, 2) + 'px'; |
412 | 480 | userMenu.style.left = Math.max(position.left - 10 - 1, 2) + 'px'; |
413 | 481 | userMenu.style.display = 'block'; |
|
466 | 534 | userOrgs.setAttribute('href', 'https://github.com/' + data.username); |
467 | 535 | userOrgsCount.textContent = data.orgs; |
468 | 536 | } |
| 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 | + } |
469 | 542 | if (hasValue(data.gists, userGists)) { |
470 | 543 | userCountsHasValue = true; |
471 | 544 | userGists.setAttribute('href', 'https://gist.github.com/' + data.username); |
|
0 commit comments