1004 lines
27 KiB
SCSS
1004 lines
27 KiB
SCSS
$mapOverlayTop: 8px;
|
||
$mapOverlayRight: 25px;
|
||
$mapOverlayBottom: 25px;
|
||
$mapOverlayLeft: 5px;
|
||
|
||
$mapBubbleWidth: 30px;
|
||
|
||
// bounce mixin =================================================================================================
|
||
@mixin bounce-up-down{
|
||
animation-duration: 1s;
|
||
animation-delay: 0.5s;
|
||
animation-fill-mode: both;
|
||
animation-timing-function: linear;
|
||
animation-iteration-count: infinite;
|
||
animation-name: bounce;
|
||
}
|
||
|
||
@include keyframes(bounce){
|
||
0%, 20%, 50%, 80%, 100% {transform: translateY(0);}
|
||
40% {transform: translateY(-8px);}
|
||
60% {transform: translateY(-4px);}
|
||
}
|
||
|
||
// map overlay ========================================================================================================
|
||
.pf-map-overlay{
|
||
position: absolute;
|
||
display: none; // triggered by js
|
||
z-index: 10000;
|
||
background: rgba($black, 0.25);
|
||
border-radius: 5px;
|
||
|
||
&.pf-map-overlay-timer{
|
||
right: $mapOverlayRight;
|
||
bottom: $mapOverlayBottom;
|
||
width: 36px;
|
||
height: 36px;
|
||
}
|
||
|
||
&.pf-map-overlay-zoom{
|
||
bottom: $mapOverlayBottom;
|
||
left: $mapOverlayLeft;
|
||
width: 26px;
|
||
height: 52px;
|
||
padding: 2px 4px;
|
||
display: block;
|
||
|
||
.pf-zoom-overlay-up,
|
||
.pf-zoom-overlay-down{
|
||
display: block;
|
||
text-align: center;
|
||
font-size: 16px;
|
||
cursor: pointer;
|
||
@include transition(color .18s ease-in-out);
|
||
will-change: color;
|
||
|
||
&:hover{
|
||
color: $orange-dark;
|
||
}
|
||
|
||
&.disabled{
|
||
cursor: not-allowed;
|
||
color: $gray-darker;
|
||
}
|
||
}
|
||
|
||
.pf-zoom-overlay-value{
|
||
display: block;
|
||
margin-top: 2px;
|
||
text-align: center;
|
||
font-size: 11px;
|
||
line-height: 13px;
|
||
@include transition(color .18s ease-in-out);
|
||
will-change: color;
|
||
}
|
||
|
||
.active{
|
||
color: $orange-dark;
|
||
}
|
||
}
|
||
|
||
&.pf-map-overlay-info{
|
||
top: $mapOverlayTop;
|
||
right: $mapOverlayRight;
|
||
height: 36px;
|
||
min-height: 36px;
|
||
min-width: 36px;
|
||
padding: 3px 3px 3px 8px;
|
||
line-height: 26px;
|
||
|
||
i{
|
||
margin: 0; // overwrite default
|
||
margin-top: 5px;
|
||
width: 0; // is animated
|
||
height: 26px;
|
||
opacity: 0; // is animated
|
||
color: $gray-light;
|
||
transform: scale(0);
|
||
transform-origin: 50% 50% 0px;
|
||
@include transition(color .18s ease-in-out );
|
||
cursor: help;
|
||
will-change: all;
|
||
|
||
&.fas, &.far{
|
||
font-size: 20px;
|
||
}
|
||
|
||
&.glyphicon{
|
||
margin-top: 1px;
|
||
font-size: 22px;
|
||
padding-left: 3px;
|
||
}
|
||
|
||
&.active, &:hover{
|
||
color: $orange-dark;
|
||
}
|
||
}
|
||
}
|
||
|
||
&.pf-map-overlay-local{
|
||
top: 54px;
|
||
right: $mapOverlayRight;
|
||
min-height: 80px;
|
||
width: 32px;
|
||
display: block;
|
||
will-change: width;
|
||
|
||
.pf-map-overlay-local-content {
|
||
margin-right: 36px;
|
||
padding: 5px 0 5px 5px;
|
||
overflow: hidden;
|
||
|
||
.pf-map-overlay-headline{
|
||
font-size: 12px;
|
||
font-family: $font-family-bold;
|
||
white-space: nowrap;
|
||
|
||
.badge{
|
||
margin-left: 5px;
|
||
}
|
||
|
||
.pf-system-sec{
|
||
cursor: default; // overwrite
|
||
}
|
||
}
|
||
|
||
.pf-local-table {
|
||
font-size: 10px;
|
||
|
||
&.no-footer{
|
||
border-bottom: 1px solid transparent; // overwrite default
|
||
}
|
||
|
||
td {
|
||
white-space: nowrap;
|
||
}
|
||
}
|
||
|
||
.dataTables_paginate,
|
||
.dataTables_empty{
|
||
white-space: nowrap;
|
||
padding-top: 3px; // overwrite default
|
||
}
|
||
|
||
.pf-map-overlay-toolbar{
|
||
.pf-map-overlay-toolbar-icon{
|
||
vertical-align: 0; // overwrite default
|
||
margin-top: 14px;
|
||
}
|
||
|
||
.pf-map-overlay-toolbar-checkbox{
|
||
display: inline-block;
|
||
margin-bottom: 0; // overwrite default
|
||
}
|
||
}
|
||
}
|
||
|
||
.pf-map-overlay-local-main{
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
height: 100%;
|
||
padding: 3px;
|
||
width: 32px;
|
||
cursor: pointer;
|
||
text-align: center;
|
||
border-left: 1px solid $gray-darker;
|
||
|
||
.pf-map-overlay-local-trigger{
|
||
margin-bottom: 10px;
|
||
|
||
&:hover, &.right{
|
||
color: $orange-dark; // overlay open
|
||
}
|
||
}
|
||
|
||
i{
|
||
font-size: 12px;
|
||
}
|
||
}
|
||
|
||
.pf-map-overlay-local-jumps{
|
||
position: absolute;
|
||
bottom: 5px;
|
||
width: calc(100% - 6px);
|
||
}
|
||
|
||
.badge{
|
||
font-family: Arial, sans-serif; // fix for element width on custom font family
|
||
background-color: $gray-darker;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
// 20x20px grid background
|
||
.pf-grid-small{
|
||
&:before{
|
||
content: ' ';
|
||
display: block;
|
||
position: absolute;
|
||
left: 0;
|
||
top: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
opacity: 0.6;
|
||
//background: inline-image("/grid_40x40.png") !important;
|
||
background: url('data:image/png;base64,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') !important;
|
||
}
|
||
}
|
||
|
||
.pf-map-region {
|
||
.pf-system-head-region {
|
||
display: block !important;
|
||
}
|
||
}
|
||
|
||
// class gets applied to body tag if system/connection gets dragged
|
||
// to prevent cursor "flicker" we need to change the cursor for "neighbored" elements
|
||
.jtk-drag-select{
|
||
.pf-map{
|
||
cursor: grab !important;
|
||
.pf-system{
|
||
cursor: grab !important;
|
||
.pf-system-head{
|
||
cursor: grab !important;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.pf-map{
|
||
width: $mapWidth;
|
||
height: $mapHeight;
|
||
position: relative;
|
||
font-family: $font-family-bold;
|
||
will-change: transform;
|
||
|
||
&.pf-map-move{
|
||
cursor: move !important;
|
||
}
|
||
|
||
// jsPlumb classes ==================================================================================================
|
||
// gets applied to system that is currently being dragged
|
||
.jtk-drag{
|
||
@extend .pf-system-selected;
|
||
}
|
||
|
||
// gets applied to "endpoints", "overlays" and <svg>´s if <svg> is hovered
|
||
.jtk-hover:not(.jtk-overlay){
|
||
@include bounce-up-down; // label should not bounce
|
||
}
|
||
|
||
// gets applied to source/target (system) if <svg> or endpoint is hovered
|
||
.jtk-source-hover, .jtk-target-hover{
|
||
@include bounce-up-down;
|
||
@include box-shadow(0 6px 12px rgba(0,0,0,.3));
|
||
}
|
||
|
||
// gets applied to *all* systems that are target for a drop of current element
|
||
.jtk-drag-active{
|
||
@include transition(box-shadow 0.12s ease-out, transform 0.08s ease-out !important);
|
||
|
||
}
|
||
|
||
// gets applied to any drop target over which the current element is hovering.
|
||
// When the mouse is released the element having this class will be the recipient of an on drop event
|
||
.jtk-drag-hover{
|
||
|
||
&.jtk-drag-active{
|
||
// @see .pf-system:hover style. We want the same hover style for systems that are active drop-target
|
||
@include box-shadow(0 6px 12px rgba(0,0,0, 0.3));
|
||
transform: translate3d(0, -1px, 0) scale(1.1) !important;
|
||
}
|
||
|
||
}
|
||
|
||
// ==================================================================================================================
|
||
.pf-system{
|
||
position: absolute;
|
||
min-width: 60px;
|
||
height: auto;
|
||
overflow: hidden; // hide bg on round corners -_-
|
||
background-color: $gray-dark;
|
||
font-family: $font-family-bold;
|
||
z-index: 100;
|
||
will-change: top, left, opacity, transform;
|
||
|
||
//opacity: 0; // trigger by js
|
||
border: {
|
||
width: 2px;
|
||
style: solid;
|
||
color: $gray-light;
|
||
}
|
||
border-radius: 5px;
|
||
|
||
// change border color with transition
|
||
@include transition( border-color 0.2s ease-out, box-shadow 0.12s ease-out, opacity 0.12s ease-out);
|
||
transform: translate3d(0, 0, 0);
|
||
|
||
&:not(.jtk-drag-hover):hover{
|
||
// makes the systems "flying" :)
|
||
@include box-shadow(0 6px 12px rgba(0,0,0, 0.3));
|
||
transform: translate3d(0, -1px, 0) !important;
|
||
}
|
||
|
||
.pf-system-head{
|
||
padding: 0 3px 0 4px;
|
||
cursor: pointer;
|
||
font-family: Oxygen, Arial, sans-serif;
|
||
font-weight: bold; // fix for element width on custom font family
|
||
white-space: nowrap;
|
||
backface-visibility: hidden; // fixed blurry text on system scale() -> requires display: inline-block; transform: translateY(0); for child nodes
|
||
|
||
.pf-system-head-name{
|
||
border: none;
|
||
display: inline-block;
|
||
min-width: 50px;
|
||
color: $gray-lighter;
|
||
margin-right: 2px;
|
||
letter-spacing: 0.03em;
|
||
-webkit-font-smoothing: antialiased;
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
}
|
||
|
||
.pf-system-head-counter{
|
||
display: inline-block;
|
||
text-align: right;
|
||
min-width: 8px;
|
||
margin-right: 1px;
|
||
color: $green;
|
||
cursor: help;
|
||
|
||
&:empty{
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
.pf-system-effect{
|
||
font-size: 11px;
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
}
|
||
|
||
.fa-lock{
|
||
font-size: 11px;
|
||
display: none; // triggered by system-lock class
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
}
|
||
|
||
.pf-system-head-expand{
|
||
margin-left: 2px;
|
||
color: $gray-light;
|
||
width: 10px;
|
||
display: none; // triggered by JS
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
}
|
||
|
||
// overwrites "xEditable" style for empty values
|
||
.editable-empty{
|
||
font-style: normal;
|
||
}
|
||
}
|
||
|
||
// ================================================================================================================
|
||
.pf-system-head-info{
|
||
display: flex;
|
||
justify-content: space-between;
|
||
flex-wrap: nowrap;
|
||
color: lighten($gray-light, 10%);
|
||
font-size: 10px;
|
||
line-height: 14px; // 15 is "default", lower it a bit and set fix "height" for 1-2px bottom space
|
||
height: 15px;
|
||
padding-right: 2px; // bring right aligned text in line with wh "effect" icon
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
min-width: 100%; // required for text "truncate" inside
|
||
max-width: 0; // required for text "truncate" inside
|
||
|
||
[class^="pf-system-sec-"]{
|
||
cursor: help;
|
||
}
|
||
}
|
||
|
||
.pf-system-head-info-left,
|
||
.pf-system-head-info-right, {
|
||
display: inline-flex;
|
||
flex: 1 1 auto;
|
||
min-width: 0; // required for text "truncate" inside
|
||
|
||
&:empty{
|
||
display: none;
|
||
}
|
||
> * {
|
||
line-height: inherit;
|
||
text-align: inherit;
|
||
}
|
||
|
||
.pf-system-head-region{
|
||
display: none; // triggered by map option
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
}
|
||
|
||
.pf-system-head-info-left {
|
||
> *:not(:first-child){
|
||
margin-left: 5px;
|
||
}
|
||
}
|
||
|
||
.pf-system-head-info-right {
|
||
justify-content: flex-end;
|
||
|
||
> *:not(:last-child){
|
||
margin-right: 5px;
|
||
}
|
||
}
|
||
|
||
// ================================================================================================================
|
||
|
||
.pf-system-body{
|
||
height: 0px;
|
||
width: 100%;
|
||
overflow: hidden;
|
||
cursor: -moz-grab;
|
||
cursor: -webkit-grab;
|
||
cursor: grab;
|
||
padding: 0 4px;
|
||
white-space: nowrap;
|
||
backface-visibility: hidden; // fixed blurry text on system scale() -> requires display: inline-block; transform: translateY(0); for child nodes
|
||
display: none; // triggered by JS
|
||
will-change: width;
|
||
|
||
border: {
|
||
top: {
|
||
width: 1px;
|
||
style: dashed;
|
||
color: $gray-light;
|
||
}
|
||
}
|
||
|
||
.pf-system-body-item{
|
||
position: relative;
|
||
color: lighten($gray-light, 10%);
|
||
font-size: 10px;
|
||
line-height: 16px;
|
||
height: 16px;
|
||
|
||
.pf-system-body-right{
|
||
float: right;
|
||
color: $orange-light;
|
||
width: 50px;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
display: none; // hover effect
|
||
}
|
||
|
||
// user status ================================================================================================
|
||
.pf-user-status{
|
||
font-size: 6px;
|
||
width: 10px;
|
||
vertical-align: middle;
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
}
|
||
|
||
.pf-system-body-item-name{
|
||
position: absolute;
|
||
display: inline-block;
|
||
width: calc(100% - 10px); // -10px icon
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
transform: translateY(0); // fixed "blurry" text in scaled parent
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
// system head specific tooltip style
|
||
.tooltip{
|
||
|
||
&.in{
|
||
opacity: 1;
|
||
}
|
||
|
||
.tooltip-inner{
|
||
color: $gray-dark;
|
||
background-color: $gray-lighter;
|
||
padding: 3px 3px;
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
// active system
|
||
.pf-system-active:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){
|
||
@include box-shadow($yellow-lighter 0px 0px 8px 0px);
|
||
}
|
||
|
||
|
||
// selected system
|
||
.pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){
|
||
@include box-shadow($red-darker 0px 0px 8px 0px);
|
||
background-color: $red-darker;
|
||
.pf-system-head, .pf-system-body{
|
||
background-color: $red-darker;
|
||
}
|
||
}
|
||
|
||
// locked system
|
||
.pf-system-locked{
|
||
|
||
.pf-system-sec{
|
||
cursor: default !important;
|
||
}
|
||
|
||
.pf-system-body{
|
||
cursor: default !important;
|
||
}
|
||
|
||
.fa-lock{
|
||
color: $gray-light !important;
|
||
display: inline-block !important;
|
||
}
|
||
}
|
||
|
||
// debug system class
|
||
.pf-system-debug{
|
||
position: absolute;
|
||
color: $white;
|
||
font-size: 10px;
|
||
line-height: 22px;
|
||
text-align: center;
|
||
pointer-events: none;
|
||
font-family: Oxygen, Arial, sans-serif;
|
||
z-index: 500;
|
||
|
||
&:before{
|
||
content: attr(data-depth);
|
||
font-family: Oxygen, Arial, sans-serif;
|
||
position: absolute;
|
||
line-height: 10px;
|
||
top: 1px;
|
||
left: 2px;
|
||
color: $black;
|
||
}
|
||
}
|
||
|
||
// Endpoints ========================================================================================================
|
||
.jtk-endpoint{
|
||
z-index: 90;
|
||
|
||
svg {
|
||
circle{
|
||
@include transition(stroke 0.18s ease-out, fill 0.18s ease-out);
|
||
}
|
||
|
||
*{
|
||
stroke: $gray-light;
|
||
cursor: pointer;
|
||
}
|
||
}
|
||
|
||
// hover (with cursor) on endpoints (before drag)
|
||
&:hover{
|
||
circle{
|
||
stroke: $orange !important;
|
||
}
|
||
}
|
||
|
||
// hover class (e.g. connection is hovered -> endpoints get this class)
|
||
&.jtk-hover{
|
||
z-index: 95; // increase z-index -> prevent overlapping multiple endpoints
|
||
|
||
&.pf-map-endpoint-bubble{
|
||
&:after{
|
||
filter: drop-shadow( -3px 3px 4px rgba(0,0,0, 0.3));
|
||
animation-iteration-count: infinite;
|
||
animation-delay: 0.5s;
|
||
}
|
||
}
|
||
}
|
||
|
||
&:after{
|
||
content: var(--svgBubble);
|
||
position: absolute;
|
||
display: block;
|
||
pointer-events: none;
|
||
top: ($mapBubbleWidth / -2) + 7;
|
||
left: ($mapBubbleWidth / -2) + 7;
|
||
width: $mapBubbleWidth;
|
||
height: $mapBubbleWidth;
|
||
z-index: -1;
|
||
will-change: opacity, transform;
|
||
|
||
animation-name: pfBubblePop;
|
||
animation-duration: 0.09s;
|
||
animation-timing-function: cubic-bezier(0.16, 0.87, 0.48, 0.99);
|
||
animation-fill-mode: forwards;
|
||
animation-iteration-count: 1;
|
||
}
|
||
}
|
||
|
||
.pf-map-endpoint-bubble{
|
||
&:after{
|
||
display: block;
|
||
animation-name: pfBubbleWobble;
|
||
animation-duration: 1s;
|
||
animation-timing-function: linear;
|
||
animation-iteration-count: 1;
|
||
animation-fill-mode: both;
|
||
}
|
||
}
|
||
|
||
.jtk-endpoint-drop-allowed{
|
||
circle {
|
||
stroke: $green !important;
|
||
fill: $green !important;
|
||
}
|
||
}
|
||
|
||
.jtk-endpoint-drop-forbidden{
|
||
circle {
|
||
stroke: $red-dark !important;
|
||
fill: $red-dark !important;
|
||
}
|
||
}
|
||
|
||
// Connections ======================================================================================================
|
||
.jtk-connector{
|
||
z-index: 40; // min z-index for connections
|
||
cursor: pointer;
|
||
overflow: unset; // fixes a strange 1px flicker issue when connection is hovered and "jumps" up+down
|
||
@include transition(stroke 0.18s ease-out, opacity 0.18s ease-out);
|
||
will-change: all;
|
||
|
||
path {
|
||
shape-rendering: geometricPrecision; // maybe better render quality ?!
|
||
@include transition(stroke 0.18s ease-out);
|
||
}
|
||
|
||
&.jtk-hover{
|
||
z-index: 80; // max z-index for connections
|
||
filter: drop-shadow(-3px 3px 4px rgba(0,0,0, 0.3));
|
||
|
||
path:first-child{
|
||
stroke: $gray-lightest;
|
||
}
|
||
}
|
||
|
||
&.jtk-dragging{
|
||
z-index: 80; // max z-index for connections
|
||
opacity: 0.4;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-abyssal {
|
||
z-index: 40;
|
||
|
||
path:first-child{
|
||
stroke: rgba(255,255,255,0); // invisible border color
|
||
}
|
||
|
||
path:nth-child(2){
|
||
stroke: darken($pink-darker, 8%);
|
||
stroke-dasharray: 2px, 8px, 2px, 8px;
|
||
}
|
||
|
||
&.jtk-hover{
|
||
path:first-child{
|
||
stroke: rgba(255,255,255,0); // invisible border color
|
||
}
|
||
|
||
path:nth-child(2){
|
||
stroke: $gray-lightest;
|
||
}
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-jumpbridge {
|
||
z-index: 50;
|
||
|
||
path:first-child{
|
||
stroke: rgba(255,255,255,0); // invisible border color
|
||
}
|
||
|
||
path:nth-child(2){
|
||
stroke: $teal-lighter;
|
||
stroke-dasharray: 15px, 10px, 5px, 10px, 5px, 10px;
|
||
}
|
||
|
||
&.jtk-hover{
|
||
path:first-child{
|
||
stroke: rgba(255,255,255,0); // invisible border color
|
||
}
|
||
|
||
path:nth-child(2){
|
||
stroke: $gray-lightest;
|
||
}
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-stargate {
|
||
z-index: 60;
|
||
|
||
path:first-child{
|
||
stroke: $gray-light;
|
||
}
|
||
|
||
path:nth-child(2){
|
||
stroke: $indigo-darkest;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-wh-fresh,
|
||
.pf-map-connection-wh-reduced,
|
||
.pf-map-connection-wh-critical,
|
||
.pf-map-connection-wh-eol{
|
||
z-index: 70;
|
||
}
|
||
|
||
.pf-map-connection-wh-eol {
|
||
|
||
path:first-child{
|
||
stroke: $pink-dark;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-wh-reduced {
|
||
|
||
path:nth-child(2){
|
||
stroke: $orange;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-wh-critical {
|
||
|
||
path:nth-child(2){
|
||
stroke: $red-dark;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-wh-size-s {
|
||
|
||
path:first-child {
|
||
stroke-width: 7px;
|
||
stroke-dasharray: 3px, 10px;
|
||
stroke-linecap: square;
|
||
}
|
||
|
||
path:nth-child(2) {
|
||
stroke-width: 3px;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-wh-size-m {
|
||
|
||
path:first-child {
|
||
stroke-dasharray: 20px, 4px;
|
||
stroke-linecap: butt;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-wh-size-xl {
|
||
|
||
path:first-child {
|
||
stroke-width: 9px;
|
||
}
|
||
|
||
path:nth-child(2) {
|
||
stroke-width: 5px;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-active{
|
||
filter: drop-shadow( 0px 0px 3px $yellow-lighter) !important; // overwrite "hover" shadow
|
||
}
|
||
|
||
.pf-map-connection-process{
|
||
opacity: 0.4 !important;
|
||
|
||
path{
|
||
pointer-events: none;
|
||
}
|
||
}
|
||
|
||
// Overlays =========================================================================================================
|
||
.jtk-overlay{
|
||
opacity: 1;
|
||
pointer-events: none; // click through overlays
|
||
will-change: opacity;
|
||
@include transition(opacity 0.18s ease-out);
|
||
|
||
&.jtk-hover:not(.debug){
|
||
opacity: 0 !important;
|
||
}
|
||
}
|
||
|
||
%map-overlay{
|
||
font-size: 11px;
|
||
z-index: 1020;
|
||
background-color: $gray;
|
||
color: $gray-lighter;
|
||
}
|
||
|
||
.pf-map-component-overlay{
|
||
@extend %map-overlay;
|
||
line-height: 14px;
|
||
padding: 1px 4px;
|
||
border-radius: 6px;
|
||
@include box-shadow(0 3px 6px rgba(0,0,0,.3));
|
||
|
||
&.small{
|
||
-webkit-font-smoothing: antialiased;
|
||
font-family: Arial, sans-serif;
|
||
padding: 1px 2px;
|
||
line-height: 12px;
|
||
min-width: 14px;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
&.icon{
|
||
font-size: 12px;
|
||
line-height: 12px;
|
||
padding: 0;
|
||
width: 12px;
|
||
height: 12px;
|
||
overflow: hidden;
|
||
text-align: center;
|
||
border-radius: 50%;
|
||
}
|
||
|
||
&.debug{
|
||
background-color: $purple-dark;
|
||
opacity: 0.8;
|
||
}
|
||
}
|
||
|
||
// Connection overlays ==============================================================================================
|
||
.pf-map-connection-state-overlay{
|
||
|
||
@extend %map-overlay;
|
||
background-color: transparent;
|
||
font-size: 12px;
|
||
width: 15px;
|
||
height: 15px;
|
||
opacity: 0.4 !important;
|
||
z-index: 1030;
|
||
}
|
||
|
||
.frig{
|
||
background-color: $orange-light;
|
||
color: $gray-darkest;
|
||
}
|
||
|
||
.mass{
|
||
background-color: $red-dark;
|
||
color: $gray-lightest;
|
||
}
|
||
|
||
.eol{
|
||
background-color: $gray;
|
||
color: $pink-dark;
|
||
}
|
||
|
||
// Arrow overlays ===================================================================================================
|
||
.pf-map-connection-arrow-overlay-success{
|
||
.pf-map-connection-arrow-overlay{
|
||
stroke: $gray-dark;
|
||
fill: $green;
|
||
}
|
||
}
|
||
|
||
.pf-map-connection-arrow-overlay-danger{
|
||
.pf-map-connection-arrow-overlay{
|
||
stroke: $gray-dark;
|
||
fill: $red;
|
||
|
||
animation-name: pfPulseDanger;
|
||
animation-duration: 4s;
|
||
animation-iteration-count: infinite;
|
||
}
|
||
}
|
||
}
|
||
|
||
// DratSelect =========================================================================================================
|
||
.pf-map-drag-to-select {
|
||
background: $teal-dark !important;
|
||
display: block;
|
||
position: absolute;
|
||
visibility: hidden; // triggered by js
|
||
opacity: 0; // triggered by js
|
||
z-index: 9000;
|
||
border: 1px dashed $gray-lighter;
|
||
|
||
// positioning set by js
|
||
left: var(--selectBox-left, 0px) ;
|
||
top: var(--selectBox-top, 0px);
|
||
width: var(--selectBox-width, 1px);
|
||
height: var(--selectBox-height, 1px);
|
||
|
||
pointer-events: none; // required for "mouseover" event which should be ignored
|
||
will-change: left, top, width, height, opacity;
|
||
border-radius: 5px;
|
||
@include transition(opacity 0.15s linear);
|
||
|
||
&.active {
|
||
visibility: visible;
|
||
opacity: 0.3;
|
||
}
|
||
}
|
||
|
||
// dialogs ============================================================================================================
|
||
.ui-dialog-content{
|
||
label{
|
||
min-width: 60px;
|
||
}
|
||
}
|
||
|
||
// context menu =======================================================================================================
|
||
.dropdown-menu{
|
||
min-width: 150px; // overwrite default
|
||
font-family: $font-family-bold;
|
||
z-index: 1050; // over tooltips
|
||
will-change: opacity, top, left, transform;
|
||
|
||
a{
|
||
cursor: pointer; // fixed bug on Chrome anchor tag: href="#"
|
||
}
|
||
|
||
i{
|
||
width: 20px;
|
||
pointer-events: none;
|
||
|
||
&.fa-char:before{
|
||
font-weight: bolder;
|
||
}
|
||
}
|
||
|
||
// nested (sub) menu
|
||
&:not(.dropdown-submenu-left){
|
||
.dropdown-menu{
|
||
border-top-left-radius: 0;
|
||
border-bottom-left-radius: 0;
|
||
clip-path: inset(-12px -12px -12px 0px); // hide left box shadow
|
||
}
|
||
}
|
||
|
||
// top menu
|
||
&[role] > li{
|
||
@include pf-navigation-indicator(left);
|
||
}
|
||
|
||
& > li {
|
||
|
||
&.disabled{
|
||
cursor: not-allowed;
|
||
pointer-events: none;
|
||
}
|
||
|
||
& > a {
|
||
padding: 3px 8px; // overwrite default
|
||
}
|
||
}
|
||
|
||
&.dropdown-submenu-left{
|
||
> .dropdown-submenu > .dropdown-menu {
|
||
left: -100%;
|
||
border-top-right-radius: 0;
|
||
border-bottom-right-radius: 0;
|
||
clip-path: inset(-12px 0 -12px -12px); // hide right box shadow
|
||
}
|
||
}
|
||
}
|
||
|
||
// tooltip for a system with active user (they are not positioned within the system element)
|
||
.pf-system-tooltip-inner{
|
||
color: $gray-lighter;
|
||
padding: 2px 4px;
|
||
min-width: 25px; // make sure tooltip is not flickering on low numbers -> fix width
|
||
@include transition( color 0.2s ease-out );
|
||
}
|