-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuserscript.js
107 lines (96 loc) · 4.23 KB
/
userscript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// ==UserScript==
// @name GitHub: sort by recently updated
// @namespace https://github.com/Procyon-b
// @version 0.5.6
// @description Adds 2 links to sort by "recently updated" (issues & PR)
// @author Achernar
// @match https://github.com/*
// @run-at document-end
// @grant none
// @noframes
// ==/UserScript==
(function() {
'use strict';
var E;
getE();
if (!E) return;
var TO, obs=new MutationObserver(cb), config = { attributes: false, childList: true, subtree: false};
obs.observe(E, config);
function cb(mutL,o) {
for(var mut of mutL) {
if (mut.type == 'childList') {
if (TO) clearTimeout(TO);
TO=setTimeout(addLink,0);
}
}
}
function getE() {
if (!E || !E.offsetParent) {
E=document.getElementById("js-repo-pjax-container") || document.querySelector('.application-main main');
}
return E;
}
new MutationObserver(function(){
if (TO) clearTimeout(TO);
TO=setTimeout(addLink,0);
}).observe(document.body, { attributes: false, childList: true, subtree: false });
function addLink() {
var e=getE().querySelector('nav.js-repo-nav, nav'), user;
function aLink(e,q,st,st0) {
if (!e) return;
if (e.id) return;
var astyle=((st0!=undefined) && st0) || '', style='', url=e.href || e.parentNode.href, Q=url.indexOf('?')>=0;
url+=(Q?'':'?q=')+(q?'+'+escape(q):'')+(Q?'':'+is%3Aopen')+'+sort%3Aupdated-desc';
if ((url == location.href)) style+=( ((st!=undefined) && st) || 'background-color:#EEEEEE;');
e.innerHTML+='<a style="color:inherit; text-decoration:inherit; position:relative;'+astyle+'" href="'+url+'"> <span'+(style?' style="'+style+'"':'')+'>(r)</span> </a>';
e.id="addedModifiedLink";
}
user=document.head.querySelector(':scope meta[name="user-login"]');
if (e) {
aLink(e.querySelector(':scope span a[data-selected-links~="repo_issues"] span[itemprop="name"], :scope li a[data-selected-links~="repo_issues"] span[itemprop="name"], :scope li a[data-selected-links~="repo_issues"] span[data-content]'),'is:issue');
aLink(e.querySelector(':scope span a[data-selected-links~="repo_pulls"] span[itemprop="name"], :scope li a[data-selected-links~="repo_pulls"] span[itemprop="name"], :scope li a[data-selected-links~="repo_pulls"] span[data-content]'),'is:pr');
let aria=e.attributes['aria-label'], c, RE;
if (aria && ['Issues','Pull Requests'].includes(aria.value) ) {
if (!e.id) {
RE=new RegExp('\\+(author|assignee|mentions)%3A'+user.content);
e.id='addedCommenter';
c=e.firstElementChild.cloneNode(true);
c.innerText='Commenter';
c.title=aria.value+' you commented';
c.attributes['aria-label'].value=aria.value+' you commented';
c.removeAttribute('aria-current');
c.id='commenter';
let u=c.href.replace(RE,'+commenter%3A'+user.content);
if (u.startsWith(location.origin)) u=u.substr(location.origin.length);
c.href=u;
c.dataset.selectedLinks='dashboard_commented '+u;
c.classList.remove('selected');
e.appendChild(c);
setTimeout(addLink,0);
if (aria.value=='Pull Requests') {
let s=document.createElement('style');
s.textContent='.subnav-search-input-wide {width: 450px;}';
c.appendChild(s);
}
}
else {
let cmt='+commenter%3A'+user.content, sel=e.getElementsByClassName('selected');
RE=new RegExp('\\+commenter%3A'+user.content,'g');
for (let c,i=0; c=e.children[i]; i++) {
if (!c.href) continue;
if ( (c.id=='commenter') && !sel.length) c.classList.add('selected');
let u=c.href.replace(RE, '');
if (u.startsWith(location.origin)) u=u.substr(location.origin.length);
c.href=u+(c.id=='commenter'?cmt:'');
c.dataset.selectedLinks=c.dataset.selectedLinks.replace(RE, '')+(c.id=='commenter'?cmt:'');
}
}
}
}
if (user) {
aLink(document.querySelector('nav[aria-label="Global"] a[href="/pulls"]'), 'is:open+is:pr+author:'+user.content+'+archived:false', ' ','font-size:0.8em;');
aLink(document.querySelector('nav[aria-label="Global"] a[href="/issues"]'), 'is:open+is:issue+author:'+user.content+'+archived:false', ' ','font-size:0.8em;');
}
}
addLink();
})();