@@ -76,18 +76,21 @@ window.chat.genPostData = function(channel, storageHash, getOlderMsgs) {
76
76
// after the request is finished – i.e. there would be one almost
77
77
// useless request.
78
78
chat . _faction . data = { } ;
79
+ chat . _faction . guids = [ ] ;
79
80
chat . _faction . oldestTimestamp = - 1 ;
80
81
chat . _faction . newestTimestamp = - 1 ;
81
82
delete chat . _faction . oldestGUID ;
82
83
delete chat . _faction . newestGUID ;
83
84
84
85
chat . _public . data = { } ;
86
+ chat . _public . guids = [ ] ;
85
87
chat . _public . oldestTimestamp = - 1 ;
86
88
chat . _public . newestTimestamp = - 1 ;
87
89
delete chat . _public . oldestGUID ;
88
90
delete chat . _public . newestGUID ;
89
91
90
92
chat . _alerts . data = { } ;
93
+ chat . _alerts . guids = [ ] ;
91
94
chat . _alerts . oldestTimestamp = - 1 ;
92
95
chat . _alerts . newestTimestamp = - 1 ;
93
96
delete chat . _alerts . oldestGUID ;
@@ -164,7 +167,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) {
164
167
}
165
168
166
169
167
- window . chat . _faction = { data :{ } , oldestTimestamp :- 1 , newestTimestamp :- 1 } ;
170
+ window . chat . _faction = { data :{ } , guids : [ ] , oldestTimestamp :- 1 , newestTimestamp :- 1 } ;
168
171
window . chat . handleFaction = function ( data , olderMsgs , ascendingTimestampOrder ) {
169
172
chat . _requestFactionRunning = false ;
170
173
$ ( "#chatcontrols a:contains('faction')" ) . removeClass ( 'loading' ) ;
@@ -186,7 +189,7 @@ window.chat.handleFaction = function(data, olderMsgs, ascendingTimestampOrder) {
186
189
}
187
190
188
191
window . chat . renderFaction = function ( oldMsgsWereAdded ) {
189
- chat . renderData ( chat . _faction . data , 'chatfaction' , oldMsgsWereAdded ) ;
192
+ chat . renderData ( chat . _faction . data , 'chatfaction' , oldMsgsWereAdded , chat . _faction . guids ) ;
190
193
}
191
194
192
195
@@ -212,7 +215,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) {
212
215
) ;
213
216
}
214
217
215
- window . chat . _public = { data :{ } , oldestTimestamp :- 1 , newestTimestamp :- 1 } ;
218
+ window . chat . _public = { data :{ } , guids : [ ] , oldestTimestamp :- 1 , newestTimestamp :- 1 } ;
216
219
window . chat . handlePublic = function ( data , olderMsgs , ascendingTimestampOrder ) {
217
220
chat . _requestPublicRunning = false ;
218
221
$ ( "#chatcontrols a:contains('all')" ) . removeClass ( 'loading' ) ;
@@ -235,7 +238,7 @@ window.chat.handlePublic = function(data, olderMsgs, ascendingTimestampOrder) {
235
238
}
236
239
237
240
window . chat . renderPublic = function ( oldMsgsWereAdded ) {
238
- chat . renderData ( chat . _public . data , 'chatall' , oldMsgsWereAdded ) ;
241
+ chat . renderData ( chat . _public . data , 'chatall' , oldMsgsWereAdded , chat . _public . guids ) ;
239
242
}
240
243
241
244
@@ -262,7 +265,7 @@ window.chat.requestAlerts = function(getOlderMsgs, isRetry) {
262
265
}
263
266
264
267
265
- window . chat . _alerts = { data :{ } , oldestTimestamp :- 1 , newestTimestamp :- 1 } ;
268
+ window . chat . _alerts = { data :{ } , guids : [ ] , oldestTimestamp :- 1 , newestTimestamp :- 1 } ;
266
269
window . chat . handleAlerts = function ( data , olderMsgs , ascendingTimestampOrder ) {
267
270
chat . _requestAlertsRunning = false ;
268
271
$ ( "#chatcontrols a:contains('alerts')" ) . removeClass ( 'loading' ) ;
@@ -285,7 +288,7 @@ window.chat.handleAlerts = function(data, olderMsgs, ascendingTimestampOrder) {
285
288
}
286
289
287
290
window . chat . renderAlerts = function ( oldMsgsWereAdded ) {
288
- chat . renderData ( chat . _alerts . data , 'chatalerts' , oldMsgsWereAdded ) ;
291
+ chat . renderData ( chat . _alerts . data , 'chatalerts' , oldMsgsWereAdded , chat . _alerts . guids ) ;
289
292
}
290
293
291
294
@@ -401,6 +404,10 @@ window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel, is
401
404
402
405
// format: timestamp, autogenerated, HTML message, nick, additional data (parsed, plugin specific data...)
403
406
storageHash . data [ parsedData . guid ] = [ parsedData . time , parsedData . auto , chat . renderMsgRow ( parsedData ) , parsedData . player . name , parsedData ] ;
407
+ if ( isAscendingOrder )
408
+ storageHash . guids . push ( parsedData . guid ) ;
409
+ else
410
+ storageHash . guids . unshift ( parsedData . guid ) ;
404
411
} ) ;
405
412
}
406
413
@@ -562,19 +569,24 @@ window.chat.renderDivider = function(text) {
562
569
// renders data from the data-hash to the element defined by the given
563
570
// ID. Set 3rd argument to true if it is likely that old data has been
564
571
// added. Latter is only required for scrolling.
565
- window . chat . renderData = function ( data , element , likelyWereOldMsgs ) {
572
+ window . chat . renderData = function ( data , element , likelyWereOldMsgs , sortedGuids ) {
566
573
var elm = $ ( '#' + element ) ;
567
574
if ( elm . is ( ':hidden' ) ) return ;
568
575
569
576
// discard guids and sort old to new
570
577
//TODO? stable sort, to preserve server message ordering? or sort by GUID if timestamps equal?
571
- var vals = $ . map ( data , function ( v , k ) { return [ v ] ; } ) ;
572
- vals = vals . sort ( function ( a , b ) { return a [ 0 ] - b [ 0 ] ; } ) ;
578
+ var vals = sortedGuids ;
579
+ if ( vals === undefined ) {
580
+ vals = $ . map ( data , function ( v , k ) { return [ [ v [ 0 ] , k ] ] ; } ) ;
581
+ vals = vals . sort ( function ( a , b ) { return a [ 0 ] - b [ 0 ] ; } ) ;
582
+ vals = vals . map ( function ( v ) { return v [ 1 ] } ) ;
583
+ }
573
584
574
585
// render to string with date separators inserted
575
586
var msgs = '' ;
576
587
var prevTime = null ;
577
- $ . each ( vals , function ( ind , msg ) {
588
+ vals . forEach ( function ( guid ) {
589
+ var msg = data [ guid ] ;
578
590
var nextTime = new Date ( msg [ 0 ] ) . toLocaleDateString ( ) ;
579
591
if ( prevTime && prevTime !== nextTime )
580
592
msgs += chat . renderDivider ( nextTime ) ;
0 commit comments