Commit fd251f0d9a82d38d228902a9c652b3b7679d2c9a

Authored by Igor Kulikov
1 parent aa4787e9

Fix Turkish localization. Update angular material version to 1.1.9. Fix 0 digita…

…l gauges value when no animation.
Showing 38 changed files with 309 additions and 114 deletions
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 "resources": [], 15 "resources": [],
16 "templateHtml": "", 16 "templateHtml": "",
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}", 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 "settingsSchema": "{}", 19 "settingsSchema": "{}",
20 "dataKeySettingsSchema": "{}\n", 20 "dataKeySettingsSchema": "{}\n",
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\"}" 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,7 +26,7 @@
26 "angular-gridster": "^0.13.14", 26 "angular-gridster": "^0.13.14",
27 "angular-hotkeys": "^1.7.0", 27 "angular-hotkeys": "^1.7.0",
28 "angular-jwt": "^0.1.6", 28 "angular-jwt": "^0.1.6",
29 - "angular-material": "1.1.1", 29 + "angular-material": "1.1.9",
30 "angular-material-data-table": "^0.10.9", 30 "angular-material-data-table": "^0.10.9",
31 "angular-material-icons": "^0.7.1", 31 "angular-material-icons": "^0.7.1",
32 "angular-material-expansion-panel": "^0.7.2", 32 "angular-material-expansion-panel": "^0.7.2",
@@ -63,7 +63,7 @@ @@ -63,7 +63,7 @@
63 "leaflet-providers": "^1.1.17", 63 "leaflet-providers": "^1.1.17",
64 "material-ui": "^0.16.1", 64 "material-ui": "^0.16.1",
65 "material-ui-number-input": "^5.0.16", 65 "material-ui-number-input": "^5.0.16",
66 - "md-color-picker": "^0.2.6", 66 + "md-color-picker": "0.2.6",
67 "mdPickers": "git://github.com/alenaksu/mdPickers.git#0.7.5", 67 "mdPickers": "git://github.com/alenaksu/mdPickers.git#0.7.5",
68 "moment": "^2.15.0", 68 "moment": "^2.15.0",
69 "ngclipboard": "^1.1.1", 69 "ngclipboard": "^1.1.1",
@@ -50,7 +50,7 @@ export default function AlarmRowDirective($compile, $templateCache, types, $mdDi @@ -50,7 +50,7 @@ export default function AlarmRowDirective($compile, $templateCache, types, $mdDi
50 parent: angular.element($document[0].body), 50 parent: angular.element($document[0].body),
51 targetEvent: $event, 51 targetEvent: $event,
52 fullscreen: true, 52 fullscreen: true,
53 - skipHide: true, 53 + multiple: true,
54 onShowing: function(scope, element) { 54 onShowing: function(scope, element) {
55 onShowingCallback.onShowing(scope, element); 55 onShowingCallback.onShowing(scope, element);
56 } 56 }
@@ -31,6 +31,7 @@ import 'angular-translate-interpolation-messageformat'; @@ -31,6 +31,7 @@ import 'angular-translate-interpolation-messageformat';
31 import 'md-color-picker'; 31 import 'md-color-picker';
32 import mdPickers from 'mdPickers'; 32 import mdPickers from 'mdPickers';
33 import ngSanitize from 'angular-sanitize'; 33 import ngSanitize from 'angular-sanitize';
  34 +import FBAngular from 'angular-fullscreen';
34 import vAccordion from 'v-accordion'; 35 import vAccordion from 'v-accordion';
35 import ngAnimate from 'angular-animate'; 36 import ngAnimate from 'angular-animate';
36 import 'angular-websocket'; 37 import 'angular-websocket';
@@ -65,6 +66,7 @@ import 'angular-material-expansion-panel/dist/md-expansion-panel.min.css'; @@ -65,6 +66,7 @@ import 'angular-material-expansion-panel/dist/md-expansion-panel.min.css';
65 import 'ngFlowchart/dist/flowchart.css'; 66 import 'ngFlowchart/dist/flowchart.css';
66 import '../scss/main.scss'; 67 import '../scss/main.scss';
67 68
  69 +import thingsboardThirdpartyFix from './common/thirdparty-fix';
68 import thingsboardTranslateHandler from './locale/translate-handler'; 70 import thingsboardTranslateHandler from './locale/translate-handler';
69 import thingsboardLogin from './login'; 71 import thingsboardLogin from './login';
70 import thingsboardDialogs from './components/datakey-config-dialog.controller'; 72 import thingsboardDialogs from './components/datakey-config-dialog.controller';
@@ -105,6 +107,7 @@ angular.module('thingsboard', [ @@ -105,6 +107,7 @@ angular.module('thingsboard', [
105 'mdColorPicker', 107 'mdColorPicker',
106 mdPickers, 108 mdPickers,
107 ngSanitize, 109 ngSanitize,
  110 + FBAngular.name,
108 vAccordion, 111 vAccordion,
109 ngAnimate, 112 ngAnimate,
110 'ngWebSocket', 113 'ngWebSocket',
@@ -118,6 +121,7 @@ angular.module('thingsboard', [ @@ -118,6 +121,7 @@ angular.module('thingsboard', [
118 react.name, 121 react.name,
119 'flow', 122 'flow',
120 'flowchart', 123 'flowchart',
  124 + thingsboardThirdpartyFix,
121 thingsboardTranslateHandler, 125 thingsboardTranslateHandler,
122 thingsboardLogin, 126 thingsboardLogin,
123 thingsboardDialogs, 127 thingsboardDialogs,
@@ -48,7 +48,7 @@ export default function AuditLogRowDirective($compile, $templateCache, types, $m @@ -48,7 +48,7 @@ export default function AuditLogRowDirective($compile, $templateCache, types, $m
48 parent: angular.element($document[0].body), 48 parent: angular.element($document[0].body),
49 targetEvent: $event, 49 targetEvent: $event,
50 fullscreen: true, 50 fullscreen: true,
51 - skipHide: true, 51 + multiple: true,
52 onShowing: function(scope, element) { 52 onShowing: function(scope, element) {
53 onShowingCallback.onShowing(scope, element); 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,7 +186,7 @@ function DatasourceEntity($compile, $templateCache, $q, $mdDialog, $window, $doc
186 random: tinycolor.random(), 186 random: tinycolor.random(),
187 clickOutsideToClose: false, 187 clickOutsideToClose: false,
188 hasBackdrop: false, 188 hasBackdrop: false,
189 - skipHide: true, 189 + multiple: true,
190 preserveScope: false, 190 preserveScope: false,
191 191
192 mdColorAlphaChannel: true, 192 mdColorAlphaChannel: true,
@@ -220,7 +220,7 @@ function DatasourceEntity($compile, $templateCache, $q, $mdDialog, $window, $doc @@ -220,7 +220,7 @@ function DatasourceEntity($compile, $templateCache, $q, $mdDialog, $window, $doc
220 parent: angular.element($document[0].body), 220 parent: angular.element($document[0].body),
221 fullscreen: true, 221 fullscreen: true,
222 targetEvent: event, 222 targetEvent: event,
223 - skipHide: true, 223 + multiple: true,
224 onComplete: function () { 224 onComplete: function () {
225 var w = angular.element($window); 225 var w = angular.element($window);
226 w.triggerHandler('resize'); 226 w.triggerHandler('resize');
@@ -26,7 +26,6 @@ @@ -26,7 +26,6 @@
26 <section flex layout='column' layout-align="center" style="padding-left: 4px;"> 26 <section flex layout='column' layout-align="center" style="padding-left: 4px;">
27 <md-chips flex ng-if="widgetType != types.widgetType.alarm.value" 27 <md-chips flex ng-if="widgetType != types.widgetType.alarm.value"
28 id="timeseries_datakey_chips" 28 id="timeseries_datakey_chips"
29 - ng-required="true"  
30 ng-model="timeseriesDataKeys" md-autocomplete-snap 29 ng-model="timeseriesDataKeys" md-autocomplete-snap
31 md-transform-chip="transformTimeseriesDataKeyChip($chip)" 30 md-transform-chip="transformTimeseriesDataKeyChip($chip)"
32 md-require-match="false"> 31 md-require-match="false">
@@ -78,7 +77,6 @@ @@ -78,7 +77,6 @@
78 </md-chips> 77 </md-chips>
79 <md-chips flex ng-if="widgetType === types.widgetType.latest.value" 78 <md-chips flex ng-if="widgetType === types.widgetType.latest.value"
80 id="attribute_datakey_chips" 79 id="attribute_datakey_chips"
81 - ng-required="true"  
82 ng-model="attributeDataKeys" md-autocomplete-snap 80 ng-model="attributeDataKeys" md-autocomplete-snap
83 md-transform-chip="transformAttributeDataKeyChip($chip)" 81 md-transform-chip="transformAttributeDataKeyChip($chip)"
84 md-require-match="false"> 82 md-require-match="false">
@@ -139,7 +139,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document, @@ -139,7 +139,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document,
139 random: tinycolor.random(), 139 random: tinycolor.random(),
140 clickOutsideToClose: false, 140 clickOutsideToClose: false,
141 hasBackdrop: false, 141 hasBackdrop: false,
142 - skipHide: true, 142 + multiple: true,
143 preserveScope: false, 143 preserveScope: false,
144 144
145 mdColorAlphaChannel: true, 145 mdColorAlphaChannel: true,
@@ -173,7 +173,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document, @@ -173,7 +173,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document,
173 parent: angular.element($document[0].body), 173 parent: angular.element($document[0].body),
174 fullscreen: true, 174 fullscreen: true,
175 targetEvent: event, 175 targetEvent: event,
176 - skipHide: true, 176 + multiple: true,
177 onComplete: function () { 177 onComplete: function () {
178 var w = angular.element($window); 178 var w = angular.element($window);
179 w.triggerHandler('resize'); 179 w.triggerHandler('resize');
@@ -96,7 +96,7 @@ function JsonForm($compile, $templateCache, $mdColorPicker) { @@ -96,7 +96,7 @@ function JsonForm($compile, $templateCache, $mdColorPicker) {
96 random: tinycolor.random(), 96 random: tinycolor.random(),
97 clickOutsideToClose: false, 97 clickOutsideToClose: false,
98 hasBackdrop: false, 98 hasBackdrop: false,
99 - skipHide: true, 99 + multiple: true,
100 preserveScope: false, 100 preserveScope: false,
101 101
102 mdColorAlphaChannel: true, 102 mdColorAlphaChannel: true,
@@ -67,7 +67,7 @@ function MaterialIconSelect($compile, $templateCache, $document, $mdDialog) { @@ -67,7 +67,7 @@ function MaterialIconSelect($compile, $templateCache, $document, $mdDialog) {
67 templateUrl: materialIconsDialogTemplate, 67 templateUrl: materialIconsDialogTemplate,
68 parent: angular.element($document[0].body), 68 parent: angular.element($document[0].body),
69 locals: {icon: scope.icon}, 69 locals: {icon: scope.icon},
70 - skipHide: true, 70 + multiple: true,
71 fullscreen: true, 71 fullscreen: true,
72 targetEvent: $event 72 targetEvent: $event
73 }).then(function (icon) { 73 }).then(function (icon) {
@@ -164,7 +164,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog, @@ -164,7 +164,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog,
164 .cancel($translate.instant('action.no')) 164 .cancel($translate.instant('action.no'))
165 .ok($translate.instant('action.yes')); 165 .ok($translate.instant('action.yes'));
166 166
167 - confirm._options.skipHide = true; 167 + confirm._options.multiple = true;
168 confirm._options.fullscreen = true; 168 confirm._options.fullscreen = true;
169 169
170 $mdDialog.show(confirm).then(function () { 170 $mdDialog.show(confirm).then(function () {
@@ -212,7 +212,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog, @@ -212,7 +212,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog,
212 locals: {isAdd: isAdd, fetchDashboardStates: vm.fetchDashboardStates, 212 locals: {isAdd: isAdd, fetchDashboardStates: vm.fetchDashboardStates,
213 actionSources: availableActionSources, widgetActions: vm.widgetActions, 213 actionSources: availableActionSources, widgetActions: vm.widgetActions,
214 action: angular.copy(action)}, 214 action: angular.copy(action)},
215 - skipHide: true, 215 + multiple: true,
216 fullscreen: true, 216 fullscreen: true,
217 targetEvent: $event 217 targetEvent: $event
218 }).then(function (action) { 218 }).then(function (action) {
@@ -166,7 +166,7 @@ export default function AddWidgetController($scope, widgetService, entityService @@ -166,7 +166,7 @@ export default function AddWidgetController($scope, widgetService, entityService
166 }, 166 },
167 parent: angular.element($document[0].body), 167 parent: angular.element($document[0].body),
168 fullscreen: true, 168 fullscreen: true,
169 - skipHide: true, 169 + multiple: true,
170 targetEvent: event 170 targetEvent: event
171 }).then(function (singleEntityAlias) { 171 }).then(function (singleEntityAlias) {
172 vm.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias; 172 vm.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias;
@@ -463,7 +463,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget @@ -463,7 +463,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
463 } 463 }
464 }, 464 },
465 parent: angular.element($document[0].body), 465 parent: angular.element($document[0].body),
466 - skipHide: true, 466 + multiple: true,
467 fullscreen: true, 467 fullscreen: true,
468 targetEvent: $event 468 targetEvent: $event
469 }).then(function (entityAliases) { 469 }).then(function (entityAliases) {
@@ -488,7 +488,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget @@ -488,7 +488,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
488 gridSettings: gridSettings 488 gridSettings: gridSettings
489 }, 489 },
490 parent: angular.element($document[0].body), 490 parent: angular.element($document[0].body),
491 - skipHide: true, 491 + multiple: true,
492 fullscreen: true, 492 fullscreen: true,
493 targetEvent: $event 493 targetEvent: $event
494 }).then(function (data) { 494 }).then(function (data) {
@@ -510,7 +510,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget @@ -510,7 +510,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
510 layouts: angular.copy(vm.dashboard.configuration.states[vm.dashboardCtx.state].layouts) 510 layouts: angular.copy(vm.dashboard.configuration.states[vm.dashboardCtx.state].layouts)
511 }, 511 },
512 parent: angular.element($document[0].body), 512 parent: angular.element($document[0].body),
513 - skipHide: true, 513 + multiple: true,
514 fullscreen: true, 514 fullscreen: true,
515 targetEvent: $event 515 targetEvent: $event
516 }).then(function (layouts) { 516 }).then(function (layouts) {
@@ -531,7 +531,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget @@ -531,7 +531,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
531 states: states 531 states: states
532 }, 532 },
533 parent: angular.element($document[0].body), 533 parent: angular.element($document[0].body),
534 - skipHide: true, 534 + multiple: true,
535 fullscreen: true, 535 fullscreen: true,
536 targetEvent: $event 536 targetEvent: $event
537 }).then(function (states) { 537 }).then(function (states) {
@@ -873,7 +873,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget @@ -873,7 +873,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
873 templateUrl: selectTargetLayoutTemplate, 873 templateUrl: selectTargetLayoutTemplate,
874 parent: angular.element($document[0].body), 874 parent: angular.element($document[0].body),
875 fullscreen: true, 875 fullscreen: true,
876 - skipHide: true, 876 + multiple: true,
877 targetEvent: $event 877 targetEvent: $event
878 }).then( 878 }).then(
879 function success(layoutId) { 879 function success(layoutId) {
@@ -941,7 +941,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget @@ -941,7 +941,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
941 }, 941 },
942 parent: angular.element($document[0].body), 942 parent: angular.element($document[0].body),
943 fullscreen: true, 943 fullscreen: true,
944 - skipHide: true, 944 + multiple: true,
945 targetEvent: event, 945 targetEvent: event,
946 onComplete: function () { 946 onComplete: function () {
947 var w = angular.element($window); 947 var w = angular.element($window);
@@ -131,7 +131,7 @@ export default function EditWidgetDirective($compile, $templateCache, types, wid @@ -131,7 +131,7 @@ export default function EditWidgetDirective($compile, $templateCache, types, wid
131 }, 131 },
132 parent: angular.element($document[0].body), 132 parent: angular.element($document[0].body),
133 fullscreen: true, 133 fullscreen: true,
134 - skipHide: true, 134 + multiple: true,
135 targetEvent: event 135 targetEvent: event
136 }).then(function (singleEntityAlias) { 136 }).then(function (singleEntityAlias) {
137 scope.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias; 137 scope.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias;
@@ -51,7 +51,7 @@ export default function ManageDashboardLayoutsController($scope, $mdDialog, $doc @@ -51,7 +51,7 @@ export default function ManageDashboardLayoutsController($scope, $mdDialog, $doc
51 gridSettings: gridSettings 51 gridSettings: gridSettings
52 }, 52 },
53 parent: angular.element($document[0].body), 53 parent: angular.element($document[0].body),
54 - skipHide: true, 54 + multiple: true,
55 fullscreen: true, 55 fullscreen: true,
56 targetEvent: $event 56 targetEvent: $event
57 }).then(function (data) { 57 }).then(function (data) {
@@ -111,7 +111,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt @@ -111,7 +111,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt
111 templateUrl: dashboardStateDialogTemplate, 111 templateUrl: dashboardStateDialogTemplate,
112 parent: angular.element($document[0].body), 112 parent: angular.element($document[0].body),
113 locals: {isAdd: isAdd, allStates: vm.allStates, state: angular.copy(state)}, 113 locals: {isAdd: isAdd, allStates: vm.allStates, state: angular.copy(state)},
114 - skipHide: true, 114 + multiple: true,
115 fullscreen: true, 115 fullscreen: true,
116 targetEvent: $event 116 targetEvent: $event
117 }).then(function (state) { 117 }).then(function (state) {
@@ -163,7 +163,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt @@ -163,7 +163,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt
163 .cancel($translate.instant('action.no')) 163 .cancel($translate.instant('action.no'))
164 .ok($translate.instant('action.yes')); 164 .ok($translate.instant('action.yes'));
165 165
166 - confirm._options.skipHide = true; 166 + confirm._options.multiple = true;
167 confirm._options.fullscreen = true; 167 confirm._options.fullscreen = true;
168 168
169 $mdDialog.show(confirm).then(function () { 169 $mdDialog.show(confirm).then(function () {
@@ -126,7 +126,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc @@ -126,7 +126,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc
126 }, 126 },
127 parent: angular.element($document[0].body), 127 parent: angular.element($document[0].body),
128 fullscreen: true, 128 fullscreen: true,
129 - skipHide: true, 129 + multiple: true,
130 targetEvent: $event 130 targetEvent: $event
131 }).then(function (alias) { 131 }).then(function (alias) {
132 if (isAdd) { 132 if (isAdd) {
@@ -158,7 +158,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc @@ -158,7 +158,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc
158 .ariaLabel($translate.instant('entity.unable-delete-entity-alias-title')) 158 .ariaLabel($translate.instant('entity.unable-delete-entity-alias-title'))
159 .ok($translate.instant('action.close')) 159 .ok($translate.instant('action.close'))
160 .targetEvent($event); 160 .targetEvent($event);
161 - alert._options.skipHide = true; 161 + alert._options.multiple = true;
162 alert._options.fullscreen = true; 162 alert._options.fullscreen = true;
163 163
164 $mdDialog.show(alert); 164 $mdDialog.show(alert);
@@ -53,7 +53,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog, @@ -53,7 +53,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog,
53 states: states 53 states: states
54 }, 54 },
55 fullscreen: true, 55 fullscreen: true,
56 - skipHide: true, 56 + multiple: true,
57 targetEvent: $event 57 targetEvent: $event
58 }).then( 58 }).then(
59 function success(stateId) { 59 function success(stateId) {
@@ -81,7 +81,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog, @@ -81,7 +81,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog,
81 templateUrl: selectTargetLayoutTemplate, 81 templateUrl: selectTargetLayoutTemplate,
82 parent: angular.element($document[0].body), 82 parent: angular.element($document[0].body),
83 fullscreen: true, 83 fullscreen: true,
84 - skipHide: true, 84 + multiple: true,
85 targetEvent: $event 85 targetEvent: $event
86 }).then( 86 }).then(
87 function success(layoutId) { 87 function success(layoutId) {
@@ -160,7 +160,7 @@ function RelationTableController($scope, $q, $mdDialog, $document, $translate, $ @@ -160,7 +160,7 @@ function RelationTableController($scope, $q, $mdDialog, $document, $translate, $
160 showingCallback: onShowingCallback}, 160 showingCallback: onShowingCallback},
161 targetEvent: $event, 161 targetEvent: $event,
162 fullscreen: true, 162 fullscreen: true,
163 - skipHide: true, 163 + multiple: true,
164 onShowing: function(scope, element) { 164 onShowing: function(scope, element) {
165 onShowingCallback.onShowing(scope, element); 165 onShowingCallback.onShowing(scope, element);
166 } 166 }
@@ -79,7 +79,7 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $ @@ -79,7 +79,7 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $
79 parent: angular.element($document[0].body), 79 parent: angular.element($document[0].body),
80 fullscreen: true, 80 fullscreen: true,
81 targetEvent: $event, 81 targetEvent: $event,
82 - skipHide: true, 82 + multiple: true,
83 onShowing: function(scope, element) { 83 onShowing: function(scope, element) {
84 onShowingCallback.onShowing(scope, element); 84 onShowingCallback.onShowing(scope, element);
85 } 85 }
@@ -208,7 +208,7 @@ function ExtensionTableController($scope, $filter, $document, $translate, $timeo @@ -208,7 +208,7 @@ function ExtensionTableController($scope, $filter, $document, $translate, $timeo
208 bindToController: true, 208 bindToController: true,
209 targetEvent: $event, 209 targetEvent: $event,
210 fullscreen: true, 210 fullscreen: true,
211 - skipHide: true 211 + multiple: true
212 }).then(function() { 212 }).then(function() {
213 reloadExtensions(); 213 reloadExtensions();
214 }, function () { 214 }, function () {
@@ -721,7 +721,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document, @@ -721,7 +721,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
721 } 721 }
722 }, 722 },
723 parent: angular.element($document[0].body), 723 parent: angular.element($document[0].body),
724 - skipHide: true, 724 + multiple: true,
725 fullscreen: true, 725 fullscreen: true,
726 targetEvent: $event 726 targetEvent: $event
727 }).then(function (updatedEntityAliases) { 727 }).then(function (updatedEntityAliases) {
@@ -796,7 +796,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document, @@ -796,7 +796,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
796 importFileLabel: importFileLabel 796 importFileLabel: importFileLabel
797 }, 797 },
798 parent: angular.element($document[0].body), 798 parent: angular.element($document[0].body),
799 - skipHide: true, 799 + multiple: true,
800 fullscreen: true, 800 fullscreen: true,
801 targetEvent: $event 801 targetEvent: $event
802 }).then(function (importData) { 802 }).then(function (importData) {
@@ -17,7 +17,6 @@ import './home.scss'; @@ -17,7 +17,6 @@ import './home.scss';
17 17
18 import uiRouter from 'angular-ui-router'; 18 import uiRouter from 'angular-ui-router';
19 import ngSanitize from 'angular-sanitize'; 19 import ngSanitize from 'angular-sanitize';
20 -import FBAngular from 'angular-fullscreen';  
21 import 'angular-breadcrumb'; 20 import 'angular-breadcrumb';
22 21
23 import thingsboardMenu from '../services/menu.service'; 22 import thingsboardMenu from '../services/menu.service';
@@ -63,7 +62,6 @@ import BreadcrumbIcon from './breadcrumb-icon.filter'; @@ -63,7 +62,6 @@ import BreadcrumbIcon from './breadcrumb-icon.filter';
63 export default angular.module('thingsboard.home', [ 62 export default angular.module('thingsboard.home', [
64 uiRouter, 63 uiRouter,
65 ngSanitize, 64 ngSanitize,
66 - FBAngular.name,  
67 'ncy-angular-breadcrumb', 65 'ncy-angular-breadcrumb',
68 thingsboardMenu, 66 thingsboardMenu,
69 thingsboardHomeLinks, 67 thingsboardHomeLinks,
@@ -1573,7 +1573,7 @@ @@ -1573,7 +1573,7 @@
1573 "ru_RU": "Russian", 1573 "ru_RU": "Russian",
1574 "es_ES": "Spanish", 1574 "es_ES": "Spanish",
1575 "ja_JA": "Japanese", 1575 "ja_JA": "Japanese",
1576 - "TR": "Turkish" 1576 + "tr_TR": "Turkish"
1577 } 1577 }
1578 } 1578 }
1579 } 1579 }
@@ -1552,7 +1552,7 @@ @@ -1552,7 +1552,7 @@
1552 "ru_RU": "Ruso", 1552 "ru_RU": "Ruso",
1553 "es_ES": "Español", 1553 "es_ES": "Español",
1554 "ja_JA": "Japonés", 1554 "ja_JA": "Japonés",
1555 - "TR": "Turco" 1555 + "tr_TR": "Turco"
1556 } 1556 }
1557 } 1557 }
1558 } 1558 }
@@ -1010,7 +1010,7 @@ @@ -1010,7 +1010,7 @@
1010 "ko_KR": "Coréen", 1010 "ko_KR": "Coréen",
1011 "ru_RU": "Russe", 1011 "ru_RU": "Russe",
1012 "zh_CN": "Chinois", 1012 "zh_CN": "Chinois",
1013 - "TR": "Turc" 1013 + "tr_TR": "Turc"
1014 } 1014 }
1015 }, 1015 },
1016 "layout": { 1016 "layout": {
@@ -1442,7 +1442,7 @@ @@ -1442,7 +1442,7 @@
1442 "ru_RU": "Russo", 1442 "ru_RU": "Russo",
1443 "es_ES": "Spagnolo", 1443 "es_ES": "Spagnolo",
1444 "ja_JA": "Giapponese", 1444 "ja_JA": "Giapponese",
1445 - "TR": "Turco" 1445 + "tr_TR": "Turco"
1446 } 1446 }
1447 } 1447 }
1448 } 1448 }
@@ -1458,7 +1458,7 @@ @@ -1458,7 +1458,7 @@
1458 "ru_RU": "ロシア", 1458 "ru_RU": "ロシア",
1459 "es_ES": "スペイン語", 1459 "es_ES": "スペイン語",
1460 "ja_JA": "日本語", 1460 "ja_JA": "日本語",
1461 - "TR": "トルコ語" 1461 + "tr_TR": "トルコ語"
1462 } 1462 }
1463 } 1463 }
1464 } 1464 }
@@ -1336,7 +1336,7 @@ @@ -1336,7 +1336,7 @@
1336 "es_ES": "스페인어", 1336 "es_ES": "스페인어",
1337 "it_IT": "이탈리아 사람", 1337 "it_IT": "이탈리아 사람",
1338 "ja_JA": "일본어", 1338 "ja_JA": "일본어",
1339 - "TR": "터키어" 1339 + "tr_TR": "터키어"
1340 } 1340 }
1341 } 1341 }
1342 } 1342 }
@@ -1361,7 +1361,7 @@ @@ -1361,7 +1361,7 @@
1361 "it_IT": "Итальянский", 1361 "it_IT": "Итальянский",
1362 "ru_RU": "Русский", 1362 "ru_RU": "Русский",
1363 "ja_JA": "Японский", 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,15 +126,15 @@
126 "acknowledge": "Onayla", 126 "acknowledge": "Onayla",
127 "clear": "Temizle", 127 "clear": "Temizle",
128 "search": "Alarm ara", 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 "no-data": "Görüntülenecek veri bulunmuyor", 130 "no-data": "Görüntülenecek veri bulunmuyor",
131 "polling-interval": "Alarm yoklama aralığı (saniye)", 131 "polling-interval": "Alarm yoklama aralığı (saniye)",
132 "polling-interval-required": "Alarm yoklama aralığı gerekli.", 132 "polling-interval-required": "Alarm yoklama aralığı gerekli.",
133 "min-polling-interval-message": "Alarm yoklama aralığı en az 1 saniye olmalıdır.", 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 "alias": { 139 "alias": {
140 "add": "Kısa ad ekle", 140 "add": "Kısa ad ekle",
@@ -212,15 +212,15 @@ @@ -212,15 +212,15 @@
212 "add-asset-text": "Yeni varlık ekle", 212 "add-asset-text": "Yeni varlık ekle",
213 "asset-details": "Varlık detayları", 213 "asset-details": "Varlık detayları",
214 "assign-assets": "Varlıkları ata", 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 "delete-assets": "Varlıkları sil", 216 "delete-assets": "Varlıkları sil",
217 "unassign-assets": "Varlıkların atamalarını kaldır", 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 "assign-new-asset": "Yeni varlık ata", 219 "assign-new-asset": "Yeni varlık ata",
220 "delete-asset-title": "'{{assetName}}' isimli varlığı silmek istediğinize emin misiniz?", 220 "delete-asset-title": "'{{assetName}}' isimli varlığı silmek istediğinize emin misiniz?",
221 "delete-asset-text": "UYARI: Onaylandıktan sonra varlık ve ilgili tüm veriler geri yüklenemeyecek şekilde silinecek.", 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 "delete-assets-text": "UYARI: Onaylandıktan sonra tüm seçili varlıklar ver ilgili tüm veriler geri yüklenemyeck şekilde silinecek.", 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 "make-public-asset-title": "'{{assetName}}' isimli varlığı açık hale getirmek istediğinize emin misiniz?", 225 "make-public-asset-title": "'{{assetName}}' isimli varlığı açık hale getirmek istediğinize emin misiniz?",
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.", 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,7 +229,7 @@
229 "unassign-asset-title": "'{{assetName}}' isimli varlığın atamasını kaldırmak istediğinize emin misiniz?", 229 "unassign-asset-title": "'{{assetName}}' isimli varlığın atamasını kaldırmak istediğinize emin misiniz?",
230 "unassign-asset-text": "Onaylandıktan sonra varlığın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacaktır.", 230 "unassign-asset-text": "Onaylandıktan sonra varlığın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacaktır.",
231 "unassign-asset": "Varlık atamasını kaldır", 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 "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.", 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 "copyId": "Varlık kimliğini kopyala", 234 "copyId": "Varlık kimliğini kopyala",
235 "idCopiedMessage": "Varlık kimliği panoya kopyalandı", 235 "idCopiedMessage": "Varlık kimliği panoya kopyalandı",
@@ -252,7 +252,7 @@ @@ -252,7 +252,7 @@
252 "key-required": "Öznitelik anahtarı gerekli.", 252 "key-required": "Öznitelik anahtarı gerekli.",
253 "value": "Değer", 253 "value": "Değer",
254 "value-required": "Öznitelik değeri gerekli.", 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 "delete-attributes-text": "UYARI: Onaylandıktan sonra tüm seçili öznitelikler kaldırılacak.", 256 "delete-attributes-text": "UYARI: Onaylandıktan sonra tüm seçili öznitelikler kaldırılacak.",
257 "delete-attributes": "Öznitelikleri sil", 257 "delete-attributes": "Öznitelikleri sil",
258 "enter-attribute-value": "Öznitelik değeri gir", 258 "enter-attribute-value": "Öznitelik değeri gir",
@@ -262,8 +262,8 @@ @@ -262,8 +262,8 @@
262 "prev-widget": "Önceki gösterge", 262 "prev-widget": "Önceki gösterge",
263 "add-to-dashboard": "Kontrol paneline ekle", 263 "add-to-dashboard": "Kontrol paneline ekle",
264 "add-widget-to-dashboard": "Göstergeyi kontrol paneline ekle", 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 "audit-log": { 268 "audit-log": {
269 "audit": "Log ve Hata Yönetimi", 269 "audit": "Log ve Hata Yönetimi",
@@ -358,8 +358,8 @@ @@ -358,8 +358,8 @@
358 "customer-details": "Kullanıcı Grubu detayları", 358 "customer-details": "Kullanıcı Grubu detayları",
359 "delete-customer-title": "'{{customerTitle}}' isimli kullanıcı grubunu silmek istediğinize emin misiniz?", 359 "delete-customer-title": "'{{customerTitle}}' isimli kullanıcı grubunu silmek istediğinize emin misiniz?",
360 "delete-customer-text": "UYARI: Onaylandıktan sonra kullanıcı grubu ve tüm ilişkili veriler geri yüklenemeyecek şekilde silinecek.", 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 "delete-customers-text": "UYARI: Onaylandıktan sonra tüm seçili kullanıcı grupları ve ilişkili veriler geri yüklenemez şekilde silinecek.", 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 "manage-users": "Kullanıcıları yönet", 364 "manage-users": "Kullanıcıları yönet",
365 "manage-assets": "Varlıkları yönet", 365 "manage-assets": "Varlıkları yönet",
@@ -418,20 +418,20 @@ @@ -418,20 +418,20 @@
418 "add-dashboard-text": "Yeni kontrol paneli ekle", 418 "add-dashboard-text": "Yeni kontrol paneli ekle",
419 "assign-dashboards": "Kontrol panelleri ata", 419 "assign-dashboards": "Kontrol panelleri ata",
420 "assign-new-dashboard": "Yeni kontrol paneli ata", 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 "delete-dashboards": "Kontrol panellerini sil", 423 "delete-dashboards": "Kontrol panellerini sil",
424 "unassign-dashboards": "Kontrol panellerinden atamayı kaldır", 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 "delete-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelini silmek istediğinize emin misiniz?", 426 "delete-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelini silmek istediğinize emin misiniz?",
427 "delete-dashboard-text": "UYARI: Onaylandıktan sonra kontrol paneli ve ilişkili verileri geri yüklenemez şekilde silinecek.", 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 "delete-dashboards-text": "UYARI: Onaylandıktan sonra tüm seçili kontrol panelleri ve ilişkili verileri geri yüklenemez şekilde silinecek.", 430 "delete-dashboards-text": "UYARI: Onaylandıktan sonra tüm seçili kontrol panelleri ve ilişkili verileri geri yüklenemez şekilde silinecek.",
431 "unassign-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelindeki atamayı kaldırmak istediğinize emin misiniz?", 431 "unassign-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelindeki atamayı kaldırmak istediğinize emin misiniz?",
432 "unassign-dashboard-text": "Onaylandıktan sonra kontrol panelinin ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez hale gelecektir.", 432 "unassign-dashboard-text": "Onaylandıktan sonra kontrol panelinin ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez hale gelecektir.",
433 "unassign-dashboard": "Kontrol panelinin ataması kaldır", 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 "unassign-dashboards-text": "Onaylandıktan <sonra seçili kontrol panellerinin atamaları kaldırılacak ve kullanıcı grubu tarafından erişilemez hale gelecektir.", 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 "public-dashboard-title": "Kontrol paneli açık hale getirildi", 436 "public-dashboard-title": "Kontrol paneli açık hale getirildi",
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", 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,7 +508,7 @@
508 "manage-states": "Kontrol paneli durumlarını yönet", 508 "manage-states": "Kontrol paneli durumlarını yönet",
509 "states": "Kontrol paneli durumları", 509 "states": "Kontrol paneli durumları",
510 "search-states": "Kontrol paneli durumu ara", 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 "edit-state": "Kontrol paneli durumu düzenle", 512 "edit-state": "Kontrol paneli durumu düzenle",
513 "delete-state": "Kontrol paneli durumunu sil", 513 "delete-state": "Kontrol paneli durumunu sil",
514 "add-state": "Kontrol paneli durumu ekle", 514 "add-state": "Kontrol paneli durumu ekle",
@@ -541,11 +541,11 @@ @@ -541,11 +541,11 @@
541 "alarm": "Alarm alanları", 541 "alarm": "Alarm alanları",
542 "timeseries-required": "Zaman serisi öğesi gerekli.", 542 "timeseries-required": "Zaman serisi öğesi gerekli.",
543 "timeseries-or-attributes-required": "Zaman serisi/öznitelikler öğesi gerekli.", 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 "alarm-fields-required": "Alarm alanları gerekli.", 545 "alarm-fields-required": "Alarm alanları gerekli.",
546 "function-types": "Fonksiyon türleri", 546 "function-types": "Fonksiyon türleri",
547 "function-types-required": "Fonksiyon türleri gerekli.", 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 "datasource": { 550 "datasource": {
551 "type": "Veri kaynağı türü", 551 "type": "Veri kaynağı türü",
@@ -597,11 +597,11 @@ @@ -597,11 +597,11 @@
597 "manage-credentials": "Kimlik bilgilerini yönet", 597 "manage-credentials": "Kimlik bilgilerini yönet",
598 "delete": "Aygıt sil", 598 "delete": "Aygıt sil",
599 "assign-devices": "Aygıt ata", 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 "delete-devices": "Aygıtları sil", 601 "delete-devices": "Aygıtları sil",
602 "unassign-from-customer": "Kullanıcı Grubundan atamayı kaldır", 602 "unassign-from-customer": "Kullanıcı Grubundan atamayı kaldır",
603 "unassign-devices": "Aygıtlardan atamayı kaldır", 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 "assign-new-device": "Yeni aygıt ata", 605 "assign-new-device": "Yeni aygıt ata",
606 "make-public-device-title": "'{{deviceName}}' isimli aygıtı açık hale getirmek istediğinizden emin misiniz?", 606 "make-public-device-title": "'{{deviceName}}' isimli aygıtı açık hale getirmek istediğinizden emin misiniz?",
607 "make-public-device-text": "Onaylandıktan sonra aygıt ve verileri açık hale getirilecek ve diğerleri tarafından erişilebilir olacak.", 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,13 +610,13 @@
610 "view-credentials": "Kimlik bilgilerini görüntüle", 610 "view-credentials": "Kimlik bilgilerini görüntüle",
611 "delete-device-title": "'{{deviceName}}' isimli aygıtı silmek istediğinize emin misiniz?", 611 "delete-device-title": "'{{deviceName}}' isimli aygıtı silmek istediğinize emin misiniz?",
612 "delete-device-text": "UYARI: Onaylandıktan sonra aygıt ve ilişkili verileri geri yüklenemez şekilde silinecek.", 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 "delete-devices-text": "UYARI: Onaylandıktan sonra tüm seçili aygıtlar ve ilişkili verileri geri yüklenemez şekilde silinecek.", 615 "delete-devices-text": "UYARI: Onaylandıktan sonra tüm seçili aygıtlar ve ilişkili verileri geri yüklenemez şekilde silinecek.",
616 "unassign-device-title": "'{{deviceName}}' isimli aygıtın atamasını kaldırmak istediğinize emin misiniz?", 616 "unassign-device-title": "'{{deviceName}}' isimli aygıtın atamasını kaldırmak istediğinize emin misiniz?",
617 "unassign-device-text": "Onaylandıktan sonra aygıtın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacak.", 617 "unassign-device-text": "Onaylandıktan sonra aygıtın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacak.",
618 "unassign-device": "Aygıt atamasını kaldır", 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 "unassign-devices-text": "Onaylandıktan sonra seçili aygıtların atamaları kaldırılacak ve kullanıcı grubu tarafından erişilemez olacak.", 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 "device-credentials": "Aygıt Kimlik Bilgileri", 621 "device-credentials": "Aygıt Kimlik Bilgileri",
622 "credentials-type": "Kimlik Bilgi Türü", 622 "credentials-type": "Kimlik Bilgi Türü",
@@ -702,55 +702,55 @@ @@ -702,55 +702,55 @@
702 "type-required": "Öğe türü gerekli.", 702 "type-required": "Öğe türü gerekli.",
703 "type-device": "Aygıt", 703 "type-device": "Aygıt",
704 "type-devices": "Aygıtlar", 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 "device-name-starts-with": "İsimleri '{{prefix}}' ile başlayan aygıtlar", 706 "device-name-starts-with": "İsimleri '{{prefix}}' ile başlayan aygıtlar",
707 "type-asset": "Varlık", 707 "type-asset": "Varlık",
708 "type-assets": "Varlıklar", 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 "asset-name-starts-with": "İsmi '{{prefix}}' ile başlayan varlıklar", 710 "asset-name-starts-with": "İsmi '{{prefix}}' ile başlayan varlıklar",
711 "type-entity-view": "Varlık Görünümü", 711 "type-entity-view": "Varlık Görünümü",
712 "type-entity-views": "Varlık Görünümleri", 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 "entity-view-name-starts-with": "Adı {{önek}} ile başlayan varlık görünümleri", 714 "entity-view-name-starts-with": "Adı {{önek}} ile başlayan varlık görünümleri",
715 "type-rule": "Kural", 715 "type-rule": "Kural",
716 "type-rules": "Kurallar", 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 "rule-name-starts-with": "İsmi '{{prefix}}' ile başlayan kurallar", 718 "rule-name-starts-with": "İsmi '{{prefix}}' ile başlayan kurallar",
719 "type-plugin": "Eklenti", 719 "type-plugin": "Eklenti",
720 "type-plugins": "Eklentiler", 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 "plugin-name-starts-with": "İsmi '{{prefix}}' ile başlayan eklentiler", 722 "plugin-name-starts-with": "İsmi '{{prefix}}' ile başlayan eklentiler",
723 "type-tenant": "Tenant", 723 "type-tenant": "Tenant",
724 "type-tenants": "Tenantlar", 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 "tenant-name-starts-with": "İsmi '{{prefix}}' ile başlayan tenantlar", 726 "tenant-name-starts-with": "İsmi '{{prefix}}' ile başlayan tenantlar",
727 "type-customer": "Kullanıcı Grubu", 727 "type-customer": "Kullanıcı Grubu",
728 "type-customers": "Kullanıcı Grupları", 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 "customer-name-starts-with": "İsmi '{{prefix}}' ile başlayan Kullanıcı Grupları", 730 "customer-name-starts-with": "İsmi '{{prefix}}' ile başlayan Kullanıcı Grupları",
731 "type-user": "Kullanıcı", 731 "type-user": "Kullanıcı",
732 "type-users": "Kullanıcılar", 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 "user-name-starts-with": "İsmi '{{prefix}}' ile başlayan kullanıcılar", 734 "user-name-starts-with": "İsmi '{{prefix}}' ile başlayan kullanıcılar",
735 "type-dashboard": "Kontrol paneli", 735 "type-dashboard": "Kontrol paneli",
736 "type-dashboards": "Kontrol panelleri", 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 "dashboard-name-starts-with": "İsmi '{{prefix}}' ile başlayan kontrol panelleri", 738 "dashboard-name-starts-with": "İsmi '{{prefix}}' ile başlayan kontrol panelleri",
739 "type-alarm": "Alarm", 739 "type-alarm": "Alarm",
740 "type-alarms": "Alarmlar", 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 "alarm-name-starts-with": "İsmi '{{prefix}}' ile başlayan alarmlar", 742 "alarm-name-starts-with": "İsmi '{{prefix}}' ile başlayan alarmlar",
743 "type-rulechain": "Kural zinciri", 743 "type-rulechain": "Kural zinciri",
744 "type-rulechains": "Kural zincirleri", 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 "rulechain-name-starts-with": "İsimleri {{prefix}} ile başlayan kural zincirleri", 746 "rulechain-name-starts-with": "İsimleri {{prefix}} ile başlayan kural zincirleri",
747 "type-rulenode": "Kural düğümü", 747 "type-rulenode": "Kural düğümü",
748 "type-rulenodes": "Kural düğümleri", 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 "rulenode-name-starts-with": "İsimleri '{{prefix}} ile başlayan kural düğümleri", 750 "rulenode-name-starts-with": "İsimleri '{{prefix}} ile başlayan kural düğümleri",
751 "type-current-customer": "Mevcut Müşteri", 751 "type-current-customer": "Mevcut Müşteri",
752 "search": "Öğeleri ara", 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 "entity-name": "Öğe adı", 754 "entity-name": "Öğe adı",
755 "details": "Öğe detayları", 755 "details": "Öğe detayları",
756 "no-entities-prompt": "Hiçbir öğe bulunamadı", 756 "no-entities-prompt": "Hiçbir öğe bulunamadı",
@@ -792,21 +792,21 @@ @@ -792,21 +792,21 @@
792 "add-entity-view-text": "Yeni varlık görünümü ekle", 792 "add-entity-view-text": "Yeni varlık görünümü ekle",
793 "delete": "Varlık görünümünü sil", 793 "delete": "Varlık görünümünü sil",
794 "assign-entity-views": "Varlık görünümleri atama", 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 "delete-entity-views": "Varlık görünümlerini sil", 796 "delete-entity-views": "Varlık görünümlerini sil",
797 "unassign-from-customer": "Müşteriden atama", 797 "unassign-from-customer": "Müşteriden atama",
798 "unassign-entity-views": "Varlık görünümlerini atama", 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 "assign-new-entity-view": "Yeni varlık görünümü atama", 800 "assign-new-entity-view": "Yeni varlık görünümü atama",
801 "delete-entity-view-title": "Varlık görünümünü silmek istediğinizden emin misiniz?, {{entityViewName}} '? ", 801 "delete-entity-view-title": "Varlık görünümünü silmek istediğinizden emin misiniz?, {{entityViewName}} '? ",
802 "delete-entity-view-text": "Dikkatli olun, onaylandıktan sonra varlık görünümü ve ilgili tüm veriler kurtarılamayacak.", 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 "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.", 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 "unassign-entity-view-title": "Varlık görünümünün atamasını kaldırmak istediğinizden emin misiniz? {{entityViewName}} '? ", 806 "unassign-entity-view-title": "Varlık görünümünün atamasını kaldırmak istediğinizden emin misiniz? {{entityViewName}} '? ",
807 "unassign-entity-view-text": "Onaydan sonra varlık görünümü atanmamış olacak ve müşteri tarafından erişilemeyecektir.", 807 "unassign-entity-view-text": "Onaydan sonra varlık görünümü atanmamış olacak ve müşteri tarafından erişilemeyecektir.",
808 "unassign-entity-view": "Varlık görünümünün atamasını kaldır", 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 "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.", 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 "entity-view-type": "Varlık Görünümü türü", 811 "entity-view-type": "Varlık Görünümü türü",
812 "entity-view-type-required": "Varlık Görünümü türü gerekli.", 812 "entity-view-type-required": "Varlık Görünümü türü gerekli.",
@@ -861,7 +861,7 @@ @@ -861,7 +861,7 @@
861 }, 861 },
862 "extension": { 862 "extension": {
863 "extensions": "Uzantılar", 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 "type": "Tür", 865 "type": "Tür",
866 "key": "Anahtar", 866 "key": "Anahtar",
867 "value": "Değer", 867 "value": "Değer",
@@ -875,7 +875,7 @@ @@ -875,7 +875,7 @@
875 "edit": "Uzantıyı düzenle", 875 "edit": "Uzantıyı düzenle",
876 "delete-extension-title": "{{ExtensionId}} uzantısını silmek istediğinizden emin misiniz? ", 876 "delete-extension-title": "{{ExtensionId}} uzantısını silmek istediğinizden emin misiniz? ",
877 "delete-extension-text": "Dikkatli olun, onaylamadan sonra uzantı ve ilgili tüm veriler kurtarılamaz.", 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 "delete-extensions-text": "Dikkatli olun, onaylandıktan sonra tüm seçilen uzantılar kaldırılacak.", 879 "delete-extensions-text": "Dikkatli olun, onaylandıktan sonra tüm seçilen uzantılar kaldırılacak.",
880 "converters": "Dönüştürücü", 880 "converters": "Dönüştürücü",
881 "converter-id": "Dönüştürücü kimliği", 881 "converter-id": "Dönüştürücü kimliği",
@@ -1026,8 +1026,8 @@ @@ -1026,8 +1026,8 @@
1026 "grid": { 1026 "grid": {
1027 "delete-item-title": "Bu öğeyi silmek istediğinizden emin misiniz?", 1027 "delete-item-title": "Bu öğeyi silmek istediğinizden emin misiniz?",
1028 "delete-item-text": "UYARI: Onayladıktan sonra bu öğe ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.", 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 "delete-items-text": "UYARI: Onayladıktan sonra tüm seçili öğeler ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.", 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 "add-item-text": "Yeni öğe ekle", 1032 "add-item-text": "Yeni öğe ekle",
1033 "no-items-text": "Hiç bir öğe bulunamadı", 1033 "no-items-text": "Hiç bir öğe bulunamadı",
@@ -1128,7 +1128,7 @@ @@ -1128,7 +1128,7 @@
1128 }, 1128 },
1129 "from-relations": "Giden ilişkiler", 1129 "from-relations": "Giden ilişkiler",
1130 "to-relations": "Gelen ilişkiler", 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 "type": "Tür", 1132 "type": "Tür",
1133 "to-entity-type": "Hedef Öğe Türü", 1133 "to-entity-type": "Hedef Öğe Türü",
1134 "to-entity-name": "Hedef Öğe Adı", 1134 "to-entity-name": "Hedef Öğe Adı",
@@ -1144,11 +1144,11 @@ @@ -1144,11 +1144,11 @@
1144 "edit": "İlişki düzenle", 1144 "edit": "İlişki düzenle",
1145 "delete-to-relation-title": "'{{entityName}}' öğesine olan ilişkiyi silmek istediğinize emin misiniz?", 1145 "delete-to-relation-title": "'{{entityName}}' öğesine olan ilişkiyi silmek istediğinize emin misiniz?",
1146 "delete-to-relation-text": "UYARI: Onaylandıktan sonra '{{entityName}}' öğesinin şimdiki öğeyle olan ilişkisi sona erecektir.", 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 "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.", 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 "delete-from-relation-title": "'{{entityName}}' öğesinden ilişkiyi silmek istediğinize emin misiniz?", 1149 "delete-from-relation-title": "'{{entityName}}' öğesinden ilişkiyi silmek istediğinize emin misiniz?",
1150 "delete-from-relation-text": "UYARI: Onaylandıktan sonra şimdiki öğenin '{{entityName}}' öğesiyle ilişkisi sonlandırılacaktır.", 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 "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.", 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 "remove-relation-filter": "İlişki filtresini kaldır", 1153 "remove-relation-filter": "İlişki filtresini kaldır",
1154 "add-relation-filter": "İlişkisi ekle", 1154 "add-relation-filter": "İlişkisi ekle",
@@ -1171,8 +1171,8 @@ @@ -1171,8 +1171,8 @@
1171 "set-root-rulechain-text": "Onaydan sonra kural zinciri kökleşecek ve gelen tüm iletilerle ilgilenecek.", 1171 "set-root-rulechain-text": "Onaydan sonra kural zinciri kökleşecek ve gelen tüm iletilerle ilgilenecek.",
1172 "delete-rulechain-title": "'{{ruleName}}' isimli kuralı silmek istediğinize emin misiniz?", 1172 "delete-rulechain-title": "'{{ruleName}}' isimli kuralı silmek istediğinize emin misiniz?",
1173 "delete-rulechain-text": "UYARI: Onaylandıktan sonra kural ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.", 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 "delete-rulechains-text": "UYARI: Onaylandıktan sonra seçili tüm kurallar ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.", 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 "add-rulechain-text": "Yeni kural ekle", 1177 "add-rulechain-text": "Yeni kural ekle",
1178 "no-rulechains-text":"Hiçbir kural bulunamadı", 1178 "no-rulechains-text":"Hiçbir kural bulunamadı",
@@ -1270,8 +1270,8 @@ @@ -1270,8 +1270,8 @@
1270 "tenant-details": "Tenant detayları", 1270 "tenant-details": "Tenant detayları",
1271 "delete-tenant-title": "'{{tenantTitle}}' isimli tenantı silmek istediğinize emin misiniz?", 1271 "delete-tenant-title": "'{{tenantTitle}}' isimli tenantı silmek istediğinize emin misiniz?",
1272 "delete-tenant-text": "UYARI: Onaylandıktan sonra tenant ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.", 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 "delete-tenants-text": "UYARI: Onaylandıktan sonra seçili tüm tenantlar ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir", 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 "title": "Başlık", 1276 "title": "Başlık",
1277 "title-required": "Başlık gerekli.", 1277 "title-required": "Başlık gerekli.",
@@ -1325,8 +1325,8 @@ @@ -1325,8 +1325,8 @@
1325 "user-details": "Kullanıcı detayları", 1325 "user-details": "Kullanıcı detayları",
1326 "delete-user-title": "'{{userEmail}}' kullanıcısını silmek istediğinize emin misiniz?", 1326 "delete-user-title": "'{{userEmail}}' kullanıcısını silmek istediğinize emin misiniz?",
1327 "delete-user-text": "UYARI: Onaylandıktan sonra kullanıcı ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.", 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 "delete-users-text": "UYARI: Onaylandıktan sonra kullanıcı ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.", 1330 "delete-users-text": "UYARI: Onaylandıktan sonra kullanıcı ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
1331 "activation-email-sent-message": "Etkinleştirme e-postası başarılı bir şekilde gönderildi!", 1331 "activation-email-sent-message": "Etkinleştirme e-postası başarılı bir şekilde gönderildi!",
1332 "resend-activation": "Etkinleştirme e-postasını yeniden gönder", 1332 "resend-activation": "Etkinleştirme e-postasını yeniden gönder",
@@ -1445,8 +1445,8 @@ @@ -1445,8 +1445,8 @@
1445 "widgets-bundle-details": "Gösterge demeti detayları", 1445 "widgets-bundle-details": "Gösterge demeti detayları",
1446 "delete-widgets-bundle-title": "'{{widgetsBundleTitle}}' isimli gösterge demetini silmek istediğinize emin misiniz?", 1446 "delete-widgets-bundle-title": "'{{widgetsBundleTitle}}' isimli gösterge demetini silmek istediğinize emin misiniz?",
1447 "delete-widgets-bundle-text": "UYARI: Onaylandıktan sonra gösterge demeti ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.", 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 "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.", 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 "no-widgets-bundles-matching": "'{{widgetsBundle}}' ile eşleşen gösterge demeti bulunamadı.", 1451 "no-widgets-bundles-matching": "'{{widgetsBundle}}' ile eşleşen gösterge demeti bulunamadı.",
1452 "widgets-bundle-required": "Gösterge demeti gerekli.", 1452 "widgets-bundle-required": "Gösterge demeti gerekli.",
@@ -1482,7 +1482,7 @@ @@ -1482,7 +1482,7 @@
1482 "use-dashboard-timewindow": "Kontrol paneli zaman aralığı kullan", 1482 "use-dashboard-timewindow": "Kontrol paneli zaman aralığı kullan",
1483 "display-legend": "Lejant göster", 1483 "display-legend": "Lejant göster",
1484 "datasources": "Veri kaynakları", 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 "datasource-type": "Tür", 1486 "datasource-type": "Tür",
1487 "datasource-parameters": "Parametreler", 1487 "datasource-parameters": "Parametreler",
1488 "remove-datasource": "Veri kaynağını kaldır", 1488 "remove-datasource": "Veri kaynağını kaldır",
@@ -1539,7 +1539,7 @@ @@ -1539,7 +1539,7 @@
1539 "ru_RU": "Rusça", 1539 "ru_RU": "Rusça",
1540 "es_ES": "İspanyol", 1540 "es_ES": "İspanyol",
1541 "ja_JA": "Japonca", 1541 "ja_JA": "Japonca",
1542 - "TR": "Türkçe" 1542 + "tr_TR": "Türkçe"
1543 } 1543 }
1544 } 1544 }
1545 } 1545 }
@@ -1445,7 +1445,7 @@ @@ -1445,7 +1445,7 @@
1445 "es_ES": "西班牙语", 1445 "es_ES": "西班牙语",
1446 "it_IT": "意大利", 1446 "it_IT": "意大利",
1447 "ja_JA": "日本", 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,7 +121,7 @@ export default function NodeScriptTest($q, $mdDialog, $document, ruleChainServic
121 onShowingCallback: onShowingCallback 121 onShowingCallback: onShowingCallback
122 }, 122 },
123 fullscreen: true, 123 fullscreen: true,
124 - skipHide: true, 124 + multiple: true,
125 targetEvent: $event, 125 targetEvent: $event,
126 onComplete: () => { 126 onComplete: () => {
127 onShowingCallback.onShowed(); 127 onShowingCallback.onShowed();
@@ -100,7 +100,7 @@ export default function AddUserController($scope, $mdDialog, $state, $stateParam @@ -100,7 +100,7 @@ export default function AddUserController($scope, $mdDialog, $state, $stateParam
100 }, 100 },
101 parent: angular.element($document[0].body), 101 parent: angular.element($document[0].body),
102 fullscreen: true, 102 fullscreen: true,
103 - skipHide: true, 103 + multiple: true,
104 targetEvent: $event 104 targetEvent: $event
105 }).then(function () { 105 }).then(function () {
106 deferred.resolve(); 106 deferred.resolve();
@@ -186,7 +186,7 @@ export default function UserController(userService, toast, $scope, $mdDialog, $d @@ -186,7 +186,7 @@ export default function UserController(userService, toast, $scope, $mdDialog, $d
186 }, 186 },
187 parent: angular.element($document[0].body), 187 parent: angular.element($document[0].body),
188 fullscreen: true, 188 fullscreen: true,
189 - skipHide: true, 189 + multiple: true,
190 targetEvent: event 190 targetEvent: event
191 }); 191 });
192 } 192 }
@@ -402,7 +402,7 @@ function AlarmsTableWidgetController($element, $scope, $filter, $mdMedia, $mdDia @@ -402,7 +402,7 @@ function AlarmsTableWidgetController($element, $scope, $filter, $mdMedia, $mdDia
402 parent: angular.element($document[0].body), 402 parent: angular.element($document[0].body),
403 targetEvent: $event, 403 targetEvent: $event,
404 fullscreen: true, 404 fullscreen: true,
405 - skipHide: true, 405 + multiple: true,
406 onShowing: function(scope, element) { 406 onShowing: function(scope, element) {
407 onShowingCallback.onShowing(scope, element); 407 onShowingCallback.onShowing(scope, element);
408 } 408 }
@@ -209,8 +209,8 @@ export default class TbCanvasDigitalGauge { @@ -209,8 +209,8 @@ export default class TbCanvasDigitalGauge {
209 } 209 }
210 var value = tvPair[1]; 210 var value = tvPair[1];
211 if(value !== this.gauge.value) { 211 if(value !== this.gauge.value) {
212 - this.gauge.value = value;  
213 this.gauge._value = value; 212 this.gauge._value = value;
  213 + this.gauge.value = value;
214 } else if (this.localSettings.showTimestamp && this.gauge.timestamp != timestamp) { 214 } else if (this.localSettings.showTimestamp && this.gauge.timestamp != timestamp) {
215 this.gauge.timestamp = timestamp; 215 this.gauge.timestamp = timestamp;
216 } 216 }