Commit 9a5e4db825ae15bd8069c30ec8b5d9a094960788

Authored by Andrew Shvayka
2 parents 8ab4f144 fd251f0d

Merge branch 'master' of github.com:thingsboard/thingsboard

Showing 38 changed files with 309 additions and 114 deletions
... ... @@ -15,7 +15,7 @@
15 15 "resources": [],
16 16 "templateHtml": "",
17 17 "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}",
18   - "controllerScript": "self.onInit = function() {\n \n self.ctx.datasourceTitleCells = [];\n self.ctx.valueCells = [];\n self.ctx.labelCells = [];\n \n for (var i=0; i < self.ctx.datasources.length; i++) {\n var tbDatasource = self.ctx.datasources[i];\n\n var datasourceId = 'tbDatasource' + i;\n self.ctx.$container.append(\n \"<div id='\" + datasourceId +\n \"' class='tbDatasource-container'></div>\"\n );\n\n var datasourceContainer = $('#' + datasourceId,\n self.ctx.$container);\n\n datasourceContainer.append(\n \"<div class='tbDatasource-title'>\" +\n tbDatasource.name + \"</div>\"\n );\n \n var datasourceTitleCell = $('.tbDatasource-title', datasourceContainer);\n self.ctx.datasourceTitleCells.push(datasourceTitleCell);\n \n var tableId = 'table' + i;\n datasourceContainer.append(\n \"<table id='\" + tableId +\n \"' class='tbDatasource-table'><col width='30%'><col width='70%'></table>\"\n );\n var table = $('#' + tableId, self.ctx.$container);\n\n for (var a = 0; a < tbDatasource.dataKeys.length; a++) {\n var dataKey = tbDatasource.dataKeys[a];\n var labelCellId = 'labelCell' + a;\n var cellId = 'cell' + a;\n table.append(\"<tr><td id='\" + labelCellId + \"'>\" + dataKey.label +\n \"</td><td id='\" + cellId +\n \"'></td></tr>\");\n var labelCell = $('#' + labelCellId, table);\n self.ctx.labelCells.push(labelCell);\n var valueCell = $('#' + cellId, table);\n self.ctx.valueCells.push(valueCell);\n }\n } \n \n self.onResize();\n}\n\nself.onDataUpdated = function() {\n for (var i = 0; i < self.ctx.valueCells.length; i++) {\n var cellData = self.ctx.data[i];\n console.log(self.ctx); //del\n if (cellData && cellData.data && cellData.data.length > 0) {\n var tvPair = cellData.data[cellData.data.length -\n 1];\n var value = tvPair[1];\n var textValue;\n //toDo -> + IsNumber\n \n if (isNumber(value)) {\n var decimals = self.ctx.decimals;\n var units = self.ctx.units;\n if (cellData.dataKey.decimals || cellData.dataKey.decimals === 0) {\n decimals = cellData.dataKey.decimals;\n }\n if (cellData.dataKey.units) {\n units = cellData.dataKey.units;\n }\n txtValue = self.ctx.utils.formatValue(value, decimals, units, true);\n } else {\n txtValue = value;\n }\n self.ctx.valueCells[i].html(txtValue);\n }\n }\n \n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n}\n\nself.onResize = function() {\n var datasoirceTitleFontSize = self.ctx.height/8;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n datasoirceTitleFontSize = self.ctx.width/12;\n }\n datasoirceTitleFontSize = Math.min(datasoirceTitleFontSize, 20);\n for (var i = 0; i < self.ctx.datasourceTitleCells.length; i++) {\n self.ctx.datasourceTitleCells[i].css('font-size', datasoirceTitleFontSize+'px');\n }\n var valueFontSize = self.ctx.height/9;\n var labelFontSize = self.ctx.height/9;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n valueFontSize = self.ctx.width/15;\n labelFontSize = self.ctx.width/15;\n }\n valueFontSize = Math.min(valueFontSize, 18);\n labelFontSize = Math.min(labelFontSize, 18);\n\n for (i = 0; i < self.ctx.valueCells; i++) {\n self.ctx.valueCells[i].css('font-size', valueFontSize+'px');\n self.ctx.valueCells[i].css('height', valueFontSize*2.5+'px');\n self.ctx.valueCells[i].css('padding', '0px ' + valueFontSize + 'px');\n self.ctx.labelCells[i].css('font-size', labelFontSize+'px');\n self.ctx.labelCells[i].css('height', labelFontSize*2.5+'px');\n self.ctx.labelCells[i].css('padding', '0px ' + labelFontSize + 'px');\n } \n}\n\nself.onDestroy = function() {\n}\n",
  18 + "controllerScript": "self.onInit = function() {\n \n self.ctx.datasourceTitleCells = [];\n self.ctx.valueCells = [];\n self.ctx.labelCells = [];\n \n for (var i=0; i < self.ctx.datasources.length; i++) {\n var tbDatasource = self.ctx.datasources[i];\n\n var datasourceId = 'tbDatasource' + i;\n self.ctx.$container.append(\n \"<div id='\" + datasourceId +\n \"' class='tbDatasource-container'></div>\"\n );\n\n var datasourceContainer = $('#' + datasourceId,\n self.ctx.$container);\n\n datasourceContainer.append(\n \"<div class='tbDatasource-title'>\" +\n tbDatasource.name + \"</div>\"\n );\n \n var datasourceTitleCell = $('.tbDatasource-title', datasourceContainer);\n self.ctx.datasourceTitleCells.push(datasourceTitleCell);\n \n var tableId = 'table' + i;\n datasourceContainer.append(\n \"<table id='\" + tableId +\n \"' class='tbDatasource-table'><col width='30%'><col width='70%'></table>\"\n );\n var table = $('#' + tableId, self.ctx.$container);\n\n for (var a = 0; a < tbDatasource.dataKeys.length; a++) {\n var dataKey = tbDatasource.dataKeys[a];\n var labelCellId = 'labelCell' + a;\n var cellId = 'cell' + a;\n table.append(\"<tr><td id='\" + labelCellId + \"'>\" + dataKey.label +\n \"</td><td id='\" + cellId +\n \"'></td></tr>\");\n var labelCell = $('#' + labelCellId, table);\n self.ctx.labelCells.push(labelCell);\n var valueCell = $('#' + cellId, table);\n self.ctx.valueCells.push(valueCell);\n }\n } \n \n self.onResize();\n}\n\nself.onDataUpdated = function() {\n for (var i = 0; i < self.ctx.valueCells.length; i++) {\n var cellData = self.ctx.data[i];\n if (cellData && cellData.data && cellData.data.length > 0) {\n var tvPair = cellData.data[cellData.data.length -\n 1];\n var value = tvPair[1];\n var textValue;\n //toDo -> + IsNumber\n \n if (isNumber(value)) {\n var decimals = self.ctx.decimals;\n var units = self.ctx.units;\n if (cellData.dataKey.decimals || cellData.dataKey.decimals === 0) {\n decimals = cellData.dataKey.decimals;\n }\n if (cellData.dataKey.units) {\n units = cellData.dataKey.units;\n }\n txtValue = self.ctx.utils.formatValue(value, decimals, units, true);\n } else {\n txtValue = value;\n }\n self.ctx.valueCells[i].html(txtValue);\n }\n }\n \n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n}\n\nself.onResize = function() {\n var datasoirceTitleFontSize = self.ctx.height/8;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n datasoirceTitleFontSize = self.ctx.width/12;\n }\n datasoirceTitleFontSize = Math.min(datasoirceTitleFontSize, 20);\n for (var i = 0; i < self.ctx.datasourceTitleCells.length; i++) {\n self.ctx.datasourceTitleCells[i].css('font-size', datasoirceTitleFontSize+'px');\n }\n var valueFontSize = self.ctx.height/9;\n var labelFontSize = self.ctx.height/9;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n valueFontSize = self.ctx.width/15;\n labelFontSize = self.ctx.width/15;\n }\n valueFontSize = Math.min(valueFontSize, 18);\n labelFontSize = Math.min(labelFontSize, 18);\n\n for (i = 0; i < self.ctx.valueCells; i++) {\n self.ctx.valueCells[i].css('font-size', valueFontSize+'px');\n self.ctx.valueCells[i].css('height', valueFontSize*2.5+'px');\n self.ctx.valueCells[i].css('padding', '0px ' + valueFontSize + 'px');\n self.ctx.labelCells[i].css('font-size', labelFontSize+'px');\n self.ctx.labelCells[i].css('height', labelFontSize*2.5+'px');\n self.ctx.labelCells[i].css('padding', '0px ' + labelFontSize + 'px');\n } \n}\n\nself.onDestroy = function() {\n}\n",
19 19 "settingsSchema": "{}",
20 20 "dataKeySettingsSchema": "{}\n",
21 21 "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Attributes card\"}"
... ...
... ... @@ -26,7 +26,7 @@
26 26 "angular-gridster": "^0.13.14",
27 27 "angular-hotkeys": "^1.7.0",
28 28 "angular-jwt": "^0.1.6",
29   - "angular-material": "1.1.1",
  29 + "angular-material": "1.1.9",
