Add --partial to 'to html' (#2291)

This commit is contained in:
Jonathan Turner 2020-08-03 08:47:54 +12:00 committed by GitHub
parent a88f5c7ae7
commit f33da33626
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 28 deletions

View File

@ -15,6 +15,7 @@ pub struct ToHTMLArgs {
html_color: bool, html_color: bool,
no_color: bool, no_color: bool,
dark: bool, dark: bool,
partial: bool,
theme: Option<Tagged<String>>, theme: Option<Tagged<String>>,
} }
@ -33,6 +34,11 @@ impl WholeStreamCommand for ToHTML {
"indicate your background color is a darker color", "indicate your background color is a darker color",
Some('d'), Some('d'),
) )
.switch(
"partial",
"only output the html for the content itself",
Some('p'),
)
.named( .named(
"theme", "theme",
SyntaxShape::String, SyntaxShape::String,
@ -244,6 +250,7 @@ async fn to_html(
html_color, html_color,
no_color, no_color,
dark, dark,
partial,
theme, theme,
}, },
input, input,
@ -252,14 +259,14 @@ async fn to_html(
let headers = nu_protocol::merge_descriptors(&input); let headers = nu_protocol::merge_descriptors(&input);
let headers = Some(headers) let headers = Some(headers)
.filter(|headers| !headers.is_empty() && (headers.len() > 1 || headers[0] != "")); .filter(|headers| !headers.is_empty() && (headers.len() > 1 || headers[0] != ""));
let mut output_string = "<html>".to_string(); let mut output_string = String::new();
let mut regex_hm: HashMap<u32, (&str, String)> = HashMap::new(); let mut regex_hm: HashMap<u32, (&str, String)> = HashMap::new();
let color_hm = get_colors(dark, &theme); let color_hm = get_colors(dark, &theme);
// change the color of the page // change the color of the page
if !partial {
output_string.push_str(&format!( output_string.push_str(&format!(
// r"<style>body {{ background-color:{};color:{};font-family:'FiraFira Code'; }}</style><body>", r"<html><style>body {{ background-color:{};color:{}; }}</style><body>",
r"<style>body {{ background-color:{};color:{}; }}</style><body>",
color_hm color_hm
.get("background") .get("background")
.expect("Error getting background color"), .expect("Error getting background color"),
@ -267,24 +274,40 @@ async fn to_html(
.get("foreground") .get("foreground")
.expect("Error getting foreground color") .expect("Error getting foreground color")
)); ));
} else {
output_string.push_str(&format!(
"<div style=\"background-color:{};color:{};\">",
color_hm
.get("background")
.expect("Error getting background color"),
color_hm
.get("foreground")
.expect("Error getting foreground color")
));
}
let inner_value = match input.len() { let inner_value = match input.len() {
0 => String::default(), 0 => String::default(),
1 => match headers { 1 => match headers {
Some(headers) => html_table(input, headers, color_hm), Some(headers) => html_table(input, headers),
None => { None => {
let value = &input[0]; let value = &input[0];
html_value(value) html_value(value)
} }
}, },
_ => match headers { _ => match headers {
Some(headers) => html_table(input, headers, color_hm), Some(headers) => html_table(input, headers),
None => html_list(input), None => html_list(input),
}, },
}; };
output_string.push_str(&inner_value); output_string.push_str(&inner_value);
if !partial {
output_string.push_str("</body></html>"); output_string.push_str("</body></html>");
} else {
output_string.push_str("</div>")
}
// Check to see if we want to remove all color or change ansi to html colors // Check to see if we want to remove all color or change ansi to html colors
if html_color { if html_color {
@ -312,25 +335,14 @@ fn html_list(list: Vec<Value>) -> String {
output_string output_string
} }
fn html_table(table: Vec<Value>, headers: Vec<String>, color_hm: HashMap<&str, String>) -> String { fn html_table(table: Vec<Value>, headers: Vec<String>) -> String {
let mut output_string = String::new(); let mut output_string = String::new();
// Add grid lines to html // Add grid lines to html
// let mut output_string = "<html><head><style>".to_string(); // let mut output_string = "<html><head><style>".to_string();
// output_string.push_str("table, th, td { border: 2px solid black; border-collapse: collapse; padding: 10px; }"); // output_string.push_str("table, th, td { border: 2px solid black; border-collapse: collapse; padding: 10px; }");
// output_string.push_str("</style></head><body>"); // output_string.push_str("</style></head><body>");
// output_string.push_str("<table>"); output_string.push_str("<table>");
// change the color of tables
output_string.push_str(&format!(
r"<table style='background-color:{};color:{};'>",
color_hm
.get("background")
.expect("Error getting background color"),
color_hm
.get("foreground")
.expect("Error getting foreground color")
));
output_string.push_str("<tr>"); output_string.push_str("<tr>");
for header in &headers { for header in &headers {

View File

@ -15,6 +15,21 @@ fn out_html_simple() {
); );
} }
#[test]
fn out_html_partial() {
let actual = nu!(
cwd: ".", pipeline(
r#"
echo 3 | to html -p
"#
));
assert_eq!(
actual.out,
"<div style=\"background-color:white;color:black;\">3</div>"
);
}
#[test] #[test]
fn out_html_table() { fn out_html_table() {
let actual = nu!( let actual = nu!(
@ -26,7 +41,7 @@ fn out_html_table() {
assert_eq!( assert_eq!(
actual.out, actual.out,
r"<html><style>body { background-color:white;color:black; }</style><body><table style='background-color:white;color:black;'><tr><th>name</th></tr><tr><td>darren</td></tr></table></body></html>" r"<html><style>body { background-color:white;color:black; }</style><body><table><tr><th>name</th></tr><tr><td>darren</td></tr></table></body></html>"
); );
} }