use crate::Result;
use crate::runtime::Runtime;
use crate::support::html::slim;
use mlua::{Lua, Table};
pub fn init_module(lua: &Lua, _runtime: &Runtime) -> Result<Table> {
let table = lua.create_table()?;
let prune_fn = lua.create_function(prune_to_content_lua)?;
table.set("prune_to_content", prune_fn)?;
Ok(table)
}
fn prune_to_content_lua(_lua: &Lua, html_content: String) -> mlua::Result<String> {
slim(html_content).map_err(|err| mlua::Error::RuntimeError(format!("Failed to prune HTML content: {}", err)))
}
#[cfg(test)]
mod tests {
type Result<T> = core::result::Result<T, Box<dyn std::error::Error>>;
use crate::_test_support::{eval_lua, setup_lua};
use crate::script::lua_script::aip_html;
#[tokio::test]
async fn test_lua_html_prune_to_content_ok() -> Result<()> {
let lua = setup_lua(aip_html::init_module, "html")?;
let fx_script = r#"
local html_content = [[
<!DOCTYPE html>
<html>
<head>
<script>alert('test');</script>
<style>body { color: red; }</style>
</head>
<body>
<div class="content">Hello World</div>
<!-- comment -->
</body>
</html>
]]
return aip.html.prune_to_content(html_content)
"#;
let res = eval_lua(&lua, fx_script)?;
let cleaned_html = res.as_str().unwrap();
assert!(!cleaned_html.contains("<script>"));
assert!(!cleaned_html.contains("<style>"));
assert!(!cleaned_html.contains("<!-- comment -->"));
assert!(cleaned_html.contains(r#"<div class="content">Hello World</div>"#));
Ok(())
}
}