Commit 4230262960c61015fdb59d9ee3f87cf281315de4

Authored by Igor Kulikov
1 parent e0b6c323

Add rule node help links. Improve rule nodes description.

... ... @@ -39,9 +39,9 @@ import org.thingsboard.server.common.msg.TbMsg;
39 39 nodeDetails =
40 40 "Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\n" +
41 41 "Node output:\n" +
42   - "If alarm was not cleared, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains 'isClearedAlarm' property " +
43   - "Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>" +
44   - "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>",
  42 + "If alarm was not cleared, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains 'isClearedAlarm' property. " +
  43 + "Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. " +
  44 + "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",
45 45 uiResources = {"static/rulenode/rulenode-core-config.js"},
46 46 configDirective = "tbActionNodeClearAlarmConfig",
47 47 icon = "notifications_off"
... ...
... ... @@ -41,9 +41,9 @@ import org.thingsboard.server.common.msg.TbMsg;
41 41 nodeDetails =
42 42 "Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\n" +
43 43 "Node output:\n" +
44   - "If alarm was not created, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains one of those properties 'isNewAlarm/isExistingAlarm' " +
45   - "Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>" +
46   - "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>",
  44 + "If alarm was not created, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'matadata' will contains one of those properties 'isNewAlarm/isExistingAlarm'. " +
  45 + "Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. " +
  46 + "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",
47 47 uiResources = {"static/rulenode/rulenode-core-config.js"},
48 48 configDirective = "tbActionNodeCreateAlarmConfig",
49 49 icon = "notifications_active"
... ...
... ... @@ -31,8 +31,8 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
31 31 configClazz = TbLogNodeConfiguration.class,
32 32 nodeDescription = "Log incoming messages using JS script for transformation Message into String",
33 33 nodeDetails = "Transform incoming Message with configured JS function to String and log final value into Thingsboard log file. " +
34   - "Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>" +
35   - "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>",
  34 + "Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. " +
  35 + "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",
36 36 uiResources = {"static/rulenode/rulenode-core-config.js"},
37 37 configDirective = "tbActionNodeLogConfig",
38 38 icon = "menu"
... ...
... ... @@ -38,7 +38,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
38 38 name = "generator",
39 39 configClazz = TbMsgGeneratorNodeConfiguration.class,
40 40 nodeDescription = "Periodically generates messages",
41   - nodeDetails = "Generates messages with configurable period. Javascript function used fore message generation.",
  41 + nodeDetails = "Generates messages with configurable period. Javascript function used for message generation.",
42 42 inEnabled = false,
43 43 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
44 44 configDirective = "tbActionNodeGeneratorConfig",
... ...
... ... @@ -35,9 +35,9 @@ import static org.thingsboard.rule.engine.mail.TbSendEmailNode.SEND_EMAIL_TYPE;
35 35 type = ComponentType.TRANSFORMATION,
36 36 name = "to email",
37 37 configClazz = TbMsgToEmailNodeConfiguration.class,
38   - nodeDescription = "Change Message Originator To Tenant/Customer/Related Entity",
39   - nodeDetails = "Related Entity found using configured relation direction and Relation Type. " +
40   - "If multiple Related Entities are found, only first Entity is used as new Originator, other entities are discarded. ",
  38 + nodeDescription = "Transforms message to email message",
  39 + nodeDetails = "Transforms message to email message by populating email fields using values derived from message metadata. " +
  40 + "Set 'SEND_EMAIL' output message type.",
41 41 uiResources = {"static/rulenode/rulenode-core-config.js"},
42 42 configDirective = "tbTransformationNodeToEmailConfig",
43 43 icon = "email"
... ...
... ... @@ -37,10 +37,9 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
37 37 type = ComponentType.EXTERNAL,
38 38 name = "send email",
39 39 configClazz = TbSendEmailNodeConfiguration.class,
40   - nodeDescription = "Log incoming messages using JS script for transformation Message into String",
41   - nodeDetails = "Transform incoming Message with configured JS condition to String and log final value. " +
42   - "Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>" +
43   - "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>",
  40 + nodeDescription = "Sends email message via SMTP server",
  41 + nodeDetails = "Expects messages with 'SEND_EMAIL' message type, usually processed by 'to email' node. " +
  42 + "Will send email message via configured SMTP server.",
