github.com/drone/runner-go@v1.12.0/handler/template/template_gen.go (about) 1 package template 2 3 import "html/template" 4 5 // list of embedded template files. 6 var files = []struct { 7 name string 8 data string 9 }{ 10 { 11 name: "index.tmpl", 12 data: index, 13 }, { 14 name: "logs.tmpl", 15 data: logs, 16 }, { 17 name: "stage.tmpl", 18 data: stage, 19 }, 20 } 21 22 // T exposes the embedded templates. 23 var T *template.Template 24 25 func init() { 26 T = template.New("_").Funcs(funcMap) 27 for _, file := range files { 28 T = template.Must( 29 T.New(file.name).Parse(file.data), 30 ) 31 } 32 } 33 34 // 35 // embedded template files. 36 // 37 38 // files/index.tmpl 39 var index = `<!DOCTYPE html> 40 <html> 41 <head> 42 <meta charset="UTF-8"> 43 <meta http-equiv="refresh" content="10"> 44 <title>Dashboard</title> 45 <link rel="stylesheet" type="text/css" href="/static/reset.css"> 46 <link rel="stylesheet" type="text/css" href="/static/style.css"> 47 <link rel="icon" type="image/png" id="favicon" href="/static/favicon.png"> 48 <script src="/static/timeago.js" type="text/javascript"></script> 49 </head> 50 <body> 51 52 <header class="navbar"> 53 <div class="logo"> 54 <svg viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path d="M12.086 5.814l-.257.258 10.514 10.514C20.856 18.906 20 21.757 20 25c0 9.014 6.618 15 15 15 3.132 0 6.018-.836 8.404-2.353l10.568 10.568C48.497 55.447 39.796 60 30 60 13.434 60 0 46.978 0 30 0 19.903 4.751 11.206 12.086 5.814zm5.002-2.97C20.998 1.015 25.378 0 30 0c16.566 0 30 13.022 30 30 0 4.67-1.016 9.04-2.835 12.923l-9.508-9.509C49.144 31.094 50 28.243 50 25c0-9.014-6.618-15-15-15-3.132 0-6.018.836-8.404 2.353l-9.508-9.508zM35 34c-5.03 0-9-3.591-9-9s3.97-9 9-9c5.03 0 9 3.591 9 9s-3.97 9-9 9z" id="a"></path></defs><use fill="#FFF" xlink:href="#a" fill-rule="evenodd"></use></svg> 55 </div> 56 <nav class="inline-nav"> 57 <ul> 58 <li><a href="/" class="active">Dashboard</a></li> 59 <li><a href="/logs">Logging</a></li> 60 </ul> 61 </nav> 62 </header> 63 64 <main> 65 <section> 66 <header> 67 <h1>Dashboard</h1> 68 </header> 69 <article class="cards stages"> 70 {{ if not .Items }} 71 <div class="alert sleeping"> 72 <p>There is no recent activity to display.</p> 73 </div> 74 {{ else if .Idle }} 75 <div class="alert sleeping"> 76 <p>This runner is currently idle.</p> 77 </div> 78 {{ end }} 79 {{ range .Items }} 80 <a href="/view?id={{ .Stage.ID }}" class="card stage"> 81 <h2>{{ .Repo.Slug }}</h2> 82 <img src="{{ .Build.AuthorAvatar }}" /> 83 <span class="connector"></span> 84 <span class="status {{ .Stage.Status }}"></span> 85 <span class="desc">assigned stage <em>{{ .Stage.Name }}</em> for build <em>#{{ .Build.Number }}</em></span> 86 <span class="time" datetime="{{ if .Stage.Started }}{{ timestamp .Stage.Started }}{{ else }}{{ timestamp .Stage.Created }}{{ end }}"></span> 87 </a> 88 {{ end }} 89 </article> 90 </section> 91 </main> 92 93 <footer></footer> 94 95 <script> 96 timeago.render(document.querySelectorAll('.time')); 97 </script> 98 </body> 99 </html>` 100 101 // files/logs.tmpl 102 var logs = `<!DOCTYPE html> 103 <html> 104 <head> 105 <meta charset="UTF-8"> 106 <title>Dashboard</title> 107 <link rel="stylesheet" type="text/css" href="/static/reset.css"> 108 <link rel="stylesheet" type="text/css" href="/static/style.css"> 109 <link rel="icon" type="image/png" id="favicon" href="/static/favicon.png"> 110 <script src="/static/timeago.js" type="text/javascript"></script> 111 </head> 112 <body> 113 114 <header class="navbar"> 115 <div class="logo"> 116 <svg viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path d="M12.086 5.814l-.257.258 10.514 10.514C20.856 18.906 20 21.757 20 25c0 9.014 6.618 15 15 15 3.132 0 6.018-.836 8.404-2.353l10.568 10.568C48.497 55.447 39.796 60 30 60 13.434 60 0 46.978 0 30 0 19.903 4.751 11.206 12.086 5.814zm5.002-2.97C20.998 1.015 25.378 0 30 0c16.566 0 30 13.022 30 30 0 4.67-1.016 9.04-2.835 12.923l-9.508-9.509C49.144 31.094 50 28.243 50 25c0-9.014-6.618-15-15-15-3.132 0-6.018.836-8.404 2.353l-9.508-9.508zM35 34c-5.03 0-9-3.591-9-9s3.97-9 9-9c5.03 0 9 3.591 9 9s-3.97 9-9 9z" id="a"></path></defs><use fill="#FFF" xlink:href="#a" fill-rule="evenodd"></use></svg> 117 </div> 118 <nav class="inline-nav"> 119 <ul> 120 <li><a href="/">Dashboard</a></li> 121 <li><a href="/logs" class="active">Logging</a></li> 122 </ul> 123 </nav> 124 </header> 125 126 <main> 127 <section> 128 <header> 129 <h1>Recent Logs</h1> 130 </header> 131 {{ if .Entries }} 132 <article class="logs"> 133 {{ range .Entries }} 134 <div class="entry"> 135 <span class="level {{ .Level }}">{{ .Level }}</span> 136 <span class="message">{{ .Message }}</span> 137 <span class="fields"> 138 {{ range $key, $val := .Data }} 139 <span><em>{{ $key }}</em>{{ $val }}</span> 140 {{ end }} 141 </span> 142 <span class="time" datetime="{{ timestamp .Unix }}"></span> 143 </div> 144 {{ end }} 145 </article> 146 {{ else }} 147 <div class="alert sleeping"> 148 <p>There is no recent log activity to display.</p> 149 </div> 150 {{ end }} 151 </section> 152 </main> 153 154 <footer></footer> 155 156 <script> 157 timeago.render(document.querySelectorAll('.time')); 158 </script> 159 </body> 160 </html>` 161 162 // files/stage.tmpl 163 var stage = `<!DOCTYPE html> 164 <html> 165 <head> 166 <meta charset="UTF-8"> 167 {{- if not (done .Stage.Status) }} 168 <meta http-equiv="refresh" content="30"> 169 {{- end }} 170 <title>Dashboard</title> 171 <link rel="stylesheet" type="text/css" href="/static/reset.css"> 172 <link rel="stylesheet" type="text/css" href="/static/style.css"> 173 <link rel="icon" type="image/png" id="favicon" href="/static/favicon.png"> 174 <script src="/static/timeago.js" type="text/javascript"></script> 175 </head> 176 <body> 177 178 <header class="navbar"> 179 <div class="logo"> 180 <svg viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path d="M12.086 5.814l-.257.258 10.514 10.514C20.856 18.906 20 21.757 20 25c0 9.014 6.618 15 15 15 3.132 0 6.018-.836 8.404-2.353l10.568 10.568C48.497 55.447 39.796 60 30 60 13.434 60 0 46.978 0 30 0 19.903 4.751 11.206 12.086 5.814zm5.002-2.97C20.998 1.015 25.378 0 30 0c16.566 0 30 13.022 30 30 0 4.67-1.016 9.04-2.835 12.923l-9.508-9.509C49.144 31.094 50 28.243 50 25c0-9.014-6.618-15-15-15-3.132 0-6.018.836-8.404 2.353l-9.508-9.508zM35 34c-5.03 0-9-3.591-9-9s3.97-9 9-9c5.03 0 9 3.591 9 9s-3.97 9-9 9z" id="a"></path></defs><use fill="#FFF" xlink:href="#a" fill-rule="evenodd"></use></svg> 181 </div> 182 <nav class="inline-nav"> 183 <ul> 184 <li><a href="/">Dashboard</a></li> 185 <li><a href="/logs">Logging</a></li> 186 </ul> 187 </nav> 188 </header> 189 190 <main> 191 <section> 192 <nav class="breadcrumb"> 193 <ul> 194 <li><a href="/">Dashboard</a></li> 195 <li class="separator"></li> 196 <li>{{ .Repo.Slug }}</li> 197 <li class="separator"></li> 198 <li>#{{ .Build.Number }}</li> 199 </ul> 200 </nav> 201 <header> 202 <h1>{{ .Repo.Name }}</h1> 203 </header> 204 205 <div class="card stage"> 206 <h2>{{ .Build.Message }}</h2> 207 <img src="{{ .Build.AuthorAvatar }}" /> 208 <span class="connector"></span> 209 <span class="status {{ .Stage.Status }}"></span> 210 {{ if eq .Build.Event "pull_request" }} 211 {{ if eq .Build.Action "synchronized" }} 212 <span class="desc">{{ .Build.Author }} synchronized pull request <em>#{{ pr .Build.Ref }}</em></span> 213 {{ else }} 214 <span class="desc">{{ .Build.Author }} opened pull request <em>#{{ pr .Build.Ref }}</em> to <em>{{ .Build.Target }}</em></span> 215 {{ end }} 216 {{ else if eq .Build.Event "tag" }} 217 <span class="desc">{{ .Build.Author }} created reference <em>{{ tag .Build.Ref }}</em></span> 218 {{ else if eq .Build.Event "promote"}} 219 <span class="desc">{{ .Build.Author }} promoted build <em>#{{ .Build.Parent }}</em> to <em>{{ .Build.Deploy }}</em></span> 220 {{ else if eq .Build.Event "rollback"}} 221 <span class="desc">{{ .Build.Author }} reverted <em>{{ .Build.Deploy }}</em> to <em>#{{ .Build.Parent }}</em></span> 222 {{ else if eq .Build.Event "cron"}} 223 <span class="desc">Executed <em>{{ .Build.Cron }}</em> for branch <em>{{ .Build.Target }}</em></span> 224 {{ else }} 225 <span class="desc">{{ .Build.Author }} pushed <em>{{ sha .Build.After }}</em> to <em>{{ .Build.Target }}</em></span> 226 {{ end }} 227 <span class="time" datetime="{{ if .Stage.Started }}{{ timestamp .Stage.Started }}{{ else }}{{ timestamp .Stage.Created }}{{ end }}"></span> 228 </div> 229 230 {{ if .Stage.Steps }} 231 <div class="card steps"> 232 <div class="body"> 233 {{ range .Stage.Steps }} 234 <div class="step"> 235 <span class="status {{ .Status }}"></span> 236 <span class="name">{{ .Name }}</span> 237 <span class="status-name">{{ .Status }}</span> 238 </div> 239 {{ end }} 240 </div> 241 </div> 242 {{ end }} 243 244 {{ if .Logs }} 245 <div class="logs"> 246 {{ range .Logs }} 247 <div class="entry"> 248 <span class="level {{ .Level }}">{{ .Level }}</span> 249 <span class="message">{{ .Message }}</span> 250 <span class="fields"> 251 {{ range $key, $val := .Data }} 252 <span><em>{{ $key }}</em>{{ $val }}</span> 253 {{ end }} 254 </span> 255 <span class="time" datetime="{{ timestamp .Unix }}"></span> 256 </div> 257 {{ end }} 258 </div> 259 {{ end }} 260 </section> 261 </main> 262 263 <footer></footer> 264 265 <script> 266 timeago.render(document.querySelectorAll('.time')); 267 </script> 268 </body> 269 </html>`