var curMenu = null, menuTree = null; var ajaxSetting = { edit: { drag: { autoExpandTrigger: true, prev: true, inner: true, next: true }, enable: true, showRemoveBtn: false, showRenameBtn: false }, view: { showLine: false, showIcon: false, selectedMulti: false, dblClickExpand: false, addDiyDom: addDiyDom }, data: { key: { name: 'title', children: null, }, simpleData: { enable: true, idKey: "id", pIdKey: 'parent_id', rootPId: 0, } }, callback: { onClick: onClick, }, }; var loadingHandler; function switchNode(event, treeId, treeNode) { if ('pushState' in history) { history.pushState('', '', treeNode.url); getChapter(treeNode.url); } else { location = treeNode.url; } menuTree.expandNode(treeNode, true) event.preventDefault() } function getChapter(url) { if (void 0 === url) { return; } loadingHandler = layer.open({ type: 3, icon: 2, shade: 0.1, }); $.ajax({ method: 'GET', url: url, success: function (result) { try { var resultElement = $(result); $('#article-content').html(resultElement.find('#article-content').html()); onContentChange(); var hash = location.hash; if (hash.length > 0) { location.hash = ''; location.hash = hash; } else { // 有时切换文档不在最上面 $('#content_body').scrollTop(0) } } catch (err) { layer.alert('文档加载失败', { icon: 2 }); } }, error: function () { location = url; }, complete: function () { layer.close(loadingHandler); }, }); } function addDiyDom(treeId, treeNode) { var spaceWidth = 5; var switchObj = $("#" + treeNode.tId + "_switch"), icoObj = $("#" + treeNode.tId + "_ico"); switchObj.remove(); icoObj.before(switchObj); if (treeNode.level > 1) { var spaceStr = ""; switchObj.before(spaceStr); } } function initTree(data) { for (var i in data) { data[i].target = '_self'; } if (null === menuTree) { var treeObj = $("#treeDirectory"); $.fn.zTree.init(treeObj, ajaxSetting, data); menuTree = $.fn.zTree.getZTreeObj("treeDirectory"); var nodes = menuTree.getNodesByParam('url', location.pathname + location.hash, null); if (nodes.length > 0) { if (nodes.length > 1) { if (menuTree.getSelectedNodes().length > 0) { return; } } menuTree.selectNode(nodes[0]); } else { menuTree.selectNode(menuTree.getNodeByParam('id', currentCatalog.id, null)); } } } function onClick(event, treeId, treeNode) { // 未修改内容,直接切换 switchNode(event, treeId, treeNode); setTimeout(function () { closeMenuLeft(); }, 600); } function parseLeftHeight() { $('#leftbar .layui-tab-content').css('max-height', ($('#leftbar').height() - $('#leftbar .layui-tab-title').height() - $('#leftbar .copyright').height()) + 'px'); } function onContentChange() { $('#content-toc').css('max-height', ($(document).height() / 2) + 'px'); hCatalog('#article-content', '#content-toc'); var content = $('#article-content'); content.find('blockquote').addClass('layui-elem-quote'); content.find('table').addClass('layui-table'); content.find('pre code').each(function (index, item) { var pre = $(item).parent(); var content = $(item).text(); var brush = parseCodeBrush($(item).attr('class')); var newPre = $('
').addClass('brush: ' + brush).addClass('toolbar: false').text(content); pre.replaceWith(newPre); }); SyntaxHighlighter.highlight(); //initSearchDatas(); $('#content_body a').each(function () { var url = $(this).attr('href'); if (void 0 !== url && '#' !== url.substr(0, 1) && 'http' === url.substr(0, 4)) { $(this).attr('target', '_blank'); } }) setTimeout(function () { resizeCode(); }, 1) } function parseCodeBrush(brush) { for (var i in SyntaxHighlighter.brushes) { if (SyntaxHighlighter.brushes[i].aliases.indexOf(brush) > -1) { return brush; } } return 'text'; } function resizeCode() { var guttelines = $('.gutter .line'); var codelines = $('.code .line'); for (var i = 0; i < guttelines.length; i++) { var codeline = codelines.eq(i); var height = codeline.css('height'); guttelines.eq(i).css('height', height) codeline.css('height', height); } } // 基于这里的代码做了修改: https://blog.csdn.net/weixin_57215431/article/details/115676752 function hCatalog(current, target) { var box = document.querySelector(target) if (!box) { return; } box.innerHTML = '' var titleTree = hTree(document.querySelector(current)) hCreatEle(titleTree, box) } function hCreatEle(arr, parent) { if (!arr.length) return var ol = document.createElement('ol') arr.forEach(function (item) { if ('' !== item.node.innerHTML) { var li = document.createElement('li') li.innerHTML = item.node.innerHTML hCreatEle(item.children, li) ol.appendChild(li) } }) parent.appendChild(ol) } function hTree(wrapNode) { var root = { children: [] } var current = root for (var i = 0; i < wrapNode.children.length; ++i) { var item = wrapNode.children[i] if (item.localName.indexOf('h') === 0) { var obj = { node: item, children: [], parent: undefined } while (current !== root && current.node.localName[1] - obj.node.localName[1] !== -1) { current = current.parent } obj.parent = current obj.parent.children.push(obj) current = obj } } return root.children } function initContentToc() { var isDown = false; var beginLeft = 0 var beginTop = 0; var mouseBeginLeft = 0 var mouseBeginTop = 0; $(document).on('mousedown', '.content-toc-title', function (e) { var wrap = $('#content-toc-wrap'); isDown = true; beginLeft = wrap[0].offsetLeft; beginTop = wrap[0].offsetTop; mouseBeginLeft = e.pageX; mouseBeginTop = e.pageY; e.preventDefault(); }); $(document).on('mouseup', function () { isDown = false; }); $(document).on('mousemove', function (e) { if (isDown) { var wrap = $('#content-toc-wrap'); wrap.css('left', (beginLeft + (e.pageX - mouseBeginLeft)) + 'px'); wrap.css('top', (beginTop + (e.pageY - mouseBeginTop)) + 'px'); } }); } $(function () { parseLeftHeight(); $(window).resize(function () { parseLeftHeight(); }); $('body').on('click', '.ztree.showIcon li a span.button.switch', function (e) { return false; }); initContentToc(); SyntaxHighlighter.all(); onContentChange(); }) $(window).load(function () { $(window).resize(resizeCode); });