libhanzzok/core/plugin/youtube/
youtube_embed.rs1use serde_hzdata::HzdataValue;
2
3use crate::{
4 api::BlockConstructorRule,
5 codegen::{Context, HtmlNode},
6 core::ast::{BlockConstructorForm, InlineObjectNode, Raw},
7};
8
9pub struct YouTubeEmbedBlockConstructorRule;
10
11impl BlockConstructorRule for YouTubeEmbedBlockConstructorRule {
12 fn name(&self) -> String {
13 "youtube".to_owned()
14 }
15
16 fn form(&self) -> crate::core::ast::BlockConstructorForm {
17 BlockConstructorForm::Basic
18 }
19
20 fn apply(
21 &self,
22 _context: &mut Context,
23 main_text: Vec<InlineObjectNode>,
24 _param: Option<HzdataValue>,
25 _: Vec<Vec<InlineObjectNode>>,
26 ) -> HtmlNode {
27 HtmlNode::create_tag_builder("iframe")
28 .set_attr(
29 "src",
30 format!(
31 "https://www.youtube.com/embed/{}",
32 main_text
33 .raw()
34 .iter()
35 .map(|t| t.text.clone())
36 .collect::<String>()
37 ),
38 )
39 .set_attr("width", "560")
40 .set_attr("height", "315")
41 .set_attr("title", "YouTube video player")
42 .set_attr("frameborder", "0")
43 .set_attr("allow", "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture")
44 .set_attr("allowfullscreen","")
45 .build()
46 }
47}