@@ -89,7 +89,7 @@ export default class HTMLExporter extends Exporter {
89
89
return renderToStaticMarkup ( avatar ) ;
90
90
}
91
91
92
- protected async wrapHTML ( content : string ) : Promise < string > {
92
+ protected async wrapHTML ( content : string , currentPage : number , nbPages : number ) : Promise < string > {
93
93
const roomAvatar = await this . getRoomAvatar ( ) ;
94
94
const exportDate = formatFullDateNoDayNoTime ( new Date ( ) ) ;
95
95
const creator = this . room . currentState . getStateEvents ( EventType . RoomCreate , "" ) ?. getSender ( ) ;
@@ -128,6 +128,29 @@ export default class HTMLExporter extends Exporter {
128
128
) ;
129
129
130
130
const topicText = topic ? _t ( "Topic: %(topic)s" , { topic } ) : "" ;
131
+ const previousMessagesLink = renderToStaticMarkup (
132
+ currentPage !== 0 ? (
133
+ < div style = { { textAlign : "center" } } >
134
+ < a href = { `./messages${ currentPage === 1 ? "" : currentPage } .html` } style = { { fontWeight : "bold" } } >
135
+ Previous group of messages
136
+ </ a >
137
+ </ div >
138
+ ) : (
139
+ < > </ >
140
+ ) ,
141
+ ) ;
142
+
143
+ const nextMessagesLink = renderToStaticMarkup (
144
+ currentPage < nbPages - 1 ? (
145
+ < div style = { { textAlign : "center" , margin : "10px" } } >
146
+ < a href = { "./messages" + ( currentPage + 2 ) + ".html" } style = { { fontWeight : "bold" } } >
147
+ Next group of messages
148
+ </ a >
149
+ </ div >
150
+ ) : (
151
+ < > </ >
152
+ ) ,
153
+ ) ;
131
154
132
155
return `
133
156
<!DOCTYPE html>
@@ -168,6 +191,7 @@ export default class HTMLExporter extends Exporter {
168
191
<div class="mx_RoomHeader_topic" dir="auto"> ${ topic } </div>
169
192
</div>
170
193
</div>
194
+ ${ previousMessagesLink }
171
195
<div class="mx_MainSplit">
172
196
<div class="mx_RoomView_body">
173
197
<div
@@ -186,13 +210,17 @@ export default class HTMLExporter extends Exporter {
186
210
aria-live="polite"
187
211
role="list"
188
212
>
189
- <div class="mx_NewRoomIntro">
190
- ${ roomAvatar }
191
- <h2> ${ this . room . name } </h2>
192
- <p> ${ createdText } <br/><br/> ${ exportedText } </p>
193
- <br/>
194
- <p> ${ topicText } </p>
195
- </div>
213
+ ${
214
+ currentPage == 0
215
+ ? `<div class="mx_NewRoomIntro">
216
+ ${ roomAvatar }
217
+ <h2> ${ this . room . name } </h2>
218
+ <p> ${ createdText } <br/><br/> ${ exportedText } </p>
219
+ <br/>
220
+ <p> ${ topicText } </p>
221
+ </div>`
222
+ : ""
223
+ }
196
224
${ content }
197
225
</ol>
198
226
</div>
@@ -205,6 +233,7 @@ export default class HTMLExporter extends Exporter {
205
233
</div>
206
234
</div>
207
235
</div>
236
+ ${ nextMessagesLink }
208
237
</main>
209
238
</div>
210
239
</div>
@@ -381,7 +410,12 @@ export default class HTMLExporter extends Exporter {
381
410
return eventTile ;
382
411
}
383
412
384
- protected async createHTML ( events : MatrixEvent [ ] , start : number ) : Promise < string > {
413
+ protected async createHTML (
414
+ events : MatrixEvent [ ] ,
415
+ start : number ,
416
+ currentPage : number ,
417
+ nbPages : number ,
418
+ ) : Promise < string > {
385
419
let content = "" ;
386
420
let prevEvent : MatrixEvent | null = null ;
387
421
for ( let i = start ; i < Math . min ( start + 1000 , events . length ) ; i ++ ) {
@@ -405,7 +439,7 @@ export default class HTMLExporter extends Exporter {
405
439
content += body ;
406
440
prevEvent = event ;
407
441
}
408
- return this . wrapHTML ( content ) ;
442
+ return this . wrapHTML ( content , currentPage , nbPages ) ;
409
443
}
410
444
411
445
public async export ( ) : Promise < void > {
@@ -428,7 +462,7 @@ export default class HTMLExporter extends Exporter {
428
462
429
463
const usedClasses = new Set < string > ( ) ;
430
464
for ( let page = 0 ; page < res . length / 1000 ; page ++ ) {
431
- const html = await this . createHTML ( res , page * 1000 ) ;
465
+ const html = await this . createHTML ( res , page * 1000 , page , res . length / 1000 ) ;
432
466
const document = new DOMParser ( ) . parseFromString ( html , "text/html" ) ;
433
467
document . querySelectorAll ( "*" ) . forEach ( ( element ) => {
434
468
element . classList . forEach ( ( c ) => usedClasses . add ( c ) ) ;
0 commit comments