Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
1d864d84
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,体验更适合开发者的 AI 搜索 >>
提交
1d864d84
编写于
2月 26, 2018
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move webview creation into MarkdownPreview
上级
e6105ab2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
66 addition
and
42 deletion
+66
-42
extensions/markdown/src/features/previewContentProvider.ts
extensions/markdown/src/features/previewContentProvider.ts
+66
-42
未找到文件。
extensions/markdown/src/features/previewContentProvider.ts
浏览文件 @
1d864d84
...
...
@@ -276,17 +276,53 @@ export class MarkdownContentProvider {
}
class
MarkdownPreview
{
public
static
previewScheme
=
'
vscode-markdown-preview
'
;
private
static
previewCount
=
0
;
private
readonly
webview
:
vscode
.
Webview
;
private
throttleTimer
:
any
;
private
initialLine
:
number
|
undefined
=
undefined
;
private
readonly
disposables
:
vscode
.
Disposable
[]
=
[];
constructor
(
public
resource
:
vscode
.
Uri
,
public
webview
:
vscode
.
Webview
,
p
ublic
of
Column
:
vscode
.
ViewColumn
,
public
resourceColumn
:
vscode
.
ViewColumn
,
p
review
Column
:
vscode
.
ViewColumn
,
public
readonly
pinned
:
boolean
,
private
readonly
contentProvider
:
MarkdownContentProvider
,
private
readonly
previewConfigurations
:
PreviewConfigManager
)
{
}
)
{
this
.
webview
=
vscode
.
window
.
createWebview
(
vscode
.
Uri
.
parse
(
`
${
MarkdownPreview
.
previewScheme
}
:
${
MarkdownPreview
.
previewCount
++
}
`
),
previewColumn
,
{
enableScripts
:
true
,
localResourceRoots
:
this
.
getLocalResourceRoots
(
resource
)
});
this
.
webview
.
onDispose
(()
=>
{
},
null
,
this
.
disposables
);
this
.
webview
.
onMessage
(
e
=>
{
vscode
.
commands
.
executeCommand
(
e
.
command
,
...
e
.
args
);
},
null
,
this
.
disposables
);
}
private
readonly
_onDisposeEmitter
=
new
vscode
.
EventEmitter
<
void
>
();
public
readonly
onDispose
=
this
.
_onDisposeEmitter
.
event
;
public
dispose
()
{
this
.
_onDisposeEmitter
.
dispose
();
this
.
webview
.
dispose
();
while
(
this
.
disposables
.
length
)
{
const
item
=
this
.
disposables
.
pop
();
if
(
item
)
{
item
.
dispose
();
}
}
}
public
update
(
resource
:
vscode
.
Uri
)
{
const
editor
=
vscode
.
window
.
activeTextEditor
;
...
...
@@ -335,6 +371,19 @@ class MarkdownPreview {
}
});
}
private
getLocalResourceRoots
(
resource
:
vscode
.
Uri
):
vscode
.
Uri
[]
{
const
folder
=
vscode
.
workspace
.
getWorkspaceFolder
(
resource
);
if
(
folder
)
{
return
[
folder
.
uri
];
}
if
(
!
resource
.
scheme
||
resource
.
scheme
===
'
file
'
)
{
return
[
vscode
.
Uri
.
parse
(
path
.
dirname
(
resource
.
fsPath
))];
}
return
[];
}
}
...
...
@@ -345,9 +394,6 @@ export interface PreviewSettings {
}
export
class
MarkdownPreviewManager
{
private
static
previewScheme
=
'
vscode-markdown-preview
'
;
private
static
previewCount
=
0
;
private
previews
:
MarkdownPreview
[]
=
[];
private
readonly
previewConfigurations
=
new
PreviewConfigManager
();
...
...
@@ -364,11 +410,11 @@ export class MarkdownPreviewManager {
vscode
.
window
.
onDidChangeActiveEditor
(
editor
=>
{
vscode
.
commands
.
executeCommand
(
'
setContext
'
,
'
markdownPreview
'
,
editor
&&
editor
.
editorType
===
'
webview
'
&&
editor
.
uri
.
scheme
===
MarkdownPreview
Manager
.
previewScheme
);
editor
&&
editor
.
editorType
===
'
webview
'
&&
editor
.
uri
.
scheme
===
MarkdownPreview
.
previewScheme
);
if
(
editor
&&
editor
.
editorType
===
'
texteditor
'
)
{
if
(
isMarkdownFile
(
editor
.
document
))
{
for
(
const
preview
of
this
.
previews
.
filter
(
preview
=>
!
preview
.
pinned
&&
preview
.
of
Column
===
editor
.
viewColumn
))
{
for
(
const
preview
of
this
.
previews
.
filter
(
preview
=>
!
preview
.
pinned
&&
preview
.
resource
Column
===
editor
.
viewColumn
))
{
preview
.
update
(
editor
.
document
.
uri
);
}
}
...
...
@@ -395,7 +441,12 @@ export class MarkdownPreviewManager {
item
.
dispose
();
}
}
this
.
previews
=
[];
while
(
this
.
previews
.
length
)
{
const
item
=
this
.
previews
.
pop
();
if
(
item
)
{
item
.
dispose
();
}
}
}
public
refresh
()
{
...
...
@@ -418,7 +469,7 @@ export class MarkdownPreviewManager {
}
for
(
const
preview
of
this
.
previews
)
{
if
(
preview
.
resource
.
fsPath
===
document
.
uri
.
fsPath
||
viewColumn
&&
preview
.
of
Column
===
viewColumn
)
{
if
(
preview
.
resource
.
fsPath
===
document
.
uri
.
fsPath
||
viewColumn
&&
preview
.
resource
Column
===
viewColumn
)
{
preview
.
update
(
document
.
uri
);
}
}
...
...
@@ -427,36 +478,23 @@ export class MarkdownPreviewManager {
public
preview
(
resource
:
vscode
.
Uri
,
previewSettings
:
PreviewSettings
)
{
)
:
void
{
let
preview
=
this
.
getExistingPreview
(
resource
,
previewSettings
);
if
(
preview
)
{
preview
.
resource
=
resource
;
preview
.
of
Column
=
previewSettings
.
resourceColumn
;
preview
.
resource
Column
=
previewSettings
.
resourceColumn
;
}
else
{
const
webview
=
vscode
.
window
.
createWebview
(
vscode
.
Uri
.
parse
(
`
${
MarkdownPreviewManager
.
previewScheme
}
:
${
MarkdownPreviewManager
.
previewCount
++
}
`
),
previewSettings
.
previewColumn
,
{
enableScripts
:
true
,
localResourceRoots
:
this
.
getLocalResourceRoots
(
resource
)
});
webview
.
onDispose
(()
=>
{
const
existing
=
this
.
previews
.
findIndex
(
preview
=>
preview
.
webview
===
webview
);
preview
=
new
MarkdownPreview
(
resource
,
previewSettings
.
resourceColumn
,
previewSettings
.
previewColumn
,
previewSettings
.
pinned
,
this
.
contentProvider
,
this
.
previewConfigurations
);
preview
.
onDispose
(()
=>
{
const
existing
=
this
.
previews
.
indexOf
(
preview
!
);
if
(
existing
>=
0
)
{
this
.
previews
.
splice
(
existing
,
1
);
}
});
webview
.
onMessage
(
e
=>
{
vscode
.
commands
.
executeCommand
(
e
.
command
,
...
e
.
args
);
});
preview
=
new
MarkdownPreview
(
resource
,
webview
,
previewSettings
.
resourceColumn
,
previewSettings
.
pinned
,
this
.
contentProvider
,
this
.
previewConfigurations
);
this
.
previews
.
push
(
preview
);
}
preview
.
update
(
preview
.
resource
);
return
preview
.
webview
;
}
private
getExistingPreview
(
...
...
@@ -472,18 +510,4 @@ export class MarkdownPreviewManager {
return
this
.
previews
.
find
(
preview
=>
preview
.
pinned
&&
preview
.
viewColumn
===
previewSettings
.
previewColumn
&&
preview
.
resource
.
fsPath
===
resource
.
fsPath
);
}
private
getLocalResourceRoots
(
resource
:
vscode
.
Uri
):
vscode
.
Uri
[]
{
const
folder
=
vscode
.
workspace
.
getWorkspaceFolder
(
resource
);
if
(
folder
)
{
return
[
folder
.
uri
];
}
if
(
!
resource
.
scheme
||
resource
.
scheme
===
'
file
'
)
{
return
[
vscode
.
Uri
.
parse
(
path
.
dirname
(
resource
.
fsPath
))];
}
return
[];
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录