UNPKG

qt-public-ui

Version:

新设计规范下业务组件库

76 lines (73 loc) 2.87 kB
/* 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; });