Skip to content

Commit 46685b5

Browse files
authored
Fix input boxes with borders (microsoft#167252)
Fix input boxes with borders (Fixes microsoft#167209)
1 parent ebfbb8c commit 46685b5

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

src/vs/base/browser/dom.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,6 +1206,21 @@ export function asCSSPropertyValue(value: string) {
12061206
return `'${value.replace(/'/g, '%27')}'`;
12071207
}
12081208

1209+
export function asCssValueWithDefault(cssPropertyValue: string | undefined, dflt: string): string {
1210+
if (cssPropertyValue !== undefined) {
1211+
const variableMatch = cssPropertyValue.match(/^\s*var\((.+)\)$/);
1212+
if (variableMatch) {
1213+
const varArguments = variableMatch[1].split(',', 2);
1214+
if (varArguments.length === 2) {
1215+
dflt = asCssValueWithDefault(varArguments[1].trim(), dflt);
1216+
}
1217+
return `var(${varArguments[0]}, ${dflt})`;
1218+
}
1219+
return cssPropertyValue;
1220+
}
1221+
return dflt;
1222+
}
1223+
12091224
export function triggerDownload(dataOrUri: Uint8Array | URI, name: string): void {
12101225

12111226
// If the data is provided as Buffer, we create a

src/vs/base/browser/ui/inputbox/inputBox.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ export class InputBox extends Widget {
377377
this.element.classList.add(this.classForType(message.type));
378378

379379
const styles = this.stylesForType(this.message.type);
380-
this.element.style.borderColor = styles.border || 'transparent';
380+
this.element.style.border = `1px solid ${dom.asCssValueWithDefault(styles.border, 'transparent')}`;
381381

382382
if (this.message.content && (this.hasFocus() || force)) {
383383
this._showMessage();
@@ -552,9 +552,7 @@ export class InputBox extends Widget {
552552
this.input.style.color = foreground;
553553

554554
// there's always a border, even if the color is not set.
555-
this.element.style.borderColor = border || 'transparent';
556-
this.element.style.borderWidth = '1px';
557-
this.element.style.borderStyle = 'solid';
555+
this.element.style.border = `1px solid ${dom.asCssValueWithDefault(border, 'transparent')}`;
558556
}
559557

560558
public layout(): void {

src/vs/base/test/browser/dom.test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as assert from 'assert';
7-
import { $, h, multibyteAwareBtoa } from 'vs/base/browser/dom';
7+
import { $, asCssValueWithDefault, h, multibyteAwareBtoa } from 'vs/base/browser/dom';
88

99
suite('dom', () => {
1010
test('hasClass', () => {
@@ -276,4 +276,14 @@ suite('dom', () => {
276276
assert.strictEqual(result.editor.className, '');
277277
assert.strictEqual(result.editor.childElementCount, 0);
278278
});
279+
280+
test('cssValueWithDefault', () => {
281+
assert.strictEqual(asCssValueWithDefault('red', 'blue'), 'red');
282+
assert.strictEqual(asCssValueWithDefault(undefined, 'blue'), 'blue');
283+
assert.strictEqual(asCssValueWithDefault('var(--my-var)', 'blue'), 'var(--my-var, blue)');
284+
assert.strictEqual(asCssValueWithDefault('var(--my-var, red)', 'blue'), 'var(--my-var, red)');
285+
assert.strictEqual(asCssValueWithDefault('var(--my-var, var(--my-var2))', 'blue'), 'var(--my-var, var(--my-var2, blue))');
286+
});
287+
288+
279289
});

0 commit comments

Comments
 (0)