Commit 9734f45ec8564e7b770874927e62a05ee6bf47ea

Authored by Igor Kulikov
1 parent 9157adca

Dashboard toolbar improvements.

... ... @@ -74,8 +74,8 @@
74 74 <input ng-model="vm.alarmStatus" readonly>
75 75 </md-input-container>
76 76 </div>
77   - <div ng-if="vm.displayDetails" class="md-caption" style="padding-left: 3px; padding-bottom: 10px; color: rgba(0,0,0,0.57);" translate>alarm.details</div>
78   - <div ng-if="vm.displayDetails" flex class="tb-alarm-details-panel" layout="column">
  77 + <div ng-show="vm.displayDetails" class="md-caption" style="padding-left: 3px; padding-bottom: 10px; color: rgba(0,0,0,0.57);" translate>alarm.details</div>
  78 + <div ng-show="vm.displayDetails" flex class="tb-alarm-details-panel" layout="column">
79 79 <div flex id="tb-alarm-details" readonly
80 80 ui-ace="vm.alarmDetailsOptions"
81 81 ng-model="vm.alarmDetails">
... ...
  1 +/*
  2 + * Copyright © 2016-2017 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 +/*@ngInject*/
  18 +export default function DashboardSelectPanelController(mdPanelRef, $scope, $filter, dashboards, dashboardId, onDashboardSelected) {
  19 +
  20 + var vm = this;
  21 + vm._mdPanelRef = mdPanelRef;
  22 + vm.dashboards = dashboards;
  23 + vm.dashboardId = dashboardId;
  24 +
  25 + vm.dashboardSelected = dashboardSelected;
  26 +
  27 + function dashboardSelected(dashboardId) {
  28 + if (onDashboardSelected) {
  29 + onDashboardSelected(dashboardId);
  30 + }
  31 + }
  32 +}
... ...
  1 +<!--
  2 +
  3 + Copyright © 2016-2017 The Thingsboard Authors
  4 +
  5 + Licensed under the Apache License, Version 2.0 (the "License");
  6 + you may not use this file except in compliance with the License.
  7 + You may obtain a copy of the License at
  8 +
  9 + http://www.apache.org/licenses/LICENSE-2.0
  10 +
  11 + Unless required by applicable law or agreed to in writing, software
  12 + distributed under the License is distributed on an "AS IS" BASIS,
  13 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14 + See the License for the specific language governing permissions and
  15 + limitations under the License.
  16 +
  17 +-->
  18 +<md-content flex layout="column">
  19 + <section flex layout="column">
  20 + <md-content flex class="md-padding" layout="column">
  21 + <md-input-container flex>
  22 + <label>{{ 'dashboard.select-dashboard' | translate }}</label>
  23 + <md-select ng-model="vm.dashboardId" ng-change="vm.dashboardSelected(vm.dashboardId)">
  24 + <md-option ng-repeat="dashboard in vm.dashboards" ng-value="dashboard.id.id">
  25 + {{dashboard.title}}
  26 + </md-option>
  27 + </md-select>
  28 + </md-input-container>
  29 + </md-content>
  30 + </section>
  31 +</md-content>
... ...
... ... @@ -21,16 +21,20 @@ import thingsboardApiUser from '../api/user.service';
21 21 /* eslint-disable import/no-unresolved, import/default */
22 22
23 23 import dashboardSelectTemplate from './dashboard-select.tpl.html';
  24 +import dashboardSelectPanelTemplate from './dashboard-select-panel.tpl.html';
24 25
25 26 /* eslint-enable import/no-unresolved, import/default */
26 27
  28 +import DashboardSelectPanelController from './dashboard-select-panel.controller';
  29 +
27 30
28 31 export default angular.module('thingsboard.directives.dashboardSelect', [thingsboardApiDashboard, thingsboardApiUser])
29 32 .directive('tbDashboardSelect', DashboardSelect)
  33 + .controller('DashboardSelectPanelController', DashboardSelectPanelController)
