" )
- .css( {
- width: "200px",
- height: "200px",
- padding: "10px",
- border: "5px",
- borderStyle: "solid",
- margin: "20px"
- } )
- .appendTo( "#resizable1" ),
- element = $( "#resizable1" ).css( { overflow: "auto", transform: "scale(1.5)" } ).resizable(),
- handle = ".ui-resizable-se";
+ // Both scrollbars
+ var widthBefore, heightBefore,
+ elementContent = $( "
" )
+ .css( {
+ width: "200px",
+ height: "200px",
+ padding: "10px",
+ border: "5px",
+ borderStyle: "solid",
+ margin: "20px"
+ } )
+ .appendTo( "#resizable1" ),
+ element = $( "#resizable1" ).css( { overflow: "auto", transform: "scale(1.5)" } ).resizable(),
+ handle = ".ui-resizable-se";
// In some browsers scrollbar may change element size (when "box-sizing: content-box")
- var widthBefore = element.innerWidth();
- var heightBefore = element.innerHeight();
+ widthBefore = element.innerWidth();
+ heightBefore = element.innerHeight();
testHelper.drag( handle, 10, 10 );
assert.equal( parseFloat( element.innerWidth() ), widthBefore + 10, "element width (both scrollbars)" );
assert.equal( parseFloat( element.innerHeight() ), heightBefore + 10, "element height (both scrollbars)" );
- //Single (vertical) scrollbar.
+ // Single (vertical) scrollbar.
elementContent.css( "width", "50px" );
testHelper.drag( handle, 10, 10 );
diff --git a/ui/widgets/resizable.js b/ui/widgets/resizable.js
index 354a7516890..6f1e0ebdecb 100644
--- a/ui/widgets/resizable.js
+++ b/ui/widgets/resizable.js
@@ -80,7 +80,10 @@ $.widget( "ui.resizable", $.ui.mouse, {
_hasScroll: function( el, a ) {
- var overflow = $( el ).css( "overflow" );
+ var scroll,
+ has = false,
+ overflow = $( el ).css( "overflow" );
+
if ( overflow === "hidden" ) {
return false;
}
@@ -88,8 +91,7 @@ $.widget( "ui.resizable", $.ui.mouse, {
return true;
}
- var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
- has = false;
+ scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop";
if ( el[ scroll ] > 0 ) {
return true;
@@ -366,7 +368,7 @@ $.widget( "ui.resizable", $.ui.mouse, {
_mouseStart: function( event ) {
- var curleft, curtop, cursor,
+ var curleft, curtop, cursor, calculatedSize,
o = this.options,
el = this.element;
@@ -385,7 +387,6 @@ $.widget( "ui.resizable", $.ui.mouse, {
this.offset = this.helper.offset();
this.position = { left: curleft, top: curtop };
- var calculatedSize = undefined;
if ( !this._helper ) {
calculatedSize = this._calculateAdjustedElementDimensions( el );
}
@@ -700,7 +701,8 @@ $.widget( "ui.resizable", $.ui.mouse, {
},
_calculateAdjustedElementDimensions: function( element ) {
- var ce = element.get( 0 );
+ var elWidth, elHeight, paddingBorder,
+ ce = element.get( 0 );
if ( element.css( "box-sizing" ) !== "content-box" ||
( !this._hasScroll( ce ) && !this._hasScroll( ce, "left" ) ) ) {
@@ -711,10 +713,10 @@ $.widget( "ui.resizable", $.ui.mouse, {
}
// Check if CSS inline styles are set and use those (usually from previous resizes)
- var elWidth = parseFloat( ce.style.width );
- var elHeight = parseFloat( ce.style.height );
+ elWidth = parseFloat( ce.style.width );
+ elHeight = parseFloat( ce.style.height );
- var paddingBorder = this._getPaddingPlusBorderDimensions( element );
+ paddingBorder = this._getPaddingPlusBorderDimensions( element );
elWidth = isNaN( elWidth ) ?
this._getElementTheoreticalSize( element, paddingBorder, "width" ) :
elWidth;
@@ -737,7 +739,8 @@ $.widget( "ui.resizable", $.ui.mouse, {
0.5
// If offsetWidth/offsetHeight is unknown, then we can't determine theoretical size.
- // Use an explicit zero to avoid NaN (gh-3964)
+ // Use an explicit zero to avoid NaN.
+ // See https://github.com/jquery/jquery/issues/3964
) ) || 0;
return size;
@@ -1097,9 +1100,8 @@ $.ui.plugin.add( "resizable", "alsoResize", {
o = that.options;
$( o.alsoResize ).each( function() {
- var el = $( this );
-
- var elSize = that._calculateAdjustedElementDimensions( el );
+ var el = $( this ),
+ elSize = that._calculateAdjustedElementDimensions( el );
el.data( "ui-resizable-alsoresize", {
width: elSize.width, height: elSize.height,
From 6dd4bf730c41d6005dac8b88670c89cbd607056b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Garc=C3=ADa?=
<93217193+Daniel-Garmig@users.noreply.github.com>
Date: Sat, 7 Sep 2024 20:10:11 +0200
Subject: [PATCH 8/9] Changed test cases to use a generic function.
---
tests/unit/resizable/core.js | 102 ++++----------------------------
tests/unit/resizable/options.js | 43 ++++----------
2 files changed, 25 insertions(+), 120 deletions(-)
diff --git a/tests/unit/resizable/core.js b/tests/unit/resizable/core.js
index 0b7bfa2a8a4..a9f21ab4bf5 100644
--- a/tests/unit/resizable/core.js
+++ b/tests/unit/resizable/core.js
@@ -246,107 +246,28 @@ QUnit.test( "nested resizable", function( assert ) {
QUnit.test( "Resizable with scrollbars and box-sizing: border-box", function( assert ) {
assert.expect( 4 );
-
- $( "" ).appendTo( "#qunit-fixture" );
-
- // Both scrollbars
- var elementContent = $( "
" )
- .css( {
- width: "200px",
- height: "200px",
- padding: "10px",
- border: "5px",
- borderStyle: "solid",
- margin: "20px"
- } )
- .appendTo( "#resizable1" ),
- element = $( "#resizable1" ).css( "overflow", "auto" ).resizable(),
- handle = ".ui-resizable-se";
-
- testHelper.drag( handle, 10, 10 );
- assert.equal( element.width(), 110, "element width (both scrollbars)" );
- assert.equal( element.height(), 110, "element height (both scrollbars)" );
-
- // Single (vertical) scrollbar.
- elementContent.css( "width", "50px" );
- testHelper.drag( handle, 10, 10 );
- assert.equal( element.width(), 120, "element width (only vertical scrollbar)" );
- assert.equal( element.height(), 120, "element height (only vertical scrollbar)" );
+ testResizableWithBoxSizing( assert, true, false );
} );
QUnit.test( "Resizable with scrollbars and box-sizing: content-box", function( assert ) {
assert.expect( 4 );
-
- $( "" ).appendTo( "#qunit-fixture" );
-
- // Both scrollbars
- var widthBefore, heightBefore,
- elementContent = $( "
" )
- .css( {
- width: "200px",
- height: "200px",
- padding: "10px",
- border: "5px",
- borderStyle: "solid",
- margin: "20px"
- } )
- .appendTo( "#resizable1" ),
- element = $( "#resizable1" ).css( "overflow", "auto" ).resizable(),
- handle = ".ui-resizable-se";
-
- // In some browsers scrollbar may change element size (when "box-sizing: content-box")
- widthBefore = element.innerWidth();
- heightBefore = element.innerHeight();
-
- testHelper.drag( handle, 10, 10 );
- assert.equal( parseFloat( element.innerWidth() ), widthBefore + 10, "element width (both scrollbars)" );
- assert.equal( parseFloat( element.innerHeight() ), heightBefore + 10, "element height (both scrollbars)" );
-
- // Single (vertical) scrollbar.
- elementContent.css( "width", "50px" );
-
- testHelper.drag( handle, 10, 10 );
- assert.equal( parseFloat( element.innerWidth() ), widthBefore + 20, "element width (only vertical scrollbar)" );
- assert.equal( parseFloat( element.innerHeight() ), heightBefore + 20, "element height (only vertical scrollbar)" );
+ testResizableWithBoxSizing( assert, false, false );
} );
QUnit.test( "Resizable with scrollbars, a transform and box-sizing: border-box", function( assert ) {
assert.expect( 4 );
-
- $( "" ).appendTo( "#qunit-fixture" );
-
- // Both scrollbars
- var elementContent = $( "
" )
- .css( {
- width: "200px",
- height: "200px",
- padding: "10px",
- border: "5px",
- borderStyle: "solid",
- margin: "20px"
- } )
- .appendTo( "#resizable1" ),
- element = $( "#resizable1" ).css( { overflow: "auto", transform: "scale(1.5)" } ).resizable(),
- handle = ".ui-resizable-se";
-
- testHelper.drag( handle, 10, 10 );
- assert.equal( element.width(), 110, "element width (both scrollbars)" );
- assert.equal( element.height(), 110, "element height (both scrollbars)" );
-
- // Single (vertical) scrollbar.
- elementContent.css( "width", "50px" );
- testHelper.drag( handle, 10, 10 );
- assert.equal( element.width(), 120, "element width (only vertical scrollbar)" );
- assert.equal( element.height(), 120, "element height (only vertical scrollbar)" );
+ testResizableWithBoxSizing( assert, true, true );
} );
QUnit.test( "Resizable with scrollbars, a transform and box-sizing: content-box", function( assert ) {
assert.expect( 4 );
+ testResizableWithBoxSizing( assert, false, true );
+} );
- $( "" ).appendTo( "#qunit-fixture" );
-
- // Both scrollbars
+function testResizableWithBoxSizing( assert, isBorderBox, applyScaleTransform ) {
var widthBefore, heightBefore,
+ cssBoxSizing = isBorderBox ? "border-box" : "content-box",
+ cssTrasform = applyScaleTransform ? "scale(1.5)" : "",
elementContent = $( "
" )
.css( {
width: "200px",
@@ -357,13 +278,16 @@ QUnit.test( "Resizable with scrollbars, a transform and box-sizing: content-box"
margin: "20px"
} )
.appendTo( "#resizable1" ),
- element = $( "#resizable1" ).css( { overflow: "auto", transform: "scale(1.5)" } ).resizable(),
+ element = $( "#resizable1" ).css( { overflow: "auto", transform: cssTrasform } ).resizable(),
handle = ".ui-resizable-se";
+ $( "" ).appendTo( "#qunit-fixture" );
+
// In some browsers scrollbar may change element size (when "box-sizing: content-box")
widthBefore = element.innerWidth();
heightBefore = element.innerHeight();
+ // Both scrollbars
testHelper.drag( handle, 10, 10 );
assert.equal( parseFloat( element.innerWidth() ), widthBefore + 10, "element width (both scrollbars)" );
assert.equal( parseFloat( element.innerHeight() ), heightBefore + 10, "element height (both scrollbars)" );
@@ -374,6 +298,6 @@ QUnit.test( "Resizable with scrollbars, a transform and box-sizing: content-box"
testHelper.drag( handle, 10, 10 );
assert.equal( parseFloat( element.innerWidth() ), widthBefore + 20, "element width (only vertical scrollbar)" );
assert.equal( parseFloat( element.innerHeight() ), heightBefore + 20, "element height (only vertical scrollbar)" );
-} );
+}
} );
diff --git a/tests/unit/resizable/options.js b/tests/unit/resizable/options.js
index 09fd6b21455..a889fdca387 100644
--- a/tests/unit/resizable/options.js
+++ b/tests/unit/resizable/options.js
@@ -568,39 +568,18 @@ QUnit.test( "alsoResize with box-sizing: border-box", function( assert ) {
QUnit.test( "alsoResize with scrollbars and box-sizing: border-box", function( assert ) {
assert.expect( 4 );
-
- $( "" ).appendTo( "#qunit-fixture" );
-
- var other = $( "
" )
- .css( {
- width: "150px",
- height: "150px",
- padding: "10px",
- border: "5px",
- borderStyle: "solid",
- margin: "25px",
- overflow: "scroll"
- } )
- .appendTo( "#qunit-fixture" ),
- element = $( "#resizable1" ).resizable( {
- alsoResize: other
- } ),
- handle = ".ui-resizable-se";
-
- testHelper.drag( handle, 80, 80 );
-
- assert.equal( element.width(), 180, "resizable width" );
- assert.equal( parseFloat( other.css( "width" ) ), 230, "alsoResize width" );
- assert.equal( element.height(), 180, "resizable height" );
- assert.equal( parseFloat( other.css( "height" ) ), 230, "alsoResize height" );
+ testAlsoResizeWithBoxSizing( assert, true );
} );
QUnit.test( "alsoResize with scrollbars and box-sizing: content-box", function( assert ) {
assert.expect( 4 );
+ testAlsoResizeWithBoxSizing( assert, false );
+} );
- $( "" ).appendTo( "#qunit-fixture" );
-
- var other = $( "
" )
+function testAlsoResizeWithBoxSizing( assert, isBorderBox ) {
+ var widthBefore, heightBefore,
+ cssBoxSizing = isBorderBox ? "border-box" : "content-box",
+ other = $( "
" )
.css( {
width: "150px",
height: "150px",
@@ -616,9 +595,11 @@ QUnit.test( "alsoResize with scrollbars and box-sizing: content-box", function(
} ),
handle = ".ui-resizable-se";
+ $( "" ).appendTo( "#qunit-fixture" );
+
// In some browsers scrollbar may change element computed size.
- var widthBefore = other.innerWidth();
- var heightBefore = other.innerHeight();
+ widthBefore = other.innerWidth();
+ heightBefore = other.innerHeight();
testHelper.drag( handle, 80, 80 );
@@ -626,6 +607,6 @@ QUnit.test( "alsoResize with scrollbars and box-sizing: content-box", function(
assert.equal( parseFloat( other.innerWidth() ), widthBefore + 80, "alsoResize width" );
assert.equal( element.height(), 180, "resizable height" );
assert.equal( parseFloat( other.innerHeight() ), heightBefore + 80, "alsoResize height" );
-} );
+}
} );
From 1de85547bd7fe10a39c68efc562728f93d6415d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Garc=C3=ADa?=
<93217193+Daniel-Garmig@users.noreply.github.com>
Date: Sun, 8 Sep 2024 14:14:57 +0200
Subject: [PATCH 9/9] Fixed boolean traps.
---
tests/unit/resizable/core.js | 28 ++++++++++++++++++++--------
tests/unit/resizable/options.js | 12 ++++++++----
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/tests/unit/resizable/core.js b/tests/unit/resizable/core.js
index a9f21ab4bf5..b47f0b645f4 100644
--- a/tests/unit/resizable/core.js
+++ b/tests/unit/resizable/core.js
@@ -246,28 +246,40 @@ QUnit.test( "nested resizable", function( assert ) {
QUnit.test( "Resizable with scrollbars and box-sizing: border-box", function( assert ) {
assert.expect( 4 );
- testResizableWithBoxSizing( assert, true, false );
+ testResizableWithBoxSizing( assert, {
+ isBorderBox: true,
+ applyScaleTransform: false
+ } );
} );
QUnit.test( "Resizable with scrollbars and box-sizing: content-box", function( assert ) {
assert.expect( 4 );
- testResizableWithBoxSizing( assert, false, false );
+ testResizableWithBoxSizing( assert, {
+ isBorderBox: false,
+ applyScaleTransform: false
+ } );
} );
QUnit.test( "Resizable with scrollbars, a transform and box-sizing: border-box", function( assert ) {
assert.expect( 4 );
- testResizableWithBoxSizing( assert, true, true );
+ testResizableWithBoxSizing( assert, {
+ isBorderBox: true,
+ applyScaleTransform: true
+ } );
} );
QUnit.test( "Resizable with scrollbars, a transform and box-sizing: content-box", function( assert ) {
assert.expect( 4 );
- testResizableWithBoxSizing( assert, false, true );
+ testResizableWithBoxSizing( assert, {
+ isBorderBox: false,
+ applyScaleTransform: true
+ } );
} );
-function testResizableWithBoxSizing( assert, isBorderBox, applyScaleTransform ) {
+function testResizableWithBoxSizing( assert, options ) {
var widthBefore, heightBefore,
- cssBoxSizing = isBorderBox ? "border-box" : "content-box",
- cssTrasform = applyScaleTransform ? "scale(1.5)" : "",
+ cssBoxSizing = options.isBorderBox ? "border-box" : "content-box",
+ cssTransform = options.applyScaleTransform ? "scale(1.5)" : "",
elementContent = $( "
" )
.css( {
width: "200px",
@@ -278,7 +290,7 @@ function testResizableWithBoxSizing( assert, isBorderBox, applyScaleTransform )
margin: "20px"
} )
.appendTo( "#resizable1" ),
- element = $( "#resizable1" ).css( { overflow: "auto", transform: cssTrasform } ).resizable(),
+ element = $( "#resizable1" ).css( { overflow: "auto", transform: cssTransform } ).resizable(),
handle = ".ui-resizable-se";
$( "" ).appendTo( "#qunit-fixture" );
diff --git a/tests/unit/resizable/options.js b/tests/unit/resizable/options.js
index a889fdca387..b80c051d588 100644
--- a/tests/unit/resizable/options.js
+++ b/tests/unit/resizable/options.js
@@ -568,17 +568,21 @@ QUnit.test( "alsoResize with box-sizing: border-box", function( assert ) {
QUnit.test( "alsoResize with scrollbars and box-sizing: border-box", function( assert ) {
assert.expect( 4 );
- testAlsoResizeWithBoxSizing( assert, true );
+ testAlsoResizeWithBoxSizing( assert, {
+ isBorderBox: true
+ } );
} );
QUnit.test( "alsoResize with scrollbars and box-sizing: content-box", function( assert ) {
assert.expect( 4 );
- testAlsoResizeWithBoxSizing( assert, false );
+ testAlsoResizeWithBoxSizing( assert, {
+ isBorderBox: false
+ } );
} );
-function testAlsoResizeWithBoxSizing( assert, isBorderBox ) {
+function testAlsoResizeWithBoxSizing( assert, options ) {
var widthBefore, heightBefore,
- cssBoxSizing = isBorderBox ? "border-box" : "content-box",
+ cssBoxSizing = options.isBorderBox ? "border-box" : "content-box",
other = $( "
" )
.css( {
width: "150px",