forked from staktrace/bugmash
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbugtags.user.js
More file actions
140 lines (127 loc) · 4.12 KB
/
bugtags.user.js
File metadata and controls
140 lines (127 loc) · 4.12 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// ==UserScript==
// @id bugtags@staktrace.com
// @name BugTags
// @namespace https://staktrace.com
// @author Kartikaya Gupta <kgupta@mozilla.com> https://staktrace.com/
// @version 1.0
// @description Allows you tag bugs; the tags are then shown on Bugzilla pages
// @match https://bugzilla.mozilla.org/*
// @run-at document-end
// ==/UserScript==
var TAGS_SERVER = 'https://example.com/path/to/tags.php'; // point this to your tags.php
function getUser() {
var links = document.links;
for (var i = 0; i < links.length; i++) {
if (links[i].href.indexOf( "logout" ) > 0) {
var logoutLink = links[i];
return logoutLink.nextSibling.textContent.trim();
}
}
return null;
}
function getBugNumbers() {
var bugnumbers = new Array();
var table = document.getElementsByClassName( "bz_buglist" );
if (table.length != 1) {
return bugnumbers;
}
table = table[0];
var rows = table.getElementsByClassName( "bz_bugitem" );
for (var i = 0; i < rows.length; i++) {
bugnumbers.push( rows[i].id.substring( 1 ) );
}
return bugnumbers;
}
function insertBugTags( user, bugnumbers ) {
var reqData = new FormData();
reqData.append( "user", user );
reqData.append( "action", "get" );
reqData.append( "bugs", bugnumbers.join( "," ) );
GM_xmlhttpRequest({
method: "POST",
url: TAGS_SERVER,
data: reqData,
onload: function( res ) {
var response = res.responseJSON;
var rows = document.getElementsByClassName( "bz_buglist" )[0].getElementsByClassName( "bz_bugitem" );
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
var bugnumber = row.id.substring( 1 );
var cell = row.cells[ row.cells.length - 1 ];
var color = 'blue';
var tags = '+';
if (response[ bugnumber ]) {
tags = response[ bugnumber ].join( ", " );
if (tags.charAt( 0 ) == '!') {
tags = tags.substring( 1 );
color = 'red';
}
}
var tag = document.createElement( 'a' );
tag.id = 'bugmash' + bugnumber;
tag.href = '#';
tag.style.fontSize = 'smaller';
tag.style.color = color;
tag.textContent = tags;
tag.addEventListener( 'click', updateBugTag, false );
cell.insertBefore( tag, cell.firstChild );
}
},
onerror: function( res ) {
GM_log( "Error fetching bug tags!" );
GM_log( res.statusText );
GM_log( res.responseText );
}
});
}
function updateBugTag( e ) {
e.preventDefault();
var bugtag = e.target;
var bugnumber = bugtag.id.substring( 7 ); // strip "bugmash"
var tags = bugtag.textContent;
if (tags == '+') {
tags = '';
}
var origColor = bugtag.style.color;
if (origColor == 'red') {
tags = '!' + tags;
}
tags = prompt( "Enter new tags:", tags );
if (tags == null) {
return false;
}
bugtag.style.color = 'yellow';
var reqData = new FormData();
reqData.append( "user", user );
reqData.append( "action", "set" );
reqData.append( "bugs", bugnumber );
reqData.append( "tags", tags );
GM_xmlhttpRequest({
method: "POST",
url: TAGS_SERVER,
data: reqData,
onload: function() {
var color = 'blue';
if (tags.length > 0) {
if (tags.charAt( 0 ) == '!') {
tags = tags.substring( 1 );
color = 'red';
}
bugtag.textContent = tags;
} else {
bugtag.textContent = '+';
}
bugtag.style.color = color;
},
onerror: function() {
bugtag.style.color = origColor;
}
});
}
var user = getUser();
if (user) {
var bugnumbers = getBugNumbers();
if (bugnumbers.length > 0) {
insertBugTags( user, bugnumbers );
}
}