44 43 uiResources = {"static/rulenode/rulenode-core-config.js"},
45 44 configDirective = "tbActionNodeSendEmailConfig",
46 45 icon = "send"
... ...
... ... @@ -13,36 +13,36 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -var pluginClazzHelpLinkMap = {
17   - 'org.thingsboard.server.extensions.core.plugin.messaging.DeviceMessagingPlugin': 'pluginDeviceMessaging',
18   - 'org.thingsboard.server.extensions.core.plugin.telemetry.TelemetryStoragePlugin': 'pluginTelemetryStorage',
19   - 'org.thingsboard.server.extensions.core.plugin.rpc.RpcPlugin': 'pluginRpcPlugin',
20   - 'org.thingsboard.server.extensions.core.plugin.mail.MailPlugin': 'pluginMailPlugin',
21   - 'org.thingsboard.server.extensions.rest.plugin.RestApiCallPlugin': 'pluginRestApiCallPlugin',
22   - 'org.thingsboard.server.extensions.core.plugin.time.TimePlugin': 'pluginTimePlugin',
23   - 'org.thingsboard.server.extensions.kafka.plugin.KafkaPlugin': 'pluginKafkaPlugin',
24   - 'org.thingsboard.server.extensions.rabbitmq.plugin.RabbitMqPlugin': 'pluginRabbitMqPlugin'
25 16
26   -};
27   -
28   -var filterClazzHelpLinkMap = {
29   - 'org.thingsboard.server.extensions.core.filter.MsgTypeFilter': 'filterMsgType',
30   - 'org.thingsboard.server.extensions.core.filter.DeviceTelemetryFilter': 'filterDeviceTelemetry',
31   - 'org.thingsboard.server.extensions.core.filter.MethodNameFilter': 'filterMethodName',
32   - 'org.thingsboard.server.extensions.core.filter.DeviceAttributesFilter': 'filterDeviceAttributes'
33   -};
34   -
35   -var processorClazzHelpLinkMap = {
36   - 'org.thingsboard.server.extensions.core.processor.AlarmDeduplicationProcessor': 'processorAlarmDeduplication'
37   -};
38   -
39   -var pluginActionsClazzHelpLinkMap = {
40   - 'org.thingsboard.server.extensions.core.action.rpc.RpcPluginAction': 'pluginActionRpc',
41   - 'org.thingsboard.server.extensions.core.action.mail.SendMailAction': 'pluginActionSendMail',
42   - 'org.thingsboard.server.extensions.core.action.telemetry.TelemetryPluginAction': 'pluginActionTelemetry',
43   - 'org.thingsboard.server.extensions.kafka.action.KafkaPluginAction': 'pluginActionKafka',
44   - 'org.thingsboard.server.extensions.rabbitmq.action.RabbitMqPluginAction': 'pluginActionRabbitMq',
45   - 'org.thingsboard.server.extensions.rest.action.RestApiCallPluginAction': 'pluginActionRestApiCall'
  17 +var ruleNodeClazzHelpLinkMap = {
  18 + 'org.thingsboard.rule.engine.filter.TbJsFilterNode': 'ruleNodeJsFilter',
  19 + 'org.thingsboard.rule.engine.filter.TbJsSwitchNode': 'ruleNodeJsSwitch',
  20 + 'org.thingsboard.rule.engine.filter.TbMsgTypeFilterNode': 'ruleNodeMessageTypeFilter',
  21 + 'org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode': 'ruleNodeMessageTypeSwitch',
  22 + 'org.thingsboard.rule.engine.metadata.TbGetAttributesNode': 'ruleNodeOriginatorAttributes',
  23 + 'org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode': 'ruleNodeCustomerAttributes',
  24 + 'org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode': 'ruleNodeDeviceAttributes',
  25 + 'org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode': 'ruleNodeRelatedAttributes',
  26 + 'org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode': 'ruleNodeTenantAttributes',
  27 + 'org.thingsboard.rule.engine.transform.TbChangeOriginatorNode': 'ruleNodeChangeOriginator',
  28 + 'org.thingsboard.rule.engine.transform.TbTransformMsgNode': 'ruleNodeTransformMsg',
  29 + 'org.thingsboard.rule.engine.mail.TbMsgToEmailNode': 'ruleNodeMsgToEmail',
  30 + 'org.thingsboard.rule.engine.action.TbClearAlarmNode': 'ruleNodeClearAlarm',
  31 + 'org.thingsboard.rule.engine.action.TbCreateAlarmNode': 'ruleNodeCrateAlarm',
  32 + 'org.thingsboard.rule.engine.debug.TbMsgGeneratorNode': 'ruleNodeMsgGenerator',
  33 + 'org.thingsboard.rule.engine.action.TbLogNode': 'ruleNodeLog',
  34 + 'org.thingsboard.rule.engine.rpc.TbSendRPCReplyNode': 'ruleNodeRpcCallReply',
  35 + 'org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode': 'ruleNodeRpcCallRequest',
  36 + 'org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode': 'ruleNodeSaveAttributes',
  37 + 'org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode': 'ruleNodeSaveTimeseries',
  38 + 'tb.internal.RuleChain': 'ruleNodeRuleChain',
  39 + 'org.thingsboard.rule.engine.aws.sns.TbSnsNode': 'ruleNodeAwsSns',
  40 + 'org.thingsboard.rule.engine.aws.sqs.TbSqsNode': 'ruleNodeAwsSqs',
  41 + 'org.thingsboard.rule.engine.kafka.TbKafkaNode': 'ruleNodeKafka',
  42 + 'org.thingsboard.rule.engine.mqtt.TbMqttNode': 'ruleNodeMqtt',
  43 + 'org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode': 'ruleNodeRabbitMq',
  44 + 'org.thingsboard.rule.engine.rest.TbRestApiCallNode': 'ruleNodeRestApiCall',
  45 + 'org.thingsboard.rule.engine.mail.TbSendEmailNode': 'ruleNodeSendEmail'
46 46 };
47 47
48 48 var helpBaseUrl = "https://thingsboard.io";
... ... @@ -52,30 +52,36 @@ export default angular.module('thingsboard.help', [])
52 52 {
53 53 linksMap: {
54 54 outgoingMailSettings: helpBaseUrl + "/docs/user-guide/ui/mail-settings",
55   - plugins: helpBaseUrl + "/docs/user-guide/rule-engine/#plugins",
56   - pluginDeviceMessaging: helpBaseUrl + "/docs/reference/plugins/messaging/",
57   - pluginTelemetryStorage: helpBaseUrl + "/docs/reference/plugins/telemetry/",
58   - pluginRpcPlugin: helpBaseUrl + "/docs/reference/plugins/rpc/",
59   - pluginMailPlugin: helpBaseUrl + "/docs/reference/plugins/mail/",
60   - pluginRestApiCallPlugin: helpBaseUrl + "/docs/reference/plugins/rest/",
61   - pluginTimePlugin: helpBaseUrl + "/docs/reference/plugins/time/",
62   - pluginKafkaPlugin: helpBaseUrl + "/docs/reference/plugins/kafka/",
63   - pluginRabbitMqPlugin: helpBaseUrl + "/docs/reference/plugins/rabbitmq/",
64   - rules: helpBaseUrl + "/docs/user-guide/rule-engine/#rules",
65   - filters: helpBaseUrl + "/docs/user-guide/rule-engine/#filters",
66   - filterMsgType: helpBaseUrl + "/docs/reference/filters/message-type-filter",
67   - filterDeviceTelemetry: helpBaseUrl + "/docs/reference/filters/device-telemetry-filter",
68   - filterMethodName: helpBaseUrl + "/docs/reference/filters/method-name-filter/",
69   - filterDeviceAttributes: helpBaseUrl + "/docs/reference/filters/device-attributes-filter",
70   - processors: helpBaseUrl + "/docs/user-guide/rule-engine/#processors",
71   - processorAlarmDeduplication: "http://thingsboard.io/docs/#q=processorAlarmDeduplication",
72   - pluginActions: helpBaseUrl + "/docs/user-guide/rule-engine/#actions",
73   - pluginActionRpc: helpBaseUrl + "/docs/reference/actions/rpc-plugin-action",
74   - pluginActionSendMail: helpBaseUrl + "/docs/reference/actions/send-mail-action",
75   - pluginActionTelemetry: helpBaseUrl + "/docs/reference/actions/telemetry-plugin-action/",
76   - pluginActionKafka: helpBaseUrl + "/docs/reference/actions/kafka-plugin-action",
77   - pluginActionRabbitMq: helpBaseUrl + "/docs/reference/actions/rabbitmq-plugin-action",
78   - pluginActionRestApiCall: helpBaseUrl + "/docs/reference/actions/rest-api-call-plugin-action",
  55 + ruleEngine: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/overview/",
  56 + ruleNodeJsFilter: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/filter-nodes/#script-filter-node",
  57 + ruleNodeJsSwitch: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/filter-nodes/#switch-node",
  58 + ruleNodeMessageTypeFilter: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/filter-nodes/#message-type-filter-node",
  59 + ruleNodeMessageTypeSwitch: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/filter-nodes/#message-type-switch-node",
  60 + ruleNodeOriginatorAttributes: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/enrichment-nodes/#originator-attributes",
  61 + ruleNodeCustomerAttributes: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/enrichment-nodes/#customer-attributes",
  62 + ruleNodeDeviceAttributes: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/enrichment-nodes/#device-attributes",
  63 + ruleNodeRelatedAttributes: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/enrichment-nodes/#related-attributes",
  64 + ruleNodeTenantAttributes: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/enrichment-nodes/#tenant-attributes",
  65 + ruleNodeChangeOriginator: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/transformation-nodes/#change-originator",
  66 + ruleNodeTransformMsg: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/transformation-nodes/#script-transformation-node",
  67 + ruleNodeMsgToEmail: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/transformation-nodes/#to-email-node",
  68 + ruleNodeClearAlarm: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#clear-alarm-node",
  69 + ruleNodeCrateAlarm: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#create-alarm-node",
  70 + ruleNodeMsgGenerator: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#generator-node",
  71 + ruleNodeLog: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#log-node",
  72 + ruleNodeRpcCallReply: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#rpc-call-reply-node",
  73 + ruleNodeRpcCallRequest: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#rpc-call-request-node",
  74 + ruleNodeSaveAttributes: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#save-attributes-node",
  75 + ruleNodeSaveTimeseries: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/action-nodes/#save-timeseries-node",
  76 + ruleNodeRuleChain: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/rule-chains/",
  77 + ruleNodeAwsSns: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/external-nodes/#aws-sns-node",
  78 + ruleNodeAwsSqs: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/external-nodes/#aws-sqs-node",
  79 + ruleNodeKafka: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/external-nodes/#kafka-node",
  80 + ruleNodeMqtt: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/external-nodes/#mqtt-node",
  81 + ruleNodeRabbitMq: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/external-nodes/#rabbitmq-node",
  82 + ruleNodeRestApiCall: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/external-nodes/#rest-api-call-node",
  83 + ruleNodeSendEmail: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/external-nodes/#send-email-node",
  84 + rulechains: helpBaseUrl + "/docs/user-guide/rule-engine-2-0/rule-chains/",
79 85 tenants: helpBaseUrl + "/docs/user-guide/ui/tenants",
80 86 customers: helpBaseUrl + "/docs/user-guide/ui/customers",
81 87 assets: helpBaseUrl + "/docs/user-guide/ui/assets",
... ... @@ -90,38 +96,11 @@ export default angular.module('thingsboard.help', [])
90 96 widgetsConfigAlarm: helpBaseUrl + "/docs/user-guide/ui/dashboards#alarm",
91 97 widgetsConfigStatic: helpBaseUrl + "/docs/user-guide/ui/dashboards#static",
92 98 },
93   - getPluginLink: function(plugin) {
94   - var link = 'plugins';
95   - if (plugin && plugin.clazz) {
96   - if (pluginClazzHelpLinkMap[plugin.clazz]) {
97   - link = pluginClazzHelpLinkMap[plugin.clazz];
98   - }
99   - }
100   - return link;
101   - },
102   - getFilterLink: function(filter) {
103   - var link = 'filters';
104   - if (filter && filter.clazz) {
105   - if (filterClazzHelpLinkMap[filter.clazz]) {
106   - link = filterClazzHelpLinkMap[filter.clazz];
107   - }
108   - }
109   - return link;
110   - },
111   - getProcessorLink: function(processor) {
112   - var link = 'processors';
113   - if (processor && processor.clazz) {
114   - if (processorClazzHelpLinkMap[processor.clazz]) {
115   - link = processorClazzHelpLinkMap[processor.clazz];
116   - }
117   - }
118   - return link;
119   - },
120   - getPluginActionLink: function(pluginAction) {
121   - var link = 'pluginActions';
122   - if (pluginAction && pluginAction.clazz) {
123   - if (pluginActionsClazzHelpLinkMap[pluginAction.clazz]) {
124   - link = pluginActionsClazzHelpLinkMap[pluginAction.clazz];
  99 + getRuleNodeLink: function(ruleNode) {
  100 + var link = 'ruleEngine';
  101 + if (ruleNode && ruleNode.component && ruleNode.component.clazz) {
  102 + if (ruleNodeClazzHelpLinkMap[ruleNode.component.clazz]) {
  103 + link = ruleNodeClazzHelpLinkMap[ruleNode.component.clazz];
125 104 }
126 105 }
127 106 return link;
... ...
... ... @@ -15,7 +15,7 @@
15 15 limitations under the License.
16 16
17 17 -->
18   -<md-dialog aria-label="{{ 'rulenode.add-link' | translate }}" tb-help="'rulechains'" help-container-id="help-container">
  18 +<md-dialog aria-label="{{ 'rulenode.add-link' | translate }}" tb-help="'ruleEngine'" help-container-id="help-container">
19 19 <form name="theForm" ng-submit="vm.add()">
20 20 <md-toolbar>
21 21 <div class="md-toolbar-tools">
... ...
... ... @@ -15,7 +15,7 @@
15 15 limitations under the License.
16 16
17 17 -->
18   -<md-dialog aria-label="{{ 'rulenode.add' | translate }}" tb-help="'rulechains'" help-container-id="help-container" style="min-width: 650px;">
  18 +<md-dialog aria-label="{{ 'rulenode.add' | translate }}" tb-help="vm.helpLinks.getRuleNodeLink(vm.ruleNode)" help-container-id="help-container" style="min-width: 650px;">
19 19 <form name="theForm" ng-submit="vm.add()">
20 20 <md-toolbar>
21 21 <div class="md-toolbar-tools">
... ...
... ... @@ -30,7 +30,7 @@ import addRuleNodeLinkTemplate from './add-link.tpl.html';
30 30 /*@ngInject*/
31 31 export function RuleChainController($state, $scope, $compile, $q, $mdUtil, $timeout, $mdExpansionPanel, $window, $document, $mdDialog,
32 32 $filter, $translate, hotkeys, types, ruleChainService, itembuffer, Modelfactory, flowchartConstants,
33   - ruleChain, ruleChainMetaData, ruleNodeComponents) {
  33 + ruleChain, ruleChainMetaData, ruleNodeComponents, helpLinks) {
34 34
35 35 var vm = this;
36 36
... ... @@ -113,6 +113,8 @@ export function RuleChainController($state, $scope, $compile, $q, $mdUtil, $time
113 113
114 114 vm.openRuleChainContextMenu = openRuleChainContextMenu;
115 115
  116 + vm.helpLinkIdForRuleNodeType = helpLinkIdForRuleNodeType;
  117 +
116 118 initHotKeys();
117 119
118 120 function openRuleChainContextMenu($event, $mdOpenMousepointMenu) {
... ... @@ -473,6 +475,10 @@ export function RuleChainController($state, $scope, $compile, $q, $mdUtil, $time
473 475
474 476 vm.destroyTooltips = destroyTooltips;
475 477
  478 + function helpLinkIdForRuleNodeType() {
  479 + return helpLinks.getRuleNodeLink(vm.editingRuleNode);
  480 + }
  481 +
476 482 function destroyTooltips() {
477 483 if (vm.tooltipTimeout) {
478 484 $timeout.cancel(vm.tooltipTimeout);
... ...
... ... @@ -202,7 +202,7 @@
202 202 on-toggle-details-edit-mode="vm.onRevertRuleNodeLinkEdit(vm.ruleNodeLinkForm)"
203 203 on-apply-details="vm.saveRuleNodeLink(vm.ruleNodeLinkForm)"
204 204 the-form="vm.ruleNodeLinkForm">
205   - <details-buttons tb-help="vm.helpLinkIdForRuleNodeLink()" help-container-id="link-help-container">
  205 + <details-buttons tb-help="'ruleEngine'" help-container-id="link-help-container">
206 206 <div id="link-help-container"></div>
207 207 </details-buttons>
208 208 <form name="vm.ruleNodeLinkForm" ng-if="vm.isEditingRuleNodeLink">
... ...