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.
 
 
 
 

184 lines
5.6 KiB

  1. {{template "head.html" .Global}}
  2. {{template "nav.html" .Global}}
  3. <div class="container-fluid">
  4. <div class="row">
  5. <div class="col-md-12 header-tabbed">
  6. <h2 style="margin-bottom: 1rem;" class="d-block">
  7. {{if .Message.Envelope.Subject}}
  8. {{.Message.Envelope.Subject}}
  9. {{else}}
  10. (No subject)
  11. {{end}}
  12. </h2>
  13. <div class="container message-tabs">
  14. <ul class="nav nav-tabs">
  15. <li class="nav-item">
  16. <a class="nav-link active" href="#">View message</a>
  17. </li>
  18. <li class="nav-item">
  19. <a
  20. class="nav-link"
  21. href="{{.Message.URL}}/reply?part={{.Part.PathString}}"
  22. >Reply</a>
  23. </li>
  24. <li class="nav-item">
  25. <a
  26. class="nav-link"
  27. href="{{.Message.URL}}/forward?part={{.Part.PathString}}"
  28. >Forward</a>
  29. </li>
  30. <li class="mr-auto d-none d-sm-flex"></li>
  31. <li class="nav-item">
  32. <a
  33. class="nav-link"
  34. href="/mailbox/{{.Mailbox.Name | pathescape}}?page={{.MailboxPage}}"
  35. >
  36. <span class="icon icon-caret-left">
  37. {{template "caret-left.html"}}
  38. </span>
  39. Back
  40. </a>
  41. </li>
  42. </ul>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. {{define "message-part-tree"}}
  48. {{/* nested templates can't access the parent's context */}}
  49. {{$ = index . 0}}
  50. {{with index . 1}}
  51. <a
  52. class="nav-link"
  53. {{if .IsText}}
  54. href="{{$.Message.URL}}?part={{.PathString}}"
  55. {{else}}
  56. href="{{$.Message.URL}}/raw?part={{.PathString}}"
  57. {{end}}
  58. >
  59. {{if eq $.Part.PathString .PathString}}<strong>{{end}}
  60. {{.String}}
  61. {{if eq $.Part.PathString .PathString}}</strong>{{end}}
  62. </a>
  63. {{if gt (len .Children) 0}}
  64. <ul class="nav flex-column">
  65. {{range .Children}}
  66. <li class="nav-item">{{template "message-part-tree" (tuple $ .)}}</li>
  67. {{end}}
  68. </ul>
  69. {{end}}
  70. {{end}}
  71. {{end}}
  72. <div class="container message-container">
  73. <div class="row">
  74. <div class="col-md-9 body-column">
  75. {{define "addr-list"}}
  76. {{range $i, $addr := .}}
  77. {{- if $i}},{{end}}
  78. {{.PersonalName}}
  79. &lt;<a href="/compose?to={{.Address}}">{{.Address}}</a>&gt;
  80. {{- end}}
  81. {{end}}
  82. <ul>
  83. <li>
  84. <strong>Date</strong>: {{.Message.Envelope.Date | formatdate}}
  85. </li>
  86. <li>
  87. <strong>From</strong>: {{template "addr-list" .Message.Envelope.From}}
  88. </li>
  89. <li>
  90. <strong>To</strong>: {{template "addr-list" .Message.Envelope.To}}
  91. </li>
  92. {{if .Message.Envelope.Cc}}
  93. <li>
  94. <strong>Cc</strong>: {{template "addr-list" .Message.Envelope.Cc}}
  95. </li>
  96. {{end}}
  97. {{if .Message.Envelope.Bcc}}
  98. <li>
  99. <strong>Bcc</strong>: {{template "addr-list" .Message.Envelope.Bcc}}
  100. </li>
  101. {{end}}
  102. </ul>
  103. {{if and .Extra.HasRemoteResources (not .Extra.RemoteResourcesAllowed)}}
  104. <p class="alert alert-info">
  105. This message contains remote content.
  106. <a href="?part={{.Part.PathString}}&allow-remote-resources=1" class="alert-link">Load</a>
  107. </p>
  108. {{end}}
  109. {{if .View}}
  110. {{.View}}
  111. {{else}}
  112. <p>Can't preview this message part.</p>
  113. <a href="{{.Message.URL}}/raw?part={{.Part.PathString}}">Download</a>
  114. {{end}}
  115. </div>
  116. <div class="col-md-3 parts-column">
  117. {{template "message-part-tree" (tuple $ .Message.PartTree)}}
  118. <details>
  119. <summary>Move to another mailbox</summary>
  120. <form method="post" action="/message/{{.Mailbox.Name | pathescape}}/move">
  121. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  122. <div class="form-group">
  123. <select class="form-control" name="to" id="move-to">
  124. {{range .Mailboxes}}
  125. <option {{if eq .Name $.Mailbox.Name}}selected{{end}}>{{.Name}}</option>
  126. {{end}}
  127. </select>
  128. </div>
  129. <div class="pull-right">
  130. <button class="btn btn-primary">Move</button>
  131. </div>
  132. </form>
  133. </details>
  134. <details>
  135. <summary>Delete</summary>
  136. <form method="post" action="/message/{{.Mailbox.Name | pathescape}}/delete">
  137. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  138. <p>Are you sure?</p>
  139. <div class="pull-right">
  140. <button class="btn btn-danger">Delete</button>
  141. </div>
  142. </form>
  143. </details>
  144. {{if .Flags}}
  145. <details>
  146. <summary>Edit flags</summary>
  147. <form method="post" action="/message/{{.Mailbox.Name | pathescape}}/flag">
  148. <input type="hidden" name="uids" value="{{.Message.Uid}}">
  149. <div class="form-group">
  150. {{range $name, $has := .Flags}}
  151. {{if ismutableflag $name}}
  152. <input type="checkbox" name="flags" id="flag-{{$name}}"
  153. value="{{$name}}" {{if $has}}checked{{end}}>
  154. <label for="flag-{{$name}}">{{$name | formatflag}}</label>
  155. <br>
  156. {{else}}
  157. {{if $has}}
  158. <input type="hidden" name="flags" value="{{$name}}">
  159. {{end}}
  160. {{end}}
  161. {{end}}
  162. </div>
  163. <div class="pull-right">
  164. <button class="btn btn-primary">Save</button>
  165. </div>
  166. </form>
  167. </details>
  168. {{end}}
  169. </div>
  170. </div>
  171. </div>
  172. {{template "foot.html"}}