Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
978c7223
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,发现更多精彩内容 >>
提交
978c7223
编写于
1月 08, 2019
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #66213
上级
d59a3c37
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
299 addition
and
367 deletion
+299
-367
src/vs/workbench/parts/extensions/browser/extensionsWidgets.ts
...s/workbench/parts/extensions/browser/extensionsWidgets.ts
+23
-49
src/vs/workbench/parts/extensions/common/extensions.ts
src/vs/workbench/parts/extensions/common/extensions.ts
+34
-0
src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts
...ench/parts/extensions/electron-browser/extensionEditor.ts
+18
-21
src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts
...ch/parts/extensions/electron-browser/extensionsActions.ts
+98
-243
src/vs/workbench/parts/extensions/electron-browser/extensionsList.ts
...bench/parts/extensions/electron-browser/extensionsList.ts
+18
-21
src/vs/workbench/parts/extensions/test/electron-browser/extensionsActions.test.ts
...xtensions/test/electron-browser/extensionsActions.test.ts
+108
-33
未找到文件。
src/vs/workbench/parts/extensions/browser/extensionsWidgets.ts
浏览文件 @
978c7223
...
...
@@ -4,61 +4,49 @@
*--------------------------------------------------------------------------------------------*/
import
'
vs/css!./media/extensionsWidgets
'
;
import
{
IDisposable
,
dispos
e
}
from
'
vs/base/common/lifecycle
'
;
import
{
IExtension
,
IExtensionsWorkbenchService
}
from
'
../common/extensions
'
;
import
{
Disposabl
e
}
from
'
vs/base/common/lifecycle
'
;
import
{
IExtension
,
IExtensionsWorkbenchService
,
IExtensionContainer
}
from
'
../common/extensions
'
;
import
{
append
,
$
,
addClass
}
from
'
vs/base/browser/dom
'
;
import
*
as
platform
from
'
vs/base/common/platform
'
;
import
{
localize
}
from
'
vs/nls
'
;
export
interface
IOptions
{
extension
?:
IExtension
;
small
?:
boolean
;
}
export
class
Label
implements
IDisposable
{
private
listener
:
IDisposable
;
export
abstract
class
ExtensionWidget
extends
Disposable
implements
IExtensionContainer
{
private
_extension
:
IExtension
;
get
extension
():
IExtension
{
return
this
.
_extension
;
}
set
extension
(
extension
:
IExtension
)
{
this
.
_extension
=
extension
;
this
.
render
();
}
set
extension
(
extension
:
IExtension
)
{
this
.
_extension
=
extension
;
this
.
update
();
}
update
():
void
{
this
.
render
();
}
abstract
render
():
void
;
}
export
class
Label
extends
ExtensionWidget
{
constructor
(
private
element
:
HTMLElement
,
private
fn
:
(
extension
:
IExtension
)
=>
string
,
@
IExtensionsWorkbenchService
extensionsWorkbenchService
:
IExtensionsWorkbenchService
)
{
super
();
this
.
render
();
this
.
listener
=
extensionsWorkbenchService
.
onChange
(
this
.
render
,
this
);
}
private
render
():
void
{
render
():
void
{
this
.
element
.
textContent
=
this
.
extension
?
this
.
fn
(
this
.
extension
)
:
''
;
}
dispose
():
void
{
this
.
listener
=
dispose
(
this
.
listener
);
}
}
export
class
InstallCountWidget
implements
IDisposable
{
private
disposables
:
IDisposable
[]
=
[];
private
_extension
:
IExtension
;
get
extension
():
IExtension
{
return
this
.
_extension
;
}
set
extension
(
extension
:
IExtension
)
{
this
.
_extension
=
extension
;
this
.
render
();
}
export
class
InstallCountWidget
extends
ExtensionWidget
{
constructor
(
private
container
:
HTMLElement
,
private
options
:
IOptions
,
private
small
:
boolean
,
@
IExtensionsWorkbenchService
extensionsWorkbenchService
:
IExtensionsWorkbenchService
)
{
this
.
_extension
=
options
.
extension
;
this
.
disposables
.
push
(
extensionsWorkbenchService
.
onChange
(()
=>
this
.
render
()));
super
();
addClass
(
container
,
'
extension-install-count
'
);
this
.
render
();
}
private
render
():
void
{
render
():
void
{
this
.
container
.
innerHTML
=
''
;
if
(
!
this
.
extension
)
{
...
...
@@ -73,7 +61,7 @@ export class InstallCountWidget implements IDisposable {
let
installLabel
:
string
;
if
(
this
.
options
.
small
)
{
if
(
this
.
small
)
{
if
(
installCount
>
1000000
)
{
installLabel
=
`
${
Math
.
floor
(
installCount
/
100000
)
/
10
}
M`
;
}
else
if
(
installCount
>
1000
)
{
...
...
@@ -90,36 +78,26 @@ export class InstallCountWidget implements IDisposable {
const
count
=
append
(
this
.
container
,
$
(
'
span.count
'
));
count
.
textContent
=
installLabel
;
}
dispose
():
void
{
this
.
disposables
=
dispose
(
this
.
disposables
);
}
}
export
class
RatingsWidget
implements
IDisposable
{
private
disposables
:
IDisposable
[]
=
[];
private
_extension
:
IExtension
;
get
extension
():
IExtension
{
return
this
.
_extension
;
}
set
extension
(
extension
:
IExtension
)
{
this
.
_extension
=
extension
;
this
.
render
();
}
export
class
RatingsWidget
extends
ExtensionWidget
{
constructor
(
private
container
:
HTMLElement
,
private
options
:
IOptions
,
private
small
:
boolean
,
@
IExtensionsWorkbenchService
extensionsWorkbenchService
:
IExtensionsWorkbenchService
)
{
this
.
_extension
=
options
.
extension
;
this
.
disposables
.
push
(
extensionsWorkbenchService
.
onChange
(()
=>
this
.
render
()));
super
();
addClass
(
container
,
'
extension-ratings
'
);
if
(
option
s
.
small
)
{
if
(
thi
s
.
small
)
{
addClass
(
container
,
'
small
'
);
}
this
.
render
();
}
private
render
():
void
{
render
():
void
{
this
.
container
.
innerHTML
=
''
;
if
(
!
this
.
extension
)
{
...
...
@@ -130,13 +108,13 @@ export class RatingsWidget implements IDisposable {
return
;
}
if
(
this
.
options
.
small
&&
!
this
.
extension
.
ratingCount
)
{
if
(
this
.
small
&&
!
this
.
extension
.
ratingCount
)
{
return
;
}
const
rating
=
Math
.
round
(
this
.
extension
.
rating
*
2
)
/
2
;
if
(
this
.
options
.
small
)
{
if
(
this
.
small
)
{
append
(
this
.
container
,
$
(
'
span.full.star
'
));
const
count
=
append
(
this
.
container
,
$
(
'
span.count
'
));
...
...
@@ -154,8 +132,4 @@ export class RatingsWidget implements IDisposable {
}
}
}
dispose
():
void
{
this
.
disposables
=
dispose
(
this
.
disposables
);
}
}
src/vs/workbench/parts/extensions/common/extensions.ts
浏览文件 @
978c7223
...
...
@@ -11,6 +11,8 @@ import { IQueryOptions, IExtensionManifest, LocalExtensionType, EnablementState,
import
{
IViewContainersRegistry
,
ViewContainer
,
Extensions
as
ViewContainerExtensions
}
from
'
vs/workbench/common/views
'
;
import
{
Registry
}
from
'
vs/platform/registry/common/platform
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
areSameExtensions
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
export
const
VIEWLET_ID
=
'
workbench.view.extensions
'
;
export
const
VIEW_CONTAINER
:
ViewContainer
=
Registry
.
as
<
IViewContainersRegistry
>
(
ViewContainerExtensions
.
ViewContainersRegistry
).
registerViewContainer
(
VIEWLET_ID
);
...
...
@@ -106,3 +108,35 @@ export interface IExtensionsConfiguration {
showRecommendationsOnlyOnDemand
:
boolean
;
closeExtensionDetailsOnViewChange
:
boolean
;
}
export
interface
IExtensionContainer
{
extension
:
IExtension
|
null
;
update
():
void
;
}
export
class
ExtensionContainers
extends
Disposable
{
constructor
(
private
readonly
containers
:
IExtensionContainer
[],
@
IExtensionsWorkbenchService
extensionsWorkbenchService
:
IExtensionsWorkbenchService
)
{
super
();
this
.
_register
(
extensionsWorkbenchService
.
onChange
(
this
.
update
,
this
));
}
set
extension
(
extension
:
IExtension
)
{
this
.
containers
.
forEach
(
c
=>
c
.
extension
=
extension
);
}
private
update
(
extension
:
IExtension
):
void
{
for
(
const
container
of
this
.
containers
)
{
if
(
extension
&&
container
.
extension
)
{
if
(
areSameExtensions
(
container
.
extension
.
identifier
,
extension
.
identifier
))
{
container
.
extension
=
extension
;
}
}
else
{
container
.
update
();
}
}
}
}
\ No newline at end of file
src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts
浏览文件 @
978c7223
...
...
@@ -23,7 +23,7 @@ import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiati
import
{
IExtensionManifest
,
IKeyBinding
,
IView
,
IExtensionTipsService
,
LocalExtensionType
,
IViewContainer
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
ResolvedKeybinding
,
KeyMod
,
KeyCode
}
from
'
vs/base/common/keyCodes
'
;
import
{
ExtensionsInput
}
from
'
vs/workbench/parts/extensions/common/extensionsInput
'
;
import
{
IExtensionsWorkbenchService
,
IExtensionsViewlet
,
VIEWLET_ID
,
IExtension
,
IExtensionDependencies
}
from
'
vs/workbench/parts/extensions/common/extensions
'
;
import
{
IExtensionsWorkbenchService
,
IExtensionsViewlet
,
VIEWLET_ID
,
IExtension
,
IExtensionDependencies
,
ExtensionContainers
}
from
'
vs/workbench/parts/extensions/common/extensions
'
;
import
{
RatingsWidget
,
InstallCountWidget
}
from
'
vs/workbench/parts/extensions/browser/extensionsWidgets
'
;
import
{
EditorOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
ActionBar
}
from
'
vs/base/browser/ui/actionbar/actionbar
'
;
...
...
@@ -348,29 +348,26 @@ export class ExtensionEditor extends BaseEditor {
this
.
repository
.
style
.
display
=
'
none
'
;
}
const
install
=
this
.
instantiationService
.
createInstance
(
InstallCountWidget
,
this
.
installCount
,
{
extension
});
this
.
transientDisposables
.
push
(
install
);
const
ratings
=
this
.
instantiationService
.
createInstance
(
RatingsWidget
,
this
.
rating
,
{
extension
});
this
.
transientDisposables
.
push
(
ratings
);
const
maliciousStatusAction
=
this
.
instantiationService
.
createInstance
(
MaliciousStatusLabelAction
,
true
);
const
disabledStatusAction
=
this
.
instantiationService
.
createInstance
(
DisabledStatusLabelAction
,
runningExtensions
);
const
installAction
=
this
.
instantiationService
.
createInstance
(
CombinedInstallAction
);
const
updateAction
=
this
.
instantiationService
.
createInstance
(
UpdateAction
);
const
enableAction
=
this
.
instantiationService
.
createInstance
(
EnableDropDownAction
,
extension
,
runningExtensions
);
const
disableAction
=
this
.
instantiationService
.
createInstance
(
DisableDropDownAction
,
extension
,
runningExtensions
);
const
widgets
=
[
this
.
instantiationService
.
createInstance
(
InstallCountWidget
,
this
.
installCount
,
false
),
this
.
instantiationService
.
createInstance
(
RatingsWidget
,
this
.
rating
,
false
)
];
const
reloadAction
=
this
.
instantiationService
.
createInstance
(
ReloadAction
);
installAction
.
extension
=
extension
;
maliciousStatusAction
.
extension
=
extension
;
disabledStatusAction
.
extension
=
extension
;
updateAction
.
extension
=
extension
;
reloadAction
.
extension
=
extension
;
const
actions
=
[
reloadAction
,
this
.
instantiationService
.
createInstance
(
UpdateAction
),
this
.
instantiationService
.
createInstance
(
EnableDropDownAction
,
runningExtensions
),
this
.
instantiationService
.
createInstance
(
DisableDropDownAction
,
runningExtensions
),
this
.
instantiationService
.
createInstance
(
CombinedInstallAction
),
this
.
instantiationService
.
createInstance
(
MaliciousStatusLabelAction
,
true
),
this
.
instantiationService
.
createInstance
(
DisabledStatusLabelAction
,
runningExtensions
)
];
const
extensionContainers
:
ExtensionContainers
=
this
.
instantiationService
.
createInstance
(
ExtensionContainers
,
[...
actions
,
...
widgets
]);
extensionContainers
.
extension
=
extension
;
this
.
extensionActionBar
.
clear
();
this
.
extensionActionBar
.
push
(
[
reloadAction
,
updateAction
,
enableAction
,
disableAction
,
installAction
,
maliciousStatusAction
,
disabledStatusAction
]
,
{
icon
:
true
,
label
:
true
});
this
.
transientDisposables
.
push
(
enableAction
,
updateAction
,
reloadAction
,
disableAction
,
installAction
,
maliciousStatusAction
,
disabledStatusAction
);
this
.
extensionActionBar
.
push
(
actions
,
{
icon
:
true
,
label
:
true
});
this
.
transientDisposables
.
push
(
...[...
actions
,
extensionContainers
]
);
this
.
setSubText
(
extension
,
reloadAction
);
this
.
content
.
innerHTML
=
''
;
// Clear content before setting navbar actions.
...
...
src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts
浏览文件 @
978c7223
此差异已折叠。
点击以展开。
src/vs/workbench/parts/extensions/electron-browser/extensionsList.ts
浏览文件 @
978c7223
...
...
@@ -13,7 +13,7 @@ import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
import
{
IPagedRenderer
}
from
'
vs/base/browser/ui/list/listPaging
'
;
import
{
Event
}
from
'
vs/base/common/event
'
;
import
{
domEvent
}
from
'
vs/base/browser/event
'
;
import
{
IExtension
,
IExtensionsWorkbenchService
}
from
'
vs/workbench/parts/extensions/common/extensions
'
;
import
{
IExtension
,
IExtensionsWorkbenchService
,
ExtensionContainers
}
from
'
vs/workbench/parts/extensions/common/extensions
'
;
import
{
InstallAction
,
UpdateAction
,
ManageExtensionAction
,
ReloadAction
,
extensionButtonProminentBackground
,
extensionButtonProminentForeground
,
MaliciousStatusLabelAction
,
ExtensionActionItem
}
from
'
vs/workbench/parts/extensions/electron-browser/extensionsActions
'
;
import
{
areSameExtensions
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
import
{
Label
,
RatingsWidget
,
InstallCountWidget
}
from
'
vs/workbench/parts/extensions/browser/extensionsWidgets
'
;
...
...
@@ -99,31 +99,28 @@ export class Renderer implements IPagedRenderer<IExtension, ITemplateData> {
});
actionbar
.
onDidRun
(({
error
})
=>
error
&&
this
.
notificationService
.
error
(
error
));
const
versionWidget
=
this
.
instantiationService
.
createInstance
(
Label
,
version
,
(
e
:
IExtension
)
=>
e
.
version
);
const
installCountWidget
=
this
.
instantiationService
.
createInstance
(
InstallCountWidget
,
installCount
,
{
small
:
true
});
const
ratingsWidget
=
this
.
instantiationService
.
createInstance
(
RatingsWidget
,
ratings
,
{
small
:
true
});
const
maliciousStatusAction
=
this
.
instantiationService
.
createInstance
(
MaliciousStatusLabelAction
,
false
);
const
installAction
=
this
.
instantiationService
.
createInstance
(
InstallAction
);
const
updateAction
=
this
.
instantiationService
.
createInstance
(
UpdateAction
);
const
reloadAction
=
this
.
instantiationService
.
createInstance
(
ReloadAction
);
const
manageAction
=
this
.
instantiationService
.
createInstance
(
ManageExtensionAction
);
actionbar
.
push
([
updateAction
,
reloadAction
,
installAction
,
maliciousStatusAction
,
manageAction
],
actionOptions
);
const
disposables
=
[
versionWidget
,
installCountWidget
,
ratingsWidget
,
maliciousStatusAction
,
updateAction
,
installAction
,
reloadAction
,
manageAction
,
actionbar
,
bookmarkStyler
];
const
widgets
=
[
this
.
instantiationService
.
createInstance
(
Label
,
version
,
(
e
:
IExtension
)
=>
e
.
version
),
this
.
instantiationService
.
createInstance
(
InstallCountWidget
,
installCount
,
true
),
this
.
instantiationService
.
createInstance
(
RatingsWidget
,
ratings
,
true
)
];
const
actions
=
[
this
.
instantiationService
.
createInstance
(
UpdateAction
),
this
.
instantiationService
.
createInstance
(
ReloadAction
),
this
.
instantiationService
.
createInstance
(
InstallAction
),
this
.
instantiationService
.
createInstance
(
MaliciousStatusLabelAction
,
false
),
this
.
instantiationService
.
createInstance
(
ManageExtensionAction
)
];
const
extensionContainers
:
ExtensionContainers
=
this
.
instantiationService
.
createInstance
(
ExtensionContainers
,
[...
actions
,
...
widgets
]);
actionbar
.
push
(
actions
,
actionOptions
);
const
disposables
=
[...
actions
,
...
widgets
,
actionbar
,
bookmarkStyler
,
extensionContainers
];
return
{
root
,
element
,
icon
,
name
,
installCount
,
ratings
,
author
,
description
,
disposables
,
actionbar
,
extensionDisposables
:
[],
set
extension
(
extension
:
IExtension
)
{
versionWidget
.
extension
=
extension
;
installCountWidget
.
extension
=
extension
;
ratingsWidget
.
extension
=
extension
;
maliciousStatusAction
.
extension
=
extension
;
installAction
.
extension
=
extension
;
updateAction
.
extension
=
extension
;
reloadAction
.
extension
=
extension
;
manageAction
.
extension
=
extension
;
extensionContainers
.
extension
=
extension
;
}
};
}
...
...
src/vs/workbench/parts/extensions/test/electron-browser/extensionsActions.test.ts
浏览文件 @
978c7223
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录