Skip to content

Commit 0d4c760

Browse files
committed
Moved chatgpt.alert() event handlers into obj for readability ↞ [auto-sync from https://github.com/KudoAI/chatgpt.js]
1 parent 4ab79c2 commit 0d4c760

File tree

1 file changed

+47
-40
lines changed

1 file changed

+47
-40
lines changed

starters/chrome/extension/lib/chatgpt.js

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -69,44 +69,51 @@ const chatgpt = {
6969
isMobile = chatgpt.browser.isMobile();
7070

7171
// Define event handlers
72-
const clickHandler = event => { // explicitly defined to support removal post-dismissal
73-
if (event.target == event.currentTarget || event.target.closest('[class*="-close-btn]')) dismissAlert() }
74-
const keyHandler = event => { // to dismiss active alert
75-
if (/^(?: |Space|Enter|Return|Esc)/.test(event.key) || [32, 13, 27].includes(event.keyCode)) {
76-
for (const alertId of alertQueue) { // look to handle only if triggering alert is active
77-
const alert = document.getElementById(alertId)
78-
if (alert && alert.style.display !== 'none') { // active alert found
79-
if (event.key.includes('Esc') || event.keyCode == 27) // esc pressed
80-
dismissAlert() // dismiss alert & do nothing
81-
else if (/^(?: |Space|Enter|Return)/.test(event.key) || [32, 13].includes(event.keyCode)) {
82-
const mainButton = alert.querySelector('.modal-buttons').lastChild // look for main button
83-
if (mainButton) { mainButton.click() ; event.preventDefault() } // click if found
84-
} return
85-
}}}}
86-
const dragHandlers = {
87-
mousedown(event) { // find modal, attach listeners, init XY offsets
88-
if (event.button != 0) return // prevent non-left-click drag
89-
if (getComputedStyle(event.target).cursor == 'pointer') return // prevent drag on interactive elems
90-
chatgpt.draggableElem = event.currentTarget
91-
chatgpt.draggableElem.style.cursor = 'grabbing'
92-
event.preventDefault(); // prevent sub-elems like icons being draggable
93-
['mousemove', 'mouseup'].forEach(event => document.addEventListener(event, dragHandlers[event]))
94-
const draggableElemRect = chatgpt.draggableElem.getBoundingClientRect()
95-
dragHandlers.offsetX = event.clientX - draggableElemRect.left +21
96-
dragHandlers.offsetY = event.clientY - draggableElemRect.top +12
72+
const handlers = {
73+
dismiss: {
74+
click(event) {
75+
if (event.target == event.currentTarget || event.target.closest('[class*="-close-btn]'))
76+
dismissAlert()
77+
},
78+
key(event) {
79+
if (/^(?: |Space|Enter|Return|Esc)/.test(event.key) || [32, 13, 27].includes(event.keyCode)) {
80+
for (const alertId of alertQueue) { // look to handle only if triggering alert is active
81+
const alert = document.getElementById(alertId)
82+
if (alert && alert.style.display !== 'none') { // active alert found
83+
if (event.key.includes('Esc') || event.keyCode == 27) // esc pressed
84+
dismissAlert() // dismiss alert & do nothing
85+
else if (/^(?: |Space|Enter|Return)/.test(event.key) || [32, 13].includes(event.keyCode)) {
86+
const mainButton = alert.querySelector('.modal-buttons').lastChild // look for main button
87+
if (mainButton) { mainButton.click() ; event.preventDefault() } // click if found
88+
} return
89+
}}}}
9790
},
98-
mousemove(event) { // drag modal
99-
if (chatgpt.draggableElem) {
100-
const newX = event.clientX - dragHandlers.offsetX,
101-
newY = event.clientY - dragHandlers.offsetY
102-
Object.assign(chatgpt.draggableElem.style, { left: `${newX}px`, top: `${newY}px` })
91+
92+
drag: {
93+
mousedown(event) { // find modal, attach listeners, init XY offsets
94+
if (event.button != 0) return // prevent non-left-click drag
95+
if (getComputedStyle(event.target).cursor == 'pointer') return // prevent drag on interactive elems
96+
chatgpt.draggableElem = event.currentTarget
97+
chatgpt.draggableElem.style.cursor = 'grabbing'
98+
event.preventDefault(); // prevent sub-elems like icons being draggable
99+
['mousemove', 'mouseup'].forEach(event => document.addEventListener(event, handlers.drag[event]))
100+
const draggableElemRect = chatgpt.draggableElem.getBoundingClientRect()
101+
handlers.drag.offsetX = event.clientX - draggableElemRect.left +21
102+
handlers.drag.offsetY = event.clientY - draggableElemRect.top +12
103+
},
104+
mousemove(event) { // drag modal
105+
if (chatgpt.draggableElem) {
106+
const newX = event.clientX - handlers.drag.offsetX,
107+
newY = event.clientY - handlers.drag.offsetY
108+
Object.assign(chatgpt.draggableElem.style, { left: `${newX}px`, top: `${newY}px` })
109+
}
110+
},
111+
mouseup() { // remove listeners, reset chatgpt.draggableElem
112+
chatgpt.draggableElem.style.cursor = 'inherit';
113+
['mousemove', 'mouseup'].forEach(event =>
114+
document.removeEventListener(event, handlers.drag[event]))
115+
chatgpt.draggableElem = null
103116
}
104-
},
105-
mouseup() { // remove listeners, reset chatgpt.draggableElem
106-
chatgpt.draggableElem.style.cursor = 'inherit';
107-
['mousemove', 'mouseup'].forEach(event =>
108-
document.removeEventListener(event, dragHandlers[event]))
109-
chatgpt.draggableElem = null
110117
}
111118
}
112119

@@ -277,9 +284,9 @@ const chatgpt = {
277284

278285
// Add listeners
279286
const dismissElems = [modalContainer, closeBtn, closeSVG, dismissBtn];
280-
dismissElems.forEach(elem => elem.onclick = clickHandler);
281-
document.addEventListener('keydown', keyHandler);
282-
modal.onmousedown = dragHandlers.mousedown // enable click-dragging
287+
dismissElems.forEach(elem => elem.onclick = handlers.dismiss.click);
288+
document.addEventListener('keydown', handlers.dismiss.key);
289+
modal.onmousedown = handlers.drag.mousedown // enable click-dragging
283290

284291
// Define alert dismisser
285292
const dismissAlert = () => {
@@ -292,7 +299,7 @@ const chatgpt = {
292299
alertQueue = JSON.parse(localStorage.alertQueue);
293300
alertQueue.shift(); // + memory
294301
localStorage.alertQueue = JSON.stringify(alertQueue); // + storage
295-
document.removeEventListener('keydown', keyHandler); // prevent memory leaks
302+
document.removeEventListener('keydown', handlers.dismiss.key); // prevent memory leaks
296303

297304
// Check for pending alerts in queue
298305
if (alertQueue.length > 0) {

0 commit comments

Comments
 (0)