lubuntu.me/plugins/so-widgets-bundle/base/inc/fields/js/multi-measurement-field.js
2018-01-26 15:50:15 +01:00

58 lines
2.1 KiB
JavaScript

/* global jQuery */
(function( $ ) {
$( document ).on( 'sowsetupformfield', '.siteorigin-widget-field-type-multi-measurement', function ( e ) {
var valField = $( this ).find( 'input[type="hidden"][class="siteorigin-widget-input"]' );
var separator = valField.data( 'separator' );
var autoFillEnabled = valField.data( 'autofill' );
var values = valField.val() === '' ? [] : valField.val().split( separator );
var $valInputs = $( this ).find( '.sow-multi-measurement-input' );
var $inputContainers = $( this ).find( '.sow-multi-measurement-input-container' );
var updateValue = function ( $element ) {
var vals = valField.val() === '' ? [] : valField.val().split( separator );
var $unitInput = $element.find( '+ .sow-multi-measurement-select-unit' );
var index = $valInputs.index( $element );
vals[ index ] = $element.val() + ( $element.val() === '' ? '' : $unitInput.val() );
valField.val( vals.join( separator ) );
};
$valInputs.each( function ( index, element ) {
if ( values.length > index ) {
var valueResult = values[ index ].match( /(\d+\.?\d*)([a-z%]+)*/ );
if ( valueResult && valueResult.length ) {
var amount = valueResult[ 1 ];
var unit = valueResult[ 2 ];
$( element ).val( amount );
$( element ).find( '+ .sow-multi-measurement-select-unit' ).val( unit );
}
} else {
updateValue( $( element ) );
}
} );
$inputContainers.change( function ( event ) {
var $valInput = $( event.currentTarget ).find( '> .sow-multi-measurement-input' );
var doAutofill = autoFillEnabled;
if ( autoFillEnabled ) {
$valInputs.each( function ( index, element ) {
// Only want to autofill if it has been enabled and no other inputs have values.
if ( element !== $valInput.eq( 0 ) ) {
doAutofill = doAutofill && !( $( element ).val() );
}
} );
}
if ( doAutofill ) {
$valInputs.each( function( index, element ) {
$( element ).val( $valInput.val() );
updateValue( $( element ) );
} );
} else {
updateValue( $valInput );
}
} );
} );
})( jQuery );