fmode-ng 0.0.39 → 0.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/fmode-ng.mjs +5 -10
- package/esm2022/lib/aigc/agent/agent.prompt.mjs +122 -10
- package/esm2022/lib/aigc/agent/index.mjs +2 -10
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +45 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +2 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +315 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +3 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +57 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +97 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +104 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +111 -10
- package/esm2022/lib/aigc/avatar/index.mjs +8 -10
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +2 -10
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +166 -8
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +36 -10
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +141 -8
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +40 -10
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +92 -10
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +207 -8
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +236 -10
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +137 -10
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +69 -10
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/index.mjs +8 -10
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +82 -10
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +269 -8
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +51 -10
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +24 -10
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +94 -10
- package/esm2022/lib/aigc/index.mjs +13 -10
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +21 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +736 -8
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +181 -8
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +7 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +194 -9
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +27 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +27 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +68 -10
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +229 -8
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +2 -10
- package/esm2022/lib/aigc/voice/audio.player.mjs +52 -10
- package/esm2022/lib/aigc/voice/class-asr.mjs +79 -8
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +501 -8
- package/esm2022/lib/aigc/voice/index.mjs +3 -10
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +38 -10
- package/esm2022/lib/aigc/voice/lib/resample.mjs +34 -10
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +233 -8
- package/esm2022/lib/aigc/voice/tts/index.mjs +2 -10
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +190 -10
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +33 -10
- package/esm2022/lib/map/index.mjs +4 -10
- package/esm2022/lib/map/map.module.mjs +61 -10
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +110 -10
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +98 -8
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +100 -8
- package/esm2022/lib/nova-cloud/index.mjs +2 -10
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +148 -10
- package/esm2022/lib/platform/cross.service.mjs +63 -10
- package/esm2022/lib/platform/index.mjs +2 -10
- package/esm2022/lib/social/index.mjs +2 -10
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +236 -8
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +59 -10
- package/esm2022/lib/storage/index.mjs +5 -10
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +130 -8
- package/esm2022/lib/storage/service-upload/index.mjs +2 -10
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +462 -8
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +28 -10
- package/esm2022/lib/storage/storage.module.mjs +41 -10
- package/esm2022/lib/user/account/account.service.mjs +221 -10
- package/esm2022/lib/user/captcha/captcha.component.mjs +135 -10
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +62 -10
- package/esm2022/lib/user/index.mjs +17 -10
- package/esm2022/lib/user/login/auth.guard.mjs +28 -10
- package/esm2022/lib/user/login/auth.service.mjs +373 -8
- package/esm2022/lib/user/login/login.component.mjs +913 -10
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +273 -10
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +27 -10
- package/esm2022/lib/user/profile/auth-profile.service.mjs +122 -10
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +115 -10
- package/esm2022/lib/user/profile/profile.module.mjs +57 -10
- package/esm2022/lib/user/staff/index.mjs +4 -10
- package/esm2022/lib/user/staff/staff.guard.mjs +26 -10
- package/esm2022/lib/user/staff/staff.module.mjs +18 -10
- package/esm2022/lib/user/staff/staff.service.mjs +85 -10
- package/esm2022/lib/user/user-name.pipe.mjs +29 -10
- package/esm2022/lib/user/user.module.mjs +106 -10
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +67 -10
- package/esm2022/lib/video/index.mjs +2 -10
- package/esm2022/public-api.mjs +13 -10
- package/fesm2022/fmode-ng.mjs +8895 -7
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/user/login/auth.service.d.ts +18 -3
- package/lib/user/modal-user-login/modal-user-login.component.d.ts +4 -2
- package/package.json +1 -1
- package/LICENSE.md +0 -8
|
@@ -1,10 +1,271 @@
|
|
|
1
|
-
|
|
1
|
+
import hljs from 'highlight.js';
|
|
2
|
+
import MarkdownIt from "markdown-it";
|
|
3
|
+
import $ from "jquery";
|
|
4
|
+
/**
|
|
5
|
+
* 自定义插件
|
|
6
|
+
*/
|
|
7
|
+
import { MarkdownMathJax } from './plugins/md-mathjax';
|
|
8
|
+
/**
|
|
9
|
+
* use插件
|
|
10
|
+
*/
|
|
11
|
+
import abbr from 'markdown-it-abbr';
|
|
12
|
+
import footnote from 'markdown-it-footnote';
|
|
13
|
+
import deflist from 'markdown-it-deflist';
|
|
14
|
+
import mark from 'markdown-it-mark';
|
|
15
|
+
import ins from 'markdown-it-ins';
|
|
16
|
+
import sub from 'markdown-it-sub';
|
|
17
|
+
import sup from 'markdown-it-sup';
|
|
18
|
+
// import imsize from 'markdown-it-imsize' // fs path
|
|
19
|
+
import ruby from 'markdown-it-ruby';
|
|
20
|
+
let md = new MarkdownIt({
|
|
21
|
+
html: true, // 在源码中启用 HTML 标签
|
|
22
|
+
xhtmlOut: true, // 使用 '/' 来闭合单标签 (比如 <br />)。
|
|
23
|
+
// 这个选项只对完全的 CommonMark 模式兼容。
|
|
24
|
+
breaks: false, // 转换段落里的 '\n' 到 <br>。
|
|
25
|
+
// langPrefix: 'language-', // 给围栏代码块的 CSS 语言前缀。对于额外的高亮代码非常有用。
|
|
26
|
+
linkify: false, // 将类似 URL 的文本自动转换为链接。
|
|
27
|
+
// 启用一些语言中立的替换 + 引号美化
|
|
28
|
+
typographer: false,
|
|
29
|
+
// 双 + 单引号替换对,当 typographer 启用时。
|
|
30
|
+
// 或者智能引号等,可以是 String 或 Array。
|
|
31
|
+
//
|
|
32
|
+
// 比方说,你可以支持 '«»„“' 给俄罗斯人使用, '„“‚‘' 给德国人使用。
|
|
33
|
+
// 还有 ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] 给法国人使用(包括 nbsp)。
|
|
34
|
+
quotes: '“”‘’',
|
|
35
|
+
// 高亮函数,会返回转义的HTML。
|
|
36
|
+
// 或 '' 如果源字符串未更改,则应在外部进行转义。
|
|
37
|
+
// 如果结果以 <pre ... 开头,内部包装器则会跳过。
|
|
38
|
+
// highlight: function (/*str, lang*/) { return ''; }
|
|
39
|
+
highlight: function (str, lang) {
|
|
40
|
+
if (lang && hljs.getLanguage(lang)) {
|
|
41
|
+
try {
|
|
42
|
+
let hljsCode = hljs.highlight(str, { language: lang }).value;
|
|
43
|
+
return `<pre style="position:relative;padding:10px;" class="hljs lang-${lang}"><code>${hljsCode}</code><small class="hljs-lang"><span class="sr-only">Language:</span>${lang}</small></pre>`;
|
|
44
|
+
}
|
|
45
|
+
catch (__) { }
|
|
46
|
+
}
|
|
47
|
+
return ''; // use external default escaping
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
md.use(abbr);
|
|
51
|
+
md.use(footnote);
|
|
52
|
+
md.use(deflist);
|
|
53
|
+
md.use(mark);
|
|
54
|
+
md.use(ins);
|
|
55
|
+
md.use(sub);
|
|
56
|
+
md.use(sup);
|
|
57
|
+
// md.use(katex);
|
|
58
|
+
// md.use(figure, {
|
|
59
|
+
// render: (content, displayMode) => {
|
|
60
|
+
// // render tex here and return
|
|
61
|
+
// },
|
|
62
|
+
// }); // 加载@mdit/tex 被mathjax依赖
|
|
63
|
+
// const mathjaxInstance = createMathjaxInstance({output:"svg"});
|
|
64
|
+
// md.use(mathjax,mathjaxInstance)
|
|
65
|
+
// import MathJax from 'mathjax';
|
|
66
|
+
// (window as any).MathJax = MathJax;
|
|
67
|
+
// (window as any).markdownitMathjax = {
|
|
68
|
+
// messageStyle: 'none',
|
|
69
|
+
// skipStartupTypeset: true,
|
|
70
|
+
// tex2jax: {
|
|
71
|
+
// inlineMath: [['$', '$'], ['\\[', '\\]'],['\\(', '\\)']],
|
|
72
|
+
// processEscapes: true
|
|
73
|
+
// },
|
|
74
|
+
// TeX: {
|
|
75
|
+
// extensions: ['mhchem.js']
|
|
76
|
+
// }
|
|
77
|
+
// };
|
|
78
|
+
// (window as any).MathJax = {
|
|
79
|
+
// messageStyle: 'none',
|
|
80
|
+
// skipStartupTypeset: true,
|
|
81
|
+
// tex2jax: {
|
|
82
|
+
// inlineMath: [['$', '$'], ['\\(', '\\)']],
|
|
83
|
+
// processEscapes: true
|
|
84
|
+
// },
|
|
85
|
+
// TeX: {
|
|
86
|
+
// extensions: ['mhchem.js']
|
|
87
|
+
// }
|
|
88
|
+
// }
|
|
89
|
+
// md.use(mathjax3)
|
|
90
|
+
// md.use(mathjax())
|
|
91
|
+
// md.use(mathjax({
|
|
92
|
+
// beforeMath: '<span class="mathjax raw">',
|
|
93
|
+
// afterMath: '</span>',
|
|
94
|
+
// beforeInlineMath: '<span class="mathjax raw">\\(',
|
|
95
|
+
// afterInlineMath: '\\)</span>',
|
|
96
|
+
// beforeDisplayMath: '<span class="mathjax raw">\\[',
|
|
97
|
+
// afterDisplayMath: '\\]</span>'
|
|
98
|
+
// }))
|
|
99
|
+
// md.use(imsize)
|
|
100
|
+
md.use(ruby);
|
|
101
|
+
/**
|
|
102
|
+
* PlantUML 插件
|
|
103
|
+
*/
|
|
104
|
+
const mditConfig = {
|
|
105
|
+
plantumlServer: 'https://www.plantuml.com/plantuml'
|
|
106
|
+
};
|
|
107
|
+
import plantumlEncoder from 'plantuml-encoder';
|
|
108
|
+
/**
|
|
109
|
+
* uml代码转图片地址方法
|
|
110
|
+
* @param {*} umlCode
|
|
111
|
+
* @returns
|
|
112
|
+
* @example
|
|
113
|
+
* console.log(makePlantumlURL(`@startuml
|
|
114
|
+
start
|
|
115
|
+
:创建本地仓库;
|
|
116
|
+
:运行git init;
|
|
117
|
+
:使用git add .;
|
|
118
|
+
:使用git commit -m "xxx";
|
|
119
|
+
:使用git remote add origin xxx;
|
|
120
|
+
:使用git push -u origin "master";
|
|
121
|
+
stop
|
|
122
|
+
@enduml`))
|
|
123
|
+
*/
|
|
124
|
+
function makePlantumlURL(umlCode) {
|
|
125
|
+
const format = 'svg';
|
|
126
|
+
const code = plantumlEncoder.encode(umlCode);
|
|
127
|
+
return `${mditConfig.plantumlServer}/${format}/${code}`;
|
|
128
|
+
}
|
|
129
|
+
// https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml
|
|
130
|
+
md.renderer.rules['plantuml'] = (tokens, idx, options, env, self) => {
|
|
131
|
+
const token = tokens[idx];
|
|
132
|
+
if (token.type !== 'plantuml') {
|
|
133
|
+
return tokens[idx].content;
|
|
134
|
+
}
|
|
135
|
+
const url = makePlantumlURL(token.content);
|
|
136
|
+
return `
|
|
137
|
+
<img src="${url}" />
|
|
138
|
+
<pre style="position:relative;padding:10px;" class="hljs lang-plantuml"><code>${token.content}</code><small class="hljs-lang"><span class="sr-only">Language:</span>plantuml</small></pre>
|
|
139
|
+
`;
|
|
140
|
+
};
|
|
141
|
+
// https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml
|
|
142
|
+
// 默认不支持rules['plantuml'] 需要通过ruler push
|
|
143
|
+
md.core.ruler.push('plantuml', (state) => {
|
|
144
|
+
const blockTokens = state.tokens;
|
|
145
|
+
for (const blockToken of blockTokens) {
|
|
146
|
+
if (blockToken.type === 'fence' && blockToken.info === 'plantuml') {
|
|
147
|
+
blockToken.type = 'plantuml';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
// regex for extra tags
|
|
152
|
+
const spaceregex = /\s*/;
|
|
153
|
+
const notinhtmltagregex = /(?![^<]*>|[^<>]*<\/)/;
|
|
154
|
+
let coloregex = /\[color=([#|(|)|\s|,|\w]*?)\]/;
|
|
155
|
+
coloregex = new RegExp(coloregex.source + notinhtmltagregex.source, 'g');
|
|
156
|
+
let nameregex = /\[name=(.*?)\]/;
|
|
157
|
+
let timeregex = /\[time=([:|,|+|-|(|)|\s|\w]*?)\]/;
|
|
158
|
+
const nameandtimeregex = new RegExp(nameregex.source + spaceregex.source + timeregex.source + notinhtmltagregex.source, 'g');
|
|
159
|
+
nameregex = new RegExp(nameregex.source + notinhtmltagregex.source, 'g');
|
|
160
|
+
timeregex = new RegExp(timeregex.source + notinhtmltagregex.source, 'g');
|
|
161
|
+
function replaceExtraTags(html) {
|
|
162
|
+
console.log("replaceExtraTags", html);
|
|
163
|
+
html = html.replace(coloregex, '<span class="color" data-color="$1"></span>');
|
|
164
|
+
html = html.replace(nameandtimeregex, '<small><i class="fa fa-user"></i> $1 <i class="fa fa-clock-o"></i> $2</small>');
|
|
165
|
+
html = html.replace(nameregex, '<small><i class="fa fa-user"></i> $1</small>');
|
|
166
|
+
html = html.replace(timeregex, '<small><i class="fa fa-clock-o"></i> $1</small>');
|
|
167
|
+
console.log("replaceExtraTags", html);
|
|
168
|
+
return html;
|
|
169
|
+
}
|
|
170
|
+
// 生命周期:生成HTML后,动态修正生成内容:dynamic event or object binding here
|
|
171
|
+
function finishView(html) {
|
|
172
|
+
let mdDivEl = $.parseHTML(`<html><body><div id="topmd">${html}</div></body></html>`)[0];
|
|
173
|
+
let mdhtml$ = $(mdDivEl);
|
|
174
|
+
/************************************************
|
|
175
|
+
* 第一步:需操作DOM,进行页面修正
|
|
176
|
+
*/
|
|
2
177
|
/**
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
178
|
+
* BlockQuote 引用增强插件
|
|
179
|
+
*/
|
|
180
|
+
// blockquote 修正引用标签
|
|
181
|
+
let blockquote = mdhtml$.find('blockquote.raw').removeClass('raw');
|
|
182
|
+
blockquote = mdhtml$.find('blockquote');
|
|
183
|
+
let blockquoteP = $(blockquote).find('p');
|
|
184
|
+
blockquoteP.each((key, value) => {
|
|
185
|
+
let htmlStr = $(value).html();
|
|
186
|
+
htmlStr = replaceExtraTags(htmlStr);
|
|
187
|
+
value.innerHTML = htmlStr;
|
|
188
|
+
$(value).html(htmlStr);
|
|
189
|
+
blockquoteP[key].innerHTML = htmlStr;
|
|
190
|
+
$(blockquoteP[key]).html(htmlStr);
|
|
191
|
+
});
|
|
192
|
+
// 引用标签颜色渲染 color tag in blockquote will change its left border color
|
|
193
|
+
let blockquoteColor = blockquote.find('.color');
|
|
194
|
+
blockquoteColor.each((key, value) => {
|
|
195
|
+
let dataColor = $(value).attr('data-color');
|
|
196
|
+
$(value).closest('blockquote').css('border-left-color', dataColor);
|
|
197
|
+
});
|
|
198
|
+
let style = `<style>
|
|
199
|
+
.markdown-section {
|
|
200
|
+
color: black;
|
|
201
|
+
text-align: left;
|
|
202
|
+
}
|
|
203
|
+
.markdown-section pre .hljs-lang{
|
|
204
|
+
text-transform: uppercase;
|
|
205
|
+
font-weight: 700;
|
|
206
|
+
font-size: .75rem;
|
|
207
|
+
line-height: 1rem;
|
|
208
|
+
padding-top: .25rem;
|
|
209
|
+
padding-bottom: .25rem;
|
|
210
|
+
padding-left: .5rem;
|
|
211
|
+
padding-right: .5rem;
|
|
212
|
+
background-color: rgba(0,0,0,.3);
|
|
213
|
+
border-bottom-left-radius: .375rem;
|
|
214
|
+
top:0;
|
|
215
|
+
right:0;
|
|
216
|
+
position:absolute;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
.markdown-section pre .hljs {
|
|
221
|
+
position:relative!important;
|
|
222
|
+
background: #272822!important;
|
|
223
|
+
padding:10px!important;
|
|
224
|
+
color: #ddd;
|
|
225
|
+
text-shadow: none!important;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.markdown-section blockquote {
|
|
229
|
+
margin: 0;
|
|
230
|
+
margin-bottom: 0px;
|
|
231
|
+
margin-bottom: .85em;
|
|
232
|
+
padding: 0 15px;
|
|
233
|
+
color: #858585;
|
|
234
|
+
border-left: 4px solid #e5e5e5;
|
|
235
|
+
border-left-color: rgb(229, 229, 229);
|
|
236
|
+
}
|
|
237
|
+
.markdown-section img {
|
|
238
|
+
max-width:100%;
|
|
239
|
+
}
|
|
240
|
+
</style>`;
|
|
241
|
+
let result = style + (mdhtml$.html() || html);
|
|
242
|
+
/************************************************
|
|
243
|
+
* 第二步:无需操作DOM,替换文本信息
|
|
7
244
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
245
|
+
/**
|
|
246
|
+
* uploads 修正附件地址
|
|
247
|
+
*/
|
|
248
|
+
result = result.replaceAll('src="/uploads/', 'src="https://md.fmode.cn/uploads/');
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
export class MarkdownParse {
|
|
252
|
+
constructor() {
|
|
253
|
+
}
|
|
254
|
+
parseToHTML(markdown) {
|
|
255
|
+
this.info("markdown", markdown);
|
|
256
|
+
// 由于md=>html会转义原文本中的 \( 为 (,\[ 为 [,因此需要先mathjax转换再转markdown
|
|
257
|
+
let mdMathJax = new MarkdownMathJax();
|
|
258
|
+
markdown = mdMathJax.text_to_mathjax(markdown, {
|
|
259
|
+
output: "svg"
|
|
260
|
+
});
|
|
261
|
+
let htmlResult = md.render(markdown);
|
|
262
|
+
// this.info("html",htmlResult)
|
|
263
|
+
htmlResult = finishView(htmlResult);
|
|
264
|
+
// this.info("html plus",htmlResult)
|
|
265
|
+
return htmlResult;
|
|
266
|
+
}
|
|
267
|
+
info(...args) {
|
|
268
|
+
// console.log(...args)
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tcGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY29tcC1tYXJrZG93bi1wcmV2aWV3L21hcmtkb3duLXBhcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXZCOztHQUVHO0FBQ0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZEOztHQUVHO0FBQ0QsT0FBTyxJQUFJLE1BQU0sa0JBQWtCLENBQUE7QUFDbkMsT0FBTyxRQUFRLE1BQU0sc0JBQXNCLENBQUE7QUFDM0MsT0FBTyxPQUFPLE1BQU0scUJBQXFCLENBQUE7QUFDekMsT0FBTyxJQUFJLE1BQU0sa0JBQWtCLENBQUE7QUFDbkMsT0FBTyxHQUFHLE1BQU0saUJBQWlCLENBQUE7QUFDakMsT0FBTyxHQUFHLE1BQU0saUJBQWlCLENBQUE7QUFDakMsT0FBTyxHQUFHLE1BQU0saUJBQWlCLENBQUE7QUFDbkMsc0RBQXNEO0FBQ3BELE9BQU8sSUFBSSxNQUFNLGtCQUFrQixDQUFBO0FBRXJDLElBQUksRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDO0lBQ3BCLElBQUksRUFBVSxJQUFJLEVBQVMsaUJBQWlCO0lBQzVDLFFBQVEsRUFBTSxJQUFJLEVBQVMsNkJBQTZCO0lBQzVCLDZCQUE2QjtJQUN6RCxNQUFNLEVBQVEsS0FBSyxFQUFTLHNCQUFzQjtJQUNsRCxpRUFBaUU7SUFDakUsT0FBTyxFQUFPLEtBQUssRUFBUyxzQkFBc0I7SUFFbEQscUJBQXFCO0lBQ3JCLFdBQVcsRUFBRyxLQUFLO0lBRW5CLGdDQUFnQztJQUNoQyw4QkFBOEI7SUFDOUIsRUFBRTtJQUNGLDRDQUE0QztJQUM1Qywy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Ozs7Ozs7Ozs7Ozs7V0EwQ0gsQ0FBQTtJQUNULElBQUksTUFBTSxHQUFHLEtBQUssR0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQTtJQUU5Qzs7T0FFRztJQUNIOztNQUVFO0lBQ0YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUMsbUNBQW1DLENBQUMsQ0FBQTtJQUNoRixPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxNQUFNLE9BQU8sYUFBYTtJQUN0QjtJQUNBLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBWTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQTtRQUU5Qiw0REFBNEQ7UUFDNUQsSUFBSSxTQUFTLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtRQUNyQyxRQUFRLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUM7WUFDNUMsTUFBTSxFQUFDLEtBQUs7U0FDYixDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJDLCtCQUErQjtRQUMvQixVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLG9DQUFvQztRQUNwQyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBUTtRQUNkLHVCQUF1QjtJQUN6QixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaGxqcyBmcm9tICdoaWdobGlnaHQuanMnO1xuaW1wb3J0IE1hcmtkb3duSXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XG5pbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG5cbi8qKlxuICog6Ieq5a6a5LmJ5o+S5Lu2XG4gKi9cbmltcG9ydCB7IE1hcmtkb3duTWF0aEpheCB9IGZyb20gJy4vcGx1Z2lucy9tZC1tYXRoamF4JztcblxuLyoqXG4gKiB1c2Xmj5Lku7ZcbiAqL1xuICBpbXBvcnQgYWJiciBmcm9tICdtYXJrZG93bi1pdC1hYmJyJ1xuICBpbXBvcnQgZm9vdG5vdGUgZnJvbSAnbWFya2Rvd24taXQtZm9vdG5vdGUnXG4gIGltcG9ydCBkZWZsaXN0IGZyb20gJ21hcmtkb3duLWl0LWRlZmxpc3QnXG4gIGltcG9ydCBtYXJrIGZyb20gJ21hcmtkb3duLWl0LW1hcmsnXG4gIGltcG9ydCBpbnMgZnJvbSAnbWFya2Rvd24taXQtaW5zJ1xuICBpbXBvcnQgc3ViIGZyb20gJ21hcmtkb3duLWl0LXN1YidcbiAgaW1wb3J0IHN1cCBmcm9tICdtYXJrZG93bi1pdC1zdXAnXG4vLyAgaW1wb3J0IGltc2l6ZSBmcm9tICdtYXJrZG93bi1pdC1pbXNpemUnIC8vIGZzIHBhdGhcbiAgaW1wb3J0IHJ1YnkgZnJvbSAnbWFya2Rvd24taXQtcnVieSdcblxubGV0IG1kID0gbmV3IE1hcmtkb3duSXQoe1xuICAgIGh0bWw6ICAgICAgICAgdHJ1ZSwgICAgICAgIC8vIOWcqOa6kOeggeS4reWQr+eUqCBIVE1MIOagh+etvlxuICAgIHhodG1sT3V0OiAgICAgdHJ1ZSwgICAgICAgIC8vIOS9v+eUqCAnLycg5p2l6Zet5ZCI5Y2V5qCH562+IO+8iOavlOWmgiA8YnIgLz7vvInjgIJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6L+Z5Liq6YCJ6aG55Y+q5a+55a6M5YWo55qEIENvbW1vbk1hcmsg5qih5byP5YW85a6544CCXG4gICAgYnJlYWtzOiAgICAgICBmYWxzZSwgICAgICAgIC8vIOi9rOaNouauteiQvemHjOeahCAnXFxuJyDliLAgPGJyPuOAglxuICAgIC8vIGxhbmdQcmVmaXg6ICAgJ2xhbmd1YWdlLScsICAvLyDnu5nlm7TmoI/ku6PnoIHlnZfnmoQgQ1NTIOivreiogOWJjee8gOOAguWvueS6jumineWklueahOmrmOS6ruS7o+eggemdnuW4uOacieeUqOOAglxuICAgIGxpbmtpZnk6ICAgICAgZmFsc2UsICAgICAgICAvLyDlsIbnsbvkvLwgVVJMIOeahOaWh+acrOiHquWKqOi9rOaNouS4uumTvuaOpeOAglxuICBcbiAgICAvLyDlkK/nlKjkuIDkupvor63oqIDkuK3nq4vnmoTmm7/mjaIgKyDlvJXlj7fnvo7ljJZcbiAgICB0eXBvZ3JhcGhlcjogIGZhbHNlLFxuICBcbiAgICAvLyDlj4wgKyDljZXlvJXlj7fmm7/mjaLlr7nvvIzlvZMgdHlwb2dyYXBoZXIg5ZCv55So5pe244CCXG4gICAgLy8g5oiW6ICF5pm66IO95byV5Y+3562J77yM5Y+v5Lul5pivIFN0cmluZyDmiJYgQXJyYXnjgIJcbiAgICAvL1xuICAgIC8vIOavlOaWueivtO+8jOS9oOWPr+S7peaUr+aMgSAnwqvCu+KAnuKAnCcg57uZ5L+E572X5pav5Lq65L2/55So77yMICfigJ7igJzigJrigJgnICDnu5nlvrflm73kurrkvb/nlKjjgIJcbiAgICAvLyDov5jmnIkgWyfCq1xceEEwJywgJ1xceEEwwrsnLCAn4oC5XFx4QTAnLCAnXFx4QTDigLonXSDnu5nms5Xlm73kurrkvb/nlKjvvIjljIXmi6wgbmJzcO+8ieOAglxuICAgIHF1b3RlczogJ+KAnOKAneKAmOKAmScsXG4gIFxuICAgIC8vIOmrmOS6ruWHveaVsO+8jOS8mui/lOWbnui9rOS5ieeahEhUTUzjgIJcbiAgICAvLyDmiJYgJycg5aaC5p6c5rqQ5a2X56ym5Liy5pyq5pu05pS577yM5YiZ5bqU5Zyo5aSW6YOo6L+b6KGM6L2s5LmJ44CCXG4gICAgLy8g5aaC5p6c57uT5p6c5LulIDxwcmUgLi4uIOW8gOWktO+8jOWGhemDqOWMheijheWZqOWImeS8mui3s+i/h+OAglxuICAgIC8vIGhpZ2hsaWdodDogZnVuY3Rpb24gKC8qc3RyLCBsYW5nKi8pIHsgcmV0dXJuICcnOyB9XG4gICAgaGlnaGxpZ2h0OiBmdW5jdGlvbiAoc3RyOmFueSwgbGFuZzphbnkpIHtcbiAgICAgICAgaWYgKGxhbmcgJiYgaGxqcy5nZXRMYW5ndWFnZShsYW5nKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgaGxqc0NvZGUgPSBobGpzLmhpZ2hsaWdodChzdHIsIHsgbGFuZ3VhZ2U6IGxhbmcgfSkudmFsdWVcbiAgICAgICAgICAgIHJldHVybiBgPHByZSBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MTBweDtcIiBjbGFzcz1cImhsanMgbGFuZy0ke2xhbmd9XCI+PGNvZGU+JHtobGpzQ29kZX08L2NvZGU+PHNtYWxsIGNsYXNzPVwiaGxqcy1sYW5nXCI+PHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TGFuZ3VhZ2U6PC9zcGFuPiR7bGFuZ308L3NtYWxsPjwvcHJlPmA7XG4gICAgICAgICAgfSBjYXRjaCAoX18pIHt9XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgcmV0dXJuICcnOyAvLyB1c2UgZXh0ZXJuYWwgZGVmYXVsdCBlc2NhcGluZ1xuICAgICAgfVxuICB9KTtcbiAgXG4gXG4gIFxuICAgICBtZC51c2UoYWJicilcbiAgICAgbWQudXNlKGZvb3Rub3RlKVxuICAgICBtZC51c2UoZGVmbGlzdClcbiAgICAgbWQudXNlKG1hcmspXG4gICAgIG1kLnVzZShpbnMpXG4gICAgIG1kLnVzZShzdWIpO1xuICAgICBtZC51c2Uoc3VwKTtcblxuICAgIC8vICBtZC51c2Uoa2F0ZXgpO1xuXG4gICAgLy8gIG1kLnVzZShmaWd1cmUsIHtcbiAgICAvLyAgIHJlbmRlcjogKGNvbnRlbnQsIGRpc3BsYXlNb2RlKSA9PiB7XG4gICAgLy8gICAgIC8vIHJlbmRlciB0ZXggaGVyZSBhbmQgcmV0dXJuXG4gICAgLy8gICB9LFxuICAgIC8vIH0pOyAvLyDliqDovb1AbWRpdC90ZXgg6KKrbWF0aGpheOS+nei1llxuICAgIC8vICBjb25zdCBtYXRoamF4SW5zdGFuY2UgPSBjcmVhdGVNYXRoamF4SW5zdGFuY2Uoe291dHB1dDpcInN2Z1wifSk7XG4gICAgLy8gIG1kLnVzZShtYXRoamF4LG1hdGhqYXhJbnN0YW5jZSlcbiAgICAvLyBpbXBvcnQgTWF0aEpheCBmcm9tICdtYXRoamF4JztcbiAgICAvLyAod2luZG93IGFzIGFueSkuTWF0aEpheCA9IE1hdGhKYXg7XG4gICAgLy8gKHdpbmRvdyBhcyBhbnkpLm1hcmtkb3duaXRNYXRoamF4ID0ge1xuICAgIC8vICAgbWVzc2FnZVN0eWxlOiAnbm9uZScsXG4gICAgLy8gICBza2lwU3RhcnR1cFR5cGVzZXQ6IHRydWUsXG4gICAgLy8gICB0ZXgyamF4OiB7XG4gICAgLy8gICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcXFxbJywgJ1xcXFxdJ10sWydcXFxcKCcsICdcXFxcKSddXSxcbiAgICAvLyAgICAgcHJvY2Vzc0VzY2FwZXM6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICBUZVg6IHtcbiAgICAvLyAgICAgZXh0ZW5zaW9uczogWydtaGNoZW0uanMnXVxuICAgIC8vICAgfVxuICAgIC8vIH07XG5cbiAgICAvLyAod2luZG93IGFzIGFueSkuTWF0aEpheCA9IHtcbiAgICAvLyAgIG1lc3NhZ2VTdHlsZTogJ25vbmUnLFxuICAgIC8vICAgc2tpcFN0YXJ0dXBUeXBlc2V0OiB0cnVlLFxuICAgIC8vICAgdGV4MmpheDoge1xuICAgIC8vICAgICBpbmxpbmVNYXRoOiBbWyckJywgJyQnXSwgWydcXFxcKCcsICdcXFxcKSddXSxcbiAgICAvLyAgICAgcHJvY2Vzc0VzY2FwZXM6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICBUZVg6IHtcbiAgICAvLyAgICAgZXh0ZW5zaW9uczogWydtaGNoZW0uanMnXVxuICAgICAgLy8gfVxuICAgIC8vIH1cblxuICAgIC8vIG1kLnVzZShtYXRoamF4MylcbiAgICAvLyBtZC51c2UobWF0aGpheCgpKVxuICAgIC8vIG1kLnVzZShtYXRoamF4KHtcbiAgICAvLyAgIGJlZm9yZU1hdGg6ICc8c3BhbiBjbGFzcz1cIm1hdGhqYXggcmF3XCI+JyxcbiAgICAvLyAgIGFmdGVyTWF0aDogJzwvc3Bhbj4nLFxuICAgIC8vICAgYmVmb3JlSW5saW5lTWF0aDogJzxzcGFuIGNsYXNzPVwibWF0aGpheCByYXdcIj5cXFxcKCcsXG4gICAgLy8gICBhZnRlcklubGluZU1hdGg6ICdcXFxcKTwvc3Bhbj4nLFxuICAgIC8vICAgYmVmb3JlRGlzcGxheU1hdGg6ICc8c3BhbiBjbGFzcz1cIm1hdGhqYXggcmF3XCI+XFxcXFsnLFxuICAgIC8vICAgYWZ0ZXJEaXNwbGF5TWF0aDogJ1xcXFxdPC9zcGFuPidcbiAgICAvLyB9KSlcblxuICAgIC8vICBtZC51c2UoaW1zaXplKVxuICAgICBtZC51c2UocnVieSlcbiAgXG4gIC8qKlxuICAgKiBQbGFudFVNTCDmj5Lku7ZcbiAgICovXG4gIGNvbnN0IG1kaXRDb25maWcgPSB7XG4gICAgcGxhbnR1bWxTZXJ2ZXI6J2h0dHBzOi8vd3d3LnBsYW50dW1sLmNvbS9wbGFudHVtbCdcbiAgfVxuICBcbiAgaW1wb3J0IHBsYW50dW1sRW5jb2RlciBmcm9tICdwbGFudHVtbC1lbmNvZGVyJ1xuICAgLyoqXG4gICAgICogdW1s5Luj56CB6L2s5Zu+54mH5Zyw5Z2A5pa55rOVXG4gICAgICogQHBhcmFtIHsqfSB1bWxDb2RlIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc29sZS5sb2cobWFrZVBsYW50dW1sVVJMKGBAc3RhcnR1bWxcbiAgICAgICAgc3RhcnRcbiAgICAgICAgOuWIm+W7uuacrOWcsOS7k+W6kztcbiAgICAgICAgOui/kOihjGdpdCBpbml0O1xuICAgICAgICA65L2/55SoZ2l0IGFkZCAuO1xuICAgICAgICA65L2/55SoZ2l0IGNvbW1pdCAtbSBcInh4eFwiO1xuICAgICAgICA65L2/55SoZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIHh4eDtcbiAgICAgICAgOuS9v+eUqGdpdCBwdXNoIC11IG9yaWdpbiBcIm1hc3RlclwiO1xuICAgICAgICBzdG9wXG4gICAgICAgIEBlbmR1bWxgKSlcbiAgICAqL1xuXG5cblxuICAgICBmdW5jdGlvbiBtYWtlUGxhbnR1bWxVUkwodW1sQ29kZTphbnkpe1xuICAgICAgICBjb25zdCBmb3JtYXQgPSAnc3ZnJ1xuICAgICAgICBjb25zdCBjb2RlID0gcGxhbnR1bWxFbmNvZGVyLmVuY29kZSh1bWxDb2RlKVxuICAgICAgICByZXR1cm4gYCR7bWRpdENvbmZpZy5wbGFudHVtbFNlcnZlcn0vJHtmb3JtYXR9LyR7Y29kZX1gXG4gICAgfVxuICBcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcWplYmJzL3ZzY29kZS1wbGFudHVtbC90cmVlL21hc3Rlci9zcmMvbWFya2Rvd24taXQtcGxhbnR1bWxcbiAgbWQucmVuZGVyZXIucnVsZXNbJ3BsYW50dW1sJ10gPSAodG9rZW5zOmFueSwgaWR4OmFueSwgb3B0aW9uczphbnksIGVudjphbnksIHNlbGY6YW55KSAgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2lkeF1cbiAgICBpZiAodG9rZW4udHlwZSAhPT0gJ3BsYW50dW1sJykge1xuICAgICAgICByZXR1cm4gdG9rZW5zW2lkeF0uY29udGVudFxuICAgIH1cbiAgICBjb25zdCB1cmwgPSBtYWtlUGxhbnR1bWxVUkwodG9rZW4uY29udGVudClcbiAgICByZXR1cm4gYFxuICAgIDxpbWcgc3JjPVwiJHt1cmx9XCIgLz5cbiAgICA8cHJlIHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxMHB4O1wiIGNsYXNzPVwiaGxqcyBsYW5nLXBsYW50dW1sXCI+PGNvZGU+JHt0b2tlbi5jb250ZW50fTwvY29kZT48c21hbGwgY2xhc3M9XCJobGpzLWxhbmdcIj48c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5MYW5ndWFnZTo8L3NwYW4+cGxhbnR1bWw8L3NtYWxsPjwvcHJlPlxuICAgIGBcbn1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9xamViYnMvdnNjb2RlLXBsYW50dW1sL3RyZWUvbWFzdGVyL3NyYy9tYXJrZG93bi1pdC1wbGFudHVtbFxuLy8g6buY6K6k5LiN5pSv5oyBcnVsZXNbJ3BsYW50dW1sJ10g6ZyA6KaB6YCa6L+HcnVsZXIgcHVzaFxubWQuY29yZS5ydWxlci5wdXNoKCdwbGFudHVtbCcsIChzdGF0ZTphbnkpID0+IHtcbiAgICBjb25zdCBibG9ja1Rva2VucyA9IHN0YXRlLnRva2Vuc1xuICAgIGZvciAoY29uc3QgYmxvY2tUb2tlbiBvZiBibG9ja1Rva2Vucykge1xuICAgICAgaWYgKGJsb2NrVG9rZW4udHlwZSA9PT0gJ2ZlbmNlJyAmJiBibG9ja1Rva2VuLmluZm8gPT09ICdwbGFudHVtbCcpIHtcbiAgICAgICAgYmxvY2tUb2tlbi50eXBlID0gJ3BsYW50dW1sJ1xuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICAvLyByZWdleCBmb3IgZXh0cmEgdGFnc1xuICBjb25zdCBzcGFjZXJlZ2V4ID0gL1xccyovXG4gIGNvbnN0IG5vdGluaHRtbHRhZ3JlZ2V4ID0gLyg/IVtePF0qPnxbXjw+XSo8XFwvKS9cbiAgbGV0IGNvbG9yZWdleCA9IC9cXFtjb2xvcj0oWyN8KHwpfFxcc3wsfFxcd10qPylcXF0vXG5jb2xvcmVnZXggPSBuZXcgUmVnRXhwKGNvbG9yZWdleC5zb3VyY2UgKyBub3Rpbmh0bWx0YWdyZWdleC5zb3VyY2UsICdnJylcbmxldCBuYW1lcmVnZXggPSAvXFxbbmFtZT0oLio/KVxcXS9cbmxldCB0aW1lcmVnZXggPSAvXFxbdGltZT0oWzp8LHwrfC18KHwpfFxcc3xcXHddKj8pXFxdL1xuY29uc3QgbmFtZWFuZHRpbWVyZWdleCA9IG5ldyBSZWdFeHAobmFtZXJlZ2V4LnNvdXJjZSArIHNwYWNlcmVnZXguc291cmNlICsgdGltZXJlZ2V4LnNvdXJjZSArIG5vdGluaHRtbHRhZ3JlZ2V4LnNvdXJjZSwgJ2cnKVxubmFtZXJlZ2V4ID0gbmV3IFJlZ0V4cChuYW1lcmVnZXguc291cmNlICsgbm90aW5odG1sdGFncmVnZXguc291cmNlLCAnZycpXG50aW1lcmVnZXggPSBuZXcgUmVnRXhwKHRpbWVyZWdleC5zb3VyY2UgKyBub3Rpbmh0bWx0YWdyZWdleC5zb3VyY2UsICdnJylcblxuZnVuY3Rpb24gcmVwbGFjZUV4dHJhVGFncyAoaHRtbDphbnkpIHsgXG4gIGNvbnNvbGUubG9nKFwicmVwbGFjZUV4dHJhVGFnc1wiLGh0bWwpXG4gIGh0bWwgPSBodG1sLnJlcGxhY2UoY29sb3JlZ2V4LCAnPHNwYW4gY2xhc3M9XCJjb2xvclwiIGRhdGEtY29sb3I9XCIkMVwiPjwvc3Bhbj4nKVxuICBodG1sID0gaHRtbC5yZXBsYWNlKG5hbWVhbmR0aW1lcmVnZXgsICc8c21hbGw+PGkgY2xhc3M9XCJmYSBmYS11c2VyXCI+PC9pPiAkMSA8aSBjbGFzcz1cImZhIGZhLWNsb2NrLW9cIj48L2k+ICQyPC9zbWFsbD4nKVxuICBodG1sID0gaHRtbC5yZXBsYWNlKG5hbWVyZWdleCwgJzxzbWFsbD48aSBjbGFzcz1cImZhIGZhLXVzZXJcIj48L2k+ICQxPC9zbWFsbD4nKVxuICBodG1sID0gaHRtbC5yZXBsYWNlKHRpbWVyZWdleCwgJzxzbWFsbD48aSBjbGFzcz1cImZhIGZhLWNsb2NrLW9cIj48L2k+ICQxPC9zbWFsbD4nKVxuICBjb25zb2xlLmxvZyhcInJlcGxhY2VFeHRyYVRhZ3NcIixodG1sKVxuICByZXR1cm4gaHRtbFxufVxuXG5cbi8vIOeUn+WRveWRqOacn++8mueUn+aIkEhUTUzlkI7vvIzliqjmgIHkv67mraPnlJ/miJDlhoXlrrnvvJpkeW5hbWljIGV2ZW50IG9yIG9iamVjdCBiaW5kaW5nIGhlcmVcbmZ1bmN0aW9uIGZpbmlzaFZpZXcgKGh0bWw6YW55KSB7XG5cbiAgbGV0IG1kRGl2RWwgPSAkLnBhcnNlSFRNTChgPGh0bWw+PGJvZHk+PGRpdiBpZD1cInRvcG1kXCI+JHtodG1sfTwvZGl2PjwvYm9keT48L2h0bWw+YClbMF1cbiAgbGV0IG1kaHRtbCQgPSAkKG1kRGl2RWwpXG5cbiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICog56ys5LiA5q2l77ya6ZyA5pON5L2cRE9N77yM6L+b6KGM6aG16Z2i5L+u5q2jXG4gICAqL1xuICAvKipcbiAgICogQmxvY2tRdW90ZSDlvJXnlKjlop7lvLrmj5Lku7ZcbiAgKi9cbiAgLy8gYmxvY2txdW90ZSDkv67mraPlvJXnlKjmoIfnrb5cbiAgbGV0IGJsb2NrcXVvdGUgPSBtZGh0bWwkLmZpbmQoJ2Jsb2NrcXVvdGUucmF3JykucmVtb3ZlQ2xhc3MoJ3JhdycpXG4gIGJsb2NrcXVvdGUgPSBtZGh0bWwkLmZpbmQoJ2Jsb2NrcXVvdGUnKVxuXG4gIGxldCBibG9ja3F1b3RlUCA9ICQoYmxvY2txdW90ZSkuZmluZCgncCcpXG4gIGJsb2NrcXVvdGVQLmVhY2goKGtleTphbnksIHZhbHVlOmFueSkgPT4ge1xuICAgIGxldCBodG1sU3RyID0gJCh2YWx1ZSkuaHRtbCgpXG4gICAgaHRtbFN0ciA9IHJlcGxhY2VFeHRyYVRhZ3MoaHRtbFN0cilcbiAgICB2YWx1ZS5pbm5lckhUTUwgPSBodG1sU3RyXG4gICAgJCh2YWx1ZSkuaHRtbChodG1sU3RyKVxuICAgIGJsb2NrcXVvdGVQW2tleV0uaW5uZXJIVE1MID0gaHRtbFN0cjtcbiAgICAkKGJsb2NrcXVvdGVQW2tleV0pLmh0bWwoaHRtbFN0cilcbiAgfSlcblxuICAvLyDlvJXnlKjmoIfnrb7popzoibLmuLLmn5MgY29sb3IgdGFnIGluIGJsb2NrcXVvdGUgd2lsbCBjaGFuZ2UgaXRzIGxlZnQgYm9yZGVyIGNvbG9yXG4gIGxldCBibG9ja3F1b3RlQ29sb3IgPSBibG9ja3F1b3RlLmZpbmQoJy5jb2xvcicpXG4gIGJsb2NrcXVvdGVDb2xvci5lYWNoKChrZXk6YW55LCB2YWx1ZTphbnkpID0+IHtcbiAgICBsZXQgZGF0YUNvbG9yOmFueSA9ICQodmFsdWUpLmF0dHIoJ2RhdGEtY29sb3InKVxuICAgICQodmFsdWUpLmNsb3Nlc3QoJ2Jsb2NrcXVvdGUnKS5jc3MoJ2JvcmRlci1sZWZ0LWNvbG9yJywgZGF0YUNvbG9yKVxuICB9KVxuXG4gIFxuICBsZXQgc3R5bGUgPSBgPHN0eWxlPlxuICAgIC5tYXJrZG93bi1zZWN0aW9uIHtcbiAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIC5tYXJrZG93bi1zZWN0aW9uIHByZSAuaGxqcy1sYW5ne1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IC43NXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxcmVtO1xuICAgICAgcGFkZGluZy10b3A6IC4yNXJlbTtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAuMjVyZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IC41cmVtO1xuICAgICAgcGFkZGluZy1yaWdodDogLjVyZW07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4zKTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC4zNzVyZW07XG4gICAgICB0b3A6MDtcbiAgICAgIHJpZ2h0OjA7XG4gICAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbn1cblxuICAgIH1cbiAgICAubWFya2Rvd24tc2VjdGlvbiBwcmUgLmhsanMge1xuICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICMyNzI4MjIhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOjEwcHghaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogI2RkZDtcbiAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmUhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5tYXJrZG93bi1zZWN0aW9uIGJsb2NrcXVvdGUge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLjg1ZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMTVweDtcbiAgICAgICAgY29sb3I6ICM4NTg1ODU7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgI2U1ZTVlNTtcbiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYigyMjksIDIyOSwgMjI5KTtcbiAgICB9XG4gICAgLm1hcmtkb3duLXNlY3Rpb24gaW1nIHtcbiAgICAgIG1heC13aWR0aDoxMDAlO1xuICB9XG4gIDwvc3R5bGU+YFxuICBsZXQgcmVzdWx0ID0gc3R5bGUgICsgKG1kaHRtbCQuaHRtbCgpIHx8IGh0bWwpXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiDnrKzkuozmraXvvJrml6DpnIDmk43kvZxET03vvIzmm7/mjaLmlofmnKzkv6Hmga9cbiAgICovXG4gIC8qKlxuICAgKiB1cGxvYWRzIOS/ruato+mZhOS7tuWcsOWdgFxuICAqL1xuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbCgnc3JjPVwiL3VwbG9hZHMvJywnc3JjPVwiaHR0cHM6Ly9tZC5mbW9kZS5jbi91cGxvYWRzLycpXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGNsYXNzIE1hcmtkb3duUGFyc2V7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICB9IFxuXG4gICAgcGFyc2VUb0hUTUwobWFya2Rvd246YW55KXtcbiAgICAgIHRoaXMuaW5mbyhcIm1hcmtkb3duXCIsbWFya2Rvd24pXG5cbiAgICAgIC8vIOeUseS6jm1kPT5odG1s5Lya6L2s5LmJ5Y6f5paH5pys5Lit55qEIFxcKCDkuLogKO+8jFxcWyDkuLogW++8jOWboOatpOmcgOimgeWFiG1hdGhqYXjovazmjaLlho3ovaxtYXJrZG93blxuICAgICAgbGV0IG1kTWF0aEpheCA9IG5ldyBNYXJrZG93bk1hdGhKYXgoKVxuICAgICAgbWFya2Rvd24gPSBtZE1hdGhKYXgudGV4dF90b19tYXRoamF4KG1hcmtkb3duLHtcbiAgICAgICAgb3V0cHV0Olwic3ZnXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgaHRtbFJlc3VsdCA9IG1kLnJlbmRlcihtYXJrZG93bik7XG5cbiAgICAgIC8vIHRoaXMuaW5mbyhcImh0bWxcIixodG1sUmVzdWx0KVxuICAgICAgaHRtbFJlc3VsdCA9IGZpbmlzaFZpZXcoaHRtbFJlc3VsdCk7XG4gICAgICAvLyB0aGlzLmluZm8oXCJodG1sIHBsdXNcIixodG1sUmVzdWx0KVxuICAgICAgcmV0dXJuIGh0bWxSZXN1bHQ7XG4gICAgfVxuICAgIGluZm8oLi4uYXJnczphbnkpe1xuICAgICAgLy8gY29uc29sZS5sb2coLi4uYXJncylcbiAgICB9XG4gICAgLy8gTWFya2Rvd24gVGV4dCB0byBIVE1MXG4gICAgLy8gSFRNTCBET00gdG8gRW5oYW5jZSBIVE1MIERPTVxufSJdfQ==
|
|
@@ -1,10 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';
|
|
2
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import { MarkdownParse } from "./markdown-parse";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/platform-browser";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
/**
|
|
8
|
+
* Markdown 文档高级渲染组件
|
|
9
|
+
* @name fm-markdown-preview
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export class MarkdownPreviewComponent {
|
|
13
|
+
constructor(domSan, renderer) {
|
|
14
|
+
this.domSan = domSan;
|
|
15
|
+
this.renderer = renderer;
|
|
16
|
+
this.content = ``;
|
|
17
|
+
/**
|
|
18
|
+
* 是否开启MD渲染,默认开启
|
|
19
|
+
* @default true
|
|
20
|
+
*/
|
|
21
|
+
this.render = true;
|
|
22
|
+
}
|
|
23
|
+
ngAfterViewInit() {
|
|
24
|
+
this.renderMdToHTML();
|
|
25
|
+
}
|
|
26
|
+
renderMdToHTML() {
|
|
27
|
+
if (!this.render)
|
|
28
|
+
return;
|
|
29
|
+
let mdparser = new MarkdownParse();
|
|
30
|
+
let htmlResult = mdparser.parseToHTML(this.content);
|
|
31
|
+
this.safeHTML = this.domSan.bypassSecurityTrustHtml(htmlResult);
|
|
32
|
+
let mdDiv = this.renderer.createElement("div");
|
|
33
|
+
mdDiv.innerHTML = htmlResult;
|
|
34
|
+
// console.log(mdDiv.innerHTML)
|
|
35
|
+
this.renderer.appendChild(this.mdContent.nativeElement, mdDiv);
|
|
36
|
+
}
|
|
37
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPreviewComponent, deps: [{ token: i1.DomSanitizer }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MarkdownPreviewComponent, selector: "fm-markdown-preview", inputs: { content: "content", render: "render" }, viewQueries: [{ propertyName: "mdContent", first: true, predicate: ["mdContent"], descendants: true }], ngImport: i0, template: "<div class=\"message-body\">\n <div *ngIf=\"render\" #mdContent class=\"markdown-section\">\n </div>\n <div *ngIf=\"!render\" class=\"pre-section\">\n {{content}}\n </div>\n</div>", styles: [":host{overflow-x:auto}.message-body div{text-align:left;overflow-x:auto}.message-body .pre-section{white-space:pre-wrap}.markdown-section blockquote{margin:0 0 .85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5;border-left-color:#e5e5e5}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPreviewComponent, decorators: [{
|
|
41
|
+
type: Component,
|
|
42
|
+
args: [{ selector: 'fm-markdown-preview', template: "<div class=\"message-body\">\n <div *ngIf=\"render\" #mdContent class=\"markdown-section\">\n </div>\n <div *ngIf=\"!render\" class=\"pre-section\">\n {{content}}\n </div>\n</div>", styles: [":host{overflow-x:auto}.message-body div{text-align:left;overflow-x:auto}.message-body .pre-section{white-space:pre-wrap}.markdown-section blockquote{margin:0 0 .85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5;border-left-color:#e5e5e5}\n"] }]
|
|
43
|
+
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i0.Renderer2 }], propDecorators: { content: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], mdContent: [{
|
|
46
|
+
type: ViewChild,
|
|
47
|
+
args: ['mdContent']
|
|
48
|
+
}], render: [{
|
|
49
|
+
type: Input
|
|
50
|
+
}] } });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY29tcC1tYXJrZG93bi1wcmV2aWV3L21hcmtkb3duLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NvbXAtbWFya2Rvd24tcHJldmlldy9tYXJrZG93bi1wcmV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFFbkUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7O0FBRS9DOzs7O0dBSUc7QUFNSCxNQUFNLE9BQU8sd0JBQXdCO0lBV25DLFlBQ1UsTUFBbUIsRUFDbkIsUUFBa0I7UUFEbEIsV0FBTSxHQUFOLE1BQU0sQ0FBYTtRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBWm5CLFlBQU8sR0FBVSxFQUFFLENBQUE7UUFLNUI7OztXQUdHO1FBQ00sV0FBTSxHQUFXLElBQUksQ0FBQTtJQUs5QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU07UUFDdkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQTtRQUNsQyxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFL0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFDN0IsK0JBQStCO1FBRS9CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFDLEtBQUssQ0FBQyxDQUFBO0lBRS9ELENBQUM7K0dBakNVLHdCQUF3QjttR0FBeEIsd0JBQXdCLHFOQ2ZyQyx3TUFNTTs7NEZEU08sd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHFCQUFxQjt5R0FLdEIsT0FBTztzQkFBZixLQUFLO2dCQUdrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBTWIsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHtNYXJrZG93blBhcnNlfSBmcm9tIFwiLi9tYXJrZG93bi1wYXJzZVwiO1xuXG4vKipcbiAqIE1hcmtkb3duIOaWh+aho+mrmOe6p+a4suafk+e7hOS7tlxuICogQG5hbWUgZm0tbWFya2Rvd24tcHJldmlld1xuICogQHB1YmxpY1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmbS1tYXJrZG93bi1wcmV2aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcmtkb3duLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXJrZG93bi1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWFya2Rvd25QcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCAge1xuICBASW5wdXQoKSBjb250ZW50OnN0cmluZyA9IGBgXG4gIHNhZmVIVE1MOlNhZmVIdG1sXG5cbiAgQFZpZXdDaGlsZCgnbWRDb250ZW50JykgbWRDb250ZW50OiBFbGVtZW50UmVmO1xuICBcbiAgLyoqXG4gICAqIOaYr+WQpuW8gOWQr01E5riy5p+T77yM6buY6K6k5byA5ZCvXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHJlbmRlcjpib29sZWFuID0gdHJ1ZVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRvbVNhbjpEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjpSZW5kZXJlcjJcbiAgICApe1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCl7XG4gICAgdGhpcy5yZW5kZXJNZFRvSFRNTCgpXG4gIH1cblxuICByZW5kZXJNZFRvSFRNTCgpe1xuICAgIGlmKCF0aGlzLnJlbmRlcikgcmV0dXJuXG4gICAgbGV0IG1kcGFyc2VyID0gbmV3IE1hcmtkb3duUGFyc2UoKVxuICAgIGxldCBodG1sUmVzdWx0ID0gbWRwYXJzZXIucGFyc2VUb0hUTUwodGhpcy5jb250ZW50KVxuICAgIHRoaXMuc2FmZUhUTUwgPSB0aGlzLmRvbVNhbi5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sUmVzdWx0KVxuXG4gICAgbGV0IG1kRGl2ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIG1kRGl2LmlubmVySFRNTCA9IGh0bWxSZXN1bHQ7XG4gICAgLy8gY29uc29sZS5sb2cobWREaXYuaW5uZXJIVE1MKVxuXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLm1kQ29udGVudC5uYXRpdmVFbGVtZW50LG1kRGl2KVxuICAgIFxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgPGRpdiAqbmdJZj1cInJlbmRlclwiICNtZENvbnRlbnQgY2xhc3M9XCJtYXJrZG93bi1zZWN0aW9uXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFyZW5kZXJcIiBjbGFzcz1cInByZS1zZWN0aW9uXCI+XG4gICAgICAgIHt7Y29udGVudH19XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { MarkdownPreviewComponent } from './markdown-preview.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class MarkdownPreviewModule {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPreviewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPreviewModule, declarations: [MarkdownPreviewComponent], imports: [CommonModule], exports: [MarkdownPreviewComponent] }); }
|
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPreviewModule, imports: [CommonModule] }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPreviewModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
declarations: [
|
|
14
|
+
MarkdownPreviewComponent
|
|
15
|
+
],
|
|
16
|
+
imports: [
|
|
17
|
+
CommonModule,
|
|
18
|
+
],
|
|
19
|
+
exports: [
|
|
20
|
+
MarkdownPreviewComponent
|
|
21
|
+
]
|
|
22
|
+
}]
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tcHJldmlldy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY29tcC1tYXJrZG93bi1wcmV2aWV3L21hcmtkb3duLXByZXZpZXcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQWN4RSxNQUFNLE9BQU8scUJBQXFCOytHQUFyQixxQkFBcUI7Z0hBQXJCLHFCQUFxQixpQkFUOUIsd0JBQXdCLGFBR3hCLFlBQVksYUFHWix3QkFBd0I7Z0hBR2YscUJBQXFCLFlBTjlCLFlBQVk7OzRGQU1ILHFCQUFxQjtrQkFYakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUM7d0JBQ04sd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tYXJrZG93bi1wcmV2aWV3LmNvbXBvbmVudCc7XG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTWFya2Rvd25QcmV2aWV3Q29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6W1xuICAgIE1hcmtkb3duUHJldmlld0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1hcmtkb3duUHJldmlld01vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -1,10 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { mathjax } from "mathjax-full/js/mathjax";
|
|
2
|
+
import { TeX } from "mathjax-full/js/input/tex";
|
|
3
|
+
import { SVG } from "mathjax-full/js/output/svg";
|
|
4
|
+
import { CHTML } from "mathjax-full/js/output/chtml";
|
|
5
|
+
import { AllPackages } from "mathjax-full/js/input/tex/AllPackages";
|
|
6
|
+
import { liteAdaptor } from "mathjax-full/js/adaptors/liteAdaptor";
|
|
7
|
+
import { RegisterHTMLHandler } from "mathjax-full/js/handlers/html";
|
|
8
|
+
export class MarkdownMathJax {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
this.adaptor = liteAdaptor();
|
|
12
|
+
RegisterHTMLHandler(this.adaptor);
|
|
13
|
+
}
|
|
14
|
+
text_to_mathjax(math, options) {
|
|
15
|
+
if (!math?.length)
|
|
16
|
+
return "";
|
|
17
|
+
if (!math?.replace)
|
|
18
|
+
return "";
|
|
19
|
+
options = options || this.options;
|
|
20
|
+
let output = new SVG({ fontCache: 'local' });
|
|
21
|
+
if (options?.output == "chtml") {
|
|
22
|
+
output = new CHTML();
|
|
23
|
+
}
|
|
24
|
+
// 设置输入输出参数
|
|
25
|
+
const mathjax_document = mathjax.document('', {
|
|
26
|
+
skipHtmlTags: [
|
|
27
|
+
'script', "noscript", 'style', "textarea", "pre", "code", "annotation", "annotation-xml"
|
|
28
|
+
],
|
|
29
|
+
InputJax: new TeX({
|
|
30
|
+
// displayMath: [['\$\$', '\$\$'], ['\\\[', '\\\]']],
|
|
31
|
+
// inlineMath: [['\$', '\$'],['\\\(', '\\\)']],
|
|
32
|
+
processEscapes: true,
|
|
33
|
+
packages: AllPackages,
|
|
34
|
+
}),
|
|
35
|
+
OutputJax: output
|
|
36
|
+
});
|
|
37
|
+
const mathjax_options = {
|
|
38
|
+
em: 16,
|
|
39
|
+
ex: 8,
|
|
40
|
+
containerWidth: 1280
|
|
41
|
+
};
|
|
42
|
+
// Preprocess the input to handle inline and block math separately
|
|
43
|
+
let regxList = [
|
|
44
|
+
/\$\$\ (.+?)\ \$\$/g, /\$\$(.+?)\$\$/g, /\$\$\n(.+?)\n\$\$/g,
|
|
45
|
+
/\$(.+?)\$/g, /\\\((.+?)\\\)/g, /\\\[(.+?)\\\]/g
|
|
46
|
+
];
|
|
47
|
+
regxList.forEach(regx => {
|
|
48
|
+
math = math
|
|
49
|
+
.replace(regx, (match, p1) => {
|
|
50
|
+
// Inline math
|
|
51
|
+
let node = mathjax_document.convert(`${p1}`, mathjax_options);
|
|
52
|
+
let nodeHtml = `<span class="mathjax raw" style="margin-left:10px;margin-right:10px;">${this.adaptor.innerHTML(node)}</span>`;
|
|
53
|
+
return nodeHtml;
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
return math;
|
|
57
|
+
// math
|
|
58
|
+
// .replace(/\$\$\ (.+?)\ \$\$/g, (match, p1) => {
|
|
59
|
+
// // Inline math
|
|
60
|
+
// let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;
|
|
61
|
+
// return this.adaptor.innerHTML(node);
|
|
62
|
+
// })
|
|
63
|
+
// .replace(/\$\$(.+?)\$\$/g, (match, p1) => {
|
|
64
|
+
// // Inline math
|
|
65
|
+
// let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;
|
|
66
|
+
// return this.adaptor.innerHTML(node);
|
|
67
|
+
// })
|
|
68
|
+
// .replace(/\$\$\n(.+?)\n\$\$/g, (match, p1) => {
|
|
69
|
+
// // Inline math
|
|
70
|
+
// let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;
|
|
71
|
+
// return this.adaptor.innerHTML(node);
|
|
72
|
+
// })
|
|
73
|
+
// .replace(/\$(.+?)\$/g, (match, p1) => {
|
|
74
|
+
// // Inline math
|
|
75
|
+
// let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;
|
|
76
|
+
// return this.adaptor.innerHTML(node);
|
|
77
|
+
// })
|
|
78
|
+
// .replace(/\\\((.+?)\\\)/g, (match, p1) => {
|
|
79
|
+
// // Inline math
|
|
80
|
+
// let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;
|
|
81
|
+
// return this.adaptor.innerHTML(node);
|
|
82
|
+
// })
|
|
83
|
+
// .replace(/\\\[(.+?)\\\]/g, (match, p1) => {
|
|
84
|
+
// // Inline math
|
|
85
|
+
// let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;
|
|
86
|
+
// return this.adaptor.innerHTML(node);
|
|
87
|
+
// })
|
|
88
|
+
// return processedMath;
|
|
89
|
+
// 内置Tex内容筛选(不如正则准确)
|
|
90
|
+
// let node:any = mathjax_document.convert(math,mathjax_options) as any;
|
|
91
|
+
// return adaptor.innerHTML(node);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY29tcC1tYXJrZG93bi1wcmV2aWV3L3BsdWdpbnMvbWQtbWF0aGpheC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVwRSxNQUFNLE9BQU8sZUFBZTtJQUl4QixZQUFZLE9BQVk7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUM3QixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELGVBQWUsQ0FBQyxJQUFRLEVBQUMsT0FBWTtRQUNqQyxJQUFHLENBQUMsSUFBSSxFQUFFLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUMzQixJQUFHLENBQUMsSUFBSSxFQUFFLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUM1QixPQUFPLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDakMsSUFBSSxNQUFNLEdBQU8sSUFBSSxHQUFHLENBQUMsRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFHLE9BQU8sRUFBRSxNQUFNLElBQUUsT0FBTyxFQUFDLENBQUM7WUFDN0IsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7UUFDcEIsQ0FBQztRQUNELFdBQVc7UUFDWCxNQUFNLGdCQUFnQixHQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFDO1lBQ2pELFlBQVksRUFBQztnQkFDVCxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxZQUFZLEVBQUMsZ0JBQWdCO2FBQ3BGO1lBQ0QsUUFBUSxFQUFDLElBQUksR0FBRyxDQUFDO2dCQUNiLHFEQUFxRDtnQkFDckQsK0NBQStDO2dCQUMvQyxjQUFjLEVBQUUsSUFBSTtnQkFDcEIsUUFBUSxFQUFDLFdBQVc7YUFDdkIsQ0FBQztZQUNGLFNBQVMsRUFBQyxNQUFNO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxlQUFlLEdBQUc7WUFDeEIsRUFBRSxFQUFDLEVBQUU7WUFDTCxFQUFFLEVBQUMsQ0FBQztZQUNKLGNBQWMsRUFBQyxJQUFJO1NBQ2xCLENBQUE7UUFFRCxrRUFBa0U7UUFDbEUsSUFBSSxRQUFRLEdBQUc7WUFDWCxvQkFBb0IsRUFBQyxnQkFBZ0IsRUFBQyxvQkFBb0I7WUFDMUQsWUFBWSxFQUFDLGdCQUFnQixFQUFDLGdCQUFnQjtTQUNqRCxDQUFBO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUEsRUFBRTtZQUNuQixJQUFJLEdBQUcsSUFBSTtpQkFDVixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUM3QixjQUFjO2dCQUNkLElBQUksSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLGVBQWUsQ0FBUSxDQUFDO2dCQUNyRSxJQUFJLFFBQVEsR0FBRyx5RUFBeUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTtnQkFDN0gsT0FBTyxRQUFRLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtRQUNGLE9BQVEsSUFBSSxDQUFBO1FBQ1osT0FBTztRQUNQLGtEQUFrRDtRQUNsRCxpQkFBaUI7UUFDakIsd0VBQXdFO1FBQ3hFLHVDQUF1QztRQUN2QyxLQUFLO1FBQ0wsOENBQThDO1FBQzlDLHFCQUFxQjtRQUNyQiw0RUFBNEU7UUFDNUUsMkNBQTJDO1FBQzNDLEtBQUs7UUFDTCxrREFBa0Q7UUFDbEQscUJBQXFCO1FBQ3JCLDRFQUE0RTtRQUM1RSwyQ0FBMkM7UUFDM0MsS0FBSztRQUNMLDBDQUEwQztRQUMxQyxxQkFBcUI7UUFDckIsNEVBQTRFO1FBQzVFLDJDQUEyQztRQUMzQyxLQUFLO1FBQ0wsOENBQThDO1FBQzlDLHFCQUFxQjtRQUNyQiw0RUFBNEU7UUFDNUUsMkNBQTJDO1FBQzNDLEtBQUs7UUFDTCw4Q0FBOEM7UUFDOUMscUJBQXFCO1FBQ3JCLDRFQUE0RTtRQUM1RSwyQ0FBMkM7UUFDM0MsS0FBSztRQUNMLHdCQUF3QjtRQUV4QixvQkFBb0I7UUFDcEIsd0VBQXdFO1FBQ3hFLGtDQUFrQztJQUN0QyxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgbWF0aGpheCB9IGZyb20gXCJtYXRoamF4LWZ1bGwvanMvbWF0aGpheFwiO1xuaW1wb3J0IHsgVGVYIH0gZnJvbSBcIm1hdGhqYXgtZnVsbC9qcy9pbnB1dC90ZXhcIjtcbmltcG9ydCB7IFNWRyB9IGZyb20gXCJtYXRoamF4LWZ1bGwvanMvb3V0cHV0L3N2Z1wiO1xuaW1wb3J0IHsgQ0hUTUwgfSBmcm9tIFwibWF0aGpheC1mdWxsL2pzL291dHB1dC9jaHRtbFwiO1xuaW1wb3J0IHsgQWxsUGFja2FnZXMgfSBmcm9tIFwibWF0aGpheC1mdWxsL2pzL2lucHV0L3RleC9BbGxQYWNrYWdlc1wiO1xuaW1wb3J0IHsgbGl0ZUFkYXB0b3IgfSBmcm9tIFwibWF0aGpheC1mdWxsL2pzL2FkYXB0b3JzL2xpdGVBZGFwdG9yXCI7XG5pbXBvcnQgeyBSZWdpc3RlckhUTUxIYW5kbGVyIH0gZnJvbSBcIm1hdGhqYXgtZnVsbC9qcy9oYW5kbGVycy9odG1sXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXJrZG93bk1hdGhKYXh7XG5cbiAgICBvcHRpb25zOmFueVxuICAgIGFkYXB0b3I6YW55XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86YW55KXtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5hZGFwdG9yID0gbGl0ZUFkYXB0b3IoKTtcbiAgICAgICAgUmVnaXN0ZXJIVE1MSGFuZGxlcih0aGlzLmFkYXB0b3IpO1xuICAgIH1cbiAgICB0ZXh0X3RvX21hdGhqYXgobWF0aDphbnksb3B0aW9ucz86YW55KTphbnl7XG4gICAgICAgIGlmKCFtYXRoPy5sZW5ndGgpIHJldHVybiBcIlwiXG4gICAgICAgIGlmKCFtYXRoPy5yZXBsYWNlKSByZXR1cm4gXCJcIlxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICAgICAgbGV0IG91dHB1dDphbnkgPSBuZXcgU1ZHKHtmb250Q2FjaGU6J2xvY2FsJ30pO1xuICAgICAgICBpZihvcHRpb25zPy5vdXRwdXQ9PVwiY2h0bWxcIil7XG4gICAgICAgIG91dHB1dCA9IG5ldyBDSFRNTCgpXG4gICAgICAgIH1cbiAgICAgICAgLy8g6K6+572u6L6T5YWl6L6T5Ye65Y+C5pWwXG4gICAgICAgIGNvbnN0IG1hdGhqYXhfZG9jdW1lbnQ6YW55ID0gbWF0aGpheC5kb2N1bWVudCgnJyx7XG4gICAgICAgIHNraXBIdG1sVGFnczpbXG4gICAgICAgICAgICAnc2NyaXB0JyxcIm5vc2NyaXB0XCIsJ3N0eWxlJyxcInRleHRhcmVhXCIsXCJwcmVcIixcImNvZGVcIixcImFubm90YXRpb25cIixcImFubm90YXRpb24teG1sXCJcbiAgICAgICAgXSxcbiAgICAgICAgSW5wdXRKYXg6bmV3IFRlWCh7XG4gICAgICAgICAgICAvLyBkaXNwbGF5TWF0aDogW1snXFwkXFwkJywgJ1xcJFxcJCddLCBbJ1xcXFxcXFsnLCAnXFxcXFxcXSddXSxcbiAgICAgICAgICAgIC8vIGlubGluZU1hdGg6IFtbJ1xcJCcsICdcXCQnXSxbJ1xcXFxcXCgnLCAnXFxcXFxcKSddXSxcbiAgICAgICAgICAgIHByb2Nlc3NFc2NhcGVzOiB0cnVlLFxuICAgICAgICAgICAgcGFja2FnZXM6QWxsUGFja2FnZXMsXG4gICAgICAgIH0pLFxuICAgICAgICBPdXRwdXRKYXg6b3V0cHV0XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG1hdGhqYXhfb3B0aW9ucyA9IHtcbiAgICAgICAgZW06MTYsXG4gICAgICAgIGV4OjgsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOjEyODBcbiAgICAgICAgfVxuICAgIFxuICAgICAgICAvLyBQcmVwcm9jZXNzIHRoZSBpbnB1dCB0byBoYW5kbGUgaW5saW5lIGFuZCBibG9jayBtYXRoIHNlcGFyYXRlbHlcbiAgICAgICAgbGV0IHJlZ3hMaXN0ID0gW1xuICAgICAgICAgICAgL1xcJFxcJFxcICguKz8pXFwgXFwkXFwkL2csL1xcJFxcJCguKz8pXFwkXFwkL2csL1xcJFxcJFxcbiguKz8pXFxuXFwkXFwkL2csXG4gICAgICAgICAgICAvXFwkKC4rPylcXCQvZywvXFxcXFxcKCguKz8pXFxcXFxcKS9nLC9cXFxcXFxbKC4rPylcXFxcXFxdL2dcbiAgICAgICAgXVxuICAgICAgICByZWd4TGlzdC5mb3JFYWNoKHJlZ3g9PntcbiAgICAgICAgICAgIG1hdGggPSBtYXRoXG4gICAgICAgICAgICAucmVwbGFjZShyZWd4LCAobWF0Y2gsIHAxKSA9PiB7XG4gICAgICAgICAgICAvLyBJbmxpbmUgbWF0aFxuICAgICAgICAgICAgbGV0IG5vZGUgPSBtYXRoamF4X2RvY3VtZW50LmNvbnZlcnQoYCR7cDF9YCwgbWF0aGpheF9vcHRpb25zKSBhcyBhbnk7XG4gICAgICAgICAgICBsZXQgbm9kZUh0bWwgPSBgPHNwYW4gY2xhc3M9XCJtYXRoamF4IHJhd1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweDtcIj4ke3RoaXMuYWRhcHRvci5pbm5lckhUTUwobm9kZSl9PC9zcGFuPmBcbiAgICAgICAgICAgIHJldHVybiBub2RlSHRtbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiAgbWF0aFxuICAgICAgICAvLyBtYXRoXG4gICAgICAgIC8vIC5yZXBsYWNlKC9cXCRcXCRcXCAoLis/KVxcIFxcJFxcJC9nLCAobWF0Y2gsIHAxKSA9PiB7XG4gICAgICAgIC8vIC8vIElubGluZSBtYXRoXG4gICAgICAgIC8vIGxldCBub2RlID0gbWF0aGpheF9kb2N1bWVudC5jb252ZXJ0KGAke3AxfWAsIG1hdGhqYXhfb3B0aW9ucykgYXMgYW55O1xuICAgICAgICAvLyByZXR1cm4gdGhpcy5hZGFwdG9yLmlubmVySFRNTChub2RlKTtcbiAgICAgICAgLy8gfSlcbiAgICAgICAgLy8gLnJlcGxhY2UoL1xcJFxcJCguKz8pXFwkXFwkL2csIChtYXRjaCwgcDEpID0+IHtcbiAgICAgICAgLy8gICAgIC8vIElubGluZSBtYXRoXG4gICAgICAgIC8vICAgICBsZXQgbm9kZSA9IG1hdGhqYXhfZG9jdW1lbnQuY29udmVydChgJHtwMX1gLCBtYXRoamF4X29wdGlvbnMpIGFzIGFueTtcbiAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLmFkYXB0b3IuaW5uZXJIVE1MKG5vZGUpO1xuICAgICAgICAvLyB9KVxuICAgICAgICAvLyAucmVwbGFjZSgvXFwkXFwkXFxuKC4rPylcXG5cXCRcXCQvZywgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAvLyAgICAgLy8gSW5saW5lIG1hdGhcbiAgICAgICAgLy8gICAgIGxldCBub2RlID0gbWF0aGpheF9kb2N1bWVudC5jb252ZXJ0KGAke3AxfWAsIG1hdGhqYXhfb3B0aW9ucykgYXMgYW55O1xuICAgICAgICAvLyAgICAgcmV0dXJuIHRoaXMuYWRhcHRvci5pbm5lckhUTUwobm9kZSk7XG4gICAgICAgIC8vIH0pXG4gICAgICAgIC8vIC5yZXBsYWNlKC9cXCQoLis/KVxcJC9nLCAobWF0Y2gsIHAxKSA9PiB7XG4gICAgICAgIC8vICAgICAvLyBJbmxpbmUgbWF0aFxuICAgICAgICAvLyAgICAgbGV0IG5vZGUgPSBtYXRoamF4X2RvY3VtZW50LmNvbnZlcnQoYCR7cDF9YCwgbWF0aGpheF9vcHRpb25zKSBhcyBhbnk7XG4gICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5hZGFwdG9yLmlubmVySFRNTChub2RlKTtcbiAgICAgICAgLy8gfSlcbiAgICAgICAgLy8gLnJlcGxhY2UoL1xcXFxcXCgoLis/KVxcXFxcXCkvZywgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAvLyAgICAgLy8gSW5saW5lIG1hdGhcbiAgICAgICAgLy8gICAgIGxldCBub2RlID0gbWF0aGpheF9kb2N1bWVudC5jb252ZXJ0KGAke3AxfWAsIG1hdGhqYXhfb3B0aW9ucykgYXMgYW55O1xuICAgICAgICAvLyAgICAgcmV0dXJuIHRoaXMuYWRhcHRvci5pbm5lckhUTUwobm9kZSk7XG4gICAgICAgIC8vIH0pXG4gICAgICAgIC8vIC5yZXBsYWNlKC9cXFxcXFxbKC4rPylcXFxcXFxdL2csIChtYXRjaCwgcDEpID0+IHtcbiAgICAgICAgLy8gICAgIC8vIElubGluZSBtYXRoXG4gICAgICAgIC8vICAgICBsZXQgbm9kZSA9IG1hdGhqYXhfZG9jdW1lbnQuY29udmVydChgJHtwMX1gLCBtYXRoamF4X29wdGlvbnMpIGFzIGFueTtcbiAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLmFkYXB0b3IuaW5uZXJIVE1MKG5vZGUpO1xuICAgICAgICAvLyB9KVxuICAgICAgICAvLyByZXR1cm4gcHJvY2Vzc2VkTWF0aDtcbiAgICAgICAgXG4gICAgICAgIC8vIOWGhee9rlRleOWGheWuueetm+mAiSjkuI3lpoLmraPliJnlh4bnoa4pXG4gICAgICAgIC8vIGxldCBub2RlOmFueSA9IG1hdGhqYXhfZG9jdW1lbnQuY29udmVydChtYXRoLG1hdGhqYXhfb3B0aW9ucykgYXMgYW55O1xuICAgICAgICAvLyByZXR1cm4gYWRhcHRvci5pbm5lckhUTUwobm9kZSk7XG4gICAgfVxuICBcbn0iXX0=
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
export * from "./service-fmai/fmai.service";
|
|
2
|
+
export * from "./service-fmai/service-imagine";
|
|
3
|
+
export * from "./service-fmai/service-chat";
|
|
4
|
+
export * from "./comp-markdown-preview/plugins/md-mathjax/index";
|
|
5
|
+
export * from "./comp-markdown-preview/markdown-parse";
|
|
6
|
+
export * from "./comp-markdown-preview/markdown-preview.module";
|
|
7
|
+
export * from "./comp-markdown-preview/markdown-preview.component";
|
|
8
|
+
export * from "./comp-markdown-preview/clipboard.service";
|
|
9
|
+
export * from "./voice";
|
|
10
|
+
export * from "./avatar";
|
|
11
|
+
export * from "./agent";
|
|
12
|
+
export * from "./chat";
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsNkJBQTZCLENBQUE7QUFDM0MsY0FBYyxrREFBa0QsQ0FBQTtBQUNoRSxjQUFjLHdDQUF3QyxDQUFBO0FBQ3RELGNBQWMsaURBQWlELENBQUE7QUFDL0QsY0FBYyxvREFBb0QsQ0FBQTtBQUNsRSxjQUFjLDJDQUEyQyxDQUFBO0FBQ3pELGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsVUFBVSxDQUFBO0FBQ3hCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vc2VydmljZS1mbWFpL2ZtYWkuc2VydmljZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9zZXJ2aWNlLWZtYWkvc2VydmljZS1pbWFnaW5lXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXRcIlxuZXhwb3J0ICogZnJvbSBcIi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L3BsdWdpbnMvbWQtbWF0aGpheC9pbmRleFwiXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wLW1hcmtkb3duLXByZXZpZXcvbWFya2Rvd24tcGFyc2VcIlxuZXhwb3J0ICogZnJvbSBcIi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L21hcmtkb3duLXByZXZpZXcubW9kdWxlXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXAtbWFya2Rvd24tcHJldmlldy9tYXJrZG93bi1wcmV2aWV3LmNvbXBvbmVudFwiIFxuZXhwb3J0ICogZnJvbSBcIi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L2NsaXBib2FyZC5zZXJ2aWNlXCIgXG5leHBvcnQgKiBmcm9tIFwiLi92b2ljZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9hdmF0YXJcIlxuZXhwb3J0ICogZnJvbSBcIi4vYWdlbnRcIlxuZXhwb3J0ICogZnJvbSBcIi4vY2hhdFwiIl19
|