github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/html/table.go (about)

     1  package html
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  )
     7  
     8  const (
     9  	defaultBackground   = "white"
    10  	defaultForeground   = "black"
    11  	headingBackground   = "#f0f0f0"
    12  	highlightBackground = "#fafafa"
    13  )
    14  
    15  func newTableWriter(writer io.Writer, doHighlighting bool,
    16  	columns []string) (*TableWriter, error) {
    17  	if len(columns) > 0 {
    18  		if doHighlighting {
    19  			fmt.Fprintf(writer, "  <tr style=\"background-color:%s\">\n",
    20  				headingBackground)
    21  		} else {
    22  			fmt.Fprintln(writer, "  <tr>")
    23  		}
    24  	}
    25  	for _, column := range columns {
    26  		fmt.Fprintf(writer, "    <th>%s</th>\n", column)
    27  	}
    28  	fmt.Fprintln(writer, "  </tr>")
    29  	return &TableWriter{
    30  		doHighlighting: doHighlighting,
    31  		writer:         writer,
    32  	}, nil
    33  }
    34  
    35  func (tw *TableWriter) closeRow() error {
    36  	_, err := fmt.Fprintln(tw.writer, "  </tr>")
    37  	return err
    38  }
    39  
    40  func (tw *TableWriter) openRow(foreground, background string) error {
    41  	if foreground == "" {
    42  		foreground = defaultForeground
    43  	}
    44  	if background == "" {
    45  		background = defaultBackground
    46  	}
    47  	if background == defaultBackground &&
    48  		tw.lastBackground == defaultBackground {
    49  		background = highlightBackground
    50  	}
    51  	var err error
    52  	if background == defaultBackground {
    53  		if foreground == defaultForeground {
    54  			_, err = fmt.Fprintln(tw.writer, "  <tr>")
    55  		} else {
    56  			_, err = fmt.Fprintf(tw.writer, "  <tr style=\"color:%s\">\n",
    57  				foreground)
    58  		}
    59  	} else {
    60  		if foreground == defaultForeground {
    61  			_, err = fmt.Fprintf(tw.writer,
    62  				"  <tr style=\"background-color:%s\">\n", background)
    63  		} else {
    64  			_, err = fmt.Fprintf(tw.writer,
    65  				"  <tr style=\"background-color:%s;color:%s\">\n",
    66  				background, foreground)
    67  		}
    68  	}
    69  	tw.lastBackground = background
    70  	return err
    71  }
    72  
    73  func (tw *TableWriter) writeData(foreground, data string) error {
    74  	if foreground == "" {
    75  		foreground = defaultForeground
    76  	}
    77  	var err error
    78  	if foreground == defaultForeground {
    79  		_, err = fmt.Fprintf(tw.writer, "    <td>%s</td>\n", data)
    80  	} else {
    81  		_, err = fmt.Fprintf(tw.writer,
    82  			"    <td><font color=\"%s\">%s</font></td>\n",
    83  			foreground, data)
    84  	}
    85  	return err
    86  }
    87  
    88  func (tw *TableWriter) writeRow(foreground, background string,
    89  	columns []string) error {
    90  	if err := tw.OpenRow(foreground, background); err != nil {
    91  		return err
    92  	}
    93  	for _, column := range columns {
    94  		fmt.Fprintf(tw.writer, "    <td>%s</td>\n", column)
    95  	}
    96  	return tw.CloseRow()
    97  }