From ef9cb5be235e48533848a6b5f87cbdeefc8933a3 Mon Sep 17 00:00:00 2001 From: yuri1969 <1969yuri1969@gmail.com> Date: Thu, 29 Jun 2017 20:19:23 +0200 Subject: [PATCH] NIFI-1580 - Allow double-click to display config * Added double-click shortcut opening config/details dialog to processors, connections, ports and labels. * Created a base for further default action selection, disabling, etc. * Omitted default action configuration UI - that might be a separate JIRA ticket. --- .../nifi-web/nifi-web-ui/pom.xml | 1 + .../main/resources/filters/canvas.properties | 1 + .../js/nf/canvas/nf-canvas-bootstrap.js | 10 ++- .../main/webapp/js/nf/canvas/nf-connection.js | 9 +- .../src/main/webapp/js/nf/canvas/nf-graph.js | 23 +++--- .../src/main/webapp/js/nf/canvas/nf-label.js | 7 +- .../src/main/webapp/js/nf/canvas/nf-port.js | 7 +- .../main/webapp/js/nf/canvas/nf-processor.js | 7 +- .../webapp/js/nf/canvas/nf-quick-select.js | 82 +++++++++++++++++++ 9 files changed, 125 insertions(+), 22 deletions(-) create mode 100644 nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-quick-select.js diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/pom.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/pom.xml index 1c1056bdbd..f6124f0c54 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/pom.xml +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/pom.xml @@ -466,6 +466,7 @@ ${staging.dir}/js/nf/canvas/nf-connection-configuration.js ${staging.dir}/js/nf/nf-connection-details.js ${staging.dir}/js/nf/canvas/nf-context-menu.js + ${staging.dir}/js/nf/canvas/nf-quick-select.js ${staging.dir}/js/nf/canvas/nf-selectable.js ${staging.dir}/js/nf/canvas/nf-birdseye.js ${staging.dir}/js/nf/canvas/nf-draggable.js diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/resources/filters/canvas.properties b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/resources/filters/canvas.properties index 82e248069c..a3ab7fc465 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/resources/filters/canvas.properties +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/resources/filters/canvas.properties @@ -50,6 +50,7 @@ nf.canvas.script.tags=\n\ \n\ \n\ +\n\ \n\ \n\ \n\ diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-bootstrap.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-bootstrap.js index 2fa8a2b9df..77ef67a3a0 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-bootstrap.js +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-bootstrap.js @@ -31,6 +31,7 @@ 'nf.Canvas', 'nf.Graph', 'nf.ContextMenu', + 'nf.QuickSelect', 'nf.Shell', 'nf.Settings', 'nf.Snippet', @@ -80,8 +81,8 @@ 'nf.ng.Canvas.OperateCtrl', 'nf.ng.BreadcrumbsDirective', 'nf.ng.DraggableDirective'], - function ($, angular, nfCommon, nfCanvasUtils, nfErrorHandler, nfClient, nfClusterSummary, nfDialog, nfStorage, nfCanvas, nfGraph, nfContextMenu, nfShell, nfSettings, nfActions, nfSnippet, nfQueueListing, nfComponentState, nfComponentVersion, nfDraggable, nfConnectable, nfStatusHistory, nfBirdseye, nfConnectionConfiguration, nfControllerService, nfReportingTask, nfPolicyManagement, nfProcessorConfiguration, nfProcessGroupConfiguration, nfControllerServices, nfRemoteProcessGroupConfiguration, nfRemoteProcessGroupPorts, nfPortConfiguration, nfLabelConfiguration, nfProcessorDetails, nfPortDetails, nfConnectionDetails, nfRemoteProcessGroupDetails, nfGoto, nfNgBridge, appCtrl, appConfig, serviceProvider, breadcrumbsCtrl, headerCtrl, flowStatusCtrl, globalMenuCtrl, toolboxCtrl, processorComponent, inputPortComponent, outputPortComponent, processGroupComponent, remoteProcessGroupComponent, funnelComponent, templateComponent, labelComponent, graphControlsCtrl, navigateCtrl, operateCtrl, breadcrumbsDirective, draggableDirective) { - return factory($, angular, nfCommon, nfCanvasUtils, nfErrorHandler, nfClient, nfClusterSummary, nfDialog, nfStorage, nfCanvas, nfGraph, nfContextMenu, nfShell, nfSettings, nfActions, nfSnippet, nfQueueListing, nfComponentState, nfComponentVersion, nfDraggable, nfConnectable, nfStatusHistory, nfBirdseye, nfConnectionConfiguration, nfControllerService, nfReportingTask, nfPolicyManagement, nfProcessorConfiguration, nfProcessGroupConfiguration, nfControllerServices, nfRemoteProcessGroupConfiguration, nfRemoteProcessGroupPorts, nfPortConfiguration, nfLabelConfiguration, nfProcessorDetails, nfPortDetails, nfConnectionDetails, nfRemoteProcessGroupDetails, nfGoto, nfNgBridge, appCtrl, appConfig, serviceProvider, breadcrumbsCtrl, headerCtrl, flowStatusCtrl, globalMenuCtrl, toolboxCtrl, processorComponent, inputPortComponent, outputPortComponent, processGroupComponent, remoteProcessGroupComponent, funnelComponent, templateComponent, labelComponent, graphControlsCtrl, navigateCtrl, operateCtrl, breadcrumbsDirective, draggableDirective); + function ($, angular, nfCommon, nfCanvasUtils, nfErrorHandler, nfClient, nfClusterSummary, nfDialog, nfStorage, nfCanvas, nfGraph, nfContextMenu, nfQuickSelect, nfShell, nfSettings, nfActions, nfSnippet, nfQueueListing, nfComponentState, nfComponentVersion, nfDraggable, nfConnectable, nfStatusHistory, nfBirdseye, nfConnectionConfiguration, nfControllerService, nfReportingTask, nfPolicyManagement, nfProcessorConfiguration, nfProcessGroupConfiguration, nfControllerServices, nfRemoteProcessGroupConfiguration, nfRemoteProcessGroupPorts, nfPortConfiguration, nfLabelConfiguration, nfProcessorDetails, nfPortDetails, nfConnectionDetails, nfRemoteProcessGroupDetails, nfGoto, nfNgBridge, appCtrl, appConfig, serviceProvider, breadcrumbsCtrl, headerCtrl, flowStatusCtrl, globalMenuCtrl, toolboxCtrl, processorComponent, inputPortComponent, outputPortComponent, processGroupComponent, remoteProcessGroupComponent, funnelComponent, templateComponent, labelComponent, graphControlsCtrl, navigateCtrl, operateCtrl, breadcrumbsDirective, draggableDirective) { + return factory($, angular, nfCommon, nfCanvasUtils, nfErrorHandler, nfClient, nfClusterSummary, nfDialog, nfStorage, nfCanvas, nfGraph, nfContextMenu, nfQuickSelect, nfShell, nfSettings, nfActions, nfSnippet, nfQueueListing, nfComponentState, nfComponentVersion, nfDraggable, nfConnectable, nfStatusHistory, nfBirdseye, nfConnectionConfiguration, nfControllerService, nfReportingTask, nfPolicyManagement, nfProcessorConfiguration, nfProcessGroupConfiguration, nfControllerServices, nfRemoteProcessGroupConfiguration, nfRemoteProcessGroupPorts, nfPortConfiguration, nfLabelConfiguration, nfProcessorDetails, nfPortDetails, nfConnectionDetails, nfRemoteProcessGroupDetails, nfGoto, nfNgBridge, appCtrl, appConfig, serviceProvider, breadcrumbsCtrl, headerCtrl, flowStatusCtrl, globalMenuCtrl, toolboxCtrl, processorComponent, inputPortComponent, outputPortComponent, processGroupComponent, remoteProcessGroupComponent, funnelComponent, templateComponent, labelComponent, graphControlsCtrl, navigateCtrl, operateCtrl, breadcrumbsDirective, draggableDirective); }); } else if (typeof exports === 'object' && typeof module === 'object') { module.exports = factory(require('jquery'), @@ -96,6 +97,7 @@ require('nf.Canvas'), require('nf.Graph'), require('nf.ContextMenu'), + require('nf.QuickSelect'), require('nf.Shell'), require('nf.Settings'), require('nf.Actions'), @@ -158,6 +160,7 @@ root.nf.Canvas, root.nf.Graph, root.nf.ContextMenu, + root.nf.QuickSelect, root.nf.Shell, root.nf.Settings, root.nf.Actions, @@ -208,7 +211,7 @@ root.nf.ng.BreadcrumbsDirective, root.nf.ng.DraggableDirective); } -}(this, function ($, angular, nfCommon, nfCanvasUtils, nfErrorHandler, nfClient, nfClusterSummary, nfDialog, nfStorage, nfCanvas, nfGraph, nfContextMenu, nfShell, nfSettings, nfActions, nfSnippet, nfQueueListing, nfComponentState, nfComponentVersion, nfDraggable, nfConnectable, nfStatusHistory, nfBirdseye, nfConnectionConfiguration, nfControllerService, nfReportingTask, nfPolicyManagement, nfProcessorConfiguration, nfProcessGroupConfiguration, nfControllerServices, nfRemoteProcessGroupConfiguration, nfRemoteProcessGroupPorts, nfPortConfiguration, nfLabelConfiguration, nfProcessorDetails, nfPortDetails, nfConnectionDetails, nfRemoteProcessGroupDetails, nfGoto, nfNgBridge, appCtrl, appConfig, serviceProvider, breadcrumbsCtrl, headerCtrl, flowStatusCtrl, globalMenuCtrl, toolboxCtrl, processorComponent, inputPortComponent, outputPortComponent, processGroupComponent, remoteProcessGroupComponent, funnelComponent, templateComponent, labelComponent, graphControlsCtrl, navigateCtrl, operateCtrl, breadcrumbsDirective, draggableDirective) { +}(this, function ($, angular, nfCommon, nfCanvasUtils, nfErrorHandler, nfClient, nfClusterSummary, nfDialog, nfStorage, nfCanvas, nfGraph, nfContextMenu, nfQuickSelect, nfShell, nfSettings, nfActions, nfSnippet, nfQueueListing, nfComponentState, nfComponentVersion, nfDraggable, nfConnectable, nfStatusHistory, nfBirdseye, nfConnectionConfiguration, nfControllerService, nfReportingTask, nfPolicyManagement, nfProcessorConfiguration, nfProcessGroupConfiguration, nfControllerServices, nfRemoteProcessGroupConfiguration, nfRemoteProcessGroupPorts, nfPortConfiguration, nfLabelConfiguration, nfProcessorDetails, nfPortDetails, nfConnectionDetails, nfRemoteProcessGroupDetails, nfGoto, nfNgBridge, appCtrl, appConfig, serviceProvider, breadcrumbsCtrl, headerCtrl, flowStatusCtrl, globalMenuCtrl, toolboxCtrl, processorComponent, inputPortComponent, outputPortComponent, processGroupComponent, remoteProcessGroupComponent, funnelComponent, templateComponent, labelComponent, graphControlsCtrl, navigateCtrl, operateCtrl, breadcrumbsDirective, draggableDirective) { var config = { urls: { @@ -337,6 +340,7 @@ nfCanvas.View.init(); // initialize the context menu and invert control of the actions nfContextMenu.init(nfActions); + nfQuickSelect.init(nfActions); // initialize the shell and invert control of the context menu nfShell.init(nfContextMenu); nfNgBridge.injector.get('headerCtrl').init(); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js index caf6ff99b8..5f6a14073b 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-connection.js @@ -52,6 +52,7 @@ var nfSelectable; var nfConnectionConfiguration; + var nfQuickSelect; var nfContextMenu; // the dimensions for the connection label @@ -753,7 +754,7 @@ // update URL deep linking params nfCanvasUtils.setURLParameters(); }) - .call(nfContextMenu.activate); + .call(nfContextMenu.activate).call(nfQuickSelect.activate); // update the midpoints nfCanvasUtils.transition(midpoints, transition) @@ -793,7 +794,7 @@ // update URL deep linking params nfCanvasUtils.setURLParameters(); }) - .call(nfContextMenu.activate); + .call(nfContextMenu.activate).call(nfQuickSelect.activate); // connection label connectionLabelContainer.append('rect') @@ -1560,10 +1561,12 @@ * * @param nfSelectableRef The nfSelectable module. * @param nfContextMenuRef The nfContextMenu module. + * @param nfQuickSelectRef The nfQuickSelect module. */ - init: function (nfSelectableRef, nfContextMenuRef, nfConnectionConfigurationRef) { + init: function (nfSelectableRef, nfContextMenuRef, nfQuickSelectRef, nfConnectionConfigurationRef) { nfSelectable = nfSelectableRef; nfContextMenu = nfContextMenuRef; + nfQuickSelect = nfQuickSelectRef; nfConnectionConfiguration = nfConnectionConfigurationRef; connectionMap = d3.map(); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js index 9cc4345b40..0382a39c24 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-graph.js @@ -35,9 +35,10 @@ 'nf.Connectable', 'nf.Draggable', 'nf.Selectable', - 'nf.ContextMenu'], - function ($, d3, nfCommon, nfNgBridge, nfLabel, nfFunnel, nfPort, nfRemoteProcessGroup, nfProcessGroup, nfProcessor, nfConnection, nfConnectionConfiguration, nfCanvasUtils, nfConnectable, nfDraggable, nfSelectable, nfContextMenu) { - return (nf.Graph = factory($, d3, nfCommon, nfNgBridge, nfLabel, nfFunnel, nfPort, nfRemoteProcessGroup, nfProcessGroup, nfProcessor, nfConnection, nfConnectionConfiguration, nfCanvasUtils, nfConnectable, nfDraggable, nfSelectable, nfContextMenu)); + 'nf.ContextMenu', + 'nf.QuickSelect'], + function ($, d3, nfCommon, nfNgBridge, nfLabel, nfFunnel, nfPort, nfRemoteProcessGroup, nfProcessGroup, nfProcessor, nfConnection, nfConnectionConfiguration, nfCanvasUtils, nfConnectable, nfDraggable, nfSelectable, nfContextMenu, nfQuickSelect) { + return (nf.Graph = factory($, d3, nfCommon, nfNgBridge, nfLabel, nfFunnel, nfPort, nfRemoteProcessGroup, nfProcessGroup, nfProcessor, nfConnection, nfConnectionConfiguration, nfCanvasUtils, nfConnectable, nfDraggable, nfSelectable, nfContextMenu, nfQuickSelect)); }); } else if (typeof exports === 'object' && typeof module === 'object') { module.exports = (nf.Graph = @@ -57,7 +58,8 @@ require('nf.Connectable'), require('nf.Draggable'), require('nf.Selectable'), - require('nf.ContextMenu'))); + require('nf.ContextMenu'), + require('nf.QuickSelect'))); } else { nf.Graph = factory(root.$, root.d3, @@ -75,9 +77,10 @@ root.nf.Connectable, root.nf.Draggable, root.nf.Selectable, - root.nf.ContextMenu); + root.nf.ContextMenu, + root.nf.QuickSelect); } -}(this, function ($, d3, nfCommon, nfNgBridge, nfLabel, nfFunnel, nfPort, nfRemoteProcessGroup, nfProcessGroup, nfProcessor, nfConnection, nfConnectionConfiguration, nfCanvasUtils, nfConnectable, nfDraggable, nfSelectable, nfContextMenu) { +}(this, function ($, d3, nfCommon, nfNgBridge, nfLabel, nfFunnel, nfPort, nfRemoteProcessGroup, nfProcessGroup, nfProcessor, nfConnection, nfConnectionConfiguration, nfCanvasUtils, nfConnectable, nfDraggable, nfSelectable, nfContextMenu, nfQuickSelect) { 'use strict'; var combinePorts = function (contents) { @@ -198,13 +201,13 @@ var nfGraph = { init: function () { // initialize the object responsible for each type of component - nfLabel.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu); + nfLabel.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu, nfQuickSelect); nfFunnel.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu); - nfPort.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu); + nfPort.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu, nfQuickSelect); nfRemoteProcessGroup.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu); nfProcessGroup.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu); - nfProcessor.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu); - nfConnection.init(nfSelectable, nfContextMenu, nfConnectionConfiguration); + nfProcessor.init(nfConnectable, nfDraggable, nfSelectable, nfContextMenu, nfQuickSelect); + nfConnection.init(nfSelectable, nfContextMenu, nfQuickSelect, nfConnectionConfiguration); // display the deep link return nfCanvasUtils.showDeepLink(true); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js index cce575c356..b4c6537328 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-label.js @@ -47,6 +47,7 @@ var nfConnectable; var nfDraggable; var nfSelectable; + var nfQuickSelect; var nfContextMenu; var dimensions = { @@ -142,7 +143,7 @@ }); // always support selecting - label.call(nfSelectable.activate).call(nfContextMenu.activate); + label.call(nfSelectable.activate).call(nfContextMenu.activate).call(nfQuickSelect.activate); }; /** @@ -313,12 +314,14 @@ * @param nfDraggableRef The nfDraggable module. * @param nfSelectableRef The nfSelectable module. * @param nfContextMenuRef The nfContextMenu module. + * @param nfQuickSelectRef The nfQuickSelect module. */ - init: function (nfConnectableRef, nfDraggableRef, nfSelectableRef, nfContextMenuRef) { + init: function (nfConnectableRef, nfDraggableRef, nfSelectableRef, nfContextMenuRef, nfQuickSelectRef) { nfConnectable = nfConnectableRef; nfDraggable = nfDraggableRef; nfSelectable = nfSelectableRef; nfContextMenu = nfContextMenuRef; + nfQuickSelect = nfQuickSelectRef; labelMap = d3.map(); removedCache = d3.map(); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js index a574f0cc27..0bc6b8038a 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-port.js @@ -47,6 +47,7 @@ var nfConnectable; var nfDraggable; var nfSelectable; + var nfQuickSelect; var nfContextMenu; var PREVIEW_NAME_LENGTH = 15; @@ -192,7 +193,7 @@ }); // make ports selectable - port.call(nfSelectable.activate).call(nfContextMenu.activate); + port.call(nfSelectable.activate).call(nfContextMenu.activate).call(nfQuickSelect.activate); // only activate dragging and connecting if appropriate port.filter(function (d) { @@ -529,12 +530,14 @@ * @param nfDraggableRef The nfDraggable module. * @param nfSelectableRef The nfSelectable module. * @param nfContextMenuRef The nfContextMenu module. + * @param nfQuickSelectRef The nfQuickSelect module. */ - init: function (nfConnectableRef, nfDraggableRef, nfSelectableRef, nfContextMenuRef) { + init: function (nfConnectableRef, nfDraggableRef, nfSelectableRef, nfContextMenuRef, nfQuickSelectRef) { nfConnectable = nfConnectableRef; nfDraggable = nfDraggableRef; nfSelectable = nfSelectableRef; nfContextMenu = nfContextMenuRef; + nfQuickSelect = nfQuickSelectRef; portMap = d3.map(); removedCache = d3.map(); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js index 09b33dbd1c..648c661c15 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor.js @@ -47,6 +47,7 @@ var nfConnectable; var nfDraggable; var nfSelectable; + var nfQuickSelect; var nfContextMenu; var PREVIEW_NAME_LENGTH = 25; @@ -181,7 +182,7 @@ .text('\uf132'); // make processors selectable - processor.call(nfSelectable.activate).call(nfContextMenu.activate); + processor.call(nfSelectable.activate).call(nfContextMenu.activate).call(nfQuickSelect.activate); }; /** @@ -876,12 +877,14 @@ * @param nfDraggableRef The nfDraggable module. * @param nfSelectableRef The nfSelectable module. * @param nfContextMenuRef The nfContextMenu module. + * @param nfQuickSelectRef The nfQuickSelect module. */ - init: function (nfConnectableRef, nfDraggableRef, nfSelectableRef, nfContextMenuRef) { + init: function (nfConnectableRef, nfDraggableRef, nfSelectableRef, nfContextMenuRef, nfQuickSelectRef) { nfConnectable = nfConnectableRef; nfDraggable = nfDraggableRef; nfSelectable = nfSelectableRef; nfContextMenu = nfContextMenuRef; + nfQuickSelect = nfQuickSelectRef; processorMap = d3.map(); removedCache = d3.map(); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-quick-select.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-quick-select.js new file mode 100644 index 0000000000..93e9b1e45e --- /dev/null +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-quick-select.js @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* global define, module, require, exports */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + define(['d3', + 'nf.CanvasUtils'], + function (d3, nfCanvasUtils) { + return (nf.QuickSelect = factory(d3, nfCanvasUtils)); + }); + } else if (typeof exports === 'object' && typeof module === 'object') { + module.exports = (nf.QuickSelect = + factory(require('d3'), + require('nf.CanvasUtils'))); + } else { + nf.QuickSelect = factory( + root.d3, + root.nf.CanvasUtils); + } +}(this, function (d3, nfCanvasUtils) { + 'use strict'; + + var nfActions; + + var nfQuickSelect = { + /** + * Initialize the context menu. + * + * @param nfActionsRef The nfActions module. + */ + init: function (nfActionsRef) { + nfActions = nfActionsRef; + }, + + /** + * Attempts to show configuration or details dialog for the specified slection. + */ + quickSelect: function () { + var selection = nfCanvasUtils.getSelection(); + + if (nfCanvasUtils.isConfigurable(selection)) { + nfActions.showConfiguration(selection); + } else if (nfCanvasUtils.hasDetails(selection)) { + nfActions.showDetails(selection); + } + + // stop propagation and prevent default + d3.event.preventDefault(); + d3.event.stopPropagation(); + }, + + /** + * Activates the quick select behavior for the components in the specified selection. + * + * @param {selection} components + */ + activate: function (components) { + components.on('dblclick', function () { + // get the clicked component to update selection + nfQuickSelect.quickSelect(); + }); + } + }; + + return nfQuickSelect; +})); \ No newline at end of file