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
|
/* global RPMRemoveMessageListener:false, RPMAddMessageListener:false, RPMSendAsyncMessage:false */
var pktPanelMessaging = {
removeMessageListener(messageId, callback) {
RPMRemoveMessageListener(messageId, callback);
},
addMessageListener(messageId, callback = () => {}) {
RPMAddMessageListener(messageId, callback);
},
sendMessage(messageId, payload = {}, callback) {
if (callback) {
// If we expect something back, we use RPMSendAsyncMessage and not RPMSendQuery.
// Even though RPMSendQuery returns something, our frame could be closed at any moment,
// and we don't want to close a RPMSendQuery promise loop unexpectedly.
// So instead we setup a response event.
const responseMessageId = `${messageId}_response`;
var responseListener = responsePayload => {
callback(responsePayload);
this.removeMessageListener(responseMessageId, responseListener);
};
this.addMessageListener(responseMessageId, responseListener);
}
// Send message
RPMSendAsyncMessage(messageId, payload);
},
// Click helper to reduce bugs caused by oversight
// from different implementations of similar code.
clickHelper(element, { source = "", position }) {
element?.addEventListener(`click`, event => {
event.preventDefault();
this.sendMessage("PKT_openTabWithUrl", {
url: event.currentTarget.getAttribute(`href`),
source,
position,
});
});
},
log() {
RPMSendAsyncMessage("PKT_log", arguments);
},
};
export default pktPanelMessaging;
|