html2md/rewriter/
iframes.rs1use crate::extended::base::iframe::{INSTAGRAM_PATTERN, VK_PATTERN, YOUTUBE_PATTERN};
2use lol_html::html_content::ContentType::Text;
3use lol_html::html_content::Element;
4
5pub(crate) fn handle_iframe(
7 element: &mut Element,
8) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
9 if let Some(src) = element.get_attribute("src") {
10 if let Some(capture) = YOUTUBE_PATTERN.captures(&src) {
11 let media_id = capture.get(1).map_or("", |m| m.as_str());
12 element.replace(
13 &format!("[](https://www.youtube.com/watch?v={})", media_id, media_id),
14 Text
15 );
16 return Ok(());
17 }
18
19 if let Some(capture) = INSTAGRAM_PATTERN.captures(&src) {
20 let media_id = capture.get(1).map_or("", |m| m.as_str());
21 element.replace(
22 &format!("[](https://www.instagram.com/p/{}/embed/)", media_id, media_id),
23 Text
24 );
25 return Ok(());
26 }
27
28 if let Some(capture) = VK_PATTERN.captures(&src) {
29 let owner_id = capture.get(1).map_or("", |m| m.as_str());
30 let video_id = capture.get(2).map_or("", |m| m.as_str());
31 element.replace(
32 &&format!("[](https://vk.com/video{oid}_{vid})", oid = owner_id, vid = video_id),
33 Text,
34 );
35 return Ok(());
36 }
37 }
38
39 Ok(())
40}
41
42pub(crate) fn handle_iframe_send(
44 element: &mut lol_html::send::Element,
45) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
46 if let Some(src) = element.get_attribute("src") {
47 if let Some(capture) = YOUTUBE_PATTERN.captures(&src) {
48 let media_id = capture.get(1).map_or("", |m| m.as_str());
49 element.replace(
50 &format!("[](https://www.youtube.com/watch?v={})", media_id, media_id),
51 Text
52 );
53 return Ok(());
54 }
55
56 if let Some(capture) = INSTAGRAM_PATTERN.captures(&src) {
57 let media_id = capture.get(1).map_or("", |m| m.as_str());
58 element.replace(
59 &format!("[](https://www.instagram.com/p/{}/embed/)", media_id, media_id),
60 Text
61 );
62 return Ok(());
63 }
64
65 if let Some(capture) = VK_PATTERN.captures(&src) {
66 let owner_id = capture.get(1).map_or("", |m| m.as_str());
67 let video_id = capture.get(2).map_or("", |m| m.as_str());
68 element.replace(
69 &&format!("[](https://vk.com/video{oid}_{vid})", oid = owner_id, vid = video_id),
70 Text,
71 );
72 return Ok(());
73 }
74 }
75
76 Ok(())
77}