@@ -49,6 +49,26 @@ const MAX_VALUE_RENDER_LENGTH_IN_VIEWLET = 1024;
49
49
const booleanRegex = / ^ ( t r u e | f a l s e ) $ / i;
50
50
const stringRegex = / ^ ( [ ' " ] ) .* \1$ / ;
51
51
52
+ const enum Cls {
53
+ Value = 'value' ,
54
+ Unavailable = 'unavailable' ,
55
+ Error = 'error' ,
56
+ Changed = 'changed' ,
57
+ Boolean = 'boolean' ,
58
+ String = 'string' ,
59
+ Number = 'number' ,
60
+ }
61
+
62
+ const allClasses : readonly Cls [ ] = Object . keys ( {
63
+ [ Cls . Value ] : 0 ,
64
+ [ Cls . Unavailable ] : 0 ,
65
+ [ Cls . Error ] : 0 ,
66
+ [ Cls . Changed ] : 0 ,
67
+ [ Cls . Boolean ] : 0 ,
68
+ [ Cls . String ] : 0 ,
69
+ [ Cls . Number ] : 0 ,
70
+ } satisfies { [ key in Cls ] : unknown } ) as Cls [ ] ;
71
+
52
72
export class DebugExpressionRenderer {
53
73
private displayType : IObservable < boolean > ;
54
74
private readonly linkDetector : LinkDetector ;
@@ -110,29 +130,32 @@ export class DebugExpressionRenderer {
110
130
let value = typeof expressionOrValue === 'string' ? expressionOrValue : expressionOrValue . value ;
111
131
112
132
// remove stale classes
113
- container . className = 'value' ;
133
+ for ( const cls of allClasses ) {
134
+ container . classList . remove ( cls ) ;
135
+ }
136
+ container . classList . add ( Cls . Value ) ;
114
137
// when resolving expressions we represent errors from the server as a variable with name === null.
115
138
if ( value === null || ( ( expressionOrValue instanceof Expression || expressionOrValue instanceof Variable || expressionOrValue instanceof ReplEvaluationResult ) && ! expressionOrValue . available ) ) {
116
- container . classList . add ( 'unavailable' ) ;
139
+ container . classList . add ( Cls . Unavailable ) ;
117
140
if ( value !== Expression . DEFAULT_VALUE ) {
118
- container . classList . add ( 'error' ) ;
141
+ container . classList . add ( Cls . Error ) ;
119
142
}
120
143
} else {
121
144
if ( typeof expressionOrValue !== 'string' && options . showChanged && expressionOrValue . valueChanged && value !== Expression . DEFAULT_VALUE ) {
122
145
// value changed color has priority over other colors.
123
- container . className = 'value changed' ;
146
+ container . classList . add ( Cls . Changed ) ;
124
147
expressionOrValue . valueChanged = false ;
125
148
}
126
149
127
150
if ( options . colorize && typeof expressionOrValue !== 'string' ) {
128
151
if ( expressionOrValue . type === 'number' || expressionOrValue . type === 'boolean' || expressionOrValue . type === 'string' ) {
129
152
container . classList . add ( expressionOrValue . type ) ;
130
153
} else if ( ! isNaN ( + value ) ) {
131
- container . classList . add ( 'number' ) ;
154
+ container . classList . add ( Cls . Number ) ;
132
155
} else if ( booleanRegex . test ( value ) ) {
133
- container . classList . add ( 'boolean' ) ;
156
+ container . classList . add ( Cls . Boolean ) ;
134
157
} else if ( stringRegex . test ( value ) ) {
135
- container . classList . add ( 'string' ) ;
158
+ container . classList . add ( Cls . String ) ;
136
159
}
137
160
}
138
161
}
0 commit comments