30 30 "angular-material-data-table": "^0.10.9",
31 31 "angular-material-icons": "^0.7.1",
32 32 "angular-material-expansion-panel": "^0.7.2",
... ... @@ -63,7 +63,7 @@
63 63 "leaflet-providers": "^1.1.17",
64 64 "material-ui": "^0.16.1",
65 65 "material-ui-number-input": "^5.0.16",
66   - "md-color-picker": "^0.2.6",
  66 + "md-color-picker": "0.2.6",
67 67 "mdPickers": "git://github.com/alenaksu/mdPickers.git#0.7.5",
68 68 "moment": "^2.15.0",
69 69 "ngclipboard": "^1.1.1",
... ...
... ... @@ -50,7 +50,7 @@ export default function AlarmRowDirective($compile, $templateCache, types, $mdDi
50 50 parent: angular.element($document[0].body),
51 51 targetEvent: $event,
52 52 fullscreen: true,
53   - skipHide: true,
  53 + multiple: true,
54 54 onShowing: function(scope, element) {
55 55 onShowingCallback.onShowing(scope, element);
56 56 }
... ...
... ... @@ -31,6 +31,7 @@ import 'angular-translate-interpolation-messageformat';
31 31 import 'md-color-picker';
32 32 import mdPickers from 'mdPickers';
33 33 import ngSanitize from 'angular-sanitize';
  34 +import FBAngular from 'angular-fullscreen';
34 35 import vAccordion from 'v-accordion';
35 36 import ngAnimate from 'angular-animate';
36 37 import 'angular-websocket';
... ... @@ -65,6 +66,7 @@ import 'angular-material-expansion-panel/dist/md-expansion-panel.min.css';
65 66 import 'ngFlowchart/dist/flowchart.css';
66 67 import '../scss/main.scss';
67 68
  69 +import thingsboardThirdpartyFix from './common/thirdparty-fix';
68 70 import thingsboardTranslateHandler from './locale/translate-handler';
69 71 import thingsboardLogin from './login';
70 72 import thingsboardDialogs from './components/datakey-config-dialog.controller';
... ... @@ -105,6 +107,7 @@ angular.module('thingsboard', [
105 107 'mdColorPicker',
106 108 mdPickers,
107 109 ngSanitize,
  110 + FBAngular.name,
108 111 vAccordion,
109 112 ngAnimate,
110 113 'ngWebSocket',
... ... @@ -118,6 +121,7 @@ angular.module('thingsboard', [
118 121 react.name,
119 122 'flow',
120 123 'flowchart',
  124 + thingsboardThirdpartyFix,
121 125 thingsboardTranslateHandler,
122 126 thingsboardLogin,
123 127 thingsboardDialogs,
... ...
... ... @@ -48,7 +48,7 @@ export default function AuditLogRowDirective($compile, $templateCache, types, $m
48 48 parent: angular.element($document[0].body),
49 49 targetEvent: $event,
50 50 fullscreen: true,
51   - skipHide: true,
  51 + multiple: true,
52 52 onShowing: function(scope, element) {
53 53 onShowingCallback.onShowing(scope, element);
54 54 }
... ...
  1 +/*
  2 + * Copyright © 2016-2018 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +
  17 +import tinycolor from 'tinycolor2';
  18 +
  19 +export default angular.module('thingsboard.thirdpartyFix', [])
  20 + .factory('Fullscreen', Fullscreen)
  21 + .factory('$mdColorPicker', mdColorPicker)
  22 + .name;
  23 +
  24 +/*@ngInject*/
  25 +function Fullscreen($document, $rootScope) {
  26 +
  27 + /* eslint-disable */
  28 +
  29 + var document = $document[0];
  30 +
  31 + // ensure ALLOW_KEYBOARD_INPUT is available and enabled
  32 + var isKeyboardAvailbleOnFullScreen = (typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element) && Element.ALLOW_KEYBOARD_INPUT;
  33 +
  34 + var emitter = $rootScope.$new();
  35 +
  36 + // listen event on document instead of element to avoid firefox limitation
  37 + // see https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode
  38 + $document.on('fullscreenchange webkitfullscreenchange mozfullscreenchange MSFullscreenChange', function(){
  39 + emitter.$emit('FBFullscreen.change', serviceInstance.isEnabled());
  40 + });
  41 +
  42 + var serviceInstance = {
  43 + $on: angular.bind(emitter, emitter.$on),
  44 + all: function() {
  45 + serviceInstance.enable( document.documentElement );
  46 + },
  47 + enable: function(element) {
  48 + if(element.requestFullScreen) {
  49 + element.requestFullScreen();
  50 + } else if(element.mozRequestFullScreen) {
  51 + element.mozRequestFullScreen();
  52 + } else if(element.webkitRequestFullscreen) {
  53 + // Safari temporary fix
  54 + //if (/Version\/[\d]{1,2}(\.[\d]{1,2}){1}(\.(\d){1,2}){0,1} Safari/.test(navigator.userAgent)) {
  55 + if (/Safari/.test(navigator.userAgent)) {
  56 + element.webkitRequestFullscreen();
  57 + } else {
  58 + element.webkitRequestFullscreen(isKeyboardAvailbleOnFullScreen);
  59 + }
  60 + } else if (element.msRequestFullscreen) {
  61 + element.msRequestFullscreen();
  62 + }
  63 + },
  64 + cancel: function() {
  65 + if(document.cancelFullScreen) {
  66 + document.cancelFullScreen();
  67 + } else if(document.mozCancelFullScreen) {
  68 + document.mozCancelFullScreen();
  69 + } else if(document.webkitExitFullscreen) {
  70 + document.webkitExitFullscreen();
  71 + } else if (document.msExitFullscreen) {
  72 + document.msExitFullscreen();
  73 + }
  74 + },
  75 + isEnabled: function(){
  76 + var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
  77 + return fullscreenElement ? true : false;
  78 + },
  79 + toggleAll: function(){
  80 + serviceInstance.isEnabled() ? serviceInstance.cancel() : serviceInstance.all();
  81 + },
  82 + isSupported: function(){
  83 + var docElm = document.documentElement;
  84 + var requestFullscreen = docElm.requestFullScreen || docElm.mozRequestFullScreen || docElm.webkitRequestFullscreen || docElm.msRequestFullscreen;
  85 + return requestFullscreen ? true : false;
  86 + }
  87 + };
  88 +
  89 + /* eslint-enable */
  90 +
  91 + return serviceInstance;
  92 +}
  93 +
  94 +/*@ngInject*/
  95 +function mdColorPicker($q, $mdDialog, mdColorPickerHistory) {
  96 + var dialog;
  97 +
  98 + /* eslint-disable angular/definedundefined */
  99 +
  100 + return {
  101 + show: function (options)
  102 + {
  103 + if ( options === undefined ) {
  104 + options = {};
  105 + }
  106 + //console.log( 'DIALOG OPTIONS', options );
  107 + // Defaults
  108 + // Dialog Properties
  109 + options.hasBackdrop = options.hasBackdrop === undefined ? true : options.hasBackdrop;
  110 + options.clickOutsideToClose = options.clickOutsideToClose === undefined ? true : options.clickOutsideToClose;
  111 + options.defaultValue = options.defaultValue === undefined ? '#FFFFFF' : options.defaultValue;
  112 + options.focusOnOpen = options.focusOnOpen === undefined ? false : options.focusOnOpen;
  113 + options.preserveScope = options.preserveScope === undefined ? true : options.preserveScope;
  114 + if (options.skipHide !== undefined) {
  115 + options.multiple = options.skipHide;
  116 + }
  117 + if (options.multiple === undefined) {
  118 + options.multiple = true;
  119 + }
  120 +
  121 + // mdColorPicker Properties
  122 + options.mdColorAlphaChannel = options.mdColorAlphaChannel === undefined ? false : options.mdColorAlphaChannel;
  123 + options.mdColorSpectrum = options.mdColorSpectrum === undefined ? true : options.mdColorSpectrum;
  124 + options.mdColorSliders = options.mdColorSliders === undefined ? true : options.mdColorSliders;
  125 + options.mdColorGenericPalette = options.mdColorGenericPalette === undefined ? true : options.mdColorGenericPalette;
  126 + options.mdColorMaterialPalette = options.mdColorMaterialPalette === undefined ? true : options.mdColorMaterialPalette;
  127 + options.mdColorHistory = options.mdColorHistory === undefined ? true : options.mdColorHistory;
  128 +
  129 +
  130 + dialog = $mdDialog.show({
  131 + templateUrl: 'mdColorPickerDialog.tpl.html',
  132 + hasBackdrop: options.hasBackdrop,
  133 + clickOutsideToClose: options.clickOutsideToClose,
  134 +
  135 + controller: ['$scope', 'options', function( $scope, options ) {
  136 + //console.log( "DIALOG CONTROLLER OPEN", Date.now() - dateClick );
  137 + $scope.close = function close()
  138 + {
  139 + $mdDialog.cancel();
  140 + };
  141 + $scope.ok = function ok()
  142 + {
  143 + $mdDialog.hide( $scope.value );
  144 + };
  145 + $scope.hide = $scope.ok;
  146 +
  147 +
  148 +
  149 + $scope.value = options.value;
  150 + $scope.default = options.defaultValue;
  151 + $scope.random = options.random;
  152 +
  153 + $scope.mdColorAlphaChannel = options.mdColorAlphaChannel;
  154 + $scope.mdColorSpectrum = options.mdColorSpectrum;
  155 + $scope.mdColorSliders = options.mdColorSliders;
  156 + $scope.mdColorGenericPalette = options.mdColorGenericPalette;
  157 + $scope.mdColorMaterialPalette = options.mdColorMaterialPalette;
  158 + $scope.mdColorHistory = options.mdColorHistory;
  159 + $scope.mdColorDefaultTab = options.mdColorDefaultTab;
  160 +
  161 + }],
  162 +
  163 + locals: {
  164 + options: options,
  165 + },
  166 + preserveScope: options.preserveScope,
  167 + multiple: options.multiple,
  168 +
  169 + targetEvent: options.$event,
  170 + focusOnOpen: options.focusOnOpen,
  171 + autoWrap: false,
  172 + onShowing: function() {
  173 + // console.log( "DIALOG OPEN START", Date.now() - dateClick );
  174 + },
  175 + onComplete: function() {
  176 + // console.log( "DIALOG OPEN COMPLETE", Date.now() - dateClick );
  177 + }
  178 + });
  179 +
  180 + dialog.then(function (value) {
  181 + mdColorPickerHistory.add(new tinycolor(value));
  182 + }, function () { });
  183 +
  184 + return dialog;
  185 + },
  186 + hide: function() {
  187 + return dialog.hide();
  188 + },
  189 + cancel: function() {
  190 + return dialog.cancel();
  191 + }
  192 + };
  193 +
  194 + /* eslint-enable angular/definedundefined */
  195 +}
... ...
... ... @@ -186,7 +186,7 @@ function DatasourceEntity($compile, $templateCache, $q, $mdDialog, $window, $doc
186 186 random: tinycolor.random(),
187 187 clickOutsideToClose: false,
188 188 hasBackdrop: false,
189   - skipHide: true,
  189 + multiple: true,
190 190 preserveScope: false,
191 191
192 192 mdColorAlphaChannel: true,
... ... @@ -220,7 +220,7 @@ function DatasourceEntity($compile, $templateCache, $q, $mdDialog, $window, $doc
220 220 parent: angular.element($document[0].body),
221 221 fullscreen: true,
222 222 targetEvent: event,
223   - skipHide: true,
  223 + multiple: true,
224 224 onComplete: function () {
225 225 var w = angular.element($window);
226 226 w.triggerHandler('resize');
... ...
... ... @@ -26,7 +26,6 @@
26 26 <section flex layout='column' layout-align="center" style="padding-left: 4px;">
27 27 <md-chips flex ng-if="widgetType != types.widgetType.alarm.value"
28 28 id="timeseries_datakey_chips"
29   - ng-required="true"
30 29 ng-model="timeseriesDataKeys" md-autocomplete-snap
31 30 md-transform-chip="transformTimeseriesDataKeyChip($chip)"
32 31 md-require-match="false">
... ... @@ -78,7 +77,6 @@
78 77 </md-chips>
79 78 <md-chips flex ng-if="widgetType === types.widgetType.latest.value"
80 79 id="attribute_datakey_chips"
81   - ng-required="true"
82 80 ng-model="attributeDataKeys" md-autocomplete-snap
83 81 md-transform-chip="transformAttributeDataKeyChip($chip)"
84 82 md-require-match="false">
... ...
... ... @@ -139,7 +139,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document,
139 139 random: tinycolor.random(),
140 140 clickOutsideToClose: false,
141 141 hasBackdrop: false,
142   - skipHide: true,
  142 + multiple: true,
143 143 preserveScope: false,
144 144
145 145 mdColorAlphaChannel: true,
... ... @@ -173,7 +173,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document,
173 173 parent: angular.element($document[0].body),
174 174 fullscreen: true,
175 175 targetEvent: event,
176   - skipHide: true,
  176 + multiple: true,
177 177 onComplete: function () {
178 178 var w = angular.element($window);
179 179 w.triggerHandler('resize');
... ...
... ... @@ -96,7 +96,7 @@ function JsonForm($compile, $templateCache, $mdColorPicker) {
96 96 random: tinycolor.random(),
97 97 clickOutsideToClose: false,
98 98 hasBackdrop: false,
99   - skipHide: true,
  99 + multiple: true,
100 100 preserveScope: false,
101 101
102 102 mdColorAlphaChannel: true,
... ...
... ... @@ -67,7 +67,7 @@ function MaterialIconSelect($compile, $templateCache, $document, $mdDialog) {
67 67 templateUrl: materialIconsDialogTemplate,
68 68 parent: angular.element($document[0].body),
69 69 locals: {icon: scope.icon},
70   - skipHide: true,
  70 + multiple: true,
71 71 fullscreen: true,
72 72 targetEvent: $event
73 73 }).then(function (icon) {
... ...
... ... @@ -164,7 +164,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog,
164 164 .cancel($translate.instant('action.no'))
165 165 .ok($translate.instant('action.yes'));
166 166
167   - confirm._options.skipHide = true;
  167 + confirm._options.multiple = true;
168 168 confirm._options.fullscreen = true;
169 169
170 170 $mdDialog.show(confirm).then(function () {
... ... @@ -212,7 +212,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog,
212 212 locals: {isAdd: isAdd, fetchDashboardStates: vm.fetchDashboardStates,
213 213 actionSources: availableActionSources, widgetActions: vm.widgetActions,
214 214 action: angular.copy(action)},
215   - skipHide: true,
  215 + multiple: true,
216 216 fullscreen: true,
217 217 targetEvent: $event
218 218 }).then(function (action) {
... ...
... ... @@ -166,7 +166,7 @@ export default function AddWidgetController($scope, widgetService, entityService
166 166 },
167 167 parent: angular.element($document[0].body),
168 168 fullscreen: true,
169   - skipHide: true,
  169 + multiple: true,
170 170 targetEvent: event
171 171 }).then(function (singleEntityAlias) {
172 172 vm.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias;
... ...
... ... @@ -463,7 +463,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
463 463 }
464 464 },
465 465 parent: angular.element($document[0].body),
466   - skipHide: true,
  466 + multiple: true,
467 467 fullscreen: true,
468 468 targetEvent: $event
469 469 }).then(function (entityAliases) {
... ... @@ -488,7 +488,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
488 488 gridSettings: gridSettings
489 489 },
490 490 parent: angular.element($document[0].body),
491   - skipHide: true,
  491 + multiple: true,
492 492 fullscreen: true,
493 493 targetEvent: $event
494 494 }).then(function (data) {
... ... @@ -510,7 +510,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
510 510 layouts: angular.copy(vm.dashboard.configuration.states[vm.dashboardCtx.state].layouts)
511 511 },
512 512 parent: angular.element($document[0].body),
513   - skipHide: true,
  513 + multiple: true,
514 514 fullscreen: true,
515 515 targetEvent: $event
516 516 }).then(function (layouts) {
... ... @@ -531,7 +531,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
531 531 states: states
532 532 },
533 533 parent: angular.element($document[0].body),
534   - skipHide: true,
  534 + multiple: true,
535 535 fullscreen: true,
536 536 targetEvent: $event
537 537 }).then(function (states) {
... ... @@ -873,7 +873,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
873 873 templateUrl: selectTargetLayoutTemplate,
874 874 parent: angular.element($document[0].body),
875 875 fullscreen: true,
876   - skipHide: true,
  876 + multiple: true,
877 877 targetEvent: $event
878 878 }).then(
879 879 function success(layoutId) {
... ... @@ -941,7 +941,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
941 941 },
942 942 parent: angular.element($document[0].body),
943 943 fullscreen: true,
944   - skipHide: true,
  944 + multiple: true,
945 945 targetEvent: event,
946 946 onComplete: function () {
947 947 var w = angular.element($window);
... ...
... ... @@ -131,7 +131,7 @@ export default function EditWidgetDirective($compile, $templateCache, types, wid
131 131 },
132 132 parent: angular.element($document[0].body),
133 133 fullscreen: true,
134   - skipHide: true,
  134 + multiple: true,
135 135 targetEvent: event
136 136 }).then(function (singleEntityAlias) {
137 137 scope.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias;
... ...
... ... @@ -51,7 +51,7 @@ export default function ManageDashboardLayoutsController($scope, $mdDialog, $doc
51 51 gridSettings: gridSettings
52 52 },
53 53 parent: angular.element($document[0].body),
54   - skipHide: true,
  54 + multiple: true,
55 55 fullscreen: true,
56 56 targetEvent: $event
57 57 }).then(function (data) {
... ...
... ... @@ -111,7 +111,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt
111 111 templateUrl: dashboardStateDialogTemplate,
112 112 parent: angular.element($document[0].body),
113 113 locals: {isAdd: isAdd, allStates: vm.allStates, state: angular.copy(state)},
114   - skipHide: true,
  114 + multiple: true,
115 115 fullscreen: true,
116 116 targetEvent: $event
117 117 }).then(function (state) {
... ... @@ -163,7 +163,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt
163 163 .cancel($translate.instant('action.no'))
164 164 .ok($translate.instant('action.yes'));
165 165
166   - confirm._options.skipHide = true;
  166 + confirm._options.multiple = true;
167 167 confirm._options.fullscreen = true;
168 168
169 169 $mdDialog.show(confirm).then(function () {
... ...
... ... @@ -126,7 +126,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc
126 126 },
127 127 parent: angular.element($document[0].body),
128 128 fullscreen: true,
129   - skipHide: true,
  129 + multiple: true,
130 130 targetEvent: $event
131 131 }).then(function (alias) {
132 132 if (isAdd) {
... ... @@ -158,7 +158,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc
158 158 .ariaLabel($translate.instant('entity.unable-delete-entity-alias-title'))
159 159 .ok($translate.instant('action.close'))
160 160 .targetEvent($event);
161   - alert._options.skipHide = true;
  161 + alert._options.multiple = true;
162 162 alert._options.fullscreen = true;
163 163
164 164 $mdDialog.show(alert);
... ...
... ... @@ -53,7 +53,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog,
53 53 states: states
54 54 },
55 55 fullscreen: true,
56   - skipHide: true,
  56 + multiple: true,
57 57 targetEvent: $event
58 58 }).then(
59 59 function success(stateId) {
... ... @@ -81,7 +81,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog,
81 81 templateUrl: selectTargetLayoutTemplate,
82 82 parent: angular.element($document[0].body),
83 83 fullscreen: true,
84   - skipHide: true,
  84 + multiple: true,
85 85 targetEvent: $event
86 86 }).then(
87 87 function success(layoutId) {
... ...
... ... @@ -160,7 +160,7 @@ function RelationTableController($scope, $q, $mdDialog, $document, $translate, $
160 160 showingCallback: onShowingCallback},
161 161 targetEvent: $event,
162 162 fullscreen: true,
163   - skipHide: true,
  163 + multiple: true,
164 164 onShowing: function(scope, element) {
165 165 onShowingCallback.onShowing(scope, element);
166 166 }
... ...
... ... @@ -79,7 +79,7 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $
79 79 parent: angular.element($document[0].body),
80 80 fullscreen: true,
81 81 targetEvent: $event,
82   - skipHide: true,
  82 + multiple: true,
83 83 onShowing: function(scope, element) {
84 84 onShowingCallback.onShowing(scope, element);
85 85 }
... ...
... ... @@ -208,7 +208,7 @@ function ExtensionTableController($scope, $filter, $document, $translate, $timeo
208 208 bindToController: true,
209 209 targetEvent: $event,
210 210 fullscreen: true,
211   - skipHide: true
  211 + multiple: true
212 212 }).then(function() {
213 213 reloadExtensions();
214 214 }, function () {
... ...
... ... @@ -721,7 +721,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
721 721 }
722 722 },
723 723 parent: angular.element($document[0].body),
724   - skipHide: true,
  724 + multiple: true,
725 725 fullscreen: true,
726 726 targetEvent: $event
727 727 }).then(function (updatedEntityAliases) {
... ... @@ -796,7 +796,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
796 796 importFileLabel: importFileLabel
797 797 },
798 798 parent: angular.element($document[0].body),
799   - skipHide: true,
  799 + multiple: true,
800 800 fullscreen: true,
801 801 targetEvent: $event
802 802 }).then(function (importData) {
... ...
... ... @@ -17,7 +17,6 @@ import './home.scss';
17 17
18 18 import uiRouter from 'angular-ui-router';
19 19 import ngSanitize from 'angular-sanitize';
20   -import FBAngular from 'angular-fullscreen';
21 20 import 'angular-breadcrumb';
22 21
23 22 import thingsboardMenu from '../services/menu.service';
... ... @@ -63,7 +62,6 @@ import BreadcrumbIcon from './breadcrumb-icon.filter';
63 62 export default angular.module('thingsboard.home', [
64 63 uiRouter,
65 64 ngSanitize,
66   - FBAngular.name,
67 65 'ncy-angular-breadcrumb',
68 66 thingsboardMenu,
69 67 thingsboardHomeLinks,
... ...
... ... @@ -1573,7 +1573,7 @@
1573 1573 "ru_RU": "Russian",
1574 1574 "es_ES": "Spanish",
1575 1575 "ja_JA": "Japanese",
1576   - "TR": "Turkish"
  1576 + "tr_TR": "Turkish"
1577 1577 }
1578 1578 }
1579 1579 }
... ...
... ... @@ -1552,7 +1552,7 @@
1552 1552 "ru_RU": "Ruso",
1553 1553 "es_ES": "Español",
1554 1554 "ja_JA": "Japonés",
1555   - "TR": "Turco"
  1555 + "tr_TR": "Turco"
1556 1556 }
1557 1557 }
1558 1558 }
... ...
... ... @@ -1010,7 +1010,7 @@
1010 1010 "ko_KR": "Coréen",
1011 1011 "ru_RU": "Russe",
1012 1012 "zh_CN": "Chinois",
1013   - "TR": "Turc"
  1013 + "tr_TR": "Turc"
1014 1014 }
1015 1015 },
1016 1016 "layout": {
... ...
... ... @@ -1442,7 +1442,7 @@
1442 1442 "ru_RU": "Russo",
1443 1443 "es_ES": "Spagnolo",
1444 1444 "ja_JA": "Giapponese",
1445   - "TR": "Turco"
  1445 + "tr_TR": "Turco"
1446 1446 }
1447 1447 }
1448 1448 }
... ...
... ... @@ -1458,7 +1458,7 @@
1458 1458 "ru_RU": "ロシア",
1459 1459 "es_ES": "スペイン語",
1460 1460 "ja_JA": "日本語",
1461   - "TR": "トルコ語"
  1461 + "tr_TR": "トルコ語"
