From 40ebc1ddea28334f5db31135736223b940f57353 Mon Sep 17 00:00:00 2001 From: koalp Date: Wed, 19 May 2021 04:09:44 +0200 Subject: [PATCH] feat: allow to inject styles --- .../src/newspapers/courrier_international.rs | 7 --- .../src/tools/self_contained_html.rs | 63 +++++++++++++++++++ 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/crieur-retrieve/src/newspapers/courrier_international.rs b/crieur-retrieve/src/newspapers/courrier_international.rs index 187e5db..cd6799e 100644 --- a/crieur-retrieve/src/newspapers/courrier_international.rs +++ b/crieur-retrieve/src/newspapers/courrier_international.rs @@ -81,16 +81,9 @@ impl Newspaper for CourrierInternational { None => bail!("404 not found"), }; - // TODO: Move to const - let elements_to_remove = [ - // navigation elements - "#entete.connecte", - ]; - let single_page_html = tools::self_contained_html::Config { downloader: Some(&downloader), base_url: Some(&url), - elements_to_remove: &elements_to_remove, ..Default::default() } .run(&html) diff --git a/crieur-retrieve/src/tools/self_contained_html.rs b/crieur-retrieve/src/tools/self_contained_html.rs index 2a5ddac..2e9ea2e 100644 --- a/crieur-retrieve/src/tools/self_contained_html.rs +++ b/crieur-retrieve/src/tools/self_contained_html.rs @@ -169,6 +169,15 @@ where for element in self.elements_to_remove { document.select(element.as_ref()).remove(); } + + // ---- Add additional styles ---- + // + for style in self.styles_to_add { + document + .select("head") + .append_html(format!("\n\n", style.as_ref())); + } + String::from(document.html()) }; @@ -444,4 +453,58 @@ mod tests { ); Ok(()) } + + #[tokio::test] + async fn add_style() -> Result<()> { + let html = indoc! {" + + + + + + The body + + + "}; + + let wanted_html = indoc! {" + + + + + + The body + + "}; + + let style_to_add = indoc! {" + body { + margin: 3em; + } + "}; + + let base_url = Url::parse("http://example.com")?; + let downloader = DummyDownloader {}; + + let mut minifier = HTMLMinifier::new(); + minifier.digest(wanted_html)?; + let minified = String::from_utf8(minifier.get_html().into())?; + + assert_eq!( + Config { + downloader: Some(&downloader), + base_url: Some(&base_url), + styles_to_add: &[style_to_add], + ..Default::default() + } + .run(html) + .await, + minified + ); + Ok(()) + } }