first commit
This commit is contained in:
@@ -0,0 +1,277 @@
|
||||
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 = "<span style='display: inline-block;width:" + (spaceWidth * treeNode.level) + "px'></span>";
|
||||
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 = $('<pre></pre>').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);
|
||||
});
|
||||
@@ -0,0 +1,10 @@
|
||||
$.ajaxSetup({
|
||||
xhrFields: {
|
||||
withCredentials: true
|
||||
},
|
||||
});
|
||||
$(function(){
|
||||
layui.element.init();
|
||||
layui.table.init();
|
||||
layui.form.render();
|
||||
});
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user