"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isFunction = isFunction; exports.isUrl = isUrl; exports.arrayToObject = arrayToObject; exports.htmlEncode = htmlEncode; exports.renderContent = renderContent; var _constant = require("./constant"); var _emoji = require("./emoji"); var _emoji2 = _interopRequireDefault(_emoji); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var emojiObejct = arrayToObject(_emoji2.default, "title"); function isFunction(functionToCheck) { return functionToCheck && {}.toString.call(functionToCheck) === "[object Function]"; } function isUrl(userInput) { // 需完整匹配 var regexp = /^((http(s)?:)?\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g; var res = userInput.match(regexp); if (res === null) return false;else return true; } /** * 将对象数组转换为对象 * @param {array} array Array of Objects * @param {string} keyField string */ function arrayToObject(array, keyField) { return array.reduce(function (obj, item) { obj[item[keyField]] = item; return obj; }, {}); } /** * HTML 编码 * 将 < > 等字符串进行编码 * @param {string} str 文本 */ function htmlEncode(str) { if (!str) return ""; return str.replace(/[<>]/gim, function (i) { return "&#" + i.charCodeAt(0) + ";"; }); } /** * 渲染编辑器 * [x] => * @param {strig} content */ function renderContent(content, onClick) { var newContent = content; if (newContent.indexOf(_constant.IMAGE_SPLIT) !== -1) { newContent = newContent.split(_constant.IMAGE_SPLIT); newContent.pop(); newContent = newContent.join(""); } // 不包含在标签内的链接 var innerUrl = /((http(s)?:)?\/\/)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)(?![^<>]*>|[^"]*?<\/a)/g; var data = htmlEncode(newContent).replace(_constant.REGEXP, function (a, b) { var src = a.slice(1, -1); // 兼容旧的评 // 因为旧的评论用 [img url] 方式存储的 if (isUrl(src)) { return "
\"""; } // 如果不存在对应的表情, 则返回原文 var emoji = emojiObejct[src]; if (emoji) { return "\"""; } return "[" + src + "]"; }).replace(innerUrl, function (a, b) { var protocol = /^(https?:)?\/\//; var hasProtocol = protocol.test(a); var url = hasProtocol ? a : "//" + a; // target="_blank" 存在安全性问题 // return `${a}`; return "" + a + ""; }).replace(/\n/g, "
"); return data; } //# sourceMappingURL=helper.js.map