cerrado @ adc207d2e6c39fa31283d83021e76300c0099c37

feat: Simplify listing
  1diff --git a/scss/main.scss b/scss/main.scss
  2index 26218e875bfea6718f40e7173d5d7b7528a4db9c..ac8d2c41f227563bf083b39514f4449ab440413b 100644
  3--- a/scss/main.scss
  4+++ b/scss/main.scss
  5@@ -1,8 +1,9 @@
  6-//$card-border-width: 0;
  7-$card-border-radius: 0;
  8-$card-cap-padding-y: 0;
  9-$card-cap-padding-x: 5px;
 10-$card-group-margin: 10 px;
 11+// disable gutter
 12+$grid-gutter-width: 0;
 13+
 14+$base-font-size: 1rem;
 15+$font_family_monospace: monospace;
 16+$headings-margin-bottom: 0;
 17 
 18 // basic functionality
 19 @import "bootstrap/scss/_functions.scss";
 20@@ -17,7 +18,6 @@ @import "bootstrap/scss/_root.scss";
 21 @import "bootstrap/scss/_containers.scss";
 22 @import "bootstrap/scss/_nav.scss";
 23 @import "bootstrap/scss/_navbar.scss";
 24-@import "bootstrap/scss/_card.scss";
 25 @import "bootstrap/scss/_grid.scss";
 26 
 27 
 28@@ -29,3 +29,30 @@
 29 .card-body {
 30   padding: 5px;
 31 }
 32+
 33+.navbar-nav {
 34+  margin-top: 0px
 35+}
 36+
 37+.event-list {
 38+    margin-bottom: 1rem;
 39+}
 40+
 41+.event:first-child {
 42+    margin-top: 0;
 43+}
 44+
 45+.event {
 46+    text-overflow: ellipsis;
 47+    overflow: hidden;
 48+    padding: 0.5rem;
 49+    margin: 0.5rem 0;
 50+    background: #f8f9fa;
 51+}
 52+
 53+.event > h4 {
 54+  margin: 0;
 55+}
 56+.event > p {
 57+  margin: 0.5rem 0;
 58+}
 59diff --git a/templates/base.qtpl b/templates/base.qtpl
 60index df6c6fc96023c9c6e0254ff2457e91d4a20ac08c..6654f42a73f2ba9287aa5f6614891d2b6a75f9a9 100644
 61--- a/templates/base.qtpl
 62+++ b/templates/base.qtpl
 63@@ -31,15 +31,12 @@         <link rel="stylesheet" href="/static/main.css">
 64         <meta name="viewport" content="width=device-width, initial-scale=1" />
 65     </head>
 66     <body>
 67-        <nav class="navbar navbar-expand bg-body-tertiary">
 68-          <div class="container-fluid">
 69-            <div class="collapse navbar-collapse">
 70-              <div class="navbar-nav">
 71-                <a class="nav-link" href="/git">git</a>
 72-                <a class="nav-link" href="/list">list</a>
 73-              </div>
 74-            </div>
 75-          </div>
 76+        <nav class="container navbar navbar-expand-sm">
 77+          <ul class="navbar-nav">
 78+            <li class="nav-link" href="/git">git</li>
 79+            <li class="nav-link" href="/list">list</li>
 80+            <li class="nav-link" href="/about">about</li>
 81+          </ul>
 82         </nav>
 83         <div class="container">
 84             {%= p.Content() %}
 85diff --git a/templates/base.qtpl.go b/templates/base.qtpl.go
 86index f78744dd11eaa501772cc9945807fc405f570cf2..2573b99ef3b0fed08c2e52be745d2fe128a6ef07 100644
 87--- a/templates/base.qtpl.go
 88+++ b/templates/base.qtpl.go
 89@@ -73,156 +73,153 @@         <link rel="stylesheet" href="/static/main.css">
 90         <meta name="viewport" content="width=device-width, initial-scale=1" />
 91     </head>
 92     <body>
 93-        <nav class="navbar navbar-expand bg-body-tertiary">
 94-          <div class="container-fluid">
 95-            <div class="collapse navbar-collapse">
 96-              <div class="navbar-nav">
 97-                <a class="nav-link" href="/git">git</a>
 98-                <a class="nav-link" href="/list">list</a>
 99-              </div>
