Remove custom video plugin to use default Kirby video block
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
9706a67994
commit
ccc7ac4d84
7 changed files with 0 additions and 176 deletions
2
site/plugins/video/.gitignore
vendored
2
site/plugins/video/.gitignore
vendored
|
|
@ -1,2 +0,0 @@
|
|||
node_modules/
|
||||
*.log
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
name: Vidéo
|
||||
icon: video
|
||||
preview: video
|
||||
fields:
|
||||
url:
|
||||
label: URL de la vidéo
|
||||
type: url
|
||||
help: URL YouTube, Vimeo ou lien direct vers un fichier vidéo
|
||||
caption:
|
||||
label: Légende
|
||||
type: text
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<?php
|
||||
|
||||
Kirby::plugin('index/video', [
|
||||
'blueprints' => [
|
||||
'blocks/video' => __DIR__ . '/blueprints/blocks/video.yml'
|
||||
],
|
||||
'snippets' => [
|
||||
'blocks/video' => __DIR__ . '/snippets/blocks/video.php'
|
||||
]
|
||||
]);
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"name": "video-block",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"dev": "npx -y kirbyup src/index.js --watch",
|
||||
"build": "npx -y kirbyup src/index.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^6.0.1",
|
||||
"vite": "^7.1.7"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
<?php
|
||||
/** @var \Kirby\Cms\Block $block */
|
||||
$url = $block->url()->value();
|
||||
$caption = $block->caption()->value();
|
||||
|
||||
// Fonction pour détecter le type de vidéo
|
||||
function getVideoEmbedCode($url) {
|
||||
// YouTube
|
||||
if (preg_match('/youtube\.com\/watch\?v=([^&]+)/', $url, $matches) ||
|
||||
preg_match('/youtu\.be\/([^?]+)/', $url, $matches)) {
|
||||
$videoId = $matches[1];
|
||||
return '<iframe src="https://www.youtube.com/embed/' . $videoId . '" frameborder="0" allowfullscreen></iframe>';
|
||||
}
|
||||
|
||||
// Vimeo
|
||||
if (preg_match('/vimeo\.com\/(\d+)/', $url, $matches)) {
|
||||
$videoId = $matches[1];
|
||||
return '<iframe src="https://player.vimeo.com/video/' . $videoId . '" frameborder="0" allowfullscreen></iframe>';
|
||||
}
|
||||
|
||||
// Vidéo directe (mp4, webm, etc.)
|
||||
if (preg_match('/\.(mp4|webm|ogg)$/i', $url)) {
|
||||
return '<video controls><source src="' . $url . '" type="video/' . pathinfo($url, PATHINFO_EXTENSION) . '"></video>';
|
||||
}
|
||||
|
||||
// Par défaut, iframe
|
||||
return '<iframe src="' . $url . '" frameborder="0" allowfullscreen></iframe>';
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if ($url): ?>
|
||||
<div class="container-video">
|
||||
<?= getVideoEmbedCode($url) ?>
|
||||
</div>
|
||||
|
||||
<?php if ($caption): ?>
|
||||
<p class="caption"><?= $caption ?></p>
|
||||
<?php endif ?>
|
||||
<?php endif ?>
|
||||
|
|
@ -1,95 +0,0 @@
|
|||
<template>
|
||||
<div @click="$emit('open')" class="video-preview">
|
||||
<div v-if="content.url" class="video-preview__container">
|
||||
<div class="video-preview__placeholder">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path d="M8 5v14l11-7z"/>
|
||||
</svg>
|
||||
<p class="video-preview__url">{{ truncatedUrl }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p v-if="content.caption" class="video-preview__caption">
|
||||
{{ content.caption }}
|
||||
</p>
|
||||
|
||||
<div v-if="!content.url" class="video-preview__empty">
|
||||
Cliquer pour ajouter une URL de vidéo
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
content: Object
|
||||
});
|
||||
|
||||
const truncatedUrl = computed(() => {
|
||||
if (!props.content?.url) return '';
|
||||
const url = props.content.url;
|
||||
return url.length > 50 ? url.substring(0, 50) + '...' : url;
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.video-preview {
|
||||
cursor: pointer;
|
||||
border-radius: var(--rounded);
|
||||
overflow: hidden;
|
||||
background: var(--color-background);
|
||||
border: 1px solid var(--color-gray-300);
|
||||
}
|
||||
|
||||
.video-preview__container {
|
||||
width: 100%;
|
||||
height: 180px;
|
||||
background: var(--color-gray-900);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.video-preview__placeholder {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
color: var(--color-gray-400);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.video-preview__placeholder svg {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.video-preview__url {
|
||||
font-size: var(--text-xs);
|
||||
color: var(--color-gray-500);
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.video-preview__caption {
|
||||
padding: 0.75rem;
|
||||
font-size: var(--text-sm);
|
||||
color: var(--color-gray-600);
|
||||
font-style: italic;
|
||||
background: var(--color-background);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.video-preview__empty {
|
||||
padding: 3rem 1rem;
|
||||
text-align: center;
|
||||
color: var(--color-gray-500);
|
||||
font-size: var(--text-sm);
|
||||
background: var(--color-gray-100);
|
||||
}
|
||||
|
||||
.video-preview:hover {
|
||||
border-color: var(--color-gray-400);
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
import VideoBlock from "./components/VideoBlock.vue";
|
||||
|
||||
window.panel.plugin("index/video", {
|
||||
blocks: {
|
||||
video: VideoBlock
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue