From dff2ca0cb18fe5e03e95fa76dcb9f2ec465fd96f Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Thu, 22 Mar 2018 11:15:22 +0200 Subject: [PATCH] Rule Node tooltips --- ui/src/app/rulechain/rulechain.controller.js | 82 +++++++++++++++++++- ui/src/app/rulechain/rulechain.tpl.html | 8 +- ui/src/app/rulechain/rulenode.tpl.html | 5 +- 3 files changed, 91 insertions(+), 4 deletions(-) diff --git a/ui/src/app/rulechain/rulechain.controller.js b/ui/src/app/rulechain/rulechain.controller.js index 31886b8a28..76d0fec0c5 100644 --- a/ui/src/app/rulechain/rulechain.controller.js +++ b/ui/src/app/rulechain/rulechain.controller.js @@ -16,6 +16,10 @@ 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 */ import addRuleNodeTemplate from './add-rulenode.tpl.html'; @@ -30,7 +34,7 @@ const aKeyCode = 65; const escKeyCode = 27; /*@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; @@ -139,6 +143,82 @@ export function RuleChainController($stateParams, $scope, $q, $mdUtil, $mdExpans 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, + '
' + + '
' + + '
' + typeId + '
' + + '
' + 'Some description of component type' + '
' + + '
' + + '
' + ); + }; + + 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, + '
' + + '
' + + '
' + node.component.name + '
' + + '
' + 'Some description of node' + '
' + + '
' + + '
' + ); + } + + 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 = { edgeDoubleClick: function (event, edge) { var sourceNode = vm.modelservice.nodes.getNodeByConnectorId(edge.source); diff --git a/ui/src/app/rulechain/rulechain.tpl.html b/ui/src/app/rulechain/rulechain.tpl.html index 30f2caa91f..9f1141e887 100644 --- a/ui/src/app/rulechain/rulechain.tpl.html +++ b/ui/src/app/rulechain/rulechain.tpl.html @@ -23,12 +23,15 @@
- +
{{vm.types.ruleNodeType[typeId].name}}
- +
{{vm.types.ruleNodeType[typeId].name}}
@@ -36,6 +39,7 @@ diff --git a/ui/src/app/rulechain/rulenode.tpl.html b/ui/src/app/rulechain/rulenode.tpl.html index f8e08e0d2c..5a521a8333 100644 --- a/ui/src/app/rulechain/rulenode.tpl.html +++ b/ui/src/app/rulechain/rulenode.tpl.html @@ -18,7 +18,10 @@
+ ng-dblclick="callbacks.doubleClick($event, node)" + ng-mouseover="callbacks.mouseOver($event, node)" + ng-mouseenter="callbacks.mouseEnter($event, node)" + ng-mouseleave="callbacks.mouseLeave($event, node)">
{{node.icon}}