[Lada-commits] [PATCH] Exponential notation without tampering numbers

Wald Commits scm-commit at wald.intevation.org
Mon May 23 16:02:02 CEST 2016


# HG changeset patch
# User Tom Gottfried <tom at intevation.de>
# Date 1464012050 -7200
# Node ID b73f9a976c8277f27761b76fe346a31d3cddf89f
# Parent  ea5774447e4991022c77392617db2017c3c4abe8
Exponential notation without tampering numbers.

Rounding is done by the server. Thus, the client should not fix the
number of digits, except only for rendering.

diff -r ea5774447e49 -r b73f9a976c82 app/model/Messwert.js
--- a/app/model/Messwert.js	Mon May 23 11:39:19 2016 +0200
+++ b/app/model/Messwert.js	Mon May 23 16:00:50 2016 +0200
@@ -26,54 +26,7 @@
     }, {
         name: 'messgroesseId'
     }, {
-        name: 'messwert',
-        serialize: function(v) {
-            if (!v || v === '') {
-                return v;
-            }
-            if (v.indexOf(',') > 0) {
-                v = v.replace(',', '.');
-                return v;
-            }
-            return v;
-        },
-        convert: function(value) {
-            if (!value || value === '') {
-                return value;
-            }
-            var valueString = value.toString();
-            if (valueString.indexOf('E') > 0) {
-                valueString = valueString.replace('E', 'e');
-            }
-            var tmp;
-            if (valueString.indexOf('e') > 0) {
-                tmp = valueString;
-            }
-            else {
-                // Currently not locale friendly...
-                if (valueString.indexOf(',') > 0) {
-                    valueString = valueString.replace(',', '.');
-                }
-                tmp = parseFloat(valueString).toExponential();
-            }
-            var parts = tmp.split('e');
-            if (parts[0].indexOf('.') > 0) {
-                var floatPart = parseFloat(parts[0]);
-                var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, '');
-                parts[0] = floatPart.toFixed(2).replace('.', separator);
-            }
-            else if (parts[0].indexOf(',') < 0) {
-                parts[0] = parts[0] + ',00';
-            }
-            var intPart = parseInt(parts[1]);
-            if (intPart < 10 && intPart >= 0) {
-                parts[1] = '+0' + parseInt(parts[1]);
-            }
-            else if (intPart < 0 && intPart > -10) {
-                parts[1] = parts[1].replace('-', '-0');
-            }
-            return parts[0] + 'e' + parts[1];
-        }
+        name: 'messwert'
     }, {
         name: 'messwertNwg',
         convert: function(v) {
@@ -87,54 +40,7 @@
         name: 'messfehler',
         type: 'float'
     }, {
-        name: 'nwgZuMesswert',
-        serialize: function(v) {
-            if (!v || v === '') {
-                return v;
-            }
-            if (v.indexOf(',') > 0) {
-                v = v.replace(',', '.');
-                return v;
-            }
-            return v;
-        },
-        convert: function(value) {
-            if (!value || value === '') {
-                return value;
-            }
-            var valueString = value.toString();
-            if (valueString.indexOf('E') > 0) {
-                valueString = valueString.replace('E', 'e');
-            }
-            var tmp;
-            if (valueString.indexOf('e') > 0) {
-                tmp = valueString;
-            }
-            else {
-                // Currently not locale friendly...
-                if (valueString.indexOf(',') > 0) {
-                    valueString = valueString.replace(',', '.');
-                }
-                tmp = parseFloat(valueString).toExponential();
-            }
-            var parts = tmp.split('e');
-            if (parts[0].indexOf('.') > 0) {
-                var floatPart = parseFloat(parts[0]);
-                var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, '');
-                parts[0] = floatPart.toFixed(2).replace('.', separator);
-            }
-            else if (parts[0].indexOf(',') < 0) {
-                parts[0] = parts[0] + ',00';
-            }
-            var intPart = parseInt(parts[1]);
-            if (intPart < 10 && intPart >= 0) {
-                parts[1] = '+0' + parseInt(parts[1]);
-            }
-            else if (intPart < 0 && intPart > -10) {
-                parts[1] = parts[1].replace('-', '-0');
-            }
-            return parts[0] + 'e' + parts[1];
-        }
+        name: 'nwgZuMesswert'
     }, {
         name: 'mehId'
     }, {
diff -r ea5774447e49 -r b73f9a976c82 app/model/Zusatzwert.js
--- a/app/model/Zusatzwert.js	Mon May 23 11:39:19 2016 +0200
+++ b/app/model/Zusatzwert.js	Mon May 23 16:00:50 2016 +0200
@@ -26,97 +26,9 @@
     }, {
         name: 'pzsId'
     }, {
-        name: 'nwgZuMesswert',
-        serialize: function(v) {
-            if (v.indexOf(',') > 0) {
-                v = v.replace(',', '.');
-                return v;
-            }
-            return v;
-        },
-        convert: function(value) {
-            if (!value || value === '') {
-                return value;
-            }
-            var valueString = value.toString();
-            if (valueString.indexOf('E') > 0) {
-                valueString = valueString.replace('E', 'e');
-            }
-            var tmp;
-            if (valueString.indexOf('e') > 0) {
-                tmp = valueString;
-            }
-            else {
-                // Currently not locale friendly...
-                if (valueString.indexOf(',') > 0) {
-                    valueString = valueString.replace(',', '.');
-                }
-                tmp = parseFloat(valueString).toExponential();
-            }
-            var parts = tmp.split('e');
-            if (parts[0].indexOf('.') > 0) {
-                var floatPart = parseFloat(parts[0]);
-                var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, '');
-                parts[0] = floatPart.toFixed(2).replace('.', separator);
-            }
-            else if (parts[0].indexOf(',') < 0) {
-                parts[0] = parts[0] + ',00';
-            }
-            var intPart = parseInt(parts[1]);
-            if (intPart < 10 && intPart >= 0) {
-                parts[1] = '+0' + parseInt(parts[1]);
-            }
-            else if (intPart < 0 && intPart > -10) {
-                parts[1] = parts[1].replace('-', '-0');
-            }
-            return parts[0] + 'e' + parts[1];
-        }
+        name: 'nwgZuMesswert'
     }, {
-        name: 'messwertPzs',
-        serialize: function(v) {
-            if (v.indexOf(',') > 0) {
-                v = v.replace(',', '.');
-                return v;
-            }
-            return v;
-        },
-        convert: function(value) {
-            if (!value || value === '') {
-                return value;
-            }
-            var valueString = value.toString();
-            if (valueString.indexOf('E') > 0) {
-                valueString = valueString.replace('E', 'e');
-            }
-            var tmp;
-            if (valueString.indexOf('e') > 0) {
-                tmp = valueString;
-            }
-            else {
-                // Currently not locale friendly...
-                if (valueString.indexOf(',') > 0) {
-                    valueString = valueString.replace(',', '.');
-                }
-                tmp = parseFloat(valueString).toExponential();
-            }
-            var parts = tmp.split('e');
-            if (parts[0].indexOf('.') > 0) {
-                var floatPart = parseFloat(parts[0]);
-                var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, '');
-                parts[0] = floatPart.toFixed(2).replace('.', separator);
-            }
-            else if (parts[0].indexOf(',') < 0) {
-                parts[0] = parts[0] + ',00';
-            }
-            var intPart = parseInt(parts[1]);
-            if (intPart < 10 && intPart >= 0) {
-                parts[1] = '+0' + parseInt(parts[1]);
-            }
-            else if (intPart < 0 && intPart > -10) {
-                parts[1] = parts[1].replace('-', '-0');
-            }
-            return parts[0] + 'e' + parts[1];
-        }
+        name: 'messwertPzs'
     }, {
         name: 'messfehler',
         type: 'float'
diff -r ea5774447e49 -r b73f9a976c82 app/view/form/ExpNumberField.js
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/view/form/ExpNumberField.js	Mon May 23 16:00:50 2016 +0200
@@ -0,0 +1,46 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+/**
+ * Number field for display and editing of exponential numbers
+ */
+Ext.define('Lada.view.form.ExpNumberField', {
+    extend: 'Ext.form.field.Number',
+    alias: 'widget.expnumberfield',
+
+    baseChars: '0123456789eE',
+
+    hideTrigger: true,
+    keyNavEnabled: false,
+    mouseWheelEnabled: false,
+
+    valueToRaw: function(value) {
+        if (!value || value === '') {
+            return value;
+        }
+
+        // XXX: this will be applied to any input before being sent to
+        // the server! Thus, toExponential(2) would lead to incorrectly
+        // rounded numbers at this point.
+        value = parseFloat(value).toExponential()
+            .toString().replace('.', this.decimalSeparator);
+
+        return value;
+    },
+
+    rawToValue: function(value) {
+        if (!value || value === '') {
+            return value;
+        }
+
+        value = parseFloat(
+            value.toString().replace(this.decimalSeparator, '.'));
+
+        return value;
+    }
+});
diff -r ea5774447e49 -r b73f9a976c82 app/view/grid/Messwert.js
--- a/app/view/grid/Messwert.js	Mon May 23 11:39:19 2016 +0200
+++ b/app/view/grid/Messwert.js	Mon May 23 16:00:50 2016 +0200
@@ -14,6 +14,7 @@
     alias: 'widget.messwertgrid',
 
     requires: [
+        'Lada.view.form.ExpNumberField',
         'Lada.view.widget.Messgroesse',
         'Lada.view.widget.Messeinheit'
     ],
@@ -114,10 +115,11 @@
             dataIndex: 'messwert',
             width: 80,
             editor: {
-                xtype: 'textfield',
+                xtype: 'expnumberfield',
                 allowBlank: false,
-                regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/,
-                regexText: 'Keine Zahl'
+            },
+            renderer: function(value) {
+                return value.toExponential(2).toString().replace('.', ',');
             }
         }, {
             header: 'Messeinheit',
@@ -161,10 +163,13 @@
             dataIndex: 'nwgZuMesswert',
             width: 80,
             editor: {
-                xtype: 'textfield',
-                allowBlank: true,
-                regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/,
-                regexText: 'Keine Zahl'
+                xtype: 'expnumberfield'
+            },
+            renderer: function(value) {
+                if (!value || value === '') {
+                    return value;
+                }
+                return value.toExponential(2).toString().replace('.', ',');
             }
         }, {
             header: 'Grenzwertüberschreitung',
diff -r ea5774447e49 -r b73f9a976c82 app/view/grid/Probenzusatzwert.js
--- a/app/view/grid/Probenzusatzwert.js	Mon May 23 11:39:19 2016 +0200
+++ b/app/view/grid/Probenzusatzwert.js	Mon May 23 16:00:50 2016 +0200
@@ -13,6 +13,7 @@
     extend: 'Ext.grid.Panel',
     alias: 'widget.probenzusatzwertgrid',
     requires: [
+        'Lada.view.form.ExpNumberField',
         'Lada.view.widget.Probenzusatzwert'
     ],
 
@@ -92,10 +93,13 @@
             dataIndex: 'messwertPzs',
             flex: 1,
             editor: {
-                xtype: 'textfield',
-                allowBlank: false,
-                regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/,
-                regexText: 'Keine Zahl'
+                xtype: 'expnumberfield',
+            },
+            renderer: function(value) {
+                if (!value || value === '') {
+                    return value;
+                }
+                return value.toExponential(2).toString().replace('.', ',');
             }
         }, {
             header: '< NWG',
@@ -114,10 +118,13 @@
             xtype: 'numbercolumn',
             flex: 1,
             editor: {
-                xtype: 'textfield',
-                allowBlank: false,
-                regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/,
-                regexText: 'Keine Zahl'
+                xtype: 'expnumberfield',
+            },
+            renderer: function(value) {
+                if (!value || value === '') {
+                    return value;
+                }
+                return value.toExponential(2).toString().replace('.', ',');
             }
         }, {
             header: 'Maßeinheit',


More information about the Lada-commits mailing list