Rule Chain hover and select improvements.
This commit is contained in:
parent
68a943e267
commit
7b1a39fb68
@ -1177,6 +1177,7 @@ export default angular.module('thingsboard.locale', [])
|
|||||||
"type": "Type",
|
"type": "Type",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"delete": "Delete rule node",
|
"delete": "Delete rule node",
|
||||||
|
"delete-selected-objects": "Delete selected nodes and connections",
|
||||||
"rulenode-details": "Rule node details",
|
"rulenode-details": "Rule node details",
|
||||||
"debug-mode": "Debug mode",
|
"debug-mode": "Debug mode",
|
||||||
"configuration": "Configuration",
|
"configuration": "Configuration",
|
||||||
|
|||||||
@ -81,6 +81,9 @@ export function RuleChainController($stateParams, $scope, $compile, $q, $mdUtil,
|
|||||||
vm.saveRuleChain = saveRuleChain;
|
vm.saveRuleChain = saveRuleChain;
|
||||||
vm.revertRuleChain = revertRuleChain;
|
vm.revertRuleChain = revertRuleChain;
|
||||||
|
|
||||||
|
vm.objectsSelected = objectsSelected;
|
||||||
|
vm.deleteSelected = deleteSelected;
|
||||||
|
|
||||||
vm.keyDown = function (evt) {
|
vm.keyDown = function (evt) {
|
||||||
if (evt.keyCode === ctrlKeyCode) {
|
if (evt.keyCode === ctrlKeyCode) {
|
||||||
vm.ctrlDown = true;
|
vm.ctrlDown = true;
|
||||||
@ -632,6 +635,14 @@ export function RuleChainController($stateParams, $scope, $compile, $q, $mdUtil,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function objectsSelected() {
|
||||||
|
return vm.modelservice.nodes.getSelectedNodes().length > 0 ||
|
||||||
|
vm.modelservice.edges.getSelectedEdges().length > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteSelected() {
|
||||||
|
vm.modelservice.deleteSelected();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@ngInject*/
|
/*@ngInject*/
|
||||||
|
|||||||
@ -121,10 +121,6 @@
|
|||||||
.fc-node {
|
.fc-node {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
outline: none;
|
outline: none;
|
||||||
&.fc-hover, &.fc-selected {
|
|
||||||
-webkit-filter: brightness(70%);
|
|
||||||
filter: brightness(70%);
|
|
||||||
}
|
|
||||||
&.fc-dragging {
|
&.fc-dragging {
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
}
|
||||||
@ -132,6 +128,26 @@
|
|||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
.fc-node-overlay {
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: #000;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
&.fc-hover {
|
||||||
|
.fc-node-overlay {
|
||||||
|
opacity: 0.25;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.fc-selected {
|
||||||
|
.fc-node-overlay {
|
||||||
|
opacity: 0.25;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.fc-leftConnectors, .fc-rightConnectors {
|
.fc-leftConnectors, .fc-rightConnectors {
|
||||||
@ -181,6 +197,7 @@
|
|||||||
stroke: gray;
|
stroke: gray;
|
||||||
stroke-width: 4;
|
stroke-width: 4;
|
||||||
fill: transparent;
|
fill: transparent;
|
||||||
|
transition: stroke-width .2s;
|
||||||
&.fc-selected {
|
&.fc-selected {
|
||||||
stroke: red;
|
stroke: red;
|
||||||
stroke-width: 4;
|
stroke-width: 4;
|
||||||
@ -232,20 +249,29 @@
|
|||||||
.fc-edge-label {
|
.fc-edge-label {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
pointer-events: none;
|
transition: transform .2s;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
|
&.fc-hover {
|
||||||
|
transform: scale(1.25);
|
||||||
|
}
|
||||||
|
&.fc-selected {
|
||||||
|
.fc-edge-label-text {
|
||||||
|
span {
|
||||||
|
border: solid red;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.fc-edge-label-text {
|
.fc-edge-label-text {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
-webkit-transform: translate(-50%, -50%);
|
||||||
-webkit-transform: translateX(-50%);
|
transform: translate(-50%, -50%);
|
||||||
transform: translateX(-50%);
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
top: 5px;
|
|
||||||
span {
|
span {
|
||||||
border: solid 2px #003a79;
|
border: solid 2px #003a79;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
@ -255,6 +281,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fc-select-rectangle {
|
||||||
|
border: 2px dashed #5262ff;
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(20,125,255,0.1);
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes dash {
|
@keyframes dash {
|
||||||
from {
|
from {
|
||||||
stroke-dashoffset: 500;
|
stroke-dashoffset: 500;
|
||||||
|
|||||||
@ -112,6 +112,13 @@
|
|||||||
</tb-details-sidenav>
|
</tb-details-sidenav>
|
||||||
</section>
|
</section>
|
||||||
<section layout="row" layout-wrap class="tb-footer-buttons md-fab" layout-align="start end">
|
<section layout="row" layout-wrap class="tb-footer-buttons md-fab" layout-align="start end">
|
||||||
|
<md-button ng-disabled="$root.loading" ng-show="vm.objectsSelected()" class="tb-btn-footer md-accent md-hue-2 md-fab"
|
||||||
|
ng-click="vm.deleteSelected()" aria-label="{{ 'action.delete' | translate }}">
|
||||||
|
<md-tooltip md-direction="top">
|
||||||
|
{{ 'rulenode.delete-selected-objects' | translate }}
|
||||||
|
</md-tooltip>
|
||||||
|
<ng-md-icon icon="delete"></ng-md-icon>
|
||||||
|
</md-button>
|
||||||
<md-button ng-disabled="$root.loading || !vm.isDirty"
|
<md-button ng-disabled="$root.loading || !vm.isDirty"
|
||||||
class="tb-btn-footer md-accent md-hue-2 md-fab"
|
class="tb-btn-footer md-accent md-hue-2 md-fab"
|
||||||
aria-label="{{ 'action.apply' | translate }}"
|
aria-label="{{ 'action.apply' | translate }}"
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
ng-mousedown="callbacks.mouseDown($event, node)"
|
ng-mousedown="callbacks.mouseDown($event, node)"
|
||||||
ng-mouseenter="callbacks.mouseEnter($event, node)"
|
ng-mouseenter="callbacks.mouseEnter($event, node)"
|
||||||
ng-mouseleave="callbacks.mouseLeave($event, node)">
|
ng-mouseleave="callbacks.mouseLeave($event, node)">
|
||||||
|
<div class="{{flowchartConstants.nodeOverlayClass}}"></div>
|
||||||
<div class="tb-rule-node {{node.nodeClass}}">
|
<div class="tb-rule-node {{node.nodeClass}}">
|
||||||
<md-icon aria-label="node-type-icon" flex="15"
|
<md-icon aria-label="node-type-icon" flex="15"
|
||||||
class="material-icons">{{node.icon}}</md-icon>
|
class="material-icons">{{node.icon}}</md-icon>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user