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 }