From 16e93d5189a5aed10df23e85b5d40b14d126eede Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Fri, 27 Aug 2010 12:00:59 -0400 Subject: [PATCH] Core: Fixed .disableSelect() and .enableSelect() in all browsers. Fixes #5723 - disableSelection() doesn't work cross-browser. --- ui/jquery.ui.core.js | 63 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js index 3199e7ff7..364d7b668 100644 --- a/ui/jquery.ui.core.js +++ b/ui/jquery.ui.core.js @@ -73,18 +73,6 @@ $.fn.extend({ this._focus.apply( this, arguments ); }, - enableSelection: function() { - return this - .attr( "unselectable", "off" ) - .css( "MozUserSelect", "" ); - }, - - disableSelection: function() { - return this - .attr( "unselectable", "on" ) - .css( "MozUserSelect", "none" ); - }, - scrollParent: function() { var scrollParent; if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { @@ -130,6 +118,57 @@ $.fn.extend({ } }); +(function() { + var elem = document.createElement( "div" ), + style = elem.style, + userSelectProp = "userSelect" in style && "userSelect"; + + if ( !userSelectProp ) { + $.each( [ "Moz", "Webkit", "Khtml" ], function( i, prefix ) { + var vendorProp = prefix + "UserSelect"; + if ( vendorProp in style ) { + userSelectProp = vendorProp; + return false; + } + }); + } + var selectStart = !userSelectProp && "onselectstart" in elem && "selectstart.mouse"; + + elem = null; + + $.fn.extend({ + disableSelection: function() { + if ( userSelectProp ) { + this.css( userSelectProp, "none" ); + } else { + this.find( "*" ).andSelf().attr( "unselectable", "on" ); + } + + if ( selectStart ) { + this.bind( selectStart, function() { + return false; + }); + } + + return this; + }, + + enableSelection: function() { + if ( userSelectProp ) { + this.css( userSelectProp, "" ); + } else { + this.find( "*" ).andSelf().attr( "unselectable", "off" ); + } + + if ( selectStart ) { + this.unbind( selectStart ); + } + + return this; + } + }); +})(); + $.each( [ "Width", "Height" ], function( i, name ) { var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], type = name.toLowerCase(), -- 2.39.5