NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Top Repos // @namespace https://github.com/KeyWeeUsr/Userscripts // @version 0.4 // @description Show star-ordered user's repositories in "Popular repositories" // @author Peter Badida // @copyright 2016+, Peter Badida // @license GPL-3.0-or-later; http://www.gnu.org/licenses/gpl-3.0.txt // @homepage https://github.com/KeyWeeUsr/Userscripts/tree/master/TopRepos // @supportURL https://github.com/KeyWeeUsr/Userscripts/issues // @icon https://assets-cdn.github.com/favicon.ico // @include https://github.com/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js // @require https://raw.githubusercontent.com/KeyWeeUsr/Userscripts/master/TopRepos/emoji.js // @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ACVM74AYCXVWQ // @grant GM_addStyle // ==/UserScript== /* jshint -W097 */ 'use strict'; var defaultEmoji = defaultEmoji; function appendMe() { var av = $('<div><a href="https://github.com/Key' + 'WeeUsr/Userscripts"><img id="kwu_av" style="opacity: 0.3;" ' + 'src="https://github.com/identicons/KeyWeeUsr.png" width=' + '"24"></img></a></div>'); av.css('position', 'absolute'); av.css('left', $('.tabnav').position().left + $('.tabnav').width() + 5); av.css('top', $('.tabnav').position().top); av.mouseenter(function() { $('#kwu_av').css('opacity', 1.0); }); av.mouseleave(function() { $('#kwu_av').css('opacity', 0.3); }); $('body').prepend(av); } function checkAv() { if (document.getElementById('contributions-calendar')) { appendMe(); } if (document.getElementById('kwu_av') !== null) { run(); clearInterval(tabCheck); } } function run() { var page = 1; var repoList = []; var image = '<img class="emoji" title="$key$" alt="$key$" src=\ "$url$" height="20" width="20" align="absmiddle">'; var template = document.getElementsByClassName('public source')[0]; var box = document.getElementsByClassName('boxed-group-inner mini-repo-list')[0]; var username = location.href.replace(/.*?github.com\//, ''); var repos = 'https://api.github.com/users/' + username + '/repos?page='; var repoPages = 'https://api.github.com/users/' + username + '/repos?callback=getPages'; try { box.innerHTML = ''; } catch (e) {} $.ajaxSetup({ async: false }); Array.prototype.extend = function(extendArray) { if (extendArray.constructor !== Array) { throw new Error(); } extendArray.forEach(function(item) { this.push(item); }, this); }; function commifyInt(num) { return num.toString().replace(/(\d)(?=(\d{3})+$)/g, '$1,'); } function emojify(desc) { var _desc = desc; var emoji = desc.match(/:(\w*?):/g); try { for (var i = 0; i < emoji.length; i++) { //image var emojiTag = image; emojiTag = emojiTag.replace('$key$', emoji[i].slice(1, -1)); emojiTag = emojiTag.replace('$key$', emoji[i].slice(1, -1)); emojiTag = emojiTag.replace('$url$', defaultEmoji[emoji[i].slice(1, -1)]); desc = desc.replace(emoji[i], emojiTag); } return desc; } catch (e) { return _desc; } } function getTotal(repoPages) { // dont change function name (slice! --------v) var pages = $.getJSON(repoPages); try { pages = JSON.parse(pages.responseText.slice(13, -2)).meta.Link[1][0]; pages = pages.replace(/(.*?callback=getPages&page=)/, ''); } catch (e) { // return page==1 if no next page exists pages = 1; } return parseInt(pages); } var pages = getTotal(repoPages); function getRepos(jsn) { var tempRepoList = []; for (var i = 0; i < jsn.length; i++) { if (!jsn[i].fork) { tempRepoList.push([jsn[i].stargazers_count, jsn[i].name, jsn[i].description, jsn[i].html_url.replace('https://github.com', '') ]); } } repoList.extend(tempRepoList); } function getAjax(repoUrl, page) { $.ajax({ url: repoUrl + page, dataType: "json", success: function(returndata) { getRepos(returndata); } }); } function createHtml(item) { var newItem = template.cloneNode(true); var rgx = /(?=<svg)(.*)(?=<\/svg>).*/g; var old = newItem.childNodes[1].childNodes[5].innerHTML.match(rgx); newItem.childNodes[1].childNodes[5].innerHTML = commifyInt(item[0]) + ' ' + old; newItem.childNodes[1].childNodes[3].childNodes[1].title = item[1]; newItem.childNodes[1].childNodes[3].childNodes[1].innerHTML = item[1]; newItem.childNodes[1].childNodes[7].innerHTML = emojify(item[2]); newItem.childNodes[1].href = item[3]; if (!item[2]) { newItem.childNodes[1].childNodes[5].style.marginTop = '6px'; } box.appendChild(newItem); } for (var i = 1; i <= pages; i++) { getAjax(repos, i); if (i == pages) { repoList.sort(function compare(a, b) { return a[0] - b[0]; }).reverse(); for (var j = 0; j < 5; j++) { try { createHtml(repoList[j]); } catch (e) { /*pass if less than 5 own repos*/ } } } } } var tabCheck = setInterval(checkAv, 250);