-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRODeleteMessages.user.js
83 lines (67 loc) · 2.8 KB
/
RODeleteMessages.user.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
// ==UserScript==
// @name RO Delete Messages
// @namespace https://stackexchange.com/users/305991/jason-c
// @version 1.02
// @description Message delete button for room owners.
// @author Jason C
// @include /^https?:\/\/chat\.meta\.stackexchange\.com\/rooms\/[0-9]+.*$/
// @include /^https?:\/\/chat\.stackexchange\.com\/rooms\/[0-9]+.*$/
// @include /^https?:\/\/chat\.stackoverflow\.com\/rooms\/[0-9]+.*$/
// @grant none
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
// Non-ROs can't use this. Mods already have delete.
if (!CHAT.RoomUsers.current().is_owner || CHAT.RoomUsers.current().is_moderator)
return;
new MutationObserver((ms) => ms.forEach((m) => m.addedNodes.forEach(function (a) {
if (a.classList) {
if (a.classList.contains('message'))
a.setAttribute('data-rodel-timestamp', Date.now());
else if (a.classList.contains('popup') && a.parentNode &&
a.parentNode.classList && a.parentNode.classList.contains('message'))
modifyPopup($(a));
}
}))).observe(document.getElementById('chat'), {
childList: true,
subtree: true
});
function modifyPopup (popup) {
let message = popup.closest('.message');
let timestamp = message.data('rodel-timestamp');
// 2 minute time limit.
if (!timestamp || (Date.now() - timestamp > 2 * 60 * 1000))
return;
// Don't add option if message already deleted.
if ($('.deleted', message).length > 0)
return;
// Don't add option for our own messages.
let userid = parseInt($('a.signature', message.closest('.user-container'))
.attr('href').replace(/[^0-9]+/g, ''));
if (userid === CHAT.CURRENT_USER_ID || !userid)
return;
// We'll need the message ID for the actual request.
let messageid = parseInt(message.attr('id').replace(/[^0-9]+/g, ''));
if (!messageid)
return;
// And finally...
popup
.append(document.createTextNode(' | '))
.append($('<a href="#">delete</a>').click(function () {
deleteMessage(messageid);
popup.remove();
return false;
}));
}
function deleteMessage (messageid) {
if (!window.confirm(`Really delete this message (#${messageid})?`))
return;
$.post(`/messages/${messageid}/delete`, { fkey: $('#fkey').val() }).then(function () {
console.log(`RO Delete: Deleted message ${messageid}.`);
}).fail(function (e) {
console.log(`RO Delete: Failed to delete message ${messageid}.`);
console.error(e);
});
}
})();