Non-animated driver to use shadows
Browse files- src/common/constants.js +1 -1
- src/core/overlay.js +10 -4
- src/core/stage.js +3 -3
- src/driver.scss +15 -9
src/common/constants.js
CHANGED
|
@@ -17,7 +17,7 @@ export const CLASS_DRIVER_HIGHLIGHTED_ELEMENT = 'driver-highlighted-element';
|
|
| 17 |
export const CLASS_POSITION_RELATIVE = 'driver-position-relative';
|
| 18 |
export const CLASS_FIX_STACKING_CONTEXT = 'driver-fix-stacking';
|
| 19 |
|
| 20 |
-
export const
|
| 21 |
export const CLASS_POPOVER_TIP = 'driver-popover-tip';
|
| 22 |
export const CLASS_POPOVER_TITLE = 'driver-popover-title';
|
| 23 |
export const CLASS_POPOVER_DESCRIPTION = 'driver-popover-description';
|
|
|
|
| 17 |
export const CLASS_POSITION_RELATIVE = 'driver-position-relative';
|
| 18 |
export const CLASS_FIX_STACKING_CONTEXT = 'driver-fix-stacking';
|
| 19 |
|
| 20 |
+
export const CLASS_STAGE_NO_ANIMATION = 'driver-stage-no-animation';
|
| 21 |
export const CLASS_POPOVER_TIP = 'driver-popover-tip';
|
| 22 |
export const CLASS_POPOVER_TITLE = 'driver-popover-title';
|
| 23 |
export const CLASS_POPOVER_DESCRIPTION = 'driver-popover-description';
|
src/core/overlay.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
import { ANIMATION_DURATION_MS,
|
| 2 |
import { createNodeFromString } from '../common/utils';
|
| 3 |
|
| 4 |
/**
|
|
@@ -39,9 +39,15 @@ export default class Overlay {
|
|
| 39 |
this.node.style.opacity = '0';
|
| 40 |
|
| 41 |
if (!this.options.animate) {
|
| 42 |
-
this
|
| 43 |
-
|
| 44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
}
|
| 46 |
}
|
| 47 |
|
|
|
|
| 1 |
+
import { ANIMATION_DURATION_MS, ID_OVERLAY, OVERLAY_HTML } from '../common/constants';
|
| 2 |
import { createNodeFromString } from '../common/utils';
|
| 3 |
|
| 4 |
/**
|
|
|
|
| 39 |
this.node.style.opacity = '0';
|
| 40 |
|
| 41 |
if (!this.options.animate) {
|
| 42 |
+
// For non-animation cases remove the overlay because we achieve this overlay by having
|
| 43 |
+
// a higher box-shadow on the stage. Why are we doing it that way? Because the stage that
|
| 44 |
+
// is shown "behind" the highlighted element to make it pop out of the screen, it introduces
|
| 45 |
+
// some stacking contexts issues. To avoid those issues we just make the stage background
|
| 46 |
+
// transparent and achieve the overlay using the shadow so to make the element below it visible
|
| 47 |
+
// through the stage even if there are stacking issues.
|
| 48 |
+
if (this.node.parentElement) {
|
| 49 |
+
this.node.parentElement.removeChild(this.node);
|
| 50 |
+
}
|
| 51 |
}
|
| 52 |
}
|
| 53 |
|
src/core/stage.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
import {
|
| 2 |
import { createNodeFromString } from '../common/utils';
|
| 3 |
import Element from './element';
|
| 4 |
|
|
@@ -34,9 +34,9 @@ export default class Stage extends Element {
|
|
| 34 |
this.node = stage;
|
| 35 |
|
| 36 |
if (!this.options.animate) {
|
| 37 |
-
this.node.classList.add(
|
| 38 |
} else {
|
| 39 |
-
this.node.classList.remove(
|
| 40 |
}
|
| 41 |
}
|
| 42 |
|
|
|
|
| 1 |
+
import { CLASS_STAGE_NO_ANIMATION, ID_STAGE, STAGE_HTML } from '../common/constants';
|
| 2 |
import { createNodeFromString } from '../common/utils';
|
| 3 |
import Element from './element';
|
| 4 |
|
|
|
|
| 34 |
this.node = stage;
|
| 35 |
|
| 36 |
if (!this.options.animate) {
|
| 37 |
+
this.node.classList.add(CLASS_STAGE_NO_ANIMATION);
|
| 38 |
} else {
|
| 39 |
+
this.node.classList.remove(CLASS_STAGE_NO_ANIMATION);
|
| 40 |
}
|
| 41 |
}
|
| 42 |
|
src/driver.scss
CHANGED
|
@@ -4,10 +4,10 @@ $stage-bg: #ffffff;
|
|
| 4 |
$button-bg: #f1f1f1;
|
| 5 |
$disabled-btn-color: #808080;
|
| 6 |
|
| 7 |
-
$popover-
|
| 8 |
-
$overlay-
|
| 9 |
-
$stage-
|
| 10 |
-
$highlighted-element-
|
| 11 |
|
| 12 |
// If you update this duration, make sure to
|
| 13 |
// update `ANIMATION_DURATION_MS` constant
|
|
@@ -25,7 +25,7 @@ div#driver-popover-item {
|
|
| 25 |
min-width: 250px;
|
| 26 |
max-width: 300px;
|
| 27 |
box-shadow: 0 1px 10px rgba(0, 0, 0, 0.4);
|
| 28 |
-
z-index: $popover-
|
| 29 |
|
| 30 |
.driver-popover-tip {
|
| 31 |
border: 5px solid $popover-bg;
|
|
@@ -124,12 +124,17 @@ div#driver-popover-item {
|
|
| 124 |
}
|
| 125 |
}
|
| 126 |
|
| 127 |
-
.driver-no-animation {
|
| 128 |
-webkit-transition: none !important;
|
| 129 |
-moz-transition: none !important;
|
| 130 |
-ms-transition: none !important;
|
| 131 |
-o-transition: none !important;
|
| 132 |
transition: none !important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
}
|
| 134 |
|
| 135 |
div#driver-page-overlay {
|
|
@@ -145,7 +150,7 @@ div#driver-page-overlay {
|
|
| 145 |
zoom: 1;
|
| 146 |
filter: alpha(opacity=75);
|
| 147 |
opacity: 0.75;
|
| 148 |
-
z-index: $overlay-
|
| 149 |
|
| 150 |
-webkit-transition: all $animation-sec;
|
| 151 |
-moz-transition: all $animation-sec;
|
|
@@ -161,8 +166,9 @@ div#driver-highlighted-element-stage {
|
|
| 161 |
height: 50px;
|
| 162 |
width: 300px;
|
| 163 |
background: $stage-bg;
|
| 164 |
-
z-index: $stage-
|
| 165 |
display: none;
|
|
|
|
| 166 |
|
| 167 |
-webkit-transition: all $animation-sec;
|
| 168 |
-moz-transition: all $animation-sec;
|
|
@@ -172,7 +178,7 @@ div#driver-highlighted-element-stage {
|
|
| 172 |
}
|
| 173 |
|
| 174 |
.driver-highlighted-element {
|
| 175 |
-
z-index: $highlighted-element-
|
| 176 |
}
|
| 177 |
|
| 178 |
.driver-position-relative {
|
|
|
|
| 4 |
$button-bg: #f1f1f1;
|
| 5 |
$disabled-btn-color: #808080;
|
| 6 |
|
| 7 |
+
$popover-z-index: 1000000000;
|
| 8 |
+
$overlay-z-index: 100002;
|
| 9 |
+
$stage-z-index: 100003;
|
| 10 |
+
$highlighted-element-z-index: 100004;
|
| 11 |
|
| 12 |
// If you update this duration, make sure to
|
| 13 |
// update `ANIMATION_DURATION_MS` constant
|
|
|
|
| 25 |
min-width: 250px;
|
| 26 |
max-width: 300px;
|
| 27 |
box-shadow: 0 1px 10px rgba(0, 0, 0, 0.4);
|
| 28 |
+
z-index: $popover-z-index;
|
| 29 |
|
| 30 |
.driver-popover-tip {
|
| 31 |
border: 5px solid $popover-bg;
|
|
|
|
| 124 |
}
|
| 125 |
}
|
| 126 |
|
| 127 |
+
.driver-stage-no-animation {
|
| 128 |
-webkit-transition: none !important;
|
| 129 |
-moz-transition: none !important;
|
| 130 |
-ms-transition: none !important;
|
| 131 |
-o-transition: none !important;
|
| 132 |
transition: none !important;
|
| 133 |
+
|
| 134 |
+
background: transparent !important;
|
| 135 |
+
-webkit-appearance: none;
|
| 136 |
+
-webkit-box-shadow: 0 0 0 50px rgba(0, 0, 0, 0.75);
|
| 137 |
+
box-shadow: 0 0 0 50px rgba(0, 0, 0, 0.75);
|
| 138 |
}
|
| 139 |
|
| 140 |
div#driver-page-overlay {
|
|
|
|
| 150 |
zoom: 1;
|
| 151 |
filter: alpha(opacity=75);
|
| 152 |
opacity: 0.75;
|
| 153 |
+
z-index: $overlay-z-index !important;
|
| 154 |
|
| 155 |
-webkit-transition: all $animation-sec;
|
| 156 |
-moz-transition: all $animation-sec;
|
|
|
|
| 166 |
height: 50px;
|
| 167 |
width: 300px;
|
| 168 |
background: $stage-bg;
|
| 169 |
+
z-index: $stage-z-index !important;
|
| 170 |
display: none;
|
| 171 |
+
border-radius: 2px;
|
| 172 |
|
| 173 |
-webkit-transition: all $animation-sec;
|
| 174 |
-moz-transition: all $animation-sec;
|
|
|
|
| 178 |
}
|
| 179 |
|
| 180 |
.driver-highlighted-element {
|
| 181 |
+
z-index: $highlighted-element-z-index !important;
|
| 182 |
}
|
| 183 |
|
| 184 |
.driver-position-relative {
|