aboutsummaryrefslogtreecommitdiff
path: root/web/app/view
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2017-04-20 22:05:49 +1200
committerGitHub <noreply@github.com>2017-04-20 22:05:49 +1200
commit9a4bd28bec0cdb05a39e1f66be7df7a287f98a80 (patch)
tree89fb17d5ac9a8d703869e0b8ee5351062ae77cc5 /web/app/view
parent5d35a71af8642dc23cc230efc7d3fca8705efe13 (diff)
parent2c4c52a8d925de24c004db7ec01479c27e507f1d (diff)
downloadtrackermap-web-9a4bd28bec0cdb05a39e1f66be7df7a287f98a80.tar.gz
trackermap-web-9a4bd28bec0cdb05a39e1f66be7df7a287f98a80.tar.bz2
trackermap-web-9a4bd28bec0cdb05a39e1f66be7df7a287f98a80.zip
Merge pull request #470 from Abyss777/known_attribute_conversion
Convert speed and distance for known attributes
Diffstat (limited to 'web/app/view')
-rw-r--r--web/app/view/CustomNumberField.js50
-rw-r--r--web/app/view/dialog/Attribute.js3
-rw-r--r--web/app/view/dialog/AttributeController.js5
-rw-r--r--web/app/view/edit/Attributes.js21
4 files changed, 72 insertions, 7 deletions
diff --git a/web/app/view/CustomNumberField.js b/web/app/view/CustomNumberField.js
new file mode 100644
index 00000000..7e2b88e9
--- /dev/null
+++ b/web/app/view/CustomNumberField.js
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 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 style="display:table-cell;padding-left:10px;vertical-align:middle;">',
+
+ constructor: function (config) {
+ var unit;
+ if (config.convert === '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.convert === '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'));
+ };
+ }
+ this.callParent(arguments);
+ }
+});
diff --git a/web/app/view/dialog/Attribute.js b/web/app/view/dialog/Attribute.js
index 6614c87f..2a458977 100644
--- a/web/app/view/dialog/Attribute.js
+++ b/web/app/view/dialog/Attribute.js
@@ -20,7 +20,8 @@ Ext.define('Traccar.view.dialog.Attribute', {
requires: [
'Traccar.view.dialog.AttributeController',
- 'Traccar.view.ColorPicker'
+ 'Traccar.view.ColorPicker',
+ 'Traccar.view.CustomNumberField'
],
controller: 'attribute',
diff --git a/web/app/view/dialog/AttributeController.js b/web/app/view/dialog/AttributeController.js
index da5205b4..afa970ad 100644
--- a/web/app/view/dialog/AttributeController.js
+++ b/web/app/view/dialog/AttributeController.js
@@ -59,12 +59,13 @@ Ext.define('Traccar.view.dialog.AttributeController', {
type = attribute.get('type');
config = Ext.clone(this.defaultFieldConfig);
if (type === 'number') {
- config.xtype = 'numberfield';
+ config.xtype = 'customNumberField';
if (attribute.get('allowDecimals') !== undefined) {
config.allowDecimals = attribute.get('allowDecimals');
} else {
config.allowDecimals = true;
}
+ config.convert = attribute.get('convert');
config.maxValue = attribute.get('maxValue');
config.minValue = attribute.get('minValue');
} else if (type === 'boolean') {
@@ -76,7 +77,7 @@ Ext.define('Traccar.view.dialog.AttributeController', {
} else {
config.xtype = 'textfield';
}
- if (valueField.getXType() !== config.xtype) {
+ if (valueField.getXType() !== config.xtype || valueField.convert !== config.convert) {
this.getView().down('form').insert(this.getView().down('form').items.indexOf(valueField), config);
this.getView().down('form').remove(valueField);
} else if (config.xtype === 'numberfield') {
diff --git a/web/app/view/edit/Attributes.js b/web/app/view/edit/Attributes.js
index 80083193..7788d8c8 100644
--- a/web/app/view/edit/Attributes.js
+++ b/web/app/view/edit/Attributes.js
@@ -43,15 +43,28 @@ Ext.define('Traccar.view.edit.Attributes', {
text: Strings.sharedName,
dataIndex: 'name',
renderer: function (value, metaData) {
- var result;
+ var attribute;
if (this.attributesStore) {
- result = Ext.getStore(this.attributesStore).getById(value);
+ attribute = Ext.getStore(this.attributesStore).getById(value);
}
- return result && result.get('name') ? result.get('name') : value;
+ return attribute && attribute.get('name') ? attribute.get('name') : value;
}
}, {
text: Strings.stateValue,
- dataIndex: 'value'
+ dataIndex: 'value',
+ renderer: function (value, metaData, record) {
+ var attribute;
+ if (this.attributesStore) {
+ attribute = Ext.getStore(this.attributesStore).getById(record.get('name'));
+ }
+ if (attribute && attribute.get('convert') === 'speed') {
+ return Ext.getStore('SpeedUnits').formatValue(value, Traccar.app.getPreference('speedUnit', 'kn'));
+ } else if (attribute && attribute.get('convert') === 'distance') {
+ return Ext.getStore('DistanceUnits').formatValue(value, Traccar.app.getPreference('distanceUnit', 'km'));
+ } else {
+ return value;
+ }
+ }
}]
}
});