mirror of
https://github.com/DioxusLabs/dioxus
synced 2025-02-16 13:48:26 +00:00
Fix special characters in head elements (#3031)
This commit is contained in:
parent
a693ddffa3
commit
1053943073
1 changed files with 18 additions and 3 deletions
|
@ -16,10 +16,23 @@ pub use eval::*;
|
||||||
pub mod head;
|
pub mod head;
|
||||||
pub use head::{Meta, MetaProps, Script, ScriptProps, Style, StyleProps, Title, TitleProps};
|
pub use head::{Meta, MetaProps, Script, ScriptProps, Style, StyleProps, Title, TitleProps};
|
||||||
|
|
||||||
|
fn format_string_for_js(s: &str) -> String {
|
||||||
|
let escaped = s
|
||||||
|
.replace('\\', "\\\\")
|
||||||
|
.replace('\n', "\\n")
|
||||||
|
.replace('\r', "\\r")
|
||||||
|
.replace('"', "\\\"");
|
||||||
|
format!("\"{escaped}\"")
|
||||||
|
}
|
||||||
|
|
||||||
fn format_attributes(attributes: &[(&str, String)]) -> String {
|
fn format_attributes(attributes: &[(&str, String)]) -> String {
|
||||||
let mut formatted = String::from("[");
|
let mut formatted = String::from("[");
|
||||||
for (key, value) in attributes {
|
for (key, value) in attributes {
|
||||||
formatted.push_str(&format!("[{key:?}, {value:?}],"));
|
formatted.push_str(&format!(
|
||||||
|
"[{}, {}],",
|
||||||
|
format_string_for_js(key),
|
||||||
|
format_string_for_js(value)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
if formatted.ends_with(',') {
|
if formatted.ends_with(',') {
|
||||||
formatted.pop();
|
formatted.pop();
|
||||||
|
@ -36,9 +49,11 @@ fn create_element_in_head(
|
||||||
let helpers = include_str!("../js/head.js");
|
let helpers = include_str!("../js/head.js");
|
||||||
let attributes = format_attributes(attributes);
|
let attributes = format_attributes(attributes);
|
||||||
let children = children
|
let children = children
|
||||||
.map(|c| format!("\"{c}\""))
|
.as_deref()
|
||||||
|
.map(format_string_for_js)
|
||||||
.unwrap_or("null".to_string());
|
.unwrap_or("null".to_string());
|
||||||
format!(r#"{helpers};window.createElementInHead("{tag}", {attributes}, {children});"#)
|
let tag = format_string_for_js(tag);
|
||||||
|
format!(r#"{helpers};window.createElementInHead({tag}, {attributes}, {children});"#)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A provider for document-related functionality. By default most methods are driven through [`eval`].
|
/// A provider for document-related functionality. By default most methods are driven through [`eval`].
|
||||||
|
|
Loading…
Add table
Reference in a new issue