]> source.dussan.org Git - jquery.git/commitdiff
Dimensions: fix computing outerWidth on SVGs
authorJason Bedard <jason+github@jbedard.ca>
Thu, 21 Jun 2018 05:09:29 +0000 (22:09 -0700)
committerGitHub <noreply@github.com>
Thu, 21 Jun 2018 05:09:29 +0000 (22:09 -0700)
Fixes gh-3964
Closes gh-4096

src/css.js
test/unit/dimensions.js

index 19c2f79d15bd42f8602fd96996d709ed7a2cc784..c3afb0ab77825303d43b1169fd54938b15e53058 100644 (file)
@@ -107,7 +107,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
                        delta -
                        extra -
                        0.5
-               ) );
+
+               // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+               // Use an explicit zero to avoid NaN (gh-3964)
+               ) ) || 0;
        }
 
        return delta;
index d7e5533690741b955e4e26fa8e37806a99b66dca..8c7f0752f7e1609f358e7121c1bdc41e24630016 100644 (file)
@@ -352,6 +352,66 @@ QUnit.test( "table dimensions", function( assert ) {
        assert.equal( colElem.width(), 300, "col elements have width(), see #12243" );
 } );
 
+QUnit.test( "SVG dimensions (basic content-box)", function( assert ) {
+       assert.expect( 8 );
+
+       var svg = jQuery( "<svg width='100' height='100'></svg>" ).appendTo( "#qunit-fixture" );
+
+       assert.equal( svg.width(), 100 );
+       assert.equal( svg.height(), 100 );
+
+       assert.equal( svg.innerWidth(), 100 );
+       assert.equal( svg.innerHeight(), 100 );
+
+       assert.equal( svg.outerWidth(), 100 );
+       assert.equal( svg.outerHeight(), 100 );
+
+       assert.equal( svg.outerWidth( true ), 100 );
+       assert.equal( svg.outerHeight( true ), 100 );
+
+       svg.remove();
+} );
+
+QUnit.test( "SVG dimensions (content-box)", function( assert ) {
+       assert.expect( 8 );
+
+       var svg = jQuery( "<svg width='100' height='100' style='box-sizing: content-box; border: 1px solid white; padding: 2px; margin: 3px'></svg>" ).appendTo( "#qunit-fixture" );
+
+       assert.equal( svg.width(), 100 );
+       assert.equal( svg.height(), 100 );
+
+       assert.equal( svg.innerWidth(), 104 );
+       assert.equal( svg.innerHeight(), 104 );
+
+       assert.equal( svg.outerWidth(), 106 );
+       assert.equal( svg.outerHeight(), 106 );
+
+       assert.equal( svg.outerWidth( true ), 112 );
+       assert.equal( svg.outerHeight( true ), 112 );
+
+       svg.remove();
+} );
+
+QUnit.test( "SVG dimensions (border-box)", function( assert ) {
+       assert.expect( 8 );
+
+       var svg = jQuery( "<svg width='100' height='100' style='box-sizing: border-box; border: 1px solid white; padding: 2px; margin: 3px'></svg>" ).appendTo( "#qunit-fixture" );
+
+       assert.equal( svg.width(), 94 );
+       assert.equal( svg.height(), 94 );
+
+       assert.equal( svg.innerWidth(), 98 );
+       assert.equal( svg.innerHeight(), 98 );
+
+       assert.equal( svg.outerWidth(), 100 );
+       assert.equal( svg.outerHeight(), 100 );
+
+       assert.equal( svg.outerWidth( true ), 106 );
+       assert.equal( svg.outerHeight( true ), 106 );
+
+       svg.remove();
+} );
+
 QUnit.test( "box-sizing:border-box child of a hidden elem (or unconnected node) has accurate inner/outer/Width()/Height()  see #10413", function( assert ) {
        assert.expect( 16 );