Skip to content

Commit 27d4a20

Browse files
committed
Restore inline playback for release note videos
1 parent af742e4 commit 27d4a20

22 files changed

Lines changed: 106 additions & 447 deletions

docs/.vitepress/config.mts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { fileURLToPath } from 'node:url'
88
const SITE_URL = 'https://docs.mobileid.ch'
99
const DOCS_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..')
1010
const RELEASE_NOTES_POST_LAYOUT = 'release-notes-post'
11-
const RELEASE_NOTES_VIDEO_LAYOUT = 'release-notes-video'
1211
const SUPPORTED_LANGS = ['en', 'de', 'fr', 'it'] as const
1312

1413
type SupportedLang = typeof SUPPORTED_LANGS[number]
@@ -190,15 +189,13 @@ export default withMermaid(defineConfig({
190189
? toAbsoluteUrl(videoMeta.poster)
191190
: undefined
192191
const isReleaseNotesPost = pageData.frontmatter.layout === RELEASE_NOTES_POST_LAYOUT
193-
const isReleaseNotesVideo = pageData.frontmatter.layout === RELEASE_NOTES_VIDEO_LAYOUT
194-
const isReleaseNotesContent = isReleaseNotesPost || isReleaseNotesVideo
195192
const keywords = getFrontmatterKeywords(pageData.frontmatter)
196193
const head: HeadConfig[] = [
197194
['link', { rel: 'canonical', href: canonicalUrl }],
198195
['meta', { property: 'og:title', content: ogTitle }],
199196
['meta', { property: 'og:description', content: ogDesc }],
200197
['meta', { property: 'og:url', content: canonicalUrl }],
201-
['meta', { property: 'og:type', content: isReleaseNotesVideo ? 'video.other' : isReleaseNotesPost ? 'article' : 'website' }],
198+
['meta', { property: 'og:type', content: isReleaseNotesPost ? 'article' : 'website' }],
202199
['meta', { property: 'og:locale', content: OG_LOCALE_BY_LANG[lang] }],
203200
]
204201

@@ -211,7 +208,7 @@ export default withMermaid(defineConfig({
211208
)
212209
}
213210

214-
if (isReleaseNotesContent) {
211+
if (isReleaseNotesPost) {
215212
head.push(
216213
['meta', { name: 'twitter:title', content: ogTitle }],
217214
['meta', { name: 'twitter:description', content: ogDesc }],
@@ -294,7 +291,7 @@ export default withMermaid(defineConfig({
294291
])
295292
}
296293

297-
if (isReleaseNotesVideo && videoMeta) {
294+
if (videoMeta) {
298295
const uploadDate = videoMeta.uploadDate
299296
?? (pageData.frontmatter.date ? new Date(pageData.frontmatter.date).toISOString() : undefined)
300297
const contentUrl = toAbsoluteUrl(videoMeta.src)

docs/.vitepress/theme/ReleaseNotesVideoLayout.vue

Lines changed: 0 additions & 46 deletions
This file was deleted.

docs/.vitepress/theme/components/VideoEmbed.vue

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const props = defineProps({
66
src: { type: String, required: true },
77
poster: { type: String, default: '' },
88
type: { type: String, default: 'video/mp4' },
9+
linkText: { type: String, default: 'Open MP4' },
910
})
1011
1112
const videoRef = ref(null)
@@ -37,10 +38,14 @@ watch(() => route.path, reload)
3738
>
3839
<source :src="src" :type="type" />
3940
Your browser does not support the video element.
41+
<a :href="src">Open the MP4 directly.</a>
4042
</video>
41-
<div v-if="$slots.default" class="blog-video-caption">
42-
<svg class="video-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="5 3 19 12 5 21 5 3"/></svg>
43-
<span><slot /></span>
43+
<div v-if="$slots.default || src" class="blog-video-caption">
44+
<span v-if="$slots.default" class="blog-video-caption-main">
45+
<svg class="video-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="5 3 19 12 5 21 5 3"/></svg>
46+
<span><slot /></span>
47+
</span>
48+
<a class="blog-video-link" :href="src" target="_blank" rel="noopener">{{ linkText }}</a>
4449
</div>
4550
</div>
4651
</template>

docs/.vitepress/theme/components/VideoWatchCard.vue

Lines changed: 0 additions & 29 deletions
This file was deleted.

docs/.vitepress/theme/index.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import specYaml from '../../public/openapi-mobileid.yaml?raw'
88
import DocFeedback from './DocFeedback.vue'
99
import ReleaseNotesLayout from './ReleaseNotesLayout.vue'
1010
import ReleaseNotesPostLayout from './ReleaseNotesPostLayout.vue'
11-
import ReleaseNotesVideoLayout from './ReleaseNotesVideoLayout.vue'
1211
import './custom.css'
1312
import './release-notes.css'
1413

@@ -24,7 +23,6 @@ export default {
2423
async enhanceApp({ app }) {
2524
app.component('release-notes-index', ReleaseNotesLayout)
2625
app.component('release-notes-post', ReleaseNotesPostLayout)
27-
app.component('release-notes-video', ReleaseNotesVideoLayout)
2826

2927
useOpenapi({
3028
spec: specYaml,

docs/.vitepress/theme/release-notes.css

Lines changed: 15 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,16 @@ html.dark .rn-sidebar-nav .rn-sidebar-link.is-active::before {
355355
color: var(--vp-c-text-2);
356356
display: flex;
357357
align-items: center;
358+
justify-content: space-between;
359+
gap: 0.75em;
360+
flex-wrap: wrap;
361+
}
362+
363+
.blog-video-caption-main {
364+
display: inline-flex;
365+
align-items: center;
358366
gap: 0.5em;
367+
min-width: 0;
359368
}
360369

361370
.blog-video-caption .video-icon {
@@ -365,101 +374,18 @@ html.dark .rn-sidebar-nav .rn-sidebar-link.is-active::before {
365374
opacity: 0.6;
366375
}
367376

368-
.blog-video-card {
369-
display: block;
370-
margin: 2em 0;
371-
border: 1px solid var(--vp-c-divider);
372-
border-radius: 12px;
373-
overflow: hidden;
374-
background: var(--vp-c-bg-soft);
375-
color: inherit;
376-
text-decoration: none;
377-
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
378-
transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
379-
}
380-
381-
.blog-video-card:hover {
382-
border-color: var(--vp-c-brand-3);
383-
box-shadow: 0 8px 28px rgba(0, 0, 0, 0.12);
384-
transform: translateY(-2px);
385-
}
386-
387-
.dark .blog-video-card {
388-
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.25);
389-
}
390-
391-
.dark .blog-video-card:hover {
392-
box-shadow: 0 10px 32px rgba(0, 0, 0, 0.35);
393-
}
394-
395-
.blog-video-card-media {
396-
position: relative;
397-
display: block;
398-
background: #0f172a;
399-
}
400-
401-
.blog-video-card-media img {
402-
width: 100%;
403-
height: auto;
404-
display: block;
405-
}
406-
407-
.blog-video-card-play {
408-
position: absolute;
409-
left: 20px;
410-
bottom: 20px;
377+
.blog-video-link {
411378
display: inline-flex;
412379
align-items: center;
413-
justify-content: center;
414-
width: 64px;
415-
height: 64px;
416-
border-radius: 999px;
417-
background: rgba(0, 72, 68, 0.92);
418-
color: #fff;
419-
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.24);
420-
}
421-
422-
.dark .blog-video-card-play {
423-
background: rgba(45, 212, 176, 0.92);
424-
color: #111827;
425-
}
426-
427-
.blog-video-card-play svg {
428-
width: 26px;
429-
height: 26px;
430-
margin-left: 2px;
431-
}
432-
433-
.blog-video-card-body {
434-
display: block;
435-
padding: 16px 20px 20px;
436-
}
437-
438-
.blog-video-card-kicker {
439-
display: block;
440-
margin-bottom: 6px;
441-
font-size: 0.8rem;
442-
font-weight: 700;
443-
letter-spacing: 0.06em;
444-
text-transform: uppercase;
380+
gap: 0.35em;
381+
flex-shrink: 0;
445382
color: var(--vp-c-brand-3);
446-
}
447-
448-
.blog-video-card-title {
449-
display: block;
450-
font-family: var(--vp-font-family-heading);
451-
font-size: 1.1rem;
452383
font-weight: 600;
453-
line-height: 1.35;
454-
color: var(--vp-c-text-1);
384+
text-decoration: none;
455385
}
456386

457-
.blog-video-card-text {
458-
display: block;
459-
margin-top: 8px;
460-
font-size: 0.95rem;
461-
line-height: 1.6;
462-
color: var(--vp-c-text-2);
387+
.blog-video-link:hover {
388+
text-decoration: underline;
463389
}
464390

465391
/* Step list blocks */

docs/release-notes/posts/2026-03-27-mobile-id-entra-external-mfa.de.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,21 @@ keywords:
1717
- VPN MFA
1818
readingTime: 10
1919
layout: release-notes-post
20+
video:
21+
title: "Mobile ID und Microsoft Entra ID: Stärkere MFA mit External Authentication"
22+
description: "Kurzes Erklaervideo dazu, wie Mobile ID mit Microsoft Entra External MFA zusammenspielt."
23+
src: /release-notes/media/entra-external-mfa-explainer.mp4
24+
poster: /release-notes/img/entra-eam-thumb.png
25+
duration: PT6M43S
26+
uploadDate: 2026-03-27T00:00:00.000Z
2027
---
2128

2229
<script setup>
2330
import EntraIntegrationFlow from '../../.vitepress/theme/components/EntraIntegrationFlow.vue'
2431
import EntraUseCaseCards from '../../.vitepress/theme/components/EntraUseCaseCards.vue'
2532
import EntraMigrationTimeline from '../../.vitepress/theme/components/EntraMigrationTimeline.vue'
2633
import LanguageSwitcher from '../../.vitepress/theme/components/LanguageSwitcher.vue'
27-
import VideoWatchCard from '../../.vitepress/theme/components/VideoWatchCard.vue'
34+
import VideoEmbed from '../../.vitepress/theme/components/VideoEmbed.vue'
2835
</script>
2936

3037
<LanguageSwitcher />
@@ -33,14 +40,9 @@ import VideoWatchCard from '../../.vitepress/theme/components/VideoWatchCard.vue
3340
Microsoft Entra ID ist die Identitätsplattform hinter Millionen von Unternehmensumgebungen. Mit der <strong>allgemeinen Verfügbarkeit von External MFA</strong> können Organisationen einen vertrauenswürdigen externen Authentisierungsanbieter in Entra ID einbinden und behalten dabei die volle Kontrolle über Conditional Access Policies. Mobile ID, betrieben von Swisscom, kombiniert <a href="/rest-api-guide/introduction#mobile-id-sim---method">hardwaregestützte SIM-Authentisierung</a>, <a href="/rest-api-guide/introduction#mobile-id-app---method">App-basiertes Push</a>, gemeinsame Controls wie Number Matching und Transaction Signing, differenzierte Geofencing-Optionen und ein breiteres OIDC-Ecosystem, das inzwischen auch <a href="/oidc-integration-guide/passkey-authentication">Mobile ID Passkeys</a> umfasst. Im Entra-External-MFA-Ablauf konsumiert Entra das Provider-Ergebnis, während Mobile ID das Second-Factor-Erlebnis ausführt.
3441
</div>
3542

36-
<VideoWatchCard
37-
href="/release-notes/videos/2026-03-27-mobile-id-entra-external-mfa-explainer.de.html"
38-
poster="/release-notes/img/entra-eam-thumb.png"
39-
label="Erklaervideo ansehen"
40-
title="Mobile ID und Microsoft Entra ID: Stärkere MFA mit External Authentication"
41-
>
43+
<VideoEmbed src="/release-notes/media/entra-external-mfa-explainer.mp4" poster="/release-notes/img/entra-eam-thumb.png" link-text="MP4 öffnen">
4244
Kurzes Erklaervideo dazu, wie Mobile ID mit Microsoft Entra External MFA zusammenspielt.
43-
</VideoWatchCard>
45+
</VideoEmbed>
4446

4547
## Was ist Microsoft Entra External MFA?
4648

docs/release-notes/posts/2026-03-27-mobile-id-entra-external-mfa.fr.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,21 @@ keywords:
1717
- MFA VPN
1818
readingTime: 10
1919
layout: release-notes-post
20+
video:
21+
title: "Mobile ID et Microsoft Entra ID : un MFA renforcé avec External Authentication"
22+
description: "Courte vidéo explicative montrant comment Mobile ID s'intègre à Microsoft Entra External MFA."
23+
src: /release-notes/media/entra-external-mfa-explainer.mp4
24+
poster: /release-notes/img/entra-eam-thumb.png
25+
duration: PT6M43S
26+
uploadDate: 2026-03-27T00:00:00.000Z
2027
---
2128

2229
<script setup>
2330
import EntraIntegrationFlow from '../../.vitepress/theme/components/EntraIntegrationFlow.vue'
2431
import EntraUseCaseCards from '../../.vitepress/theme/components/EntraUseCaseCards.vue'
2532
import EntraMigrationTimeline from '../../.vitepress/theme/components/EntraMigrationTimeline.vue'
2633
import LanguageSwitcher from '../../.vitepress/theme/components/LanguageSwitcher.vue'
27-
import VideoWatchCard from '../../.vitepress/theme/components/VideoWatchCard.vue'
34+
import VideoEmbed from '../../.vitepress/theme/components/VideoEmbed.vue'
2835
</script>
2936

3037
<LanguageSwitcher />
@@ -33,14 +40,9 @@ import VideoWatchCard from '../../.vitepress/theme/components/VideoWatchCard.vue
3340
Microsoft Entra ID est la plateforme d'identité utilisée par des millions d'environnements d'entreprise. Avec <strong>External MFA désormais disponible en version générale</strong>, les organisations peuvent intégrer un fournisseur d'authentification tiers de confiance dans Entra ID tout en conservant le contrôle total sur les politiques Conditional Access. Mobile ID, opéré par Swisscom, combine l'<a href="/rest-api-guide/introduction#mobile-id-sim---method">authentification matérielle via la SIM</a>, l'<a href="/rest-api-guide/introduction#mobile-id-app---method">authentification push via l'App</a>, des contrôles partagés tels que le Number Matching et le Transaction Signing, des options de geofencing différenciées et un écosystème OIDC plus large qui inclut désormais les <a href="/oidc-integration-guide/passkey-authentication">Mobile ID Passkeys</a>. Dans le parcours Entra External MFA, Entra consomme le résultat du fournisseur tandis que Mobile ID exécute l'expérience de second facteur.
3441
</div>
3542

36-
<VideoWatchCard
37-
href="/release-notes/videos/2026-03-27-mobile-id-entra-external-mfa-explainer.fr.html"
38-
poster="/release-notes/img/entra-eam-thumb.png"
39-
label="Regarder la vidéo explicative"
40-
title="Mobile ID et Microsoft Entra ID : un MFA renforcé avec External Authentication"
41-
>
43+
<VideoEmbed src="/release-notes/media/entra-external-mfa-explainer.mp4" poster="/release-notes/img/entra-eam-thumb.png" link-text="Ouvrir le MP4">
4244
Courte vidéo explicative montrant comment Mobile ID s'intègre à Microsoft Entra External MFA.
43-
</VideoWatchCard>
45+
</VideoEmbed>
4446

4547
## Qu'est-ce que Microsoft Entra External MFA ?
4648

0 commit comments

Comments
 (0)