100-            </div>
101-          </div>
102+        <nav class="container navbar navbar-expand-sm">
103+          <ul class="navbar-nav">
104+            <li class="nav-link" href="/git">git</li>
105+            <li class="nav-link" href="/list">list</li>
106+            <li class="nav-link" href="/about">about</li>
107+          </ul>
108         </nav>
109         <div class="container">
110             `)
111-//line base.qtpl:45
112+//line base.qtpl:42
113 	p.StreamContent(qw422016)
114-//line base.qtpl:45
115+//line base.qtpl:42
116 	qw422016.N().S(`
117         </div>
118     </body>
119     `)
120-//line base.qtpl:48
121+//line base.qtpl:45
122 	p.StreamScript(qw422016)
123-//line base.qtpl:48
124+//line base.qtpl:45
125 	qw422016.N().S(`
126 </html>
127 `)
128-//line base.qtpl:50
129+//line base.qtpl:47
130 }
131 
132-//line base.qtpl:50
133+//line base.qtpl:47
134 func WritePageTemplate(qq422016 qtio422016.Writer, p Page) {
135-//line base.qtpl:50
136+//line base.qtpl:47
137 	qw422016 := qt422016.AcquireWriter(qq422016)
138-//line base.qtpl:50
139+//line base.qtpl:47
140 	StreamPageTemplate(qw422016, p)
141-//line base.qtpl:50
142+//line base.qtpl:47
143 	qt422016.ReleaseWriter(qw422016)
144-//line base.qtpl:50
145+//line base.qtpl:47
146 }
147 
148-//line base.qtpl:50
149+//line base.qtpl:47
150 func PageTemplate(p Page) string {
151-//line base.qtpl:50
152+//line base.qtpl:47
153 	qb422016 := qt422016.AcquireByteBuffer()
154-//line base.qtpl:50
155+//line base.qtpl:47
156 	WritePageTemplate(qb422016, p)
157-//line base.qtpl:50
158+//line base.qtpl:47
159 	qs422016 := string(qb422016.B)
160-//line base.qtpl:50
161+//line base.qtpl:47
162 	qt422016.ReleaseByteBuffer(qb422016)
163-//line base.qtpl:50
164+//line base.qtpl:47
165 	return qs422016
166-//line base.qtpl:50
167+//line base.qtpl:47
168 }
169 
170-//line base.qtpl:52
171+//line base.qtpl:49
172 type BasePage struct{}
173 
174-//line base.qtpl:53
175+//line base.qtpl:50
176 func (p *BasePage) StreamTitle(qw422016 *qt422016.Writer) {
177-//line base.qtpl:53
178+//line base.qtpl:50
179 	qw422016.N().S(`Empty`)
180-//line base.qtpl:53
181+//line base.qtpl:50
182 }
183 
184-//line base.qtpl:53
185+//line base.qtpl:50
186 func (p *BasePage) WriteTitle(qq422016 qtio422016.Writer) {
187-//line base.qtpl:53
188+//line base.qtpl:50
189 	qw422016 := qt422016.AcquireWriter(qq422016)
190-//line base.qtpl:53
191+//line base.qtpl:50
192 	p.StreamTitle(qw422016)
193-//line base.qtpl:53
194+//line base.qtpl:50
195 	qt422016.ReleaseWriter(qw422016)
196-//line base.qtpl:53
197+//line base.qtpl:50
198 }
199 
200-//line base.qtpl:53
201+//line base.qtpl:50
202 func (p *BasePage) Title() string {
203-//line base.qtpl:53
204+//line base.qtpl:50
205 	qb422016 := qt422016.AcquireByteBuffer()
206-//line base.qtpl:53
207+//line base.qtpl:50
208 	p.WriteTitle(qb422016)
209-//line base.qtpl:53
210+//line base.qtpl:50
211 	qs422016 := string(qb422016.B)
212-//line base.qtpl:53
213+//line base.qtpl:50
214 	qt422016.ReleaseByteBuffer(qb422016)
215-//line base.qtpl:53
216+//line base.qtpl:50
217 	return qs422016
218-//line base.qtpl:53
219+//line base.qtpl:50
220 }
221 
222-//line base.qtpl:54
223+//line base.qtpl:51
224 func (p *BasePage) StreamBody(qw422016 *qt422016.Writer) {
225-//line base.qtpl:54
226+//line base.qtpl:51
227 	qw422016.N().S(`HelloWorld`)
228-//line base.qtpl:54
229+//line base.qtpl:51
230 }
231 
232-//line base.qtpl:54
233+//line base.qtpl:51
234 func (p *BasePage) WriteBody(qq422016 qtio422016.Writer) {
235-//line base.qtpl:54
236+//line base.qtpl:51
237 	qw422016 := qt422016.AcquireWriter(qq422016)
238-//line base.qtpl:54
239+//line base.qtpl:51
240 	p.StreamBody(qw422016)
241-//line base.qtpl:54
242+//line base.qtpl:51
243 	qt422016.ReleaseWriter(qw422016)
244-//line base.qtpl:54
245+//line base.qtpl:51
246 }
247 
248-//line base.qtpl:54
249+//line base.qtpl:51
250 func (p *BasePage) Body() string {
251-//line base.qtpl:54
252+//line base.qtpl:51
253 	qb422016 := qt422016.AcquireByteBuffer()
254-//line base.qtpl:54
255+//line base.qtpl:51
256 	p.WriteBody(qb422016)
257-//line base.qtpl:54
258+//line base.qtpl:51
259 	qs422016 := string(qb422016.B)
260-//line base.qtpl:54
261+//line base.qtpl:51
262 	qt422016.ReleaseByteBuffer(qb422016)
263-//line base.qtpl:54
264+//line base.qtpl:51
265 	return qs422016
266-//line base.qtpl:54
267+//line base.qtpl:51
268 }
269 
270-//line base.qtpl:55
271+//line base.qtpl:52
272 func (p *BasePage) StreamScript(qw422016 *qt422016.Writer) {
273-//line base.qtpl:55
274+//line base.qtpl:52
275 }
276 
277-//line base.qtpl:55
278+//line base.qtpl:52
279 func (p *BasePage) WriteScript(qq422016 qtio422016.Writer) {
280-//line base.qtpl:55
281+//line base.qtpl:52
282 	qw422016 := qt422016.AcquireWriter(qq422016)
283-//line base.qtpl:55
284+//line base.qtpl:52
285 	p.StreamScript(qw422016)
286-//line base.qtpl:55
287+//line base.qtpl:52
288 	qt422016.ReleaseWriter(qw422016)
289-//line base.qtpl:55
290+//line base.qtpl:52
291 }
292 
293-//line base.qtpl:55
294+//line base.qtpl:52
295 func (p *BasePage) Script() string {
296-//line base.qtpl:55
297+//line base.qtpl:52
298 	qb422016 := qt422016.AcquireByteBuffer()
299-//line base.qtpl:55
300+//line base.qtpl:52
301 	p.WriteScript(qb422016)
302-//line base.qtpl:55
303+//line base.qtpl:52
304 	qs422016 := string(qb422016.B)
305-//line base.qtpl:55
306+//line base.qtpl:52
307 	qt422016.ReleaseByteBuffer(qb422016)
308-//line base.qtpl:55
309+//line base.qtpl:52
310 	return qs422016
311-//line base.qtpl:55
312+//line base.qtpl:52
313 }
314diff --git a/templates/gitlist.qtpl b/templates/gitlist.qtpl
315index 84a42f944fbfbd91ab43d14fc93c03a35a3092aa..fef912632b84fac88e3a587d3f28eed195d58d50 100644
316--- a/templates/gitlist.qtpl
317+++ b/templates/gitlist.qtpl
318@@ -1,6 +1,4 @@
319 {% import "git.gabrielgio.me/cerrado/pkg/service" %}
320-{% import "git.gabrielgio.me/cerrado/pkg/u" %}
321-
322 
323 {% code
324 type GitListPage struct {
325@@ -11,27 +9,23 @@
326 {% func (p *GitListPage) Title() %}Git | List{% endfunc %}
327 
328 {% func (p *GitListPage) Content() %}
329-{% for _, c := range u.ChunkBy(p.Respositories, 3) %}
330 <div class="row">
331-  {% for _, r := range c %}
332-  <div class="col-md g-1">
333-    <div class="card">
334-      <div class="card-header">
335-        <a href="/{%s r.Name %}" class="btn btn-primary">{%s r.Title %}</a>
336-      </div>
337-      <div class="card-body">
338-        <p class="card-text lead">{%s r.LastCommitMessage %}</p> 
339-        <p class="card-text"><small>{%s r.LastCommitDate %}</small></p> 
340-        <a href="#" class="card-link">summary</a>
341-        <a href="#" class="card-link">log</a>
342-        <a href="#" class="card-link">tree</a>
343+  <div class="col-md-8 offset-md-2">
344+    <div class="event-list">
345+      {% for _, r := range p.Respositories %}
346+      <div class="event">
347+        <h4>
348+          <a href="/{%s r.Name %}">{%s r.Name %}</a>
349+        </h4>
350+        </hr>
351+        <p>{%s r.LastCommitMessage %}</p>
352+        <p><small>{%s r.LastCommitDate %}</small></p>
353       </div>
354+      {% endfor %}
355     </div>
356+  {% endfunc %}
357   </div>
358-  {% endfor %}
359 </div>
360-{% endfor %}
361-{% endfunc %}
362 
363 {% func (p *GitListPage) Script() %}
364 {% endfunc %}
365diff --git a/templates/gitlist.qtpl.go b/templates/gitlist.qtpl.go
366index d16b8d5e143d4bd3c1c7f32faec093186c9ee319..89d1d71c2a63543102dcec825cc68031fdc436fa 100644
367--- a/templates/gitlist.qtpl.go
368+++ b/templates/gitlist.qtpl.go
369@@ -7,176 +7,163 @@
370 //line gitlist.qtpl:1
371 import "git.gabrielgio.me/cerrado/pkg/service"
372 
373-//line gitlist.qtpl:2
374-import "git.gabrielgio.me/cerrado/pkg/u"
375-
376-//line gitlist.qtpl:5
377+//line gitlist.qtpl:3
378 import (
379 	qtio422016 "io"
380 
381 	qt422016 "github.com/valyala/quicktemplate"
382 )
383 
384-//line gitlist.qtpl:5
385+//line gitlist.qtpl:3
386 var (
387 	_ = qtio422016.Copy
388 	_ = qt422016.AcquireByteBuffer
389 )
390 
391-//line gitlist.qtpl:6
392+//line gitlist.qtpl:4
393 type GitListPage struct {
394 	Respositories []*service.Repository
395 }
396 
397-//line gitlist.qtpl:11
398+//line gitlist.qtpl:9
399 func (p *GitListPage) StreamTitle(qw422016 *qt422016.Writer) {
400-//line gitlist.qtpl:11
401+//line gitlist.qtpl:9
402 	qw422016.N().S(`Git | List`)
403-//line gitlist.qtpl:11
404+//line gitlist.qtpl:9
405 }
406 
407-//line gitlist.qtpl:11
408+//line gitlist.qtpl:9
409 func (p *GitListPage) WriteTitle(qq422016 qtio422016.Writer) {
410-//line gitlist.qtpl:11
411+//line gitlist.qtpl:9
412 	qw422016 := qt422016.AcquireWriter(qq422016)
413-//line gitlist.qtpl:11
414+//line gitlist.qtpl:9
415 	p.StreamTitle(qw422016)
416-//line gitlist.qtpl:11
417+//line gitlist.qtpl:9
418 	qt422016.ReleaseWriter(qw422016)
419-//line gitlist.qtpl:11
420+//line gitlist.qtpl:9
421 }
422 
423-//line gitlist.qtpl:11
424+//line gitlist.qtpl:9
425 func (p *GitListPage) Title() string {
426-//line gitlist.qtpl:11
427+//line gitlist.qtpl:9
428 	qb422016 := qt422016.AcquireByteBuffer()
429-//line gitlist.qtpl:11
430+//line gitlist.qtpl:9
431 	p.WriteTitle(qb422016)
432-//line gitlist.qtpl:11
433+//line gitlist.qtpl:9
434 	qs422016 := string(qb422016.B)
435-//line gitlist.qtpl:11
436+//line gitlist.qtpl:9
437 	qt422016.ReleaseByteBuffer(qb422016)
438-//line gitlist.qtpl:11
439+//line gitlist.qtpl:9
440 	return qs422016
441-//line gitlist.qtpl:11
442+//line gitlist.qtpl:9
443 }
444 
445-//line gitlist.qtpl:13
446+//line gitlist.qtpl:11
447 func (p *GitListPage) StreamContent(qw422016 *qt422016.Writer) {
448-//line gitlist.qtpl:13
449+//line gitlist.qtpl:11
450 	qw422016.N().S(`
451-`)
452-//line gitlist.qtpl:14
453-	for _, c := range u.ChunkBy(p.Respositories, 3) {
454-//line gitlist.qtpl:14
455-		qw422016.N().S(`
456 <div class="row">
457-  `)
458-//line gitlist.qtpl:16
459-		for _, r := range c {
460-//line gitlist.qtpl:16
461-			qw422016.N().S(`
462-  <div class="col-md g-1">
463-    <div class="card">
464-      <div class="card-header">
465-        <a href="/`)
466-//line gitlist.qtpl:20
467-			qw422016.E().S(r.Name)
468-//line gitlist.qtpl:20
469-			qw422016.N().S(`" class="btn btn-primary">`)
470-//line gitlist.qtpl:20
471-			qw422016.E().S(r.Title)
472-//line gitlist.qtpl:20
473-			qw422016.N().S(`</a>
474+  <div class="col-md-8 offset-md-2">
475+    <div class="event-list">
476+      `)
477+//line gitlist.qtpl:15
478+	for _, r := range p.Respositories {
479+//line gitlist.qtpl:15
480+		qw422016.N().S(`
481+      <div class="event">
482+        <h4>
483+          <a href="/`)
484+//line gitlist.qtpl:18
485+		qw422016.E().S(r.Name)
486+//line gitlist.qtpl:18
487+		qw422016.N().S(`">`)
488+//line gitlist.qtpl:18
489+		qw422016.E().S(r.Name)
490+//line gitlist.qtpl:18
491+		qw422016.N().S(`</a>
492+        </h4>
493+        </hr>
494+        <p>`)
495+//line gitlist.qtpl:21
496+		qw422016.E().S(r.LastCommitMessage)
497+//line gitlist.qtpl:21
498+		qw422016.N().S(`</p>
499+        <p><small>`)
500+//line gitlist.qtpl:22
501+		qw422016.E().S(r.LastCommitDate)
502+//line gitlist.qtpl:22
503+		qw422016.N().S(`</small></p>
504       </div>
505-      <div class="card-body">
506-        <p class="card-text lead">`)
507-//line gitlist.qtpl:23
508-			qw422016.E().S(r.LastCommitMessage)
509-//line gitlist.qtpl:23
510-			qw422016.N().S(`</p> 
511-        <p class="card-text"><small>`)
512+      `)
513 //line gitlist.qtpl:24
514-			qw422016.E().S(r.LastCommitDate)
515+	}
516 //line gitlist.qtpl:24
517-			qw422016.N().S(`</small></p> 
518-        <a href="#" class="card-link">summary</a>
519-        <a href="#" class="card-link">log</a>
520-        <a href="#" class="card-link">tree</a>
521-      </div>
522+	qw422016.N().S(`
523     </div>
524-  </div>
525   `)
526-//line gitlist.qtpl:31
527-		}
528-//line gitlist.qtpl:31
529-		qw422016.N().S(`
530-</div>
531-`)
532-//line gitlist.qtpl:33
533-	}
534-//line gitlist.qtpl:33
535-	qw422016.N().S(`
536-`)
537-//line gitlist.qtpl:34
538+//line gitlist.qtpl:26
539 }
540 
541-//line gitlist.qtpl:34
542+//line gitlist.qtpl:26
543 func (p *GitListPage) WriteContent(qq422016 qtio422016.Writer) {
544-//line gitlist.qtpl:34
545+//line gitlist.qtpl:26
546 	qw422016 := qt422016.AcquireWriter(qq422016)
547-//line gitlist.qtpl:34
548+//line gitlist.qtpl:26
549 	p.StreamContent(qw422016)
550-//line gitlist.qtpl:34
551+//line gitlist.qtpl:26
552 	qt422016.ReleaseWriter(qw422016)
553-//line gitlist.qtpl:34
554+//line gitlist.qtpl:26
555 }
556 
557-//line gitlist.qtpl:34
558+//line gitlist.qtpl:26
559 func (p *GitListPage) Content() string {
560-//line gitlist.qtpl:34
561+//line gitlist.qtpl:26
562 	qb422016 := qt422016.AcquireByteBuffer()
563-//line gitlist.qtpl:34
564+//line gitlist.qtpl:26
565 	p.WriteContent(qb422016)
566-//line gitlist.qtpl:34
567+//line gitlist.qtpl:26
568 	qs422016 := string(qb422016.B)
569-//line gitlist.qtpl:34
570+//line gitlist.qtpl:26
571 	qt422016.ReleaseByteBuffer(qb422016)
572-//line gitlist.qtpl:34
573+//line gitlist.qtpl:26
574 	return qs422016
575-//line gitlist.qtpl:34
576+//line gitlist.qtpl:26
577 }
578 
579-//line gitlist.qtpl:36
580+//   </div>
581+// </div>
582+//
583+
584+//line gitlist.qtpl:30
585 func (p *GitListPage) StreamScript(qw422016 *qt422016.Writer) {
586-//line gitlist.qtpl:36
587+//line gitlist.qtpl:30
588 	qw422016.N().S(`
589 `)
590-//line gitlist.qtpl:37
591+//line gitlist.qtpl:31
592 }
593 
594-//line gitlist.qtpl:37
595+//line gitlist.qtpl:31
596 func (p *GitListPage) WriteScript(qq422016 qtio422016.Writer) {
597-//line gitlist.qtpl:37
598+//line gitlist.qtpl:31
599 	qw422016 := qt422016.AcquireWriter(qq422016)
600-//line gitlist.qtpl:37
601+//line gitlist.qtpl:31
602 	p.StreamScript(qw422016)
603-//line gitlist.qtpl:37
604+//line gitlist.qtpl:31
605 	qt422016.ReleaseWriter(qw422016)
606-//line gitlist.qtpl:37
607+//line gitlist.qtpl:31
608 }
609 
610-//line gitlist.qtpl:37
611+//line gitlist.qtpl:31
612 func (p *GitListPage) Script() string {
613-//line gitlist.qtpl:37
614+//line gitlist.qtpl:31
615 	qb422016 := qt422016.AcquireByteBuffer()
616-//line gitlist.qtpl:37
617+//line gitlist.qtpl:31
618 	p.WriteScript(qb422016)
619-//line gitlist.qtpl:37
620+//line gitlist.qtpl:31
621 	qs422016 := string(qb422016.B)
622-//line gitlist.qtpl:37
623+//line gitlist.qtpl:31
624 	qt422016.ReleaseByteBuffer(qb422016)
625-//line gitlist.qtpl:37
626+//line gitlist.qtpl:31
627 	return qs422016
628-//line gitlist.qtpl:37
629+//line gitlist.qtpl:31
630 }