ความคืบหน้างาน ไฟล์ต้นฉบับ

tracker/templates/overview.html

{{define "content"}}
<header class="page-head">
  <h1>หน้าภาพรวม</h1>
  <p class="lede">ความคืบหน้างานของทีมในโครงการ TNSU EMS หน้านี้อัปเดตเองเมื่อข้อมูลงานหรือบันทึกของ Agent เปลี่ยน</p>
</header>

<section class="stats" aria-label="สรุปตัวเลข">
  <a class="stat" href="/milestones">
    <h2 class="stat-label">Task</h2>
    <p class="stat-num">{{.Counts.Total}}</p>
    <div class="mix" aria-hidden="true">
      {{if .Counts.Reviewed}}<span class="mix-reviewed" style="flex:{{.Counts.Reviewed}}"></span>{{end}}
      {{if .Counts.Done}}<span class="mix-done" style="flex:{{.Counts.Done}}"></span>{{end}}
      {{if .Counts.InProgress}}<span class="mix-in_progress" style="flex:{{.Counts.InProgress}}"></span>{{end}}
      {{if .Counts.Review}}<span class="mix-review" style="flex:{{.Counts.Review}}"></span>{{end}}
      {{if .Counts.Todo}}<span class="mix-todo" style="flex:{{.Counts.Todo}}"></span>{{end}}
    </div>
    <dl class="stat-break">
      <div><dt>Reviewed</dt><dd>{{.Counts.Reviewed}}</dd></div>
      <div><dt>Done</dt><dd>{{.Counts.Done}}</dd></div>
      <div><dt>In Progress</dt><dd>{{.Counts.InProgress}}</dd></div>
      <div><dt>Wait for review</dt><dd>{{.Counts.Review}}</dd></div>
      <div><dt>Todo</dt><dd>{{.Counts.Todo}}</dd></div>
    </dl>
  </a>
  <a class="stat" href="/reviews">
    <h2 class="stat-label">Review</h2>
    <p class="stat-num">{{len .Reviews}}</p>
    {{if .Reviews}}
    <p class="stat-note">งานรอรีวิว ชิ้นที่รอนานที่สุด: {{(index .Reviews 0).Title}}</p>
    {{else}}
    <p class="stat-note">ไม่มีงานค้างรีวิว</p>
    {{end}}
  </a>
  <a class="stat" href="/checkpoints">
    <h2 class="stat-label">Checkpoint</h2>
    <p class="stat-num">{{len .Checkpoints}}</p>
    {{with .LastCheckpoint}}
    <p class="stat-note">ล่าสุด {{ago .When}}: {{.Title}}</p>
    {{else}}
    <p class="stat-note">ยังไม่มีบันทึกสรุปจาก Agent</p>
    {{end}}
  </a>
</section>

<section class="block" aria-labelledby="h-current">
  <div class="block-head"><h2 id="h-current">Current Task</h2></div>
  {{if .Current}}
  <div class="current">
    {{range .Current}}
    <article class="task-now">
      <header class="task-now-head">
        <p class="task-now-ms">{{template "where" .Where}} <span class="tid">{{.ID}}</span></p>
        <h3><a href="{{taskHref .ID}}">{{.Title}}</a></h3>
        <p class="task-now-meta">{{if .Owner}}ผู้รับผิดชอบ {{.Owner}}{{end}}{{if .Started}} เริ่ม {{thaiDate .Started}}{{end}}</p>
        {{if .Summary}}<p class="task-now-sum">{{.Summary}}</p>{{end}}
      </header>
      <div class="meter" role="img" aria-label="ทำแล้ว {{len .Done}} จาก {{add (len .Done) (len .Left)}} ขั้น">
        <span style="width:{{.Percent}}%"></span>
      </div>
      <p class="meter-text">ทำแล้ว {{len .Done}} จาก {{add (len .Done) (len .Left)}} ขั้น{{if .Left}} เหลืออีก {{len .Left}} ขั้นก่อนปิด Task{{else}} พร้อมปิด Task{{end}}</p>
      <div class="steps">
        <div>
          <h4>ส่วนที่คืบหน้าแล้ว</h4>
          {{if .Done}}<ul class="step-list">{{range .Done}}<li class="step-done">{{.Text}}</li>{{end}}</ul>{{else}}<p class="muted">ยังไม่มีขั้นที่เสร็จ</p>{{end}}
        </div>
        <div>
          <h4>ส่วนที่ยังเหลือก่อนปิด Task</h4>
          {{if .Left}}<ul class="step-list">{{range .Left}}<li class="step-left">{{.Text}}</li>{{end}}</ul>{{else}}<p class="muted">ไม่มีขั้นที่เหลือ</p>{{end}}
        </div>
      </div>
    </article>
    {{end}}
  </div>
  {{else}}
  <p class="empty">ไม่มีงานที่กำลังทำ ตั้ง <code>"status": "in_progress"</code> ให้ task ที่เริ่มทำ แล้วงานจะขึ้นที่นี่</p>
  {{end}}
</section>

<section class="block" aria-labelledby="h-lanes">
  <div class="block-head">
    <h2 id="h-lanes">Milestone ทั้งหมด</h2>
    {{template "legend"}}
  </div>
  {{if .Milestones}}
  <div class="lanes">{{range .Milestones}}{{template "lane" .}}{{end}}</div>
  {{else}}
  <p class="empty">ยังไม่มี milestone เพิ่มได้ใน <code>tracker/data/milestones.json</code></p>
  {{end}}
</section>
{{end}}