@@ -89,7 +89,7 @@ export default class HTMLExporter extends Exporter {
8989 return renderToStaticMarkup ( avatar ) ;
9090 }
9191
92- protected async wrapHTML ( content : string ) : Promise < string > {
92+ protected async wrapHTML ( content : string , currentPage : number , nbPages : number ) : Promise < string > {
9393 const roomAvatar = await this . getRoomAvatar ( ) ;
9494 const exportDate = formatFullDateNoDayNoTime ( new Date ( ) ) ;
9595 const creator = this . room . currentState . getStateEvents ( EventType . RoomCreate , "" ) ?. getSender ( ) ;
@@ -128,6 +128,29 @@ export default class HTMLExporter extends Exporter {
128128 ) ;
129129
130130 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+ ) ;
131154
132155 return `
133156 <!DOCTYPE html>
@@ -168,6 +191,7 @@ export default class HTMLExporter extends Exporter {
168191 <div class="mx_RoomHeader_topic" dir="auto"> ${ topic } </div>
169192 </div>
170193 </div>
194+ ${ previousMessagesLink }
171195 <div class="mx_MainSplit">
172196 <div class="mx_RoomView_body">
173197 <div
@@ -186,13 +210,17 @@ export default class HTMLExporter extends Exporter {
186210 aria-live="polite"
187211 role="list"
188212 >
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+ }
196224 ${ content }
197225 </ol>
198226 </div>
@@ -205,6 +233,7 @@ export default class HTMLExporter extends Exporter {
205233 </div>
206234 </div>
207235 </div>
236+ ${ nextMessagesLink }
208237 </main>
209238 </div>
210239 </div>
@@ -381,7 +410,12 @@ export default class HTMLExporter extends Exporter {
381410 return eventTile ;
382411 }
383412
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 > {
385419 let content = "" ;
386420 let prevEvent : MatrixEvent | null = null ;
387421 for ( let i = start ; i < Math . min ( start + 1000 , events . length ) ; i ++ ) {
@@ -405,7 +439,7 @@ export default class HTMLExporter extends Exporter {
405439 content += body ;
406440 prevEvent = event ;
407441 }
408- return this . wrapHTML ( content ) ;
442+ return this . wrapHTML ( content , currentPage , nbPages ) ;
409443 }
410444
411445 public async export ( ) : Promise < void > {
@@ -428,7 +462,7 @@ export default class HTMLExporter extends Exporter {
428462
429463 const usedClasses = new Set < string > ( ) ;
430464 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 ) ;
432466 const document = new DOMParser ( ) . parseFromString ( html , "text/html" ) ;
433467 document . querySelectorAll ( "*" ) . forEach ( ( element ) => {
434468 element . classList . forEach ( ( c ) => usedClasses . add ( c ) ) ;
0 commit comments