Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
caee7a57
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,发现更多精彩内容 >>
提交
caee7a57
编写于
4月 04, 2018
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Working on progress indicator when loading webview
上级
8b501bc0
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
43 addition
and
35 deletion
+43
-35
src/vs/workbench/api/electron-browser/mainThreadWebview.ts
src/vs/workbench/api/electron-browser/mainThreadWebview.ts
+4
-3
src/vs/workbench/api/node/extHost.protocol.ts
src/vs/workbench/api/node/extHost.protocol.ts
+1
-1
src/vs/workbench/api/node/extHostWebview.ts
src/vs/workbench/api/node/extHostWebview.ts
+3
-3
src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts
...workbench/parts/webview/electron-browser/webviewEditor.ts
+2
-2
src/vs/workbench/parts/webview/electron-browser/webviewInput.ts
.../workbench/parts/webview/electron-browser/webviewInput.ts
+6
-6
src/vs/workbench/parts/webview/electron-browser/webviewService.ts
...orkbench/parts/webview/electron-browser/webviewService.ts
+27
-20
未找到文件。
src/vs/workbench/api/electron-browser/mainThreadWebview.ts
浏览文件 @
caee7a57
...
...
@@ -129,8 +129,8 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv
this
.
_revivers
.
delete
(
viewType
);
}
reviveWebview
(
webview
:
WebviewEditorInput
)
{
this
.
_extensionService
.
activateByEvent
(
`onView:
${
webview
.
state
.
viewType
}
`
).
then
(()
=>
{
reviveWebview
(
webview
:
WebviewEditorInput
)
:
TPromise
<
void
>
{
return
this
.
_extensionService
.
activateByEvent
(
`onView:
${
webview
.
state
.
viewType
}
`
).
then
(()
=>
{
const
handle
=
'
revival-
'
+
MainThreadWebviews
.
revivalPool
++
;
this
.
_webviews
.
set
(
handle
,
webview
);
...
...
@@ -145,7 +145,8 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv
}
};
this
.
_proxy
.
$deserializeWebview
(
handle
,
webview
.
state
.
viewType
,
webview
.
state
.
state
,
webview
.
position
,
webview
.
options
);
return
this
.
_proxy
.
$deserializeWebview
(
handle
,
webview
.
state
.
viewType
,
webview
.
state
.
state
,
webview
.
position
,
webview
.
options
)
.
then
(()
=>
{
});
});
}
...
...
src/vs/workbench/api/node/extHost.protocol.ts
浏览文件 @
caee7a57
...
...
@@ -366,7 +366,7 @@ export interface ExtHostWebviewsShape {
$onDidChangeActiveWeview
(
handle
:
WebviewHandle
|
undefined
):
void
;
$onDidDisposeWeview
(
handle
:
WebviewHandle
):
Thenable
<
void
>
;
$onDidChangePosition
(
handle
:
WebviewHandle
,
newPosition
:
EditorPosition
):
void
;
$deserializeWebview
(
newWebviewHandle
:
WebviewHandle
,
viewType
:
string
,
state
:
any
,
position
:
EditorPosition
,
options
:
vscode
.
WebviewOptions
):
void
;
$deserializeWebview
(
newWebviewHandle
:
WebviewHandle
,
viewType
:
string
,
state
:
any
,
position
:
EditorPosition
,
options
:
vscode
.
WebviewOptions
):
Thenable
<
boolean
>
;
$serializeWebview
(
webviewHandle
:
WebviewHandle
):
Thenable
<
any
>
;
}
...
...
src/vs/workbench/api/node/extHostWebview.ts
浏览文件 @
caee7a57
...
...
@@ -237,15 +237,15 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
state
:
any
,
position
:
Position
,
options
:
vscode
.
WebviewOptions
):
void
{
):
TPromise
<
boolean
>
{
const
serializer
=
this
.
_serializers
.
get
(
viewType
);
if
(
!
serializer
)
{
return
;
return
TPromise
.
as
(
false
)
;
}
const
revivedWebview
=
new
ExtHostWebview
(
webviewHandle
,
this
.
_proxy
,
viewType
,
typeConverters
.
toViewColumn
(
position
),
options
);
this
.
_webviews
.
set
(
webviewHandle
,
revivedWebview
);
serializer
.
deserializeWebview
(
revivedWebview
,
state
);
return
serializer
.
deserializeWebview
(
revivedWebview
,
state
);
}
$serializeWebview
(
...
...
src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts
浏览文件 @
caee7a57
...
...
@@ -145,10 +145,10 @@ export class WebviewEditor extends BaseWebviewEditor {
this
.
_webview
=
undefined
;
this
.
webviewContent
=
undefined
;
}
await
super
.
setInput
(
input
,
options
);
input
.
onBecameActive
(
this
.
position
);
await
input
.
resolve
();
await
input
.
onBecameActive
(
this
.
position
);
this
.
updateWebview
(
input
);
}
...
...
src/vs/workbench/parts/webview/electron-browser/webviewInput.ts
浏览文件 @
caee7a57
...
...
@@ -141,6 +141,11 @@ export class WebviewEditorInput extends EditorInput {
}
public
resolve
(
refresh
?:
boolean
):
TPromise
<
IEditorModel
,
any
>
{
if
(
this
.
reviver
&&
!
this
.
_revived
)
{
this
.
_revived
=
true
;
return
this
.
reviver
.
reviveWebview
(
this
).
then
(()
=>
new
EditorModel
());
}
return
TPromise
.
as
(
new
EditorModel
());
}
...
...
@@ -221,16 +226,11 @@ export class WebviewEditorInput extends EditorInput {
this
.
_currentWebviewHtml
=
''
;
}
public
onBecameActive
(
position
:
Position
)
{
public
onBecameActive
(
position
:
Position
)
:
void
{
this
.
_position
=
position
;
if
(
this
.
_events
&&
this
.
_events
.
onDidChangePosition
)
{
this
.
_events
.
onDidChangePosition
(
position
);
}
if
(
this
.
reviver
&&
!
this
.
_revived
)
{
this
.
_revived
=
true
;
this
.
reviver
.
reviveWebview
(
this
);
}
}
}
src/vs/workbench/parts/webview/electron-browser/webviewService.ts
浏览文件 @
caee7a57
...
...
@@ -10,6 +10,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi
import
{
IEditorGroupService
}
from
'
vs/workbench/services/group/common/groupService
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
WebviewEditorInput
}
from
'
./webviewInput
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
export
const
IWebviewService
=
createDecorator
<
IWebviewService
>
(
'
webviewService
'
);
...
...
@@ -55,7 +56,7 @@ export interface WebviewReviver {
reviveWebview
(
webview
:
WebviewEditorInput
):
void
;
):
TPromise
<
void
>
;
}
export
interface
WebviewEvents
{
...
...
@@ -73,7 +74,7 @@ export class WebviewService implements IWebviewService {
_serviceBrand
:
any
;
private
readonly
_revivers
=
new
Map
<
string
,
WebviewReviver
>
();
private
readonly
_needingRevival
=
new
Map
<
string
,
WebviewEditorInput
[]
>
()
;
private
_awaitingRevival
:
{
input
:
WebviewEditorInput
,
resolve
:
(
x
:
any
)
=>
void
}[]
=
[]
;
constructor
(
@
IWorkbenchEditorService
private
readonly
_editorService
:
IWorkbenchEditorService
,
...
...
@@ -120,12 +121,16 @@ export class WebviewService implements IWebviewService {
canRevive
:
(
webview
)
=>
{
return
true
;
},
reviveWebview
:
(
webview
)
=>
{
if
(
!
this
.
_needingRevival
.
has
(
viewType
))
{
this
.
_needingRevival
.
set
(
viewType
,
[]);
reviveWebview
:
async
(
webview
:
WebviewEditorInput
):
TPromise
<
void
>
=>
{
const
didRevive
=
await
this
.
tryRevive
(
webview
);
if
(
didRevive
)
{
return
;
}
this
.
_needingRevival
.
get
(
viewType
).
push
(
webviewInput
);
this
.
tryRevive
(
viewType
);
// A reviver may not be registered yet. Put into queue and resolve promise when can can revive
let
resolve
:
(
value
:
void
)
=>
void
;
const
promise
=
new
TPromise
<
void
>
(
r
=>
{
resolve
=
r
;
});
this
.
_awaitingRevival
.
push
({
input
:
webview
,
resolve
});
return
promise
;
}
});
...
...
@@ -141,7 +146,15 @@ export class WebviewService implements IWebviewService {
}
this
.
_revivers
.
set
(
viewType
,
reviver
);
this
.
tryRevive
(
viewType
);
// Resolve any pending views
const
toRevive
=
this
.
_awaitingRevival
.
filter
(
x
=>
x
.
input
.
viewType
===
viewType
);
this
.
_awaitingRevival
=
this
.
_awaitingRevival
.
filter
(
x
=>
x
.
input
.
viewType
!==
viewType
);
for
(
const
input
of
toRevive
)
{
reviver
.
reviveWebview
(
input
.
input
).
then
(()
=>
input
.
resolve
(
void
0
));
}
return
toDisposable
(()
=>
{
this
.
_revivers
.
delete
(
viewType
);
...
...
@@ -156,20 +169,14 @@ export class WebviewService implements IWebviewService {
}
tryRevive
(
viewType
:
string
)
{
const
reviver
=
this
.
_revivers
.
get
(
viewType
);
webview
:
WebviewEditorInput
)
:
boolean
{
const
reviver
=
this
.
_revivers
.
get
(
webview
.
viewType
);
if
(
!
reviver
)
{
return
;
return
false
;
}
const
toRevive
=
this
.
_needingRevival
.
get
(
viewType
);
if
(
!
toRevive
)
{
return
;
}
for
(
const
webview
of
toRevive
)
{
reviver
.
reviveWebview
(
webview
);
}
reviver
.
reviveWebview
(
webview
);
return
true
;
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录