@@ -62,15 +62,15 @@ async function loadActiveFlags() {
6262 document . getElementById ( 'flag-count' ) . textContent = count ;
6363
6464 if ( count === 0 ) {
65- tbody . innerHTML = '<tr><td colspan="5" class="empty-state">No modified flags detected</td></tr>' ;
65+ safeSetHTML ( tbody , '<tr><td colspan="5" class="empty-state">No modified flags detected</td></tr>' ) ;
6666 return ;
6767 }
6868
6969 // Load flag database to get safety info
7070 const response = await fetch ( '../data/flags-database.json' ) ;
7171 const database = await response . json ( ) ;
7272
73- tbody . innerHTML = Object . entries ( states ) . map ( ( [ key , state ] ) => {
73+ safeSetHTML ( tbody , Object . entries ( states ) . map ( ( [ key , state ] ) => {
7474 const flag = database . flags . find ( f => f . key === key ) ;
7575 const safety = flag ? flag . safetyLevel : 'unknown' ;
7676 const modified = new Date ( state . timestamp ) . toLocaleString ( ) ;
@@ -86,7 +86,7 @@ async function loadActiveFlags() {
8686 </td>
8787 </tr>
8888 ` ;
89- } ) . join ( '' ) ;
89+ } ) . join ( '' ) ) ;
9090
9191 // Add inspect button handlers
9292 tbody . querySelectorAll ( '.inspect-btn' ) . forEach ( btn => {
@@ -156,15 +156,15 @@ async function toggleRecording() {
156156 baselineMetrics = await collectMetrics ( ) ;
157157 recording = true ;
158158 btn . textContent = '⏹ Stop Recording' ;
159- status . innerHTML = '<span>⏺ Recording (change a flag and reload)</span>' ;
159+ safeSetHTML ( status , '<span>⏺ Recording (change a flag and reload)</span>' ) ;
160160 status . classList . add ( 'active' ) ;
161161 logToConsole ( 'Started impact recording - baseline captured' , 'info' ) ;
162162 } else {
163163 // Stop recording - capture after metrics and compare
164164 const afterMetrics = await collectMetrics ( ) ;
165165 recording = false ;
166166 btn . textContent = '⏺ Record Impact' ;
167- status . innerHTML = '<span>⏸ Not Recording</span>' ;
167+ safeSetHTML ( status , '<span>⏸ Not Recording</span>' ) ;
168168 status . classList . remove ( 'active' ) ;
169169
170170 if ( baselineMetrics && afterMetrics ) {
@@ -185,7 +185,7 @@ function analyzeImpact(before, after) {
185185
186186 const improved = loadChange < 0 ;
187187
188- results . innerHTML = `
188+ safeSetHTML ( results , `
189189 <div class="impact-item">
190190 <div class="impact-header">
191191 <span class="impact-flag">Performance Impact Analysis</span>
@@ -208,7 +208,7 @@ function analyzeImpact(before, after) {
208208 </div>
209209 </div>
210210 </div>
211- ` ;
211+ ` ) ;
212212}
213213
214214// Inspect specific flag
@@ -264,10 +264,10 @@ function logToConsole(message, level = 'info') {
264264
265265 const messageEl = document . createElement ( 'div' ) ;
266266 messageEl . className = `console-message ${ level } ` ;
267- messageEl . innerHTML = `
267+ safeSetHTML ( messageEl , `
268268 <span class="timestamp">[${ timestamp } ]</span>
269269 <span class="message">${ escapeHtml ( message ) } </span>
270- ` ;
270+ ` ) ;
271271
272272 output . appendChild ( messageEl ) ;
273273 output . scrollTop = output . scrollHeight ;
@@ -288,7 +288,9 @@ function getConsoleLogs() {
288288// Clear console
289289function clearConsole ( ) {
290290 const output = document . getElementById ( 'console-output' ) ;
291- output . innerHTML = '' ;
291+ while ( output . firstChild ) {
292+ output . removeChild ( output . firstChild ) ;
293+ }
292294 logToConsole ( 'Console cleared' , 'info' ) ;
293295}
294296
0 commit comments