diff --git a/htmlua-parser/src/render.rs b/htmlua-parser/src/render.rs index 21f66ba..eb50c2c 100644 --- a/htmlua-parser/src/render.rs +++ b/htmlua-parser/src/render.rs @@ -5,7 +5,7 @@ use kuchikiki::{NodeRef, traits::TendrilSink}; use mlua::{Lua, Table}; use pulldown_cmark::{Options, Parser, html}; -fn create_luahtml_stdlib(l: &Lua, stdout: &Rc>) -> mlua::Result { +fn create_htmlua_stdlib(l: &Lua, stdout: &Rc>) -> mlua::Result
{ let t = l.create_table()?; // This cannot be the best way to do this @@ -37,7 +37,7 @@ pub fn execute_lua(document: NodeRef) -> Result { let stdout: Rc> = Rc::new(RefCell::new(String::new())); let htmlua_table = - create_luahtml_stdlib(&lua, &stdout).map_err(|e| anyhow!("Failed to create Lua stdlib: {}", e))?; + create_htmlua_stdlib(&lua, &stdout).map_err(|e| anyhow!("Failed to create Lua stdlib: {}", e))?; globals .set("htmlua", htmlua_table) @@ -118,8 +118,9 @@ pub fn expand_template(document: NodeRef, component_path: &PathBuf, include_from let mut item_path = component_path.clone(); item_path.push(include_path); let component_text = read_to_string(item_path)?; - let new_node = kuchikiki::parse_html().one(component_text); - let replaced_node = expand_template(new_node, component_path, Some(i.as_node()))?; + let new_doc = kuchikiki::parse_html().one(component_text); + let new_node = new_doc.select_first("body").map_err(|()| anyhow!("Failed to get body"))?; + let replaced_node = expand_template(new_node.as_node().clone(), component_path, Some(i.as_node()))?; i.as_node().insert_before(replaced_node); i.as_node().detach(); } @@ -208,6 +209,37 @@ mod tests { assert!(d.select_first("include").is_err()); } + #[test] + fn basic_lua_include() { + let page = r#" + + + + Basic HTML Page + + +

Hello World

+

This is a paragraph.

+ + htmlua.println("Test from Lua!") + + + + "#; + let mut p = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + p.push("tests/components"); + let document = kuchikiki::parse_html().one(page); + let d = execute_lua(expand_template(document, &p, None).unwrap()).unwrap(); + let text = d.select_first("span").unwrap().as_node().text_contents(); + println!("{}", d.to_string()); + assert_eq!(text, "Test from Lua!\n"); + assert!(d.select_first("lua").is_err()); + let text = d.select_first("#inc1").unwrap().as_node().text_contents(); + assert_eq!(text, "included1"); + assert!(d.select_first("include").is_err()); + + } + #[test] fn recursive_include() { let page = r#" diff --git a/htmlua-parser/tests/components/comp1.html b/htmlua-parser/tests/components/comp1.html index 516d00e..4110604 100644 --- a/htmlua-parser/tests/components/comp1.html +++ b/htmlua-parser/tests/components/comp1.html @@ -1 +1 @@ -included1 +included1