forked from Nick2bad4u/UserStyles
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGithubMarkMergedDone.user.js
More file actions
133 lines (117 loc) · 5.53 KB
/
GithubMarkMergedDone.user.js
File metadata and controls
133 lines (117 loc) · 5.53 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
// ==UserScript==
// @name Mark All Merged Notifications Done
// @namespace typpi.online
// @version 1.7
// @description Marks all merged notifications as "done" on GitHub (client-side) and only shows UI when needed. Includes console logging and error handling.
// @author Nick2bad4u
// @match https://github.com/notifications
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @connect api.github.com
// @license Unlicense
// @tag github
// @icon https://www.google.com/s2/favicons?sz=64&domain=github.com
// @homepageURL https://github.com/Nick2bad4u/UserStyles
// @supportURL https://github.com/Nick2bad4u/UserStyles/issues
//
// @downloadURL https://update.greasyfork.org/scripts/527154/Mark%20All%20Merged%20Notifications%20Done.user.js
// @updateURL https://update.greasyfork.org/scripts/527154/Mark%20All%20Merged%20Notifications%20Done.meta.js
// ==/UserScript==
(function() {
'use strict';
const DONE_BUTTON_SELECTOR = 'button[aria-label="Done"]';
const NOTIFICATION_SELECTOR = '.notifications-list-item';
const MERGED_ICON_SELECTOR = 'svg.octicon-git-merge';
const DELAY_MS = 500; // Delay after each action (adjust as needed)
let markAsDoneButton; // Declare the button outside the function
function addButton() {
try {
markAsDoneButton = document.createElement('button');
markAsDoneButton.textContent = 'Mark All Merged Done';
markAsDoneButton.classList.add('mark-merged-done-button');
markAsDoneButton.addEventListener('click', markAllMergedAsDone);
markAsDoneButton.style.display = 'none'; // Initially hide the button
const notificationsToolbar = document.querySelector('.js-socket-channel.js-updatable-content');
if (notificationsToolbar) {
notificationsToolbar.appendChild(markAsDoneButton);
console.log('Mark All Merged Done button added to notifications toolbar.');
} else {
console.warn('Could not find notifications toolbar. Button may not be visible.');
document.body.appendChild(markAsDoneButton); // Fallback
console.log('Mark All Merged Done button added to document body as fallback.');
}
// Check for merged notifications and show the button if needed
checkForMergedNotifications();
} catch (error) {
console.error('Error in addButton function:', error);
}
}
function checkForMergedNotifications() {
try {
const notifications = document.querySelectorAll(NOTIFICATION_SELECTOR);
let hasMergedNotifications = false;
for (const notification of notifications) {
if (notification.querySelector(MERGED_ICON_SELECTOR)) {
hasMergedNotifications = true;
break; // No need to continue checking
}
}
if (hasMergedNotifications) {
markAsDoneButton.style.display = 'block'; // Show the button
console.log('Merged notifications found. Showing Mark All Merged Done button.');
} else {
markAsDoneButton.style.display = 'none'; // Hide the button
console.log('No merged notifications found. Hiding Mark All Merged Done button.');
}
} catch (error) {
console.error('Error in checkForMergedNotifications function:', error);
}
}
async function markAllMergedAsDone() {
try {
const notifications = document.querySelectorAll(NOTIFICATION_SELECTOR);
console.log(`Found ${notifications.length} notifications.`);
for (const notification of notifications) {
if (notification.querySelector(MERGED_ICON_SELECTOR)) {
console.log('Marking merged notification as done');
const doneButton = notification.querySelector(DONE_BUTTON_SELECTOR);
if (doneButton) {
doneButton.click();
await delay(DELAY_MS); // Wait for the UI to update
// notification.remove(); // Remove the notification after clicking "Done"
} else {
console.warn('Could not find "Done" button for merged notification.');
}
}
}
console.log('Finished processing notifications.');
checkForMergedNotifications(); // Recheck after marking
} catch (error) {
console.error('Error in markAllMergedAsDone function:', error);
}
}
// Helper function to introduce a delay
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const style = document.createElement('style');
document.head.appendChild(style);
style.textContent = `
.mark-merged-done-button {
position: fixed;
bottom: 50px; /* Adjusted bottom position */
right: 10px;
z-index: 999; /* Ensure it's below the other button if necessary */
background-color: #2ea44f; /* Same color as the other script */
color: #ffffff;
border: none;
padding: 10px;
border-radius: 5px;
cursor: pointer;
}
.mark-merged-done-button:hover {
background-color: #79e4f2; /* Same hover color as the other script */
}
`;
window.addEventListener('load', addButton);
})();