{"version":3,"sources":["webpack:///./node_modules/xss/lib/util.js","webpack:///./node_modules/xss/lib/xss.js","webpack:///./node_modules/xss/lib/parser.js","webpack:///./node_modules/xss/lib/index.js","webpack:///./node_modules/xss/lib/default.js"],"names":["module","exports","indexOf","arr","item","i","j","Array","prototype","length","forEach","fn","scope","call","trim","str","String","replace","spaceIndex","match","exec","index","FilterCSS","DEFAULT","parser","parseTag","parseAttr","_","isNull","obj","FilterXSS","options","ret","shallowCopyObject","stripIgnoreTag","onIgnoreTag","console","error","onIgnoreTagStripAll","whiteList","onTag","onTagAttr","onIgnoreTagAttr","safeAttrValue","escapeHtml","this","css","cssFilter","process","html","toString","stripBlankChar","allowCommentTag","stripCommentTag","stripIgnoreTagBody","StripTagBody","retHtml","sourcePosition","position","tag","isClosing","info","isWhite","hasOwnProperty","attrs","closing","slice","getAttrs","whiteAttrList","attrsHtml","name","value","isWhiteAttr","remove","getTagName","tagName","toLowerCase","REGEXP_ILLEGAL_ATTR_NAME","findNextEqual","c","findBeforeEqual","stripQuoteWrap","text","isQuoteWrapString","substr","rethtml","lastPos","tagStart","quoteStart","currentPos","len","currentTagName","currentHtml","charAt","onAttr","retAttrs","tmpName","addAttr","push","test","join","filterXSS","window","self","DedicatedWorkerGlobalScope","getDefaultCSSWhiteList","getDefaultWhiteList","a","abbr","address","area","article","aside","audio","b","bdi","bdo","big","blockquote","br","caption","center","cite","code","col","colgroup","dd","del","details","div","dl","dt","em","font","footer","h1","h2","h3","h4","h5","h6","header","hr","img","ins","li","mark","nav","ol","p","pre","s","section","small","span","sub","sup","strong","table","tbody","td","tfoot","th","thead","tr","tt","u","ul","video","defaultCSSFilter","REGEXP_LT","REGEXP_GT","REGEXP_QUOTE","REGEXP_QUOTE_2","REGEXP_ATTR_VALUE_1","REGEXP_ATTR_VALUE_COLON","REGEXP_ATTR_VALUE_NEWLINE","REGEXP_DEFAULT_ON_TAG_ATTR_4","REGEXP_DEFAULT_ON_TAG_ATTR_7","REGEXP_DEFAULT_ON_TAG_ATTR_8","escapeQuote","unescapeQuote","escapeHtmlEntities","fromCharCode","parseInt","escapeDangerHtml5Entities","clearNonPrintableCharacter","str2","charCodeAt","friendlyAttrValue","escapeAttrValue","STRIP_COMMENT_TAG_REGEXP","lastIndex","tags","next","isRemoveAllTag","isArray","removeList","posStart","isRemoveTag","end","pos","chars","split","filter","char"],"mappings":"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","file":"vendor.xss~663f5c15.eda37cc9075e8e9a5f93.chunk.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 * filter xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\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\n/**\n * FilterXSS class\n *\n * @param {Object} options\n *        whiteList, 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\n  options.whiteList = options.whiteList || DEFAULT.whiteList;\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    var 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: whiteList.hasOwnProperty(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 \"</\" + tag + \">\";\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            var ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n            if (!isNull(ret)) return ret;\n            return;\n          }\n        });\n\n        // build new tag html\n        var html = \"<\" + tag;\n        if (attrsHtml) html += \" \" + attrsHtml;\n        if (attrs.closing) html += \" /\";\n        html += \">\";\n        return html;\n      } else {\n        // call `onIgnoreTag()`\n        var 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 * Simple HTML Parser\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar _ = require(\"./util\");\n\n/**\n * get tag name\n *\n * @param {String} html e.g. '<a hef=\"#\">'\n * @return {String}\n */\nfunction getTagName(html) {\n  var i = _.spaceIndex(html);\n  if (i === -1) {\n    var tagName = html.slice(1, -1);\n  } else {\n    var 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 如:'<a hef=\"#\">'\n * @return {Boolean}\n */\nfunction isClosing(html) {\n  return html.slice(0, 2) === \"</\";\n}\n\n/**\n * parse input html and returns processed html\n *\n * @param {String} html\n * @param {Function} onTag e.g. function (sourcePosition, position, tag, html, isClosing)\n * @param {Function} escapeHtml\n * @return {String}\n */\nfunction parseTag(html, onTag, escapeHtml) {\n  \"use strict\";\n\n  var rethtml = \"\";\n  var lastPos = 0;\n  var tagStart = false;\n  var quoteStart = false;\n  var currentPos = 0;\n  var len = html.length;\n  var currentTagName = \"\";\n  var currentHtml = \"\";\n\n  for (currentPos = 0; currentPos < len; currentPos++) {\n    var c = html.charAt(currentPos);\n    if (tagStart === false) {\n      if (c === \"<\") {\n        tagStart = currentPos;\n        continue;\n      }\n    } else {\n      if (quoteStart === false) {\n        if (c === \"<\") {\n          rethtml += escapeHtml(html.slice(lastPos, currentPos));\n          tagStart = currentPos;\n          lastPos = currentPos;\n          continue;\n        }\n        if (c === \">\") {\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 === \"'\") && html.charAt(currentPos - 1) === \"=\") {\n          quoteStart = c;\n          continue;\n        }\n      } else {\n        if (c === quoteStart) {\n          quoteStart = false;\n          continue;\n        }\n      }\n    }\n  }\n  if (lastPos < html.length) {\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 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      continue;\n    }\n    if (tmpName !== false) {\n      if (\n        i === lastPos &&\n        (c === '\"' || c === \"'\") &&\n        html.charAt(i - 1) === \"=\"\n      ) {\n        j = html.indexOf(c, i + 1);\n        if (j === -1) {\n          break;\n        } else {\n          v = _.trim(html.slice(lastPos + 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 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 * xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\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;\nfor (var i in DEFAULT) exports[i] = DEFAULT[i];\nfor (var i in parser) exports[i] = parser[i];\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 typeof self !== 'undefined' && typeof DedicatedWorkerGlobalScope !== 'undefined' && self instanceof DedicatedWorkerGlobalScope;\n}\nif (isWorkerEnv()) {\n  self.filterXSS = module.exports;\n}\n","/**\n * default settings\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\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: [\"autoplay\", \"controls\", \"loop\", \"preload\", \"src\"],\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    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    sup: [],\n    strong: [],\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: [\"autoplay\", \"controls\", \"loop\", \"preload\", \"src\", \"height\", \"width\"]\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, \"&lt;\").replace(REGEXP_GT, \"&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_GT = />/g;\nvar REGEXP_QUOTE = /\"/g;\nvar REGEXP_QUOTE_2 = /&quot;/g;\nvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\nvar REGEXP_ATTR_VALUE_COLON = /&colon;?/gim;\nvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_4 = /((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;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\nvar 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 = /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 doube quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction escapeQuote(str) {\n  return str.replace(REGEXP_QUOTE, \"&quot;\");\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  return html.replace(STRIP_COMMENT_TAG_REGEXP, \"\");\n}\nvar STRIP_COMMENT_TAG_REGEXP = /<!--[\\s\\S]*?-->/g;\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"],"sourceRoot":""}