Browse Source

Fix Turkish localization. Update angular material version to 1.1.9. Fix 0 digital gauges value when no animation.

pull/1209/head
Igor Kulikov 8 years ago
parent
commit
fd251f0d9a
  1. 2
      application/src/main/data/json/system/widget_bundles/cards.json
  2. 4
      ui/package.json
  3. 2
      ui/src/app/alarm/alarm-row.directive.js
  4. 4
      ui/src/app/app.js
  5. 2
      ui/src/app/audit/audit-log-row.directive.js
  6. 195
      ui/src/app/common/thirdparty-fix.js
  7. 4
      ui/src/app/components/datasource-entity.directive.js
  8. 2
      ui/src/app/components/datasource-entity.tpl.html
  9. 4
      ui/src/app/components/datasource-func.directive.js
  10. 2
      ui/src/app/components/json-form.directive.js
  11. 2
      ui/src/app/components/material-icon-select.directive.js
  12. 4
      ui/src/app/components/widget/action/manage-widget-actions.directive.js
  13. 2
      ui/src/app/dashboard/add-widget.controller.js
  14. 12
      ui/src/app/dashboard/dashboard.controller.js
  15. 2
      ui/src/app/dashboard/edit-widget.directive.js
  16. 2
      ui/src/app/dashboard/layouts/manage-dashboard-layouts.controller.js
  17. 4
      ui/src/app/dashboard/states/manage-dashboard-states.controller.js
  18. 4
      ui/src/app/entity/alias/entity-aliases.controller.js
  19. 4
      ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js
  20. 2
      ui/src/app/entity/relation/relation-table.directive.js
  21. 2
      ui/src/app/event/event-row.directive.js
  22. 2
      ui/src/app/extension/extension-table.directive.js
  23. 4
      ui/src/app/import-export/import-export.service.js
  24. 2
      ui/src/app/layout/index.js
  25. 2
      ui/src/app/locale/locale.constant-en_US.json
  26. 2
      ui/src/app/locale/locale.constant-es_ES.json
  27. 2
      ui/src/app/locale/locale.constant-fr_FR.json
  28. 2
      ui/src/app/locale/locale.constant-it_IT.json
  29. 2
      ui/src/app/locale/locale.constant-ja_JA.json
  30. 2
      ui/src/app/locale/locale.constant-ko_KR.json
  31. 2
      ui/src/app/locale/locale.constant-ru_RU.json
  32. 128
      ui/src/app/locale/locale.constant-tr_TR.json
  33. 2
      ui/src/app/locale/locale.constant-zh_CN.json
  34. 2
      ui/src/app/rulechain/script/node-script-test.service.js
  35. 2
      ui/src/app/user/add-user.controller.js
  36. 2
      ui/src/app/user/user.controller.js
  37. 2
      ui/src/app/widget/lib/alarms-table-widget.js
  38. 2
      ui/src/app/widget/lib/canvas-digital-gauge.js

2
application/src/main/data/json/system/widget_bundles/cards.json

@ -15,7 +15,7 @@
"resources": [],
"templateHtml": "",
"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}",
"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",
"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",
"settingsSchema": "{}",
"dataKeySettingsSchema": "{}\n",
"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\"}"

4
ui/package.json

@ -26,7 +26,7 @@
"angular-gridster": "^0.13.14",
"angular-hotkeys": "^1.7.0",
"angular-jwt": "^0.1.6",
"angular-material": "1.1.1",
"angular-material": "1.1.9",
"angular-material-data-table": "^0.10.9",
"angular-material-icons": "^0.7.1",
"angular-material-expansion-panel": "^0.7.2",
@ -63,7 +63,7 @@
"leaflet-providers": "^1.1.17",
"material-ui": "^0.16.1",
"material-ui-number-input": "^5.0.16",
"md-color-picker": "^0.2.6",
"md-color-picker": "0.2.6",
"mdPickers": "git://github.com/alenaksu/mdPickers.git#0.7.5",
"moment": "^2.15.0",
"ngclipboard": "^1.1.1",

2
ui/src/app/alarm/alarm-row.directive.js

