pleroma-fe/src/components/still-image/still-image.vue

91 lines
1.7 KiB
Vue
Raw Normal View History

2018-01-29 10:47:26 +03:00
<template>
2019-07-05 10:17:44 +03:00
<div
class="still-image"
:class="{ animated: animated }"
2022-02-03 22:50:32 +02:00
:style="style"
2019-07-05 10:17:44 +03:00
>
<canvas
v-if="animated"
ref="canvas"
/>
2019-09-04 11:23:47 -04:00
<!-- NOTE: key is required to force to re-render img tag when src is changed -->
2019-07-05 10:17:44 +03:00
<img
ref="src"
:key="realSrc"
2019-02-18 05:03:26 +00:00
:alt="alt"
:title="alt"
:data-src="dataSrc"
:src="realSrc"
2019-07-05 10:17:44 +03:00
:referrerpolicy="referrerpolicy"
2022-12-24 12:43:30 -05:00
:loading="loading"
2019-07-05 10:17:44 +03:00
@load="onLoad"
@error="onError"
>
2022-03-14 09:35:29 +02:00
<slot />
2018-01-29 10:47:26 +03:00
</div>
</template>
<script src="./still-image.js"></script>
<style lang="scss">
.still-image {
position: relative;
line-height: 0;
overflow: hidden;
display: inline-flex;
align-items: center;
canvas {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 100%;
object-fit: contain;
2020-10-29 21:39:36 +02:00
visibility: var(--_still-image-canvas-visibility, visible);
}
img {
width: 100%;
2021-06-07 20:44:32 +03:00
height: 100%;
2018-09-03 22:49:46 +03:00
object-fit: contain;
}
&.animated {
&::before {
zoom: var(--_still_image-label-scale, 1);
2023-01-09 13:02:16 -05:00
content: "gif";
position: absolute;
2022-04-20 23:44:33 +03:00
line-height: 1;
font-size: 0.7em;
top: 0.5em;
left: 0.5em;
2023-01-09 13:02:16 -05:00
background: rgb(127 127 127 / 50%);
color: #fff;
display: block;
padding: 2px 4px;
2024-03-04 19:45:42 +02:00
border-radius: var(--roundness);
z-index: 2;
2020-10-29 21:39:36 +02:00
visibility: var(--_still-image-label-visibility, visible);
2018-01-29 10:47:26 +03:00
}
&:hover canvas {
display: none;
}
2020-10-29 21:39:36 +02:00
&:hover::before {
visibility: var(--_still-image-label-visibility, hidden);
}
img {
2020-10-29 21:39:36 +02:00
visibility: var(--_still-image-img-visibility, hidden);
}
&:hover img {
visibility: visible;
}
}
2018-01-29 10:47:26 +03:00
}
</style>