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 }