30 34 .name;
31 35
32 36 /*@ngInject*/
33   -function DashboardSelect($compile, $templateCache, $q, types, dashboardService, userService) {
  37 +function DashboardSelect($compile, $templateCache, $q, $mdMedia, $mdPanel, $document, types, dashboardService, userService) {
34 38
35 39 var linker = function (scope, element, attrs, ngModelCtrl) {
36 40 var template = $templateCache.get(dashboardSelectTemplate);
... ... @@ -74,6 +78,59 @@ function DashboardSelect($compile, $templateCache, $q, types, dashboardService,
74 78 scope.updateView();
75 79 });
76 80
  81 + scope.openDashboardSelectPanel = function (event) {
  82 + if (scope.disabled) {
  83 + return;
  84 + }
  85 + var position;
  86 + var panelHeight = $mdMedia('min-height: 350px') ? 250 : 150;
  87 + var panelWidth = 300;
  88 + var offset = element[0].getBoundingClientRect();
  89 + var bottomY = offset.bottom - $(window).scrollTop(); //eslint-disable-line
  90 + var leftX = offset.left - $(window).scrollLeft(); //eslint-disable-line
  91 + var yPosition;
  92 + var xPosition;
  93 + if (bottomY + panelHeight > $( window ).height()) { //eslint-disable-line
  94 + yPosition = $mdPanel.yPosition.ABOVE;
  95 + } else {
  96 + yPosition = $mdPanel.yPosition.BELOW;
  97 + }
  98 + if (leftX + panelWidth > $( window ).width()) { //eslint-disable-line
  99 + xPosition = $mdPanel.xPosition.CENTER;
  100 + } else {
  101 + xPosition = $mdPanel.xPosition.ALIGN_START;
  102 + }
  103 + position = $mdPanel.newPanelPosition()
  104 + .relativeTo(element)
  105 + .addPanelPosition(xPosition, yPosition);
  106 + var config = {
  107 + attachTo: angular.element($document[0].body),
  108 + controller: 'DashboardSelectPanelController',
  109 + controllerAs: 'vm',
  110 + templateUrl: dashboardSelectPanelTemplate,
  111 + panelClass: 'tb-dashboard-select-panel',
  112 + position: position,
  113 + fullscreen: false,
  114 + locals: {
  115 + dashboards: scope.dashboards,
  116 + dashboardId: scope.dashboardId,
  117 + onDashboardSelected: (dashboardId) => {
  118 + if (scope.panelRef) {
  119 + scope.panelRef.close();
  120 + }
  121 + scope.dashboardId = dashboardId;
  122 + }
  123 + },
  124 + openFrom: event,
  125 + clickOutsideToClose: true,
  126 + escapeToClose: true,
  127 + focusOnOpen: false
  128 + };
  129 + $mdPanel.open(config).then(function(result) {
  130 + scope.panelRef = result;
  131 + });
  132 + }
  133 +
77 134 $compile(element.contents())(scope);
78 135 }
79 136
... ...
... ... @@ -14,8 +14,48 @@
14 14 * limitations under the License.
15 15 */
16 16
  17 +@import '../../scss/constants';
  18 +
17 19 tb-dashboard-select {
  20 + min-width: 52px;
18 21 md-select {
19 22 pointer-events: all;
  23 + max-width: 300px;
  24 + }
  25 +}
  26 +
  27 +.tb-dashboard-select {
  28 + min-height: 32px;
  29 + span {
  30 + pointer-events: all;
  31 + cursor: pointer;
  32 + }
  33 +}
  34 +
  35 +.md-panel {
  36 + &.tb-dashboard-select-panel {
  37 + position: absolute;
20 38 }
21 39 }
  40 +
  41 +.tb-dashboard-select-panel {
  42 + max-height: 150px;
  43 + @media (min-height: 350px) {
  44 + max-height: 250px;
  45 + }
  46 + max-width: 320px;
  47 + @media (min-width: $layout-breakpoint-xs) {
  48 + max-width: 100%;
  49 + }
  50 + min-width: 300px;
  51 + background: white;
  52 + border-radius: 4px;
  53 + box-shadow: 0 7px 8px -4px rgba(0, 0, 0, 0.2),
  54 + 0 13px 19px 2px rgba(0, 0, 0, 0.14),
  55 + 0 5px 24px 4px rgba(0, 0, 0, 0.12);
  56 + overflow-x: hidden;
  57 + overflow-y: auto;
  58 + md-content {
  59 + background-color: #fff;
  60 + }
  61 +}
\ No newline at end of file
... ...
... ... @@ -16,7 +16,8 @@
16 16
17 17 -->
18 18
19   -<md-select ng-required="tbRequired"
  19 +<md-select hide-xs hide-sm hide-md
  20 + ng-required="tbRequired"
20 21 ng-disabled="disabled"
21 22 ng-model="dashboardId"
22 23 aria-label="{{ 'dashboard.dashboard' | translate }}">
... ... @@ -24,3 +25,11 @@
24 25 {{dashboard.title}}
25 26 </md-option>
26 27 </md-select>
  28 +<section hide-gt-md class="tb-dashboard-select">
  29 + <md-button class="md-icon-button" aria-label="{{ 'dashboard.select-dashboard' | translate }}" ng-click="openDashboardSelectPanel($event)">
  30 + <md-tooltip md-direction="{{tooltipDirection}}">
  31 + {{ 'dashboard.select-dashboard' | translate }}
  32 + </md-tooltip>
  33 + <md-icon aria-label="{{ 'dashboard.select-dashboard' | translate }}" class="material-icons">dashboards</md-icon>
  34 + </md-button>
  35 +</section>
\ No newline at end of file
... ...
... ... @@ -31,12 +31,12 @@
31 31 }
32 32
33 33 tb-datasource-entity {
34   - @media (min-width: $layout-breakpoint-gt-sm) {
  34 + @media (min-width: $layout-breakpoint-sm) {
35 35 padding-left: 4px;
36 36 padding-right: 4px;
37 37 }
38 38 tb-entity-alias-select {
39   - @media (min-width: $layout-breakpoint-gt-sm) {
  39 + @media (min-width: $layout-breakpoint-sm) {
40 40 width: 200px;
41 41 max-width: 200px;
42 42 }
... ...
... ... @@ -16,7 +16,7 @@
16 16 @import '../../scss/constants';
17 17
18 18 .tb-datasource-func {
19   - @media (min-width: $layout-breakpoint-gt-sm) {
  19 + @media (min-width: $layout-breakpoint-sm) {
20 20 padding-left: 8px;
21 21 }
22 22
... ...
... ... @@ -45,10 +45,10 @@ md-sidenav.tb-sidenav-details {
45 45 width: 100% !important;
46 46 max-width: 100% !important;
47 47 z-index: 59 !important;
48   - @media (min-width: $layout-breakpoint-gt-sm) {
  48 + @media (min-width: $layout-breakpoint-sm) {
49 49 width: 80% !important;
50 50 }
51   - @media (min-width: $layout-breakpoint-gt-md) {
  51 + @media (min-width: $layout-breakpoint-md) {
52 52 width: 65% !important;
53 53 }
54 54 @media (min-width: $layout-breakpoint-lg) {
... ...
... ... @@ -69,7 +69,7 @@ function Timewindow($compile, $templateCache, $filter, $mdPanel, $document, $mdM
69 69 scope.isToolbar = angular.isDefined(attrs.isToolbar);
70 70
71 71 scope.hideLabel = function() {
72   - return scope.isToolbar && !$mdMedia('gt-sm');
  72 + return scope.isToolbar && !$mdMedia('gt-md');
73 73 }
74 74
75 75 var translationPending = false;
... ...
... ... @@ -59,8 +59,16 @@
59 59 }
60 60
61 61 tb-timewindow {
62   - span {
63   - pointer-events: all;
64   - cursor: pointer;
  62 + min-width: 52px;
  63 + section.tb-timewindow {
  64 + min-height: 32px;
  65 + padding: 0 6px;
  66 + span {
  67 + pointer-events: all;
  68 + cursor: pointer;
  69 + overflow: hidden;
  70 + text-overflow: ellipsis;
  71 + white-space: nowrap;
  72 + }
65 73 }
66 74 }
... ...
... ... @@ -15,7 +15,7 @@
15 15 limitations under the License.
16 16
17 17 -->
18   -<section layout='row' layout-align="start center" ng-style="{minHeight: '32px', padding: '0 6px'}">
  18 +<section class="tb-timewindow" layout='row' layout-align="start center">
19 19 <md-button ng-if="direction === 'left'" ng-disabled="disabled" class="md-icon-button tb-md-32" aria-label="{{ 'timewindow.edit' | translate }}" ng-click="openEditMode($event)">
20 20 <md-tooltip md-direction="{{tooltipDirection}}">
21 21 {{ 'timewindow.edit' | translate }}
... ... @@ -33,5 +33,5 @@
33 33 {{ 'timewindow.edit' | translate }}
34 34 </md-tooltip>
35 35 <ng-md-icon aria-label="{{ 'timewindow.date-range' | translate }}" icon="query_builder"></ng-md-icon>
36   - </md-button>
  36 + </md-button>
37 37 </section>
\ No newline at end of file
... ...
... ... @@ -65,7 +65,7 @@
65 65 <v-pane-header>
66 66 <div layout="column">
67 67 <div>{{ 'widget-config.datasources' | translate }}</div>
68   - <div class="md-caption" style="color: rgba(0,0,0,0.57);" ng-if="typeParameters.maxDatasources != -1"
  68 + <div class="md-caption" style="color: rgba(0,0,0,0.57);" ng-if="typeParameters.maxDatasources > -1"
69 69 translate="widget-config.maximum-datasources"
70 70 translate-values="{count: typeParameters.maxDatasources}"
71 71 translate-interpolation="messageformat"
... ...
... ... @@ -17,6 +17,12 @@
17 17 @import "~compass-sass-mixins/lib/compass";
18 18 @import '../../scss/constants';
19 19
  20 +$toolbar-height: 50px;
  21 +$fullscreen-toolbar-height: 64px;
  22 +$mobile-toolbar-height: 80px;
  23 +$half-mobile-toolbar-height: 40px;
  24 +$mobile-toolbar-height-total: 84px;
  25 +
20 26 tb-dashboard-toolbar {
21 27 md-fab-toolbar {
22 28 &.md-is-open {
... ... @@ -68,42 +74,84 @@ tb-dashboard-toolbar {
68 74 }
69 75 }
70 76 .md-fab-toolbar-wrapper {
71   - height: 64px;
  77 + height: $mobile-toolbar-height-total;
  78 + @media (min-width: $layout-breakpoint-sm) {
  79 + height: $fullscreen-toolbar-height;
  80 + }
72 81 md-toolbar {
73   - min-height: 64px;
74   - height: 64px;
  82 + min-height: $mobile-toolbar-height;
  83 + height: $mobile-toolbar-height;
  84 + @media (min-width: $layout-breakpoint-sm) {
  85 + min-height: $fullscreen-toolbar-height;
  86 + height: $fullscreen-toolbar-height;
  87 + }
75 88 }
76 89 }
77 90 }
78 91 .md-fab-toolbar-wrapper {
79   - height: 50px;
  92 + height: $mobile-toolbar-height-total;
  93 + @media (min-width: $layout-breakpoint-sm) {
  94 + height: $toolbar-height;
  95 + }
80 96 md-toolbar {
81   - min-height: 50px;
82   - height: 50px;
  97 + min-height: $mobile-toolbar-height;
  98 + height: $mobile-toolbar-height;
  99 + @media (min-width: $layout-breakpoint-sm) {
  100 + min-height: $toolbar-height;
  101 + height: $toolbar-height;
  102 + }
83 103 md-fab-actions {
84 104 font-size: 16px;
85 105 margin-top: 0px;
  106 + @media (max-width: $layout-breakpoint-sm) {
  107 + height: $mobile-toolbar-height;
  108 + max-height: $mobile-toolbar-height;
  109 + }
86 110 .close-action {
87 111 margin-right: -18px;
88 112 }
89 113 .md-fab-action-item {
90 114 width: 100%;
91   - height: 46px;
92   - .tb-dashboard-action-panels {
  115 + height: $mobile-toolbar-height;
  116 + @media (min-width: $layout-breakpoint-sm) {
93 117 height: 46px;
94   - flex-direction: row-reverse;
95   - .tb-dashboard-action-panel {
  118 + }
  119 + .tb-dashboard-action-panels {
  120 + height: $mobile-toolbar-height;
  121 + @media (min-width: $layout-breakpoint-sm) {
96 122 height: 46px;
  123 + }
  124 + flex-direction: column-reverse;
  125 + @media (min-width: $layout-breakpoint-sm) {
97 126 flex-direction: row-reverse;
98   - div {
  127 + }
  128 + .tb-dashboard-action-panel {
  129 + min-width: 0px;
  130 + height: $half-mobile-toolbar-height;
  131 + @media (min-width: $layout-breakpoint-sm) {
99 132 height: 46px;
100 133 }
  134 + flex-direction: row-reverse;
  135 + div {
  136 + height: $half-mobile-toolbar-height;
  137 + @media (min-width: $layout-breakpoint-sm) {
  138 + height: 46px;
  139 + }
  140 + }
101 141 md-select {
102 142 pointer-events: all;
103 143 }
104 144 tb-states-component {
105 145 pointer-events: all;
106 146 }
  147 + button.md-icon-button {
  148 + min-width: 40px;
  149 + @media (max-width: $layout-breakpoint-sm) {
  150 + min-width: 28px;
  151 + margin: 0px;
  152 + padding: 2px;
  153 + }
  154 + }
107 155 }
108 156 }
109 157 }
... ...
... ... @@ -17,6 +17,10 @@
17 17 @import "~compass-sass-mixins/lib/compass";
18 18 @import '../../scss/constants';
19 19
  20 +$toolbar-height: 50px;
  21 +$fullscreen-toolbar-height: 64px;
  22 +$mobile-toolbar-height: 84px;
  23 +
20 24 section.tb-dashboard-title {
21 25 position: absolute;
22 26 top: 0;
... ... @@ -44,10 +48,10 @@ div.tb-shrinked {
44 48
45 49 tb-details-sidenav.tb-widget-details-sidenav {
46 50 md-sidenav.tb-sidenav-details {
47   - @media (min-width: $layout-breakpoint-gt-sm) {
  51 + @media (min-width: $layout-breakpoint-sm) {
48 52 width: 85% !important;
49 53 }
50   - @media (min-width: $layout-breakpoint-gt-md) {
  54 + @media (min-width: $layout-breakpoint-md) {
51 55 width: 75% !important;
52 56 }
53 57 @media (min-width: $layout-breakpoint-lg) {
... ... @@ -64,7 +68,7 @@ section.tb-dashboard-toolbar {
64 68 position: absolute;
65 69 top: 0px;
66 70 left: 0px;
67   - z-index: 3;
  71 + z-index: 13;
68 72 pointer-events: none;
69 73 &.tb-dashboard-toolbar-opened {
70 74 right: 0px;
... ... @@ -79,10 +83,16 @@ section.tb-dashboard-toolbar {
79 83 .tb-dashboard-container {
80 84 &.tb-dashboard-toolbar-opened {
81 85 &.is-fullscreen {
82   - margin-top: 64px;
  86 + margin-top: $mobile-toolbar-height;
  87 + @media (min-width: $layout-breakpoint-sm) {
  88 + margin-top: $fullscreen-toolbar-height;
  89 + }
83 90 }
84 91 &:not(.is-fullscreen) {
85   - margin-top: 50px;
  92 + margin-top: $mobile-toolbar-height;
  93 + @media (min-width: $layout-breakpoint-sm) {
  94 + margin-top: $toolbar-height;
  95 + }
86 96 @include transition(margin-top .3s cubic-bezier(.55,0,.55,.2));
87 97 }
88 98 }
... ...
... ... @@ -21,14 +21,16 @@
21 21 ng-class="{ 'tb-dashboard-toolbar-opened': vm.toolbarOpened, 'tb-dashboard-toolbar-closed': !vm.toolbarOpened }">
22 22 <tb-dashboard-toolbar ng-show="!vm.widgetEditMode" force-fullscreen="forceFullscreen"
23 23 toolbar-opened="vm.toolbarOpened" on-trigger-click="vm.openToolbar()">
24   - <div class="tb-dashboard-action-panels" flex layout="row" layout-align="start center">
25   - <div class="tb-dashboard-action-panel" flex="50" layout="row" layout-align="start center">
  24 + <div class="tb-dashboard-action-panels" layout-gt-sm="row" layout-align-gt-sm="space-between center" layout="column" layout-align="center stretch">
  25 + <div class="tb-dashboard-action-panel" flex-md="30" layout="row" layout-align-gt-sm="start center" layout-align="space-between center">
26 26 <md-button ng-show="vm.showCloseToolbar()" aria-label="close-toolbar" class="md-icon-button close-action" ng-click="vm.closeToolbar()">
27 27 <md-tooltip md-direction="bottom">
28 28 {{ 'dashboard.close-toolbar' | translate }}
29 29 </md-tooltip>
30 30 <md-icon aria-label="close-toolbar" class="material-icons">arrow_forward</md-icon>
31 31 </md-button>
  32 + <tb-user-menu ng-if="!vm.isPublicUser() && forceFullscreen" hide-xs hide-sm display-user-info="true">
  33 + </tb-user-menu>
32 34 <md-button ng-show="vm.showRightLayoutSwitch()" aria-label="switch-layouts" class="md-icon-button" ng-click="vm.toggleLayouts()">
33 35 <ng-md-icon icon="{{vm.isRightLayoutOpened ? 'arrow_back' : 'menu'}}" options='{"easing": "circ-in-out", "duration": 375, "rotation": "none"}'></ng-md-icon>
34 36 <md-tooltip md-direction="bottom">
... ... @@ -39,8 +41,6 @@
39 41 aria-label="{{ 'fullscreen.fullscreen' | translate }}"
40 42 class="md-icon-button">
41 43 </md-button>
42   - <tb-user-menu ng-if="!vm.isPublicUser() && forceFullscreen" display-user-info="true">
43   - </tb-user-menu>
44 44 <md-button ng-show="vm.isEdit || vm.displayExport()"
45 45 aria-label="{{ 'action.export' | translate }}" class="md-icon-button"
46 46 ng-click="vm.exportDashboard($event)">
... ... @@ -79,8 +79,10 @@
79 79 customer-id="vm.currentCustomerId">
80 80 </tb-dashboard-select>
81 81 </div>
82   - <div class="tb-dashboard-action-panel" flex="50" layout="row" layout-align="end center">
83   - <div layout="row" layout-align="start center" ng-show="vm.isEdit">
  82 + <div class="tb-dashboard-action-panel" flex-md="70" layout="row" layout-align-gt-sm="end center" layout-align="space-between center">
  83 + <tb-user-menu ng-if="!vm.isPublicUser() && forceFullscreen" hide-gt-sm display-user-info="true">
  84 + </tb-user-menu>
  85 + <div flex-xs flex-sm layout="row" layout-align-gt-sm="start center" layout-align="space-between center" ng-show="vm.isEdit">
84 86 <md-button aria-label="{{ 'dashboard.manage-states' | translate }}" class="md-icon-button"
85 87 ng-click="vm.manageDashboardStates($event)">
86 88 <md-tooltip md-direction="bottom">
... ... @@ -96,14 +98,12 @@
96 98 <md-icon aria-label="{{ 'layout.manage' | translate }}" class="material-icons">view_compact</md-icon>
97 99 </md-button>
98 100 </div>
99   - <div layout="row" layout-align="start center">
100   - <tb-states-component ng-if="vm.isEdit" states-controller-id="'default'"
101   - dashboard-ctrl="vm" states="vm.dashboardConfiguration.states">
102   - </tb-states-component>
103   - <tb-states-component ng-if="!vm.isEdit" states-controller-id="vm.dashboardConfiguration.settings.stateControllerId"
104   - dashboard-ctrl="vm" states="vm.dashboardConfiguration.states">
105   - </tb-states-component>
106   - </div>
  101 + <tb-states-component flex-xs flex-sm ng-if="vm.isEdit" states-controller-id="'default'"
  102 + dashboard-ctrl="vm" states="vm.dashboardConfiguration.states">
  103 + </tb-states-component>
  104 + <tb-states-component flex-xs flex-sm ng-if="!vm.isEdit" states-controller-id="vm.dashboardConfiguration.settings.stateControllerId"
  105 + dashboard-ctrl="vm" states="vm.dashboardConfiguration.states">
  106 + </tb-states-component>
107 107 </div>
108 108 </div>
109 109 </tb-dashboard-toolbar>
... ... @@ -146,7 +146,7 @@
146 146 ng-style="{minWidth: vm.rightLayoutWidth(),
147 147 maxWidth: vm.rightLayoutWidth(),
148 148 height: vm.rightLayoutHeight(),
149   - zIndex: 1}"
  149 + zIndex: 12}"
150 150 md-component-id="right-dashboard-layout"
151 151 aria-label="Right dashboard layout"
152 152 md-is-open="vm.rightLayoutOpened"
... ...
... ... @@ -14,6 +14,8 @@
14 14 * limitations under the License.
15 15 */
16 16
  17 +import './default-state-controller.scss';
  18 +
17 19 /*@ngInject*/
18 20 export default function DefaultStateController($scope, $timeout, $location, $state,
19 21 $stateParams, utils, types, dashboardUtils, preservedState) {
... ...
  1 +/**
  2 + * Copyright © 2016-2017 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 +md-select.default-state-controller {
  18 + margin: 0px;
  19 +}
\ No newline at end of file
... ...
... ... @@ -15,7 +15,7 @@
15 15 limitations under the License.
16 16
17 17 -->
18   -<md-select ng-show="vm.displayStateSelection()" aria-label="{{ 'dashboard.state' | translate }}" ng-model="vm.stateObject[0].id">
  18 +<md-select class="default-state-controller" ng-show="vm.displayStateSelection()" aria-label="{{ 'dashboard.state' | translate }}" ng-model="vm.stateObject[0].id">
19 19 <md-option ng-repeat="(stateId, state) in vm.states" ng-value="stateId">
20 20 {{vm.getStateName(stateId, state)}}
21 21 </md-option>
... ...
... ... @@ -14,19 +14,33 @@
14 14 * limitations under the License.
15 15 */
16 16
  17 +@import '../../../scss/constants';
  18 +
  19 +tb-states-component {
  20 + min-width: 0px;
  21 +}
  22 +
17 23 .entity-state-controller {
18 24 .state-divider {
19   - font-size: 28px;
  25 + font-size: 18px;
20 26 padding-left: 15px;
21 27 padding-right: 15px;
  28 + overflow: hidden;
  29 + text-overflow: ellipsis;
  30 + white-space: nowrap;
  31 + pointer-events: none;
22 32 }
23 33 .state-entry {
24   - font-size: 22px;
  34 + font-size: 18px;
  35 + overflow: hidden;
  36 + text-overflow: ellipsis;
  37 + white-space: nowrap;
25 38 outline: none;
26 39 }
27 40 md-select {
  41 + margin: 0px;
28 42 .md-text {
29   - font-size: 22px;
  43 + font-size: 18px;
30 44 font-weight: bold;
31 45 }
32 46 }
... ...
... ... @@ -15,15 +15,13 @@
15 15 limitations under the License.
16 16
17 17 -->
18   -<div class="entity-state-controller">
  18 +<div class="entity-state-controller" layout="row" layout-align="start center">
19 19 <div ng-if="!vm.dashboardCtrl.isMobile || vm.stateObject.length===1" layout="row" layout-align="start center">
20   - <div layout="row" layout-align="start center" ng-repeat="state in vm.stateObject track by $index">
21   - <span class='state-divider' ng-if="$index"> > </span>
22   - <span class='state-entry' ng-style="{fontWeight: $last ? 'bold' : 'normal',
23   - cursor: $last ? 'default' : 'pointer'}" ng-click="vm.navigatePrevState($index)">
24   - {{vm.getStateName($index)}}
25   - </span>
26   - </div>
  20 + <span ng-repeat="state in vm.stateObject track by $index" class='state-entry' ng-style="{fontWeight: $last ? 'bold' : 'normal',
  21 + cursor: $last ? 'default' : 'pointer'}" ng-click="vm.navigatePrevState($index)">
  22 + {{vm.getStateName($index)}}
  23 + <span class='state-divider' ng-hide="$last"> > </span>
  24 + </span>
27 25 </div>
28 26 <md-select ng-if="vm.dashboardCtrl.isMobile && vm.stateObject.length > 1" aria-label="{{ 'dashboard.state' | translate }}" ng-model="vm.selectedStateIndex">
29 27 <md-option ng-repeat="state in vm.stateObject track by $index" ng-value="$index">
... ...
... ... @@ -16,14 +16,14 @@
16 16
17 17 -->
18 18
19   -<section class="tb-aliases-entity-select" layout='row' layout-align="start center" ng-style="{minHeight: '32px', padding: '0 6px'}">
  19 +<section class="tb-aliases-entity-select" layout='row' layout-align="start center">
20 20 <md-button class="md-icon-button" aria-label="{{ 'entity.select-entities' | translate }}" ng-click="openEditMode($event)">
21 21 <md-tooltip md-direction="{{tooltipDirection}}">
22 22 {{ 'entity.select-entities' | translate }}
23 23 </md-tooltip>
24 24 <md-icon aria-label="{{ 'entity.select-entities' | translate }}" class="material-icons">devices_other</md-icon>
25 25 </md-button>
26   - <span hide-xs hide-sm ng-click="openEditMode($event)">
  26 + <span hide-xs hide-sm hide-md ng-click="openEditMode($event)">
27 27 <md-tooltip md-direction="{{tooltipDirection}}">
28 28 {{ 'entity.select-entities' | translate }}
29 29 </md-tooltip>
... ...
... ... @@ -14,6 +14,12 @@
14 14 * limitations under the License.
15 15 */
16 16
  17 +@import '../../../scss/constants';
  18 +
  19 +tb-aliases-entity-select {
  20 + min-width: 52px;
  21 +}
  22 +
17 23 .md-panel {
18 24 &.tb-aliases-entity-select-panel {
19 25 position: absolute;
... ... @@ -38,9 +44,18 @@
38 44 }
39 45 }
40 46
41   -.tb-aliases-entity-select {
  47 +section.tb-aliases-entity-select {
  48 + min-height: 32px;
  49 + padding: 0 6px;
  50 + @media (max-width: $layout-breakpoint-sm) {
  51 + padding: 0px;
  52 + }
42 53 span {
  54 + max-width: 200px;
43 55 pointer-events: all;
44 56 cursor: pointer;
  57 + overflow: hidden;
  58 + text-overflow: ellipsis;
  59 + white-space: nowrap;
45 60 }
46 61 }
... ...
... ... @@ -16,7 +16,7 @@
16 16
17 17 -->
18 18 <section layout="row">
19   - <div hide-xs hide-sm ng-show="vm.displayUserInfo" class="tb-user-info" layout="row">
  19 + <div hide-xs hide-sm hide-md ng-show="vm.displayUserInfo" class="tb-user-info" layout="row">
20 20 <md-icon aria-label="{{ 'home.avatar' | translate }}" class="material-icons tb-mini-avatar">account_circle</md-icon>
21 21 <div layout="column">
22 22 <span class="tb-user-display-name">{{vm.userDisplayName()}}</span>
... ...
... ... @@ -21,10 +21,10 @@
21 21 padding-bottom: 8px;
22 22 }
23 23 tb-dashboard-autocomplete {
24   - @media (min-width: $layout-breakpoint-gt-sm) {
  24 + @media (min-width: $layout-breakpoint-sm) {
25 25 padding-right: 12px;
26 26 }
27   - @media (max-width: $layout-breakpoint-gt-sm) {
  27 + @media (max-width: $layout-breakpoint-sm) {
28 28 padding-bottom: 12px;
29 29 }
30 30 }
... ...
... ... @@ -37,9 +37,3 @@ $layout-breakpoint-sm: 960px !default;
37 37 $layout-breakpoint-md: 1280px !default;
38 38 $layout-breakpoint-xmd: 1600px !default;
39 39 $layout-breakpoint-lg: 1920px !default;
40   -
41   -$layout-breakpoint-gt-xs: 601px !default;
42   -$layout-breakpoint-gt-sm: 961px !default;
43   -$layout-breakpoint-gt-md: 1281px !default;
44   -$layout-breakpoint-gt-xmd: 1601px !default;
45   -$layout-breakpoint-gt-lg: 1921px !default;
\ No newline at end of file
... ...
... ... @@ -549,7 +549,7 @@ section.tb-footer-buttons {
549 549 position: fixed;
550 550 right: 20px;
551 551 bottom: 20px;
552   - z-index: 2;
  552 + z-index: 13;
553 553 pointer-events: none;
554 554 }
555 555
... ...