Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
ec081573
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ec081573
编写于
2月 05, 2019
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Restore settings editor focus sinks
上级
97680b78
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
70 addition
and
54 deletion
+70
-54
src/vs/workbench/parts/preferences/electron-browser/settingsEditor2.ts
...nch/parts/preferences/electron-browser/settingsEditor2.ts
+70
-54
未找到文件。
src/vs/workbench/parts/preferences/electron-browser/settingsEditor2.ts
浏览文件 @
ec081573
...
...
@@ -488,57 +488,81 @@ export class SettingsEditor2 extends BaseEditor {
this
.
createTOC
(
bodyContainer
);
//
this.createFocusSink(
//
bodyContainer,
//
e => {
//
if (DOM.findParentWithClass(e.relatedTarget, 'settings-editor-tree')) {
// if (this.settingsTree.getScrollPosition()
> 0) {
// const firstElement = this.settingsTree
.getFirstVisibleElement();
//
this.settingsTree.reveal(firstElement, 0.1);
//
return true;
//
}
//
} else {
// const firstControl = this.settingsTree.getHTMLElement().querySelector(Settings
Renderer.CONTROL_SELECTOR);
//
if (firstControl) {
//
(<HTMLElement>firstControl).focus();
//
}
//
}
//
return false;
//
},
//
'settings list focus helper');
this
.
createFocusSink
(
bodyContainer
,
e
=>
{
if
(
DOM
.
findParentWithClass
(
e
.
relatedTarget
,
'
settings-editor-tree
'
))
{
if
(
this
.
settingsTree
.
scrollTop
>
0
)
{
const
firstElement
=
this
.
getFirstVisibleElement
();
this
.
settingsTree
.
reveal
(
firstElement
,
0.1
);
return
true
;
}
}
else
{
const
firstControl
=
this
.
settingsTree
.
getHTMLElement
().
querySelector
(
AbstractSetting
Renderer
.
CONTROL_SELECTOR
);
if
(
firstControl
)
{
(
<
HTMLElement
>
firstControl
).
focus
();
}
}
return
false
;
},
'
settings list focus helper
'
);
this
.
createSettingsTree
(
bodyContainer
);
//
this.createFocusSink(
//
bodyContainer,
//
e => {
//
if (DOM.findParentWithClass(e.relatedTarget, 'settings-editor-tree')) {
// if (this.settingsTree.getScrollPosition() < 1
) {
// const lastElement = this.settingsTree
.getLastVisibleElement();
//
this.settingsTree.reveal(lastElement, 0.9);
//
return true;
//
}
//
}
//
return false;
//
},
//
'settings list focus helper'
//
);
this
.
createFocusSink
(
bodyContainer
,
e
=>
{
if
(
DOM
.
findParentWithClass
(
e
.
relatedTarget
,
'
settings-editor-tree
'
))
{
if
(
this
.
settingsTree
.
scrollTop
<
this
.
settingsTree
.
scrollHeight
)
{
const
lastElement
=
this
.
getLastVisibleElement
();
this
.
settingsTree
.
reveal
(
lastElement
,
0.9
);
return
true
;
}
}
return
false
;
},
'
settings list focus helper
'
);
}
// private createFocusSink(container: HTMLElement, callback: (e: any) => boolean, label: string): HTMLElement {
// const listFocusSink = DOM.append(container, $('.settings-tree-focus-sink'));
// listFocusSink.setAttribute('aria-label', label);
// listFocusSink.tabIndex = 0;
// this._register(DOM.addDisposableListener(listFocusSink, 'focus', (e: any) => {
// if (e.relatedTarget && callback(e)) {
// e.relatedTarget.focus();
// }
// }));
private
getFirstVisibleElement
(
nth
=
0
):
SettingsTreeElement
|
null
{
// Hack, see https://github.com/Microsoft/vscode/issues/64749
const
settingItems
=
this
.
settingsTree
.
getHTMLElement
().
querySelectorAll
(
AbstractSettingRenderer
.
CONTENTS_SELECTOR
);
const
firstEl
=
settingItems
[
nth
]
||
settingItems
[
0
];
if
(
!
firstEl
)
{
return
null
;
}
// return listFocusSink;
// }
const
firstSettingId
=
this
.
settingRenderers
.
getIdForDOMElementInSetting
(
<
HTMLElement
>
firstEl
);
return
this
.
settingsTreeModel
.
getElementById
(
firstSettingId
);
}
private
getLastVisibleElement
():
SettingsTreeElement
|
null
{
// Hack, see https://github.com/Microsoft/vscode/issues/64749
const
settingItems
=
this
.
settingsTree
.
getHTMLElement
().
querySelectorAll
(
AbstractSettingRenderer
.
CONTENTS_SELECTOR
);
const
firstEl
=
settingItems
[
settingItems
.
length
-
1
];
if
(
!
firstEl
)
{
return
null
;
}
const
firstSettingId
=
this
.
settingRenderers
.
getIdForDOMElementInSetting
(
<
HTMLElement
>
firstEl
);
return
this
.
settingsTreeModel
.
getElementById
(
firstSettingId
);
}
private
createFocusSink
(
container
:
HTMLElement
,
callback
:
(
e
:
any
)
=>
boolean
,
label
:
string
):
HTMLElement
{
const
listFocusSink
=
DOM
.
append
(
container
,
$
(
'
.settings-tree-focus-sink
'
));
listFocusSink
.
setAttribute
(
'
aria-label
'
,
label
);
listFocusSink
.
tabIndex
=
0
;
this
.
_register
(
DOM
.
addDisposableListener
(
listFocusSink
,
'
focus
'
,
(
e
:
any
)
=>
{
if
(
e
.
relatedTarget
&&
callback
(
e
))
{
e
.
relatedTarget
.
focus
();
}
}));
return
listFocusSink
;
}
private
createTOC
(
parent
:
HTMLElement
):
void
{
this
.
tocTreeModel
=
new
TOCTreeModel
(
this
.
viewState
);
...
...
@@ -663,15 +687,7 @@ export class SettingsEditor2 extends BaseEditor {
return
;
}
// Hack, see https://github.com/Microsoft/vscode/issues/64749
const
settingItems
=
this
.
settingsTree
.
getHTMLElement
().
querySelectorAll
(
AbstractSettingRenderer
.
CONTENTS_SELECTOR
);
const
firstEl
=
settingItems
[
1
]
||
settingItems
[
0
];
if
(
!
firstEl
)
{
return
;
}
const
firstSettingId
=
this
.
settingRenderers
.
getIdForDOMElementInSetting
(
<
HTMLElement
>
firstEl
);
const
elementToSync
=
this
.
settingsTreeModel
.
getElementById
(
firstSettingId
);
const
elementToSync
=
this
.
getFirstVisibleElement
(
1
);
const
element
=
elementToSync
instanceof
SettingsTreeSettingElement
?
elementToSync
.
parent
:
elementToSync
instanceof
SettingsTreeGroupElement
?
elementToSync
:
null
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录