{"version":3,"file":"c_xss_246da664.1695271849080.js","sources":["../../node_modules/xss/lib/util.js","../../node_modules/xss/lib/default.js","../../node_modules/xss/lib/parser.js","../../node_modules/xss/lib/xss.js","../../node_modules/xss/lib/index.js"],"sourcesContent":["module.exports = {\n indexOf: function (arr, item) {\n var i, j;\n if (Array.prototype.indexOf) {\n return arr.indexOf(item);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n if (arr[i] === item) {\n return i;\n }\n }\n return -1;\n },\n forEach: function (arr, fn, scope) {\n var i, j;\n if (Array.prototype.forEach) {\n return arr.forEach(fn, scope);\n }\n for (i = 0, j = arr.length; i < j; i++) {\n fn.call(scope, arr[i], i, arr);\n }\n },\n trim: function (str) {\n if (String.prototype.trim) {\n return str.trim();\n }\n return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\n },\n spaceIndex: function (str) {\n var reg = /\\s|\\n|\\t/;\n var match = reg.exec(str);\n return match ? match.index : -1;\n },\n};\n","/**\n * default settings\n *\n * @author Zongmin Lei\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar getDefaultCSSWhiteList = require(\"cssfilter\").getDefaultWhiteList;\nvar _ = require(\"./util\");\n\nfunction getDefaultWhiteList() {\n return {\n a: [\"target\", \"href\", \"title\"],\n abbr: [\"title\"],\n address: [],\n area: [\"shape\", \"coords\", \"href\", \"alt\"],\n article: [],\n aside: [],\n audio: [\n \"autoplay\",\n \"controls\",\n \"crossorigin\",\n \"loop\",\n \"muted\",\n \"preload\",\n \"src\",\n ],\n b: [],\n bdi: [\"dir\"],\n bdo: [\"dir\"],\n big: [],\n blockquote: [\"cite\"],\n br: [],\n caption: [],\n center: [],\n cite: [],\n code: [],\n col: [\"align\", \"valign\", \"span\", \"width\"],\n colgroup: [\"align\", \"valign\", \"span\", \"width\"],\n dd: [],\n del: [\"datetime\"],\n details: [\"open\"],\n div: [],\n dl: [],\n dt: [],\n em: [],\n figcaption: [],\n figure: [],\n font: [\"color\", \"size\", \"face\"],\n footer: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n header: [],\n hr: [],\n i: [],\n img: [\"src\", \"alt\", \"title\", \"width\", \"height\"],\n ins: [\"datetime\"],\n li: [],\n mark: [],\n nav: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n section: [],\n small: [],\n span: [],\n sub: [],\n summary: [],\n sup: [],\n strong: [],\n strike: [],\n table: [\"width\", \"border\", \"align\", \"valign\"],\n tbody: [\"align\", \"valign\"],\n td: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n tfoot: [\"align\", \"valign\"],\n th: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n thead: [\"align\", \"valign\"],\n tr: [\"rowspan\", \"align\", \"valign\"],\n tt: [],\n u: [],\n ul: [],\n video: [\n \"autoplay\",\n \"controls\",\n \"crossorigin\",\n \"loop\",\n \"muted\",\n \"playsinline\",\n \"poster\",\n \"preload\",\n \"src\",\n \"height\",\n \"width\",\n ],\n };\n}\n\nvar defaultCSSFilter = new FilterCSS();\n\n/**\n * default onTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onTag(tag, html, options) {\n // do nothing\n}\n\n/**\n * default onIgnoreTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreTag(tag, html, options) {\n // do nothing\n}\n\n/**\n * default onTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onTagAttr(tag, name, value) {\n // do nothing\n}\n\n/**\n * default onIgnoreTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onIgnoreTagAttr(tag, name, value) {\n // do nothing\n}\n\n/**\n * default escapeHtml function\n *\n * @param {String} html\n */\nfunction escapeHtml(html) {\n return html.replace(REGEXP_LT, \"<\").replace(REGEXP_GT, \">\");\n}\n\n/**\n * default safeAttrValue function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @param {Object} cssFilter\n * @return {String}\n */\nfunction safeAttrValue(tag, name, value, cssFilter) {\n // unescape attribute value firstly\n value = friendlyAttrValue(value);\n\n if (name === \"href\" || name === \"src\") {\n // filter `href` and `src` attribute\n // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`\n value = _.trim(value);\n if (value === \"#\") return \"#\";\n if (\n !(\n value.substr(0, 7) === \"http://\" ||\n value.substr(0, 8) === \"https://\" ||\n value.substr(0, 7) === \"mailto:\" ||\n value.substr(0, 4) === \"tel:\" ||\n value.substr(0, 11) === \"data:image/\" ||\n value.substr(0, 6) === \"ftp://\" ||\n value.substr(0, 2) === \"./\" ||\n value.substr(0, 3) === \"../\" ||\n value[0] === \"#\" ||\n value[0] === \"/\"\n )\n ) {\n return \"\";\n }\n } else if (name === \"background\") {\n // filter `background` attribute (maybe no use)\n // `javascript:`\n REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n return \"\";\n }\n } else if (name === \"style\") {\n // `expression()`\n REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n return \"\";\n }\n // `url()`\n REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n return \"\";\n }\n }\n if (cssFilter !== false) {\n cssFilter = cssFilter || defaultCSSFilter;\n value = cssFilter.process(value);\n }\n }\n\n // escape `<>\"` before returns\n value = escapeAttrValue(value);\n return value;\n}\n\n// RegExp list\nvar REGEXP_LT = //g;\nvar REGEXP_QUOTE = /\"/g;\nvar REGEXP_QUOTE_2 = /"/g;\nvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\nvar REGEXP_ATTR_VALUE_COLON = /:?/gim;\nvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_4 =\n /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a):/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_7 =\n /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/gi;\n\n/**\n * escape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction escapeQuote(str) {\n return str.replace(REGEXP_QUOTE, \""\");\n}\n\n/**\n * unescape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction unescapeQuote(str) {\n return str.replace(REGEXP_QUOTE_2, '\"');\n}\n\n/**\n * escape html entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeHtmlEntities(str) {\n return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) {\n return code[0] === \"x\" || code[0] === \"X\"\n ? String.fromCharCode(parseInt(code.substr(1), 16))\n : String.fromCharCode(parseInt(code, 10));\n });\n}\n\n/**\n * escape html5 new danger entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeDangerHtml5Entities(str) {\n return str\n .replace(REGEXP_ATTR_VALUE_COLON, \":\")\n .replace(REGEXP_ATTR_VALUE_NEWLINE, \" \");\n}\n\n/**\n * clear nonprintable characters\n *\n * @param {String} str\n * @return {String}\n */\nfunction clearNonPrintableCharacter(str) {\n var str2 = \"\";\n for (var i = 0, len = str.length; i < len; i++) {\n str2 += str.charCodeAt(i) < 32 ? \" \" : str.charAt(i);\n }\n return _.trim(str2);\n}\n\n/**\n * get friendly attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction friendlyAttrValue(str) {\n str = unescapeQuote(str);\n str = escapeHtmlEntities(str);\n str = escapeDangerHtml5Entities(str);\n str = clearNonPrintableCharacter(str);\n return str;\n}\n\n/**\n * unescape attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeAttrValue(str) {\n str = escapeQuote(str);\n str = escapeHtml(str);\n return str;\n}\n\n/**\n * `onIgnoreTag` function for removing all the tags that are not in whitelist\n */\nfunction onIgnoreTagStripAll() {\n return \"\";\n}\n\n/**\n * remove tag body\n * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional)\n *\n * @param {array} tags\n * @param {function} next\n */\nfunction StripTagBody(tags, next) {\n if (typeof next !== \"function\") {\n next = function () {};\n }\n\n var isRemoveAllTag = !Array.isArray(tags);\n function isRemoveTag(tag) {\n if (isRemoveAllTag) return true;\n return _.indexOf(tags, tag) !== -1;\n }\n\n var removeList = [];\n var posStart = false;\n\n return {\n onIgnoreTag: function (tag, html, options) {\n if (isRemoveTag(tag)) {\n if (options.isClosing) {\n var ret = \"[/removed]\";\n var end = options.position + ret.length;\n removeList.push([\n posStart !== false ? posStart : options.position,\n end,\n ]);\n posStart = false;\n return ret;\n } else {\n if (!posStart) {\n posStart = options.position;\n }\n return \"[removed]\";\n }\n } else {\n return next(tag, html, options);\n }\n },\n remove: function (html) {\n var rethtml = \"\";\n var lastPos = 0;\n _.forEach(removeList, function (pos) {\n rethtml += html.slice(lastPos, pos[0]);\n lastPos = pos[1];\n });\n rethtml += html.slice(lastPos);\n return rethtml;\n },\n };\n}\n\n/**\n * remove html comments\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripCommentTag(html) {\n var retHtml = \"\";\n var lastPos = 0;\n while (lastPos < html.length) {\n var i = html.indexOf(\"\", i);\n if (j === -1) {\n break;\n }\n lastPos = j + 3;\n }\n return retHtml;\n}\n\n/**\n * remove invisible characters\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripBlankChar(html) {\n var chars = html.split(\"\");\n chars = chars.filter(function (char) {\n var c = char.charCodeAt(0);\n if (c === 127) return false;\n if (c <= 31) {\n if (c === 10 || c === 13) return true;\n return false;\n }\n return true;\n });\n return chars.join(\"\");\n}\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onTag = onTag;\nexports.onIgnoreTag = onIgnoreTag;\nexports.onTagAttr = onTagAttr;\nexports.onIgnoreTagAttr = onIgnoreTagAttr;\nexports.safeAttrValue = safeAttrValue;\nexports.escapeHtml = escapeHtml;\nexports.escapeQuote = escapeQuote;\nexports.unescapeQuote = unescapeQuote;\nexports.escapeHtmlEntities = escapeHtmlEntities;\nexports.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\nexports.clearNonPrintableCharacter = clearNonPrintableCharacter;\nexports.friendlyAttrValue = friendlyAttrValue;\nexports.escapeAttrValue = escapeAttrValue;\nexports.onIgnoreTagStripAll = onIgnoreTagStripAll;\nexports.StripTagBody = StripTagBody;\nexports.stripCommentTag = stripCommentTag;\nexports.stripBlankChar = stripBlankChar;\nexports.cssFilter = defaultCSSFilter;\nexports.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n","/**\n * Simple HTML Parser\n *\n * @author Zongmin Lei\n */\n\nvar _ = require(\"./util\");\n\n/**\n * get tag name\n *\n * @param {String} html e.g. ''\n * @return {String}\n */\nfunction getTagName(html) {\n var i = _.spaceIndex(html);\n var tagName;\n if (i === -1) {\n tagName = html.slice(1, -1);\n } else {\n tagName = html.slice(1, i + 1);\n }\n tagName = _.trim(tagName).toLowerCase();\n if (tagName.slice(0, 1) === \"/\") tagName = tagName.slice(1);\n if (tagName.slice(-1) === \"/\") tagName = tagName.slice(0, -1);\n return tagName;\n}\n\n/**\n * is close tag?\n *\n * @param {String} html 如:''\n * @return {Boolean}\n */\nfunction isClosing(html) {\n return html.slice(0, 2) === \"\" || currentPos === len - 1) {\n rethtml += escapeHtml(html.slice(lastPos, tagStart));\n currentHtml = html.slice(tagStart, currentPos + 1);\n currentTagName = getTagName(currentHtml);\n rethtml += onTag(\n tagStart,\n rethtml.length,\n currentTagName,\n currentHtml,\n isClosing(currentHtml)\n );\n lastPos = currentPos + 1;\n tagStart = false;\n continue;\n }\n if (c === '\"' || c === \"'\") {\n var i = 1;\n var ic = html.charAt(currentPos - i);\n\n while (ic.trim() === \"\" || ic === \"=\") {\n if (ic === \"=\") {\n quoteStart = c;\n continue chariterator;\n }\n ic = html.charAt(currentPos - ++i);\n }\n }\n } else {\n if (c === quoteStart) {\n quoteStart = false;\n continue;\n }\n }\n }\n }\n if (lastPos < len) {\n rethtml += escapeHtml(html.substr(lastPos));\n }\n\n return rethtml;\n}\n\nvar REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9\\\\_:.-]/gim;\n\n/**\n * parse input attributes and returns processed attributes\n *\n * @param {String} html e.g. `href=\"#\" target=\"_blank\"`\n * @param {Function} onAttr e.g. `function (name, value)`\n * @return {String}\n */\nfunction parseAttr(html, onAttr) {\n \"use strict\";\n\n var lastPos = 0;\n var lastMarkPos = 0;\n var retAttrs = [];\n var tmpName = false;\n var len = html.length;\n\n function addAttr(name, value) {\n name = _.trim(name);\n name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, \"\").toLowerCase();\n if (name.length < 1) return;\n var ret = onAttr(name, value || \"\");\n if (ret) retAttrs.push(ret);\n }\n\n // 逐个分析字符\n for (var i = 0; i < len; i++) {\n var c = html.charAt(i);\n var v, j;\n if (tmpName === false && c === \"=\") {\n tmpName = html.slice(lastPos, i);\n lastPos = i + 1;\n lastMarkPos = html.charAt(lastPos) === '\"' || html.charAt(lastPos) === \"'\" ? lastPos : findNextQuotationMark(html, i + 1);\n continue;\n }\n if (tmpName !== false) {\n if (\n i === lastMarkPos\n ) {\n j = html.indexOf(c, i + 1);\n if (j === -1) {\n break;\n } else {\n v = _.trim(html.slice(lastMarkPos + 1, j));\n addAttr(tmpName, v);\n tmpName = false;\n i = j;\n lastPos = i + 1;\n continue;\n }\n }\n }\n if (/\\s|\\n|\\t/.test(c)) {\n html = html.replace(/\\s|\\n|\\t/g, \" \");\n if (tmpName === false) {\n j = findNextEqual(html, i);\n if (j === -1) {\n v = _.trim(html.slice(lastPos, i));\n addAttr(v);\n tmpName = false;\n lastPos = i + 1;\n continue;\n } else {\n i = j - 1;\n continue;\n }\n } else {\n j = findBeforeEqual(html, i - 1);\n if (j === -1) {\n v = _.trim(html.slice(lastPos, i));\n v = stripQuoteWrap(v);\n addAttr(tmpName, v);\n tmpName = false;\n lastPos = i + 1;\n continue;\n } else {\n continue;\n }\n }\n }\n }\n\n if (lastPos < html.length) {\n if (tmpName === false) {\n addAttr(html.slice(lastPos));\n } else {\n addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos))));\n }\n }\n\n return _.trim(retAttrs.join(\" \"));\n}\n\nfunction findNextEqual(str, i) {\n for (; i < str.length; i++) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"=\") return i;\n return -1;\n }\n}\n\nfunction findNextQuotationMark(str, i) {\n for (; i < str.length; i++) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"'\" || c === '\"') return i;\n return -1;\n }\n}\n\nfunction findBeforeEqual(str, i) {\n for (; i > 0; i--) {\n var c = str[i];\n if (c === \" \") continue;\n if (c === \"=\") return i;\n return -1;\n }\n}\n\nfunction isQuoteWrapString(text) {\n if (\n (text[0] === '\"' && text[text.length - 1] === '\"') ||\n (text[0] === \"'\" && text[text.length - 1] === \"'\")\n ) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction stripQuoteWrap(text) {\n if (isQuoteWrapString(text)) {\n return text.substr(1, text.length - 2);\n } else {\n return text;\n }\n}\n\nexports.parseTag = parseTag;\nexports.parseAttr = parseAttr;\n","/**\n * filter xss\n *\n * @author Zongmin Lei\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar parseTag = parser.parseTag;\nvar parseAttr = parser.parseAttr;\nvar _ = require(\"./util\");\n\n/**\n * returns `true` if the input value is `undefined` or `null`\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull(obj) {\n return obj === undefined || obj === null;\n}\n\n/**\n * get attributes for a tag\n *\n * @param {String} html\n * @return {Object}\n * - {String} html\n * - {Boolean} closing\n */\nfunction getAttrs(html) {\n var i = _.spaceIndex(html);\n if (i === -1) {\n return {\n html: \"\",\n closing: html[html.length - 2] === \"/\",\n };\n }\n html = _.trim(html.slice(i + 1, -1));\n var isClosing = html[html.length - 1] === \"/\";\n if (isClosing) html = _.trim(html.slice(0, -1));\n return {\n html: html,\n closing: isClosing,\n };\n}\n\n/**\n * shallow copy\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject(obj) {\n var ret = {};\n for (var i in obj) {\n ret[i] = obj[i];\n }\n return ret;\n}\n\nfunction keysToLowerCase(obj) {\n var ret = {};\n for (var i in obj) {\n if (Array.isArray(obj[i])) {\n ret[i.toLowerCase()] = obj[i].map(function (item) {\n return item.toLowerCase();\n });\n } else {\n ret[i.toLowerCase()] = obj[i];\n }\n }\n return ret;\n}\n\n/**\n * FilterXSS class\n *\n * @param {Object} options\n * whiteList (or allowList), onTag, onTagAttr, onIgnoreTag,\n * onIgnoreTagAttr, safeAttrValue, escapeHtml\n * stripIgnoreTagBody, allowCommentTag, stripBlankChar\n * css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter`\n */\nfunction FilterXSS(options) {\n options = shallowCopyObject(options || {});\n\n if (options.stripIgnoreTag) {\n if (options.onIgnoreTag) {\n console.error(\n 'Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time'\n );\n }\n options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n }\n if (options.whiteList || options.allowList) {\n options.whiteList = keysToLowerCase(options.whiteList || options.allowList);\n } else {\n options.whiteList = DEFAULT.whiteList;\n }\n\n options.onTag = options.onTag || DEFAULT.onTag;\n options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n this.options = options;\n\n if (options.css === false) {\n this.cssFilter = false;\n } else {\n options.css = options.css || {};\n this.cssFilter = new FilterCSS(options.css);\n }\n}\n\n/**\n * start process and returns result\n *\n * @param {String} html\n * @return {String}\n */\nFilterXSS.prototype.process = function (html) {\n // compatible with the input\n html = html || \"\";\n html = html.toString();\n if (!html) return \"\";\n\n var me = this;\n var options = me.options;\n var whiteList = options.whiteList;\n var onTag = options.onTag;\n var onIgnoreTag = options.onIgnoreTag;\n var onTagAttr = options.onTagAttr;\n var onIgnoreTagAttr = options.onIgnoreTagAttr;\n var safeAttrValue = options.safeAttrValue;\n var escapeHtml = options.escapeHtml;\n var cssFilter = me.cssFilter;\n\n // remove invisible characters\n if (options.stripBlankChar) {\n html = DEFAULT.stripBlankChar(html);\n }\n\n // remove html comments\n if (!options.allowCommentTag) {\n html = DEFAULT.stripCommentTag(html);\n }\n\n // if enable stripIgnoreTagBody\n var stripIgnoreTagBody = false;\n if (options.stripIgnoreTagBody) {\n stripIgnoreTagBody = DEFAULT.StripTagBody(\n options.stripIgnoreTagBody,\n onIgnoreTag\n );\n onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n }\n\n var retHtml = parseTag(\n html,\n function (sourcePosition, position, tag, html, isClosing) {\n var info = {\n sourcePosition: sourcePosition,\n position: position,\n isClosing: isClosing,\n isWhite: Object.prototype.hasOwnProperty.call(whiteList, tag),\n };\n\n // call `onTag()`\n var ret = onTag(tag, html, info);\n if (!isNull(ret)) return ret;\n\n if (info.isWhite) {\n if (info.isClosing) {\n return \"\";\n }\n\n var attrs = getAttrs(html);\n var whiteAttrList = whiteList[tag];\n var attrsHtml = parseAttr(attrs.html, function (name, value) {\n // call `onTagAttr()`\n var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1;\n var ret = onTagAttr(tag, name, value, isWhiteAttr);\n if (!isNull(ret)) return ret;\n\n if (isWhiteAttr) {\n // call `safeAttrValue()`\n value = safeAttrValue(tag, name, value, cssFilter);\n if (value) {\n return name + '=\"' + value + '\"';\n } else {\n return name;\n }\n } else {\n // call `onIgnoreTagAttr()`\n ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n if (!isNull(ret)) return ret;\n return;\n }\n });\n\n // build new tag html\n html = \"<\" + tag;\n if (attrsHtml) html += \" \" + attrsHtml;\n if (attrs.closing) html += \" /\";\n html += \">\";\n return html;\n } else {\n // call `onIgnoreTag()`\n ret = onIgnoreTag(tag, html, info);\n if (!isNull(ret)) return ret;\n return escapeHtml(html);\n }\n },\n escapeHtml\n );\n\n // if enable stripIgnoreTagBody\n if (stripIgnoreTagBody) {\n retHtml = stripIgnoreTagBody.remove(retHtml);\n }\n\n return retHtml;\n};\n\nmodule.exports = FilterXSS;\n","/**\n * xss\n *\n * @author Zongmin Lei\n */\n\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar FilterXSS = require(\"./xss\");\n\n/**\n * filter xss function\n *\n * @param {String} html\n * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml }\n * @return {String}\n */\nfunction filterXSS(html, options) {\n var xss = new FilterXSS(options);\n return xss.process(html);\n}\n\nexports = module.exports = filterXSS;\nexports.filterXSS = filterXSS;\nexports.FilterXSS = FilterXSS;\n\n(function () {\n for (var i in DEFAULT) {\n exports[i] = DEFAULT[i];\n }\n for (var j in parser) {\n exports[j] = parser[j];\n }\n})();\n\n// using `xss` on the browser, output `filterXSS` to the globals\nif (typeof window !== \"undefined\") {\n window.filterXSS = module.exports;\n}\n\n// using `xss` on the WebWorker, output `filterXSS` to the globals\nfunction isWorkerEnv() {\n return (\n typeof self !== \"undefined\" &&\n typeof DedicatedWorkerGlobalScope !== \"undefined\" &&\n self instanceof DedicatedWorkerGlobalScope\n );\n}\nif (isWorkerEnv()) {\n self.filterXSS = module.exports;\n}\n"],"names":["util","arr","item","i","j","fn","scope","str","reg","match","FilterCSS","require$$0","getDefaultCSSWhiteList","_","require$$1","getDefaultWhiteList","defaultCSSFilter","onTag","tag","html","options","onIgnoreTag","onTagAttr","name","value","onIgnoreTagAttr","escapeHtml","REGEXP_LT","REGEXP_GT","safeAttrValue","cssFilter","friendlyAttrValue","REGEXP_DEFAULT_ON_TAG_ATTR_4","REGEXP_DEFAULT_ON_TAG_ATTR_7","REGEXP_DEFAULT_ON_TAG_ATTR_8","escapeAttrValue","REGEXP_QUOTE","REGEXP_QUOTE_2","REGEXP_ATTR_VALUE_1","REGEXP_ATTR_VALUE_COLON","REGEXP_ATTR_VALUE_NEWLINE","escapeQuote","unescapeQuote","escapeHtmlEntities","code","escapeDangerHtml5Entities","clearNonPrintableCharacter","str2","len","onIgnoreTagStripAll","StripTagBody","tags","next","isRemoveAllTag","isRemoveTag","removeList","posStart","ret","end","rethtml","lastPos","pos","stripCommentTag","retHtml","stripBlankChar","chars","char","c","_default","getTagName","tagName","isClosing","parseTag","tagStart","quoteStart","currentPos","currentTagName","currentHtml","chariterator","ic","REGEXP_ILLEGAL_ATTR_NAME","parseAttr","onAttr","lastMarkPos","retAttrs","tmpName","addAttr","v","findNextQuotationMark","findNextEqual","findBeforeEqual","stripQuoteWrap","isQuoteWrapString","text","parser","DEFAULT","require$$2","require$$3","isNull","obj","getAttrs","shallowCopyObject","keysToLowerCase","FilterXSS","me","whiteList","stripIgnoreTagBody","sourcePosition","position","info","attrs","whiteAttrList","attrsHtml","isWhiteAttr","xss","filterXSS","exports","module","isWorkerEnv"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}