diff options
Diffstat (limited to 'static/widgets/image')
| -rw-r--r-- | static/widgets/image/index.css | 59 | ||||
| -rw-r--r-- | static/widgets/image/index.js | 30 |
2 files changed, 89 insertions, 0 deletions
diff --git a/static/widgets/image/index.css b/static/widgets/image/index.css new file mode 100644 index 0000000..f4e2dce --- /dev/null +++ b/static/widgets/image/index.css @@ -0,0 +1,59 @@ +#container { + position: relative; + background: var(--card-background); + height: 100%; +} + +#container img { + max-width: 700px; + width: 100%; + border-radius: var(--border-radius); + box-shadow: #223223aa 1px 1px 4px; + visibility: hidden; +} + +#container.loaded img { + visibility: visible; +} + +@keyframes loader { +} + +@keyframes loader { + 0% { + width: 60px; + height: 60px; + } + + 25% { + border: 5px solid var(--page-background); + } + + 50% { + width: 80px; + height: 80px; + } + + 75% { + border: 10px solid var(--page-background); + } + + 100% { + width: 60px; + height: 60px; + } +} + +#loading { + position: absolute; + border: 10px solid var(--page-background); + border-radius: 100%; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + animation: 0.5s infinite loader ease; +} + +.loaded #loading { + display: none; +} diff --git a/static/widgets/image/index.js b/static/widgets/image/index.js new file mode 100644 index 0000000..ad77c4e --- /dev/null +++ b/static/widgets/image/index.js @@ -0,0 +1,30 @@ +import * as sfw from 'sfw'; +const { Div, Img } = sfw.element.native; + +const css = await sfw.css(import.meta.url, './index.css') + +export default class Image extends sfw.element.Container { + #container + #image + + constructor() { + super ({ css }) + + this.body.append( + this.#container = Div.new({ + id: 'container', + children: [ + this.#image = Img.new({ + onload: () => this.#container.classList.add('loaded'), + }), + Div.new({ id: 'loading' }) + ], + }) + ); + } + + set id(id) { + this.#container.classList.remove('loaded'); + this.#image.src = `/api/image/load/${id}`; + } +} |