From 401fe5286ef6a6ef216568cf17c5af7244e37f09 Mon Sep 17 00:00:00 2001 From: Dasc3er Date: Fri, 4 Sep 2020 09:42:38 +0200 Subject: [PATCH] Introduzione Autonumeric per la gestione JS dei campi numerici --- assets/src/css/style.css | 4 ++ assets/src/js/functions/functions.js | 69 +++++++++++----------- assets/src/js/functions/numbers.js | 30 ++++++++++ gulpfile.js | 1 + modules/impianti/modutil.php | 13 ++-- package.json | 1 + src/HTMLBuilder/Handler/DefaultHandler.php | 12 ++-- 7 files changed, 84 insertions(+), 46 deletions(-) create mode 100644 assets/src/js/functions/numbers.js diff --git a/assets/src/css/style.css b/assets/src/css/style.css index cefe5cfdf..5b88f9d5a 100755 --- a/assets/src/css/style.css +++ b/assets/src/css/style.css @@ -1022,3 +1022,7 @@ div.tip { .skin-default .nav.navbar-nav li a:hover { background: #222222; } + +.decimal-number { + text-align: right; +} diff --git a/assets/src/js/functions/functions.js b/assets/src/js/functions/functions.js index 45d0e8a3c..67975b3de 100755 --- a/assets/src/js/functions/functions.js +++ b/assets/src/js/functions/functions.js @@ -1,9 +1,18 @@ -// Modal +/** + * Modal gestito da versioni precedenti. + * @param title + * @param href + * @param init_modal + */ function launch_modal(title, href, init_modal) { openModal(title, href); } -// Modal +/** + * Modal. + * @param title + * @param href + */ function openModal(title, href) { // Fix - Select2 does not function properly when I use it inside a Bootstrap modal. $.fn.modal.Constructor.prototype.enforceFocus = function () { @@ -55,6 +64,11 @@ function openModal(title, href) { } } +/** + * + * @param event + * @param link + */ function openLink(event, link) { if (event.ctrlKey) { window.open(link); @@ -85,7 +99,9 @@ function getUrlVars() { }); } -// Data e ora (orologio) +/** + * Data e ora (orologio) + */ function clock() { $('#datetime').html(moment().formatPHP(globals.timestamp_format)); setTimeout('clock()', 1000); @@ -125,33 +141,6 @@ function session_keep_alive() { $.get(globals.rootdir + '/core.php'); } -/** - * Funzione per gestire i contatori testuali nel formato x/total. - * Viene dato un id del campo da verificare come input, viene letto il testo nella forma [0-9]/[0-9] e viene fatto - * il replate del primo numero in base a quanti elementi sono stati trovati (valore passato per parametro) - */ -function update_counter(id, new_value) { - new_text = $('#' + id).html(); - - // Estraggo parte numerica (formato x/total) - pattern = /([^0-9]+)([0-9]+)\/([0-9]+)([^0-9]+)/; - new_text = new_text.replace(pattern, "$1" + new_value + "/$3$4"); - - // Estraggo totale (parte numerica dopo lo slash /) - matches = pattern.exec(new_text); - total = matches[3]; - - $('#' + id).html(new_text); - - if (new_value == total) { - $('#' + id).removeClass('btn-warning').removeClass('btn-danger').addClass('btn-success'); - } else if (new_value == 0) { - $('#' + id).removeClass('btn-warning').removeClass('btn-success').addClass('btn-danger'); - } else { - $('#' + id).removeClass('btn-success').removeClass('btn-danger').addClass('btn-warning'); - } -} - function setContrast(backgroundcolor) { var rgb = []; var bg = String(backgroundcolor); @@ -219,9 +208,7 @@ function message(element) { confirmButtonText: button, confirmButtonClass: btn_class, onOpen: function () { - start_superselect(); - start_inputmask(); - start_datepickers(); + restart_inputs(); }, preConfirm: function () { $form = $('#swal-form'); @@ -450,8 +437,10 @@ function prepareForm(form) { } } +/** + * Visualizzazione dei messaggi attivi tramite toastr. + */ function renderMessages() { - // Visualizzazione messaggi $.ajax({ url: globals.rootdir + '/ajax.php', type: 'get', @@ -504,14 +493,17 @@ function restart_inputs() { start_datepickers(); start_inputmask(); + initNumbers(); start_superselect(); // Autosize per le textarea autosize($('.autosize')); } +/** + * Messaggio di avviso salvataggio a comparsa sulla destra solo nella versione a desktop intero + */ function alertPush() { - // Messaggio di avviso salvataggio a comparsa sulla destra solo nella versione a desktop intero if ($(window).width() > 1023) { var i = 0; @@ -541,6 +533,13 @@ function alertPush() { }); } +/** + * + * @param button + * @param form + * @param data + * @returns {Promise} + */ function salvaForm(button, form, data = {}) { return new Promise(function (resolve, reject) { // Caricamento visibile nel pulsante diff --git a/assets/src/js/functions/numbers.js b/assets/src/js/functions/numbers.js new file mode 100644 index 000000000..7ec3cd8d7 --- /dev/null +++ b/assets/src/js/functions/numbers.js @@ -0,0 +1,30 @@ +function initNumbers() { + $('.decimal-number').not('.bound').each(function () { + let $this = $(this); + + let min = $this.attr('min-value') ? $this.attr('min-value') : "-10000000000000"; + let max = $this.attr('max-value') ? $this.attr('max-value') : "10000000000000"; + + let decimals = $this.attr('decimals') ? $this.attr('decimals') : globals.cifre_decimali; + + let autonumeric = new AutoNumeric(this, { + caretPositionOnFocus: "decimalLeft", + allowDecimalPadding: true, + currencySymbolPlacement: "s", + negativePositiveSignPlacement: "p", + decimalCharacter: globals.decimals, + decimalCharacterAlternative: ".", + digitGroupSeparator: globals.thousands, + emptyInputBehavior: "zero", + modifyValueOnWheel: false, + outputFormat: "string", + unformatOnSubmit: true, + watchExternalChanges: true, + minimumValue: min, + maximumValue: max, + decimalPlaces: decimals, + }); + + $this.data("autonumeric", autonumeric); + }).addClass('bound'); +} diff --git a/gulpfile.js b/gulpfile.js index 63498181f..7001396f4 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -76,6 +76,7 @@ const JS = gulp.parallel(() => { 'datatables.net-scroller/js/dataTables.scroller.js', 'datatables.net-select/js/dataTables.select.js', 'dropzone/dist/dropzone.js', + 'autonumeric/dist/autoNumeric.min.js', 'eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js', 'fullcalendar/dist/fullcalendar.js', 'geocomplete/jquery.geocomplete.js', diff --git a/modules/impianti/modutil.php b/modules/impianti/modutil.php index 41b480f5d..b25cd6293 100755 --- a/modules/impianti/modutil.php +++ b/modules/impianti/modutil.php @@ -1,18 +1,21 @@ $value) { $fields[$key] = '
'.$value.'
'; } - echo $title; - echo '
'; - echo PHP_EOL.implode(PHP_EOL, $fields).PHP_EOL.''; - echo '
'; + echo $title.' +
+ '.implode(PHP_EOL, $fields).' + +
'; } diff --git a/package.json b/package.json index 2df9dca89..d38707385 100755 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "main": "gulpfile.js", "dependencies": { "admin-lte": "^2.4.0", + "autonumeric": "^4.6.0", "autosize": "^3.0.21", "bootstrap": "^3.3.7", "bootstrap-colorpicker": "2.5.1", diff --git a/src/HTMLBuilder/Handler/DefaultHandler.php b/src/HTMLBuilder/Handler/DefaultHandler.php index 935371593..5c3c31a8d 100755 --- a/src/HTMLBuilder/Handler/DefaultHandler.php +++ b/src/HTMLBuilder/Handler/DefaultHandler.php @@ -100,7 +100,7 @@ class DefaultHandler implements HandlerInterface button.attr("title", "'.tr('Visualizza password').'"); } } - + $(document).ready(function(){ togglePassword_'.$values['id'].'(); }); @@ -109,7 +109,7 @@ class DefaultHandler implements HandlerInterface if (!empty($values['strength'])) { $result .= '
- + '; @@ -218,7 +218,7 @@ class DefaultHandler implements HandlerInterface */ protected function number(&$values, &$extras) { - $values['class'][] = 'inputmask-decimal'; + $values['class'][] = 'decimal-number'; $values['value'] = !empty($values['value']) ? $values['value'] : 0;