Rule Node tooltips
This commit is contained in:
parent
46597ebcdd
commit
dff2ca0cb1
@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
import './rulechain.scss';
|
import './rulechain.scss';
|
||||||
|
|
||||||
|
import 'tooltipster/dist/css/tooltipster.bundle.min.css';
|
||||||
|
import 'tooltipster/dist/js/tooltipster.bundle.min.js';
|
||||||
|
import 'tooltipster/dist/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css';
|
||||||
|
|
||||||
/* eslint-disable import/no-unresolved, import/default */
|
/* eslint-disable import/no-unresolved, import/default */
|
||||||
|
|
||||||
import addRuleNodeTemplate from './add-rulenode.tpl.html';
|
import addRuleNodeTemplate from './add-rulenode.tpl.html';
|
||||||
@ -30,7 +34,7 @@ const aKeyCode = 65;
|
|||||||
const escKeyCode = 27;
|
const escKeyCode = 27;
|
||||||
|
|
||||||
/*@ngInject*/
|
/*@ngInject*/
|
||||||
export function RuleChainController($stateParams, $scope, $q, $mdUtil, $mdExpansionPanel, $document, $mdDialog, $filter, types, ruleChainService, Modelfactory, flowchartConstants, ruleChain, ruleChainMetaData) {
|
export function RuleChainController($stateParams, $scope, $compile, $q, $mdUtil, $timeout, $mdExpansionPanel, $document, $mdDialog, $filter, types, ruleChainService, Modelfactory, flowchartConstants, ruleChain, ruleChainMetaData) {
|
||||||
|
|
||||||
var vm = this;
|
var vm = this;
|
||||||
|
|
||||||
@ -139,6 +143,82 @@ export function RuleChainController($stateParams, $scope, $q, $mdUtil, $mdExpans
|
|||||||
vm.editingRuleNodeLink = angular.copy(edge);
|
vm.editingRuleNodeLink = angular.copy(edge);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
vm.nodeLibCallbacks = {
|
||||||
|
nodeCallbacks: {
|
||||||
|
'mouseEnter': function (event, node) {
|
||||||
|
displayNodeDescriptionTooltip(event, node);
|
||||||
|
},
|
||||||
|
'mouseLeave': function () {
|
||||||
|
destroyTooltips();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.typeHeaderMouseEnter = function(event, typeId) {
|
||||||
|
displayTooltip(event,
|
||||||
|
'<div class="tb-rule-node-tooltip">' +
|
||||||
|
'<div id="tooltip-content" layout="column">' +
|
||||||
|
'<div class="tb-node-title">' + typeId + '</div>' +
|
||||||
|
'<div class="tb-node-description">' + 'Some description of component type' + '</div>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>'
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.destroyTooltips = destroyTooltips;
|
||||||
|
|
||||||
|
function destroyTooltips() {
|
||||||
|
if (vm.tooltipTimeout) {
|
||||||
|
$timeout.cancel(vm.tooltipTimeout);
|
||||||
|
vm.tooltipTimeout = null;
|
||||||
|
}
|
||||||
|
var instances = angular.element.tooltipster.instances();
|
||||||
|
instances.forEach((instance) => {
|
||||||
|
instance.destroy();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayNodeDescriptionTooltip(event, node) {
|
||||||
|
displayTooltip(event,
|
||||||
|
'<div class="tb-rule-node-tooltip">' +
|
||||||
|
'<div id="tooltip-content" layout="column">' +
|
||||||
|
'<div class="tb-node-title">' + node.component.name + '</div>' +
|
||||||
|
'<div class="tb-node-description">' + 'Some description of node' + '</div>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayTooltip(event, content) {
|
||||||
|
destroyTooltips();
|
||||||
|
vm.tooltipTimeout = $timeout(() => {
|
||||||
|
var element = angular.element(event.target);
|
||||||
|
element.tooltipster(
|
||||||
|
{
|
||||||
|
theme: 'tooltipster-shadow',
|
||||||
|
delay: 100,
|
||||||
|
trigger: 'custom',
|
||||||
|
triggerOpen: {
|
||||||
|
click: false,
|
||||||
|
tap: false
|
||||||
|
},
|
||||||
|
triggerClose: {
|
||||||
|
click: true,
|
||||||
|
tap: true,
|
||||||
|
scroll: true
|
||||||
|
},
|
||||||
|
side: 'right',
|
||||||
|
trackOrigin: true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
var contentElement = angular.element(content);
|
||||||
|
$compile(contentElement)($scope);
|
||||||
|
var tooltip = element.tooltipster('instance');
|
||||||
|
tooltip.content(contentElement);
|
||||||
|
tooltip.open();
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
vm.editCallbacks = {
|
vm.editCallbacks = {
|
||||||
edgeDoubleClick: function (event, edge) {
|
edgeDoubleClick: function (event, edge) {
|
||||||
var sourceNode = vm.modelservice.nodes.getNodeByConnectorId(edge.source);
|
var sourceNode = vm.modelservice.nodes.getNodeByConnectorId(edge.source);
|
||||||
|
|||||||
@ -23,12 +23,15 @@
|
|||||||
<div class="tb-rulechain-library">
|
<div class="tb-rulechain-library">
|
||||||
<md-expansion-panel-group ng-if="vm.ruleChainLibraryLoaded" class="tb-rulechain-library-panel-group" md-component-id="libraryPanelGroup" auto-expand="true" multiple>
|
<md-expansion-panel-group ng-if="vm.ruleChainLibraryLoaded" class="tb-rulechain-library-panel-group" md-component-id="libraryPanelGroup" auto-expand="true" multiple>
|
||||||
<md-expansion-panel md-component-id="{{typeId}}" id="{{typeId}}" ng-repeat="(typeId, typeModel) in vm.ruleNodeTypesModel">
|
<md-expansion-panel md-component-id="{{typeId}}" id="{{typeId}}" ng-repeat="(typeId, typeModel) in vm.ruleNodeTypesModel">
|
||||||
<md-expansion-panel-collapsed>
|
<md-expansion-panel-collapsed ng-mouseenter="vm.typeHeaderMouseEnter($event, typeId)"
|
||||||
|
ng-mouseleave="vm.destroyTooltips()">
|
||||||
<div class="tb-panel-title" translate>{{vm.types.ruleNodeType[typeId].name}}</div>
|
<div class="tb-panel-title" translate>{{vm.types.ruleNodeType[typeId].name}}</div>
|
||||||
<md-expansion-panel-icon></md-expansion-panel-icon>
|
<md-expansion-panel-icon></md-expansion-panel-icon>
|
||||||
</md-expansion-panel-collapsed>
|
</md-expansion-panel-collapsed>
|
||||||
<md-expansion-panel-expanded>
|
<md-expansion-panel-expanded>
|
||||||
<md-expansion-panel-header ng-click="vm.$mdExpansionPanel(typeId).collapse()">
|
<md-expansion-panel-header ng-mouseenter="vm.typeHeaderMouseEnter($event, typeId)"
|
||||||
|
ng-mouseleave="vm.destroyTooltips()"
|
||||||
|
ng-click="vm.$mdExpansionPanel(typeId).collapse()">
|
||||||
<div class="tb-panel-title" translate>{{vm.types.ruleNodeType[typeId].name}}</div>
|
<div class="tb-panel-title" translate>{{vm.types.ruleNodeType[typeId].name}}</div>
|
||||||
<md-expansion-panel-icon></md-expansion-panel-icon>
|
<md-expansion-panel-icon></md-expansion-panel-icon>
|
||||||
</md-expansion-panel-header>
|
</md-expansion-panel-header>
|
||||||
@ -36,6 +39,7 @@
|
|||||||
<fc-canvas id="tb-rulechain-{{typeId}}"
|
<fc-canvas id="tb-rulechain-{{typeId}}"
|
||||||
model="vm.ruleNodeTypesModel[typeId].model" selected-objects="vm.ruleNodeTypesModel[typeId].selectedObjects"
|
model="vm.ruleNodeTypesModel[typeId].model" selected-objects="vm.ruleNodeTypesModel[typeId].selectedObjects"
|
||||||
automatic-resize="false"
|
automatic-resize="false"
|
||||||
|
callbacks="vm.nodeLibCallbacks"
|
||||||
node-width="170"
|
node-width="170"
|
||||||
node-height="50"
|
node-height="50"
|
||||||
drop-target-id="'tb-rulchain-canvas'"></fc-canvas>
|
drop-target-id="'tb-rulchain-canvas'"></fc-canvas>
|
||||||
|
|||||||
@ -18,7 +18,10 @@
|
|||||||
<div
|
<div
|
||||||
id="{{node.id}}"
|
id="{{node.id}}"
|
||||||
ng-attr-style="position: absolute; top: {{ node.y }}px; left: {{ node.x }}px;"
|
ng-attr-style="position: absolute; top: {{ node.y }}px; left: {{ node.x }}px;"
|
||||||
ng-dblclick="callbacks.doubleClick($event, node)">
|
ng-dblclick="callbacks.doubleClick($event, node)"
|
||||||
|
ng-mouseover="callbacks.mouseOver($event, node)"
|
||||||
|
ng-mouseenter="callbacks.mouseEnter($event, node)"
|
||||||
|
ng-mouseleave="callbacks.mouseLeave($event, node)">
|
||||||
<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