aboutsummaryrefslogtreecommitdiff
path: root/legacy/web/app/view/CustomNumberField.js
diff options
context:
space:
mode:
Diffstat (limited to 'legacy/web/app/view/CustomNumberField.js')
-rw-r--r--legacy/web/app/view/CustomNumberField.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/legacy/web/app/view/CustomNumberField.js b/legacy/web/app/view/CustomNumberField.js
new file mode 100644
index 00000000..8cfac1ee
--- /dev/null
+++ b/legacy/web/app/view/CustomNumberField.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2017 - 2018 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 - 2018 Andrey Kunitsyn (andrey@traccar.org)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+Ext.define('Traccar.view.CustomNumberField', {
+ extend: 'Ext.form.field.Number',
+ xtype: 'customNumberField',
+
+ beforeEl: '<div style="width:100%;display:inline-table;">',
+ unitEl: '<div id="numberUnitEl" style="display:table-cell;padding-left:10px;vertical-align:middle;width:1px;white-space:nowrap;">',
+
+ constructor: function (config) {
+ 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.getAttributePreference('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.getAttributePreference('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;
+ case 'hours':
+ config.units = {};
+ config.units.getStore = function () {
+ return Ext.getStore('HoursUnits');
+ };
+ config.units.getValue = function () {
+ return 'h';
+ };
+ unitName = Strings.sharedHourAbbreviation;
+ break;
+ default:
+ break;
+ }
+ config.afterBodyEl = this.unitEl + unitName + '</div></div>';
+ config.rawToValue = function (rawValue) {
+ if (this.units) {
+ return this.units.getStore().convertValue(this.parseValue(rawValue), this.units.getValue(), true);
+ } else {
+ return this.parseValue(rawValue);
+ }
+ };
+ config.valueToRaw = function (value) {
+ if (this.units) {
+ return String(this.units.getStore().convertValue(value, this.units.getValue(), false));
+ } else {
+ return String(value);
+ }
+ };
+ if (config.units) {
+ config.step = config.units.getStore().convertValue(1, config.units.getValue(), true);
+ }
+ }
+ this.callParent(arguments);
+ }
+});