github.com/vlifesystems/rulehunter@v0.0.0-20180501090014-673078aa4a83/html/report_tpl.go (about) 1 // Copyright (C) 2016-2018 vLife Systems Ltd <http://vlifesystems.com> 2 // Licensed under an MIT licence. Please see LICENSE.md for details. 3 4 package html 5 6 const reportTpl = ` 7 <!DOCTYPE html> 8 <html> 9 <head> 10 {{ index .Html "head" }} 11 <title>{{.Title}}</title> 12 </head> 13 14 <body> 15 {{ index .Html "nav" }} 16 17 <div id="content"> 18 <div class="container"> 19 <h1>{{.Title}}</h1> 20 Date: {{ .DateTime }} 21 Mode: {{ .Mode }} 22 {{if .Category}} 23 Category: <a href="{{ .CategoryURL }}">{{ .Category }}</a> 24 {{end}} 25 {{if .Tags}} 26 Tags: 27 {{range $tag, $tagLink := .Tags}} 28 <a href="{{ $tagLink }}">{{ $tag }}</a> 29 {{end}} 30 {{end}} 31 <br /> 32 <br /> 33 </div> 34 35 <div class="container"> 36 <h2>Results</h2> 37 38 {{ $numAssessments := len .Assessments }} 39 {{ $assessments := .Assessments }} 40 {{range $i, $a := .Assessments}} 41 <div class="rule"> 42 {{if eq $numAssessments 1}} 43 <h3>No rule found that improves on the original dataset</h3> 44 45 <div class="pull-left aggregators"> 46 <table class="table table-bordered"> 47 <tr> 48 <th>Aggregator</th> 49 <th>Value</th> 50 </tr> 51 {{ range $a.Aggregators }} 52 <tr> 53 <td>{{ .Name }}</td> 54 <td>{{ .OriginalValue }}</td> 55 </tr> 56 {{ end }} 57 </table> 58 </div> 59 60 {{if $a.Goals}} 61 <div class="pull-left"> 62 <table class="table table-bordered"> 63 <tr> 64 <th>Goal</th><th>Value</th> 65 </tr> 66 {{ range $a.Goals }} 67 <tr> 68 <td>{{ .Expr }}</td> 69 <td class="goalPassed-{{.OriginalPassed}}"> 70 {{ .OriginalPassed }} 71 </td> 72 </tr> 73 {{ end }} 74 </table> 75 </div> 76 {{end}} 77 78 {{else}} 79 {{ if IsLast $i $assessments | not}} 80 <h3>{{ .Rule }}</h3> 81 <div class="pull-left aggregators"> 82 <table class="table table-bordered"> 83 <tr> 84 <th>Aggregator</th> 85 <th>Original Value</th> 86 <th>Rule Value</th> 87 <th>Change</th> 88 </tr> 89 {{ range $a.Aggregators }} 90 <tr> 91 <td>{{ .Name }}</td> 92 <td>{{ .OriginalValue }}</td> 93 <td>{{ .RuleValue }}</td> 94 <td>{{ .Difference }}</td> 95 </tr> 96 {{ end }} 97 </table> 98 </div> 99 100 {{if $a.Goals}} 101 <div class="pull-left"> 102 <table class="table table-bordered"> 103 <tr> 104 <th>Goal</th><th>Original Value</th><th>Rule Value</th> 105 </tr> 106 {{ range $a.Goals }} 107 <tr> 108 <td>{{ .Expr }}</td> 109 <td class="goalPassed-{{.OriginalPassed}}"> 110 {{ .OriginalPassed }} 111 </td> 112 <td class="goalPassed-{{.RulePassed}}"> 113 {{ .RulePassed }} 114 </td> 115 </tr> 116 {{ end }} 117 </table> 118 </div> 119 {{end}} 120 121 {{ end }} 122 {{ end }} 123 </div> 124 {{ end }} 125 </div> 126 127 128 <div class="container"> 129 <h2>Experiment Details</h2> 130 <p>Experiment file: {{ .ExperimentFilename }}</p> 131 <br /> 132 <table class="table table-bordered table-nonfluid"> 133 <tr> 134 <th>Sort Order</th><th>Direction</th> 135 </tr> 136 {{range .SortOrder}} 137 <tr> 138 <td>{{ .Aggregator }}</td><td>{{ .Direction }}</td> 139 </tr> 140 {{end}} 141 </table> 142 143 {{if .Aggregators}} 144 <table class="table table-bordered"> 145 <tr> 146 <th>Aggregator Name</th><th>Kind</th><th>Arg</th> 147 </tr> 148 {{range .Aggregators}} 149 <tr> 150 <td>{{ .Name }}</td><td>{{ .Kind }}</td><td>{{ .Arg }}</td> 151 </tr> 152 {{end}} 153 </table> 154 {{end}} 155 </div> 156 157 <div class="container"> 158 <h2>Data Set</h2> 159 The data set contained {{ .NumRecords }} records.</br /> 160 <br /> 161 <table class="table table-bordered"> 162 <tr> 163 <th>Field</th> 164 <th>Kind</th> 165 <th>Min</th> 166 <th>Max</th> 167 <th>MaxDP</th> 168 <th>Values - ('value', freq)</th> 169 </tr> 170 {{range $field, $fd := .Description.Fields}} 171 <tr> 172 <td>{{ $field }}</td> 173 <td>{{ $fd.Kind }}</td> 174 {{if eq $fd.Kind.String "Number"}} 175 <td>{{ $fd.Min }}</td> 176 <td>{{ $fd.Max }}</td> 177 <td>{{ $fd.MaxDP }}</td> 178 {{else}} 179 <td>N/A</td><td>N/A</td><td>N/A</td> 180 {{end}} 181 <td> 182 {{range $value, $valueDesc := $fd.Values}} 183 ('{{ $value }}', {{ $valueDesc.Num }}) 184 {{end}} 185 </td> 186 </tr> 187 {{end}} 188 </table> 189 </div> 190 191 </div> 192 193 194 <div id="footer" class="container"> 195 {{ index .Html "footer" }} 196 </div> 197 198 {{ index .Html "bootstrapJS" }} 199 </body> 200 </html>`