diff --git a/src/core/render/tpl.js b/src/core/render/tpl.js index 2bad3a311..206c11dcc 100644 --- a/src/core/render/tpl.js +++ b/src/core/render/tpl.js @@ -1,3 +1,5 @@ +import { escapeHtml } from './utils'; + /** * Render github corner * @param {Object} data URL for the View Source on Github link @@ -91,7 +93,9 @@ export function tree(toc, tpl = '') { let innerHTML = ''; toc.forEach(node => { - innerHTML += `
  • ${node.title}
  • `; + innerHTML += `
  • ${node.title}
  • `; if (node.children) { innerHTML += tree(node.children, tpl); } diff --git a/src/core/render/utils.js b/src/core/render/utils.js index bd892c653..f055d7c59 100644 --- a/src/core/render/utils.js +++ b/src/core/render/utils.js @@ -48,3 +48,20 @@ export function getAndRemoveConfig(str = '') { export function removeAtag(str = '') { return str.replace(/(<\/?a.*?>)/gi, ''); } + +/** + * Escape html + * @param {String} string html string + * @returns {string} Return escaped html string + */ +export function escapeHtml(string) { + const entityMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + }; + + return String(string).replace(/[&<>"']/g, s => entityMap[s]); +} diff --git a/src/plugins/search/search.js b/src/plugins/search/search.js index aba15d0b7..03f20fee3 100644 --- a/src/plugins/search/search.js +++ b/src/plugins/search/search.js @@ -1,5 +1,5 @@ /* eslint-disable no-unused-vars */ -import { getAndRemoveConfig } from '../../core/render/utils'; +import { getAndRemoveConfig, escapeHtml } from '../../core/render/utils'; let INDEXS = {}; @@ -20,18 +20,6 @@ function resolveIndexKey(namespace) { : LOCAL_STORAGE.INDEX_KEY; } -function escapeHtml(string) { - const entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - }; - - return String(string).replace(/[&<>"']/g, s => entityMap[s]); -} - function getAllPaths(router) { const paths = []; diff --git a/test/unit/render-util.test.js b/test/unit/render-util.test.js index 3a82a0f9d..033725bb1 100644 --- a/test/unit/render-util.test.js +++ b/test/unit/render-util.test.js @@ -1,4 +1,4 @@ -const { removeAtag } = require(`${SRC_PATH}/core/render/utils`); +const { removeAtag, escapeHtml } = require(`${SRC_PATH}/core/render/utils`); // Suite // ----------------------------------------------------------------------------- @@ -12,4 +12,16 @@ describe('core/render/utils', () => { expect(result).toEqual('content'); }); }); + + // escapeHtml() + // --------------------------------------------------------------------------- + describe('escapeHtml()', () => { + test('escape html', () => { + const result = escapeHtml('content'); + + expect(result).toEqual( + '<a href="www.example.com">content</a>' + ); + }); + }); });