1462 1462 }
1463 1463 }
1464 1464 }
... ...
... ... @@ -1336,7 +1336,7 @@
1336 1336 "es_ES": "스페인어",
1337 1337 "it_IT": "이탈리아 사람",
1338 1338 "ja_JA": "일본어",
1339   - "TR": "터키어"
  1339 + "tr_TR": "터키어"
1340 1340 }
1341 1341 }
1342 1342 }
... ...
... ... @@ -1361,7 +1361,7 @@
1361 1361 "it_IT": "Итальянский",
1362 1362 "ru_RU": "Русский",
1363 1363 "ja_JA": "Японский",
1364   - "TR": "Турецкий"
  1364 + "tr_TR": "Турецкий"
1365 1365 }
1366 1366
1367 1367 }
... ...
ui/src/app/locale/locale.constant-tr_TR.json renamed from ui/src/app/locale/locale.constant-TR.json
... ... @@ -126,15 +126,15 @@
126 126 "acknowledge": "Onayla",
127 127 "clear": "Temizle",
128 128 "search": "Alarm ara",
129   - "selected-alarms": "{ count, select, 1 {1 alarm} other {# alarm} } seçildi",
  129 + "selected-alarms": "{ count, plural, 1 {1 alarm} other {# alarm} } seçildi",
