Skip to content

Commit

Permalink
+ link favicon
Browse files Browse the repository at this point in the history
  • Loading branch information
cloudcome committed Jan 14, 2017
1 parent 25d95d3 commit acb94e2
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 49 deletions.
4 changes: 2 additions & 2 deletions package.json
@@ -1,6 +1,6 @@
{
"name": "blear.classes.safe-markdown",
"version": "1.0.10",
"version": "1.0.11",
"description": "Markdown 解析与【安全】渲染,适用于 Node 端",
"scripts": {
"live": "browser-sync start --config bs-config.js",
Expand Down Expand Up @@ -38,7 +38,7 @@
"url": "https://github.com/blearjs/blear.classes.safe-markdown/issues"
},
"dependencies": {
"blear.classes.markdown": "^1.0.7",
"blear.classes.markdown": "^1.1.3",
"blear.utils.array": "^1.0.12",
"blear.utils.object": "^1.0.11",
"blear.utils.random": "^1.0.2",
Expand Down
40 changes: 29 additions & 11 deletions src/index.js
Expand Up @@ -13,7 +13,7 @@ var url = require('blear.utils.url');
var random = require('blear.utils.random');
var xss = require('xss');


var autoLinkDomainRE = /^(?:[\w]+:)?\/\/([^\/]*)/;
var defaults = object.assign({}, Markdown.defaults, {
/**
* 是否显示 heading 链接
Expand Down Expand Up @@ -61,7 +61,7 @@ var defaults = object.assign({}, Markdown.defaults, {
* 是否解析提及信息
* @type Boolean
*/
mentionable: true,
mention: true,

/**
* 提及的名称正则
Expand Down Expand Up @@ -99,11 +99,17 @@ var defaults = object.assign({}, Markdown.defaults, {
*/
linkTrustedDomains: [],

/**
* 自动链接自动缩短网址(只显示网址域名)
* @type Boolean
*/
linkAutoShort: true,

/**
* 是否输出 link 的 favicon
* @type Boolean
*/
linkFaviconable: true,
linkFavicon: true,

/**
* link favicon 的图标 class
Expand All @@ -123,8 +129,6 @@ var defaults = object.assign({}, Markdown.defaults, {
*/
whiteList: object.assign(true, {}, xss.whiteList)
});


var SafeMarkdown = Markdown.extend({
constructor: function (options) {
var the = this;
Expand Down Expand Up @@ -381,7 +385,7 @@ pro[_paragraph] = function () {
var after = '</p>';
var store = storeGen();

if (options.mentionable) {
if (options.mention) {
// 不处理标签里的属性相关
text = text.replace(reHTML, store.save);
text = text.replace(reMention, function (source, name) {
Expand Down Expand Up @@ -418,30 +422,44 @@ pro[_link] = function () {

var reExcludeDomain = new RegExp('(^' + regExpList.join('|') + '$)');

the.renderer('link', function (href, title, text) {
the.renderer('link', function (href, title, text, auto) {
var blank = false;
var nofollow = false;
var hostname;
var port;
var parseRet;

if (!reHash.test(href) && !reJavascript.test(href)) {
var ret = url.parse(href);
hostname = ret.hostname;
if (href.slice(0, 1) !== '/') {
href = '//' + href;
}

parseRet = url.parse(href);
hostname = parseRet.hostname;
port = parseRet.port;

if (hostname && !reExcludeDomain.test(hostname)) {
nofollow = true;
blank = true;
}
}

if (auto && parseRet && options.linkAutoShort) {
text = hostname + (port ? ':' : '') + port;
}

return ''.concat(
options.linkFavicon && hostname ?
'<img class="' + options.linkFaviconClass + '" width="16" height="16"' +
' src="https://f.ydr.me/' + href + '">' :
'',
'<a',
' href="' + href + '"',
title ? ' title="' + title + '"' : '',
nofollow ? ' rel="nofollow"' : '',
blank ? ' target="blank"' : '',
'>',
options.linkFaviconable && hostname ? '<img class="' + options.linkFaviconClass + '" width="16" height="16" src="https://f.ydr.me/' + href + '">' : '',
text || href,
text,
'</a>'
);
});
Expand Down
2 changes: 1 addition & 1 deletion test/heading1.html
@@ -1,3 +1,3 @@
<style>.mention{background: #f6d734;margin:0 10px;}.toc-index{background: #000;color:#fff;margin-right:20px;}.heading-index{background: #000;color:#fff;margin-right:20px;}</style>

<div class="toc"><ul class="toc-1"><li class="toc-1-1"><a href="#heading-1"><span class="toc-index">1</span><span class="toc-text">1</span></a><ul class="toc-2"><li class="toc-2-1"><a href="#heading-1-1"><span class="toc-index">1.1</span><span class="toc-text">1.1</span></a><ul class="toc-3"><li class="toc-3-1"><a href="#heading-1-1-1"><span class="toc-index">1.1.1</span><span class="toc-text">1.1.1</span></a><ul class="toc-4"><li class="toc-4-1"><a href="#heading-1-1-1-1"><span class="toc-index">1.1.1.1</span><span class="toc-text">1.1.1.1</span></a><ul class="toc-5"><li class="toc-5-1"><a href="#heading-1-1-1-1-1"><span class="toc-index">1.1.1.1.1</span><span class="toc-text">1.1.1.1.1</span></a><ul class="toc-6"><li class="toc-6-1"><a href="#heading-1-1-1-1-1-1"><span class="toc-index">1.1.1.1.1.1</span><span class="toc-text">1.1.1.1.1.1</span></a></li><li class="toc-6-2"><a href="#heading-1-1-1-1-1-2"><span class="toc-index">1.1.1.1.1.2</span><span class="toc-text">1.1.1.1.1.2</span></a></li></ul></li><li class="toc-5-2"><a href="#heading-1-1-1-1-2"><span class="toc-index">1.1.1.1.2</span><span class="toc-text">1.1.1.1.2</span></a></li><li class="toc-5-3"><a href="#heading-1-1-1-1-3"><span class="toc-index">1.1.1.1.3</span><span class="toc-text">1.1.1.1.3</span></a></li></ul></li></ul></li></ul></li><li class="toc-2-2"><a href="#heading-1-2"><span class="toc-index">1.2</span><span class="toc-text">1.2</span></a></li></ul></li><li class="toc-1-2"><a href="#heading-2"><span class="toc-index">2</span><span class="toc-text">2</span></a><ul class="toc-2"><li class="toc-2-1"><a href="#heading-2-3"><span class="toc-index">2.3</span><span class="toc-text">2.1</span></a></li><li class="toc-2-2"><a href="#heading-2-4"><span class="toc-index">2.4</span><span class="toc-text">2.2</span></a></li></ul></li><li class="toc-1-3"><a href="#heading-3"><span class="toc-index">3</span><span class="toc-text">3</span></a></li></ul></div><h1 id="heading-1" class="heading heading_1"><a href="#heading-1" class="heading-link"><span class="heading-index">1</span><span class="heading-text">1</span></a></h1><h2 id="heading-1-1" class="heading heading_2"><a href="#heading-1-1" class="heading-link"><span class="heading-index">1.1</span><span class="heading-text">1.1</span></a></h2><h3 id="heading-1-1-1" class="heading heading_3"><a href="#heading-1-1-1" class="heading-link"><span class="heading-index">1.1.1</span><span class="heading-text">1.1.1</span></a></h3><h4 id="heading-1-1-1-1" class="heading heading_4"><a href="#heading-1-1-1-1" class="heading-link"><span class="heading-index">1.1.1.1</span><span class="heading-text">1.1.1.1</span></a></h4><h5 id="heading-1-1-1-1-1" class="heading heading_5"><a href="#heading-1-1-1-1-1" class="heading-link"><span class="heading-index">1.1.1.1.1</span><span class="heading-text">1.1.1.1.1</span></a></h5><h6 id="heading-1-1-1-1-1-1" class="heading heading_6"><a href="#heading-1-1-1-1-1-1" class="heading-link"><span class="heading-index">1.1.1.1.1.1</span><span class="heading-text">1.1.1.1.1.1</span></a></h6><h6 id="heading-1-1-1-1-1-2" class="heading heading_6"><a href="#heading-1-1-1-1-1-2" class="heading-link"><span class="heading-index">1.1.1.1.1.2</span><span class="heading-text">1.1.1.1.1.2</span></a></h6><h5 id="heading-1-1-1-1-2" class="heading heading_5"><a href="#heading-1-1-1-1-2" class="heading-link"><span class="heading-index">1.1.1.1.2</span><span class="heading-text">1.1.1.1.2</span></a></h5><h5 id="heading-1-1-1-1-3" class="heading heading_5"><a href="#heading-1-1-1-1-3" class="heading-link"><span class="heading-index">1.1.1.1.3</span><span class="heading-text">1.1.1.1.3</span></a></h5><h2 id="heading-1-2" class="heading heading_2"><a href="#heading-1-2" class="heading-link"><span class="heading-index">1.2</span><span class="heading-text">1.2</span></a></h2><h1 id="heading-2" class="heading heading_1"><a href="#heading-2" class="heading-link"><span class="heading-index">2</span><span class="heading-text">2</span></a></h1><h2 id="heading-2-3" class="heading heading_2"><a href="#heading-2-3" class="heading-link"><span class="heading-index">2.3</span><span class="heading-text">2.1</span></a></h2><h2 id="heading-2-4" class="heading heading_2"><a href="#heading-2-4" class="heading-link"><span class="heading-index">2.4</span><span class="heading-text">2.2</span></a></h2><h1 id="heading-3" class="heading heading_1"><a href="#heading-3" class="heading-link"><span class="heading-index">3</span><span class="heading-text">3</span></a></h1>
<div class="toc"><ul class="toc-1"><li class="toc-1-1"><a href="#heading-1"><span class="toc-index">1</span><span class="toc-text">1</span></a><ul class="toc-2"><li class="toc-2-1"><a href="#heading-1-1"><span class="toc-index">1.1</span><span class="toc-text">1.1</span></a><ul class="toc-3"><li class="toc-3-1"><a href="#heading-1-1-1"><span class="toc-index">1.1.1</span><span class="toc-text">1.1.1</span></a><ul class="toc-4"><li class="toc-4-1"><a href="#heading-1-1-1-1"><span class="toc-index">1.1.1.1</span><span class="toc-text">1.1.1.1</span></a><ul class="toc-5"><li class="toc-5-1"><a href="#heading-1-1-1-1-1"><span class="toc-index">1.1.1.1.1</span><span class="toc-text">1.1.1.1.1</span></a><ul class="toc-6"><li class="toc-6-1"><a href="#heading-1-1-1-1-1-1"><span class="toc-index">1.1.1.1.1.1</span><span class="toc-text">1.1.1.1.1.1</span></a></li><li class="toc-6-2"><a href="#heading-1-1-1-1-1-2"><span class="toc-index">1.1.1.1.1.2</span><span class="toc-text">1.1.1.1.1.2</span></a></li></ul></li><li class="toc-5-2"><a href="#heading-1-1-1-1-2"><span class="toc-index">1.1.1.1.2</span><span class="toc-text">1.1.1.1.2</span></a></li><li class="toc-5-3"><a href="#heading-1-1-1-1-3"><span class="toc-index">1.1.1.1.3</span><span class="toc-text">1.1.1.1.3</span></a></li></ul></li></ul></li></ul></li><li class="toc-2-2"><a href="#heading-1-2"><span class="toc-index">1.2</span><span class="toc-text">1.2</span></a></li></ul></li><li class="toc-1-2"><a href="#heading-2"><span class="toc-index">2</span><span class="toc-text">2</span></a><ul class="toc-2"><li class="toc-2-1"><a href="#heading-2-1"><span class="toc-index">2.1</span><span class="toc-text">2.1</span></a></li><li class="toc-2-2"><a href="#heading-2-2"><span class="toc-index">2.2</span><span class="toc-text">2.2</span></a></li></ul></li><li class="toc-1-3"><a href="#heading-3"><span class="toc-index">3</span><span class="toc-text">3</span></a></li></ul></div><h1 id="heading-1" class="heading heading_1"><a href="#heading-1" class="heading-link"><span class="heading-index">1</span><span class="heading-text">1</span></a></h1><h2 id="heading-1-1" class="heading heading_2"><a href="#heading-1-1" class="heading-link"><span class="heading-index">1.1</span><span class="heading-text">1.1</span></a></h2><h3 id="heading-1-1-1" class="heading heading_3"><a href="#heading-1-1-1" class="heading-link"><span class="heading-index">1.1.1</span><span class="heading-text">1.1.1</span></a></h3><h4 id="heading-1-1-1-1" class="heading heading_4"><a href="#heading-1-1-1-1" class="heading-link"><span class="heading-index">1.1.1.1</span><span class="heading-text">1.1.1.1</span></a></h4><h5 id="heading-1-1-1-1-1" class="heading heading_5"><a href="#heading-1-1-1-1-1" class="heading-link"><span class="heading-index">1.1.1.1.1</span><span class="heading-text">1.1.1.1.1</span></a></h5><h6 id="heading-1-1-1-1-1-1" class="heading heading_6"><a href="#heading-1-1-1-1-1-1" class="heading-link"><span class="heading-index">1.1.1.1.1.1</span><span class="heading-text">1.1.1.1.1.1</span></a></h6><h6 id="heading-1-1-1-1-1-2" class="heading heading_6"><a href="#heading-1-1-1-1-1-2" class="heading-link"><span class="heading-index">1.1.1.1.1.2</span><span class="heading-text">1.1.1.1.1.2</span></a></h6><h5 id="heading-1-1-1-1-2" class="heading heading_5"><a href="#heading-1-1-1-1-2" class="heading-link"><span class="heading-index">1.1.1.1.2</span><span class="heading-text">1.1.1.1.2</span></a></h5><h5 id="heading-1-1-1-1-3" class="heading heading_5"><a href="#heading-1-1-1-1-3" class="heading-link"><span class="heading-index">1.1.1.1.3</span><span class="heading-text">1.1.1.1.3</span></a></h5><h2 id="heading-1-2" class="heading heading_2"><a href="#heading-1-2" class="heading-link"><span class="heading-index">1.2</span><span class="heading-text">1.2</span></a></h2><h1 id="heading-2" class="heading heading_1"><a href="#heading-2" class="heading-link"><span class="heading-index">2</span><span class="heading-text">2</span></a></h1><h2 id="heading-2-1" class="heading heading_2"><a href="#heading-2-1" class="heading-link"><span class="heading-index">2.1</span><span class="heading-text">2.1</span></a></h2><h2 id="heading-2-2" class="heading heading_2"><a href="#heading-2-2" class="heading-link"><span class="heading-index">2.2</span><span class="heading-text">2.2</span></a></h2><h1 id="heading-3" class="heading heading_1"><a href="#heading-3" class="heading-link"><span class="heading-index">3</span><span class="heading-text">3</span></a></h1>

0 comments on commit acb94e2

Please sign in to comment.