@@ -104,6 +104,108 @@ $.when($.getScript("js/global/global.js")).then(function () {
104104 } ) ;
105105} ) ;
106106
107+ function harViewer ( ) {
108+ return {
109+ har : null ,
110+ loaded : false ,
111+ loading : false ,
112+
113+ filter : '' ,
114+ statusFilter : 'all' ,
115+ sortBy : 'time' ,
116+ selected : null ,
117+
118+ init ( ) {
119+ // Watch le store pour charger automatiquement le HAR
120+ this . $watch ( '$store.har.enrichedHarFile' , ( file ) => {
121+ if ( file ) {
122+ this . loadFromApi ( file ) ;
123+ }
124+ } ) ;
125+ } ,
126+
127+ load ( har ) {
128+ this . har = har ;
129+ this . har . log . entries . forEach ( ( e , i ) => e . _id = i ) ;
130+ this . loaded = true ;
131+ } ,
132+
133+ loadFromApi ( file ) {
134+ if ( this . loaded || this . loading || ! file ?. fileName ) return ;
135+
136+ this . loading = true ;
137+
138+ const url =
139+ `./ReadTestCaseExecutionMedia` +
140+ `?filename=${ encodeURIComponent ( file . fileName ) } ` +
141+ `&filetype=${ file . fileType || 'JSON' } ` +
142+ `&filedesc=${ encodeURIComponent ( file . fileDesc || '' ) } ` +
143+ `&auto=true&autoContentType=N` ;
144+
145+ fetch ( url )
146+ . then ( r => r . text ( ) )
147+ . then ( txt => this . load ( JSON . parse ( txt ) ) )
148+ . finally ( ( ) => this . loading = false ) ;
149+ } ,
150+
151+ select ( entry ) {
152+ console . log ( entry ) ;
153+ this . selected = entry ; } ,
154+
155+ statusClass ( status ) {
156+ if ( status >= 500 ) return 'dark:bg-red-900 dark:text-red-300 bg-red-300 text-red-900' ;
157+ if ( status >= 400 ) return 'dark:bg-orange-900 dark:text-orange-300 bg-orange-300 text-orange-900' ;
158+ return 'dark:bg-green-900 dark:text-green-300 bg-green-300 text-green-900' ;
159+ } ,
160+
161+ get filteredEntries ( ) {
162+ if ( ! this . har ) return [ ] ;
163+
164+ let entries = this . har . log . entries ;
165+
166+ if ( this . filter ) {
167+ entries = entries . filter ( e =>
168+ e . request . url . toLowerCase ( ) . includes ( this . filter . toLowerCase ( ) )
169+ ) ;
170+ }
171+
172+ if ( this . statusFilter !== 'all' ) {
173+ entries = entries . filter ( e => {
174+ const s = e . response . status ;
175+ return this . statusFilter === '2xx' ? s < 300 :
176+ this . statusFilter === '4xx' ? s >= 400 && s < 500 :
177+ s >= 500 ;
178+ } ) ;
179+ }
180+
181+ // SORT IN-PLACE instead of creating a new array
182+ return entries . sort ( ( a , b ) => {
183+ if ( this . sortBy === 'time' ) return b . time - a . time ;
184+ if ( this . sortBy === 'status' ) return b . response . status - a . response . status ;
185+ return b . response . content . size - a . response . content . size ;
186+ } ) ;
187+ }
188+ }
189+ }
190+
191+ function highlightJson ( json ) {
192+ if ( ! json ) return '' ;
193+ return JSON . stringify ( json , null , 2 )
194+ . replace ( / ( & ) / g, '&' )
195+ . replace ( / ( < ) / g, '<' )
196+ . replace ( / ( " .* ?" ) (? = \s * : ) / g, '<span class="json-key">$1</span>' )
197+ . replace ( / : \s * ( " .* ?" ) / g, ': <span class="json-string">$1</span>' )
198+ . replace ( / : \s * ( \d + | \b t r u e \b | \b f a l s e \b | \b n u l l \b ) / g,
199+ ': <span class="json-value">$1</span>' ) ;
200+ }
201+
202+ //Store enrichHarFile link to load it into table
203+ document . addEventListener ( 'alpine:init' , ( ) => {
204+ Alpine . store ( 'har' , {
205+ enrichedHarFile : null
206+ } ) ;
207+ } ) ;
208+
107209// Add the testCase to the page title (<head>)
108210function updatePageTitle ( testcase , doc ) {
109211 if ( typeof testcase !== 'undefined' ) {
@@ -244,6 +346,16 @@ function loadExecutionInformation(executionId, steps, sockets) {
244346 }
245347
246348 }
349+
350+ const enrichedHarFile = tce . fileList ?. find ( f =>
351+ f . fileName ?. endsWith ( "enriched_har.json" )
352+ ) ;
353+
354+ if ( enrichedHarFile ) {
355+ Alpine . store ( 'har' ) . enrichedHarFile = enrichedHarFile ; // le composant harViewer va charger automatiquement
356+ }
357+
358+
247359 $ ( "#seeProperties" ) . click ( function ( ) {
248360 $ ( "#propertiesModal" ) . modal ( 'show' ) ;
249361 } ) ;
@@ -1139,10 +1251,11 @@ function update_thirdParty_Chart() {
11391251
11401252 // Display unknown hosts in warning mode.
11411253 $ ( "#detailUnknownList" ) . empty ( ) ;
1142- let entryUnknown = $ ( '<li class="list-group-item">' ) . text ( "Unknown Hosts/Domains:" ) ;
1254+ let entryUnknown = $ ( '<li class="">' ) ;
1255+ //let entryUnknown = $('<li class="list-group-item">').text("Unknown Hosts/Domains:");
11431256 $ ( "#detailUnknownList" ) . append ( entryUnknown ) ;
11441257 for ( var key in unknownDomain ) {
1145- let entryUnknown = $ ( '<li class="list-group-item list-group-item-danger ">' ) . text ( unknownDomain [ key ] ) ;
1258+ let entryUnknown = $ ( '<li class="">' ) . text ( unknownDomain [ key ] ) ;
11461259 $ ( "#detailUnknownList" ) . append ( entryUnknown ) ;
11471260 }
11481261
@@ -1296,6 +1409,10 @@ function drawChart_GanttPerThirdParty(data, titletext, target) {
12961409 title : {
12971410 display : true ,
12981411 text : titletext
1412+ } ,
1413+ options : {
1414+ responsive : true ,
1415+ maintainAspectRatio : false
12991416 }
13001417 } ;
13011418
0 commit comments