130 130 "no-data": "Görüntülenecek veri bulunmuyor",
131 131 "polling-interval": "Alarm yoklama aralığı (saniye)",
132 132 "polling-interval-required": "Alarm yoklama aralığı gerekli.",
133 133 "min-polling-interval-message": "Alarm yoklama aralığı en az 1 saniye olmalıdır.",
134   - "aknowledge-alarms-title": "{ count, select, 1 {1 alarmı} other {# alarmı} } onayla",
135   - "aknowledge-alarms-text": "{ count, select, 1 {1 alarmı} other {# alarmı} } onaylamak istediğinize emin misiniz?",
136   - "clear-alarms-title": "{ count, select, 1 {1 alarmı} other {# alarmı} } temizle",
137   - "clear-alarms-text": "{ count, select, 1 {1 alarmı} other {# alarmı} } temizlemek istediğinize emin misiniz?"
  134 + "aknowledge-alarms-title": "{ count, plural, 1 {1 alarmı} other {# alarmı} } onayla",
  135 + "aknowledge-alarms-text": "{ count, plural, 1 {1 alarmı} other {# alarmı} } onaylamak istediğinize emin misiniz?",
  136 + "clear-alarms-title": "{ count, plural, 1 {1 alarmı} other {# alarmı} } temizle",
  137 + "clear-alarms-text": "{ count, plural, 1 {1 alarmı} other {# alarmı} } temizlemek istediğinize emin misiniz?"
