@@ -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 ( / ^ (?: | 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+ } } } }
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