diff --git a/src/page/basics/video/video-parameters.ts b/src/page/basics/video/video-parameters.ts
deleted file mode 100644
index c5b081d..0000000
--- a/src/page/basics/video/video-parameters.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { ResponsiveImage } from '../../../types/responsive-image';
-import { url } from '../../../types/url';
-
-export interface VideoParameters {
- mp4: url;
- webm: url;
- poster: ResponsiveImage;
- invertButton?: boolean;
-}
diff --git a/src/page/basics/video/video.html.ts b/src/page/basics/video/video.html.ts
deleted file mode 100644
index 64aa506..0000000
--- a/src/page/basics/video/video.html.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import loading from '../../../../static/icons/loading.svg';
-import play from '../../../../static/icons/play-button.svg';
-import { html } from '../../../types/html';
-import { Image } from '../../basics/image/image.html';
-import { VideoParameters } from './video-parameters';
-import './video.scss';
-
-export const generate = ({ webm, mp4, poster, invertButton }: VideoParameters): html => `
-
-`;
diff --git a/src/page/basics/video/video.scss b/src/page/basics/video/video.scss
deleted file mode 100644
index 76a9c57..0000000
--- a/src/page/basics/video/video.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-@use '../../../style/mixins' as *;
-
-.video-container {
- .loading {
- @include square(var(--large-icon-size));
- @include absolute-center;
- visibility: hidden;
- }
-
- video {
- z-index: 1;
- visibility: hidden;
- }
-
- .start-button {
- z-index: 1;
- }
-
- &.loaded:not(.fully-loaded) .loading {
- visibility: visible;
- }
-
- &.fully-loaded video {
- visibility: visible;
- }
-}
diff --git a/src/page/basics/image-anchor/image-anchor.html.ts b/src/page/image-anchor/image-anchor.html.ts
similarity index 59%
rename from src/page/basics/image-anchor/image-anchor.html.ts
rename to src/page/image-anchor/image-anchor.html.ts
index 41c9628..adf76e2 100644
--- a/src/page/basics/image-anchor/image-anchor.html.ts
+++ b/src/page/image-anchor/image-anchor.html.ts
@@ -1,4 +1,4 @@
-import { url } from '../../../types/url';
+import { url } from '../../types/url';
import './image-anchor.scss';
export const ImageAnchorFactory =
@@ -8,11 +8,9 @@ export const ImageAnchorFactory =
{ shouldDownload = false }: { shouldDownload?: boolean } = {}
) =>
(href: url) =>
- `
-
-`;
+ } class="image-anchor">
+ ${svg}
+ ${title}
+ `;
diff --git a/src/page/basics/image-anchor/image-anchor.scss b/src/page/image-anchor/image-anchor.scss
similarity index 77%
rename from src/page/basics/image-anchor/image-anchor.scss
rename to src/page/image-anchor/image-anchor.scss
index 519b4d4..a58b8ee 100644
--- a/src/page/basics/image-anchor/image-anchor.scss
+++ b/src/page/image-anchor/image-anchor.scss
@@ -1,8 +1,9 @@
-@use '../../../style/mixins' as *;
+@use '../../style/mixins' as *;
.image-anchor {
display: flex;
align-items: center;
+ text-decoration: none;
&:not(:first-child) {
padding-top: var(--line-height);
@@ -11,10 +12,9 @@
svg {
@include square(var(--icon-size));
margin-right: calc(var(--small-margin) / 2);
- stroke: var(--normal-text-color);
}
- a {
+ span {
@include link;
font-size: 1.4rem;
}
diff --git a/src/page/basics/image-button/image-button.html.ts b/src/page/image-button/image-button.html.ts
similarity index 90%
rename from src/page/basics/image-button/image-button.html.ts
rename to src/page/image-button/image-button.html.ts
index 10a3c2d..f38ea59 100644
--- a/src/page/basics/image-button/image-button.html.ts
+++ b/src/page/image-button/image-button.html.ts
@@ -1,4 +1,4 @@
-import { url } from '../../../types/url';
+import { url } from '../../types/url';
import './image-button.scss';
export const ImageButtonFactory =
diff --git a/src/page/basics/image-button/image-button.scss b/src/page/image-button/image-button.scss
similarity index 73%
rename from src/page/basics/image-button/image-button.scss
rename to src/page/image-button/image-button.scss
index a2d89ea..4d1da99 100644
--- a/src/page/basics/image-button/image-button.scss
+++ b/src/page/image-button/image-button.scss
@@ -1,21 +1,19 @@
-@use '../../../style/mixins' as *;
+@use '../../style/mixins' as *;
.image-button {
@include image-button(var(--icon-size));
- .svg-container {
+ > .svg-container {
position: relative;
margin: auto;
@include square(var(--icon-size));
- svg {
- stroke: var(--normal-text-color);
+ > svg {
transition: stroke var(--transition-time), transform var(--transition-time);
}
}
- p {
- @include main-font();
+ > p {
padding-bottom: var(--small-margin);
font-size: 0.9rem;
font-style: italic;
diff --git a/src/page/basics/image/image.html.ts b/src/page/image-viewer/image/image.html.ts
similarity index 94%
rename from src/page/basics/image/image.html.ts
rename to src/page/image-viewer/image/image.html.ts
index 59df836..fe812c5 100644
--- a/src/page/basics/image/image.html.ts
+++ b/src/page/image-viewer/image/image.html.ts
@@ -25,8 +25,9 @@ export const Image = ({
}
+ style="background-size: cover; background-image: url('${image.placeholder}')"
+ ${isIgnoredByImageViewer ? '' : 'tabindex="0"'}
+ >
svg {
- @include square(var(--large-icon-size));
- @include absolute-center;
- }
}
iframe {
diff --git a/src/page/basics/preview/preview.ts b/src/page/preview/preview.ts
similarity index 82%
rename from src/page/basics/preview/preview.ts
rename to src/page/preview/preview.ts
index f292a6e..768d459 100644
--- a/src/page/basics/preview/preview.ts
+++ b/src/page/preview/preview.ts
@@ -1,6 +1,6 @@
-import { createElement } from '../../../helper/create-element';
-import { ResponsiveImage } from '../../../types/responsive-image';
-import { PageElement } from '../../page-element';
+import { createElement } from '../../helper/create-element';
+import { ResponsiveImage } from '../../types/responsive-image';
+import { PageElement } from '../page-element';
import { generate } from './preview.html';
export class Preview extends PageElement {
diff --git a/src/page/video/video-parameters.ts b/src/page/video/video-parameters.ts
new file mode 100644
index 0000000..a235dd1
--- /dev/null
+++ b/src/page/video/video-parameters.ts
@@ -0,0 +1,10 @@
+import { ResponsiveImage } from '../../types/responsive-image';
+import { url } from '../../types/url';
+
+export interface VideoParameters {
+ mp4: url;
+ webm: url;
+ poster: ResponsiveImage;
+ altText: string;
+ invertButton?: boolean;
+}
diff --git a/src/page/video/video.html.ts b/src/page/video/video.html.ts
new file mode 100644
index 0000000..f5c3990
--- /dev/null
+++ b/src/page/video/video.html.ts
@@ -0,0 +1,28 @@
+import play from '../../../static/icons/play-button.svg';
+import { html } from '../../types/html';
+import { Image } from '../image-viewer/image/image.html';
+import { VideoParameters } from './video-parameters';
+import './video.scss';
+
+export const generate = ({
+ webm,
+ mp4,
+ poster,
+ invertButton,
+ altText,
+}: VideoParameters): html => `
+
+`;
diff --git a/src/page/video/video.scss b/src/page/video/video.scss
new file mode 100644
index 0000000..50215db
--- /dev/null
+++ b/src/page/video/video.scss
@@ -0,0 +1,16 @@
+@use '../../style/mixins' as *;
+
+.video-container {
+ video {
+ z-index: 1;
+ visibility: hidden;
+ }
+
+ .start-button {
+ z-index: 1;
+ }
+
+ &.fully-loaded video {
+ visibility: visible;
+ }
+}
diff --git a/src/page/basics/video/video.ts b/src/page/video/video.ts
similarity index 75%
rename from src/page/basics/video/video.ts
rename to src/page/video/video.ts
index 4dc29a9..c223d91 100644
--- a/src/page/basics/video/video.ts
+++ b/src/page/video/video.ts
@@ -1,5 +1,5 @@
-import { createElement } from '../../../helper/create-element';
-import { PageElement } from '../../page-element';
+import { createElement } from '../../helper/create-element';
+import { PageElement } from '../page-element';
import { VideoParameters } from './video-parameters';
import { generate } from './video.html';
@@ -9,12 +9,10 @@ export class Video extends PageElement {
public constructor(options: VideoParameters) {
super(createElement(generate(options)));
this.video = this.query('video') as HTMLVideoElement;
- this.video.addEventListener('click', this.startVideo.bind(this));
- this.video.addEventListener('play', () =>
- this.htmlRoot.classList.add('fully-loaded')
- );
+ this.htmlRoot.addEventListener('click', this.startVideo.bind(this));
this.query('.start-button').addEventListener('click', this.startVideo.bind(this));
+
this.video.addEventListener('pause', this.pauseVideo.bind(this));
}