|
5 | 5 |
|
6 | 6 |
|
7 | 7 |
|
| 8 | +{% code |
| 9 | + func parseEventTimestamp(unixTime int) time.Time { |
| 10 | + return time.Unix(0, int64(unixTime)*int64(time.Millisecond)) |
| 11 | + } |
| 12 | +%} |
| 13 | + |
8 | 14 | {% func printTimestamp(unixTime int) %} |
9 | | - {%s time.Unix(0, int64(unixTime)*int64(time.Millisecond)).Format("2 Jan 2006 15:04:05") %} |
| 15 | + {%s parseEventTimestamp(unixTime).Format("2 Jan 2006 15:04:05") %} |
10 | 16 | {% endfunc %} |
11 | 17 |
|
12 | 18 |
|
|
32 | 38 | return |
33 | 39 | } |
34 | 40 |
|
35 | | - func getMemberEventContent(ev gomatrix.Event, homeserverBaseUrl string) MemberEventContent { |
| 41 | + func getMemberEventContent(ev *gomatrix.Event, homeserverBaseUrl string) MemberEventContent { |
36 | 42 | return convertContentToMEC(ev.Content, homeserverBaseUrl) |
37 | 43 | } |
38 | 44 |
|
39 | | - func getMemberEventPrevContent(ev gomatrix.Event, homeserverBaseUrl string) MemberEventContent { |
| 45 | + func getMemberEventPrevContent(ev *gomatrix.Event, homeserverBaseUrl string) MemberEventContent { |
40 | 46 | return convertContentToMEC(ev.PrevContent, homeserverBaseUrl) |
41 | 47 | } |
42 | 48 |
|
|
59 | 65 |
|
60 | 66 |
|
61 | 67 | {% stripspace %} |
62 | | -{% func (p *RoomChatPage) textForMRoomMemberEvent(ev gomatrix.Event) %} |
| 68 | +{% func (p *RoomChatPage) textForMRoomMemberEvent(ev *gomatrix.Event) %} |
63 | 69 | {% code |
64 | 70 | content := getMemberEventContent(ev, p.HomeserverBaseURL) |
65 | 71 | prevContent := getMemberEventPrevContent(ev, p.HomeserverBaseURL) |
|
118 | 124 | {% endswitch %} |
119 | 125 | {% endfunc %} |
120 | 126 |
|
121 | | -{% func (p *RoomChatPage) textForMRoomMessageEvent(ev gomatrix.Event) %} |
| 127 | +{% func (p *RoomChatPage) textForMRoomMessageEvent(ev *gomatrix.Event) %} |
122 | 128 | {% switch ev.Content["msgtype"] %} |
123 | 129 | {% case "m.image" %} |
124 | 130 | {% code |
|
184 | 190 | {% endswitch %} |
185 | 191 | {% endfunc %} |
186 | 192 |
|
187 | | -{% func (p *RoomChatPage) printStateChange(ev gomatrix.Event, key, thing string) %} |
| 193 | +{% func (p *RoomChatPage) printStateChange(ev *gomatrix.Event, key, thing string) %} |
188 | 194 | {% code |
189 | 195 | prev := Str(ev.PrevContent[key]) |
190 | 196 | cur := Str(ev.Content[key]) |
191 | 197 | %} |
192 | 198 |
|
193 | | - {%= p.prettyPrintMember(ev.Sender) %} |
| 199 | + {%= p.prettyPrintMember(ev.Sender) %}{% space %} |
194 | 200 |
|
195 | 201 | {% if cur != "" && prev == "" %} |
196 | | - set the {%s thing %} to "{%s cur %}". |
| 202 | + set the {% space %}{%s thing %}{% space %} to "{%s cur %}". |
197 | 203 | {% elseif cur == "" && prev != "" %} |
198 | | - removed the {%s thing %} "{%s prev %}". |
| 204 | + removed the {% space %}{%s thing %}{% space %} "{%s prev %}". |
199 | 205 | {% else %} |
200 | | - changed the {%s thing %} to "{%s cur %}" from "{%s prev %}". |
| 206 | + changed the {% space %}{%s thing %}{% space %} to "{%s cur %}" from "{%s prev %}". |
201 | 207 | {% endif %} |
202 | 208 | {% endfunc %} |
203 | 209 |
|
|
216 | 222 | </a> |
217 | 223 | {% endfunc %} |
218 | 224 |
|
219 | | -{% func (p *RoomChatPage) printEvent(ev gomatrix.Event) %} |
| 225 | +{% code |
| 226 | + func needsDateSeparator(ev, prevEv *gomatrix.Event) bool { |
| 227 | + if prevEv == nil { |
| 228 | + return true |
| 229 | + } |
| 230 | + y1, m1, d1 := parseEventTimestamp(ev.Timestamp).Date() |
| 231 | + y2, m2, d2 := parseEventTimestamp(prevEv.Timestamp).Date() |
| 232 | + return y1 != y2 || m1 != m2 || d1 != d2 |
| 233 | + } |
| 234 | +%} |
| 235 | + |
| 236 | +{% func (p *RoomChatPage) printEvent(ev, prevEv *gomatrix.Event) %} |
| 237 | + {% if needsDateSeparator(ev, prevEv) %} |
| 238 | + <tr class="timestamp dateSep"> |
| 239 | + <td colspan="3">{%s parseEventTimestamp(ev.Timestamp).Format("2 Jan 2006") %}</td> |
| 240 | + </tr> |
| 241 | + {% endif %} |
| 242 | + |
220 | 243 | <tr> |
221 | | - {%= p.printPermalinkColumn(ev) %} |
| 244 | + <td class="timestamp nowrap"> |
| 245 | + {% code |
| 246 | + time := parseEventTimestamp(ev.Timestamp) |
| 247 | + title := time.Format("2 Jan 2006 15:04:05") |
| 248 | + %} |
| 249 | + <a href="https://matrix.to/#/{%s p.RoomInfo.RoomID %}/{%s ev.ID %}" title="{%s title %}"> |
| 250 | + {%s time.Format("15:04:05") %} |
| 251 | + </a> |
| 252 | + </td> |
222 | 253 | {% switch ev.Type %} |
223 | 254 | {% case "m.room.message" %} |
224 | 255 | {% if ev.Content["msgtype"] == "m.emote" %} |
225 | | - <td class="fullWidth"></td> |
| 256 | + <td></td> |
226 | 257 | <td> |
227 | 258 | *{% space %}{%= p.prettyPrintMember(ev.Sender) %} |
228 | 259 | {% space %}{%= p.textForMRoomMessageEvent(ev) %} |
229 | 260 | </td> |
230 | 261 | {% else %} |
231 | | - <td class="fullWidth"> |
| 262 | + <td class="nowrap"> |
232 | 263 | {% if ev.Content["msgtype"] == "m.emote" %}*{% space %}{% endif %} |
233 | 264 | {%= p.prettyPrintMember(ev.Sender) %} |
234 | 265 | </td> |
235 | 266 | <td>{%= p.textForMRoomMessageEvent(ev) %}</td> |
236 | 267 | {% endif %} |
237 | 268 |
|
238 | 269 | {% case "m.room.member" %} |
239 | | - <td class="fullWidth"></td> |
| 270 | + <td></td> |
240 | 271 | <td>{%= p.textForMRoomMemberEvent(ev) %}</td> |
241 | 272 | {% case "m.room.name" %} |
242 | | - <td class="fullWidth"></td> |
| 273 | + <td></td> |
243 | 274 | <td>{%= p.printStateChange(ev, "name", "room name") %}</td> |
244 | 275 | {% case "m.room.topic" %} |
245 | | - <td class="fullWidth"></td> |
| 276 | + <td></td> |
246 | 277 | <td>{%= p.printStateChange(ev, "topic", "room topic") %}</td> |
247 | 278 | {% case "m.room.history_visibility" %} |
248 | | - <td class="fullWidth"></td> |
| 279 | + <td></td> |
249 | 280 | <td>{%= p.printStateChange(ev, "history_visibility", "history visibility") %}</td> |
250 | 281 | {% case "m.room.join_rules" %} |
251 | | - <td class="fullWidth"></td> |
| 282 | + <td></td> |
252 | 283 | <td>{%= p.printStateChange(ev, "join_rule", "join rule") %}</td> |
253 | 284 | {% case "m.room.avatar" %} |
254 | | - <td class="fullWidth"></td> |
| 285 | + <td></td> |
255 | 286 | <td> |
256 | 287 | Room Avatar Renderer. |
257 | 288 | </td> |
258 | 289 | {% case "m.room.power_levels" %} |
259 | | - <td class="fullWidth"></td> |
| 290 | + <td></td> |
260 | 291 | <td>{%= p.prettyPrintMember(ev.Sender) %} changed room power levels.</td> |
261 | 292 | {% case "im.vector.modular.widgets" %} |
262 | | - <td class="fullWidth"></td> |
| 293 | + <td></td> |
263 | 294 | {% code |
264 | 295 | widgetName := StringerfaceFallback(ev.Content["name"], ev.PrevContent["name"], ev.Content["type"], ev.PrevContent["type"]) |
265 | 296 | if widgetName == "" { |
|
276 | 307 | </tr> |
277 | 308 | {% endfunc %} |
278 | 309 |
|
279 | | -{% func (p *RoomChatPage) printPermalinkColumn(ev gomatrix.Event) %} |
280 | | - <td class="timestamp fullWidth"> |
281 | | - <a href="https://matrix.to/#/{%s p.RoomInfo.RoomID %}/{%s ev.ID %}">{%= printTimestamp(ev.Timestamp) %}</a> |
282 | | - </td> |
283 | | -{% endfunc %} |
284 | | - |
285 | 310 |
|
286 | 311 |
|
287 | 312 | {% func (p *RoomChatPage) Title() %} |
|
323 | 348 | </tr> |
324 | 349 | </thead> |
325 | 350 | <tbody> |
| 351 | + {% code var prevEv gomatrix.Event %} |
326 | 352 | {% for _, event := range p.Events %} |
327 | | - {%= p.printEvent(event) %} |
| 353 | + {%= p.printEvent(&event, &prevEv) %} |
| 354 | + {% code prevEv = event %} |
328 | 355 | {% endfor %} |
329 | 356 | </tbody> |
330 | 357 | </table> |
|
0 commit comments