use maud::{Markup, PreEscaped, Render, html};
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct Init {
surrealjs: bool,
scoped_css: bool,
signals: bool,
}
impl Init {
pub fn new() -> Self {
Self::default()
}
pub fn surrealjs(mut self) -> Self {
self.surrealjs = true;
self
}
pub fn scoped_css(mut self) -> Self {
self.scoped_css = true;
self
}
pub fn signals(mut self) -> Self {
self.signals = true;
self
}
pub fn build(self) -> Markup {
let mut scripts = Vec::new();
if self.surrealjs {
scripts.push(sanitized_script(include_str!("../assets/surreal.js")));
}
if self.scoped_css {
scripts.push(sanitized_script(include_str!("../assets/css-scope-inline.js")));
}
if self.signals {
scripts.push(sanitized_script(include_str!("../assets/signals-core.min.js")));
scripts.push(sanitized_script(include_str!("../assets/signals-adapter.js")));
}
html! {
@for script_text in scripts {
script { (PreEscaped(script_text)) }
}
}
}
pub fn all() -> Markup {
Self::new().surrealjs().scoped_css().signals().build()
}
}
impl Render for Init {
fn render(&self) -> Markup {
(*self).build()
}
}
fn sanitized_script(source: &str) -> String {
source
.replace("</script>", "<\\/script>")
.replace("</SCRIPT>", "<\\/SCRIPT>")
.replace("</Script>", "<\\/Script>")
}