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.
 
 
 
 

134 line
3.2 KiB

  1. {{template "head.html"}}
  2. <h1>koushin</h1>
  3. <p>
  4. <a href="/mailbox/{{.Mailbox.Name | pathescape}}?page={{.MailboxPage}}">
  5. Back
  6. </a>
  7. </p>
  8. <h2>
  9. {{if .Message.Envelope.Subject}}
  10. {{.Message.Envelope.Subject}}
  11. {{else}}
  12. (No subject)
  13. {{end}}
  14. </h2>
  15. <form method="post" action="{{.Message.Uid}}/move">
  16. <label for="move-to">Move to:</label>
  17. <select name="to" id="move-to">
  18. {{range .Mailboxes}}
  19. <option {{if eq .Name $.Mailbox.Name}}selected{{end}}>{{.Name}}</option>
  20. {{end}}
  21. </select>
  22. <input type="submit" value="Move">
  23. </form>
  24. <form method="post" action="{{.Message.Uid}}/delete">
  25. <input type="submit" value="Delete">
  26. </form>
  27. {{if .Flags}}
  28. <form method="post" action="{{.Message.Uid}}/flag">
  29. <p>Flags:</p>
  30. {{range $name, $has := .Flags}}
  31. {{if ismutableflag $name}}
  32. <input type="checkbox" name="flags" id="flag-{{$name}}"
  33. value="{{$name}}" {{if $has}}checked{{end}}>
  34. <label for="flag-{{$name}}">{{$name | formatflag}}</label>
  35. <br>
  36. {{else}}
  37. {{if $has}}
  38. <input type="hidden" name="flags" value="{{$name}}">
  39. {{end}}
  40. {{end}}
  41. {{end}}
  42. <input type="submit" value="Set flags">
  43. </form>
  44. {{end}}
  45. {{define "addr-list"}}
  46. {{range $i, $addr := .}}
  47. {{if $i}},{{end}}
  48. {{.PersonalName}}
  49. &lt;<a href="/compose?to={{.Address}}">{{.Address}}</a>&gt;
  50. {{end}}
  51. {{end}}
  52. <ul>
  53. <li>
  54. <strong>Date</strong>: {{.Message.Envelope.Date | formatdate}}
  55. </li>
  56. <li>
  57. <strong>From</strong>: {{template "addr-list" .Message.Envelope.From}}
  58. </li>
  59. <li>
  60. <strong>To</strong>: {{template "addr-list" .Message.Envelope.To}}
  61. </li>
  62. {{if .Message.Envelope.Cc}}
  63. <li>
  64. <strong>Cc</strong>: {{template "addr-list" .Message.Envelope.Cc}}
  65. </li>
  66. {{end}}
  67. {{if .Message.Envelope.Bcc}}
  68. <li>
  69. <strong>Bcc</strong>: {{template "addr-list" .Message.Envelope.Bcc}}
  70. </li>
  71. {{end}}
  72. </ul>
  73. {{define "message-part-tree"}}
  74. {{/* nested templates can't access the parent's context */}}
  75. {{$ = index . 0}}
  76. {{with index . 1}}
  77. <a
  78. {{if .IsText}}
  79. href="{{$.Message.Uid}}?part={{.PathString}}"
  80. {{else}}
  81. href="{{$.Message.Uid}}/raw?part={{.PathString}}"
  82. {{end}}
  83. >
  84. {{if eq $.PartPath .PathString}}<strong>{{end}}
  85. {{.String}}
  86. {{if eq $.PartPath .PathString}}</strong>{{end}}
  87. </a>
  88. {{if .Children}}
  89. <ul>
  90. {{range .Children}}
  91. <li>{{template "message-part-tree" (tuple $ .)}}</li>
  92. {{end}}
  93. </ul>
  94. {{end}}
  95. {{end}}
  96. {{end}}
  97. <p>Parts:</p>
  98. {{template "message-part-tree" (tuple $ .Message.PartTree)}}
  99. <hr>
  100. {{if .Body}}
  101. <p>
  102. {{if .Message.HasFlag "\\Draft"}}
  103. <a href="{{.Message.Uid}}/edit?part={{.PartPath}}">Edit draft</a>
  104. {{else}}
  105. <a href="{{.Message.Uid}}/reply?part={{.PartPath}}">Reply</a>
  106. {{end}}
  107. </p>
  108. {{if .IsHTML}}
  109. <!-- allow-same-origin is required to resize the frame with its content -->
  110. <!-- allow-popups is required for target="_blank" links -->
  111. <iframe id="email-frame" srcdoc="{{.Body}}" sandbox="allow-same-origin allow-popups"></iframe>
  112. {{else}}
  113. <pre>{{.Body}}</pre>
  114. {{end}}
  115. {{else}}
  116. <p>Can't preview this message part.</p>
  117. <a href="{{.Message.Uid}}/raw?part={{.PartPath}}">Download</a>
  118. {{end}}
  119. {{template "foot.html"}}