Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
12682daf
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,发现更多精彩内容 >>
提交
12682daf
编写于
12月 17, 2018
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
introduce DataTree
上级
5fae6922
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
138 addition
and
1 deletion
+138
-1
src/vs/base/browser/ui/tree/dataTree.ts
src/vs/base/browser/ui/tree/dataTree.ts
+60
-0
src/vs/base/browser/ui/tree/tree.ts
src/vs/base/browser/ui/tree/tree.ts
+4
-0
test/tree/public/index.html
test/tree/public/index.html
+74
-1
未找到文件。
src/vs/base/browser/ui/tree/dataTree.ts
0 → 100644
浏览文件 @
12682daf
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
AbstractTree
,
IAbstractTreeOptions
}
from
'
vs/base/browser/ui/tree/abstractTree
'
;
import
{
ISpliceable
}
from
'
vs/base/common/sequence
'
;
import
{
ITreeNode
,
ITreeModel
,
ITreeElement
,
ITreeRenderer
,
ITreeSorter
,
IDataSource
}
from
'
vs/base/browser/ui/tree/tree
'
;
import
{
ObjectTreeModel
}
from
'
vs/base/browser/ui/tree/objectTreeModel
'
;
import
{
IListVirtualDelegate
}
from
'
vs/base/browser/ui/list/list
'
;
import
{
Iterator
}
from
'
vs/base/common/iterator
'
;
export
interface
IDataTreeOptions
<
T
,
TFilterData
=
void
>
extends
IAbstractTreeOptions
<
T
,
TFilterData
>
{
sorter
?:
ITreeSorter
<
T
>
;
}
export
class
DataTree
<
TInput
,
T
,
TFilterData
=
void
>
extends
AbstractTree
<
T
|
null
,
TFilterData
,
TInput
|
T
>
{
protected
model
:
ObjectTreeModel
<
T
|
null
,
TFilterData
>
;
private
_input
:
TInput
|
undefined
;
get
input
():
TInput
|
undefined
{
return
this
.
_input
;
}
set
input
(
input
:
TInput
|
undefined
)
{
this
.
_input
=
input
;
this
.
refresh
(
input
);
}
constructor
(
container
:
HTMLElement
,
delegate
:
IListVirtualDelegate
<
T
>
,
renderers
:
ITreeRenderer
<
any
/* TODO@joao */
,
TFilterData
,
any
>
[],
private
dataSource
:
IDataSource
<
TInput
,
T
>
,
options
:
IDataTreeOptions
<
T
,
TFilterData
>
=
{}
)
{
super
(
container
,
delegate
,
renderers
,
options
);
}
refresh
(
element
:
TInput
|
T
):
void
{
if
(
!
this
.
_input
)
{
throw
new
Error
(
'
Tree input not set
'
);
}
this
.
model
.
setChildren
((
element
===
this
.
input
?
null
:
element
)
as
T
,
this
.
createIterator
(
element
));
}
private
createIterator
(
element
:
TInput
|
T
):
Iterator
<
ITreeElement
<
T
>>
{
return
Iterator
.
map
(
Iterator
.
fromArray
(
this
.
dataSource
.
getChildren
(
element
)),
element
=>
({
element
,
children
:
this
.
createIterator
(
element
)
}));
}
protected
createModel
(
view
:
ISpliceable
<
ITreeNode
<
T
,
TFilterData
>>
,
options
:
IDataTreeOptions
<
T
,
TFilterData
>
):
ITreeModel
<
T
|
null
,
TFilterData
,
T
|
null
>
{
return
new
ObjectTreeModel
(
view
,
options
);
}
}
\ No newline at end of file
src/vs/base/browser/ui/tree/tree.ts
浏览文件 @
12682daf
...
...
@@ -145,6 +145,10 @@ export interface ITreeNavigator<T> {
next
():
T
|
null
;
}
export
interface
IDataSource
<
TInput
,
T
>
{
getChildren
(
element
:
TInput
|
T
):
T
[];
}
export
interface
IAsyncDataSource
<
T
extends
NonNullable
<
any
>>
{
hasChildren
(
element
:
T
|
null
):
boolean
;
getChildren
(
element
:
T
|
null
):
T
[]
|
Promise
<
T
[]
>
;
...
...
test/tree/public/index.html
浏览文件 @
12682daf
...
...
@@ -44,7 +44,7 @@
require
.
config
({
baseUrl
:
'
/static
'
});
require
([
'
vs/base/browser/ui/tree/indexTree
'
,
'
vs/base/browser/ui/tree/asyncDataTree
'
,
'
vs/base/browser/ui/tree/
tree
'
,
'
vs/base/common/iterator
'
],
({
IndexTree
},
{
Async
DataTree
},
{
TreeVisibility
},
{
iter
})
=>
{
require
([
'
vs/base/browser/ui/tree/indexTree
'
,
'
vs/base/browser/ui/tree/asyncDataTree
'
,
'
vs/base/browser/ui/tree/
dataTree
'
,
'
vs/base/browser/ui/tree/tree
'
,
'
vs/base/common/iterator
'
],
({
IndexTree
},
{
AsyncDataTree
},
{
DataTree
},
{
TreeVisibility
},
{
iter
})
=>
{
function
createIndexTree
(
opts
)
{
opts
=
opts
||
{};
...
...
@@ -182,6 +182,69 @@
return
{
tree
,
treeFilter
};
}
function
createDataTree
()
{
const
delegate
=
{
getHeight
()
{
return
22
;
},
getTemplateId
()
{
return
'
template
'
;
}
};
const
renderer
=
{
templateId
:
'
template
'
,
renderTemplate
(
container
)
{
return
container
;
},
renderElement
(
node
,
index
,
container
)
{
container
.
textContent
=
node
.
element
.
name
;
},
disposeElement
()
{
},
disposeTemplate
()
{
}
};
const
treeFilter
=
new
class
{
constructor
()
{
this
.
pattern
=
null
;
let
timeout
;
filter
.
oninput
=
()
=>
{
clearTimeout
(
timeout
);
timeout
=
setTimeout
(()
=>
this
.
updatePattern
(),
300
);
};
}
updatePattern
()
{
if
(
!
filter
.
value
)
{
this
.
pattern
=
null
;
}
else
{
this
.
pattern
=
new
RegExp
(
filter
.
value
,
'
i
'
);
}
perf
(
'
refilter
'
,
()
=>
tree
.
refilter
());
}
filter
(
el
)
{
return
(
this
.
pattern
?
this
.
pattern
.
test
(
el
.
name
)
:
true
)
?
TreeVisibility
.
Visible
:
TreeVisibility
.
Recurse
;
}
};
const
dataSource
=
new
class
{
getChildren
(
element
)
{
return
element
.
children
||
[];
}
};
const
identityProvider
=
{
getId
(
node
)
{
return
node
.
name
;
}
};
const
tree
=
new
DataTree
(
container
,
delegate
,
[
renderer
],
dataSource
,
{
filter
:
treeFilter
,
identityProvider
});
tree
.
input
=
{
children
:
[
{
name
:
'
A
'
,
children
:
[{
name
:
'
AA
'
},
{
name
:
'
AB
'
}]
},
{
name
:
'
B
'
,
children
:
[{
name
:
'
BA
'
,
children
:
[{
name
:
'
BAA
'
}]
},
{
name
:
'
BB
'
}]
},
{
name
:
'
C
'
}
]
};
return
{
tree
,
treeFilter
};
}
switch
(
location
.
search
)
{
case
'
?problems
'
:
{
const
{
tree
,
treeFilter
}
=
createIndexTree
();
...
...
@@ -216,6 +279,16 @@
break
;
}
case
'
?objectdata
'
:
{
const
{
tree
,
treeFilter
}
=
createDataTree
();
expandall
.
onclick
=
()
=>
perf
(
'
expand all
'
,
()
=>
tree
.
expandAll
());
collapseall
.
onclick
=
()
=>
perf
(
'
collapse all
'
,
()
=>
tree
.
collapseAll
());
renderwidth
.
onclick
=
()
=>
perf
(
'
renderwidth
'
,
()
=>
tree
.
layoutWidth
(
Math
.
random
()));
refresh
.
onclick
=
()
=>
perf
(
'
refresh
'
,
()
=>
tree
.
refresh
(
null
,
true
));
break
;
}
case
'
?height
'
:
{
const
{
tree
,
treeFilter
}
=
createIndexTree
({
supportDynamicHeights
:
true
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录