From 2de45b62a75deab3b2801b30d5f0a45301afbf90 Mon Sep 17 00:00:00 2001 From: Matt Gilman Date: Wed, 7 Jan 2015 10:22:27 -0500 Subject: [PATCH 1/4] NIFI-231: - Cleaning up all tooltips that are based on dynamic content. --- .../nf/canvas/nf-processor-property-table.js | 8 ++++- .../canvas/nf-remote-process-group-ports.js | 5 +++ .../src/main/webapp/js/nf/nf-common.js | 16 ++++++++++ .../main/webapp/js/nf/nf-processor-details.js | 10 ++++-- .../webapp/js/nf/summary/nf-summary-table.js | 31 ++++++++++++++++--- 5 files changed, 62 insertions(+), 8 deletions(-) diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js index 12a652c950..4c047024f2 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-property-table.js @@ -553,7 +553,13 @@ nf.ProcessorPropertyTable = (function () { * Clears the property table. */ clear: function () { - var propertyGrid = $('#processor-properties').data('gridInstance'); + var propertyGridElement = $('#processor-properties'); + + // clean up any tooltips that may have been generated + nf.Common.cleanUpTooltips(propertyGridElement, 'img.icon-info'); + + // clear the data in the grid + var propertyGrid = propertyGridElement.data('gridInstance'); var propertyData = propertyGrid.getData(); propertyData.setItems([]); } diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js index caadfea188..d80e4ea391 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-remote-process-group-ports.js @@ -161,6 +161,11 @@ nf.RemoteProcessGroupPorts = (function () { $('#remote-process-group-ports-id').text(''); $('#remote-process-group-ports-name').text(''); $('#remote-process-group-ports-url').text(''); + + // clear any tooltips + var dialog = $('#remote-process-group-ports'); + nf.Common.cleanUpTooltips(dialog, 'div.remote-port-removed'); + nf.Common.cleanUpTooltips(dialog, 'img.concurrent-tasks-info'); // clear the input and output ports $('#remote-process-group-input-ports-container').empty(); diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js index 24dcf24596..171b96f3da 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js @@ -295,6 +295,22 @@ nf.Common = { return $('#' + target).removeClass('unset blank').text(''); }, + /** + * Cleans up any tooltips that have been created for the specified container. + * + * @param {jQuery} container + * @param {string} tooltipTarget + */ + cleanUpTooltips: function(container, tooltipTarget) { + container.find(tooltipTarget).each(function () { + var tip = $(this); + if (tip.data('qtip')) { + var api = tip.qtip('api'); + api.destroy(true); + } + }); + }, + /** * Formats the tooltip for the specified property. * diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js index 220338f77b..a3a2589e3d 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/nf-processor-details.js @@ -230,8 +230,14 @@ nf.ProcessorDetails = (function () { // empty the relationship list $('#read-only-auto-terminate-relationship-names').css('border-width', '0').empty(); - // clear the grid - var propertyGrid = $('#read-only-processor-properties').data('gridInstance'); + // get the property grid element + var propertyGridElement = $('#read-only-processor-properties'); + + // clean up any tooltips that may have been generated + nf.Common.cleanUpTooltips(propertyGridElement, 'img.icon-info'); + + // clear the data in the grid + var propertyGrid = propertyGridElement.data('gridInstance'); var propertyData = propertyGrid.getData(); propertyData.setItems([]); diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js index 85826ffe28..969d7bf745 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js @@ -1959,7 +1959,7 @@ nf.SummaryTable = (function () { } }).fail(nf.Common.handleAjaxError); }; - + return { /** * URL for loading system diagnostics. @@ -2040,19 +2040,40 @@ nf.SummaryTable = (function () { var processGroupStatus = response.processGroupStatus; if (nf.Common.isDefinedAndNotNull(processGroupStatus)) { - var processorsGrid = $('#processor-summary-table').data('gridInstance'); + // remove any tooltips from the processor table + var processorsGridElement = $('#processor-summary-table'); + nf.Common.cleanUpTooltips(processorsGridElement, 'img.has-bulletins'); + + // get the processor grid/data + var processorsGrid = processorsGridElement.data('gridInstance'); var processorsData = processorsGrid.getData(); + // get the connections grid/data (do not render bulletins) var connectionsGrid = $('#connection-summary-table').data('gridInstance'); var connectionsData = connectionsGrid.getData(); - var inputPortsGrid = $('#input-port-summary-table').data('gridInstance'); + // remove any tooltips from the input port table + var inputPortsGridElement = $('#input-port-summary-table'); + nf.Common.cleanUpTooltips(inputPortsGridElement, 'img.has-bulletins'); + + // get the input ports grid/data + var inputPortsGrid = inputPortsGridElement.data('gridInstance'); var inputPortsData = inputPortsGrid.getData(); - var outputPortsGrid = $('#output-port-summary-table').data('gridInstance'); + // remove any tooltips from the output port table + var outputPortsGridElement = $('#output-port-summary-table'); + nf.Common.cleanUpTooltips(outputPortsGridElement, 'img.has-bulletins'); + + // get the output ports grid/data + var outputPortsGrid = outputPortsGridElement.data('gridInstance'); var outputPortsData = outputPortsGrid.getData(); - var remoteProcessGroupsGrid = $('#remote-process-group-summary-table').data('gridInstance'); + // remove any tooltips from the remote process group table + var remoteProcessGroupsGridElement = $('#remote-process-group-summary-table'); + nf.Common.cleanUpTooltips(remoteProcessGroupsGridElement, 'img.has-bulletins'); + + // get the remote process groups grid + var remoteProcessGroupsGrid = remoteProcessGroupsGridElement.data('gridInstance'); var remoteProcessGroupsData = remoteProcessGroupsGrid.getData(); var processorItems = []; From 9531219293e9ef8340a502169cca84e6dc94ca0c Mon Sep 17 00:00:00 2001 From: Matt Gilman Date: Wed, 7 Jan 2015 11:49:40 -0500 Subject: [PATCH 2/4] NIFI-196: - Fixing default logging configuration for the user log. --- .../resources/src/main/resources/conf/logback.xml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/nar-bundles/framework-bundle/framework/resources/src/main/resources/conf/logback.xml b/nar-bundles/framework-bundle/framework/resources/src/main/resources/conf/logback.xml index aa4ffeda86..5f4e933ce3 100644 --- a/nar-bundles/framework-bundle/framework/resources/src/main/resources/conf/logback.xml +++ b/nar-bundles/framework-bundle/framework/resources/src/main/resources/conf/logback.xml @@ -82,16 +82,10 @@ log events to the root logger. These messages are only sent to the user-log appender. --> - + - - - - - - - + @@ -100,9 +94,6 @@ - - - From edaa191d37d0abe01a0be1da8c7a317bec96b4ec Mon Sep 17 00:00:00 2001 From: Matt Gilman Date: Wed, 7 Jan 2015 14:08:13 -0500 Subject: [PATCH 3/4] NIFI-232: - Adding a note in the UI that the Event Driven scheduling strategy is experimental. --- .../canvas/processor-configuration.jsp | 4 ++++ .../webapp/css/processor-configuration.css | 15 ++++++++++++ .../nf/canvas/nf-processor-configuration.js | 24 ++++++++++++------- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/processor-configuration.jsp b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/processor-configuration.jsp index fa390d3acf..9d9da2abd8 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/processor-configuration.jsp +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/processor-configuration.jsp @@ -102,6 +102,10 @@
+
diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css index 5fa4f6254f..add52e0752 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/css/processor-configuration.css @@ -111,6 +111,21 @@ div.processor-enabled-container { line-height: 18px; } +#event-driven-warning { + padding-top: 22px; + color: #f00; +} + +#event-driven-warning-icon { + float: left; + margin-top: -2px; + margin-right: 5px; + margin-left: 5px; + width: 18px; + height: 16px; + background-image: url(../images/iconAlert.png); +} + #auto-terminate-relationship-names { border: 0 solid #CCCCCC; height: 280px; diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js index 31bd79eb46..4dec7348a5 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-processor-configuration.js @@ -37,14 +37,14 @@ nf.ProcessorConfiguration = (function () { strategies.push({ text: 'Event driven', value: 'EVENT_DRIVEN', - description: 'Processor will be scheduled to run when triggered by an event (e.g. a FlowFile enters an incoming queue).' + description: 'Processor will be scheduled to run when triggered by an event (e.g. a FlowFile enters an incoming queue). This scheduling strategy is experimental.' }); } else if (processor.config['schedulingStrategy'] === 'EVENT_DRIVEN') { // the processor was once configured for event driven but no longer supports it strategies.push({ text: 'Event driven', value: 'EVENT_DRIVEN', - description: 'Processor will be scheduled to run when triggered by an event (e.g. a FlowFile enters an incoming queue).', + description: 'Processor will be scheduled to run when triggered by an event (e.g. a FlowFile enters an incoming queue). This scheduling strategy is experimental.', disabled: true }); } @@ -506,17 +506,23 @@ nf.ProcessorConfiguration = (function () { select: function (selectedOption) { // show the appropriate panel if (selectedOption.value === 'EVENT_DRIVEN') { + $('#event-driven-warning').show(); + $('#timer-driven-options').hide(); $('#event-driven-options').show(); $('#cron-driven-options').hide(); - } else if (selectedOption.value === 'CRON_DRIVEN') { - $('#timer-driven-options').hide(); - $('#event-driven-options').hide(); - $('#cron-driven-options').show(); } else { - $('#timer-driven-options').show(); - $('#event-driven-options').hide(); - $('#cron-driven-options').hide(); + $('#event-driven-warning').hide(); + + if (selectedOption.value === 'CRON_DRIVEN') { + $('#timer-driven-options').hide(); + $('#event-driven-options').hide(); + $('#cron-driven-options').show(); + } else { + $('#timer-driven-options').show(); + $('#event-driven-options').hide(); + $('#cron-driven-options').hide(); + } } } }); From 6f2e283166b6a52da762dd1a1fd80c4be74be4c6 Mon Sep 17 00:00:00 2001 From: Matt Gilman Date: Wed, 7 Jan 2015 14:25:27 -0500 Subject: [PATCH 4/4] NIFI-231: - Code clean up. - Cleaning up tooltips when options are removed. - Setting the correct style on the tooltips. --- .../webapp/js/jquery/combo/jquery.combo.js | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js index 30f0be9ba1..fdcae440ba 100644 --- a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js +++ b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/combo/jquery.combo.js @@ -46,6 +46,13 @@ * The optionClass option supports specifying a class to apply to the * option element. */ + +/** + * jQuery plugin for a NiFi style combo box. + * + * @param {type} $ + * @returns {undefined} + */ (function ($) { var isUndefined = function (obj) { @@ -93,7 +100,7 @@ // ensure we found the selected option if (isDefinedAndNotNull(selectedOption)) { - $(comboText).removeClass('selected-disabled-option').attr('title', selectedOption.text).text(selectedOption.text).data('text', selectedOption.text).width(combo.outerWidth() - 25); + comboText.removeClass('selected-disabled-option').attr('title', selectedOption.text).text(selectedOption.text).data('text', selectedOption.text).width(combo.outerWidth() - 25); // if the selected option is disabled show it if (selectedOption.disabled === true) { @@ -112,6 +119,7 @@ }; var methods = { + /** * Initializes the combo box. * @@ -130,24 +138,24 @@ combo.empty().unbind().data('options', options); // add a div to hold the text - var comboText = $('
').appendTo(combo); + $('
').appendTo(combo); // add hover effect and handle a combo click combo.addClass('button-normal pointer combo').hover(function () { - $(combo).removeClass('button-normal').addClass('button-over'); + combo.removeClass('button-normal').addClass('button-over'); }, function () { - $(combo).removeClass('button-over').addClass('button-normal'); + combo.removeClass('button-over').addClass('button-normal'); }).click(function (event) { // determine the position of the element in question - var position = $(combo).offset(); + var position = combo.offset(); // create the combo box options beneath it var comboOptions = $('
').addClass('combo-options').css({ 'position': 'absolute', 'left': position.left + 'px', - 'top': (position.top + $(combo).outerHeight() + 1) + 'px', - 'width': ($(combo).outerWidth() - 10) + 'px', + 'top': (position.top + combo.outerHeight() + 1) + 'px', + 'width': (combo.outerWidth() - 10) + 'px', 'overflow-y': 'auto' }); @@ -195,7 +203,7 @@ $('').appendTo(optionElement).qtip({ content: option.description, style: { - classes: 'ui-tooltip-tipped ui-tooltip-shadow' + classes: 'nifi-tooltip' }, show: { solo: true, @@ -224,14 +232,26 @@ if (maxHeight > 0 && actualHeight > maxHeight) { offset += 20; } - comboOptionText.width($(combo).outerWidth() - offset); + comboOptionText.width(combo.outerWidth() - offset); }); // show the glass pane to catch the click events var comboGlassPane = $('
').one('click', function () { - if ($(comboOptions).length !== 0) { - $(comboOptions).remove(); + if (comboOptions.length !== 0) { + // clean up tooltips + comboOptions.find('img').each(function () { + var tip = $(this); + if (tip.data('qtip')) { + var api = tip.qtip('api'); + api.destroy(true); + } + }); + + // remove the options + comboOptions.remove(); } + + // remove the glass pane $(this).remove(); }); @@ -254,6 +274,7 @@ } }); }, + /** * Returns the selected option of the first matching element. */ @@ -267,6 +288,7 @@ return value; }, + /** * Sets the selected option. *