mirror of https://github.com/apache/nifi.git
[NIFI-2888] Display processor fill color when zoomed in/out. This closes #1151.
This commit is contained in:
parent
5f9cae97b7
commit
05ea76dd6f
|
@ -28,9 +28,16 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-name" style="margin-top: 10px;">Preview</div>
|
<div class="setting-name" style="margin-top: 10px;">Preview</div>
|
||||||
<div class="setting-field">
|
<div class="setting-field">
|
||||||
<div id="fill-color-processor-preview" class="icon icon-processor"></div>
|
<div id="fill-color-processor-preview">
|
||||||
|
<div id="fill-color-processor-preview-icon" class="icon icon-processor"></div>
|
||||||
|
<div id="fill-color-processor-preview-name" style="margin-left: 35px; line-height: 25px; font-size: 12px; height: 25px; color: #262626;">Processor Name</div>
|
||||||
|
<div style="width: 100%; height: 9px; border-bottom: 1px solid #c7d2d7; background-color: #f4f6f7;"></div>
|
||||||
|
<div style="width: 100%; height: 9px; border-bottom: 1px solid #c7d2d7; background-color: #ffffff;"></div>
|
||||||
|
<div style="width: 100%; height: 10px; border-bottom: 1px solid #c7d2d7; background-color: #f4f6f7;"></div>
|
||||||
|
<div style="width: 100%; height: 9px; background-color: #ffffff;"></div>
|
||||||
|
</div>
|
||||||
<div id="fill-color-label-preview">
|
<div id="fill-color-label-preview">
|
||||||
<div id="fill-color-label-preview-value">Label</div>
|
<div id="fill-color-label-preview-value">Label Value</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -33,21 +33,45 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#fill-color-processor-preview {
|
#fill-color-processor-preview {
|
||||||
font-size: 64px;
|
width: 173px;
|
||||||
|
height: 65px;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
#fill-color-processor-preview-icon {
|
||||||
|
float: left;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fill-color-processor-preview-icon:before {
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-left: 4px;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fill-color-processor-preview-name {
|
||||||
|
margin-left: 35px;
|
||||||
|
line-height: 25px;
|
||||||
|
font-size: 12px;
|
||||||
|
height: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#fill-color-label-preview {
|
#fill-color-label-preview {
|
||||||
width: 173px;
|
width: 83px;
|
||||||
height: 56px;
|
height: 83px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
border-width: 1px;
|
border: 1px solid rgba(0,0,0,0.25);
|
||||||
border-style: solid;
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
#fill-color-label-preview-value {
|
#fill-color-label-preview-value {
|
||||||
margin-left: 5px;
|
margin-left: 10px;
|
||||||
margin-top: 5px;
|
margin-top: 10px;
|
||||||
float: left;
|
float: left;
|
||||||
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.connections-component-name {
|
div.connections-component-name {
|
||||||
|
|
|
@ -73,12 +73,16 @@ g.component rect.border {
|
||||||
|
|
||||||
g.component rect.border.unauthorized {
|
g.component rect.border.unauthorized {
|
||||||
stroke-width: 1.5;
|
stroke-width: 1.5;
|
||||||
stroke: #ba554a;
|
stroke: #ba554a !important;
|
||||||
stroke-dasharray: 3,3;
|
stroke-dasharray: 3,3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g.component rect.processor-icon-container.unauthorized {
|
||||||
|
fill: #f4f6f7 !important;
|
||||||
|
}
|
||||||
|
|
||||||
g.component.selected rect.border {
|
g.component.selected rect.border {
|
||||||
stroke: #004849;
|
stroke: #004849 !important;
|
||||||
stroke-width: 3;
|
stroke-width: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +170,10 @@ text.processor-type {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rect.processor-icon-container {
|
||||||
|
fill: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
text.processor-icon {
|
text.processor-icon {
|
||||||
font-family: flowfont;
|
font-family: flowfont;
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
|
|
|
@ -405,12 +405,35 @@ nf.ng.Canvas.OperateCtrl = function () {
|
||||||
$('#fill-color-value').val(hex);
|
$('#fill-color-value').val(hex);
|
||||||
|
|
||||||
// always update the preview
|
// always update the preview
|
||||||
$('#fill-color-processor-preview').css('color', hex);
|
if (hex.toLowerCase() === '#ffffff') {
|
||||||
$('#fill-color-label-preview').css({
|
//special case #ffffff implies default fill
|
||||||
'border-color': hex,
|
$('#fill-color-processor-preview-icon').css({
|
||||||
'background': 'linear-gradient(to bottom, #ffffff, ' + hex + ')',
|
'color': nf.Processor.defaultIconColor(),
|
||||||
'filter': 'progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr=#ffffff, endColorstr=' + hex + ')'
|
'background-color': hex
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$('#fill-color-processor-preview-icon').css({
|
||||||
|
'color': nf.Common.determineContrastColor(
|
||||||
|
nf.Common.substringAfterLast(
|
||||||
|
hex, '#')),
|
||||||
|
'background-color': hex
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var borderColor = hex;
|
||||||
|
if (borderColor.toLowerCase() === '#ffffff') {
|
||||||
|
borderColor = 'rgba(0,0,0,0.25)';
|
||||||
|
}
|
||||||
|
$('#fill-color-processor-preview').css({
|
||||||
|
'border-color': borderColor
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#fill-color-label-preview').css({
|
||||||
|
'background': hex
|
||||||
|
});
|
||||||
|
$('#fill-color-label-preview-value').css('color',
|
||||||
|
nf.Common.determineContrastColor(nf.Common.substringAfterLast(hex, '#'))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1104,7 +1104,7 @@ nf.Actions = (function () {
|
||||||
|
|
||||||
var color;
|
var color;
|
||||||
if (allProcessors) {
|
if (allProcessors) {
|
||||||
color = nf.Processor.defaultColor();
|
color = nf.Processor.defaultFillColor();
|
||||||
} else {
|
} else {
|
||||||
color = nf.Label.defaultColor();
|
color = nf.Label.defaultColor();
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,12 +187,18 @@ nf.Birdseye = (function () {
|
||||||
|
|
||||||
// processors
|
// processors
|
||||||
$.each(components.processors, function (_, d) {
|
$.each(components.processors, function (_, d) {
|
||||||
|
//default color
|
||||||
var color = '#dde4eb';
|
var color = '#dde4eb';
|
||||||
|
|
||||||
if (d.permissions.canRead) {
|
if (d.permissions.canRead) {
|
||||||
// use the specified color if appropriate
|
// use the specified color if appropriate
|
||||||
if (nf.Common.isDefinedAndNotNull(d.component.style['background-color'])) {
|
if (nf.Common.isDefinedAndNotNull(d.component.style['background-color'])) {
|
||||||
color = d.component.style['background-color'];
|
color = d.component.style['background-color'];
|
||||||
|
|
||||||
|
//if the background color is #ffffff use the default instead
|
||||||
|
if (color === '#ffffff') {
|
||||||
|
color = '#dde4eb';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -201,6 +201,13 @@ nf.Label = (function () {
|
||||||
lines.push('');
|
lines.push('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var color = nf.Label.defaultColor();
|
||||||
|
|
||||||
|
// use the specified color if appropriate
|
||||||
|
if (nf.Common.isDefinedAndNotNull(d.component.style['background-color'])) {
|
||||||
|
color = d.component.style['background-color'];
|
||||||
|
}
|
||||||
|
|
||||||
// add label value
|
// add label value
|
||||||
$.each(lines, function (i, line) {
|
$.each(lines, function (i, line) {
|
||||||
labelText.append('tspan')
|
labelText.append('tspan')
|
||||||
|
@ -208,6 +215,11 @@ nf.Label = (function () {
|
||||||
.attr('dy', '1.2em')
|
.attr('dy', '1.2em')
|
||||||
.text(function () {
|
.text(function () {
|
||||||
return line;
|
return line;
|
||||||
|
})
|
||||||
|
.style('fill', function (d) {
|
||||||
|
return nf.Common.determineContrastColor(
|
||||||
|
nf.Common.substringAfterLast(
|
||||||
|
color, '#'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -106,18 +106,28 @@ nf.Processor = (function () {
|
||||||
// processor name
|
// processor name
|
||||||
processor.append('text')
|
processor.append('text')
|
||||||
.attr({
|
.attr({
|
||||||
'x': 62,
|
'x': 72,
|
||||||
'y': 20,
|
'y': 23,
|
||||||
'width': 220,
|
'width': 210,
|
||||||
'height': 16,
|
'height': 14,
|
||||||
'class': 'processor-name'
|
'class': 'processor-name'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// processor icon container
|
||||||
|
processor.append('rect')
|
||||||
|
.attr({
|
||||||
|
'x': 0,
|
||||||
|
'y': 0,
|
||||||
|
'width': 50,
|
||||||
|
'height': 50,
|
||||||
|
'class': 'processor-icon-container'
|
||||||
|
});
|
||||||
|
|
||||||
// processor icon
|
// processor icon
|
||||||
processor.append('text')
|
processor.append('text')
|
||||||
.attr({
|
.attr({
|
||||||
'x': 6,
|
'x': 9,
|
||||||
'y': 32,
|
'y': 35,
|
||||||
'class': 'processor-icon'
|
'class': 'processor-icon'
|
||||||
})
|
})
|
||||||
.text('\ue807');
|
.text('\ue807');
|
||||||
|
@ -164,18 +174,18 @@ nf.Processor = (function () {
|
||||||
details.append('text')
|
details.append('text')
|
||||||
.attr({
|
.attr({
|
||||||
'class': 'run-status-icon',
|
'class': 'run-status-icon',
|
||||||
'x': 42,
|
'x': 55,
|
||||||
'y': 20
|
'y': 23
|
||||||
});
|
});
|
||||||
|
|
||||||
// processor type
|
// processor type
|
||||||
details.append('text')
|
details.append('text')
|
||||||
.attr({
|
.attr({
|
||||||
'class': 'processor-type',
|
'class': 'processor-type',
|
||||||
'x': 62,
|
'x': 72,
|
||||||
'y': 35,
|
'y': 37,
|
||||||
'width': 246,
|
'width': 236,
|
||||||
'height': 16
|
'height': 12
|
||||||
});
|
});
|
||||||
|
|
||||||
// -----
|
// -----
|
||||||
|
@ -533,30 +543,67 @@ nf.Processor = (function () {
|
||||||
details.remove();
|
details.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
// ---------------
|
|
||||||
// processor color
|
|
||||||
// ---------------
|
|
||||||
|
|
||||||
// update the processor color
|
// ---------------
|
||||||
updated.select('text.processor-icon')
|
// processor color
|
||||||
.style('fill', function (d) {
|
// ---------------
|
||||||
|
|
||||||
// get the default color
|
//update the processor icon container
|
||||||
var color = nf.Processor.defaultColor();
|
processor.select('rect.processor-icon-container').classed('unauthorized', !processorData.permissions.canRead);
|
||||||
|
|
||||||
if (!d.permissions.canRead) {
|
//update the processor icon
|
||||||
|
processor.select('text.processor-icon').classed('unauthorized', !processorData.permissions.canRead);
|
||||||
|
|
||||||
|
//update the processor border
|
||||||
|
processor.select('rect.border').classed('unauthorized', !processorData.permissions.canRead);
|
||||||
|
|
||||||
|
// use the specified color if appropriate
|
||||||
|
if (processorData.permissions.canRead){
|
||||||
|
if (nf.Common.isDefinedAndNotNull(processorData.component.style['background-color'])) {
|
||||||
|
var color = processorData.component.style['background-color'];
|
||||||
|
|
||||||
|
//update the processor icon container
|
||||||
|
processor.select('rect.processor-icon-container')
|
||||||
|
.style('fill', function (d) {
|
||||||
|
return color;
|
||||||
|
});
|
||||||
|
|
||||||
|
//update the processor border
|
||||||
|
processor.select('rect.border')
|
||||||
|
.style('stroke', function (d) {
|
||||||
|
return color;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// update the processor color
|
||||||
|
processor.select('text.processor-icon')
|
||||||
|
.style('fill', function (d) {
|
||||||
|
|
||||||
|
// get the default color
|
||||||
|
var color = nf.Processor.defaultIconColor();
|
||||||
|
|
||||||
|
if (!d.permissions.canRead) {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// use the specified color if appropriate
|
||||||
|
if (nf.Common.isDefinedAndNotNull(d.component.style['background-color'])) {
|
||||||
|
color = d.component.style['background-color'];
|
||||||
|
|
||||||
|
//special case #ffffff implies default fill
|
||||||
|
if (color.toLowerCase() === '#ffffff') {
|
||||||
|
color = nf.Processor.defaultIconColor();
|
||||||
|
} else {
|
||||||
|
color = nf.Common.determineContrastColor(
|
||||||
|
nf.Common.substringAfterLast(
|
||||||
|
color, '#'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return color;
|
return color;
|
||||||
}
|
});
|
||||||
|
});
|
||||||
// use the specified color if appropriate
|
|
||||||
if (nf.Common.isDefinedAndNotNull(d.component.style['background-color'])) {
|
|
||||||
color = d.component.style['background-color'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return color;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -941,9 +988,16 @@ nf.Processor = (function () {
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the default color that should be used when drawing a processor.
|
* Returns the default fill color that should be used when drawing a processor.
|
||||||
*/
|
*/
|
||||||
defaultColor: function () {
|
defaultFillColor: function () {
|
||||||
|
return '#FFFFFF';
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the default icon color that should be used when drawing a processor.
|
||||||
|
*/
|
||||||
|
defaultIconColor: function () {
|
||||||
return '#ad9897';
|
return '#ad9897';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -384,6 +384,20 @@ nf.Common = (function () {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines the contrast color of a given hex color.
|
||||||
|
*
|
||||||
|
* @param {string} hex The hex color to test.
|
||||||
|
* @returns {string} The contrasting color string.
|
||||||
|
*/
|
||||||
|
determineContrastColor: function (hex){
|
||||||
|
if (parseInt(hex, 16) > 0xffffff/1.5) {
|
||||||
|
return '#000000';
|
||||||
|
}
|
||||||
|
return '#ffffff';
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method for handling ajax errors.
|
* Method for handling ajax errors.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue