Skip to content

Commit a107038

Browse files
committed
fix list paging options type
1 parent d66bbba commit a107038

2 files changed

Lines changed: 56 additions & 6 deletions

File tree

src/vs/base/browser/ui/list/listPaging.ts

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import 'vs/css!./list';
77
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
88
import { range } from 'vs/base/common/arrays';
99
import { IListVirtualDelegate, IListRenderer, IListEvent, IListContextMenuEvent } from './list';
10-
import { List, IListStyles, IListOptions } from './listWidget';
10+
import { List, IListStyles, IListOptions, IAccessibilityProvider } from './listWidget';
1111
import { IPagedModel } from 'vs/base/common/paging';
1212
import { Event } from 'vs/base/common/event';
1313
import { CancellationTokenSource } from 'vs/base/common/cancellation';
14+
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
1415

1516
export interface IPagedRenderer<TElement, TTemplateData> extends IListRenderer<TElement, TTemplateData> {
1617
renderPlaceholder(index: number, templateData: TTemplateData): void;
@@ -70,6 +71,50 @@ class PagedRenderer<TElement, TTemplateData> implements IListRenderer<number, IT
7071
}
7172
}
7273

74+
class PagedAccessibilityProvider<T> implements IAccessibilityProvider<number> {
75+
76+
constructor(
77+
private modelProvider: () => IPagedModel<T>,
78+
private accessibilityProvider: IAccessibilityProvider<T>
79+
) { }
80+
81+
getAriaLabel(index: number): string | null {
82+
const model = this.modelProvider();
83+
84+
if (!model.isResolved(index)) {
85+
return null;
86+
}
87+
88+
return this.accessibilityProvider.getAriaLabel(model.get(index));
89+
}
90+
}
91+
92+
export interface IPagedListOptions<T> {
93+
readonly enableKeyboardNavigation?: boolean;
94+
readonly automaticKeyboardNavigation?: boolean;
95+
readonly ariaLabel?: string;
96+
readonly keyboardSupport?: boolean;
97+
readonly multipleSelectionSupport?: boolean;
98+
readonly accessibilityProvider?: IAccessibilityProvider<T>;
99+
100+
// list view options
101+
readonly useShadows?: boolean;
102+
readonly verticalScrollMode?: ScrollbarVisibility;
103+
readonly setRowLineHeight?: boolean;
104+
readonly setRowHeight?: boolean;
105+
readonly supportDynamicHeights?: boolean;
106+
readonly mouseSupport?: boolean;
107+
readonly horizontalScrolling?: boolean;
108+
readonly additionalScrollHeight?: number;
109+
}
110+
111+
function fromPagedListOptions<T>(modelProvider: () => IPagedModel<T>, options: IPagedListOptions<T>): IListOptions<number> {
112+
return {
113+
...options,
114+
accessibilityProvider: options.accessibilityProvider && new PagedAccessibilityProvider(modelProvider, options.accessibilityProvider)
115+
};
116+
}
117+
73118
export class PagedList<T> implements IDisposable {
74119

75120
private list: List<number>;
@@ -80,10 +125,11 @@ export class PagedList<T> implements IDisposable {
80125
container: HTMLElement,
81126
virtualDelegate: IListVirtualDelegate<number>,
82127
renderers: IPagedRenderer<T, any>[],
83-
options: IListOptions<any> = {}
128+
options: IPagedListOptions<T> = {}
84129
) {
85-
const pagedRenderers = renderers.map(r => new PagedRenderer<T, ITemplateData<T>>(r, () => this.model));
86-
this.list = new List(user, container, virtualDelegate, pagedRenderers, options);
130+
const modelProvider = () => this.model;
131+
const pagedRenderers = renderers.map(r => new PagedRenderer<T, ITemplateData<T>>(r, modelProvider));
132+
this.list = new List(user, container, virtualDelegate, pagedRenderers, fromPagedListOptions(modelProvider, options));
87133
}
88134

89135
getHTMLElement(): HTMLElement {

src/vs/platform/list/browser/listService.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { createStyleSheet } from 'vs/base/browser/dom';
77
import { IListMouseEvent, IListTouchEvent, IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
8-
import { IPagedRenderer, PagedList } from 'vs/base/browser/ui/list/listPaging';
8+
import { IPagedRenderer, PagedList, IPagedListOptions } from 'vs/base/browser/ui/list/listPaging';
99
import { DefaultStyleController, IListOptions, IMultipleSelectionController, IOpenController, isSelectionRangeChangeEvent, isSelectionSingleChangeEvent, List, IAccessibilityProvider, IListOptionsUpdate } from 'vs/base/browser/ui/list/listWidget';
1010
import { Emitter, Event } from 'vs/base/common/event';
1111
import { Disposable, dispose, IDisposable, toDisposable, DisposableStore, combinedDisposable } from 'vs/base/common/lifecycle';
@@ -351,6 +351,10 @@ export class WorkbenchList<T> extends List<T> {
351351
}
352352
}
353353

354+
export interface IWorkbenchPagedListOptions<T> extends IWorkbenchListOptionsUpdate, IPagedListOptions<T> {
355+
readonly accessibilityProvider: IAccessibilityProvider<T>;
356+
}
357+
354358
export class WorkbenchPagedList<T> extends PagedList<T> {
355359

356360
readonly contextKeyService: IContextKeyService;
@@ -365,7 +369,7 @@ export class WorkbenchPagedList<T> extends PagedList<T> {
365369
container: HTMLElement,
366370
delegate: IListVirtualDelegate<number>,
367371
renderers: IPagedRenderer<T, any>[],
368-
options: IWorkbenchListOptions<T>,
372+
options: IWorkbenchPagedListOptions<T>,
369373
@IContextKeyService contextKeyService: IContextKeyService,
370374
@IListService listService: IListService,
371375
@IThemeService themeService: IThemeService,

0 commit comments

Comments
 (0)