Skip to content

Instantly share code, notes, and snippets.

@derjanb
Last active June 13, 2021 10:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save derjanb/7274b957f9478f9a5166 to your computer and use it in GitHub Desktop.
Save derjanb/7274b957f9478f9a5166 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name GitHub PR Assignee Filter
// @namespace http://github.com/
// @version 0.1.1
// @description enter something useful
// @include /https?:\/\/github\.com\/orgs\/[^\/]*\/dashboard\/pulls.*/
// @include /https?:\/\/github\.com\/organizations\/[^\/]*\/dashboard\/pulls.*/
// @include /https?:\/\/github\.com\/dashboard\/pulls.*/
// @require http://code.jquery.com/jquery-2.1.0.min.js
// ==/UserScript==
var $D = $.Deferred;
var local_key = "filter-my-prs";
var attr = 'data-assignee';
var attr_filter = 'data-assignee-filter';
var init_promises = [];
var no_one = '/';
function createButton(text, filter_val) {
return $('<a href="#" class="minibutton" ' + attr_filter + '="' + filter_val + '">' + text + '</a>');
}
function showPrs(filter) {
$('*[' + attr + ']').show();
if (filter != 'false') $('*[' + attr + '][' + attr + '!="' + filter + '"]').hide();
}
function selectButton(filter, exec) {
$('*[' + attr_filter + ']').removeClass('selected');
if (filter) {
var b = $('*[' + attr_filter + '="' + filter + '"]');
b.addClass('selected');
if (exec) b.click();
}
}
function clickHandler() {
var me = $(this).attr(attr_filter);
selectButton(me);
localStorage.setItem(local_key, me);
showPrs(me)
}
function addButtons() {
var me = $('ul#user-links li a img').parent().text().trim();
var group = $('<div class="button-group"></div>').hide();
$('.issues-list-options').append(group);
$([ createButton('All', 'false'),
createButton('Mine', me),
createButton('Nobody', no_one) ])
.each(function(i,v) {
v.appendTo(group).click(clickHandler);
});
$.when.apply(null, init_promises)
.then(function() {
selectButton(localStorage.getItem(local_key, 'false'), true);
group.show();
});
}
function getAsignee(url) {
var deferred = $D();
$.ajax({
url: url,
dataType: 'html'
}).done(function(h) {
var a = $($(h).find('.js-assignee-infobar-item-wrapper')[0]);
var img = a.find('img')
deferred.resolve({ user: a.text().trim(), img: img.length ? img : null});
});
return deferred.promise();
}
$('*[class="js-navigation-open"]').each(function(e, v) {
var pr = v.href;
var p = $(v).parent('h4').parent();
var ul = p.find('ul');
var deferred = $D();
getAsignee(pr)
.done(function(a) {
var html, user = no_one;
if (a.img) {
user = a.user;
html = [ $('<span>Assigned to: </span>'), a.img , $('<a href="/' + user + '" class="assignee css-truncate-target">' + user + '</a>') ];
} else {
html = '<span class="text-muted">No one assigned</span>';
}
p.attr(attr, user);
li = $('<li class="gravatar"></li>').append(html).appendTo(ul)
deferred.resolve();
});
init_promises.push(deferred.promise());
});
$(document).ready(addButtons);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment