109 lines
3.5 KiB
JavaScript
109 lines
3.5 KiB
JavaScript
/* Změna počtu kusů po kliknutí na tlačítko
|
|
* Jako parametry bere input (s hodnotou a volitelnými atributy)
|
|
* a jestli má hodnota přičíst (true) nebo odečíst (false).
|
|
* Vrátí novou hodnotu inputu jako string.
|
|
* Možné atributy: max, min, step, data-precision
|
|
* */
|
|
|
|
function updatePieces($input, isUp) {
|
|
var oldValue = parseFloat($input.val());
|
|
var maxValue = $input.attr('max');
|
|
var step = $input.attr('step') ? parseFloat($input.attr('step')) : 1;
|
|
var minValue = $input.attr('min') ? parseFloat($input.attr('min')) : step;
|
|
var precision = $input.data('precision') ? parseFloat($input.data('precision')) : 0;
|
|
var newVal;
|
|
|
|
if (isUp) {
|
|
if (typeof(maxValue) === 'undefined' || (oldValue + step) <= parseFloat(maxValue)) {
|
|
newVal = oldValue + step;
|
|
} else {
|
|
newVal = parseFloat(maxValue);
|
|
}
|
|
} else {
|
|
if ((oldValue - step) >= minValue) {
|
|
newVal = oldValue - step;
|
|
} else {
|
|
newVal = minValue;
|
|
}
|
|
}
|
|
|
|
return newVal.toFixed(precision);
|
|
}
|
|
|
|
/* Zaokrouhlení počtu kusů po změně inputu
|
|
* Jako parametry bere input (s hodnotou a volitelnými atributy).
|
|
* Pokud je zadané množství které neopovídá stepu, hodnota se zaokrouhlí.
|
|
* Aplikuje se omezení max a min atributy.
|
|
* Vrátí novou hodnotu inputu jako string.
|
|
* */
|
|
|
|
function roundPieces($input) {
|
|
var newVal = parseFloat($input.val());
|
|
var maxValue = $input.attr('max');
|
|
var step = $input.attr('step') ? parseFloat($input.attr('step')) : 1;
|
|
var minValue = $input.attr('min') ? parseFloat($input.attr('min')) : step;
|
|
var precision = $input.data('precision') ? parseFloat($input.data('precision')) : 0;
|
|
|
|
if (newVal % step > 0) {
|
|
newVal = Math.round(newVal / step) * step;
|
|
}
|
|
|
|
if (newVal < minValue) {
|
|
newVal = minValue;
|
|
}
|
|
|
|
if (!isNaN(maxValue) && newVal > parseFloat(maxValue)) {
|
|
newVal = parseFloat(maxValue);
|
|
}
|
|
|
|
return newVal.toFixed(precision);
|
|
}
|
|
|
|
$('body').on('change', '[data-row-check]', function() {
|
|
var $checkbox = $(this);
|
|
var $input = $checkbox.closest('tr').find('.form-control');
|
|
var $table = $checkbox.closest('table');
|
|
|
|
if ($checkbox.prop('checked') === true) {
|
|
$input.prop('disabled', false);
|
|
$input.val($input.attr('max'));
|
|
|
|
$('[data-returns]').not($table).find('th .custom-control-input').prop('checked', false).trigger('change');
|
|
} else {
|
|
$input.prop('disabled', true);
|
|
$input.val('');
|
|
}
|
|
}).on('change', '[data-order-check]', function() {
|
|
var $table = $(this).closest('table');
|
|
if ($(this).prop('checked') === true && $table.hasClass('closed')) {
|
|
$table.toggleClass('closed');
|
|
}
|
|
$table.find('td .custom-control-input').prop('checked', $(this).prop('checked')).trigger('change');
|
|
}).on('click', '[data-returns] th', function() {
|
|
$(this).closest('table').toggleClass('closed');
|
|
}).on('click', '[data-returns] .buy_count button', function() {
|
|
var $button = $(this);
|
|
var $input = $button.closest('td').find('[data-pieces]');
|
|
|
|
var newVal = updatePieces($input, $button.hasClass('plus_unit'));
|
|
|
|
$input.val(newVal);
|
|
}).on('blur', 'input[data-pieces]', function() {
|
|
var $input = $(this);
|
|
var newVal = roundPieces($input);
|
|
|
|
if (parseFloat(newVal) !== parseFloat($input.val())) {
|
|
$input.val(newVal);
|
|
}
|
|
}).on('keydown', 'input[data-pieces]', function(e) {
|
|
if (e.keyCode === 13) {
|
|
e.preventDefault();
|
|
var $input = $(this);
|
|
var newVal = roundPieces($input);
|
|
|
|
if (parseFloat(newVal) !== parseFloat($input.val())) {
|
|
$input.val(newVal);
|
|
}
|
|
}
|
|
});
|