@@ -174,88 +174,99 @@ function fillEmptyBlock() {
174174function getTabsFromStorage ( tabs ) {
175175 tabsFromStorage = tabs ;
176176 targetTabs = [ ] ;
177-
177+
178178 ui . clearUI ( ) ;
179179 if ( tabs === null ) {
180- ui . fillEmptyBlock ( ' chart' ) ;
181- return ;
180+ ui . fillEmptyBlock ( " chart" ) ;
181+ return ;
182182 }
183-
183+
184184 var counterOfSite ;
185185 if ( currentTypeOfList === TypeListEnum . All ) {
186- targetTabs = tabs . sort ( function ( a , b ) {
187- return b . summaryTime - a . summaryTime ;
188- } ) ;
189-
190- if ( targetTabs . length > 0 ) {
191- totalTime = getTotalTime ( targetTabs ) ;
192- stat . allDaysTime = totalTime ;
193-
194- } else {
195- ui . fillEmptyBlock ( 'chart' ) ;
196- return ;
197- }
198-
199- counterOfSite = tabs . length ;
186+ targetTabs = tabs ;
187+ if ( targetTabs . length > 0 ) {
188+ totalTime = getTotalTime ( targetTabs , currentTypeOfList ) ;
189+ stat . allDaysTime = totalTime ;
190+ } else {
191+ ui . fillEmptyBlock ( "chart" ) ;
192+ return ;
193+ }
194+
195+ counterOfSite = tabs . length ;
200196 }
201197 if ( currentTypeOfList === TypeListEnum . ToDay ) {
202- targetTabs = tabs . filter ( x => x . days . find ( s => s . date === todayLocalDate ( ) ) ) ;
203- counterOfSite = targetTabs . length ;
204- if ( targetTabs . length > 0 ) {
205- targetTabs = targetTabs . sort ( function ( a , b ) {
206- return b . days . find ( s => s . date === todayLocalDate ( ) ) . summary - a . days . find ( s => s . date === todayLocalDate ( ) ) . summary ;
207- } ) ;
208-
209- totalTime = getTotalTime ( targetTabs ) ;
210- stat . todayTime = totalTime ;
211- } else {
212- ui . fillEmptyBlock ( 'chart' ) ;
213- return ;
214- }
198+ targetTabs = tabs . filter ( ( x ) =>
199+ x . days . find ( ( s ) => s . date === todayLocalDate ( ) )
200+ ) ;
201+ counterOfSite = targetTabs . length ;
202+ if ( targetTabs . length > 0 ) {
203+ targetTabs = targetTabs . sort ( function ( a , b ) {
204+ return (
205+ b . days . find ( ( s ) => s . date === todayLocalDate ( ) ) . summary -
206+ a . days . find ( ( s ) => s . date === todayLocalDate ( ) ) . summary
207+ ) ;
208+ } ) ;
209+
210+ totalTime = getTotalTime ( targetTabs , currentTypeOfList ) ;
211+ stat . todayTime = totalTime ;
212+ } else {
213+ ui . fillEmptyBlock ( "chart" ) ;
214+ return ;
215+ }
215216 }
216-
217+
217218 if ( currentTypeOfList === TypeListEnum . All )
218- ui . addTableHeader ( currentTypeOfList , counterOfSite , totalTime , getFirstDay ( ) ) ;
219+ ui . addTableHeader (
220+ currentTypeOfList ,
221+ counterOfSite ,
222+ totalTime ,
223+ getFirstDay ( )
224+ ) ;
219225 if ( currentTypeOfList === TypeListEnum . ToDay )
220- ui . addTableHeader ( currentTypeOfList , counterOfSite , totalTime ) ;
221-
226+ ui . addTableHeader ( currentTypeOfList , counterOfSite , totalTime ) ;
227+
222228 var currentTab = getCurrentTab ( ) ;
223-
229+
224230 var tabsForChart = [ ] ;
225231 var summaryCounter = 0 ;
226- for ( var i = 0 ; i < targetTabs . length ; i ++ ) {
227- var summaryTime ;
228- var counter ;
229- if ( currentTypeOfList === TypeListEnum . ToDay ) {
230- summaryTime = targetTabs [ i ] . days . find ( x => x . date == todayLocalDate ( ) ) . summary ;
231- let item = targetTabs [ i ] . days . find ( x => x . date == todayLocalDate ( ) ) ;
232- if ( item != null )
233- counter = item . counter ;
234- }
235- if ( currentTypeOfList === TypeListEnum . All ) {
236- summaryTime = targetTabs [ i ] . summaryTime ;
237- counter = targetTabs [ i ] . counter ;
238- }
239-
240- summaryCounter += counter ;
241-
242- if ( currentTypeOfList === TypeListEnum . ToDay || ( currentTypeOfList === TypeListEnum . All && i <= 30 ) )
243- ui . addLineToTableOfSite ( targetTabs [ i ] , currentTab , summaryTime , currentTypeOfList , counter ) ;
244- else
245- ui . addExpander ( ) ;
246-
247- if ( i <= 8 )
248- addTabForChart ( tabsForChart , targetTabs [ i ] . url , summaryTime , counter ) ;
249- else addTabOthersForChart ( tabsForChart , summaryTime ) ;
232+ var tabGroups = getTabGroups ( targetTabs , currentTypeOfList ) ;
233+
234+ for ( var i = 0 ; i < tabGroups . length ; i ++ ) {
235+ var summaryTime = 0 ;
236+ var counter = 0 ;
237+ var tabGroup = tabGroups [ i ] ;
238+
239+ summaryTime = tabGroup . summaryTime ;
240+ counter = tabGroup . counter ;
241+
242+ summaryCounter += counter ;
243+
244+ const targetTab = tabGroup . tabs [ 0 ] ;
245+
246+ if (
247+ currentTypeOfList === TypeListEnum . ToDay ||
248+ ( currentTypeOfList === TypeListEnum . All && i <= 30 )
249+ )
250+ ui . addLineToTableOfSite (
251+ targetTab ,
252+ currentTab ,
253+ summaryTime ,
254+ currentTypeOfList ,
255+ counter
256+ ) ;
257+ else ui . addExpander ( ) ;
258+
259+ var tabForChartUrl = i <= 8 ? tabGroup . host : 'Others' ;
260+ addTabForChart ( tabsForChart , tabForChartUrl , summaryTime , counter ) ;
250261 }
251-
262+
252263 ui . addHrAfterTableOfSite ( ) ;
253264 ui . createTotalBlock ( totalTime , currentTypeOfList , summaryCounter ) ;
254265 ui . drawChart ( tabsForChart ) ;
255266 ui . setActiveTooltipe ( currentTab ) ;
256-
267+
257268 ui . removePreloader ( ) ;
258- }
269+ }
259270
260271function getTabsForTimeChart ( timeIntervals ) {
261272 var resultArr = [ ] ;
@@ -272,6 +283,39 @@ function getTabsForTimeChart(timeIntervals) {
272283 return resultArr ;
273284}
274285
286+ function getTabGroups ( tabs , typeOfList , date ) {
287+ var result = [ ] ;
288+
289+ var tabGroups = groupTabsByHost ( tabs ) ;
290+
291+ for ( const host in tabGroups ) {
292+ var groupedTabs = tabGroups [ host ] ;
293+
294+ result . push ( {
295+ host : host ,
296+ counter : getTotalCount ( groupedTabs , typeOfList , date ) ,
297+ summaryTime : getTotalTime ( groupedTabs , typeOfList , date ) ,
298+ tabs : groupedTabs
299+ } ) ;
300+ }
301+
302+ result . sort ( function ( a , b ) {
303+ return b . summaryTime - a . summaryTime ;
304+ } ) ;
305+
306+ return result ;
307+ }
308+
309+ function groupTabsByHost ( tabs ) {
310+ var tabGroups = tabs . reduce ( ( groups , tab ) => {
311+ var key = tab . url . host ;
312+ ( groups [ key ] = groups [ key ] || [ ] ) . push ( tab ) ;
313+ return groups ;
314+ } , { } ) ;
315+
316+ return tabGroups ;
317+ }
318+
275319function getTabsForExpander ( ) {
276320 if ( tabsFromBackground != undefined && tabsFromBackground != null && tabsFromBackground . length > 0 )
277321 getTabsFromStorageForExpander ( tabsFromBackground ) ;
@@ -296,44 +340,52 @@ function getTabsFromStorageForExpander(tabs) {
296340 tabsFromStorage = tabs ;
297341 targetTabs = [ ] ;
298342
299- targetTabs = tabs . sort ( function ( a , b ) {
300- return b . summaryTime - a . summaryTime ;
301- } ) ;
302-
303343 var currentTab = getCurrentTab ( ) ;
344+
345+ var tabGroups = getTabGroups ( tabs , currentTypeOfList ) ;
304346
305- for ( var i = 31 ; i < targetTabs . length ; i ++ ) {
306- var summaryTime ;
307- var counter ;
308- if ( currentTypeOfList === TypeListEnum . ToDay ) {
309- summaryTime = targetTabs [ i ] . days . find ( x => x . date == todayLocalDate ( ) ) . summary ;
310- let item = targetTabs [ i ] . days . find ( x => x . date == todayLocalDate ( ) ) ;
311- if ( item != undefined )
312- counter = item . counter ;
313- }
314- if ( currentTypeOfList === TypeListEnum . All ) {
315- summaryTime = targetTabs [ i ] . summaryTime ;
316- counter = targetTabs [ i ] . counter ;
317- }
318-
319- ui . addLineToTableOfSite ( targetTabs [ i ] , currentTab , summaryTime , currentTypeOfList , counter ) ;
347+ for ( var i = 31 ; i < tabGroups . length ; i ++ ) {
348+ var tabGroup = tabGroups [ i ] ;
349+ ui . addLineToTableOfSite ( tabGroup , currentTab , tabGroup . summaryTime , currentTypeOfList , tabGroup . counter ) ;
320350 }
321351
322352 var table = ui . getTableOfSite ( ) ;
323353 table . removeChild ( table . getElementsByTagName ( 'hr' ) [ 0 ] ) ;
324354 ui . addHrAfterTableOfSite ( ) ;
325355}
326356
327- function getTotalTime ( tabs ) {
357+ function getTotalCount ( tabs , typeofList , date ) {
328358 var total ;
329- if ( currentTypeOfList === TypeListEnum . ToDay ) {
330- var summaryTimeList = tabs . map ( function ( a ) { return a . days . find ( s => s . date === todayLocalDate ( ) ) . summary ; } ) ;
331- total = summaryTimeList . reduce ( function ( a , b ) { return a + b ; } )
359+ if ( typeofList === TypeListEnum . ToDay ) {
360+ date = date || todayLocalDate ( ) ;
361+ total = tabs . reduce ( ( tot , tab ) => {
362+ let item = tab . days . find ( ( x ) => x . date == date ) ;
363+ return tot + ( item . counter || 0 ) ;
364+ } , 0 ) ;
365+ } else if ( typeofList === TypeListEnum . All ) {
366+ total = tabs . reduce ( ( tot , tab ) => tot + tab . counter , 0 ) ;
332367 }
333- if ( currentTypeOfList === TypeListEnum . All ) {
334- var summaryTimeList = tabs . map ( function ( a ) { return a . summaryTime ; } ) ;
335- total = summaryTimeList . reduce ( function ( a , b ) { return a + b ; } )
368+
369+ return total ;
370+ }
371+
372+
373+ function getTotalTime ( tabs , typeOfList , date ) {
374+ var total ;
375+ switch ( typeOfList ) {
376+ case TypeListEnum . ByDays :
377+ case TypeListEnum . ToDay :
378+ date = date || todayLocalDate ( ) ;
379+ var summaryTimeList = tabs . map ( function ( a ) { return a . days . find ( s => s . date === date ) . summary ; } ) ;
380+ total = summaryTimeList . reduce ( function ( a , b ) { return a + b ; } )
381+ break ;
382+ case TypeListEnum . All :
383+ var summaryTimeList = tabs . map ( function ( a ) { return a . summaryTime ; } ) ;
384+ total = summaryTimeList . reduce ( function ( a , b ) { return a + b ; } )
385+ break ;
386+ default :
336387 }
388+
337389 return total ;
338390}
339391
@@ -356,26 +408,19 @@ function getCurrentTab() {
356408 return chrome . extension . getBackgroundPage ( ) . currentTab ;
357409}
358410
359- function addTabForChart ( tabsForChart , url , time , counter ) {
360- tabsForChart . push ( {
361- 'url' : url . host ,
362- 'percentage' : getPercentageForChart ( time ) ,
363- 'summary' : time ,
364- 'visits' : counter
365- } ) ;
366- }
367-
368- function addTabOthersForChart ( tabsForChart , summaryTime ) {
369- var tab = tabsForChart . find ( x => x . url == 'Others' ) ;
411+ function addTabForChart ( tabsForChart , url , summaryTime , counter ) {
412+ var tab = tabsForChart . find ( x => x . url == url ) ;
370413 if ( tab === undefined ) {
371414 tabsForChart . push ( {
372- 'url' : 'Others' ,
415+ 'url' : url ,
373416 'percentage' : getPercentageForChart ( summaryTime ) ,
374- 'summary' : summaryTime
417+ 'summary' : summaryTime ,
418+ 'visits' : counter
375419 } ) ;
376420 } else {
377421 tab [ 'summary' ] += summaryTime ;
378422 tab [ 'percentage' ] = getPercentageForChart ( tab [ 'summary' ] ) ;
423+ tab [ 'visits' ] += counter ;
379424 }
380425}
381426
@@ -517,12 +562,15 @@ function getTabsFromStorageByDay(day, blockName) {
517562 content . classList . add ( 'content-inner' ) ;
518563 content . id = blockName + '_content' ;
519564 document . getElementById ( blockName ) . appendChild ( content ) ;
520- for ( var i = 0 ; i < targetTabs . length ; i ++ ) {
521- var summaryTime , counter ;
522- summaryTime = targetTabs [ i ] . days . find ( x => x . date == day ) . summary ;
523- counter = targetTabs [ i ] . days . find ( x => x . date == day ) . counter ;
524565
525- ui . addLineToTableOfSite ( targetTabs [ i ] , currentTab , summaryTime , TypeListEnum . ByDays , counter , blockName + '_content' ) ;
566+ var tabGroups = getTabGroups ( targetTabs , TypeListEnum . ByDays , day ) ;
567+
568+ for ( const tabGroup of tabGroups ) {
569+ var summaryTime = tabGroup . summaryTime ;
570+ var counter = tabGroup . counter ;
571+ const targetTab = tabGroup . tabs [ 0 ] ;
572+
573+ ui . addLineToTableOfSite ( targetTab , currentTab , summaryTime , TypeListEnum . ByDays , counter , blockName + '_content' ) ;
526574 }
527575}
528576
0 commit comments