Skip to content

Commit d724360

Browse files
committed
Combined refactor microsoft#58922, option decorator/default microsoft#58724
1 parent 34a45ce commit d724360

3 files changed

Lines changed: 27 additions & 7 deletions

File tree

src/vs/base/browser/ui/selectBox/selectBoxCustom.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,18 @@
8080
overflow: hidden;
8181
padding-left: 3.5px;
8282
white-space: nowrap;
83+
float: left;
8384
}
8485

86+
.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row > .option-decoration-right {
87+
text-overflow: ellipsis;
88+
overflow: hidden;
89+
padding-right: 10px;
90+
white-space: nowrap;
91+
float: right;
92+
}
93+
94+
8595
/* Accepted CSS hiding technique for accessibility reader text */
8696
/* https://webaim.org/techniques/css/invisiblecontent/ */
8797

src/vs/base/browser/ui/selectBox/selectBoxCustom.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ interface ISelectListTemplateData {
2828
root: HTMLElement;
2929
text: HTMLElement;
3030
itemDescription: HTMLElement;
31+
decorationRight: HTMLElement;
3132
disposables: IDisposable[];
3233
}
3334

@@ -42,6 +43,7 @@ class SelectListRenderer implements IListRenderer<ISelectOptionItem, ISelectList
4243
data.disposables = [];
4344
data.root = container;
4445
data.text = dom.append(container, $('.option-text'));
46+
data.decorationRight = dom.append(container, $('.option-decoration-right'));
4547
data.itemDescription = dom.append(container, $('.option-text-description'));
4648
dom.addClass(data.itemDescription, 'visually-hidden');
4749

@@ -51,9 +53,11 @@ class SelectListRenderer implements IListRenderer<ISelectOptionItem, ISelectList
5153
renderElement(element: ISelectOptionItem, index: number, templateData: ISelectListTemplateData): void {
5254
const data = <ISelectListTemplateData>templateData;
5355
const text = (<ISelectOptionItem>element).text;
56+
const decorationRight = (<ISelectOptionItem>element).decorationRight;
5457
const isDisabled = (<ISelectOptionItem>element).isDisabled;
5558

5659
data.text.textContent = text;
60+
data.decorationRight.innerText = (!!decorationRight ? decorationRight : '');
5761

5862
if (typeof element.description === 'string') {
5963
const itemDescriptionId = (text.replace(/ /g, '_').toLowerCase() + '_description_' + data.root.id);
@@ -687,14 +691,18 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
687691

688692
if (container && !!this.options) {
689693
let longest = 0;
694+
let longestLength = 0;
690695

691-
for (let index = 0; index < this.options.length; index++) {
692-
if (this.options[index].text.length > this.options[longest].text.length) {
696+
this.options.forEach((option, index) => {
697+
const len = option.text.length + (!!option.decorationRight ? option.decorationRight.length : 0);
698+
if (len > longestLength) {
693699
longest = index;
700+
longestLength = len;
694701
}
695-
}
702+
});
696703

697-
container.innerHTML = this.options[longest].text;
704+
705+
container.innerHTML = this.options[longest].text + (!!this.options[longest].decorationRight ? (this.options[longest].decorationRight + ' ') : '');
698706
elementWidth = dom.getTotalWidth(container);
699707
}
700708

@@ -770,11 +778,12 @@ export class SelectBoxList implements ISelectBoxDelegate, IListVirtualDelegate<I
770778
dom.EventHelper.stop(e);
771779

772780
// Check our mouse event is on an option (not scrollbar)
773-
if (!e.toElement.classList.contains('option-text')) {
781+
if (!!e.toElement.classList.contains('slider')) {
774782
return;
775783
}
776784

777-
const listRowElement = e.toElement.parentElement;
785+
const listRowElement = e.toElement.closest('.monaco-list-row');
786+
778787
if (!listRowElement) {
779788
return;
780789
}

src/vs/workbench/parts/preferences/browser/settingsTree.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,7 +1173,8 @@ export class SettingsRenderer implements ITreeRenderer {
11731173
.map((data, index) => <ISelectOptionItem>{
11741174
text: data,
11751175
description: (enumDescriptions && enumDescriptions[index] && (enumDescriptionsAreMarkdown ? fixSettingLinks(enumDescriptions[index], false) : enumDescriptions[index])),
1176-
descriptionIsMarkdown: enumDescriptionsAreMarkdown
1176+
descriptionIsMarkdown: enumDescriptionsAreMarkdown,
1177+
decorationRight: (data === dataElement.defaultValue ? localize('settings.Default', "({0})", 'default') : '')
11771178
});
11781179

11791180
template.selectBox.setOptions(displayOptions);

0 commit comments

Comments
 (0)