github.com/Cloud-Foundations/Dominator@v0.3.4/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  var endTable = []byte("</table>\n")
    16  
    17  func newTableWriter(writer io.Writer, doHighlighting bool,
    18  	columns []string) (*TableWriter, error) {
    19  	if len(columns) > 0 {
    20  		if doHighlighting {
    21  			fmt.Fprintf(writer, "  <tr style=\"background-color:%s\">\n",
    22  				headingBackground)
    23  		} else {
    24  			fmt.Fprintln(writer, "  <tr>")
    25  		}
    26  	}
    27  	for _, column := range columns {
    28  		fmt.Fprintf(writer, "    <th>%s</th>\n", column)
    29  	}
    30  	fmt.Fprintln(writer, "  </tr>")
    31  	return &TableWriter{
    32  		doHighlighting: doHighlighting,
    33  		writer:         writer,
    34  	}, nil
    35  }
    36  
    37  func (tw *TableWriter) close() error {
    38  	_, err := tw.writer.Write(endTable)
    39  	return err
    40  }
    41  
    42  func (tw *TableWriter) closeRow() error {
    43  	_, err := fmt.Fprintln(tw.writer, "  </tr>")
    44  	return err
    45  }
    46  
    47  func (tw *TableWriter) openRow(foreground, background string) error {
    48  	if foreground == "" {
    49  		foreground = defaultForeground
    50  	}
    51  	if background == "" {
    52  		background = defaultBackground
    53  	}
    54  	if background == defaultBackground &&
    55  		tw.lastBackground == defaultBackground {
    56  		background = highlightBackground
    57  	}
    58  	var err error
    59  	if background == defaultBackground {
    60  		if foreground == defaultForeground {
    61  			_, err = fmt.Fprintln(tw.writer, "  <tr>")
    62  		} else {
    63  			_, err = fmt.Fprintf(tw.writer, "  <tr style=\"color:%s\">\n",
    64  				foreground)
    65  		}
    66  	} else {
    67  		if foreground == defaultForeground {
    68  			_, err = fmt.Fprintf(tw.writer,
    69  				"  <tr style=\"background-color:%s\">\n", background)
    70  		} else {
    71  			_, err = fmt.Fprintf(tw.writer,
    72  				"  <tr style=\"background-color:%s;color:%s\">\n",
    73  				background, foreground)
    74  		}
    75  	}
    76  	tw.lastBackground = background
    77  	return err
    78  }
    79  
    80  func (tw *TableWriter) writeData(foreground, data string) error {
    81  	if foreground == "" {
    82  		foreground = defaultForeground
    83  	}
    84  	var err error
    85  	if foreground == defaultForeground {
    86  		_, err = fmt.Fprintf(tw.writer, "    <td>%s</td>\n", data)
    87  	} else {
    88  		_, err = fmt.Fprintf(tw.writer,
    89  			"    <td><font color=\"%s\">%s</font></td>\n",
    90  			foreground, data)
    91  	}
    92  	return err
    93  }
    94  
    95  func (tw *TableWriter) writeRow(foreground, background string,
    96  	columns []string) error {
    97  	if err := tw.OpenRow(foreground, background); err != nil {
    98  		return err
    99  	}
   100  	for _, column := range columns {
   101  		fmt.Fprintf(tw.writer, "    <td>%s</td>\n", column)
   102  	}
   103  	return tw.CloseRow()
   104  }