138 138 },
139 139 "alias": {
140 140 "add": "Kısa ad ekle",
... ... @@ -212,15 +212,15 @@
212 212 "add-asset-text": "Yeni varlık ekle",
213 213 "asset-details": "Varlık detayları",
214 214 "assign-assets": "Varlıkları ata",
215   - "assign-assets-text": "{ count, select, 1 {1 varlığı} other {# varlığı} } kullanıcı grubuna ata",
  215 + "assign-assets-text": "{ count, plural, 1 {1 varlığı} other {# varlığı} } kullanıcı grubuna ata",
216 216 "delete-assets": "Varlıkları sil",
217 217 "unassign-assets": "Varlıkların atamalarını kaldır",
218   - "unassign-assets-action-title": "{ count, select, 1 {1 varlığın} other {# varlığın} } atamalarını kullanıcı grubundan kaldır",
  218 + "unassign-assets-action-title": "{ count, plural, 1 {1 varlığın} other {# varlığın} } atamalarını kullanıcı grubundan kaldır",
219 219 "assign-new-asset": "Yeni varlık ata",
220 220 "delete-asset-title": "'{{assetName}}' isimli varlığı silmek istediğinize emin misiniz?",
221 221 "delete-asset-text": "UYARI: Onaylandıktan sonra varlık ve ilgili tüm veriler geri yüklenemeyecek şekilde silinecek.",
222   - "delete-assets-title": "{ count, select, 1 {1 varlığı} other {# varlığı} } silmek istediğinize emin misiniz?",
223   - "delete-assets-action-title": "{ count, select, 1 {1 varlığı} other {# varlığı} } sil",
  222 + "delete-assets-title": "{ count, plural, 1 {1 varlığı} other {# varlığı} } silmek istediğinize emin misiniz?",
  223 + "delete-assets-action-title": "{ count, plural, 1 {1 varlığı} other {# varlığı} } sil",
224 224 "delete-assets-text": "UYARI: Onaylandıktan sonra tüm seçili varlıklar ver ilgili tüm veriler geri yüklenemyeck şekilde silinecek.",
225 225 "make-public-asset-title": "'{{assetName}}' isimli varlığı açık hale getirmek istediğinize emin misiniz?",
226 226 "make-public-asset-text": "Onaylandıktan sonra varlık ve ilgili veriler açık hale gelecek ve başkaları tarafından erişilebilir olacaktır.",
... ... @@ -229,7 +229,7 @@
229 229 "unassign-asset-title": "'{{assetName}}' isimli varlığın atamasını kaldırmak istediğinize emin misiniz?",
230 230 "unassign-asset-text": "Onaylandıktan sonra varlığın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacaktır.",
231 231 "unassign-asset": "Varlık atamasını kaldır",
232   - "unassign-assets-title": " { count, select, 1 {1 varlık} other {# varlık} } atamasını kaldırmak istediğinize emin misiniz?",
  232 + "unassign-assets-title": " { count, plural, 1 {1 varlık} other {# varlık} } atamasını kaldırmak istediğinize emin misiniz?",
233 233 "unassign-assets-text": "Onaylandıktan sonra tüm seçili varlıkların ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacaktır.",
234 234 "copyId": "Varlık kimliğini kopyala",
235 235 "idCopiedMessage": "Varlık kimliği panoya kopyalandı",
... ... @@ -252,7 +252,7 @@
252 252 "key-required": "Öznitelik anahtarı gerekli.",
253 253 "value": "Değer",
254 254 "value-required": "Öznitelik değeri gerekli.",
255   - "delete-attributes-title": "Silmek istediğinize emin misiniz { count, select, 1 {1 öznitelik} other {# öznitelik} }?",
  255 + "delete-attributes-title": "Silmek istediğinize emin misiniz { count, plural, 1 {1 öznitelik} other {# öznitelik} }?",
256 256 "delete-attributes-text": "UYARI: Onaylandıktan sonra tüm seçili öznitelikler kaldırılacak.",
257 257 "delete-attributes": "Öznitelikleri sil",
258 258 "enter-attribute-value": "Öznitelik değeri gir",
... ... @@ -262,8 +262,8 @@
262 262 "prev-widget": "Önceki gösterge",
263 263 "add-to-dashboard": "Kontrol paneline ekle",
264 264 "add-widget-to-dashboard": "Göstergeyi kontrol paneline ekle",
265   - "selected-attributes": "{ count, select, 1 {1 öznitelik} other {# öznitelik} } seçildi",
266   - "selected-telemetry": "{ count, select, 1 {1 telemetri birimi} other {# telemetri birimi} } seçildi"
  265 + "selected-attributes": "{ count, plural, 1 {1 öznitelik} other {# öznitelik} } seçildi",
  266 + "selected-telemetry": "{ count, plural, 1 {1 telemetri birimi} other {# telemetri birimi} } seçildi"
267 267 },
268 268 "audit-log": {
269 269 "audit": "Log ve Hata Yönetimi",
... ... @@ -358,8 +358,8 @@
358 358 "customer-details": "Kullanıcı Grubu detayları",
359 359 "delete-customer-title": "'{{customerTitle}}' isimli kullanıcı grubunu silmek istediğinize emin misiniz?",
360 360 "delete-customer-text": "UYARI: Onaylandıktan sonra kullanıcı grubu ve tüm ilişkili veriler geri yüklenemeyecek şekilde silinecek.",
361   - "delete-customers-title": "{ count, select, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } silmek istediğinize emin misiniz?",
362   - "delete-customers-action-title": "{ count, select, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } sil",
  361 + "delete-customers-title": "{ count, plural, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } silmek istediğinize emin misiniz?",
  362 + "delete-customers-action-title": "{ count, plural, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } sil",
363 363 "delete-customers-text": "UYARI: Onaylandıktan sonra tüm seçili kullanıcı grupları ve ilişkili veriler geri yüklenemez şekilde silinecek.",
364 364 "manage-users": "Kullanıcıları yönet",
365 365 "manage-assets": "Varlıkları yönet",
... ... @@ -418,20 +418,20 @@
418 418 "add-dashboard-text": "Yeni kontrol paneli ekle",
419 419 "assign-dashboards": "Kontrol panelleri ata",
420 420 "assign-new-dashboard": "Yeni kontrol paneli ata",
421   - "assign-dashboards-text": "{ count, select, 1 {1 kontrol panelini} other {# kontrol panelini} } kullanıcı grubuna ata",
422   - "unassign-dashboards-action-text": "Müşterilerden atama sayısı, çoğul, 1 {1 gösterge tablosu} diğer {# panolar}}",
  421 + "assign-dashboards-text": "{ count, plural, 1 {1 kontrol panelini} other {# kontrol panelini} } kullanıcı grubuna ata",
  422 + "unassign-dashboards-action-text": "Müşterilerden atama { count, plural, 1 {1 gösterge tablosu} other {# panolar}}",
423 423 "delete-dashboards": "Kontrol panellerini sil",
424 424 "unassign-dashboards": "Kontrol panellerinden atamayı kaldır",
425   - "unassign-dashboards-action-title": "{ count, select, 1 {1 kontrol panelinin} other {# kontrol panelinin} } atamaları kullanıcı grubundan kaldır",
  425 + "unassign-dashboards-action-title": "{ count, plural, 1 {1 kontrol panelinin} other {# kontrol panelinin} } atamaları kullanıcı grubundan kaldır",
426 426 "delete-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelini silmek istediğinize emin misiniz?",
427 427 "delete-dashboard-text": "UYARI: Onaylandıktan sonra kontrol paneli ve ilişkili verileri geri yüklenemez şekilde silinecek.",
428   - "delete-dashboards-title": "{ count, select, 1 {1 kontrol panelini} other {# kontrol panelini} } silmek istediğinize emin misiniz?",
429   - "delete-dashboards-action-title": "{ count, select, 1 {1 kontrol panelini} other {# kontrol panelini} } sil",
  428 + "delete-dashboards-title": "{ count, plural, 1 {1 kontrol panelini} other {# kontrol panelini} } silmek istediğinize emin misiniz?",
  429 + "delete-dashboards-action-title": "{ count, plural, 1 {1 kontrol panelini} other {# kontrol panelini} } sil",
430 430 "delete-dashboards-text": "UYARI: Onaylandıktan sonra tüm seçili kontrol panelleri ve ilişkili verileri geri yüklenemez şekilde silinecek.",
431 431 "unassign-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelindeki atamayı kaldırmak istediğinize emin misiniz?",
432 432 "unassign-dashboard-text": "Onaylandıktan sonra kontrol panelinin ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez hale gelecektir.",
433 433 "unassign-dashboard": "Kontrol panelinin ataması kaldır",
434   - "unassign-dashboards-title": "{count, select, 1 {1 kontrol panelindeki} other {# kontrol panelindeki} } atamayı kaldırmak istediğinize emin misiniz?",
  434 + "unassign-dashboards-title": "{count, plural, 1 {1 kontrol panelindeki} other {# kontrol panelindeki} } atamayı kaldırmak istediğinize emin misiniz?",
435 435 "unassign-dashboards-text": "Onaylandıktan <sonra seçili kontrol panellerinin atamaları kaldırılacak ve kullanıcı grubu tarafından erişilemez hale gelecektir.",
436 436 "public-dashboard-title": "Kontrol paneli açık hale getirildi",
437 437 "public-dashboard-text": "Kontrol paneliniz <b>{{dashboardTitle}}</b> açık hale getirildi ve bu <a href='{{publicLink}}' target='_blank'>bağlantıdan</a> erişilebilir durumda",
... ... @@ -508,7 +508,7 @@
508 508 "manage-states": "Kontrol paneli durumlarını yönet",
509 509 "states": "Kontrol paneli durumları",
510 510 "search-states": "Kontrol paneli durumu ara",
511   - "selected-states": "{ count, select, 1 {1 kontrol paneli durumu} other {# kontrol paneli durumu} } seçildi",
  511 + "selected-states": "{ count, plural, 1 {1 kontrol paneli durumu} other {# kontrol paneli durumu} } seçildi",
512 512 "edit-state": "Kontrol paneli durumu düzenle",
513 513 "delete-state": "Kontrol paneli durumunu sil",
514 514 "add-state": "Kontrol paneli durumu ekle",
... ... @@ -541,11 +541,11 @@
541 541 "alarm": "Alarm alanları",
542 542 "timeseries-required": "Zaman serisi öğesi gerekli.",
543 543 "timeseries-or-attributes-required": "Zaman serisi/öznitelikler öğesi gerekli.",
544   - "maximum-timeseries-or-attributes": "Maksimum { count, select, 1 {1 zamanserisi/öznitelik kabul edilir.} other {# zamanserisi/öznitelik kabul edilir} }",
  544 + "maximum-timeseries-or-attributes": "Maksimum { count, plural, 1 {1 zamanserisi/öznitelik kabul edilir.} other {# zamanserisi/öznitelik kabul edilir} }",
545 545 "alarm-fields-required": "Alarm alanları gerekli.",
546 546 "function-types": "Fonksiyon türleri",
547 547 "function-types-required": "Fonksiyon türleri gerekli.",
548   - "maximum-function-types": "Maksimum { count, select, 1 {1 fonksiyon türü kabul edilir.} other {# fonksiyon türü kabul edilir} }"
  548 + "maximum-function-types": "Maksimum { count, plural, 1 {1 fonksiyon türü kabul edilir.} other {# fonksiyon türü kabul edilir} }"
549 549 },
550 550 "datasource": {
551 551 "type": "Veri kaynağı türü",
... ... @@ -597,11 +597,11 @@
597 597 "manage-credentials": "Kimlik bilgilerini yönet",
598 598 "delete": "Aygıt sil",
599 599 "assign-devices": "Aygıt ata",
600   - "assign-devices-text": "{ count, select, 1 {1 aygıtı} other {# aygıtı} } kullanıcı grubuna ata",
  600 + "assign-devices-text": "{ count, plural, 1 {1 aygıtı} other {# aygıtı} } kullanıcı grubuna ata",
601 601 "delete-devices": "Aygıtları sil",
602 602 "unassign-from-customer": "Kullanıcı Grubundan atamayı kaldır",
603 603 "unassign-devices": "Aygıtlardan atamayı kaldır",
604   - "unassign-devices-action-title": "{ count, select, 1 {1 aygıtın} other {# aygıtın} } atamasını kullanıcı grubundan kaldır",
  604 + "unassign-devices-action-title": "{ count, plural, 1 {1 aygıtın} other {# aygıtın} } atamasını kullanıcı grubundan kaldır",
605 605 "assign-new-device": "Yeni aygıt ata",
606 606 "make-public-device-title": "'{{deviceName}}' isimli aygıtı açık hale getirmek istediğinizden emin misiniz?",
607 607 "make-public-device-text": "Onaylandıktan sonra aygıt ve verileri açık hale getirilecek ve diğerleri tarafından erişilebilir olacak.",
... ... @@ -610,13 +610,13 @@
610 610 "view-credentials": "Kimlik bilgilerini görüntüle",
611 611 "delete-device-title": "'{{deviceName}}' isimli aygıtı silmek istediğinize emin misiniz?",
612 612 "delete-device-text": "UYARI: Onaylandıktan sonra aygıt ve ilişkili verileri geri yüklenemez şekilde silinecek.",
613   - "delete-devices-title": "{ count, select, 1 {1 aygıtı} other {# aygıtı} } silmek istediğinize emin misiniz?",
614   - "delete-devices-action-title": "{ count, select, 1 {1 aygıtı} other {# aygıtı} } sil",
  613 + "delete-devices-title": "{ count, plural, 1 {1 aygıtı} other {# aygıtı} } silmek istediğinize emin misiniz?",
  614 + "delete-devices-action-title": "{ count, plural, 1 {1 aygıtı} other {# aygıtı} } sil",
615 615 "delete-devices-text": "UYARI: Onaylandıktan sonra tüm seçili aygıtlar ve ilişkili verileri geri yüklenemez şekilde silinecek.",
616 616 "unassign-device-title": "'{{deviceName}}' isimli aygıtın atamasını kaldırmak istediğinize emin misiniz?",
617 617 "unassign-device-text": "Onaylandıktan sonra aygıtın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacak.",
618 618 "unassign-device": "Aygıt atamasını kaldır",
619   - "unassign-devices-title": "{ count, select, 1 {1 aygıtın} other {# aygıtın} } atamasını kaldırmak istediğinize emin misiniz?",
  619 + "unassign-devices-title": "{ count, plural, 1 {1 aygıtın} other {# aygıtın} } atamasını kaldırmak istediğinize emin misiniz?",
620 620 "unassign-devices-text": "Onaylandıktan sonra seçili aygıtların atamaları kaldırılacak ve kullanıcı grubu tarafından erişilemez olacak.",
621 621 "device-credentials": "Aygıt Kimlik Bilgileri",
622 622 "credentials-type": "Kimlik Bilgi Türü",
... ... @@ -702,55 +702,55 @@
702 702 "type-required": "Öğe türü gerekli.",
703 703 "type-device": "Aygıt",
704 704 "type-devices": "Aygıtlar",
705   - "list-of-devices": "{ count, select, 1 {Bir aygıt} other {# Aygıtın Listesi} }",
  705 + "list-of-devices": "{ count, plural, 1 {Bir aygıt} other {# Aygıtın Listesi} }",
706 706 "device-name-starts-with": "İsimleri '{{prefix}}' ile başlayan aygıtlar",
707 707 "type-asset": "Varlık",
708 708 "type-assets": "Varlıklar",
709   - "list-of-assets": "{ count, select, 1 {Bir varlık} other {# Varlığın Listesi} }",
  709 + "list-of-assets": "{ count, plural, 1 {Bir varlık} other {# Varlığın Listesi} }",
710 710 "asset-name-starts-with": "İsmi '{{prefix}}' ile başlayan varlıklar",
711 711 "type-entity-view": "Varlık Görünümü",
712 712 "type-entity-views": "Varlık Görünümleri",
713   - "list-of-entity-views": "{count, çoğul, 1 {Bir varlık görünümü} diğer {# varlık görüntüleme}} listesi",
  713 + "list-of-entity-views": "{ count, plural, 1 {Bir varlık görünümü} other {# varlık görüntüleme}} listesi",
714 714 "entity-view-name-starts-with": "Adı {{önek}} ile başlayan varlık görünümleri",
715 715 "type-rule": "Kural",
716 716 "type-rules": "Kurallar",
717   - "list-of-rules": "{ count, select, 1 {Bir kural} other {# Kuralın Listesi} }",
  717 + "list-of-rules": "{ count, plural, 1 {Bir kural} other {# Kuralın Listesi} }",
718 718 "rule-name-starts-with": "İsmi '{{prefix}}' ile başlayan kurallar",
719 719 "type-plugin": "Eklenti",
720 720 "type-plugins": "Eklentiler",
721   - "list-of-plugins": "{ count, select, 1 {Bir eklenti} other {# Eklentinin Listesi} }",
  721 + "list-of-plugins": "{ count, plural, 1 {Bir eklenti} other {# Eklentinin Listesi} }",
722 722 "plugin-name-starts-with": "İsmi '{{prefix}}' ile başlayan eklentiler",
723 723 "type-tenant": "Tenant",
724 724 "type-tenants": "Tenantlar",
725   - "list-of-tenants": "{ count, select, 1 {Bir tenant} other {# Tenantın Listesi} }",
  725 + "list-of-tenants": "{ count, plural, 1 {Bir tenant} other {# Tenantın Listesi} }",
726 726 "tenant-name-starts-with": "İsmi '{{prefix}}' ile başlayan tenantlar",
727 727 "type-customer": "Kullanıcı Grubu",
728 728 "type-customers": "Kullanıcı Grupları",
729   - "list-of-customers": "{ count, select, 1 {Bir Kullanıcı Grubu} other {# Kullanıcı Grupları} }",
  729 + "list-of-customers": "{ count, plural, 1 {Bir Kullanıcı Grubu} other {# Kullanıcı Grupları} }",
730 730 "customer-name-starts-with": "İsmi '{{prefix}}' ile başlayan Kullanıcı Grupları",
731 731 "type-user": "Kullanıcı",
732 732 "type-users": "Kullanıcılar",
733   - "list-of-users": "{ count, select, 1 {Bir kullanıcı} other {# Kullanıcının Listesi} }",
  733 + "list-of-users": "{ count, plural, 1 {Bir kullanıcı} other {# Kullanıcının Listesi} }",
734 734 "user-name-starts-with": "İsmi '{{prefix}}' ile başlayan kullanıcılar",
735 735 "type-dashboard": "Kontrol paneli",
736 736 "type-dashboards": "Kontrol panelleri",
737   - "list-of-dashboards": "{ count, select, 1 {Bir kontrol paneli} other {# Kontrol Panelinin Listesi} }",
  737 + "list-of-dashboards": "{ count, plural, 1 {Bir kontrol paneli} other {# Kontrol Panelinin Listesi} }",
738 738 "dashboard-name-starts-with": "İsmi '{{prefix}}' ile başlayan kontrol panelleri",
739 739 "type-alarm": "Alarm",
740 740 "type-alarms": "Alarmlar",
741   - "list-of-alarms": "{ count, select, 1 {Bir alarm} other {# Alarmın Listesi} }",
  741 + "list-of-alarms": "{ count, plural, 1 {Bir alarm} other {# Alarmın Listesi} }",
742 742 "alarm-name-starts-with": "İsmi '{{prefix}}' ile başlayan alarmlar",
743 743 "type-rulechain": "Kural zinciri",
744 744 "type-rulechains": "Kural zincirleri",
745   - "list-of-rulechains": "{count, çoğul, 1 {Bir kural zinciri} diğer {# kural zincirinin listesi}}",
  745 + "list-of-rulechains": "{ count, plural, 1 {Bir kural zinciri} other {# kural zincirinin listesi}}",
746 746 "rulechain-name-starts-with": "İsimleri {{prefix}} ile başlayan kural zincirleri",
747 747 "type-rulenode": "Kural düğümü",
748 748 "type-rulenodes": "Kural düğümleri",
749   - "list-of-rulenodes": "{count, çoğul, 1 {Bir kural node} diğer {# kural düğümünün listesi}}",
  749 + "list-of-rulenodes": "{ count, plural, 1 {Bir kural node} other {# kural düğümünün listesi}}",
750 750 "rulenode-name-starts-with": "İsimleri '{{prefix}} ile başlayan kural düğümleri",
751 751 "type-current-customer": "Mevcut Müşteri",
752 752 "search": "Öğeleri ara",
753   - "selected-entities": "{ count, select, 1 {1 öğe} other {# öğe} } seçildi",
  753 + "selected-entities": "{ count, plural, 1 {1 öğe} other {# öğe} } seçildi",
754 754 "entity-name": "Öğe adı",
755 755 "details": "Öğe detayları",
756 756 "no-entities-prompt": "Hiçbir öğe bulunamadı",
... ... @@ -792,21 +792,21 @@
792 792 "add-entity-view-text": "Yeni varlık görünümü ekle",
793 793 "delete": "Varlık görünümünü sil",
794 794 "assign-entity-views": "Varlık görünümleri atama",
795   - "assign-entity-views-text": "Müşteriye {count, çoğul, 1 {1 entityView} diğer {# entityViews}} atayın ",
  795 + "assign-entity-views-text": "Müşteriye { count, plural, 1 {1 entityView} other {# entityViews}} atayın ",
796 796 "delete-entity-views": "Varlık görünümlerini sil",
797 797 "unassign-from-customer": "Müşteriden atama",
798 798 "unassign-entity-views": "Varlık görünümlerini atama",
799   - "unassign-entity-views-action-title": "Müşteriden atama sayım, çoğul, 1 {1 entityView} diğer {# entityViews}}",
  799 + "unassign-entity-views-action-title": "Müşteriden atama { count, plural, 1 {1 entityView} other {# entityViews}}",
800 800 "assign-new-entity-view": "Yeni varlık görünümü atama",
801 801 "delete-entity-view-title": "Varlık görünümünü silmek istediğinizden emin misiniz?, {{entityViewName}} '? ",
802 802 "delete-entity-view-text": "Dikkatli olun, onaylandıktan sonra varlık görünümü ve ilgili tüm veriler kurtarılamayacak.",
803   - "delete-entity-views-title": "{count, çoğul, 1 {1 entityView} diğer {# entityViews}} varlık görünümüne sahip olmak istediğinizden emin misiniz?",
804   - "delete-entity-views-action-title": "Sil {count, çoğul, 1 {1 entityView} diğer {# entityViews}}",
  803 + "delete-entity-views-title": "{ count, plural, 1 {1 entityView} other {# entityViews}} varlık görünümüne sahip olmak istediğinizden emin misiniz?",
  804 + "delete-entity-views-action-title": "Sil { count, plural, 1 {1 entityView} other {# entityViews}}",
805 805 "delete-entity-views-text": "Dikkatli olun, onaylandıktan sonra tüm seçilen görünümler kaldırılacak ve ilgili tüm veriler kurtarılamayacaktır.",
806 806 "unassign-entity-view-title": "Varlık görünümünün atamasını kaldırmak istediğinizden emin misiniz? {{entityViewName}} '? ",
807 807 "unassign-entity-view-text": "Onaydan sonra varlık görünümü atanmamış olacak ve müşteri tarafından erişilemeyecektir.",
808 808 "unassign-entity-view": "Varlık görünümünün atamasını kaldır",
809   - "unassign-entity-views-title": "Sayım, çoğul, 1 {1 entityView} diğer {# entityViews}} hesabının atamasını kaldırmak istediğinizden emin misiniz?",
  809 + "unassign-entity-views-title": "{ count, plural, 1 {1 entityView} other {# entityViews}} hesabının atamasını kaldırmak istediğinizden emin misiniz?",
810 810 "unassign-entity-views-text": "Onaylandıktan sonra, seçilen tüm öğe görünümleri atamadan kaldırılacak ve müşteri tarafından erişilemeyecektir.",
811 811 "entity-view-type": "Varlık Görünümü türü",
812 812 "entity-view-type-required": "Varlık Görünümü türü gerekli.",
... ... @@ -861,7 +861,7 @@
861 861 },
862 862 "extension": {
863 863 "extensions": "Uzantılar",
864   - "selected-extensions": "{count, çoğul, 1 {1 uzantı} diğer {# extensions}} seçildi",
  864 + "selected-extensions": "{ count, plural, 1 {1 uzantı} other {# extensions}} seçildi",
865 865 "type": "Tür",
866 866 "key": "Anahtar",
867 867 "value": "Değer",
... ... @@ -875,7 +875,7 @@
875 875 "edit": "Uzantıyı düzenle",
876 876 "delete-extension-title": "{{ExtensionId}} uzantısını silmek istediğinizden emin misiniz? ",
877 877 "delete-extension-text": "Dikkatli olun, onaylamadan sonra uzantı ve ilgili tüm veriler kurtarılamaz.",
878   - "delete-extensions-title": "{Count, çoğul, 1 {1 uzantı} diğer {# extensions}} silmek istediğinizden emin misiniz?",
  878 + "delete-extensions-title": "{ count, plural, 1 {1 uzantı} other {# extensions}} silmek istediğinizden emin misiniz?",
879 879 "delete-extensions-text": "Dikkatli olun, onaylandıktan sonra tüm seçilen uzantılar kaldırılacak.",
880 880 "converters": "Dönüştürücü",
881 881 "converter-id": "Dönüştürücü kimliği",
... ... @@ -1026,8 +1026,8 @@
1026 1026 "grid": {
1027 1027 "delete-item-title": "Bu öğeyi silmek istediğinizden emin misiniz?",
1028 1028 "delete-item-text": "UYARI: Onayladıktan sonra bu öğe ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
1029   - "delete-items-title": "{ count, select, 1 {1 öğeyi} other {# öğeyi} } silmek istediğinizden emin misiniz?",
1030   - "delete-items-action-title": "{ count, select, 1 {1 öğeyi} other {# öğeyi} } sil",
  1029 + "delete-items-title": "{ count, plural, 1 {1 öğeyi} other {# öğeyi} } silmek istediğinizden emin misiniz?",
  1030 + "delete-items-action-title": "{ count, plural, 1 {1 öğeyi} other {# öğeyi} } sil",
1031 1031 "delete-items-text": "UYARI: Onayladıktan sonra tüm seçili öğeler ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
1032 1032 "add-item-text": "Yeni öğe ekle",
1033 1033 "no-items-text": "Hiç bir öğe bulunamadı",
... ... @@ -1128,7 +1128,7 @@
1128 1128 },
1129 1129 "from-relations": "Giden ilişkiler",
1130 1130 "to-relations": "Gelen ilişkiler",
1131   - "selected-relations": "{ count, select, 1 {1 ilişki} other {# ilişki} } seçildi",
  1131 + "selected-relations": "{ count, plural, 1 {1 ilişki} other {# ilişki} } seçildi",
1132 1132 "type": "Tür",
1133 1133 "to-entity-type": "Hedef Öğe Türü",
1134 1134 "to-entity-name": "Hedef Öğe Adı",
... ... @@ -1144,11 +1144,11 @@
1144 1144 "edit": "İlişki düzenle",
1145 1145 "delete-to-relation-title": "'{{entityName}}' öğesine olan ilişkiyi silmek istediğinize emin misiniz?",
1146 1146 "delete-to-relation-text": "UYARI: Onaylandıktan sonra '{{entityName}}' öğesinin şimdiki öğeyle olan ilişkisi sona erecektir.",
1147   - "delete-to-relations-title": "{ count, select, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
  1147 + "delete-to-relations-title": "{ count, plural, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
1148 1148 "delete-to-relations-text": "UYARI: Onaylandıktan sonra tüm seçili ilişkiler kaldırılacaktır ve ilgili öğelerin şimdiki öğeyle ilişkisi sona erecektir.",
1149 1149 "delete-from-relation-title": "'{{entityName}}' öğesinden ilişkiyi silmek istediğinize emin misiniz?",
1150 1150 "delete-from-relation-text": "UYARI: Onaylandıktan sonra şimdiki öğenin '{{entityName}}' öğesiyle ilişkisi sonlandırılacaktır.",
1151   - "delete-from-relations-title": "{ count, select, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
  1151 + "delete-from-relations-title": "{ count, plural, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
1152 1152 "delete-from-relations-text": "UYARI: Onaylandıktan sonra tüm seçili ilişkiler kaldırılacak ve şimdiki öğenin ilgili tüm öğelerle ilişkisi sona erecektir.",
1153 1153 "remove-relation-filter": "İlişki filtresini kaldır",
1154 1154 "add-relation-filter": "İlişkisi ekle",
... ... @@ -1171,8 +1171,8 @@
1171 1171 "set-root-rulechain-text": "Onaydan sonra kural zinciri kökleşecek ve gelen tüm iletilerle ilgilenecek.",
1172 1172 "delete-rulechain-title": "'{{ruleName}}' isimli kuralı silmek istediğinize emin misiniz?",
1173 1173 "delete-rulechain-text": "UYARI: Onaylandıktan sonra kural ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
1174   - "delete-rulechains-title": "{ count, select, 1 {1 kuralı} other {# kuralı} } sikmek istediğinize emin misiniz?",
1175   - "delete-rulechains-action-title": "{ count, select, 1 {1 kuralı} other {# kuralı} sil}",
  1174 + "delete-rulechains-title": "{ count, plural, 1 {1 kuralı} other {# kuralı} } sikmek istediğinize emin misiniz?",
  1175 + "delete-rulechains-action-title": "{ count, plural, 1 {1 kuralı} other {# kuralı} } sil",
1176 1176 "delete-rulechains-text": "UYARI: Onaylandıktan sonra seçili tüm kurallar ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
1177 1177 "add-rulechain-text": "Yeni kural ekle",
1178 1178 "no-rulechains-text":"Hiçbir kural bulunamadı",
... ... @@ -1270,8 +1270,8 @@
1270 1270 "tenant-details": "Tenant detayları",
1271 1271 "delete-tenant-title": "'{{tenantTitle}}' isimli tenantı silmek istediğinize emin misiniz?",
1272 1272 "delete-tenant-text": "UYARI: Onaylandıktan sonra tenant ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
1273   - "delete-tenants-title": "{ count, select, 1 {1 tenantı} other {# tenantı} } silmek istediğinize emin misiniz?",
1274   - "delete-tenants-action-title": "{ count, select, 1 {1 tenantı} other {# tenantı} } sil",
  1273 + "delete-tenants-title": "{ count, plural, 1 {1 tenantı} other {# tenantı} } silmek istediğinize emin misiniz?",
  1274 + "delete-tenants-action-title": "{ count, plural, 1 {1 tenantı} other {# tenantı} } sil",
1275 1275 "delete-tenants-text": "UYARI: Onaylandıktan sonra seçili tüm tenantlar ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir",
1276 1276 "title": "Başlık",
1277 1277 "title-required": "Başlık gerekli.",
... ... @@ -1325,8 +1325,8 @@
1325 1325 "user-details": "Kullanıcı detayları",
1326 1326 "delete-user-title": "'{{userEmail}}' kullanıcısını silmek istediğinize emin misiniz?",
1327 1327 "delete-user-text": "UYARI: Onaylandıktan sonra kullanıcı ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
1328   - "delete-users-title": "{ count, select, 1 {1 kullanıcıyı} other {# kullanıcıyı} } sikmek istediğinize emin misiniz?",
1329   - "delete-users-action-title": "{ count, select, 1 {1 kullancıyı} other {# kullanıcıyı} } sil",
  1328 + "delete-users-title": "{ count, plural, 1 {1 kullanıcıyı} other {# kullanıcıyı} } sikmek istediğinize emin misiniz?",
  1329 + "delete-users-action-title": "{ count, plural, 1 {1 kullancıyı} other {# kullanıcıyı} } sil",
1330 1330 "delete-users-text": "UYARI: Onaylandıktan sonra kullanıcı ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
1331 1331 "activation-email-sent-message": "Etkinleştirme e-postası başarılı bir şekilde gönderildi!",
1332 1332 "resend-activation": "Etkinleştirme e-postasını yeniden gönder",
... ... @@ -1445,8 +1445,8 @@
1445 1445 "widgets-bundle-details": "Gösterge demeti detayları",
1446 1446 "delete-widgets-bundle-title": "'{{widgetsBundleTitle}}' isimli gösterge demetini silmek istediğinize emin misiniz?",
1447 1447 "delete-widgets-bundle-text": "UYARI: Onaylandıktan sonra gösterge demeti ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
1448   - "delete-widgets-bundles-title": "{ count, select, 1 {1 gösterge demetini} other {# gösterge demetini} } silmek istediğinize emin misiniz?",
1449   - "delete-widgets-bundles-action-title": "{ count, select, 1 {1 gösterge demetini} other {# gösterge demetini} } sil",
  1448 + "delete-widgets-bundles-title": "{ count, plural, 1 {1 gösterge demetini} other {# gösterge demetini} } silmek istediğinize emin misiniz?",
  1449 + "delete-widgets-bundles-action-title": "{ count, plural, 1 {1 gösterge demetini} other {# gösterge demetini} } sil",
1450 1450 "delete-widgets-bundles-text": "UYARI: Onaylandıktan sonra seçili tüm gösterge demetleri ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
1451 1451 "no-widgets-bundles-matching": "'{{widgetsBundle}}' ile eşleşen gösterge demeti bulunamadı.",
1452 1452 "widgets-bundle-required": "Gösterge demeti gerekli.",
... ... @@ -1482,7 +1482,7 @@
1482 1482 "use-dashboard-timewindow": "Kontrol paneli zaman aralığı kullan",
1483 1483 "display-legend": "Lejant göster",
1484 1484 "datasources": "Veri kaynakları",
1485   - "maximum-datasources": "En fazla { count, select, 1 {1 veri kaynağı kullanılabilir.} other {# veri kaynağı kullanılabilir} }",
  1485 + "maximum-datasources": "En fazla { count, plural, 1 {1 veri kaynağı kullanılabilir.} other {# veri kaynağı kullanılabilir} }",
1486 1486 "datasource-type": "Tür",
1487 1487 "datasource-parameters": "Parametreler",
1488 1488 "remove-datasource": "Veri kaynağını kaldır",
... ... @@ -1539,7 +1539,7 @@
1539 1539 "ru_RU": "Rusça",
1540 1540 "es_ES": "İspanyol",
1541 1541 "ja_JA": "Japonca",
1542   - "TR": "Türkçe"
  1542 + "tr_TR": "Türkçe"
1543 1543 }
1544 1544 }
1545 1545 }
\ No newline at end of file
... ...
... ... @@ -1445,7 +1445,7 @@
1445 1445 "es_ES": "西班牙语",
1446 1446 "it_IT": "意大利",
1447 1447 "ja_JA": "日本",
1448   - "TR": "土耳其"
  1448 + "tr_TR": "土耳其"
