@@ -138,12 +138,12 @@ export class LionButton extends DisabledWithTabIndexMixin(
138138
139139 connectedCallback ( ) {
140140 super . connectedCallback ( ) ;
141- this . __setupDelegation ( ) ;
141+ this . __setupEvents ( ) ;
142142 }
143143
144144 disconnectedCallback ( ) {
145145 super . disconnectedCallback ( ) ;
146- this . __teardownDelegation ( ) ;
146+ this . __teardownEvents ( ) ;
147147 }
148148
149149 _redispatchClickEvent ( oldEvent ) {
@@ -180,42 +180,50 @@ export class LionButton extends DisabledWithTabIndexMixin(
180180 this . addEventListener ( 'click' , this . __clickDelegationHandler , true ) ;
181181 }
182182
183- __setupDelegation ( ) {
184- this . addEventListener ( 'mousedown' , this . __mousedownDelegationHandler ) ;
185- this . addEventListener ( 'mouseup' , this . __mouseupDelegationHandler ) ;
186- this . addEventListener ( 'keydown' , this . __keydownDelegationHandler ) ;
187- this . addEventListener ( 'keyup' , this . __keyupDelegationHandler ) ;
183+ __setupEvents ( ) {
184+ this . addEventListener ( 'mousedown' , this . __mousedownHandler ) ;
185+ this . addEventListener ( 'keydown' , this . __keydownHandler ) ;
186+ this . addEventListener ( 'keyup' , this . __keyupHandler ) ;
188187 }
189188
190- __teardownDelegation ( ) {
191- this . removeEventListener ( 'mousedown' , this . __mousedownDelegationHandler ) ;
192- this . removeEventListener ( 'mouseup' , this . __mouseupDelegationHandler ) ;
193- this . removeEventListener ( 'keydown' , this . __keydownDelegationHandler ) ;
194- this . removeEventListener ( 'keyup' , this . __keyupDelegationHandler ) ;
189+ __teardownEvents ( ) {
190+ this . removeEventListener ( 'mousedown' , this . __mousedownHandler ) ;
191+ this . removeEventListener ( 'keydown' , this . __keydownHandler ) ;
192+ this . removeEventListener ( 'keyup' , this . __keyupHandler ) ;
195193 }
196194
197- __mousedownDelegationHandler ( ) {
195+ __mousedownHandler ( ) {
198196 this . active = true ;
197+ const mouseupHandler = ( ) => {
198+ this . active = false ;
199+ document . removeEventListener ( 'mouseup' , mouseupHandler ) ;
200+ } ;
201+ document . addEventListener ( 'mouseup' , mouseupHandler ) ;
199202 }
200203
201- __mouseupDelegationHandler ( ) {
202- this . active = false ;
203- }
204-
205- __keydownDelegationHandler ( e ) {
206- if ( e . keyCode === 32 /* space */ || e . keyCode === 13 /* enter */ ) {
207- e . preventDefault ( ) ;
208- this . active = true ;
204+ __keydownHandler ( e ) {
205+ if ( ! this . __isKeyboardClickEvent ( e ) ) {
206+ return ;
209207 }
208+ this . active = true ;
209+ const keyupHandler = keyupEvent => {
210+ if ( this . __isKeyboardClickEvent ( keyupEvent ) ) {
211+ this . active = false ;
212+ document . removeEventListener ( 'keyup' , keyupHandler , true ) ;
213+ }
214+ } ;
215+ document . addEventListener ( 'keyup' , keyupHandler , true ) ;
210216 }
211217
212- __keyupDelegationHandler ( e ) {
213- // Makes the real button the trigger in forms (will submit form, as opposed to paper-button)
214- // and make click handlers on button work on space and enter
215- if ( e . keyCode === 32 /* space */ || e . keyCode === 13 /* enter */ ) {
216- e . preventDefault ( ) ;
217- this . active = false ;
218+ __keyupHandler ( e ) {
219+ if ( this . __isKeyboardClickEvent ( e ) ) {
220+ // redispatch click
218221 this . shadowRoot . querySelector ( '.click-area' ) . click ( ) ;
219222 }
220223 }
224+
225+ // eslint-disable-next-line class-methods-use-this
226+ __isKeyboardClickEvent ( e ) {
227+ return e . keyCode === 32 /* space */ || e . keyCode === 13 /* enter */ ;
228+ }
221229}
0 commit comments