reduxframework / redux-framework

Redux is a simple, truly extensible options framework for WordPress themes and plugins!
http://redux.io
Other
1.74k stars 584 forks source link

Bug in Dimension Field #3996

Closed cyberwani closed 8 months ago

cyberwani commented 8 months ago

Hello,

There is a bug in the dimension field. When selecting unit multiple times, it's appending the unit in the dimension value each time. Redux Version: 4.4.14

https://github.com/reduxframework/redux-framework/assets/1647283/9f38adf9-f107-4e67-a2dc-e0e6966b0324

kprovance commented 8 months ago

Please use the beta version on our repo until we can do a release on WotrdPress.org. It's been fixed in that version.

cyberwani commented 8 months ago

Thanks @kprovance for prompt reply. As I can see, the previous change was adding the unit in the value, and if that was the intended implementation, the below change can help with this.

Change from:

el.find( '.redux-dimensions-input' ).on(
    'change',
    function() {
        var units = $( this ).parents( '.redux-field:first' ).find( '.field-units' ).val();

        if ( 0 !== $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units' ).length ) {
            units = $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units option:selected' ).val();
        }

        if ( 'undefined' !== typeof units ) {
            el.find( '#' + $( this ).attr( 'rel' ) ).val( $( this ).val() + units );
        } else {
            el.find( '#' + $( this ).attr( 'rel' ) ).val( $( this ).val() );
        }
    }
);

Change to:

el.find( '.redux-dimensions-input' ).on(
    'change',
    function() {
        var dimension_unit        = $( this ).parents( '.redux-field:first' ).find( '.field-units' ).val(),
            dimention_value   = $( this ).val(),
            dimention_unit_el = $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units' ),
            dimention_units   = dimention_unit_el.children('option').map(function(i, e){
                return e.value || e.innerText;
            }).get();

        if ( 0 !== dimention_unit_el.length ) {
            dimension_unit = $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units option:selected' ).val();
        }

        // Loop through all units, and check and remove every instance of each unit found in dimension value
        dimention_units.forEach(function(unit) {
            var regex = new RegExp(unit, 'g');
            dimention_value = dimention_value.replace(regex, '');
        });
        if ( 'undefined' !== typeof dimension_unit ) {
            el.find( '#' + $( this ).attr( 'rel' ) ).val( dimention_value + dimension_unit );
        } else {
            el.find( '#' + $( this ).attr( 'rel' ) ).val( dimention_value );
        }
    }
);
kprovance commented 8 months ago

I've already fixed it. I'm not sure of the point of this. Also, you didn't single a single piece of information I asked for when you opened the ticket, which is frowned upon. Regardless, this fix is ready