books-cli
Version:
由于本人经常性的写一些文档,然后现有的很多插件版本各方面存在问题,甚至还有一些作者已经放弃维护了,所以决定自己写一个综合性的插件用来满足个人需求。
81 lines (64 loc) • 3.07 kB
JavaScript
/**
* 隐藏答案框
*/
const cheerio = require('cheerio');
var id = 0;
function hooks_page(page) {
var content = page.content,
match = content.match(/<!--\s*sec[\s\S]+?ces\s*-->[\s\S]+?<!--\s*endsec\s*-->/g);
if (match) {
var error = [];
match.forEach(function (item, i) {
var header = item.match(/<!--\s*sec[\s\S]+?ces\s*-->/)[0],
body = item.replace(/<!--\s*sec[\s\S]+?ces\s*-->/, '').replace(/<!--\s*endsec\s*-->/, '');
if (/<!--\s*sec/.test(body)) //contain nested sections
error.push([header, '嵌套的部分不受这个插件的支持。']);
if (!header.match(/data-title\s*=\s*"[^"]+?"\s/)) //contain valid title
error.push([header, '没有有效的标题。']);
if (header.match(/data-show\s*=\s*.+?\s/))
if (!item.match(/data-show\s*=\s*true\s/) && !item.match(/data-show\s*=\s*false\s/))
error.push([header, '属性 "data-show" 被设置为无效的值。']);
content = content.replace(/<!--\s*sec\s/g, '<sec ')
.replace(/\sces\s*-->/g, '>')
.replace(/<!--\s*endsec\s*-->/g, '</sec>');
});
if (error.length > 0) {
error.forEach(function (item) {
console.log('Error: ' + item[1] + ' 请修改以下部分的语法:');
console.log(item[0] + '\n');
});
page.content = '<p class="alert alert-danger">TO AUTHOR: 在这个页面中存在一些语法错误,请检查构建日志以获得详细信息。</p>';
} else {
var $ = cheerio.load(content);
$('sec').each(function () {
var html = $(this).html();
$(this).data('title').replace(/</g, '<').replace(/>/g, '>');
id++;
$(this).html(
'<div class="panel panel-default">' +
'<div class="panel-heading">' +
'<b>' + $(this).data('title') +
'<a class="pull-right section atTitle btn btn-default" target="sectionx' + id + '">' +
'<span class="fa section_span" />' + '</a>' +
'</b>' +
'</div>' +
'<div class="panel-collapse" id="sectionx' + id + '">' +
'<div class="panel-body">' + html + '</div>' +
'</div>' +
'</div>');
if ($(this).data('show') === true) {
$('.panel-collapse').addClass('in');
$(".section_span").addClass('fa-angle-up');
} else {
$(".panel-collapse").addClass('collapse');
$(".section_span").addClass('fa-angle-down');
}
});
page.content = $("body").html();
}
}
return page;
}
module.exports = {
hooks_page
};