jenkins-bot has submitted this change and it was merged.

Change subject: SelectWidget: Prevent mouse highlighting while typing-to-select
......................................................................


SelectWidget: Prevent mouse highlighting while typing-to-select

Chromium's Blink engine will generate spurious 'mouseover' events during
programmatic scrolling and around 100-150 ms after it is finished.
I am pretty sure this violates some specs, but I don't really feel
like spec-lawyering with its developers.

I miss the times when the only browser with broken event handling was IE 6.

Bug: T125740
Change-Id: I4b95935027cec699c0460f4ddf1fb9f6b3c97064
---
M src/widgets/SelectWidget.js
1 file changed, 23 insertions(+), 3 deletions(-)

Approvals:
  Esanders: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/src/widgets/SelectWidget.js b/src/widgets/SelectWidget.js
index 2f76744..1c292b2 100644
--- a/src/widgets/SelectWidget.js
+++ b/src/widgets/SelectWidget.js
@@ -60,6 +60,7 @@
        this.onKeyPressHandler = this.onKeyPress.bind( this );
        this.keyPressBuffer = '';
        this.keyPressBufferTimer = null;
+       this.blockMouseOverEvents = 0;
 
        // Events
        this.connect( this, {
@@ -222,7 +223,9 @@
  */
 OO.ui.SelectWidget.prototype.onMouseOver = function ( e ) {
        var item;
-
+       if ( this.blockMouseOverEvents ) {
+               return;
+       }
        if ( !this.isDisabled() ) {
                item = this.getTargetItem( e );
                this.highlightItem( item && item.isHighlightable() ? item : 
null );
@@ -293,7 +296,7 @@
                        } else {
                                this.chooseItem( nextItem );
                        }
-                       nextItem.scrollElementIntoView();
+                       this.scrollItemIntoView( nextItem );
                }
 
                if ( handled ) {
@@ -319,6 +322,23 @@
  */
 OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
        this.getElementWindow().removeEventListener( 'keydown', 
this.onKeyDownHandler, true );
+};
+
+/**
+ * Scroll item into view, preventing spurious mouse highlight actions from 
happening.
+ *
+ * @return {OO.ui.OptionWidget} Item to scroll into view
+ */
+OO.ui.SelectWidget.prototype.scrollItemIntoView = function ( item ) {
+       var widget = this;
+       // Chromium's Blink engine will generate spurious 'mouseover' events 
during programmatic scrolling
+       // and around 100-150 ms after it is finished.
+       this.blockMouseOverEvents++;
+       item.scrollElementIntoView().done( function () {
+               setTimeout( function () {
+                       widget.blockMouseOverEvents--;
+               }, 200 );
+       } );
 };
 
 /**
@@ -383,7 +403,7 @@
                } else {
                        this.chooseItem( item );
                }
-               item.scrollElementIntoView();
+               this.scrollItemIntoView( item );
        }
 
        e.preventDefault();

-- 
To view, visit https://gerrit.wikimedia.org/r/269157
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I4b95935027cec699c0460f4ddf1fb9f6b3c97064
Gerrit-PatchSet: 7
Gerrit-Project: oojs/ui
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: Prtksxna <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to