@@ -69,44 +69,51 @@ const chatgpt = {
69
69
isMobile = chatgpt . browser . isMobile ( ) ;
70
70
71
71
// 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 ( / ^ (?: | S p a c e | E n t e r | R e t u r n | E s c ) / . 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 ( / ^ (?: | S p a c e | E n t e r | R e t u r n ) / . 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 ( / ^ (?: | S p a c e | E n t e r | R e t u r n | E s c ) / . 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 ( / ^ (?: | S p a c e | E n t e r | R e t u r n ) / . 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
+ } } } }
97
90
} ,
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
103
116
}
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
110
117
}
111
118
}
112
119
@@ -277,9 +284,9 @@ const chatgpt = {
277
284
278
285
// Add listeners
279
286
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
283
290
284
291
// Define alert dismisser
285
292
const dismissAlert = ( ) => {
@@ -292,7 +299,7 @@ const chatgpt = {
292
299
alertQueue = JSON . parse ( localStorage . alertQueue ) ;
293
300
alertQueue . shift ( ) ; // + memory
294
301
localStorage . alertQueue = JSON . stringify ( alertQueue ) ; // + storage
295
- document . removeEventListener ( 'keydown' , keyHandler ) ; // prevent memory leaks
302
+ document . removeEventListener ( 'keydown' , handlers . dismiss . key ) ; // prevent memory leaks
296
303
297
304
// Check for pending alerts in queue
298
305
if ( alertQueue . length > 0 ) {
0 commit comments