@yltrcc/vditor 0.0.9 → 0.1.1
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/dist/index.css +39 -2
- package/dist/index.js +98 -16
- package/dist/index.min.js +1 -1
- package/dist/method.js +3 -3
- package/dist/method.min.js +1 -1
- package/dist/ts/wysiwyg/showCode.d.ts +12 -0
- package/package.json +1 -1
- package/src/assets/less/_wysiwyg.less +48 -0
- package/src/ts/util/processCode.ts +5 -0
- package/src/ts/wysiwyg/index.ts +12 -1
- package/src/ts/wysiwyg/input.ts +20 -1
- package/src/ts/wysiwyg/processKeydown.ts +2 -3
- package/src/ts/wysiwyg/showCode.ts +98 -32
package/dist/index.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vditor v0.
|
|
2
|
+
* Vditor v0.1.1 - A markdown editor written in TypeScript.
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
*
|
|
26
26
|
*/
|
|
27
27
|
/*!
|
|
28
|
-
* Vditor v0.
|
|
28
|
+
* Vditor v0.1.1 - A markdown editor written in TypeScript.
|
|
29
29
|
*
|
|
30
30
|
* MIT License
|
|
31
31
|
*
|
|
@@ -1396,8 +1396,12 @@
|
|
|
1396
1396
|
padding-left: 0 !important;
|
|
1397
1397
|
padding-right: 0 !important;
|
|
1398
1398
|
}
|
|
1399
|
+
.vditor-wysiwyg__block {
|
|
1400
|
+
position: relative;
|
|
1401
|
+
}
|
|
1399
1402
|
.vditor-wysiwyg__block pre:first-child {
|
|
1400
1403
|
margin-bottom: -1em;
|
|
1404
|
+
display: none;
|
|
1401
1405
|
}
|
|
1402
1406
|
.vditor-wysiwyg__block pre:first-child code {
|
|
1403
1407
|
color: var(--textarea-text-color);
|
|
@@ -1407,10 +1411,43 @@
|
|
|
1407
1411
|
.vditor-wysiwyg__block pre:last-child {
|
|
1408
1412
|
margin-bottom: 1em;
|
|
1409
1413
|
}
|
|
1414
|
+
.vditor-wysiwyg__block--editing pre:first-child {
|
|
1415
|
+
display: block;
|
|
1416
|
+
}
|
|
1417
|
+
.vditor-wysiwyg__block--editing .vditor-wysiwyg__preview {
|
|
1418
|
+
display: none;
|
|
1419
|
+
}
|
|
1410
1420
|
.vditor-wysiwyg__preview {
|
|
1411
1421
|
cursor: pointer;
|
|
1412
1422
|
white-space: initial;
|
|
1413
1423
|
min-height: 27px;
|
|
1424
|
+
display: block;
|
|
1425
|
+
}
|
|
1426
|
+
.vditor-wysiwyg__preview pre {
|
|
1427
|
+
margin: 0;
|
|
1428
|
+
padding: 1em;
|
|
1429
|
+
background-color: var(--code-background-color);
|
|
1430
|
+
border-radius: 4px;
|
|
1431
|
+
overflow-x: auto;
|
|
1432
|
+
}
|
|
1433
|
+
.vditor-wysiwyg__preview pre code {
|
|
1434
|
+
font-family: var(--code-font-family);
|
|
1435
|
+
font-size: var(--code-font-size);
|
|
1436
|
+
line-height: var(--code-line-height);
|
|
1437
|
+
}
|
|
1438
|
+
.vditor-wysiwyg__preview::before {
|
|
1439
|
+
content: attr(data-language);
|
|
1440
|
+
position: absolute;
|
|
1441
|
+
top: 0;
|
|
1442
|
+
right: 0;
|
|
1443
|
+
padding: 2px 8px;
|
|
1444
|
+
font-size: 12px;
|
|
1445
|
+
color: var(--second-color);
|
|
1446
|
+
background-color: var(--panel-background-color);
|
|
1447
|
+
border-radius: 0 4px 0 4px;
|
|
1448
|
+
}
|
|
1449
|
+
.vditor-wysiwyg__preview:hover {
|
|
1450
|
+
box-shadow: 0 0 0 2px var(--blurColor);
|
|
1414
1451
|
}
|
|
1415
1452
|
.vditor-wysiwyg > .vditor-reset > h1:before,
|
|
1416
1453
|
.vditor-wysiwyg > .vditor-reset > h2:before,
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vditor v0.
|
|
2
|
+
* Vditor v0.1.1 - A markdown editor written in TypeScript.
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*
|
|
@@ -1267,7 +1267,7 @@ var looseJsonParse = function (text) {
|
|
|
1267
1267
|
/* harmony export */ Y: () => (/* binding */ Constants),
|
|
1268
1268
|
/* harmony export */ g: () => (/* binding */ _VDITOR_VERSION)
|
|
1269
1269
|
/* harmony export */ });
|
|
1270
|
-
var _VDITOR_VERSION = "0.
|
|
1270
|
+
var _VDITOR_VERSION = "0.1.1";
|
|
1271
1271
|
|
|
1272
1272
|
var Constants = /** @class */ (function () {
|
|
1273
1273
|
function Constants() {
|
|
@@ -1315,7 +1315,7 @@ var Constants = /** @class */ (function () {
|
|
|
1315
1315
|
// 别名
|
|
1316
1316
|
"js", "ts", "html", "toml", "c#", "bat"
|
|
1317
1317
|
];
|
|
1318
|
-
Constants.CDN = "https://unpkg.com/@yltrcc/vditor@".concat("0.
|
|
1318
|
+
Constants.CDN = "https://unpkg.com/@yltrcc/vditor@".concat("0.1.1");
|
|
1319
1319
|
Constants.MARKDOWN_OPTIONS = {
|
|
1320
1320
|
autoSpace: false,
|
|
1321
1321
|
gfmAutoLink: true,
|
|
@@ -5425,6 +5425,10 @@ var processCodeRender = function (previewPanel, vditor) {
|
|
|
5425
5425
|
return;
|
|
5426
5426
|
}
|
|
5427
5427
|
var language = previewPanel.firstElementChild.className.replace("language-", "");
|
|
5428
|
+
// 设置语言属性用于显示语言标签
|
|
5429
|
+
if (language && language !== "hljs") {
|
|
5430
|
+
previewPanel.setAttribute("data-language", language);
|
|
5431
|
+
}
|
|
5428
5432
|
if (language === "abc") {
|
|
5429
5433
|
(0,abcRender/* abcRender */.$)(previewPanel, vditor.options.cdn);
|
|
5430
5434
|
}
|
|
@@ -6996,25 +7000,39 @@ var removeHeading = function (vditor) {
|
|
|
6996
7000
|
;// ./src/ts/wysiwyg/showCode.ts
|
|
6997
7001
|
|
|
6998
7002
|
|
|
7003
|
+
|
|
7004
|
+
/**
|
|
7005
|
+
* 显示代码编辑区域,隐藏预览区域
|
|
7006
|
+
* @param previewElement - 预览区域元素
|
|
7007
|
+
* @param vditor - Vditor 实例
|
|
7008
|
+
* @param first - 是否将光标设置在开头
|
|
7009
|
+
*/
|
|
6999
7010
|
var showCode = function (previewElement, vditor, first) {
|
|
7011
|
+
var _a;
|
|
7000
7012
|
if (first === void 0) { first = true; }
|
|
7001
|
-
var
|
|
7002
|
-
var
|
|
7003
|
-
|
|
7004
|
-
|
|
7013
|
+
var blockElement = previewElement.parentElement;
|
|
7014
|
+
var codeElement = previewElement.previousElementSibling;
|
|
7015
|
+
// 添加编辑状态类,通过 CSS 控制显示/隐藏
|
|
7016
|
+
blockElement.classList.add("vditor-wysiwyg__block--editing");
|
|
7017
|
+
// 移除内联样式,让 CSS 类控制显示
|
|
7018
|
+
codeElement.style.removeProperty("display");
|
|
7019
|
+
previewElement.style.removeProperty("display");
|
|
7020
|
+
var range = codeElement.ownerDocument.createRange();
|
|
7021
|
+
if (codeElement.tagName === "CODE") {
|
|
7022
|
+
// 行内代码
|
|
7005
7023
|
if (first) {
|
|
7006
|
-
range.setStart(
|
|
7024
|
+
range.setStart(codeElement.firstChild, 1);
|
|
7007
7025
|
}
|
|
7008
7026
|
else {
|
|
7009
|
-
range.selectNodeContents(
|
|
7027
|
+
range.selectNodeContents(codeElement);
|
|
7010
7028
|
}
|
|
7011
7029
|
}
|
|
7012
7030
|
else {
|
|
7013
|
-
|
|
7014
|
-
if (!
|
|
7015
|
-
|
|
7031
|
+
// 代码块
|
|
7032
|
+
if (!codeElement.firstChild.firstChild) {
|
|
7033
|
+
codeElement.firstChild.appendChild(document.createTextNode(""));
|
|
7016
7034
|
}
|
|
7017
|
-
range.selectNodeContents(
|
|
7035
|
+
range.selectNodeContents(codeElement.firstChild);
|
|
7018
7036
|
}
|
|
7019
7037
|
if (first) {
|
|
7020
7038
|
range.collapse(true);
|
|
@@ -7023,11 +7041,49 @@ var showCode = function (previewElement, vditor, first) {
|
|
|
7023
7041
|
range.collapse(false);
|
|
7024
7042
|
}
|
|
7025
7043
|
(0,selection/* setSelectionFocus */.jl)(range);
|
|
7026
|
-
if (previewElement.firstElementChild.classList.contains("language-mindmap")) {
|
|
7044
|
+
if ((_a = previewElement.firstElementChild) === null || _a === void 0 ? void 0 : _a.classList.contains("language-mindmap")) {
|
|
7027
7045
|
return;
|
|
7028
7046
|
}
|
|
7029
7047
|
scrollCenter(vditor);
|
|
7030
7048
|
};
|
|
7049
|
+
/**
|
|
7050
|
+
* 隐藏代码编辑区域,显示预览区域
|
|
7051
|
+
* @param blockElement - 代码块容器元素
|
|
7052
|
+
* @param vditor - Vditor 实例
|
|
7053
|
+
*/
|
|
7054
|
+
var hideCode = function (blockElement, vditor) {
|
|
7055
|
+
// 移除编辑状态类,通过 CSS 控制显示/隐藏
|
|
7056
|
+
blockElement.classList.remove("vditor-wysiwyg__block--editing");
|
|
7057
|
+
var codeElement = blockElement.querySelector("pre:first-child");
|
|
7058
|
+
var previewElement = blockElement.querySelector(".vditor-wysiwyg__preview");
|
|
7059
|
+
// 移除内联样式,让 CSS 类控制显示
|
|
7060
|
+
if (codeElement) {
|
|
7061
|
+
codeElement.style.removeProperty("display");
|
|
7062
|
+
}
|
|
7063
|
+
if (previewElement) {
|
|
7064
|
+
previewElement.style.removeProperty("display");
|
|
7065
|
+
// 从编辑区域获取代码内容
|
|
7066
|
+
// 编辑区域结构: <pre><code class="language-xxx">代码内容</code></pre>
|
|
7067
|
+
var editCodeElement = codeElement === null || codeElement === void 0 ? void 0 : codeElement.querySelector("code");
|
|
7068
|
+
var codeText = (editCodeElement === null || editCodeElement === void 0 ? void 0 : editCodeElement.textContent) || "";
|
|
7069
|
+
var language = (editCodeElement === null || editCodeElement === void 0 ? void 0 : editCodeElement.className.replace("language-", "")) || "";
|
|
7070
|
+
// 预览区域结构: <div class="vditor-wysiwyg__preview"><pre><code class="language-xxx">代码内容</code></pre></div>
|
|
7071
|
+
// 找到预览区域内部的 code 元素
|
|
7072
|
+
var previewCodeElement = previewElement.querySelector("pre > code");
|
|
7073
|
+
if (previewCodeElement) {
|
|
7074
|
+
// 更新预览区域的代码内容
|
|
7075
|
+
previewCodeElement.textContent = codeText;
|
|
7076
|
+
// 更新语言类名
|
|
7077
|
+
if (language && language !== "hljs") {
|
|
7078
|
+
previewCodeElement.className = "language-".concat(language);
|
|
7079
|
+
previewElement.setAttribute("data-language", language);
|
|
7080
|
+
}
|
|
7081
|
+
}
|
|
7082
|
+
// 重新渲染预览
|
|
7083
|
+
previewElement.setAttribute("data-render", "2");
|
|
7084
|
+
processCodeRender(previewElement, vditor);
|
|
7085
|
+
}
|
|
7086
|
+
};
|
|
7031
7087
|
|
|
7032
7088
|
;// ./src/ts/wysiwyg/processKeydown.ts
|
|
7033
7089
|
|
|
@@ -7086,8 +7142,7 @@ var wysiwyg_processKeydown_processKeydown = function (vditor, event) {
|
|
|
7086
7142
|
// esc: 退出编辑,仅展示渲染
|
|
7087
7143
|
if (event.key === "Escape" && codeRenderElement.children.length === 2) {
|
|
7088
7144
|
vditor.wysiwyg.popover.style.display = "none";
|
|
7089
|
-
codeRenderElement
|
|
7090
|
-
vditor.wysiwyg.element.blur();
|
|
7145
|
+
hideCode(codeRenderElement, vditor);
|
|
7091
7146
|
event.preventDefault();
|
|
7092
7147
|
return true;
|
|
7093
7148
|
}
|
|
@@ -9827,6 +9882,24 @@ var uploadFiles = function (vditor, files, element) { return __awaiter(void 0, v
|
|
|
9827
9882
|
|
|
9828
9883
|
var input_input = function (vditor, range, event) {
|
|
9829
9884
|
var _a;
|
|
9885
|
+
// 检查是否在代码块编辑模式中
|
|
9886
|
+
var editingBlock = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, "vditor-wysiwyg__block--editing");
|
|
9887
|
+
if (editingBlock) {
|
|
9888
|
+
// 在代码块编辑模式中,只更新预览区域,不重新渲染整个代码块
|
|
9889
|
+
var previewElement = editingBlock.querySelector(".vditor-wysiwyg__preview");
|
|
9890
|
+
if (previewElement) {
|
|
9891
|
+
// 标记预览区域需要重新渲染
|
|
9892
|
+
previewElement.setAttribute("data-render", "2");
|
|
9893
|
+
}
|
|
9894
|
+
// 直接调用 afterRenderEvent,跳过 HTML 重新渲染
|
|
9895
|
+
renderToc(vditor);
|
|
9896
|
+
afterRenderEvent(vditor, {
|
|
9897
|
+
enableAddUndoStack: true,
|
|
9898
|
+
enableHint: true,
|
|
9899
|
+
enableInput: true,
|
|
9900
|
+
});
|
|
9901
|
+
return;
|
|
9902
|
+
}
|
|
9830
9903
|
var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);
|
|
9831
9904
|
if (!blockElement) {
|
|
9832
9905
|
// 使用顶级块元素,应使用 innerHTML
|
|
@@ -15626,6 +15699,15 @@ var WYSIWYG = /** @class */ (function () {
|
|
|
15626
15699
|
}
|
|
15627
15700
|
}
|
|
15628
15701
|
highlightToolbarWYSIWYG(vditor);
|
|
15702
|
+
// 处理代码块的编辑/预览切换
|
|
15703
|
+
var clickedBlockElement = (0,hasClosest/* hasClosestByClassName */.KJ)(event.target, "vditor-wysiwyg__block");
|
|
15704
|
+
// 隐藏所有其他代码块的编辑区域
|
|
15705
|
+
vditor.wysiwyg.element.querySelectorAll(".vditor-wysiwyg__block--editing").forEach(function (block) {
|
|
15706
|
+
// 如果点击的不是当前正在编辑的代码块,则隐藏编辑区域
|
|
15707
|
+
if (!clickedBlockElement || !clickedBlockElement.isEqualNode(block)) {
|
|
15708
|
+
hideCode(block, vditor);
|
|
15709
|
+
}
|
|
15710
|
+
});
|
|
15629
15711
|
// 点击后光标落于预览区,需展开代码块
|
|
15630
15712
|
var previewElement = (0,hasClosest/* hasClosestByClassName */.KJ)(event.target, "vditor-wysiwyg__preview");
|
|
15631
15713
|
if (!previewElement) {
|