qt-public-ui
Version:
新设计规范下业务组件库
76 lines (73 loc) • 2.87 kB
JavaScript
/* eslint-disable no-param-reassign */
var addCodeCopy = function addCodeCopy(container) {
var pres = container.querySelectorAll('pre');
if (!pres || !pres.length) return container;
Array.from(pres).forEach(function (preItem) {
var codeLines = [];
var codeElems = preItem.querySelectorAll('code');
if (!codeElems || !codeElems.length) {
codeElems = preItem.querySelectorAll('li');
}
if (codeElems && codeElems.length) {
Array.from(codeElems).forEach(function (codeEle) {
codeLines.push(codeEle.innerText);
});
}
/* 增加代码区块的header部分 */
var copyPart = "<div class=\"u-code-header\">\n <div class=\"u-code-header-name\">\u4EE3\u7801:</div>\n <div class=\"u-code-header-more\">\n <span class=\"u-code-btn-copy\">\u590D\u5236\u4EE3\u7801\u5230\u526A\u5207\u677F</span>\n </div>\n </div>".replace(/>\s+</g, '><');
preItem.innerHTML = copyPart + preItem.innerHTML;
});
return container;
};
var isEndType = function isEndType(entryNode, currNode) {
var entryType = entryNode.nodeName;
var currType = currNode.nodeName;
switch (entryType) {
case 'H1':
return ['H1'].includes(currType);
case 'H2':
return ['H1', 'H2'].includes(currType);
case 'H3':
return ['H1', 'H2', 'H3'].includes(currType);
case 'H4':
return ['H1', 'H2', 'H3', 'H4'].includes(currType);
case 'H5':
return ['H1', 'H2', 'H3', 'H4', 'H5'].includes(currType);
case 'H6':
return ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(currType);
default:
return false;
}
};
var extractSections = function extractSections(contentDOM, sections) {
if (sections === void 0) {
sections = [];
}
if (sections.length <= 0) return contentDOM;
var sectionsDOM = document.createElement('div');
sections.forEach(function (id) {
var titleDOM = contentDOM.querySelector(id);
if (!titleDOM) return;
var currDOM = titleDOM;
sectionsDOM.appendChild(currDOM.cloneNode(true));
// eslint-disable-next-line no-constant-condition
while (1) {
currDOM = currDOM.nextSibling;
if (!currDOM) break;
if (currDOM.nodeType !== 1) continue;
if (isEndType(titleDOM, currDOM)) break;
sectionsDOM.appendChild(currDOM.cloneNode(true));
}
});
return sectionsDOM;
};
/* formatContent */
export default (function (contentHtml, sections, pathname) {
var contentDOM = document.createElement('div');
contentDOM.innerHTML = contentHtml.replace(/href="~~([0-9]+)~~"/g, function (_, id) {
return "href=\"" + pathname.replace(/[0-9]+$/, id) + "\""; // 将文档中<a href="~~66891~~">测试连接</a>这样的链接替换为真正的文档链接
});
var sectionsDOM = extractSections(contentDOM, sections);
var highlightDOM = addCodeCopy(sectionsDOM);
return highlightDOM.innerHTML;
});