Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
423da148
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
423da148
编写于
7月 30, 2018
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
files.exclude control - focus/keyboard behavior
上级
e58c103e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
97 addition
and
9 deletion
+97
-9
src/vs/workbench/parts/preferences/browser/media/settingsWidgets.css
...bench/parts/preferences/browser/media/settingsWidgets.css
+5
-1
src/vs/workbench/parts/preferences/browser/settingsWidgets.ts
...vs/workbench/parts/preferences/browser/settingsWidgets.ts
+92
-8
未找到文件。
src/vs/workbench/parts/preferences/browser/media/settingsWidgets.css
浏览文件 @
423da148
...
...
@@ -37,8 +37,12 @@
position
:
relative
;
}
.settings-editor
>
.settings-body
>
.settings-tree-container
.setting-item.setting-item-exclude
.setting-exclude-row
:focus
{
outline
:
none
;
}
.settings-editor
>
.settings-body
>
.settings-tree-container
.setting-item.setting-item-exclude
.setting-exclude-row
:hover
.monaco-action-bar
,
.settings-editor
>
.settings-body
>
.settings-tree-container
.setting-item.setting-item-exclude
.setting-exclude-row.
focus
ed
.monaco-action-bar
{
.settings-editor
>
.settings-body
>
.settings-tree-container
.setting-item.setting-item-exclude
.setting-exclude-row.
select
ed
.monaco-action-bar
{
display
:
block
;
}
...
...
src/vs/workbench/parts/preferences/browser/settingsWidgets.ts
浏览文件 @
423da148
...
...
@@ -15,7 +15,7 @@ import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle';
import
'
vs/css!./media/settingsWidgets
'
;
import
{
localize
}
from
'
vs/nls
'
;
import
{
IContextViewService
}
from
'
vs/platform/contextview/browser/contextView
'
;
import
{
foreground
,
inputBackground
,
inputBorder
,
inputForeground
,
listHoverBackground
,
registerColor
,
selectBackground
,
selectBorder
,
selectForeground
,
textLinkForeground
}
from
'
vs/platform/theme/common/colorRegistry
'
;
import
{
foreground
,
inputBackground
,
inputBorder
,
inputForeground
,
listHoverBackground
,
registerColor
,
selectBackground
,
selectBorder
,
selectForeground
,
textLinkForeground
,
listHoverForeground
,
listActiveSelectionBackground
,
listActiveSelectionForeground
}
from
'
vs/platform/theme/common/colorRegistry
'
;
import
{
attachButtonStyler
,
attachInputBoxStyler
}
from
'
vs/platform/theme/common/styler
'
;
import
{
ICssStyleCollector
,
ITheme
,
IThemeService
,
registerThemingParticipant
}
from
'
vs/platform/theme/common/themeService
'
;
...
...
@@ -76,27 +76,47 @@ registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
collector
.
addRule
(
`.settings-editor > .settings-header > .settings-header-controls .settings-tabs-widget .action-label { color:
${
foregroundColor
}
; }`
);
}
// Exclude control
const
listHoverBackgroundColor
=
theme
.
getColor
(
listHoverBackground
);
if
(
listHoverBackgroundColor
)
{
collector
.
addRule
(
`.settings-editor > .settings-body > .settings-tree-container .setting-item.setting-item-exclude .setting-exclude-row:hover { background-color:
${
listHoverBackgroundColor
}
; }`
);
}
const
listHoverForegroundColor
=
theme
.
getColor
(
listHoverForeground
);
if
(
listHoverForegroundColor
)
{
collector
.
addRule
(
`.settings-editor > .settings-body > .settings-tree-container .setting-item.setting-item-exclude .setting-exclude-row:hover { color:
${
listHoverForegroundColor
}
; }`
);
}
const
listSelectBackgroundColor
=
theme
.
getColor
(
listActiveSelectionBackground
);
if
(
listSelectBackgroundColor
)
{
collector
.
addRule
(
`.settings-editor > .settings-body > .settings-tree-container .setting-item.setting-item-exclude .setting-exclude-row.selected { background-color:
${
listSelectBackgroundColor
}
; }`
);
}
const
listSelectForegroundColor
=
theme
.
getColor
(
listActiveSelectionForeground
);
if
(
listSelectForegroundColor
)
{
collector
.
addRule
(
`.settings-editor > .settings-body > .settings-tree-container .setting-item.setting-item-exclude .setting-exclude-row.selected { color:
${
listSelectForegroundColor
}
; }`
);
}
});
export
class
ExcludeSettingListModel
{
private
_dataItems
:
IExcludeDataItem
[]
=
[];
private
_editKey
:
string
;
private
_editKey
:
string
|
null
;
private
_selectedIdx
:
number
|
null
;
get
items
():
IExcludeViewItem
[]
{
const
items
=
this
.
_dataItems
.
map
(
item
=>
{
const
items
=
this
.
_dataItems
.
map
((
item
,
i
)
=>
{
const
editing
=
item
.
pattern
===
this
.
_editKey
;
return
<
IExcludeViewItem
>
{
...
item
,
editing
:
item
.
pattern
===
this
.
_editKey
editing
,
selected
:
i
===
this
.
_selectedIdx
||
editing
};
});
if
(
this
.
_editKey
===
''
)
{
items
.
push
({
editing
:
true
,
selected
:
true
,
pattern
:
''
,
sibling
:
''
});
...
...
@@ -112,6 +132,26 @@ export class ExcludeSettingListModel {
setValue
(
excludeData
:
IExcludeDataItem
[]):
void
{
this
.
_dataItems
=
excludeData
;
}
select
(
idx
:
number
):
void
{
this
.
_selectedIdx
=
idx
;
}
selectNext
():
void
{
if
(
typeof
this
.
_selectedIdx
===
'
number
'
)
{
this
.
_selectedIdx
=
Math
.
min
(
this
.
_selectedIdx
+
1
,
this
.
_dataItems
.
length
-
1
);
}
else
{
this
.
_selectedIdx
=
0
;
}
}
selectPrevious
():
void
{
if
(
typeof
this
.
_selectedIdx
===
'
number
'
)
{
this
.
_selectedIdx
=
Math
.
max
(
this
.
_selectedIdx
-
1
,
0
);
}
else
{
this
.
_selectedIdx
=
0
;
}
}
}
interface
IExcludeChangeEvent
{
...
...
@@ -137,8 +177,41 @@ export class ExcludeSettingWidget extends Disposable {
super
();
this
.
listElement
=
DOM
.
append
(
container
,
$
(
'
.setting-exclude-widget
'
));
this
.
listElement
.
setAttribute
(
'
tabindex
'
,
'
0
'
);
DOM
.
append
(
container
,
this
.
renderAddButton
());
this
.
renderList
();
this
.
_register
(
DOM
.
addDisposableListener
(
this
.
listElement
,
'
click
'
,
(
e
:
MouseEvent
)
=>
{
if
(
!
e
.
target
)
{
return
;
}
const
element
=
DOM
.
findParentWithClass
((
<
any
>
e
.
target
),
'
setting-exclude-row
'
);
if
(
!
element
)
{
return
;
}
const
targetIdx
=
element
.
getAttribute
(
'
data-index
'
);
if
(
!
targetIdx
)
{
return
;
}
this
.
model
.
select
(
parseInt
(
targetIdx
));
this
.
renderList
();
e
.
preventDefault
();
e
.
stopPropagation
();
}));
this
.
_register
(
DOM
.
addStandardDisposableListener
(
this
.
listElement
,
'
keydown
'
,
(
e
:
KeyboardEvent
)
=>
{
if
(
e
.
keyCode
===
KeyCode
.
UpArrow
)
{
this
.
model
.
selectPrevious
();
this
.
renderList
();
}
else
if
(
e
.
keyCode
===
KeyCode
.
DownArrow
)
{
this
.
model
.
selectNext
();
this
.
renderList
();
}
}));
}
setValue
(
excludeData
:
IExcludeDataItem
[]):
void
{
...
...
@@ -154,7 +227,7 @@ export class ExcludeSettingWidget extends Disposable {
DOM
.
toggleClass
(
this
.
container
,
'
setting-exclude-new-mode
'
,
newMode
);
this
.
model
.
items
.
map
(
item
=>
this
.
renderItem
(
item
))
.
map
(
(
item
,
i
)
=>
this
.
renderItem
(
item
,
i
))
.
forEach
(
itemElement
=>
this
.
listElement
.
appendChild
(
itemElement
));
const
listHeight
=
22
*
this
.
model
.
items
.
length
;
...
...
@@ -184,14 +257,18 @@ export class ExcludeSettingWidget extends Disposable {
};
}
private
renderItem
(
item
:
IExcludeViewItem
):
HTMLElement
{
private
renderItem
(
item
:
IExcludeViewItem
,
idx
:
number
):
HTMLElement
{
return
item
.
editing
?
this
.
renderEditItem
(
item
)
:
this
.
renderDataItem
(
item
);
this
.
renderDataItem
(
item
,
idx
);
}
private
renderDataItem
(
item
:
IExclude
DataItem
):
HTMLElement
{
private
renderDataItem
(
item
:
IExclude
ViewItem
,
idx
:
number
):
HTMLElement
{
const
rowElement
=
$
(
'
.setting-exclude-row
'
);
rowElement
.
setAttribute
(
'
data-index
'
,
idx
+
''
);
rowElement
.
setAttribute
(
'
tabindex
'
,
item
.
selected
?
'
0
'
:
'
-1
'
);
DOM
.
toggleClass
(
rowElement
,
'
selected
'
,
item
.
selected
);
const
actionBar
=
new
ActionBar
(
rowElement
);
this
.
listDisposables
.
push
(
actionBar
);
...
...
@@ -209,6 +286,12 @@ export class ExcludeSettingWidget extends Disposable {
localize
(
'
excludeSiblingHintLabel
'
,
"
Exclude files matching `{0}`, only when a file matching `{1}` is present
"
,
item
.
pattern
,
item
.
sibling
)
:
localize
(
'
excludePatternHintLabel
'
,
"
Exclude files matching `{0}`
"
,
item
.
pattern
);
if
(
item
.
selected
)
{
setTimeout
(()
=>
{
rowElement
.
focus
();
},
10
);
}
return
rowElement
;
}
...
...
@@ -312,4 +395,5 @@ export interface IExcludeDataItem {
interface
IExcludeViewItem
extends
IExcludeDataItem
{
editing
?:
boolean
;
selected
?:
boolean
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录