Commit 9e9b0d7595c6731c1ebd785cafd73481c038c5c1
Committed by
Andrew Shvayka
1 parent
e253b644
Update widget settings
Showing
4 changed files
with
127 additions
and
103 deletions
@@ -320,7 +320,7 @@ | @@ -320,7 +320,7 @@ | ||
320 | "templateHtml": "<tb-multiple-input-widget \n form-id=\"formId\"\n ctx=\"ctx\">\n</tb-multiple-input-widget>", | 320 | "templateHtml": "<tb-multiple-input-widget \n form-id=\"formId\"\n ctx=\"ctx\">\n</tb-multiple-input-widget>", |
321 | "templateCss": "", | 321 | "templateCss": "", |
322 | "controllerScript": "let $scope;\r\nlet settings;\r\nlet attributeService;\r\nlet toast;\r\nlet utils;\r\nlet types;\r\n\r\nself.onInit = function() {\r\n var scope = self.ctx.$scope;\r\n var id = self.ctx.$scope.$injector.get('utils').guid();\r\n scope.formId = \"form-\"+id;\r\n scope.ctx = self.ctx;\r\n}\r\n\r\nself.onDataUpdated = function() {\r\n self.ctx.$scope.$broadcast('multiple-input-data-updated', self.ctx.$scope.formId);\r\n}\r\n\r\nself.onResize = function() {\r\n self.ctx.$scope.$broadcast('multiple-input-resize', self.ctx.$scope.formId);\r\n}\r\n", | 322 | "controllerScript": "let $scope;\r\nlet settings;\r\nlet attributeService;\r\nlet toast;\r\nlet utils;\r\nlet types;\r\n\r\nself.onInit = function() {\r\n var scope = self.ctx.$scope;\r\n var id = self.ctx.$scope.$injector.get('utils').guid();\r\n scope.formId = \"form-\"+id;\r\n scope.ctx = self.ctx;\r\n}\r\n\r\nself.onDataUpdated = function() {\r\n self.ctx.$scope.$broadcast('multiple-input-data-updated', self.ctx.$scope.formId);\r\n}\r\n\r\nself.onResize = function() {\r\n self.ctx.$scope.$broadcast('multiple-input-resize', self.ctx.$scope.formId);\r\n}\r\n", |
323 | - "settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"MultipleInput\",\n \"properties\": {\n \"widgetTitle\": {\n \"title\": \"Widget title\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"showActionButtons\":{\n \"title\":\"Show action buttons\",\n \"type\":\"boolean\",\n \"default\": true\n },\n \"showResultMessage\":{\n \"title\":\"Show result message\",\n \"type\":\"boolean\",\n \"default\": true\n },\n \"fieldsAlignment\": {\n \"title\": \"Fields alignment\",\n \"type\": \"string\",\n \"default\": \"row\"\n },\n \"fieldsInRow\": {\n \"title\": \"Number of fields in the row\",\n \"type\": \"number\",\n \"default\": \"2\"\n }\n },\n \"required\": []\n },\n \"form\": [\n \"widgetTitle\",\n \"showActionButtons\",\n \"showResultMessage\",\n {\n \"key\": \"fieldsAlignment\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"row\",\n \"label\": \"Row (default)\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n }\n ]\n },\n \"fieldsInRow\"\n ]\n}", | 323 | + "settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"MultipleInput\",\n \"properties\": {\n \"widgetTitle\": {\n \"title\": \"Widget title\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"showActionButtons\":{\n \"title\":\"Show action buttons\",\n \"type\":\"boolean\",\n \"default\": true\n },\n \"updateAllValues\": {\n \"title\":\"Update all values, not only modified (only if action buttons are visible)\",\n \"type\":\"boolean\",\n \"default\": false\n },\n \"showResultMessage\":{\n \"title\":\"Show result message\",\n \"type\":\"boolean\",\n \"default\": true\n },\n \"showGroupTitle\": {\n \"title\":\"Show title for group of fields, related to different entities\",\n \"type\":\"boolean\",\n \"default\": false\n },\n \"groupTitle\": {\n \"title\": \"Group title\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"fieldsAlignment\": {\n \"title\": \"Fields alignment\",\n \"type\": \"string\",\n \"default\": \"row\"\n },\n \"fieldsInRow\": {\n \"title\": \"Number of fields in the row\",\n \"type\": \"number\",\n \"default\": \"2\"\n }\n },\n \"required\": []\n },\n \"form\": [\n \"widgetTitle\",\n \"showActionButtons\",\n \"updateAllValues\",\n \"showResultMessage\",\n \"showGroupTitle\",\n \"groupTitle\",\n {\n \"key\": \"fieldsAlignment\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"row\",\n \"label\": \"Row (default)\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n }\n ]\n },\n \"fieldsInRow\"\n ]\n}", |
324 | "dataKeySettingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"DataKeySettings\",\n \"properties\": {\n \"dataKeyType\": {\n \"title\": \"Datakey type\",\n \"type\": \"string\",\n \"default\": \"server\"\n },\n \"dataKeyValueType\": {\n \"title\": \"Datakey value type\",\n \"type\": \"string\",\n \"default\": \"string\"\n },\n \"required\": {\n \"title\": \"Value is required\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"isEditable\": {\n \"title\": \"Ability to edit attribute\",\n \"type\": \"string\",\n \"default\": \"editable\"\n },\n \"disabledOnDataKey\": {\n \"title\": \"Disable on false value of another datakey (specify datakey name)\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"dataKeyHidden\": {\n \"title\": \"Hide input field\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"step\": {\n \"title\": \"Step interval between values (only for numbers)\",\n \"type\": \"number\",\n \"default\": \"1\"\n },\n \"requiredErrorMessage\": {\n \"title\": \"'Required' error message\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"icon\": {\n \"title\": \"Icon to show before input cell\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n },\n \"required\": []\n },\n \"form\": [\n {\n \"key\": \"dataKeyType\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"server\",\n \"label\": \"Server attribute (default)\"\n },\n {\n \"value\": \"shared\",\n \"label\": \"Shared attribute\"\n },\n {\n \"value\": \"timeseries\",\n \"label\": \"Timeseries\"\n }\n ]\n },\n {\n \"key\": \"dataKeyValueType\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"string\",\n \"label\": \"String\"\n },\n {\n \"value\": \"double\",\n \"label\": \"Double\"\n },\n {\n \"value\": \"integer\",\n \"label\": \"Integer\"\n },\n {\n \"value\": \"booleanCheckbox\",\n \"label\": \"Boolean (Checkbox)\"\n },\n {\n \"value\": \"booleanSwitch\",\n \"label\": \"Boolean (Switch)\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Date & Time\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time\"\n }\n ]\n },\n \"required\",\n {\n \"key\": \"isEditable\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"editable\",\n \"label\": \"Editable (default)\"\n },\n {\n \"value\": \"disabled\",\n \"label\": \"Disabled\"\n },\n {\n \"value\": \"readonly\",\n \"label\": \"Read-only\"\n }\n ]\n },\n \"disabledOnDataKey\",\n \"dataKeyHidden\",\n \"step\",\n \"requiredErrorMessage\",\n\t\t{\n \t\t\"key\": \"icon\",\n\t\t\t\"type\": \"icon\"\n\t\t}\n ]\n}\n", | 324 | "dataKeySettingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"DataKeySettings\",\n \"properties\": {\n \"dataKeyType\": {\n \"title\": \"Datakey type\",\n \"type\": \"string\",\n \"default\": \"server\"\n },\n \"dataKeyValueType\": {\n \"title\": \"Datakey value type\",\n \"type\": \"string\",\n \"default\": \"string\"\n },\n \"required\": {\n \"title\": \"Value is required\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"isEditable\": {\n \"title\": \"Ability to edit attribute\",\n \"type\": \"string\",\n \"default\": \"editable\"\n },\n \"disabledOnDataKey\": {\n \"title\": \"Disable on false value of another datakey (specify datakey name)\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"dataKeyHidden\": {\n \"title\": \"Hide input field\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"step\": {\n \"title\": \"Step interval between values (only for numbers)\",\n \"type\": \"number\",\n \"default\": \"1\"\n },\n \"requiredErrorMessage\": {\n \"title\": \"'Required' error message\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"icon\": {\n \"title\": \"Icon to show before input cell\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n },\n \"required\": []\n },\n \"form\": [\n {\n \"key\": \"dataKeyType\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"server\",\n \"label\": \"Server attribute (default)\"\n },\n {\n \"value\": \"shared\",\n \"label\": \"Shared attribute\"\n },\n {\n \"value\": \"timeseries\",\n \"label\": \"Timeseries\"\n }\n ]\n },\n {\n \"key\": \"dataKeyValueType\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"string\",\n \"label\": \"String\"\n },\n {\n \"value\": \"double\",\n \"label\": \"Double\"\n },\n {\n \"value\": \"integer\",\n \"label\": \"Integer\"\n },\n {\n \"value\": \"booleanCheckbox\",\n \"label\": \"Boolean (Checkbox)\"\n },\n {\n \"value\": \"booleanSwitch\",\n \"label\": \"Boolean (Switch)\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Date & Time\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time\"\n }\n ]\n },\n \"required\",\n {\n \"key\": \"isEditable\",\n \"type\": \"rc-select\",\n \"multiple\": false,\n \"items\": [\n {\n \"value\": \"editable\",\n \"label\": \"Editable (default)\"\n },\n {\n \"value\": \"disabled\",\n \"label\": \"Disabled\"\n },\n {\n \"value\": \"readonly\",\n \"label\": \"Read-only\"\n }\n ]\n },\n \"disabledOnDataKey\",\n \"dataKeyHidden\",\n \"step\",\n \"requiredErrorMessage\",\n\t\t{\n \t\t\"key\": \"icon\",\n\t\t\t\"type\": \"icon\"\n\t\t}\n ]\n}\n", |
325 | "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Sin\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.23592248334107624,\"funcBody\":\"return Math.round(1000*Math.sin(time/5000));\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Update Multiple Attributes\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{}}" | 325 | "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Sin\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.23592248334107624,\"funcBody\":\"return Math.round(1000*Math.sin(time/5000));\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Update Multiple Attributes\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{}}" |
326 | } | 326 | } |
@@ -53,6 +53,7 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | @@ -53,6 +53,7 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | ||
53 | vm.discardAll = discardAll; | 53 | vm.discardAll = discardAll; |
54 | vm.inputChanged = inputChanged; | 54 | vm.inputChanged = inputChanged; |
55 | vm.save = save; | 55 | vm.save = save; |
56 | + vm.getGroupTitle = getGroupTitle; | ||
56 | 57 | ||
57 | $scope.$watch('vm.ctx', function () { | 58 | $scope.$watch('vm.ctx', function () { |
58 | if (vm.ctx && vm.ctx.defaultSubscription) { | 59 | if (vm.ctx && vm.ctx.defaultSubscription) { |
@@ -114,7 +115,7 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | @@ -114,7 +115,7 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | ||
114 | var serverAttributes = [], sharedAttributes = [], telemetry = []; | 115 | var serverAttributes = [], sharedAttributes = [], telemetry = []; |
115 | for (let j = 0; j < data[i].keys.length; j++) { | 116 | for (let j = 0; j < data[i].keys.length; j++) { |
116 | var key = data[i].keys[j]; | 117 | var key = data[i].keys[j]; |
117 | - if (key.data.currentValue !== key.data.originalValue) { | 118 | + if ((key.data.currentValue !== key.data.originalValue) || vm.settings.updateAllValues) { |
118 | var attribute = { | 119 | var attribute = { |
119 | key: key.name | 120 | key: key.name |
120 | }; | 121 | }; |
@@ -131,7 +132,11 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | @@ -131,7 +132,11 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | ||
131 | attribute.value = key.data.currentValue; | 132 | attribute.value = key.data.currentValue; |
132 | } | 133 | } |
133 | } else { | 134 | } else { |
134 | - attribute.value = key.data.currentValue; | 135 | + if (key.data.currentValue === '') { |
136 | + attribute.value = null; | ||
137 | + } else { | ||
138 | + attribute.value = key.data.currentValue; | ||
139 | + } | ||
135 | } | 140 | } |
136 | 141 | ||
137 | switch (key.settings.dataKeyType) { | 142 | switch (key.settings.dataKeyType) { |
@@ -201,6 +206,8 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | @@ -201,6 +206,8 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | ||
201 | 206 | ||
202 | vm.ctx.widgetTitle = vm.widgetTitle; | 207 | vm.ctx.widgetTitle = vm.widgetTitle; |
203 | 208 | ||
209 | + vm.settings.groupTitle = vm.settings.groupTitle || "${entityName}"; | ||
210 | + | ||
204 | //For backward compatibility | 211 | //For backward compatibility |
205 | if (angular.isUndefined(vm.settings.showActionButtons)) { | 212 | if (angular.isUndefined(vm.settings.showActionButtons)) { |
206 | vm.settings.showActionButtons = true; | 213 | vm.settings.showActionButtons = true; |
@@ -329,4 +336,8 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | @@ -329,4 +336,8 @@ function MultipleInputWidgetController($q, $scope, $translate, attributeService, | ||
329 | vm.changeAlignment = (vm.ctx.$container[0].offsetWidth < 620); | 336 | vm.changeAlignment = (vm.ctx.$container[0].offsetWidth < 620); |
330 | vm.smallWidthContainer = (vm.ctx.$container[0].offsetWidth < 420); | 337 | vm.smallWidthContainer = (vm.ctx.$container[0].offsetWidth < 420); |
331 | } | 338 | } |
339 | + | ||
340 | + function getGroupTitle(datasource) { | ||
341 | + return utils.createLabelFromDatasource(datasource, vm.settings.groupTitle); | ||
342 | + } | ||
332 | } | 343 | } |
@@ -18,6 +18,16 @@ | @@ -18,6 +18,16 @@ | ||
18 | overflow-x: hidden; | 18 | overflow-x: hidden; |
19 | overflow-y: auto; | 19 | overflow-y: auto; |
20 | 20 | ||
21 | + .fields-group { | ||
22 | + padding: 0 8px; | ||
23 | + margin: 10px 0; | ||
24 | + border: 1px groove rgba(0, 0, 0, .25); | ||
25 | + | ||
26 | + legend { | ||
27 | + color: rgba(0, 0, 0, .7); | ||
28 | + } | ||
29 | + } | ||
30 | + | ||
21 | .input-field { | 31 | .input-field { |
22 | padding-right: 10px; | 32 | padding-right: 10px; |
23 | 33 |
@@ -17,118 +17,121 @@ | @@ -17,118 +17,121 @@ | ||
17 | --> | 17 | --> |
18 | <form class="tb-multiple-input" name="multipleInputForm" ng-submit="vm.save()" novalidate autocomplete="off"> | 18 | <form class="tb-multiple-input" name="multipleInputForm" ng-submit="vm.save()" novalidate autocomplete="off"> |
19 | <div style="padding: 0 8px;" ng-if="vm.entityDetected && vm.isAllParametersValid"> | 19 | <div style="padding: 0 8px;" ng-if="vm.entityDetected && vm.isAllParametersValid"> |
20 | - <div layout="row" ng-repeat="source in vm.sources" layout-wrap ng-class="{'vertical-alignment': vm.isVerticalAlignment || vm.changeAlignment}"> | ||
21 | - <div ng-repeat="key in source.keys" ng-if="!key.settings.dataKeyHidden" ng-style="{'width': (vm.isVerticalAlignment || vm.changeAlignment) ? '100%' : vm.inputWidthSettings}"> | ||
22 | - <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'string')"> | ||
23 | - <md-input-container class="md-block"> | ||
24 | - <label>{{key.label}}</label> | ||
25 | - <md-icon class="material-icons" ng-if="key.settings.icon"> | ||
26 | - {{key.settings.icon}} | ||
27 | - </md-icon> | ||
28 | - <input name="{{key.name}}" | ||
29 | - ng-disabled="(key.settings.isEditable === 'disabled') || key.settings.disabledOnCondition" | ||
30 | - ng-readonly="key.settings.isEditable === 'readonly'" | ||
31 | - ng-model="key.data.currentValue" | ||
32 | - ng-required="key.settings.required" | ||
33 | - type="text" | ||
34 | - md-select-on-focus | ||
35 | - ng-blur="vm.inputChanged(source,key)"> | ||
36 | - <div ng-messages="multipleInputForm[key.name].$error"> | ||
37 | - <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
38 | - </div> | ||
39 | - </md-input-container> | ||
40 | - </div> | ||
41 | - <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'double')"> | ||
42 | - <md-input-container class="md-block"> | ||
43 | - <label>{{key.label}}</label> | ||
44 | - <md-icon class="material-icons" ng-if="key.settings.icon"> | ||
45 | - {{key.settings.icon}} | ||
46 | - </md-icon> | ||
47 | - <input name="{{key.name}}" | ||
48 | - ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
49 | - ng-readonly="key.settings.isEditable === 'readonly'" | ||
50 | - ng-model="key.data.currentValue" | ||
51 | - ng-required="key.settings.required" | ||
52 | - type="number" | ||
53 | - step="key.settings.step" | ||
54 | - md-select-on-focus | ||
55 | - ng-blur="vm.inputChanged(source,key)"> | ||
56 | - <div ng-messages="multipleInputForm[key.name].$error"> | ||
57 | - <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
58 | - </div> | ||
59 | - </md-input-container> | ||
60 | - </div> | ||
61 | - <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'integer')"> | ||
62 | - <md-input-container class="md-block"> | ||
63 | - <label>{{key.label}}</label> | ||
64 | - <md-icon class="material-icons" ng-if="key.settings.icon"> | ||
65 | - {{key.settings.icon}} | ||
66 | - </md-icon> | ||
67 | - <input name="{{key.name}}" | ||
68 | - ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
69 | - ng-readonly="key.settings.isEditable === 'readonly'" | ||
70 | - ng-model="key.data.currentValue" | ||
71 | - ng-required="key.settings.required" | ||
72 | - type="number" | ||
73 | - step="key.settings.step" | ||
74 | - md-select-on-focus | ||
75 | - ng-pattern="/^-?[0-9]+$/" | ||
76 | - ng-blur="vm.inputChanged(source,key)"> | ||
77 | - <div ng-messages="multipleInputForm[key.name].$error"> | ||
78 | - <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
79 | - <div translate ng-message="pattern">value.invalid-integer-value</div> | ||
80 | - </div> | ||
81 | - </md-input-container> | ||
82 | - </div> | ||
83 | - <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'booleanCheckbox')" class="md-block"> | 20 | + <fieldset ng-repeat="source in vm.sources" ng-class="{'fields-group': vm.settings.showGroupTitle}"> |
21 | + <legend class="group-title" ng-if="vm.settings.showGroupTitle">{{ vm.getGroupTitle(source.datasource) }}</legend> | ||
22 | + <div layout="row" layout-wrap ng-class="{'vertical-alignment': vm.isVerticalAlignment || vm.changeAlignment}"> | ||
23 | + <div ng-repeat="key in source.keys" ng-if="!key.settings.dataKeyHidden" ng-style="{'width': (vm.isVerticalAlignment || vm.changeAlignment) ? '100%' : vm.inputWidthSettings}"> | ||
24 | + <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'string')"> | ||
25 | + <md-input-container class="md-block"> | ||
26 | + <label>{{key.label}}</label> | ||
27 | + <md-icon class="material-icons" ng-if="key.settings.icon"> | ||
28 | + {{key.settings.icon}} | ||
29 | + </md-icon> | ||
30 | + <input name="{{key.name}}" | ||
31 | + ng-disabled="(key.settings.isEditable === 'disabled') || key.settings.disabledOnCondition" | ||
32 | + ng-readonly="key.settings.isEditable === 'readonly'" | ||
33 | + ng-model="key.data.currentValue" | ||
34 | + ng-required="key.settings.required" | ||
35 | + type="text" | ||
36 | + md-select-on-focus | ||
37 | + ng-blur="vm.inputChanged(source,key)"> | ||
38 | + <div ng-messages="multipleInputForm[key.name].$error"> | ||
39 | + <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
40 | + </div> | ||
41 | + </md-input-container> | ||
42 | + </div> | ||
43 | + <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'double')"> | ||
44 | + <md-input-container class="md-block"> | ||
45 | + <label>{{key.label}}</label> | ||
46 | + <md-icon class="material-icons" ng-if="key.settings.icon"> | ||
47 | + {{key.settings.icon}} | ||
48 | + </md-icon> | ||
49 | + <input name="{{key.name}}" | ||
50 | + ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
51 | + ng-readonly="key.settings.isEditable === 'readonly'" | ||
52 | + ng-model="key.data.currentValue" | ||
53 | + ng-required="key.settings.required" | ||
54 | + type="number" | ||
55 | + step="key.settings.step" | ||
56 | + md-select-on-focus | ||
57 | + ng-blur="vm.inputChanged(source,key)"> | ||
58 | + <div ng-messages="multipleInputForm[key.name].$error"> | ||
59 | + <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
60 | + </div> | ||
61 | + </md-input-container> | ||
62 | + </div> | ||
63 | + <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'integer')"> | ||
64 | + <md-input-container class="md-block"> | ||
65 | + <label>{{key.label}}</label> | ||
66 | + <md-icon class="material-icons" ng-if="key.settings.icon"> | ||
67 | + {{key.settings.icon}} | ||
68 | + </md-icon> | ||
69 | + <input name="{{key.name}}" | ||
70 | + ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
71 | + ng-readonly="key.settings.isEditable === 'readonly'" | ||
72 | + ng-model="key.data.currentValue" | ||
73 | + ng-required="key.settings.required" | ||
74 | + type="number" | ||
75 | + step="key.settings.step" | ||
76 | + md-select-on-focus | ||
77 | + ng-pattern="/^-?[0-9]+$/" | ||
78 | + ng-blur="vm.inputChanged(source,key)"> | ||
79 | + <div ng-messages="multipleInputForm[key.name].$error"> | ||
80 | + <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
81 | + <div translate ng-message="pattern">value.invalid-integer-value</div> | ||
82 | + </div> | ||
83 | + </md-input-container> | ||
84 | + </div> | ||
85 | + <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'booleanCheckbox')" class="md-block"> | ||
84 | <md-checkbox name="{{key.name}}" | 86 | <md-checkbox name="{{key.name}}" |
85 | ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | 87 | ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" |
86 | ng-model="key.data.currentValue" | 88 | ng-model="key.data.currentValue" |
87 | ng-change="vm.inputChanged(source,key)"> | 89 | ng-change="vm.inputChanged(source,key)"> |
88 | {{key.label}} | 90 | {{key.label}} |
89 | </md-checkbox> | 91 | </md-checkbox> |
90 | - </div> | ||
91 | - <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'booleanSwitch')" class="md-block"> | 92 | + </div> |
93 | + <div class="input-field" ng-if="(key.settings.dataKeyValueType === 'booleanSwitch')" class="md-block"> | ||
92 | <md-switch name="{{key.name}}" | 94 | <md-switch name="{{key.name}}" |
93 | - ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
94 | - ng-model="key.data.currentValue" | ||
95 | - ng-change="vm.inputChanged(source,key)" | ||
96 | - aria-label="{{key.label}}" | ||
97 | - md-invert> | 95 | + ng-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" |
96 | + ng-model="key.data.currentValue" | ||
97 | + ng-change="vm.inputChanged(source,key)" | ||
98 | + aria-label="{{key.label}}" | ||
99 | + md-invert> | ||
98 | {{key.label}} | 100 | {{key.label}} |
99 | </md-switch> | 101 | </md-switch> |
100 | - </div> | ||
101 | - <div ng-if="(key.settings.dataKeyValueType === 'dateTime') || | ||
102 | - (key.settings.dataKeyValueType === 'date') || | ||
103 | - (key.settings.dataKeyValueType === 'time')" | ||
104 | - class="md-block input-field date-time-input" layout="column"> | ||
105 | - <label class="date-time-input__label">{{key.label}}</label> | ||
106 | - <div layout="row" ng-class="{'vertically-aligned': vm.smallWidthContainer}"> | ||
107 | - <mdp-date-picker name="{{key.name + 'Date'}}" | ||
108 | - ng-if="key.settings.dataKeyValueType !== 'time'" | ||
109 | - mdp-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
110 | - ng-model="key.data.currentValue" | ||
111 | - ng-change="vm.inputChanged(source,key)" | ||
112 | - mdp-placeholder="{{ 'widgets.input-widgets.date' | translate }}"> | ||
113 | - <div ng-messages="multipleInputForm[key.name].$error"> | ||
114 | - <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
115 | - </div> | ||
116 | - </mdp-date-picker> | ||
117 | - <mdp-time-picker name="{{key.name + 'Time'}}" | ||
118 | - ng-if="key.settings.dataKeyValueType !== 'date'" | ||
119 | - mdp-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
120 | - ng-model="key.data.currentValue" | ||
121 | - ng-change="vm.inputChanged(source,key)" | ||
122 | - mdp-placeholder="{{ 'widgets.input-widgets.time' | translate }}" | ||
123 | - mdp-auto-switch="true"> | ||
124 | - <div ng-messages="multipleInputForm[key.name].$error"> | ||
125 | - <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
126 | - </div> | ||
127 | - </mdp-time-picker> | 102 | + </div> |
103 | + <div ng-if="(key.settings.dataKeyValueType === 'dateTime') || | ||
104 | + (key.settings.dataKeyValueType === 'date') || | ||
105 | + (key.settings.dataKeyValueType === 'time')" | ||
106 | + class="md-block input-field date-time-input" layout="column"> | ||
107 | + <label class="date-time-input__label">{{key.label}}</label> | ||
108 | + <div layout="row" ng-class="{'vertically-aligned': vm.smallWidthContainer}"> | ||
109 | + <mdp-date-picker name="{{key.name + 'Date'}}" | ||
110 | + ng-if="key.settings.dataKeyValueType !== 'time'" | ||
111 | + mdp-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
112 | + ng-model="key.data.currentValue" | ||
113 | + ng-change="vm.inputChanged(source,key)" | ||
114 | + mdp-placeholder="{{ 'widgets.input-widgets.date' | translate }}"> | ||
115 | + <div ng-messages="multipleInputForm[key.name].$error"> | ||
116 | + <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
117 | + </div> | ||
118 | + </mdp-date-picker> | ||
119 | + <mdp-time-picker name="{{key.name + 'Time'}}" | ||
120 | + ng-if="key.settings.dataKeyValueType !== 'date'" | ||
121 | + mdp-disabled="key.settings.isEditable === 'disabled' || key.settings.disabledOnCondition" | ||
122 | + ng-model="key.data.currentValue" | ||
123 | + ng-change="vm.inputChanged(source,key)" | ||
124 | + mdp-placeholder="{{ 'widgets.input-widgets.time' | translate }}" | ||
125 | + mdp-auto-switch="true"> | ||
126 | + <div ng-messages="multipleInputForm[key.name].$error"> | ||
127 | + <div ng-message="required">{{ key.settings.requiredErrorMessage }}</div> | ||
128 | + </div> | ||
129 | + </mdp-time-picker> | ||
130 | + </div> | ||
128 | </div> | 131 | </div> |
129 | </div> | 132 | </div> |
130 | </div> | 133 | </div> |
131 | - </div> | 134 | + </fieldset> |
132 | <div class="md-padding" layout="row" layout-align="end center" ng-if="vm.entityDetected && vm.settings.showActionButtons"> | 135 | <div class="md-padding" layout="row" layout-align="end center" ng-if="vm.entityDetected && vm.settings.showActionButtons"> |
133 | <md-button class="md-primary" ng-click="vm.discardAll()" style="max-height: 50px; margin-right:20px;" ng-disabled="!multipleInputForm.$dirty"> | 136 | <md-button class="md-primary" ng-click="vm.discardAll()" style="max-height: 50px; margin-right:20px;" ng-disabled="!multipleInputForm.$dirty"> |
134 | {{ 'action.undo' | translate }} | 137 | {{ 'action.undo' | translate }} |