From ad11d34ddac33e6af70665dd4951244fc90c5bc7 Mon Sep 17 00:00:00 2001 From: John Clark Date: Thu, 11 Jun 2020 18:04:38 -0400 Subject: [PATCH 1/2] Fixes for large data sets - Don't bind the element if it already exists - Use closest instead of parents and remove each for selectable mouseStart event --- ui/widget.js | 4 +++- ui/widgets/selectable.js | 43 +++++++++++++++++++--------------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/ui/widget.js b/ui/widget.js index 30034f5924e..4b0c7c5a3f7 100644 --- a/ui/widget.js +++ b/ui/widget.js @@ -590,7 +590,9 @@ $.Widget.prototype = { delegateElement = this.widget(); } else { element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); + if ( !this.bindings.find(element).length ) { + this.bindings = this.bindings.add( element ); + } } $.each( handlers, function( event, handler ) { diff --git a/ui/widgets/selectable.js b/ui/widgets/selectable.js index ed980cc493e..213c2376b6c 100644 --- a/ui/widgets/selectable.js +++ b/ui/widgets/selectable.js @@ -139,31 +139,28 @@ return $.widget( "ui.selectable", $.ui.mouse, { } } ); - $( event.target ).parents().addBack().each( function() { - var doSelect, - selectee = $.data( this, "selectable-item" ); - if ( selectee ) { - doSelect = ( !event.metaKey && !event.ctrlKey ) || + var element = $( event.target ).closest( ":data(selectable-item)" ); + if ( element.length ) { + var selectee = element.data( "selectable-item" ), + doSelect = ( !event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass( "ui-selected" ); - that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" ) - ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" ); - selectee.unselecting = !doSelect; - selectee.selecting = doSelect; - selectee.selected = doSelect; - - // selectable (UN)SELECTING callback - if ( doSelect ) { - that._trigger( "selecting", event, { - selecting: selectee.element - } ); - } else { - that._trigger( "unselecting", event, { - unselecting: selectee.element - } ); - } - return false; + that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" ) + ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" ); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + + // selectable (UN)SELECTING callback + if ( doSelect ) { + that._trigger( "selecting", event, { + selecting: selectee.element + }); + } else { + that._trigger( "unselecting", event, { + unselecting: selectee.element + }); } - } ); + } }, From 81621f42e510e5db87e6c612ddfbe6b5373c29aa Mon Sep 17 00:00:00 2001 From: John Clark Date: Fri, 12 Jun 2020 08:58:18 -0400 Subject: [PATCH 2/2] Fixed code spacing issues --- ui/widget.js | 2 +- ui/widgets/selectable.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ui/widget.js b/ui/widget.js index 4b0c7c5a3f7..47d6886ee9f 100644 --- a/ui/widget.js +++ b/ui/widget.js @@ -590,7 +590,7 @@ $.Widget.prototype = { delegateElement = this.widget(); } else { element = delegateElement = $( element ); - if ( !this.bindings.find(element).length ) { + if ( !this.bindings.find( element ).length ) { this.bindings = this.bindings.add( element ); } } diff --git a/ui/widgets/selectable.js b/ui/widgets/selectable.js index 213c2376b6c..959930eb1d0 100644 --- a/ui/widgets/selectable.js +++ b/ui/widgets/selectable.js @@ -142,7 +142,7 @@ return $.widget( "ui.selectable", $.ui.mouse, { var element = $( event.target ).closest( ":data(selectable-item)" ); if ( element.length ) { var selectee = element.data( "selectable-item" ), - doSelect = ( !event.metaKey && !event.ctrlKey) || + doSelect = ( !event.metaKey && !event.ctrlKey ) || !selectee.$element.hasClass( "ui-selected" ); that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" ) ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" ); @@ -154,11 +154,11 @@ return $.widget( "ui.selectable", $.ui.mouse, { if ( doSelect ) { that._trigger( "selecting", event, { selecting: selectee.element - }); + } ); } else { that._trigger( "unselecting", event, { unselecting: selectee.element - }); + } ); } }