Skip to content

Commit 57d6d88

Browse files
feat: youtubeembed-parser
1 parent bf5f723 commit 57d6d88

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

src/Parser/EditorjsParser.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use SyntaxPhoenix\EJSParserBundle\Parser\Extension\DelimiterParser;
2121
use SyntaxPhoenix\EJSParserBundle\Parser\Extension\ParagraphParser;
2222
use SyntaxPhoenix\EJSParserBundle\Parser\Extension\SimpleImageParser;
23+
use SyntaxPhoenix\EJSParserBundle\Parser\Extension\YoutubeEmbedParser;
2324

2425
class EditorjsParser
2526
{
@@ -49,7 +50,8 @@ public function __construct(?object $data = null)
4950
'simpleImage' => new SimpleImageParser(),
5051
'image' => new ImageParser(),
5152
'table' => new TableParser(),
52-
'alert' => new AlertParser()
53+
'alert' => new AlertParser(),
54+
'youtubeembed' => new YoutubeEmbedParser()
5355
];
5456
}
5557

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
namespace SyntaxPhoenix\EJSParserBundle\Parser\Extension;
4+
5+
use DOMElement;
6+
use DOMDocument;
7+
use Masterminds\HTML5;
8+
use SyntaxPhoenix\EJSParserBundle\Parser\EditorjsParserExtension;
9+
10+
class YoutubeEmbedParser implements EditorjsParserExtension
11+
{
12+
13+
public function parseBlock(HTML5 $html5, DOMDocument $document, object $block, string $prefix): DOMElement
14+
{
15+
$wrapper = $document->createElement('div');
16+
17+
$wrapper->setAttribute('class', "{$prefix}-youtubeembed");
18+
19+
$url = $block->data->url;
20+
if (strpos($url, 'watch?v=') !== false) {
21+
$url = str_replace('watch?v=', 'embed/', $url);
22+
}
23+
24+
$attrs = [
25+
'src' => $url,
26+
'allow' => 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture',
27+
'allowfullscreen' => true
28+
];
29+
30+
$wrapper->appendChild($this->createIframe($document, $attrs));
31+
32+
return $wrapper;
33+
}
34+
35+
private function createIframe(DOMDocument $document, array $attrs)
36+
{
37+
$iframe = $document->createElement('iframe');
38+
39+
foreach ($attrs as $key => $attr) {
40+
$iframe->setAttribute($key, $attr);
41+
}
42+
43+
return $iframe;
44+
}
45+
}

0 commit comments

Comments
 (0)