A webmail client. Forked from https://git.sr.ht/~migadu/alps
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

196 line
7.0 KiB

  1. {{template "head.html" .}}
  2. {{template "nav.html" .}}
  3. {{define "message-part-tree"}}
  4. {{/* nested templates can't access the parent's context */}}
  5. {{$ = index . 0}}
  6. {{with index . 1}}
  7. <a
  8. class="nav-link"
  9. {{if .IsText}}
  10. href="{{$.Message.URL}}?part={{.PathString}}"
  11. {{else}}
  12. href="{{$.Message.URL}}/raw?part={{.PathString}}"
  13. {{end}}
  14. >
  15. {{if eq $.Part.PathString .PathString}}<strong>{{end}}
  16. {{.String}}
  17. {{if eq $.Part.PathString .PathString}}</strong>{{end}}
  18. </a>
  19. {{if gt (len .Children) 0}}
  20. <ul class="nav flex-column">
  21. {{range .Children}}
  22. <li class="nav-item">{{template "message-part-tree" (tuple $ .)}}</li>
  23. {{end}}
  24. </ul>
  25. {{end}}
  26. {{end}}
  27. {{end}}
  28. <div class="page-wrap">
  29. {{$current := .Mailbox}}
  30. <aside>
  31. <!-- the logo image, dimensions 200x32 may be present or not -->
  32. <a href="/compose" class="new">Compose&nbsp;Mail</a>
  33. {{$current := .Mailbox}}
  34. {{range .Mailboxes}}
  35. <a href="{{.URL}}"
  36. {{ if eq $current.Name .Name }}class="active"{{ end }}>
  37. {{ if eq .Name "INBOX" }}
  38. Inbox
  39. {{else}}
  40. {{.Name}}
  41. {{end}}
  42. {{ if eq $current.Name .Name }}
  43. {{ if $current.Unseen }}({{ $current.Unseen }}){{ end }}
  44. {{ end }}
  45. </a>
  46. {{end}}
  47. </aside>
  48. <div class="container">
  49. <main class="message">
  50. <section class="actions">
  51. <div class="actions-wrap">
  52. <div class="actions-message">
  53. {{$back := printf "%v?page=%v" .Mailbox.URL .MailboxPage}}
  54. <a href="{{$back}}" class="button-link">« Back</a>
  55. {{ if and (ne .Mailbox.Name "Archive") (ne .Mailbox.Name "Drafts") (ne .Mailbox.Name "Sent") }}
  56. <form class="action-group" method="post" action="/message/{{.Mailbox.Name | pathescape}}/move">
  57. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  58. <input type="hidden" name="to" value="Archive">
  59. <input type="hidden" name="next" value="{{$back}}">
  60. <button>Archive</button>
  61. </form>
  62. {{ end }}
  63. {{ if and (ne .Mailbox.Name "INBOX") (ne .Mailbox.Name "Sent") (ne .Mailbox.Name "Drafts") }}
  64. <form class="action-group" method="post" action="/message/{{.Mailbox.Name | pathescape}}/move">
  65. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  66. <input type="hidden" name="to" value="INBOX">
  67. <button>
  68. {{ if (eq .Mailbox.Name "Junk") }}
  69. Not Spam
  70. {{ else }}
  71. Move to Inbox
  72. {{ end }}
  73. </button>
  74. </form>
  75. {{ end }}
  76. {{ if or (eq .Mailbox.Name "INBOX") (eq .Mailbox.Name "Trash") }}
  77. <form class="action-group" method="post" action="/message/{{.Mailbox.Name | pathescape}}/move">
  78. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  79. <input type="hidden" name="next" value="{{$back}}">
  80. <input type="hidden" name="to" value="Junk">
  81. <button>Report Spam</button>
  82. </form>
  83. {{ end }}
  84. {{ if or (eq .Mailbox.Name "Trash") (eq .Mailbox.Name "Junk") }}
  85. <form class="action-group" method="post" action="/message/{{.Mailbox.Name | pathescape}}/delete">
  86. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  87. <input type="hidden" name="next" value="{{$back}}">
  88. <button>Delete Permanently</button>
  89. </form>
  90. {{ else }}
  91. <form class="action-group" method="post" action="/message/{{.Mailbox.Name | pathescape}}/move">
  92. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  93. <input type="hidden" name="next" value="{{$back}}">
  94. <input type="hidden" name="to" value="Trash">
  95. <button>Delete</button>
  96. </form>
  97. {{ end }}
  98. <form class="action-group" method="post" action="/message/{{.Mailbox.Name | pathescape}}/flag">
  99. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  100. <input type="hidden" name="action" value="remove">
  101. <input type="hidden" name="flags" value="\Seen">
  102. <input type="hidden" name="next" value="{{$back}}">
  103. <button>Mark&nbsp;Unread</button>
  104. </form>
  105. <form class="action-group" method="post" action="/message/{{.Mailbox.Name | pathescape}}/move">
  106. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  107. <select class="action-group" name="to">
  108. {{range .Mailboxes}}
  109. <option value="{{.Name}}" {{if eq .Name $.Mailbox.Name}}selected>Move to...{{else}}>{{.Name}}{{ end }}</option>
  110. {{end}}
  111. </select>
  112. <button class="action-group" type="submit">Move</button>
  113. </form>
  114. <span class="followups">
  115. {{if .Message.HasFlag "\\Draft"}}
  116. <a class="action-group button-link" href="{{.Message.URL}}/edit?part={{.Message.TextPartName}}">Edit draft</a>
  117. {{else}}
  118. <a class="action-group button-link" href="{{.Message.URL}}/reply?part={{.Message.TextPartName}}">Reply</a>
  119. <a class="action-group button-link" href="{{.Message.URL}}/forward?part={{.Message.TextPartName}}">Forward</a>
  120. {{end}}
  121. </span>
  122. </div>
  123. </div>
  124. </section>
  125. <div class="message-header">
  126. <table>
  127. <tr>
  128. <th colspan="2">
  129. <h1>
  130. {{if .Message.Envelope.Subject}}
  131. {{.Message.Envelope.Subject}}
  132. {{else}}
  133. (No subject)
  134. {{end}}
  135. </h1>
  136. </th>
  137. </tr>
  138. <tr>
  139. <th>From:</th>
  140. <td>{{template "addr-list" .Message.Envelope.From}}</td>
  141. </tr>
  142. <tr>
  143. <th>Date:</th>
  144. <td>{{.Message.Envelope.Date | formatdate}}</td>
  145. </tr>
  146. <tr>
  147. <th>To:</th><td>{{template "addr-list" .Message.Envelope.To}}</td>
  148. </tr>
  149. {{if .Message.Envelope.Cc}}
  150. <tr>
  151. <th>Cc:</th><td>{{template "addr-list" .Message.Envelope.Cc}}</td>
  152. </tr>
  153. {{end}}
  154. {{if .Message.Envelope.Bcc}}
  155. <tr>
  156. <th>Bcc:</th>
  157. <td>{{template "addr-list" .Message.Envelope.Bcc}}</td>
  158. </tr>
  159. {{ end }}
  160. </table>
  161. <section class="parts">
  162. {{template "message-part-tree" (tuple $ .Message.PartTree)}}
  163. </section>
  164. </div>
  165. {{define "addr-list"}}
  166. {{range $i, $addr := .}}
  167. {{if $i}},{{end}}
  168. <strong>{{.PersonalName}}</strong>
  169. &lt;<a href="/compose?to={{.Address}}">{{.Address}}</a>&gt;
  170. {{end}}
  171. {{end}}
  172. {{if .View}}
  173. {{.View}}
  174. {{else}}
  175. <p>Can't preview this message part.</p>
  176. <a href="{{.Message.Uid}}/raw?part={{.Part.PathString}}">Download</a>
  177. {{end}}
  178. </main>
  179. </div>
  180. </div>
  181. {{template "foot.html"}}