@ -50,7 +50,7 @@ export default function AlarmRowDirective($compile, $templateCache, types, $mdDi
parent: angular.element($document[0].body),
targetEvent: $event,
fullscreen: true,
skipHide: true,
multiple: true,
onShowing: function(scope, element) {
onShowingCallback.onShowing(scope, element);
}

4
ui/src/app/app.js

@ -31,6 +31,7 @@ import 'angular-translate-interpolation-messageformat';
import 'md-color-picker';
import mdPickers from 'mdPickers';
import ngSanitize from 'angular-sanitize';
import FBAngular from 'angular-fullscreen';
import vAccordion from 'v-accordion';
import ngAnimate from 'angular-animate';
import 'angular-websocket';
@ -65,6 +66,7 @@ import 'angular-material-expansion-panel/dist/md-expansion-panel.min.css';
import 'ngFlowchart/dist/flowchart.css';
import '../scss/main.scss';
import thingsboardThirdpartyFix from './common/thirdparty-fix';
import thingsboardTranslateHandler from './locale/translate-handler';
import thingsboardLogin from './login';
import thingsboardDialogs from './components/datakey-config-dialog.controller';
@ -105,6 +107,7 @@ angular.module('thingsboard', [
'mdColorPicker',
mdPickers,
ngSanitize,
FBAngular.name,
vAccordion,
ngAnimate,
'ngWebSocket',
@ -118,6 +121,7 @@ angular.module('thingsboard', [
react.name,
'flow',
'flowchart',
thingsboardThirdpartyFix,
thingsboardTranslateHandler,
thingsboardLogin,
thingsboardDialogs,

2
ui/src/app/audit/audit-log-row.directive.js

@ -48,7 +48,7 @@ export default function AuditLogRowDirective($compile, $templateCache, types, $m
parent: angular.element($document[0].body),
targetEvent: $event,
fullscreen: true,
skipHide: true,
multiple: true,
onShowing: function(scope, element) {
onShowingCallback.onShowing(scope, element);
}

195
ui/src/app/common/thirdparty-fix.js

@ -0,0 +1,195 @@
/*
* Copyright © 2016-2018 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import tinycolor from 'tinycolor2';
export default angular.module('thingsboard.thirdpartyFix', [])
.factory('Fullscreen', Fullscreen)
.factory('$mdColorPicker', mdColorPicker)
.name;
/*@ngInject*/
function Fullscreen($document, $rootScope) {
/* eslint-disable */
var document = $document[0];
// ensure ALLOW_KEYBOARD_INPUT is available and enabled
var isKeyboardAvailbleOnFullScreen = (typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element) && Element.ALLOW_KEYBOARD_INPUT;
var emitter = $rootScope.$new();
// listen event on document instead of element to avoid firefox limitation
// see https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode
$document.on('fullscreenchange webkitfullscreenchange mozfullscreenchange MSFullscreenChange', function(){
emitter.$emit('FBFullscreen.change', serviceInstance.isEnabled());
});
var serviceInstance = {
$on: angular.bind(emitter, emitter.$on),
all: function() {
serviceInstance.enable( document.documentElement );
},
enable: function(element) {
if(element.requestFullScreen) {
element.requestFullScreen();
} else if(element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if(element.webkitRequestFullscreen) {
// Safari temporary fix
//if (/Version\/[\d]{1,2}(\.[\d]{1,2}){1}(\.(\d){1,2}){0,1} Safari/.test(navigator.userAgent)) {
if (/Safari/.test(navigator.userAgent)) {
element.webkitRequestFullscreen();
} else {
element.webkitRequestFullscreen(isKeyboardAvailbleOnFullScreen);
}
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
},
cancel: function() {
if(document.cancelFullScreen) {
document.cancelFullScreen();
} else if(document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if(document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
},
isEnabled: function(){
var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
return fullscreenElement ? true : false;
},
toggleAll: function(){
serviceInstance.isEnabled() ? serviceInstance.cancel() : serviceInstance.all();
},
isSupported: function(){
var docElm = document.documentElement;
var requestFullscreen = docElm.requestFullScreen || docElm.mozRequestFullScreen || docElm.webkitRequestFullscreen || docElm.msRequestFullscreen;
return requestFullscreen ? true : false;
}
};
/* eslint-enable */
return serviceInstance;
}
/*@ngInject*/
function mdColorPicker($q, $mdDialog, mdColorPickerHistory) {
var dialog;
/* eslint-disable angular/definedundefined */
return {
show: function (options)
{
if ( options === undefined ) {
options = {};
}
//console.log( 'DIALOG OPTIONS', options );
// Defaults
// Dialog Properties
options.hasBackdrop = options.hasBackdrop === undefined ? true : options.hasBackdrop;
options.clickOutsideToClose = options.clickOutsideToClose === undefined ? true : options.clickOutsideToClose;
options.defaultValue = options.defaultValue === undefined ? '#FFFFFF' : options.defaultValue;
options.focusOnOpen = options.focusOnOpen === undefined ? false : options.focusOnOpen;
options.preserveScope = options.preserveScope === undefined ? true : options.preserveScope;
if (options.skipHide !== undefined) {
options.multiple = options.skipHide;
}
if (options.multiple === undefined) {
options.multiple = true;
}
// mdColorPicker Properties
options.mdColorAlphaChannel = options.mdColorAlphaChannel === undefined ? false : options.mdColorAlphaChannel;
options.mdColorSpectrum = options.mdColorSpectrum === undefined ? true : options.mdColorSpectrum;
options.mdColorSliders = options.mdColorSliders === undefined ? true : options.mdColorSliders;
options.mdColorGenericPalette = options.mdColorGenericPalette === undefined ? true : options.mdColorGenericPalette;
options.mdColorMaterialPalette = options.mdColorMaterialPalette === undefined ? true : options.mdColorMaterialPalette;
options.mdColorHistory = options.mdColorHistory === undefined ? true : options.mdColorHistory;
dialog = $mdDialog.show({
templateUrl: 'mdColorPickerDialog.tpl.html',
hasBackdrop: options.hasBackdrop,
clickOutsideToClose: options.clickOutsideToClose,
controller: ['$scope', 'options', function( $scope, options ) {
//console.log( "DIALOG CONTROLLER OPEN", Date.now() - dateClick );
$scope.close = function close()
{
$mdDialog.cancel();
};
$scope.ok = function ok()
{
$mdDialog.hide( $scope.value );
};
$scope.hide = $scope.ok;
$scope.value = options.value;
$scope.default = options.defaultValue;
$scope.random = options.random;
$scope.mdColorAlphaChannel = options.mdColorAlphaChannel;
$scope.mdColorSpectrum = options.mdColorSpectrum;
$scope.mdColorSliders = options.mdColorSliders;
$scope.mdColorGenericPalette = options.mdColorGenericPalette;
$scope.mdColorMaterialPalette = options.mdColorMaterialPalette;
$scope.mdColorHistory = options.mdColorHistory;
$scope.mdColorDefaultTab = options.mdColorDefaultTab;
}],
locals: {
options: options,
},
preserveScope: options.preserveScope,
multiple: options.multiple,
targetEvent: options.$event,
focusOnOpen: options.focusOnOpen,
autoWrap: false,
onShowing: function() {
// console.log( "DIALOG OPEN START", Date.now() - dateClick );
},
onComplete: function() {
// console.log( "DIALOG OPEN COMPLETE", Date.now() - dateClick );
}
});
dialog.then(function (value) {
mdColorPickerHistory.add(new tinycolor(value));
}, function () { });
return dialog;
},
hide: function() {
return dialog.hide();
},
cancel: function() {
return dialog.cancel();
}
};
/* eslint-enable angular/definedundefined */
}

4
ui/src/app/components/datasource-entity.directive.js

@ -186,7 +186,7 @@ function DatasourceEntity($compile, $templateCache, $q, $mdDialog, $window, $doc
random: tinycolor.random(),
clickOutsideToClose: false,
hasBackdrop: false,
skipHide: true,
multiple: true,
preserveScope: false,
mdColorAlphaChannel: true,
@ -220,7 +220,7 @@ function DatasourceEntity($compile, $templateCache, $q, $mdDialog, $window, $doc
parent: angular.element($document[0].body),
fullscreen: true,
targetEvent: event,
skipHide: true,
multiple: true,
onComplete: function () {
var w = angular.element($window);
w.triggerHandler('resize');

2
ui/src/app/components/datasource-entity.tpl.html

@ -26,7 +26,6 @@
<section flex layout='column' layout-align="center" style="padding-left: 4px;">
<md-chips flex ng-if="widgetType != types.widgetType.alarm.value"
id="timeseries_datakey_chips"
ng-required="true"
ng-model="timeseriesDataKeys" md-autocomplete-snap
md-transform-chip="transformTimeseriesDataKeyChip($chip)"
md-require-match="false">
@ -78,7 +77,6 @@
</md-chips>
<md-chips flex ng-if="widgetType === types.widgetType.latest.value"
id="attribute_datakey_chips"
ng-required="true"
ng-model="attributeDataKeys" md-autocomplete-snap
md-transform-chip="transformAttributeDataKeyChip($chip)"
md-require-match="false">

4
ui/src/app/components/datasource-func.directive.js

@ -139,7 +139,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document,
random: tinycolor.random(),
clickOutsideToClose: false,
hasBackdrop: false,
skipHide: true,
multiple: true,
preserveScope: false,
mdColorAlphaChannel: true,
@ -173,7 +173,7 @@ function DatasourceFunc($compile, $templateCache, $mdDialog, $window, $document,
parent: angular.element($document[0].body),
fullscreen: true,
targetEvent: event,
skipHide: true,
multiple: true,
onComplete: function () {
var w = angular.element($window);
w.triggerHandler('resize');

2
ui/src/app/components/json-form.directive.js

@ -96,7 +96,7 @@ function JsonForm($compile, $templateCache, $mdColorPicker) {
random: tinycolor.random(),
clickOutsideToClose: false,
hasBackdrop: false,
skipHide: true,
multiple: true,
preserveScope: false,
mdColorAlphaChannel: true,

2
ui/src/app/components/material-icon-select.directive.js

@ -67,7 +67,7 @@ function MaterialIconSelect($compile, $templateCache, $document, $mdDialog) {
templateUrl: materialIconsDialogTemplate,
parent: angular.element($document[0].body),
locals: {icon: scope.icon},
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (icon) {

4
ui/src/app/components/widget/action/manage-widget-actions.directive.js

@ -164,7 +164,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog,
.cancel($translate.instant('action.no'))
.ok($translate.instant('action.yes'));
confirm._options.skipHide = true;
confirm._options.multiple = true;
confirm._options.fullscreen = true;
$mdDialog.show(confirm).then(function () {
@ -212,7 +212,7 @@ function ManageWidgetActionsController($rootScope, $scope, $document, $mdDialog,
locals: {isAdd: isAdd, fetchDashboardStates: vm.fetchDashboardStates,
actionSources: availableActionSources, widgetActions: vm.widgetActions,
action: angular.copy(action)},
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (action) {

2
ui/src/app/dashboard/add-widget.controller.js

@ -166,7 +166,7 @@ export default function AddWidgetController($scope, widgetService, entityService
},
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: event
}).then(function (singleEntityAlias) {
vm.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias;

12
ui/src/app/dashboard/dashboard.controller.js

@ -463,7 +463,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
}
},
parent: angular.element($document[0].body),
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (entityAliases) {
@ -488,7 +488,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
gridSettings: gridSettings
},
parent: angular.element($document[0].body),
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (data) {
@ -510,7 +510,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
layouts: angular.copy(vm.dashboard.configuration.states[vm.dashboardCtx.state].layouts)
},
parent: angular.element($document[0].body),
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (layouts) {
@ -531,7 +531,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
states: states
},
parent: angular.element($document[0].body),
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (states) {
@ -873,7 +873,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
templateUrl: selectTargetLayoutTemplate,
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: $event
}).then(
function success(layoutId) {
@ -941,7 +941,7 @@ export default function DashboardController(types, utils, dashboardUtils, widget
},
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: event,
onComplete: function () {
var w = angular.element($window);

2
ui/src/app/dashboard/edit-widget.directive.js

@ -131,7 +131,7 @@ export default function EditWidgetDirective($compile, $templateCache, types, wid
},
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: event
}).then(function (singleEntityAlias) {
scope.dashboard.configuration.entityAliases[singleEntityAlias.id] = singleEntityAlias;

2
ui/src/app/dashboard/layouts/manage-dashboard-layouts.controller.js

@ -51,7 +51,7 @@ export default function ManageDashboardLayoutsController($scope, $mdDialog, $doc
gridSettings: gridSettings
},
parent: angular.element($document[0].body),
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (data) {

4
ui/src/app/dashboard/states/manage-dashboard-states.controller.js

@ -111,7 +111,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt
templateUrl: dashboardStateDialogTemplate,
parent: angular.element($document[0].body),
locals: {isAdd: isAdd, allStates: vm.allStates, state: angular.copy(state)},
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (state) {
@ -163,7 +163,7 @@ export default function ManageDashboardStatesController($scope, $mdDialog, $filt
.cancel($translate.instant('action.no'))
.ok($translate.instant('action.yes'));
confirm._options.skipHide = true;
confirm._options.multiple = true;
confirm._options.fullscreen = true;
$mdDialog.show(confirm).then(function () {

4
ui/src/app/entity/alias/entity-aliases.controller.js

@ -126,7 +126,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc
},
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: $event
}).then(function (alias) {
if (isAdd) {
@ -158,7 +158,7 @@ export default function EntityAliasesController(utils, entityService, toast, $sc
.ariaLabel($translate.instant('entity.unable-delete-entity-alias-title'))
.ok($translate.instant('action.close'))
.targetEvent($event);
alert._options.skipHide = true;
alert._options.multiple = true;
alert._options.fullscreen = true;
$mdDialog.show(alert);

4
ui/src/app/entity/attribute/add-widget-to-dashboard-dialog.controller.js

@ -53,7 +53,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog,
states: states
},
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: $event
}).then(
function success(stateId) {
@ -81,7 +81,7 @@ export default function AddWidgetToDashboardDialogController($scope, $mdDialog,
templateUrl: selectTargetLayoutTemplate,
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: $event
}).then(
function success(layoutId) {

2
ui/src/app/entity/relation/relation-table.directive.js

@ -160,7 +160,7 @@ function RelationTableController($scope, $q, $mdDialog, $document, $translate, $
showingCallback: onShowingCallback},
targetEvent: $event,
fullscreen: true,
skipHide: true,
multiple: true,
onShowing: function(scope, element) {
onShowingCallback.onShowing(scope, element);
}

2
ui/src/app/event/event-row.directive.js

@ -79,7 +79,7 @@ export default function EventRowDirective($compile, $templateCache, $mdDialog, $
parent: angular.element($document[0].body),
fullscreen: true,
targetEvent: $event,
skipHide: true,
multiple: true,
onShowing: function(scope, element) {
onShowingCallback.onShowing(scope, element);
}

2
ui/src/app/extension/extension-table.directive.js

@ -208,7 +208,7 @@ function ExtensionTableController($scope, $filter, $document, $translate, $timeo
bindToController: true,
targetEvent: $event,
fullscreen: true,
skipHide: true
multiple: true
}).then(function() {
reloadExtensions();
}, function () {

4
ui/src/app/import-export/import-export.service.js

@ -721,7 +721,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
}
},
parent: angular.element($document[0].body),
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (updatedEntityAliases) {
@ -796,7 +796,7 @@ export default function ImportExport($log, $translate, $q, $mdDialog, $document,
importFileLabel: importFileLabel
},
parent: angular.element($document[0].body),
skipHide: true,
multiple: true,
fullscreen: true,
targetEvent: $event
}).then(function (importData) {

2
ui/src/app/layout/index.js

@ -17,7 +17,6 @@ import './home.scss';
import uiRouter from 'angular-ui-router';
import ngSanitize from 'angular-sanitize';
import FBAngular from 'angular-fullscreen';
import 'angular-breadcrumb';
import thingsboardMenu from '../services/menu.service';
@ -63,7 +62,6 @@ import BreadcrumbIcon from './breadcrumb-icon.filter';
export default angular.module('thingsboard.home', [
uiRouter,
ngSanitize,
FBAngular.name,
'ncy-angular-breadcrumb',
thingsboardMenu,
thingsboardHomeLinks,

2
ui/src/app/locale/locale.constant-en_US.json

@ -1573,7 +1573,7 @@
"ru_RU": "Russian",
"es_ES": "Spanish",
"ja_JA": "Japanese",
"TR": "Turkish"
"tr_TR": "Turkish"
}
}
}

2
ui/src/app/locale/locale.constant-es_ES.json

@ -1552,7 +1552,7 @@
"ru_RU": "Ruso",
"es_ES": "Español",
"ja_JA": "Japonés",
"TR": "Turco"
"tr_TR": "Turco"
}
}
}

2
ui/src/app/locale/locale.constant-fr_FR.json

@ -1010,7 +1010,7 @@
"ko_KR": "Coréen",
"ru_RU": "Russe",
"zh_CN": "Chinois",
"TR": "Turc"
"tr_TR": "Turc"
}
},
"layout": {

2
ui/src/app/locale/locale.constant-it_IT.json

@ -1442,7 +1442,7 @@
"ru_RU": "Russo",
"es_ES": "Spagnolo",
"ja_JA": "Giapponese",
"TR": "Turco"
"tr_TR": "Turco"
}
}
}

2
ui/src/app/locale/locale.constant-ja_JA.json

@ -1458,7 +1458,7 @@
"ru_RU": "ロシア",
"es_ES": "スペイン語",
"ja_JA": "日本語",
"TR": "トルコ語"
"tr_TR": "トルコ語"
}
}
}

2
ui/src/app/locale/locale.constant-ko_KR.json

@ -1336,7 +1336,7 @@
"es_ES": "스페인어",
"it_IT": "이탈리아 사람",
"ja_JA": "일본어",
"TR": "터키어"
"tr_TR": "터키어"
}
}
}

2
ui/src/app/locale/locale.constant-ru_RU.json

@ -1361,7 +1361,7 @@
"it_IT": "Итальянский",
"ru_RU": "Русский",
"ja_JA": "Японский",
"TR": "Турецкий"
"tr_TR": "Турецкий"
}
}

128
ui/src/app/locale/locale.constant-TR.json → ui/src/app/locale/locale.constant-tr_TR.json

@ -126,15 +126,15 @@
"acknowledge": "Onayla",
"clear": "Temizle",
"search": "Alarm ara",
"selected-alarms": "{ count, select, 1 {1 alarm} other {# alarm} } seçildi",
"selected-alarms": "{ count, plural, 1 {1 alarm} other {# alarm} } seçildi",
"no-data": "Görüntülenecek veri bulunmuyor",
"polling-interval": "Alarm yoklama aralığı (saniye)",
"polling-interval-required": "Alarm yoklama aralığı gerekli.",
"min-polling-interval-message": "Alarm yoklama aralığı en az 1 saniye olmalıdır.",
"aknowledge-alarms-title": "{ count, select, 1 {1 alarmı} other {# alarmı} } onayla",
"aknowledge-alarms-text": "{ count, select, 1 {1 alarmı} other {# alarmı} } onaylamak istediğinize emin misiniz?",
"clear-alarms-title": "{ count, select, 1 {1 alarmı} other {# alarmı} } temizle",
"clear-alarms-text": "{ count, select, 1 {1 alarmı} other {# alarmı} } temizlemek istediğinize emin misiniz?"
"aknowledge-alarms-title": "{ count, plural, 1 {1 alarmı} other {# alarmı} } onayla",
"aknowledge-alarms-text": "{ count, plural, 1 {1 alarmı} other {# alarmı} } onaylamak istediğinize emin misiniz?",
"clear-alarms-title": "{ count, plural, 1 {1 alarmı} other {# alarmı} } temizle",
"clear-alarms-text": "{ count, plural, 1 {1 alarmı} other {# alarmı} } temizlemek istediğinize emin misiniz?"
},
"alias": {
"add": "Kısa ad ekle",
@ -212,15 +212,15 @@
"add-asset-text": "Yeni varlık ekle",
"asset-details": "Varlık detayları",
"assign-assets": "Varlıkları ata",
"assign-assets-text": "{ count, select, 1 {1 varlığı} other {# varlığı} } kullanıcı grubuna ata",
"assign-assets-text": "{ count, plural, 1 {1 varlığı} other {# varlığı} } kullanıcı grubuna ata",
"delete-assets": "Varlıkları sil",
"unassign-assets": "Varlıkların atamalarını kaldır",
"unassign-assets-action-title": "{ count, select, 1 {1 varlığın} other {# varlığın} } atamalarını kullanıcı grubundan kaldır",
"unassign-assets-action-title": "{ count, plural, 1 {1 varlığın} other {# varlığın} } atamalarını kullanıcı grubundan kaldır",
"assign-new-asset": "Yeni varlık ata",
"delete-asset-title": "'{{assetName}}' isimli varlığı silmek istediğinize emin misiniz?",
"delete-asset-text": "UYARI: Onaylandıktan sonra varlık ve ilgili tüm veriler geri yüklenemeyecek şekilde silinecek.",
"delete-assets-title": "{ count, select, 1 {1 varlığı} other {# varlığı} } silmek istediğinize emin misiniz?",
"delete-assets-action-title": "{ count, select, 1 {1 varlığı} other {# varlığı} } sil",
"delete-assets-title": "{ count, plural, 1 {1 varlığı} other {# varlığı} } silmek istediğinize emin misiniz?",
"delete-assets-action-title": "{ count, plural, 1 {1 varlığı} other {# varlığı} } sil",
"delete-assets-text": "UYARI: Onaylandıktan sonra tüm seçili varlıklar ver ilgili tüm veriler geri yüklenemyeck şekilde silinecek.",
"make-public-asset-title": "'{{assetName}}' isimli varlığı açık hale getirmek istediğinize emin misiniz?",
"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 @@
"unassign-asset-title": "'{{assetName}}' isimli varlığın atamasını kaldırmak istediğinize emin misiniz?",
"unassign-asset-text": "Onaylandıktan sonra varlığın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacaktır.",
"unassign-asset": "Varlık atamasını kaldır",
"unassign-assets-title": " { count, select, 1 {1 varlık} other {# varlık} } atamasını kaldırmak istediğinize emin misiniz?",
"unassign-assets-title": " { count, plural, 1 {1 varlık} other {# varlık} } atamasını kaldırmak istediğinize emin misiniz?",
"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.",
"copyId": "Varlık kimliğini kopyala",
"idCopiedMessage": "Varlık kimliği panoya kopyalandı",
@ -252,7 +252,7 @@
"key-required": "Öznitelik anahtarı gerekli.",
"value": "Değer",
"value-required": "Öznitelik değeri gerekli.",
"delete-attributes-title": "Silmek istediğinize emin misiniz { count, select, 1 {1 öznitelik} other {# öznitelik} }?",
"delete-attributes-title": "Silmek istediğinize emin misiniz { count, plural, 1 {1 öznitelik} other {# öznitelik} }?",
"delete-attributes-text": "UYARI: Onaylandıktan sonra tüm seçili öznitelikler kaldırılacak.",
"delete-attributes": "Öznitelikleri sil",
"enter-attribute-value": "Öznitelik değeri gir",
@ -262,8 +262,8 @@
"prev-widget": "Önceki gösterge",
"add-to-dashboard": "Kontrol paneline ekle",
"add-widget-to-dashboard": "Göstergeyi kontrol paneline ekle",
"selected-attributes": "{ count, select, 1 {1 öznitelik} other {# öznitelik} } seçildi",
"selected-telemetry": "{ count, select, 1 {1 telemetri birimi} other {# telemetri birimi} } seçildi"
"selected-attributes": "{ count, plural, 1 {1 öznitelik} other {# öznitelik} } seçildi",
"selected-telemetry": "{ count, plural, 1 {1 telemetri birimi} other {# telemetri birimi} } seçildi"
},
"audit-log": {
"audit": "Log ve Hata Yönetimi",
@ -358,8 +358,8 @@
"customer-details": "Kullanıcı Grubu detayları",
"delete-customer-title": "'{{customerTitle}}' isimli kullanıcı grubunu silmek istediğinize emin misiniz?",
"delete-customer-text": "UYARI: Onaylandıktan sonra kullanıcı grubu ve tüm ilişkili veriler geri yüklenemeyecek şekilde silinecek.",
"delete-customers-title": "{ count, select, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } silmek istediğinize emin misiniz?",
"delete-customers-action-title": "{ count, select, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } sil",
"delete-customers-title": "{ count, plural, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } silmek istediğinize emin misiniz?",
"delete-customers-action-title": "{ count, plural, 1 {1 kullanıcı grubunu} other {# kullanıcı grubunu} } sil",
"delete-customers-text": "UYARI: Onaylandıktan sonra tüm seçili kullanıcı grupları ve ilişkili veriler geri yüklenemez şekilde silinecek.",
"manage-users": "Kullanıcıları yönet",
"manage-assets": "Varlıkları yönet",
@ -418,20 +418,20 @@
"add-dashboard-text": "Yeni kontrol paneli ekle",
"assign-dashboards": "Kontrol panelleri ata",
"assign-new-dashboard": "Yeni kontrol paneli ata",
"assign-dashboards-text": "{ count, select, 1 {1 kontrol panelini} other {# kontrol panelini} } kullanıcı grubuna ata",
"unassign-dashboards-action-text": "Müşterilerden atama sayısı, çoğul, 1 {1 gösterge tablosu} diğer {# panolar}}",
"assign-dashboards-text": "{ count, plural, 1 {1 kontrol panelini} other {# kontrol panelini} } kullanıcı grubuna ata",
"unassign-dashboards-action-text": "Müşterilerden atama { count, plural, 1 {1 gösterge tablosu} other {# panolar}}",
"delete-dashboards": "Kontrol panellerini sil",
"unassign-dashboards": "Kontrol panellerinden atamayı kaldır",
"unassign-dashboards-action-title": "{ count, select, 1 {1 kontrol panelinin} other {# kontrol panelinin} } atamaları kullanıcı grubundan kaldır",
"unassign-dashboards-action-title": "{ count, plural, 1 {1 kontrol panelinin} other {# kontrol panelinin} } atamaları kullanıcı grubundan kaldır",
"delete-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelini silmek istediğinize emin misiniz?",
"delete-dashboard-text": "UYARI: Onaylandıktan sonra kontrol paneli ve ilişkili verileri geri yüklenemez şekilde silinecek.",
"delete-dashboards-title": "{ count, select, 1 {1 kontrol panelini} other {# kontrol panelini} } silmek istediğinize emin misiniz?",
"delete-dashboards-action-title": "{ count, select, 1 {1 kontrol panelini} other {# kontrol panelini} } sil",
"delete-dashboards-title": "{ count, plural, 1 {1 kontrol panelini} other {# kontrol panelini} } silmek istediğinize emin misiniz?",
"delete-dashboards-action-title": "{ count, plural, 1 {1 kontrol panelini} other {# kontrol panelini} } sil",
"delete-dashboards-text": "UYARI: Onaylandıktan sonra tüm seçili kontrol panelleri ve ilişkili verileri geri yüklenemez şekilde silinecek.",
"unassign-dashboard-title": "'{{dashboardTitle}}' isimli kontrol panelindeki atamayı kaldırmak istediğinize emin misiniz?",
"unassign-dashboard-text": "Onaylandıktan sonra kontrol panelinin ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez hale gelecektir.",
"unassign-dashboard": "Kontrol panelinin ataması kaldır",
"unassign-dashboards-title": "{count, select, 1 {1 kontrol panelindeki} other {# kontrol panelindeki} } atamayı kaldırmak istediğinize emin misiniz?",
"unassign-dashboards-title": "{count, plural, 1 {1 kontrol panelindeki} other {# kontrol panelindeki} } atamayı kaldırmak istediğinize emin misiniz?",
"unassign-dashboards-text": "Onaylandıktan <sonra seçili kontrol panellerinin atamaları kaldırılacak ve kullanıcı grubu tarafından erişilemez hale gelecektir.",
"public-dashboard-title": "Kontrol paneli açık hale getirildi",
"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 @@
"manage-states": "Kontrol paneli durumlarını yönet",
"states": "Kontrol paneli durumları",
"search-states": "Kontrol paneli durumu ara",
"selected-states": "{ count, select, 1 {1 kontrol paneli durumu} other {# kontrol paneli durumu} } seçildi",
"selected-states": "{ count, plural, 1 {1 kontrol paneli durumu} other {# kontrol paneli durumu} } seçildi",
"edit-state": "Kontrol paneli durumu düzenle",
"delete-state": "Kontrol paneli durumunu sil",
"add-state": "Kontrol paneli durumu ekle",
@ -541,11 +541,11 @@
"alarm": "Alarm alanları",
"timeseries-required": "Zaman serisi öğesi gerekli.",
"timeseries-or-attributes-required": "Zaman serisi/öznitelikler öğesi gerekli.",
"maximum-timeseries-or-attributes": "Maksimum { count, select, 1 {1 zamanserisi/öznitelik kabul edilir.} other {# zamanserisi/öznitelik kabul edilir} }",
"maximum-timeseries-or-attributes": "Maksimum { count, plural, 1 {1 zamanserisi/öznitelik kabul edilir.} other {# zamanserisi/öznitelik kabul edilir} }",
"alarm-fields-required": "Alarm alanları gerekli.",
"function-types": "Fonksiyon türleri",
"function-types-required": "Fonksiyon türleri gerekli.",
"maximum-function-types": "Maksimum { count, select, 1 {1 fonksiyon türü kabul edilir.} other {# fonksiyon türü kabul edilir} }"
"maximum-function-types": "Maksimum { count, plural, 1 {1 fonksiyon türü kabul edilir.} other {# fonksiyon türü kabul edilir} }"
},
"datasource": {
"type": "Veri kaynağı türü",
@ -597,11 +597,11 @@
"manage-credentials": "Kimlik bilgilerini yönet",
"delete": "Aygıt sil",
"assign-devices": "Aygıt ata",
"assign-devices-text": "{ count, select, 1 {1 aygıtı} other {# aygıtı} } kullanıcı grubuna ata",
"assign-devices-text": "{ count, plural, 1 {1 aygıtı} other {# aygıtı} } kullanıcı grubuna ata",
"delete-devices": "Aygıtları sil",
"unassign-from-customer": "Kullanıcı Grubundan atamayı kaldır",
"unassign-devices": "Aygıtlardan atamayı kaldır",
"unassign-devices-action-title": "{ count, select, 1 {1 aygıtın} other {# aygıtın} } atamasını kullanıcı grubundan kaldır",
"unassign-devices-action-title": "{ count, plural, 1 {1 aygıtın} other {# aygıtın} } atamasını kullanıcı grubundan kaldır",
"assign-new-device": "Yeni aygıt ata",
"make-public-device-title": "'{{deviceName}}' isimli aygıtı açık hale getirmek istediğinizden emin misiniz?",
"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 @@
"view-credentials": "Kimlik bilgilerini görüntüle",
"delete-device-title": "'{{deviceName}}' isimli aygıtı silmek istediğinize emin misiniz?",
"delete-device-text": "UYARI: Onaylandıktan sonra aygıt ve ilişkili verileri geri yüklenemez şekilde silinecek.",
"delete-devices-title": "{ count, select, 1 {1 aygıtı} other {# aygıtı} } silmek istediğinize emin misiniz?",
"delete-devices-action-title": "{ count, select, 1 {1 aygıtı} other {# aygıtı} } sil",
"delete-devices-title": "{ count, plural, 1 {1 aygıtı} other {# aygıtı} } silmek istediğinize emin misiniz?",
"delete-devices-action-title": "{ count, plural, 1 {1 aygıtı} other {# aygıtı} } sil",
"delete-devices-text": "UYARI: Onaylandıktan sonra tüm seçili aygıtlar ve ilişkili verileri geri yüklenemez şekilde silinecek.",
"unassign-device-title": "'{{deviceName}}' isimli aygıtın atamasını kaldırmak istediğinize emin misiniz?",
"unassign-device-text": "Onaylandıktan sonra aygıtın ataması kaldırılacak ve kullanıcı grubu tarafından erişilemez olacak.",
"unassign-device": "Aygıt atamasını kaldır",
"unassign-devices-title": "{ count, select, 1 {1 aygıtın} other {# aygıtın} } atamasını kaldırmak istediğinize emin misiniz?",
"unassign-devices-title": "{ count, plural, 1 {1 aygıtın} other {# aygıtın} } atamasını kaldırmak istediğinize emin misiniz?",
"unassign-devices-text": "Onaylandıktan sonra seçili aygıtların atamaları kaldırılacak ve kullanıcı grubu tarafından erişilemez olacak.",
"device-credentials": "Aygıt Kimlik Bilgileri",
"credentials-type": "Kimlik Bilgi Türü",
@ -702,55 +702,55 @@
"type-required": "Öğe türü gerekli.",
"type-device": "Aygıt",
"type-devices": "Aygıtlar",
"list-of-devices": "{ count, select, 1 {Bir aygıt} other {# Aygıtın Listesi} }",
"list-of-devices": "{ count, plural, 1 {Bir aygıt} other {# Aygıtın Listesi} }",
"device-name-starts-with": "İsimleri '{{prefix}}' ile başlayan aygıtlar",
"type-asset": "Varlık",
"type-assets": "Varlıklar",
"list-of-assets": "{ count, select, 1 {Bir varlık} other {# Varlığın Listesi} }",
"list-of-assets": "{ count, plural, 1 {Bir varlık} other {# Varlığın Listesi} }",
"asset-name-starts-with": "İsmi '{{prefix}}' ile başlayan varlıklar",
"type-entity-view": "Varlık Görünümü",
"type-entity-views": "Varlık Görünümleri",
"list-of-entity-views": "{count, çoğul, 1 {Bir varlık görünümü} diğer {# varlık görüntüleme}} listesi",
"list-of-entity-views": "{ count, plural, 1 {Bir varlık görünümü} other {# varlık görüntüleme}} listesi",
"entity-view-name-starts-with": "Adı {{önek}} ile başlayan varlık görünümleri",
"type-rule": "Kural",
"type-rules": "Kurallar",
"list-of-rules": "{ count, select, 1 {Bir kural} other {# Kuralın Listesi} }",
"list-of-rules": "{ count, plural, 1 {Bir kural} other {# Kuralın Listesi} }",
"rule-name-starts-with": "İsmi '{{prefix}}' ile başlayan kurallar",
"type-plugin": "Eklenti",
"type-plugins": "Eklentiler",
"list-of-plugins": "{ count, select, 1 {Bir eklenti} other {# Eklentinin Listesi} }",
"list-of-plugins": "{ count, plural, 1 {Bir eklenti} other {# Eklentinin Listesi} }",
"plugin-name-starts-with": "İsmi '{{prefix}}' ile başlayan eklentiler",
"type-tenant": "Tenant",
"type-tenants": "Tenantlar",
"list-of-tenants": "{ count, select, 1 {Bir tenant} other {# Tenantın Listesi} }",
"list-of-tenants": "{ count, plural, 1 {Bir tenant} other {# Tenantın Listesi} }",
"tenant-name-starts-with": "İsmi '{{prefix}}' ile başlayan tenantlar",
"type-customer": "Kullanıcı Grubu",
"type-customers": "Kullanıcı Grupları",
"list-of-customers": "{ count, select, 1 {Bir Kullanıcı Grubu} other {# Kullanıcı Grupları} }",
"list-of-customers": "{ count, plural, 1 {Bir Kullanıcı Grubu} other {# Kullanıcı Grupları} }",
"customer-name-starts-with": "İsmi '{{prefix}}' ile başlayan Kullanıcı Grupları",
"type-user": "Kullanıcı",
"type-users": "Kullanıcılar",
"list-of-users": "{ count, select, 1 {Bir kullanıcı} other {# Kullanıcının Listesi} }",
"list-of-users": "{ count, plural, 1 {Bir kullanıcı} other {# Kullanıcının Listesi} }",
"user-name-starts-with": "İsmi '{{prefix}}' ile başlayan kullanıcılar",
"type-dashboard": "Kontrol paneli",
"type-dashboards": "Kontrol panelleri",
"list-of-dashboards": "{ count, select, 1 {Bir kontrol paneli} other {# Kontrol Panelinin Listesi} }",
"list-of-dashboards": "{ count, plural, 1 {Bir kontrol paneli} other {# Kontrol Panelinin Listesi} }",
"dashboard-name-starts-with": "İsmi '{{prefix}}' ile başlayan kontrol panelleri",
"type-alarm": "Alarm",
"type-alarms": "Alarmlar",
"list-of-alarms": "{ count, select, 1 {Bir alarm} other {# Alarmın Listesi} }",
"list-of-alarms": "{ count, plural, 1 {Bir alarm} other {# Alarmın Listesi} }",
"alarm-name-starts-with": "İsmi '{{prefix}}' ile başlayan alarmlar",
"type-rulechain": "Kural zinciri",
"type-rulechains": "Kural zincirleri",
"list-of-rulechains": "{count, çoğul, 1 {Bir kural zinciri} diğer {# kural zincirinin listesi}}",
"list-of-rulechains": "{ count, plural, 1 {Bir kural zinciri} other {# kural zincirinin listesi}}",
"rulechain-name-starts-with": "İsimleri {{prefix}} ile başlayan kural zincirleri",
"type-rulenode": "Kural düğümü",
"type-rulenodes": "Kural düğümleri",
"list-of-rulenodes": "{count, çoğul, 1 {Bir kural node} diğer {# kural düğümünün listesi}}",
"list-of-rulenodes": "{ count, plural, 1 {Bir kural node} other {# kural düğümünün listesi}}",
"rulenode-name-starts-with": "İsimleri '{{prefix}} ile başlayan kural düğümleri",
"type-current-customer": "Mevcut Müşteri",
"search": "Öğeleri ara",
"selected-entities": "{ count, select, 1 {1 öğe} other {# öğe} } seçildi",
"selected-entities": "{ count, plural, 1 {1 öğe} other {# öğe} } seçildi",
"entity-name": "Öğe adı",
"details": "Öğe detayları",
"no-entities-prompt": "Hiçbir öğe bulunamadı",
@ -792,21 +792,21 @@
"add-entity-view-text": "Yeni varlık görünümü ekle",
"delete": "Varlık görünümünü sil",
"assign-entity-views": "Varlık görünümleri atama",
"assign-entity-views-text": "Müşteriye {count, çoğul, 1 {1 entityView} diğer {# entityViews}} atayın ",
"assign-entity-views-text": "Müşteriye { count, plural, 1 {1 entityView} other {# entityViews}} atayın ",
"delete-entity-views": "Varlık görünümlerini sil",
"unassign-from-customer": "Müşteriden atama",
"unassign-entity-views": "Varlık görünümlerini atama",
"unassign-entity-views-action-title": "Müşteriden atama sayım, çoğul, 1 {1 entityView} diğer {# entityViews}}",
"unassign-entity-views-action-title": "Müşteriden atama { count, plural, 1 {1 entityView} other {# entityViews}}",
"assign-new-entity-view": "Yeni varlık görünümü atama",
"delete-entity-view-title": "Varlık görünümünü silmek istediğinizden emin misiniz?, {{entityViewName}} '? ",
"delete-entity-view-text": "Dikkatli olun, onaylandıktan sonra varlık görünümü ve ilgili tüm veriler kurtarılamayacak.",
"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?",
"delete-entity-views-action-title": "Sil {count, çoğul, 1 {1 entityView} diğer {# entityViews}}",
"delete-entity-views-title": "{ count, plural, 1 {1 entityView} other {# entityViews}} varlık görünümüne sahip olmak istediğinizden emin misiniz?",
"delete-entity-views-action-title": "Sil { count, plural, 1 {1 entityView} other {# entityViews}}",
"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.",
"unassign-entity-view-title": "Varlık görünümünün atamasını kaldırmak istediğinizden emin misiniz? {{entityViewName}} '? ",
"unassign-entity-view-text": "Onaydan sonra varlık görünümü atanmamış olacak ve müşteri tarafından erişilemeyecektir.",
"unassign-entity-view": "Varlık görünümünün atamasını kaldır",
"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?",
"unassign-entity-views-title": "{ count, plural, 1 {1 entityView} other {# entityViews}} hesabının atamasını kaldırmak istediğinizden emin misiniz?",
"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.",
"entity-view-type": "Varlık Görünümü türü",
"entity-view-type-required": "Varlık Görünümü türü gerekli.",
@ -861,7 +861,7 @@
},
"extension": {
"extensions": "Uzantılar",
"selected-extensions": "{count, çoğul, 1 {1 uzantı} diğer {# extensions}} seçildi",
"selected-extensions": "{ count, plural, 1 {1 uzantı} other {# extensions}} seçildi",
"type": "Tür",
"key": "Anahtar",
"value": "Değer",
@ -875,7 +875,7 @@
"edit": "Uzantıyı düzenle",
"delete-extension-title": "{{ExtensionId}} uzantısını silmek istediğinizden emin misiniz? ",
"delete-extension-text": "Dikkatli olun, onaylamadan sonra uzantı ve ilgili tüm veriler kurtarılamaz.",
"delete-extensions-title": "{Count, çoğul, 1 {1 uzantı} diğer {# extensions}} silmek istediğinizden emin misiniz?",
"delete-extensions-title": "{ count, plural, 1 {1 uzantı} other {# extensions}} silmek istediğinizden emin misiniz?",
"delete-extensions-text": "Dikkatli olun, onaylandıktan sonra tüm seçilen uzantılar kaldırılacak.",
"converters": "Dönüştürücü",
"converter-id": "Dönüştürücü kimliği",
@ -1026,8 +1026,8 @@
"grid": {
"delete-item-title": "Bu öğeyi silmek istediğinizden emin misiniz?",
"delete-item-text": "UYARI: Onayladıktan sonra bu öğe ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
"delete-items-title": "{ count, select, 1 {1 öğeyi} other {# öğeyi} } silmek istediğinizden emin misiniz?",
"delete-items-action-title": "{ count, select, 1 {1 öğeyi} other {# öğeyi} } sil",
"delete-items-title": "{ count, plural, 1 {1 öğeyi} other {# öğeyi} } silmek istediğinizden emin misiniz?",
"delete-items-action-title": "{ count, plural, 1 {1 öğeyi} other {# öğeyi} } sil",
"delete-items-text": "UYARI: Onayladıktan sonra tüm seçili öğeler ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
"add-item-text": "Yeni öğe ekle",
"no-items-text": "Hiç bir öğe bulunamadı",
@ -1128,7 +1128,7 @@
},
"from-relations": "Giden ilişkiler",
"to-relations": "Gelen ilişkiler",
"selected-relations": "{ count, select, 1 {1 ilişki} other {# ilişki} } seçildi",
"selected-relations": "{ count, plural, 1 {1 ilişki} other {# ilişki} } seçildi",
"type": "Tür",
"to-entity-type": "Hedef Öğe Türü",
"to-entity-name": "Hedef Öğe Adı",
@ -1144,11 +1144,11 @@
"edit": "İlişki düzenle",
"delete-to-relation-title": "'{{entityName}}' öğesine olan ilişkiyi silmek istediğinize emin misiniz?",
"delete-to-relation-text": "UYARI: Onaylandıktan sonra '{{entityName}}' öğesinin şimdiki öğeyle olan ilişkisi sona erecektir.",
"delete-to-relations-title": "{ count, select, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
"delete-to-relations-title": "{ count, plural, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
"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.",
"delete-from-relation-title": "'{{entityName}}' öğesinden ilişkiyi silmek istediğinize emin misiniz?",
"delete-from-relation-text": "UYARI: Onaylandıktan sonra şimdiki öğenin '{{entityName}}' öğesiyle ilişkisi sonlandırılacaktır.",
"delete-from-relations-title": "{ count, select, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
"delete-from-relations-title": "{ count, plural, 1 {1 ilişkiyi} other {# ilişkiyi} } silmek istediğinize emin misiniz?",
"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.",
"remove-relation-filter": "İlişki filtresini kaldır",
"add-relation-filter": "İlişkisi ekle",
@ -1171,8 +1171,8 @@
"set-root-rulechain-text": "Onaydan sonra kural zinciri kökleşecek ve gelen tüm iletilerle ilgilenecek.",
"delete-rulechain-title": "'{{ruleName}}' isimli kuralı silmek istediğinize emin misiniz?",
"delete-rulechain-text": "UYARI: Onaylandıktan sonra kural ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
"delete-rulechains-title": "{ count, select, 1 {1 kuralı} other {# kuralı} } sikmek istediğinize emin misiniz?",
"delete-rulechains-action-title": "{ count, select, 1 {1 kuralı} other {# kuralı} sil}",
"delete-rulechains-title": "{ count, plural, 1 {1 kuralı} other {# kuralı} } sikmek istediğinize emin misiniz?",
"delete-rulechains-action-title": "{ count, plural, 1 {1 kuralı} other {# kuralı} } sil",
"delete-rulechains-text": "UYARI: Onaylandıktan sonra seçili tüm kurallar ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
"add-rulechain-text": "Yeni kural ekle",
"no-rulechains-text":"Hiçbir kural bulunamadı",
@ -1270,8 +1270,8 @@
"tenant-details": "Tenant detayları",
"delete-tenant-title": "'{{tenantTitle}}' isimli tenantı silmek istediğinize emin misiniz?",
"delete-tenant-text": "UYARI: Onaylandıktan sonra tenant ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
"delete-tenants-title": "{ count, select, 1 {1 tenantı} other {# tenantı} } silmek istediğinize emin misiniz?",
"delete-tenants-action-title": "{ count, select, 1 {1 tenantı} other {# tenantı} } sil",
"delete-tenants-title": "{ count, plural, 1 {1 tenantı} other {# tenantı} } silmek istediğinize emin misiniz?",
"delete-tenants-action-title": "{ count, plural, 1 {1 tenantı} other {# tenantı} } sil",
"delete-tenants-text": "UYARI: Onaylandıktan sonra seçili tüm tenantlar ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir",
"title": "Başlık",
"title-required": "Başlık gerekli.",
@ -1325,8 +1325,8 @@
"user-details": "Kullanıcı detayları",
"delete-user-title": "'{{userEmail}}' kullanıcısını silmek istediğinize emin misiniz?",
"delete-user-text": "UYARI: Onaylandıktan sonra kullanıcı ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
"delete-users-title": "{ count, select, 1 {1 kullanıcıyı} other {# kullanıcıyı} } sikmek istediğinize emin misiniz?",
"delete-users-action-title": "{ count, select, 1 {1 kullancıyı} other {# kullanıcıyı} } sil",
"delete-users-title": "{ count, plural, 1 {1 kullanıcıyı} other {# kullanıcıyı} } sikmek istediğinize emin misiniz?",
"delete-users-action-title": "{ count, plural, 1 {1 kullancıyı} other {# kullanıcıyı} } sil",
"delete-users-text": "UYARI: Onaylandıktan sonra kullanıcı ve ilişkili tüm verileri geri yüklenemez şekilde silinecektir.",
"activation-email-sent-message": "Etkinleştirme e-postası başarılı bir şekilde gönderildi!",
"resend-activation": "Etkinleştirme e-postasını yeniden gönder",
@ -1445,8 +1445,8 @@
"widgets-bundle-details": "Gösterge demeti detayları",
"delete-widgets-bundle-title": "'{{widgetsBundleTitle}}' isimli gösterge demetini silmek istediğinize emin misiniz?",
"delete-widgets-bundle-text": "UYARI: Onaylandıktan sonra gösterge demeti ve ilişkili tüm veriler geri yüklenemez şekilde silinecektir.",
"delete-widgets-bundles-title": "{ count, select, 1 {1 gösterge demetini} other {# gösterge demetini} } silmek istediğinize emin misiniz?",
"delete-widgets-bundles-action-title": "{ count, select, 1 {1 gösterge demetini} other {# gösterge demetini} } sil",
"delete-widgets-bundles-title": "{ count, plural, 1 {1 gösterge demetini} other {# gösterge demetini} } silmek istediğinize emin misiniz?",
"delete-widgets-bundles-action-title": "{ count, plural, 1 {1 gösterge demetini} other {# gösterge demetini} } sil",
"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.",
"no-widgets-bundles-matching": "'{{widgetsBundle}}' ile eşleşen gösterge demeti bulunamadı.",
"widgets-bundle-required": "Gösterge demeti gerekli.",
@ -1482,7 +1482,7 @@
"use-dashboard-timewindow": "Kontrol paneli zaman aralığı kullan",
"display-legend": "Lejant göster",
"datasources": "Veri kaynakları",
"maximum-datasources": "En fazla { count, select, 1 {1 veri kaynağı kullanılabilir.} other {# veri kaynağı kullanılabilir} }",
"maximum-datasources": "En fazla { count, plural, 1 {1 veri kaynağı kullanılabilir.} other {# veri kaynağı kullanılabilir} }",
"datasource-type": "Tür",
"datasource-parameters": "Parametreler",
"remove-datasource": "Veri kaynağını kaldır",
@ -1539,7 +1539,7 @@
"ru_RU": "Rusça",
"es_ES": "İspanyol",
"ja_JA": "Japonca",
"TR": "Türkçe"
"tr_TR": "Türkçe"
}
}
}

2
ui/src/app/locale/locale.constant-zh_CN.json

@ -1445,7 +1445,7 @@
"es_ES": "西班牙语",
"it_IT": "意大利",
"ja_JA": "日本",
"TR": "土耳其"
"tr_TR": "土耳其"
}
}
}

2
ui/src/app/rulechain/script/node-script-test.service.js

@ -121,7 +121,7 @@ export default function NodeScriptTest($q, $mdDialog, $document, ruleChainServic
onShowingCallback: onShowingCallback
},
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: $event,
onComplete: () => {
onShowingCallback.onShowed();

2
ui/src/app/user/add-user.controller.js

@ -100,7 +100,7 @@ export default function AddUserController($scope, $mdDialog, $state, $stateParam
},
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: $event
}).then(function () {
deferred.resolve();

2
ui/src/app/user/user.controller.js

@ -186,7 +186,7 @@ export default function UserController(userService, toast, $scope, $mdDialog, $d
},
parent: angular.element($document[0].body),
fullscreen: true,
skipHide: true,
multiple: true,
targetEvent: event
});
}

2
ui/src/app/widget/lib/alarms-table-widget.js

@ -402,7 +402,7 @@ function AlarmsTableWidgetController($element, $scope, $filter, $mdMedia, $mdDia
parent: angular.element($document[0].body),
targetEvent: $event,
fullscreen: true,
skipHide: true,
multiple: true,
onShowing: function(scope, element) {
onShowingCallback.onShowing(scope, element);
}

2
ui/src/app/widget/lib/canvas-digital-gauge.js

@ -209,8 +209,8 @@ export default class TbCanvasDigitalGauge {
}
var value = tvPair[1];
if(value !== this.gauge.value) {
this.gauge.value = value;
this.gauge._value = value;
this.gauge.value = value;
} else if (this.localSettings.showTimestamp && this.gauge.timestamp != timestamp) {
this.gauge.timestamp = timestamp;
}

Loading…
Cancel
Save