1449 1449 }
1450 1450 }
1451 1451 }
... ...
... ... @@ -121,7 +121,7 @@ export default function NodeScriptTest($q, $mdDialog, $document, ruleChainServic
121 121 onShowingCallback: onShowingCallback
122 122 },
123 123 fullscreen: true,
124   - skipHide: true,
  124 + multiple: true,
125 125 targetEvent: $event,
126 126 onComplete: () => {
127 127 onShowingCallback.onShowed();
... ...
... ... @@ -100,7 +100,7 @@ export default function AddUserController($scope, $mdDialog, $state, $stateParam
100 100 },
101 101 parent: angular.element($document[0].body),
102 102 fullscreen: true,
103   - skipHide: true,
  103 + multiple: true,
104 104 targetEvent: $event
105 105 }).then(function () {
106 106 deferred.resolve();
... ...
... ... @@ -186,7 +186,7 @@ export default function UserController(userService, toast, $scope, $mdDialog, $d
186 186 },
187 187 parent: angular.element($document[0].body),
188 188 fullscreen: true,
189   - skipHide: true,
  189 + multiple: true,
190 190 targetEvent: event
191 191 });
192 192 }
... ...
... ... @@ -402,7 +402,7 @@ function AlarmsTableWidgetController($element, $scope, $filter, $mdMedia, $mdDia
402 402 parent: angular.element($document[0].body),
403 403 targetEvent: $event,
404 404 fullscreen: true,
405   - skipHide: true,
  405 + multiple: true,
406 406 onShowing: function(scope, element) {
407 407 onShowingCallback.onShowing(scope, element);
408 408 }
... ...
... ... @@ -209,8 +209,8 @@ export default class TbCanvasDigitalGauge {
209 209 }
210 210 var value = tvPair[1];
211 211 if(value !== this.gauge.value) {
212   - this.gauge.value = value;
213 212 this.gauge._value = value;
  213 + this.gauge.value = value;
214 214 } else if (this.localSettings.showTimestamp && this.gauge.timestamp != timestamp) {
215 215 this.gauge.timestamp = timestamp;
216 216 }
... ...