Bug Tracker

Ticket #7345: 7345.patch

File 7345.patch, 1.9 KB (added by brandon, 11 years ago)

Patch + tests

  • src/css.js

    diff --git src/css.js src/css.js
    index 30cecf3..878dd66 100644
    var ralpha = /alpha\([^)]*\)/i, 
    66        rupper = /([A-Z])/g,
    77        rnumpx = /^-?\d+(?:px)?$/i,
    88        rnum = /^-?\d/,
     9        rrelnum = /^([+\-]=)?([\d+.\-]+)(.*)$/,
    910
    1011        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
    1112        cssWidth = [ "Left", "Right" ],
    jQuery.extend({ 
    9192                                value += "px";
    9293                        }
    9394
     95                        if ( typeof value === "string" ) {
     96                                var parts = rrelnum.exec( value );
     97                                if ( parts && parts[1] ) {
     98                                        var relVal = parseFloat( parts[2] );
     99                                        value = ( ( parts[1] === "-=" ? -1 : 1 ) * relVal ) + jQuery.css( elem, name );
     100                                }
     101                        }
     102
    94103                        // If a hook was provided, use that value, otherwise just set the specified value
    95104                        if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
    96105                                // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
  • test/unit/css.js

    diff --git test/unit/css.js test/unit/css.js
    index 4ec7c60..c3fcae5 100644
    test("css(String|Hash)", function() { 
    103103        equals( child[0].style.fontSize, old, "Make sure font-size isn't changed on null." );
    104104});
    105105
     106test("css(String, String|Object) with relative values", function() {
     107        var $elem = jQuery('#nothiddendiv');
     108        $elem.css({ width: 1, height: 1 });
     109        ok( [$elem.width(), $elem.height()], [1,1] );
     110        $elem.css({ width: "+=9", height: "+=9" });
     111        ok( [$elem.width(), $elem.height()], [10,10] );
     112        $elem.css({ width: "-=9", height: "-=9" });
     113        ok( [$elem.width(), $elem.height()], [1,1] );
     114        $elem.css({ width: "+=9px", height: "+=9px" });
     115        ok( [$elem.width(), $elem.height()], [10,10] );
     116        $elem.css({ width: "-=9px", height: "-=9px" });
     117        ok( [$elem.width(), $elem.height()], [1,1] );
     118        $elem.css("width", "+=9").css("height", "+=9");
     119        ok( [$elem.width(), $elem.height()], [10,10] );
     120});
     121
    106122test("css(String, Object)", function() {
    107123        expect(22);
    108124