From b1715a760cde09ec69a6756d7067a8c077d0fe2b Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Tue, 27 Sep 2016 15:27:09 +0500 Subject: -Remove plural of attribute -Use ChainedStore in right way -Use findBy instead of filter in StateController --- web/app/Application.js | 2 +- web/app/controller/Root.js | 2 +- web/app/store/AllAttributeAliases.js | 30 -------- web/app/store/AttributeAliases.js | 30 ++++++++ web/app/view/AttributeAliases.js | 60 ++++++++++++++++ web/app/view/AttributeAliasesController.js | 105 ++++++++++++++++++++++++++++ web/app/view/AttributesAliases.js | 61 ---------------- web/app/view/AttributesAliasesController.js | 98 -------------------------- web/app/view/SettingsMenu.js | 6 +- web/app/view/SettingsMenuController.js | 10 +-- web/app/view/StateController.js | 34 +++++---- web/l10n/en.json | 2 +- 12 files changed, 227 insertions(+), 213 deletions(-) delete mode 100644 web/app/store/AllAttributeAliases.js create mode 100644 web/app/store/AttributeAliases.js create mode 100644 web/app/view/AttributeAliases.js create mode 100644 web/app/view/AttributeAliasesController.js delete mode 100644 web/app/view/AttributesAliases.js delete mode 100644 web/app/view/AttributesAliasesController.js diff --git a/web/app/Application.js b/web/app/Application.js index 0d6430d..aab9bc8 100644 --- a/web/app/Application.js +++ b/web/app/Application.js @@ -61,7 +61,7 @@ Ext.define('Traccar.Application', { 'Notifications', 'AllNotifications', 'GeofenceTypes', - 'AllAttributeAliases', + 'AttributeAliases', 'ReportRoute', 'ReportEvents', 'ReportTrips', diff --git a/web/app/controller/Root.js b/web/app/controller/Root.js index 0784aea..2807cab 100644 --- a/web/app/controller/Root.js +++ b/web/app/controller/Root.js @@ -78,7 +78,7 @@ Ext.define('Traccar.controller.Root', { var attribution; Ext.getStore('Groups').load(); Ext.getStore('Geofences').load(); - Ext.getStore('AllAttributeAliases').load(); + Ext.getStore('AttributeAliases').load(); Ext.getStore('Devices').load({ scope: this, callback: function () { diff --git a/web/app/store/AllAttributeAliases.js b/web/app/store/AllAttributeAliases.js deleted file mode 100644 index c351d0d..0000000 --- a/web/app/store/AllAttributeAliases.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) - * - * 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 . - */ - -Ext.define('Traccar.store.AllAttributeAliases', { - extend: 'Ext.data.Store', - model: 'Traccar.model.AttributeAlias', - - proxy: { - type: 'rest', - url: 'api/attributes/aliases', - writer: { - writeAllFields: true - } - } -}); diff --git a/web/app/store/AttributeAliases.js b/web/app/store/AttributeAliases.js new file mode 100644 index 0000000..ebec8c8 --- /dev/null +++ b/web/app/store/AttributeAliases.js @@ -0,0 +1,30 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * + * 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 . + */ + +Ext.define('Traccar.store.AttributeAliases', { + extend: 'Ext.data.Store', + model: 'Traccar.model.AttributeAlias', + + proxy: { + type: 'rest', + url: 'api/attributes/aliases', + writer: { + writeAllFields: true + } + } +}); diff --git a/web/app/view/AttributeAliases.js b/web/app/view/AttributeAliases.js new file mode 100644 index 0000000..182a9cd --- /dev/null +++ b/web/app/view/AttributeAliases.js @@ -0,0 +1,60 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * + * 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 . + */ + +Ext.define('Traccar.view.AttributeAliases', { + extend: 'Ext.grid.Panel', + xtype: 'attributeAliasesView', + + requires: [ + 'Traccar.view.AttributeAliasesController', + 'Traccar.view.EditToolbar' + ], + + controller: 'attributeAliases', + + selType: 'rowmodel', + + tbar: { + xtype: 'editToolbar', + items: ['-', { + xtype: 'combobox', + reference: 'deviceField', + store: 'Devices', + displayField: 'name', + valueField: 'id', + typeAhead: true, + listeners: { + change: 'onDeviceChange' + } + }] + }, + + listeners: { + selectionchange: 'onSelectionChange' + }, + + columns: [{ + text: Strings.sharedAttribute, + dataIndex: 'attribute', + flex: 1 + }, { + text: Strings.sharedAlias, + dataIndex: 'alias', + flex: 1 + }] +}); diff --git a/web/app/view/AttributeAliasesController.js b/web/app/view/AttributeAliasesController.js new file mode 100644 index 0000000..6135994 --- /dev/null +++ b/web/app/view/AttributeAliasesController.js @@ -0,0 +1,105 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * + * 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 . + */ + +Ext.define('Traccar.view.AttributeAliasesController', { + extend: 'Ext.app.ViewController', + alias: 'controller.attributeAliases', + + requires: [ + 'Traccar.view.AttributeAliasDialog', + 'Traccar.model.AttributeAlias' + ], + + init: function () { + var admin = Traccar.app.getUser().get('admin'); + this.lookupReference('deviceField').setStore(admin ? 'AllDevices' : 'Devices'); + this.lookupReference('toolbarAddButton').setDisabled(true); + this.lookupReference('toolbarEditButton').setDisabled(true); + this.lookupReference('toolbarRemoveButton').setDisabled(true); + this.getView().setStore(Ext.create('Ext.data.ChainedStore', { + storeId: 'EditorAttributeAliases', + source: 'AttributeAliases' + })); + this.getView().getStore().filter('deviceId', 0); + }, + + onAddClick: function () { + var attributeAlias, dialog, deviceId; + attributeAlias = Ext.create('Traccar.model.AttributeAlias'); + attributeAlias.store = Ext.getStore('AttributeAliases'); + deviceId = this.lookupReference('deviceField').getValue(); + attributeAlias.set('deviceId', deviceId); + dialog = Ext.create('Traccar.view.AttributeAliasDialog'); + dialog.down('form').loadRecord(attributeAlias); + dialog.show(); + }, + + onEditClick: function () { + var attributeAlias, dialog; + attributeAlias = this.getView().getSelectionModel().getSelection()[0]; + attributeAlias.store = Ext.getStore('AttributeAliases'); + dialog = Ext.create('Traccar.view.AttributeAliasDialog'); + dialog.down('form').loadRecord(attributeAlias); + dialog.show(); + }, + + onRemoveClick: function () { + var attributeAlias = this.getView().getSelectionModel().getSelection()[0]; + Ext.Msg.show({ + title: Strings.sharedAttributeAlias, + message: Strings.sharedRemoveConfirm, + buttons: Ext.Msg.YESNO, + buttonText: { + yes: Strings.sharedRemove, + no: Strings.sharedCancel + }, + scope: this, + fn: function (btn) { + var store = Ext.getStore('AttributeAliases'); + if (btn === 'yes') { + store.remove(attributeAlias); + store.sync(); + } + } + }); + }, + + onSelectionChange: function (selected) { + var disabled = !this.lookupReference('deviceField').getValue(); + this.lookupReference('toolbarAddButton').setDisabled(disabled); + disabled = selected.length === 0 || !this.lookupReference('deviceField').getValue(); + this.lookupReference('toolbarEditButton').setDisabled(disabled); + this.lookupReference('toolbarRemoveButton').setDisabled(disabled); + }, + + onDeviceChange: function (combobox, newValue, oldValue) { + var admin = Traccar.app.getUser().get('admin'); + this.onSelectionChange(''); + if (newValue !== null) { + this.getView().getStore().filter('deviceId', newValue); + if (admin && this.getView().getStore().getCount() === 0) { + Ext.getStore('AttributeAliases').getProxy().setExtraParam('deviceId', newValue); + Ext.getStore('AttributeAliases').load({ + addRecords: true + }); + } + } else { + this.getView().getStore().filter('deviceId', 0); + } + } +}); diff --git a/web/app/view/AttributesAliases.js b/web/app/view/AttributesAliases.js deleted file mode 100644 index 8fcf10b..0000000 --- a/web/app/view/AttributesAliases.js +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) - * - * 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 . - */ - -Ext.define('Traccar.view.AttributesAliases', { - extend: 'Ext.grid.Panel', - xtype: 'attributesAliasesView', - - requires: [ - 'Traccar.view.AttributesAliasesController', - 'Traccar.view.EditToolbar' - ], - - controller: 'attributesAliases', - store: 'AllAttributeAliases', - - selType: 'rowmodel', - - tbar: { - xtype: 'editToolbar', - items: ['-', { - xtype: 'combobox', - reference: 'deviceField', - store: 'Devices', - displayField: 'name', - valueField: 'id', - typeAhead: true, - listeners: { - change: 'onDeviceChange' - } - }] - }, - - listeners: { - selectionchange: 'onSelectionChange' - }, - - columns: [{ - text: Strings.sharedAttribute, - dataIndex: 'attribute', - flex: 1 - }, { - text: Strings.sharedAlias, - dataIndex: 'alias', - flex: 1 - }] -}); diff --git a/web/app/view/AttributesAliasesController.js b/web/app/view/AttributesAliasesController.js deleted file mode 100644 index 8f406c4..0000000 --- a/web/app/view/AttributesAliasesController.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) - * - * 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 . - */ - -Ext.define('Traccar.view.AttributesAliasesController', { - extend: 'Ext.app.ViewController', - alias: 'controller.attributesAliases', - - requires: [ - 'Traccar.view.AttributeAliasDialog', - 'Traccar.model.AttributeAlias' - ], - - init: function () { - var admin = Traccar.app.getUser().get('admin'); - this.lookupReference('deviceField').setStore(admin ? 'AllDevices' : 'Devices'); - this.lookupReference('toolbarAddButton').setDisabled(true); - this.lookupReference('toolbarEditButton').setDisabled(true); - this.lookupReference('toolbarRemoveButton').setDisabled(true); - this.getView().getStore().filter('deviceId', 0); - }, - - onAddClick: function () { - var attributeAlias, dialog, deviceId; - attributeAlias = Ext.create('Traccar.model.AttributeAlias'); - attributeAlias.store = this.getView().getStore(); - deviceId = this.lookupReference('deviceField').getValue(); - attributeAlias.set('deviceId', deviceId); - dialog = Ext.create('Traccar.view.AttributeAliasDialog'); - dialog.down('form').loadRecord(attributeAlias); - dialog.show(); - }, - - onEditClick: function () { - var attributeAlias, dialog; - attributeAlias = this.getView().getSelectionModel().getSelection()[0]; - dialog = Ext.create('Traccar.view.AttributeAliasDialog'); - dialog.down('form').loadRecord(attributeAlias); - dialog.show(); - }, - - onRemoveClick: function () { - var attributeAlias = this.getView().getSelectionModel().getSelection()[0]; - Ext.Msg.show({ - title: Strings.sharedAttributeAlias, - message: Strings.sharedRemoveConfirm, - buttons: Ext.Msg.YESNO, - buttonText: { - yes: Strings.sharedRemove, - no: Strings.sharedCancel - }, - scope: this, - fn: function (btn) { - var store = this.getView().getStore(); - if (btn === 'yes') { - store.remove(attributeAlias); - store.sync(); - } - } - }); - }, - - onSelectionChange: function (selected) { - var disabled = !this.lookupReference('deviceField').getValue(); - this.lookupReference('toolbarAddButton').setDisabled(disabled); - disabled = selected.length === 0 || !this.lookupReference('deviceField').getValue(); - this.lookupReference('toolbarEditButton').setDisabled(disabled); - this.lookupReference('toolbarRemoveButton').setDisabled(disabled); - }, - - onDeviceChange: function (combobox, newValue, oldValue) { - var admin = Traccar.app.getUser().get('admin'); - this.onSelectionChange(''); - if (newValue !== null) { - this.getView().getStore().filter('deviceId', newValue); - if (admin && this.getView().getStore().getCount() === 0) { - this.getView().getStore().getProxy().setExtraParam('deviceId', newValue); - this.getView().getStore().load(); - } - } else { - this.getView().getStore().filter('deviceId', 0); - } - } -}); diff --git a/web/app/view/SettingsMenu.js b/web/app/view/SettingsMenu.js index 691bf65..391db56 100644 --- a/web/app/view/SettingsMenu.js +++ b/web/app/view/SettingsMenu.js @@ -59,9 +59,9 @@ Ext.define('Traccar.view.SettingsMenu', { reference: 'settingsNotificationsButton' }, { hidden: true, - text: Strings.sharedAttributesAliases, - handler: 'onAttributesAliasesClick', - reference: 'settingsAttributesAliasesButton' + text: Strings.sharedAttributeAliases, + handler: 'onAttributeAliasesClick', + reference: 'settingsAttributeAliasesButton' }, { text: Strings.loginLogout, handler: 'onLogoutClick' diff --git a/web/app/view/SettingsMenuController.js b/web/app/view/SettingsMenuController.js index b01e4f8..ceef8ab 100644 --- a/web/app/view/SettingsMenuController.js +++ b/web/app/view/SettingsMenuController.js @@ -27,7 +27,7 @@ Ext.define('Traccar.view.SettingsMenuController', { 'Traccar.view.Groups', 'Traccar.view.Geofences', 'Traccar.view.Notifications', - 'Traccar.view.AttributesAliases', + 'Traccar.view.AttributeAliases', 'Traccar.view.BaseWindow' ], @@ -43,7 +43,7 @@ Ext.define('Traccar.view.SettingsMenuController', { this.lookupReference('settingsGroupsButton').setHidden(false); this.lookupReference('settingsGeofencesButton').setHidden(false); this.lookupReference('settingsNotificationsButton').setHidden(false); - this.lookupReference('settingsAttributesAliasesButton').setHidden(false); + this.lookupReference('settingsAttributeAliasesButton').setHidden(false); } }, @@ -101,12 +101,12 @@ Ext.define('Traccar.view.SettingsMenuController', { }).show(); }, - onAttributesAliasesClick: function () { + onAttributeAliasesClick: function () { Ext.create('Traccar.view.BaseWindow', { - title: Strings.sharedAttributesAliases, + title: Strings.sharedAttributeAliases, modal: false, items: { - xtype: 'attributesAliasesView' + xtype: 'attributeAliasesView' } }).show(); }, diff --git a/web/app/view/StateController.js b/web/app/view/StateController.js index c0f5b9a..8a19494 100644 --- a/web/app/view/StateController.js +++ b/web/app/view/StateController.js @@ -44,7 +44,7 @@ Ext.define('Traccar.view.StateController', { '#Positions': { clear: 'clearReport' }, - '#AllAttributeAliases': { + '#AttributeAliases': { add: 'updateAliases', update: 'updateAliases' } @@ -52,6 +52,10 @@ Ext.define('Traccar.view.StateController', { } }, + init: function () { + this.aliasesStore = Ext.getStore('AttributeAliases'); + }, + keys: (function () { var i, list, result; result = {}; @@ -88,8 +92,12 @@ Ext.define('Traccar.view.StateController', { } }, + findAttribute: function (record) { + return record.get('deviceId') === this.position.get('deviceId') && record.get('attribute') === this.lookupAttribute; + }, + updatePosition: function () { - var attributes, store, key, aliasesStore, attributeAlias, name; + var attributes, store, key, aliasIndex, name; store = Ext.getStore('Attributes'); store.removeAll(); @@ -103,16 +111,14 @@ Ext.define('Traccar.view.StateController', { } } - aliasesStore = Ext.getStore('AllAttributeAliases'); - aliasesStore.filter('deviceId', this.position.get('deviceId')); - attributes = this.position.get('attributes'); if (attributes instanceof Object) { for (key in attributes) { if (attributes.hasOwnProperty(key)) { - attributeAlias = aliasesStore.findRecord('attribute', key, 0, false, true, true); - if (attributeAlias !== null) { - name = attributeAlias.get('alias'); + this.lookupAttribute = key; + aliasIndex = this.aliasesStore.findBy(this.findAttribute, this); + if (aliasIndex !== -1) { + name = this.aliasesStore.getAt(aliasIndex).get('alias'); } else { name = key.replace(/^./, function (match) { return match.toUpperCase(); @@ -159,16 +165,18 @@ Ext.define('Traccar.view.StateController', { }, onAliasEditClick: function () { - var attribute, aliasesStore, attributeAlias, dialog; + var attribute, aliasIndex, attributeAlias, dialog; attribute = this.getView().getSelectionModel().getSelection()[0]; - aliasesStore = Ext.getStore('AllAttributeAliases'); - attributeAlias = aliasesStore.findRecord('attribute', attribute.get('attribute'), 0, false, true, true); - if (attributeAlias === null) { + this.lookupAttribute = attribute.get('attribute'); + aliasIndex = this.aliasesStore.findBy(this.findAttribute, this); + if (aliasIndex !== -1) { + attributeAlias = this.aliasesStore.getAt(aliasIndex); + } else { attributeAlias = Ext.create('Traccar.model.AttributeAlias', { deviceId: this.position.get('deviceId'), attribute: attribute.get('attribute') }); - attributeAlias.store = aliasesStore; + attributeAlias.store = this.aliasesStore; } dialog = Ext.create('Traccar.view.AttributeAliasDialog'); dialog.down('form').loadRecord(attributeAlias); diff --git a/web/l10n/en.json b/web/l10n/en.json index 1bf53b3..11b2e83 100644 --- a/web/l10n/en.json +++ b/web/l10n/en.json @@ -30,7 +30,7 @@ "sharedMinuteAbbreviation": "m", "sharedGetMapState": "Get Map State", "sharedAttributeAlias": "Attribute Alias", - "sharedAttributesAliases": "Attributes Aliases", + "sharedAttributeAliases": "Attribute Aliases", "sharedAlias": "Alias", "errorTitle": "Error", "errorUnknown": "Unknown error", -- cgit v1.2.3