zulip/static/styles/lightbox.css
Austin Riba 7d3bbe03ac lightbox: Swap panzoom library to anvaka/panzoom.
This PR changes the library used for panning and zooming in the lightbox
module from timmywil/panzoom to avanka/panzoom.

The original (timmywil) version of the library contains a bug where if
you have a high resolution touchpad and Firefox and you zoom in and out
repeatedly on an image, the image may drift. avanka/panzoom does not
appear to display this behavior.

Restores the behaviour from before 5f83bc5cfe, where clicking
outside the image closes the lightbox, primarily by way of swapping
out the panzoom library.

Fixes: #21163.
2022-02-23 12:12:04 -08:00

297 lines
6.8 KiB
CSS

#lightbox_overlay {
background-color: hsl(227, 40%, 16%);
.image-preview {
display: flex;
align-items: center;
justify-content: center;
position: relative;
width: 100%;
height: calc(100% - 65px - 95px);
margin: 0;
overflow: hidden;
background-size: contain;
background-repeat: no-repeat;
background-position: center center;
img {
max-height: 100%;
max-width: 100%;
background-color: hsl(0, 0%, 100%);
background-image: linear-gradient(
45deg,
hsl(0, 0%, 80%) 25%,
transparent 25%
),
linear-gradient(135deg, hsl(0, 0%, 80%) 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, hsl(0, 0%, 80%) 75%),
linear-gradient(135deg, transparent 75%, hsl(0, 0%, 80%) 75%);
background-size: 20px 20px;
background-position: 0 0, 50px 0, 50px -50px, 0 50px;
}
canvas {
cursor: pointer;
}
.zoom-element {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
}
.exit {
float: right;
color: hsla(0, 0%, 100%, 0.8);
font-size: 2rem;
margin: 11px 20px 0 0;
transform: scaleY(0.75);
font-weight: 300;
opacity: 0;
pointer-events: none;
cursor: pointer;
transition: all 0.2s ease;
}
&.show .exit {
pointer-events: auto;
opacity: 1;
}
.image-info-wrapper {
background-color: transparent;
}
.image-description,
.image-actions {
float: left;
margin: 20px;
}
.image-actions {
float: right;
.lightbox-canvas-trigger {
display: inline-block;
vertical-align: top;
min-width: 75px;
margin: 0;
margin-right: 5px;
padding: 0 5px;
border-radius: 4px;
border: 1px solid hsla(0, 0%, 100%, 0.6);
text-align: center;
color: hsl(0, 0%, 100%);
cursor: pointer;
transition: all 0.3s ease;
&:hover {
background-color: hsl(0, 0%, 100%);
border: 1px solid hsl(0, 0%, 100%);
color: hsl(227, 40%, 16%);
opacity: 1;
}
.status {
margin-top: -7px;
&::after {
content: attr(data-disabled);
text-transform: uppercase;
opacity: 0.7;
}
}
&.enabled .status::after {
content: attr(data-enabled);
}
.title {
font-weight: 600;
}
}
.button {
font-size: 0.9rem;
min-width: inherit;
padding: 4px 10px;
border: 1px solid hsla(0, 0%, 100%, 0.6);
background-color: transparent;
color: hsl(0, 0%, 100%);
border-radius: 4px;
text-decoration: none;
display: inline-block;
margin: 0 5px;
&:hover {
background-color: hsl(0, 0%, 100%);
border-color: hsl(0, 0%, 100%);
color: hsl(227, 40%, 16%);
}
}
}
.image-description {
/* add some extra margin top and remove some bottom to keep the
height the same. and vertically center the text with the buttons. */
margin-top: 25px;
margin-bottom: 15px;
font-size: 1.3rem;
color: hsl(0, 0%, 100%);
.title {
display: inline-block;
vertical-align: top;
font-weight: 400;
line-height: normal;
max-width: calc(100% - 110px);
/* Required for text-overflow */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user {
max-width: 200px;
display: inline-block;
vertical-align: top;
font-weight: 300;
line-height: normal;
text-overflow: ellipsis;
overflow: hidden;
white-space: pre;
&::before {
margin-right: 5px;
content: "\2014";
}
}
}
.player-container {
height: calc(100% - 65px - 95px);
display: flex;
text-align: center;
justify-content: center;
align-items: center;
iframe {
/* maintain 16:9 ratio. */
width: calc((100vh - 65px - 95px) * 16 / 9);
height: 100%;
margin: auto;
}
}
.center {
.arrow {
display: inline-block;
vertical-align: top;
margin-top: 25px;
padding: 5px 10px;
color: hsl(0, 0%, 100%);
font-size: 1.8em;
font-weight: 100;
transform: scaleY(2);
cursor: pointer;
opacity: 0.5;
transition: all 0.3s ease;
&:hover {
opacity: 1;
}
}
.image-list {
position: relative;
display: inline-block;
padding: 15px 0 12px;
height: 50px;
font-size: 0;
max-width: 40vw;
overflow: hidden;
white-space: nowrap;
.image {
display: inline-block;
vertical-align: top;
width: 50px;
height: 50px;
margin: 0 2px;
background-color: hsla(0, 0%, 94%, 0.2);
opacity: 0.5;
background-size: cover;
background-position: center;
cursor: pointer;
&.selected {
opacity: 1;
}
}
}
}
}
@media only screen and ($ms_min <= width < $md_min) {
#lightbox_overlay {
.image-actions {
float: left;
margin-top: 0;
}
.image-description {
max-width: calc(100% - 100px);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-bottom: 5px;
.title {
max-width: calc(100% - 70px);
}
}
.center .image-list {
max-width: 80vw;
}
.player-container iframe {
/* maintain 16:9 ratio. */
width: 100%;
height: calc((100vw) * 9 / 16);
margin: auto;
}
.image-preview {
height: calc(100% - 101px - 95px);
}
}
}