-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhtml.go
More file actions
98 lines (80 loc) · 2.34 KB
/
html.go
File metadata and controls
98 lines (80 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package json2docs
import (
"encoding/json"
"fmt"
"io/ioutil"
"strings"
"github.com/buger/jsonparser"
)
func HtmlTabularGenerator(format []byte, data []byte, filename string) (string, error) {
// Parse the format and data JSON arrays
var formatData Format
err := json.Unmarshal(format, &formatData)
if err != nil {
return "", err
}
// Create the HTML table string
tableHTML := `<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
}
</style>`
// Add header lines
tableHTML += `<p style="font-size:25px;text-align: center;font-family:'arial';">`
for _, header := range formatData.Header {
tableHTML += fmt.Sprintf(`<span>%s</span><br>`, header.Text)
}
tableHTML += "</p>"
tableHTML += `<table width='100%' style="font-family:'arial';">`
// Add table header
tableHTML += "<tr style='background-color:rgb(220,220,220);color:#000'>"
for _, header := range formatData.BodyHeader {
tableHTML += fmt.Sprintf("<th style='font-size:18px;'>%s</th>", header.Text)
}
tableHTML += "</tr>"
// Add table rows
var items [][]byte
i := 0
jsonparser.ArrayEach(data, func(item []byte, dataType jsonparser.ValueType, offset int, err error) {
items = append(items, item)
var tds []string
for td, _ := range formatData.BodyFields {
tds = append(tds, fmt.Sprintf("%d", td))
}
tableHTML += "<tr>"
jsonparser.ObjectEach(item, func(key []byte, value []byte, dataType jsonparser.ValueType, offset int) error {
for j, field := range formatData.BodyFields {
if field.Field == string(key) {
if IsDigit(string(value)) {
tds[j] = fmt.Sprintf("<td style='text-align: right' >%s</td>", value)
} else {
tds[j] = fmt.Sprintf("<td>%s</td>", value)
}
}
}
return nil
})
tableHTML += strings.Join(tds, "")
tableHTML += "</tr>"
i++
})
// Add summary row
tableHTML += "<tr style='background-color:rgb(220,220,220);color:#000'>"
for _, summary := range formatData.Summary {
if IsDigit(string(summary.Text)) {
tableHTML += fmt.Sprintf("<td style='text-align: right' >%s</td>", summary.Text)
} else {
tableHTML += fmt.Sprintf("<td>%s</td>", summary.Text)
}
}
tableHTML += "</tr>"
tableHTML += "</table>"
// Save the HTML file
filename = filename + ".html"
err = ioutil.WriteFile(filename, []byte(tableHTML), 0644)
if err != nil {
return "", err
}
return filename, nil
}