diff options
Diffstat (limited to 'web/app/view/CustomNumberField.js')
-rw-r--r-- | web/app/view/CustomNumberField.js | 109 |
1 files changed, 63 insertions, 46 deletions
diff --git a/web/app/view/CustomNumberField.js b/web/app/view/CustomNumberField.js index 9144b524..bc07691b 100644 --- a/web/app/view/CustomNumberField.js +++ b/web/app/view/CustomNumberField.js @@ -19,63 +19,80 @@ Ext.define('Traccar.view.CustomNumberField', { extend: 'Ext.form.field.Number', xtype: 'customNumberField', - beforeEl: '<div style="width:100%;display:inline-table;">', - unitEl: '<div id="unitEl" style="display:table-cell;padding-left:10px;vertical-align:middle;width:30%">', + beforeEl: '<div style="display:inline-table;width:100%">', + unitEl: '<div id="numberUnitEl" style="display:table-cell;padding-left:10px;vertical-align:middle;width:1px;white-space:nowrap;">', constructor: function (config) { - var unit; - if (config.dataType === 'speed') { - unit = Traccar.app.getPreference('speedUnit', 'kn'); - config.beforeSubTpl = this.beforeEl; - config.afterSubTpl = this.unitEl + Ext.getStore('SpeedUnits').findRecord('key', unit).get('name') + '</div></div>'; - config.rawToValue = function (rawValue) { - return Ext.getStore('SpeedUnits').convertValue(rawValue, Traccar.app.getPreference('speedUnit', 'kn'), true); - }; - config.valueToRaw = function (value) { - return Ext.getStore('SpeedUnits').convertValue(value, Traccar.app.getPreference('speedUnit', 'kn')); - }; - } else if (config.dataType === 'distance') { - config.beforeSubTpl = this.beforeEl; - unit = Traccar.app.getPreference('distanceUnit', 'km'); - config.afterSubTpl = this.unitEl + Ext.getStore('DistanceUnits').findRecord('key', unit).get('name') + '</div></div>'; - config.rawToValue = function (rawValue) { - return Ext.getStore('DistanceUnits').convertValue(rawValue, Traccar.app.getPreference('distanceUnit', 'km'), true); - }; - config.valueToRaw = function (value) { - return Ext.getStore('DistanceUnits').convertValue(value, Traccar.app.getPreference('distanceUnit', 'km')); - }; - } else if (config.dataType === 'frequency') { - config.beforeSubTpl = this.beforeEl; - config.afterSubTpl = this.unitEl + '</div></div>'; - config.listeners = { - afterrender: function (numberField) { - if (!numberField.timeUnits) { - numberField.timeUnits = Ext.create({ - xtype: 'combobox', - renderTo: 'unitEl', - store: 'TimeUnits', - displayField: 'name', - valueField: 'factor', - value: 1, - width: 70 - }); + var unitName = ''; + if (config.dataType) { + config.beforeBodyEl = this.beforeEl; + switch (config.dataType) { + case 'speed': + config.units = {}; + config.units.getStore = function () { + return Ext.getStore('SpeedUnits'); + }; + config.units.getValue = function () { + return Traccar.app.getPreference('speedUnit', 'kn'); + }; + unitName = Ext.getStore('SpeedUnits').findRecord('key', config.units.getValue()).get('name'); + break; + case 'distance': + config.units = {}; + config.units.getStore = function () { + return Ext.getStore('DistanceUnits'); + }; + config.units.getValue = function () { + return Traccar.app.getPreference('distanceUnit', 'km'); + }; + unitName = Ext.getStore('DistanceUnits').findRecord('key', config.units.getValue()).get('name'); + break; + case 'frequency': + if (!config.listeners) { + config.listeners = {}; } - } - }; + config.listeners.afterrender = function () { + if (!this.units) { + this.units = Ext.create({ + xtype: 'combobox', + renderTo: 'numberUnitEl', + store: 'TimeUnits', + displayField: 'name', + valueField: 'key', + editable: false, + numberField: this, + value: 's', + width: '70px', + listeners: { + select: function () { + this.numberField.step = this.getStore().convertValue(1, this.getValue(), true); + } + } + }); + } + }; + break; + default: + break; + } + config.afterBodyEl = this.unitEl + unitName + '</div></div>'; config.rawToValue = function (rawValue) { - if (this.timeUnits) { - return rawValue * this.timeUnits.getValue(); + if (this.units) { + return this.units.getStore().convertValue(rawValue, this.units.getValue(), true); } else { - return rawValue; + return this.parseValue(rawValue); } }; config.valueToRaw = function (value) { - if (this.timeUnits) { - return value / this.timeUnits.getValue(); + if (this.units) { + return this.units.getStore().convertValue(value, this.units.getValue(), false); } else { - return value; + return this.parseValue(value); } }; + if (config.units) { + config.step = config.units.getStore().convertValue(1, config.units.getValue(), true); + } } this.callParent(arguments); } |