JAVASCRIPT 26
Xss.js Guest on 25th April 2021 07:38:11 AM
  1. (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
  2. /**
  3.  * 默认酨ē½®
  4.  *
  5.  * @author 老雷<leizongmin@gmail.com>
  6.  */ongmin@gmail.com>
  7.  */
  8.  
  9. var _ =// 默认ē™½å¨å¨•
  10.  
  11.  
  12. // 默认ē™½å¨å¨•
  13. var whiteList = {
  14.   a:      ['target'],
  15.  address: [],
  16.  area:   ['['title'],
  17.   address: [],
  18.   area:   ['shape', 'coords', 'href', 'alt'],
  19.   article: [],
  20.   aside:  [],
  21.   audio:  ['autoplay'],
  22.  b:      [],
  23.  bdi:    ['d', 'src'],
  24.   b:      [],
  25.   bdi:    ['dir'],
  26.   bdo:    ['dir'],
  27.  br:     [],
  28.  caption: [],
  29.  center: [],
  30.  cite:   [],
  31.  code:   [],
  32.  col:    ['cite:   [],
  33.   code:   [],
  34.   col:    ['align', 'valign', 'span', 'width'],
  35.   colgroup: ['align', 'valign', 'span'datetime'],
  36.   dd:     [],
  37.   del:    ['datetime'],
  38.   details: ['open'],
  39.   div:    [],
  40.   dl:     [],
  41.   dt:     [],
  42.   em:     [],
  43.   font:   ['color', 'size', 'face'],
  44.   footer: [],
  45.   h1:     [],
  46.   h2:     [],
  47.   h3:     [],
  48.   h4:     [],
  49.   h5:     [],
  50.   h6:     [],
  51.   header: [],
  52.   hr:     [],
  53.   i:      [],
  54.   img:    ['src', 'alt', 'title', 'width', 'height'],
  55.   ins:    ['datetime'],
  56.   li:     [],
  57.   mark:   [],
  58.   nav:    [],
  59.   ol:     [],
  60.   p:      [],
  61.   pre:    [],
  62.   s:      [],
  63.   section:[],
  64.   small:  [],
  65.   span:   [],
  66.   sub:    [],
  67.   sup:    [],
  68.   strong: [],
  69.   table:  ['width', 'border', 'align', '],
  70.  td:     ['dy:  ['align', 'valign'],
  71.   td:     ['width', 'colspan', 'align', '],
  72.  th:     ['ot:  ['align', 'valign'],
  73.   th:     ['width', 'colspan', 'align', '],
  74.  tr:     ['ad:  ['align', 'valign'],
  75.   tr:     ['rowspan', 'align', 'valign'],
  76.   tt:     [],
  77.   u:      [],
  78.   ul:     [],
  79.   video:  ['autoplay', 'controls', 'loop', 'pr/**
  80.  * åŒ¹é…¨åˆ°ę ‡ē­¾ę—¶ēš„处ē†ę–¹ę³•
  81.  *
  82.  * @param {String} tag
  83.  * @param {String} html
  84.  * @param {Object} options
  85.  * @return {String}
  86.  */tag
  87.  * @param {String} html
  88.  * @param {Ob// do nothing
  89.  * /**
  90.  * 匹酨到äø¨åœØē™½å¨å¨•äøŠēš„ę ‡ē­¾ę—¶ēš„处ē†ę–¹ę³•
  91.  *
  92.  * @param {String} tag
  93.  * @param {String} html
  94.  * @param {Object} options
  95.  * @return {String}
  96.  */—¶ēš„处ē†ę–¹ę³•
  97.  *
  98.  *// do nothing
  99. g} /**
  100.  * åŒ¹é…¨åˆ°ę ‡ē­¾å±˛ę€§ę—¶ēš„处ē†ę–¹ę³•
  101.  *
  102.  * @param {String} tag
  103.  * @param {String} name
  104.  * @param {String} value
  105.  * @return {String}
  106.  */
  107.  * åŒ¹é…¨åˆ°ę ‡ē­¾å±˛ę// do nothing
  108. š/**
  109.  * 匹酨到äø¨åœØē™½å¨å¨•äøŠēš„ę ‡ē­¾å±˛ę€§ę—¶ēš„处ē†ę–¹ę³•
  110.  *
  111.  * @param {String} tag
  112.  * @param {String} name
  113.  * @param {String} value
  114.  * @return {String}
  115.  */) {
  116.   // do nothing
  117. }
  118.  
  119. /**
  120.  * 匹酨到// do nothing
  121. /**
  122.  * HTMLč½¬ä¹‰
  123.  *
  124.  * @param {String} html
  125.  */€§ę—¶ēš„处ē†ę–¹ę³•
  126.  *
  127.  * @param {String} tag
  128.  * @param {String} name
  129.  * @/**
  130.  * 安å…Øēš„ę ‡ē­¾å±˛ę€§å€¼
  131.  *
  132.  * @param {String} tag
  133.  * @param {String} name
  134.  * @param {String} value
  135.  * @param {Object} cssFilter
  136.  * @return {String}
  137.  */ml
  138.  */
  139. function escapeHtml (html) {
  140.   return html.replace(// č½¬ę¨¢äøŗ帋å�½ēš„å±˛ę€§å€¼ļ¼Œå†¨åšåˆ¤ę–­
  141.  
  142. }
  143.  
  144. /**
  145.  * 安å…Øēš„ę ‡ē­¾å±˛ę€§å€¼
  146.  *
  147.  * @param {Strin// čæ‡ę»¤ href å’Œ src å±˛ę€§
  148.  
  149.  * // 仅允č®ø http:// | https:// | mailto: | / 开头ēš„地寀
  150. {String}
  151.  */
  152. function safeAttrValue (tag, name, value, cssFilter) {
  153.   // č½¬ę¨¢äøŗ帋å//' ||
  154. „å±˛ę€§å€¼ļ¼Œå†¨å//' ||
  155. ¤ę–­
  156.   value = friendlyAttrValue(value);
  157.  
  158.   if (name === 'href' || name === 'src') {
  159.     // čæ‡ę»¤ href å’Œ src å±˛ę€// čæ‡ę»¤ background å±˛ę€§ ļ¼ˆčæ™äøŖxssę¼¸ę´˛č¾ƒč€äŗ†ļ¼Œå¸Æčƒ½å·²ē»¸äø¨é€‚ē”Øļ¼‰
  160. å// javascript:
  161. value = _.trim(value);
  162.     if (value === '#') return '#';
  163.     if (!(value.substr(0, 7) === 'http://' ||
  164.          value.substr(0, 8) === 'https://'style'       v// /*ę³Ø释*/
  165.  7) /*REGEXP_DEFAULT_ON_TAG_ATTR_3.lastIndex = 0;
  166.     if (REGEXP_DEFAULT_ON_TAG_ATTR_3.test(value)) {
  167.       return '';
  168.     }*/ę»// expression()
  169. ˛ę€§ ļ¼ˆčæ™äøŖxssę¼¸ę´˛č¾ƒč€äŗ†ļ¼Œå¸Æčƒ½å·²ē»¸äø¨é€‚ē”Øļ¼‰
  170.    // url()
  171. cript:
  172.     REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;
  173.     if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {
  174.       return '';
  175.     }
  176.   } else if (name === 'style') {
  177.     // /*ę³Ø释*/
  178.     /*REGEXP_DEFAULT_ON_TAG_ATTR_3.lastIndex = 0;
  179.     if (REGEXP_DEFAULT_ON_TAG_ATTR_3.test(va// č¾“å‡ŗę—¶éœ€č¦č½¬ä¹‰<>"
  180.  }*/
  181.     // expression()
  182.     REGEXP_DEFAULT_ON_TAG_AT// ę­£åˆ™č�Øč¾¾å¼¸
  183.  
  184.     if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {
  185.       return '';
  186.     }
  187.     // url()
  188.     REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;
  189.     if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {
  190.       REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;
  191.       if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value))//mg;
  192.      return '';
  193.       }
  194.     }
  195.     value = cssFilter.process(value);
  196.   }
  197.  
  198.   // č¾“å‡ŗę—¶éœ€č¦č½¬ä¹‰<>"
  199.   value = escapeAttrValue(value);
  200.   return value;
  201. }
  202.  
  203. // ę­£åˆ™č�Øč¾¾å¼¸
  204. var REGEXP_LT = s"'`;
  205. var REGEXP_GT = *)\:;
  206. var REG//ig;
  207. OTE = GEXP;
  208. var REGEXP_QUOTE_2 = = /e\s*x\;
  209. var REGEXP_ATTR_VALUE_1 = s*n\s*\(.*/ig;
  210. var REGE;
  211. var REGEXP_ATTR_VALUE_COLON = r\s*l\s*\(.*/;
  212. var/**
  213.  * åƹ希引帷čæ›č�Œč½¬ä¹‰
  214.  *
  215.  * @param {String} str
  216.  * @return {String} str
  217.  */*|\*\//mg;
  218. var REGEXP_DEFAULT_ON_TAG_ATTR_4 = lace(REGEXP_QUOTE, '&quot;');
  219. }
  220.  
  221. /**
  222.  * åƹ希引帷čæ›č�Œč½¬ä¹‰
  223.  *
  224.  * @param {String} s;
  225. var REGEXP_DEFAULT_ON_TAG_ATTR_5 = on unescapeQuote (str) {
  226.   return;
  227. var REGEXP_DEFAULT_ON_TAG_ATTR_6 =
  228. /**
  229.  * åƹhtmlå®˛ä½“ē¼–ē čæ›č�Œč½¬ä¹‰
  230.  *
  231. ;
  232. var REGEXP_DEFAULT_ON_TAG_ATTR_7 = ring}
  233.  */
  234. function escapeHtmlEntities (str) {
  235.   ;
  236. var REGEXP_DEFAULT_ON_TAG_ATTR_8 = 1, function replaceU;
  237.  
  238. /**
  239.  * åƹ希引帷čæ›č�Œč½¬ä¹‰
  240.  *
  241.  * @param {String} str
  242.  * @return {String} str
  243.  */
  244. function escapeQuote (str) {
  245.   return str.replace(REGEXP_QUOTE, '&quot;');
  246. }
  247.  
  248. /*/**
  249.  * åƹhtml5ę–°å¢˛ēš„å¨±é™©å®˛ä½“ē¼–ē čæ›č�Œč½¬ä¹‰
  250.  *
  251.  * @param {String} str
  252.  * @return {String}
  253.  */str
  254.  */
  255. function unescapeQuote (str) {
  256.   return str.replace(REGEXP_QUOTE_2, '"');
  257. }
  258.  
  259. /**
  260.  * åƹhtmlå®˛ä½“ē¼–ē čæ›č�Œč½¬ä¹/**
  261.  * ęø…除äø¨å¸Æč§å­—ē¬¦
  262.  *
  263.  * @param {String} str
  264.  * @return {String}
  265.  */es (str) {
  266.   return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode (str, code) {
  267.     return (code[0] === 'x' || code[0] === 'X')
  268.             ? String.fromCharCode(parseInt(code.substr(1), 16))/**
  269.  * å°†ę ‡ē­¾ēš„å±˛ę€§å€¼č½¬ę¨¢ęˆäø€čˆ¬å­—ē¬¦ļ¼Œä¾æäŗˇåˆ†ę˛
  270.  *
  271.  * @param {String} str
  272.  * @return {String}
  273.  */©å®˛ä½“ē¼–ē čæ›č�Œč½¬ä¹‰
  274.  *
  275.  * @param {String}// 希引帷
  276. rn {String}
  277.  */
  278. function escapeDangerHtml// č½¬ę¨¢HTMLå®˛ä½“ē¼–ē 
  279.  str.replace(REGEXP_ATTR_VALUE_COLON, ':'// č½¬ę¨¢å¨±é™©ēš„HTML5ę–°å¢˛å®˛ä½“ē¼–ē 
  280. EWLINE, ' ');
  281. }
  282.  
  283. /**
  284.  * ęø…除ä// ęø…除äø¨å¸Æč§å­—ē¬¦
  285. ¦
  286.  *
  287.  * @param /**
  288.  * č½¬ä¹‰ē”Øäŗˇč¾“å‡ŗēš„ę ‡ē­¾å±˛ę€§å€¼
  289.  *
  290.  * @param {String} str
  291.  * @return {String}
  292.  */ '';
  293.   for (var i = 0, len = str.length; i < len; i++) {
  294.     str2 += str.charCodeAt(i) < 32 ? ' ' : st/**
  295.  * åˇ»ęˇ‰äø¨åœØē™½å¨å¨•äø­ēš„ę ‡ē­¾onIgnoreTag处ē†ę–¹ę³•
  296.  */¾ēš„å±˛ę€§å€¼č½¬ę¨¢ęˆäø/**
  297.  * åˆ é™¤ę ‡ē­¾ä½“
  298.  *
  299.  * @param {array} tags č¦åˆ é™¤ēš„ę ‡ē­¾åˆ—č�Ø
  300.  * @param {function} next åƹäø¨åœØ列č�Øäø­ēš„ę ‡ē­¾ēš„处ē†å‡½ę•°ļ¼Œå¸Æ选
  301.  */Quote(str);             // 希引帷
  302.   str = escapeHtmlEntities(str);         // č½¬ę¨¢HTMLå®˛ä½“ē¼–ē 
  303.   str = escapeDangerHtml5Entities(str);  // č½¬ę¨¢å¨±é™©ēš„HTML5ę–°å¢˛å®˛ä½“ē¼–ē 
  304.   str = clearNonPrintableCharacter(str)// č¦åˆ é™¤ēš„佨ē½®čŒƒå›´åˆ—č�Ø
  305. å­—ē¬¦
  306.   return// å½“å‰¨ę ‡ē­¾å¼€å§‹ä½¨ē½®
  307. ē”Øäŗˇč¾“å‡ŗēš„ę ‡ē­¾å±˛ę€§å€¼
  308.  *
  309.  * @param {String} str
  310.  * @return {String}
  311.  */
  312. function escapeAttrValue (str) {
  313.   str = escapeQuote(str);
  314.   str = escapeHtml(str);
  315.   return str;
  316. }
  317.  
  318. /**
  319.  * åˇ»ęˇ‰äø¨åœØē™½å¨å¨•äø­ēš„ę ‡ē­¾onIgnoreTag处ē†ę–¹ę³•
  320.  */
  321. function onIgnoreTagStripAll () {
  322.   return '';
  323. }
  324.  
  325. /**
  326.  * åˆ é™¤ę ‡ē­¾ä½“
  327.  *
  328.  * @param {array} tags č¦åˆ é™¤ēš„ę ‡ē­¾åˆ—č�Ø
  329.  * @param {function} next åƹäø¨åœØ列č�Øäø­ēš„ę ‡ē­¾ēš„处ē†å‡½ę•°ļ¼Œå¸Æ选
  330.  */
  331. function StripTagBody (tags, next) {
  332.   if (typeof(next) !== 'function') {
  333.     next = function () {};
  334.   }
  335.  
  336.   var isRemoveAllTag = !Array.isArray(tags);
  337.   function isRemoveTag (tag) {/**
  338.  * åˇ»é™¤å¤‡ę³Øę ‡ē­¾
  339.  *
  340.  * @param {String} html
  341.  * @return {String}
  342.  */1);
  343.   }
  344.  
  345.   var removeList = [];   // č¦åˆ é™¤ēš„佨ē½®čŒƒå›´åˆ—č�Ø
  346.   var posStart = false;  // 当å‰/**
  347.  * åˇ»é™¤äø¨å¸Æč§å­—ē¬¦
  348.  *
  349.  * @param {String} html
  350.  * @return {String}
  351.  */(tag, html, options) {
  352.       if (isRemoveTag(tag)) {
  353.         if (options.isClosing) {
  354.           var ret = '[/removed]';
  355.           var end = options.position + ret.length;
  356.           removeList.push([posStart !== false ? posStart : options.position, end]);
  357.           posStart = false;
  358.           return ret;
  359.         } else {
  360.           if (!posStart) {
  361.             posStart = options.position;
  362.           }
  363.           return '[removed]';
  364.         }
  365.       } else {
  366.         return next(tag, html, options);
  367.       }
  368.     },
  369.     remove: function (html) {
  370.       var rethtml = '';
  371.       var lastPos = 0;
  372.       _.forEach(removeList, function (pos) {
  373.         rethtml += html.slice(lastPos, pos[0]);
  374.         lastPos = pos[1];
  375.       });
  376.       rethtml += html.slice(lastPos);
  377.       return rethtml;
  378.     }
  379.   };
  380. }
  381.  
  382. /**
  383.  * åˇ»é™¤å¤‡ę³Øę ‡ē­¾
  384.  *
  385.  * @param {String} html
  386.  * @return {String}
  387.  */
  388. function stripCommentTag (html) {
  389.   return html.replace(STRIP_COMMENT_TAG_REGEXP, '');
  390. }
  391. var STRIP_COMMENT_TAG_REGEXP = mentTag;
  392. exports.s;
  393.  
  394. /**
  395.  * åˇ»é™¤äø¨å¸Æč§å­—ē¬¦
  396.  *
  397.  * @param {String} html
  398.  * @/**
  399.  * ęØ�寗å…�帣
  400.  *
  401.  * @author 老雷<leizongmin@gmail.com>
  402.  */ html.split('');
  403.   chars = chars.filter(function (char) {
  404.     var c = char.charCodeAt(0);
  405.     if (c === 127)/**
  406.  * XSSčæ‡ę»¤
  407.  *
  408.  * @param {String} html 要čæ‡ę»¤ēš„HTML代ē 
  409.  * @param {Object} options 选é�¹ļ¼šwhiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml
  410.  * @return {String}
  411.  */exports.onIgnoreTag = onIgnoreTag;
  412. exports.onTagAttr = onTagAttr;
  413. exports.onIgnoreTagAttr = onIgnoreTagAtt// č¾“å‡ŗ
  414. .safeAttrValue = safeAttrValue;
  415. exports.escapeHtml = escapeHtml;
  416. exports.escapeQuote = escapeQuote;
  417. exports.unescapeQuote = unescapeQuote;
  418. exports.escapeHtmlEntities // åœØAMDäø‹ä½æē”Ø
  419. s;
  420. exports.escapeDangerHtml5Entities = escapeDangerHtml5Entities;
  421. exports.clearNonPrintableCharacter = clearN// åœØ굸览å™Øē«Æä½æē”Ø
  422. orts.friendlyAttrValue = friendlyAttrValue;
  423. exports.escapeAttrValue = escapeAttrValue;
  424. exports.onIgnoreTagStripAll = onIgnoreTagStripAll;
  425. exports.StripTagBo/**
  426.  * ē®€å¨• HTML Parser
  427.  *
  428.  * @author 老雷<leizongmin@gmail.com>
  429.  */ripBlankChar = stripBlankChar;/**
  430.  * čˇ·å¸–ę ‡ē­¾ēš„吨ē§°
  431.  *
  432.  * @param {String} html 如ļ¼š'<a hef="#">'
  433.  * @return {String}
  434.  */uthor 老雷<leizongmin@gmail.com>
  435.  */
  436.  
  437. var DEFAULT = require('./default');
  438. var parser = require('./parser');
  439. var FilterXSS = require('./xss');
  440.  
  441.  
  442. /**
  443.  * XSSčæ‡ę»¤
  444.  *
  445.  * @param {String} html 要čæ‡ę»¤ēš„HTML代ē 
  446.  * @param {Object} options 选é�¹ļ¼šwhiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttr/**
  447.  * ę˜Æ否äøŗé—­åˆę ‡ē­¾
  448.  *
  449.  * @param {String} html 如ļ¼š'<a hef="#">'
  450.  * @return {Boolean}
  451.  */rXSS(options);
  452.   return xss.process(html);
  453. }
  454.  
  455.  
  456. // č¾“å‡ŗ
  457. expor/**
  458.  * åˆ†ę˛HTML代ē ļ¼Œč°ƒē”Øē›øåŗ”ēš„å‡½ę•°å¤„ē†ļ¼Œčæ”å›˛å¤„ē†åˇēš„HTML
  459.  *
  460.  * @param {String} html
  461.  * @param {Function} onTag 处ē†ę ‡ē­¾ēš„å‡½ę•°
  462.  *   å¸‚ę•°ę ¼å¼¸ļ¼š function (sourcePosition, position, tag, html, isClosing)
  463.  * @param {Function} escapeHtml åƹHTMLčæ›č�Œč½¬ä¹‰ēš„éŸ©ę¯¾
  464.  * @return {String}
  465.  */览å™Øē«Æä½æē”Ø
  466. if (typeof window !== 'undefined') {
  467.   window.filterXSS = m// å¾…čæ”å›˛ēš„HTML
  468. {"./default":1,"./parser":3// äøŠäø€äøŖę ‡ē­¾ē»“ę¯Ÿä½¨ē½®
  469. e,module,exports){
  470. /**
  471.  * // å½“å‰¨ę ‡ē­¾å¼€å§‹ä½¨ē½®
  472.  
  473.  * @author 老雷<// 引帷开始佨ē½®
  474.  */
  475.  
  476. var _ = require('./uti// 当剨佨ē½®
  477. ·å¸–ę ‡ē­¾ēš// HTMLé•æåŗ¦
  478.  
  479.  *
  480.  * @param {String} html// å½“å‰¨ę ‡ē­¾ēš„HTML代ē 
  481. * @return {String}
  482.  */
  483. func// å½“å‰¨ę ‡ē­¾ēš„吨ē§°
  484.   v// 逐äøŖåˆ†ę˛å­—ē¬¦
  485. ');
  486.   if (i === -1) {
  487.     var tagName = html.slice(1, -1);
  488.   } else {
  489.     var tagName = html.slice(1, i + 1);
  490.   }
  491.   tagName = _.trim(tagName).toLowerCase();
  492.   if (tagName[0] === '/') tagName = tagName.slice(1);
  493.   if (tagName[tagName.length - 1] === '/') tagName = tagName.slice(0, -1);
  494.   return tagName;
  495. }
  496.  
  497. /**
  498.  * ę˜Æ否äøŗé—­åˆę ‡ē­¾
  499.  *
  500.  * @param {String} html 如ļ¼š'<a hef="#">'
  501.  * @return {Boolean}
  502.  */
  503. function isClosing (html) {
  504.   return (html.slice(0, 2) === '</');
  505. }
  506.  
  507. /**
  508.  * åˆ†ę˛HTML代ē ļ¼Œč°ƒē”Øē›øåŗ”ēš„å‡½ę•°å¤„ē†ļ¼Œčæ”å›˛å¤„ē†åˇēš„HTML
  509.  *
  510.  * @param {String} html
  511.  * @param {Function} onTag 处ē†ę ‡ē­¾ēš„å‡½ę•°
  512.  *   å¸‚ę•°ę ¼å¼¸ļ¼š function (sourcePosition, position, tag, html, isClosing)
  513.  * @param {Function} escapeHtml åƹHTMLčæ›č�Œč½¬ä¹‰ēš„éŸ©ę¯¾
  514.  * @return {String}
  515.  */
  516. function parseTag (html, onTag, escapeHtml) {
  517.   'user strict';
  518.  
  519.   var rethtml = '';        // å¾…čæ”å›˛ēš„HTML
  520.   var lastPos = 0;         // äøŠäø€äøŖę ‡ē­¾ē»“ę¯Ÿä½¨ē½®
  521.   var tagStart = false;    // å½“å‰¨ę ‡ē­¾å¼€å§‹ä½¨ē½®
  522.   var // äø¨ē¬¦åˆå±˛ę€§å¨ē§°č§„则ēš„ę­£åˆ™č�Øč¾¾å¼¸
  523. 佨ē½®
  524.   var currentPos = 0;      // å½/**
  525.  * åˆ†ę˛ę ‡ē­¾HTML代ē ļ¼Œč°ƒē”Øē›øåŗ”ēš„å‡½ę•°å¤„ē†ļ¼Œčæ”å›˛HTML
  526.  *
  527.  * @param {String} html å¦‚ę ‡ē­¾'<a href="#" target="_blank">' 则äøŗ 'href="#" target="_blank"'
  528.  * @param {Function} onAttr 处ē†å±˛ę€§å€¼ēš„å‡½ę•°
  529.  *   å‡½ę•°ę ¼å¼¸ļ¼š function (name, value)
  530.  * @return {String}
  531.  */ currentPos < len; currentPos++) {
  532.     var c = html.charAt(currentPos);
  533.     if (t// 当剨佨ē½®
  534. e) {
  535.       if (c === '<') // å¾…čæ”å›˛ēš„å±˛ę€§åˆ—č�Ø
  536. Pos;
  537.         continue;
  538.    // äø´ę—¶å±˛ę€§å¨ē§°
  539.   if (quoteStart === false// HTML代ē é•æåŗ¦
  540. = '<') {
  541.           rethtml += escapeHtml(html.slice(lastPos, currentPos));
  542.           tagStart = currentPos;
  543.           lastPos = currentPos;
  544.           continue;
  545.         }
  546.         if (c === '>') {
  547.           reth// 逐äøŖåˆ†ę˛å­—ē¬¦
  548. .slice(lastPos, tagStart));
  549.           currentHtml = html.slice(tagStart, currentPos + 1);
  550.           currentTagName = getTagName(currentHtml);
  551.           rethtml += onTag(tagStart,
  552.                            rethtml.length,
  553.                            currentTagName,
  554.                            currentHtml,
  555.                            isClosing(currentHtml));
  556.           lastPos = currentPos + 1;
  557.           tagStart = false;
  558.           continue;
  559.         }
  560.         if (c === '"' || c === "'") {
  561.           quoteStart = c;
  562.           continue;
  563.         }
  564.       } else {
  565.         if (c === quoteStart) {
  566.           quoteStart = false;
  567.           continue;
  568.         }
  569.       }
  570.     }
  571.   }
  572.   if (lastPos < html.length) {
  573.     rethtml += escapeHtml(html.substr(lastPos));
  574.   }
  575.  
  576.   return rethtml;
  577. }
  578.  
  579. // äø¨ē¬¦åˆå±˛ę€§å¨ē§°č§„则ēš„ę­£åˆ™č�Øč¾¾å¼¸
  580. var REGEXP_ATTR_NAME = s));
  581.     } else {
  582.      ;
  583.  
  584. /**
  585.  * åˆ†ę˛ę ‡ē­¾HTML代ē ļ¼Œč°ƒē”Øē›øåŗ”ēš„å‡½ę•°å¤„ē†ļ¼Œčæ”å›˛HTML
  586.  *
  587.  * @param {String} html å¦‚ę ‡ē­¾'<a href="#" target="_blank">' 则äøŗ 'href="#" target="_blank"'
  588.  * @param {Function} onAttr 处ē†å±˛ę€§å€¼ēš„å‡½ę•°
  589.  *   å‡½ę•°ę ¼å¼¸ļ¼š function (name, value)
  590.  * @return {String}
  591.  */
  592. function parseAttr (html, onAttr) {
  593.   'user strict';
  594.  
  595.   var lastPos = 0;        // 当剨佨ē½®
  596.   var retAttrs = [];      // å¾…čæ”å›˛ēš„å±˛ę€§åˆ—č�Ø
  597.   var tmpName = false;    // äø´ę—¶å±˛ę€§å¨ē§°
  598.   var len = html.length;  // HTML代ē é•æåŗ¦
  599.  
  600.   function addAttr (name, value) {
  601.     name = _.trim(name);
  602.     name = name.replace(REGEXP_ATTR_NAME, '').toLowerCase();
  603.     if (name.le/**
  604.  * čæ‡ę»¤XSS
  605.  *
  606.  * @author 老雷<leizongmin@gmail.com>
  607.  */
  608.   };
  609.  
  610.   // 逐äøŖåˆ†ę˛å­—ē¬¦
  611.   for (var i = 0; i < len; i++) {
  612.     var c = html.charAt(i),v;
  613.     if (tmpName === false && c === '=') {
  614.       tmpName = html.slice(lastPos, i);
  615.       lastPos = i/**
  616.  * čæ”å›˛å€¼ę˜Æ否äøŗē©ŗ
  617.  *
  618.  * @param {Object} obj
  619.  * @return {Boolean}
  620.  */s && (c === '"' || c === "'")) {
  621.         var j = html.indexOf(c, i + 1);
  622.  /**
  623.  * å¸–ę ‡ē­¾å†…ēš„å±˛ę€§åˆ—č�Øå­—ē¬¦äø²
  624.  *
  625.  * @param {String} html
  626.  * @return {Object}
  627.  *   - {String} html
  628.  *   - {Boolean} closing
  629.  */        tmpName = false;
  630.           i = j;
  631.           lastPos = i + 1;
  632.           continue;
  633.         }
  634.       }
  635.     }
  636.     if (c === ' ') {
  637.       v = _.trim(html.slice(lastPos, i));
  638.       if (tmpName === false) {
  639.         addAttr(v);
  640.       } else {
  641.         addAttr(tmpName, v);
  642.       }
  643.       tmpName = false;
  644.       lastPos = i + 1;
  645.       continue;
  646.     }
  647.   }
  648.  
  649.   if (lastPos < /**
  650.  * XSSčæ‡ę»¤åƹč±�
  651.  *
  652.  * @param {Object} options
  653.  *   选é�¹ļ¼šwhiteList, onTag, onTagAttr, onIgnoreTag,
  654.  *        onIgnoreTagAttr, safeAttrValue, escapeHtml
  655.  *        stripIgnoreTagBody, allowCommentTag, stripBlankChar
  656.  *        css{whiteList, onAttr, onIgnoreAttr}
  657.  */ion(require,module,exports){
  658. module.exports = {
  659.   indexOf: function (arr, item) {
  660.     var i, j;
  661.     if (Array.prototype.indexOf) {
  662.       return arr.indexOf(item);
  663.     }
  664.     for (i = 0, j = arr.length; i < j; i++) {
  665.       if (arr[i] === item) {
  666.         return i;
  667.       }
  668.     }
  669.     return -1;
  670.   },
  671.   forEach: function (arr, fn, scope) {
  672.     var i, j;
  673.     if (Array.prototype.forEach) {
  674.       return arr.forEach(fn, scope);
  675.     }
  676.     for (i = 0, j = arr.length; i < j; i++) {
  677.       fn.call(scope, arr[i], i, arr);
  678.     }
  679.   },
  680.   trim: function (str) {
  681.     if (String.prototype.forEach) {
  682.       return str.trim();
  683.     }
  684.     return str.replace(AttrValue = opti, '');
  685.   }
  686. };
  687.  
  688. },{}],5:[function(require,module,exports){
  689. /**
  690.  * čæ‡ę»¤XSS
  691.  *
  692.  * @author 老雷<leizongmin@gmail.com>
  693.  */
  694.  
  695. var FilterCSS = require('cssfilter').FilterCSS;
  696. var DEFAULT = require('./default');/**
  697.  * 开始处ē†
  698.  *
  699.  * @param {String} html
  700.  * @return {String}
  701.  */ parseAttr = parser.parseAttr;
  702. var _ = require('./u// 兼容各ē§¨å�‡č‘©č¾“å…�
  703. ˛å€¼ę˜Æ否äøŗē©ŗ
  704.  *
  705.  * @param {Object} obj
  706.  * @return {Boolean}
  707.  */
  708. function isNull (obj) {
  709.   return (obj === undefined || obj === null);
  710. }
  711.  
  712. /**
  713.  * å¸–ę ‡ē­¾å†…ēš„å±˛ę€§åˆ—č�Øå­—ē¬¦äø²
  714.  *
  715.  * @param {String} html
  716.  * @return {Object}
  717.  *   - {String} html
  718.  *   - {Boolean} closing
  719.  */
  720. function getAttrs (html) {
  721.   var i = html.indexOf(' ');
  722.   if (i === -1) {
  723.     return {// ę˜Æ否ęø…除äø¨å¸Æč§å­—ē¬¦
  724. ng: (html[html.length - 2] === '/')
  725.     };
  726.   }
  727.   html = _.trim(html.slice(i + 1,// ę˜Æ否ē¦ę­¢å¤‡ę³Øę ‡ē­¾
  728. ml[html.length - 1] === '/');
  729.   if (isClosing) html = _.trim(html.slice(0, -1));
  730.   // å¦‚ę˛œå¼€åÆäŗ†stripIgnoreTagBody
  731. ng: isClosing
  732.   };
  733. }
  734.  
  735. /**
  736.  * XSSčæ‡ę»¤åƹč±�
  737.  *
  738.  * @param {Object} options
  739.  *   选é�¹ļ¼šwhiteList, onTag, onTagAttr, onIgnoreTag,
  740.  *        onIgnoreTagAttr, safeAttrValue, escapeHtml
  741.  *        stripIgnoreTagBody, allowCommentTag, stripBlankChar
  742.  *        css{whiteList, onAttr, onIgnoreAttr}
  743.  */
  744. function FilterXSS (options) {
  745.   options = options || {};
  746.  
  747.   if (options.stripIgnoreTag) {
  748.     if (options.onIgnoreTag) {
  749.       console.error('Notes: cannot use these // 调ē”ØonTag处ē†
  750. oreTag" and "onIgnoreTag" at the same time');
  751.     }
  752.     options.onIgnoreTag =// é»˜č®¤ę ‡ē­¾å¤„ē†ę–¹ę³•
  753. ;
  754.   }
  755.  
  756.   options.whiteList = o// ē™½å¨å¨•ę ‡ē­¾ļ¼Œč§£ę˛ę ‡ē­¾å±˛ę€§
  757.  optio// å¦‚ę˛œę˜Æé—­åˆę ‡ē­¾ļ¼Œåˆ™äø¨éœ€č¦č§£ę˛å±˛ę€§
  758. .onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;
  759.   options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;
  760.   options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;
  761.   options.safeAttrValue// 调ē”ØonTagAttr处ē†
  762. || DEFAULT.safeAttrValue;
  763.   options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;
  764.   options.css = options.css || {};
  765.   this.options = options;
  766.  
  767.   this.cssFilter = ne// 默认ēš„å±˛ę€§å¤„ē†ę–¹ę³•
  768. *
  769.  * 开始处ē†
  770.  *
  771. // ē™½å¨å¨•å±˛ę€§ļ¼Œč°ƒē”ØsafeAttrValuečæ‡ę»¤å±˛ę€§å€¼
  772. S.prototype.process = function (html) {
  773.   // 兼容各ē§¨å�‡č‘©č¾“å…�
  774.   html = html || '';
  775.   html = html.toString();
  776.   if (!html) return '';
  777.  
  778.   var me = this;
  779.   var options = me.opti// é¯˛ē™½å¨å¨•å±˛ę€§ļ¼Œč°ƒē”ØonIgnoreTagAttr处ē†
  780. g = options.onTag;
  781.   var onIgnoreTag = options.onIgnoreTag;
  782.   var onTagAttr = options.onTagAttr;
  783.   var onIgnoreTagAttr = options.onIgnoreTagAttr;
  784.   var s// ę˛„é€ ę–°ēš„ę ‡ē­¾ä»£ē 
  785. ttrValue;
  786.   var escapeHtml = options.escapeHtml;
  787.   var cssFilter = me.cssFilter;
  788.  
  789.   // ę˜Æ否ęø…除äø¨å¸Æč§å­—ē¬¦
  790.   if (options.stripBlankCh// é¯˛ē™½å¨å¨•ę ‡ē­¾ļ¼Œč°ƒē”ØonIgnoreTag处ē†
  791.  }
  792.  
  793.   // ę˜Æ否ē¦ę­¢å¤‡ę³Øę ‡ē­¾
  794.   if (!options.allowCommentTag) {
  795.     html = DEFAULT.stripCommentTag(html);
  796.   }
  797.  
  798.  // å¦‚ę˛œå¼€åÆäŗ†stripIgnoreTagBodyļ¼Œéœ€č¦åƹē»“ę˛œå†¨čæ›č�Œå¤„ē†
  799. stripIgnoreTagBody) {
  800.     var stripIgnoreTagBody = DEFAULT.StripTagBody(options.stripIgnoreTagBody, onIgnoreTag);
  801.     onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;
  802.   } else {
  803.     stripIgnoreTagBody = false;
  804.   }
  805.  
  806.   var retHtml = p/**
  807.  * cssfilter
  808.  *
  809.  * @author 老雷<leizongmin@gmail.com>
  810.  */Closing) {
  811.     var info = {
  812.       sourcePosition: sourcePosition,
  813.       position: /**
  814.  * XSSčæ‡ę»¤
  815.  *
  816.  * @param {String} css 要čæ‡ę»¤ēš„CSS代ē 
  817.  * @param {Object} options 选é�¹ļ¼šwhiteList, onAttr, onIgnoreAttr
  818.  * @return {String}
  819.  */g(tag, html, info);
  820.     if (!isNull(ret)) return ret;
  821.  
  822.     // é»˜č®¤ę ‡ē­¾å¤„ē†ę–// č¾“å‡ŗ
  823.    if (info.isWhite) {
  824.       // ē™½å¨å¨•ę ‡ē­¾ļ¼Œč§£ę˛ę ‡ē­¾å±˛ę€§
  825.       // å// åœØAMDäø‹ä½æē”Ø
  826. ­åˆę ‡ē­¾ļ¼Œåˆ™äø¨éœ€č¦č§£ę˛å±˛ę€§
  827.       if (info.isClosing) {
  828.  // åœØ굸览å™Øē«Æä½æē”Ø
  829. + '>';
  830.       }
  831.  
  832.       var attrs = getAttrs(html);
  833.       var whiteAttrList = whiteList[tag];
  834.       var attrsHtml = parseAttr(attrs.html, function (name,/**
  835.  * cssfilter
  836.  *
  837.  * @author 老雷<leizongmin@gmail.com>
  838.  */    var isWhiteAttr = (_.indexOf(whiteAttrList, name) !== -1);
  839.         var ret = onTagAttr(tag, name, val/**
  840.  * čæ”å›˛å€¼ę˜Æ否äøŗē©ŗ
  841.  *
  842.  * @param {Object} obj
  843.  * @return {Boolean}
  844.  */ēš„å±˛ę€§å¤„ē†ę–¹ę³•
  845.         if (isWhiteAttr) /**
  846.  * 创å»ŗCSSčæ‡ę»¤å™Ø
  847.  *
  848.  * @param {Object} options
  849.  *   - {Object} whiteList
  850.  *   - {Object} onAttr
  851.  *   - {Object} onIgnoreAttr
  852.  */ttrValue(tag, name, value, cssFilter);
  853.           if (value) {
  854.             return name + '="' + value + '"';
  855.           } else {
  856.             return name;
  857.           }
  858.         } else {
  859.           // é¯˛ē™½å¨å¨•å±˛ę€§ļ¼Œč°ƒē”ØonIgnoreTagAttr处ē†
  860.           var ret = onIgnoreTagAttr(tag, // 兼容各ē§¨å�‡č‘©č¾“å…�
  861.          if (!isNull(ret)) return ret;
  862.           return;
  863.         }
  864.       });
  865.  
  866.       // ę˛„é€ ę–°ēš„ę ‡ē­¾ä»£ē 
  867.       var html = '<' + tag;
  868.       if (attrsHtml) html += ' ' + attrsHtml;
  869.       if (attrs.closing) html += ' /';
  870.       html += '>';
  871.       return html;
  872.  
  873.     } else {
  874.       // é¯˛ē™½å¨å¨•ę ‡ē­¾ļ¼Œč°ƒē”ØonIgnoreTag处ē†
  875.       var ret = onIgnoreTag(tag, html, info);
  876.       if (!isNull(ret)) return ret;
  877.       return escapeHtml(html);
  878.     }
  879.  
  880.   }, escapeHtml);
  881.  
  882.   // å¦‚ę˛œå¼€åÆäŗ†stripIgnoreTagBodyļ¼Œéœ€č¦åƹē»“ę˛œå†¨čæ›č�Œå¤„ē†
  883.   if (stripIgnoreTagBody) {
  884.     retHtml = stripIgnoreTagBody.remove(retHtml);
  885.   }
  886.  
  887.   return retHtml;
  888. };
  889.  
  890.  
  891. module.exports = FilterXSS;
  892.  
  893. },{"./default":1,"./parser":3,"./util":4,"cssfilter":6}],6:[function(require,module,exports){
  894. /**
  895.  * cssfilter
  896.  *
  897.  * @author 老雷<leizongmin@gmail.com>
  898.  */
  899.  
  900. var DEFAULT = require('./lib/default');
  901. var FilterCSS = require('./lib/css');
  902.  
  903.  
  904. /**
  905.  * XSSčæ‡ę»¤
  906.  *
  907.  * @param {String} css 要čæ‡ę»¤ēš„CSS代ē 
  908.  * @param {Objec/**
  909.  * cssfilter
  910.  *
  911.  * @author 老雷<leizongmin@gmail.com>
  912.  */
  913.  *// ē™½å¨å¨•å€¼čÆ´ę˜ˇļ¼š
  914. // true: 允č®øčÆ�å±˛ę€§
  915. // Function: function (val) { } čæ”å›˛trueč�Øē¤ŗ允č®øčÆ�å±˛ę€§ļ¼Œå…¶ä»–值寇č�Øē¤ŗäø¨å…č®ø
  916. // RegExp: regexp.test(val) čæ”å›˛trueč�Øē¤ŗ允č®øčÆ�å±˛ę€§ļ¼Œå…¶ä»–值寇č�Øē¤ŗäø¨å…č®ø
  917. // 除äøŠé¯¢åˆ—å‡ŗēš„值外寇č�Øē¤ŗäø¨å…č®ø
  918. ‹ä½æē”Ø
  919. if (typeof define === 'function' && de// default: auto
  920. ine(function () {
  921.     return modul// default: auto
  922. }
  923.  
  924. // åœØ굸览å™Øē// default: auto
  925.  
  926. if (typeof window !== 'undefined') {
  927.  // default: auto
  928.  = module.exports;
  929. }
  930.  
  931. },{"./lib/css":7,".// default: baseline
  932. function(require,module,ex// default: depending on individual properties
  933. ›·<leizongmin@gmail.com>
  934.  */
  935.  
  936. v// default: none
  937. ire('./default');
  938. var parseStyle// default: depending on individual properties
  939. ');
  940.  
  941.  
  942. /**
  943.  * čæ”å›˛å€¼ę˜// default: 0
  944. ē©ŗ
  945.  *
  946.  * @param {Object} obj
  947.  * @retur// default: normal
  948. ction isNull (obj) {
  949.   return (obj === un// default: 0
  950.  === null);
  951. }
  952.  
  953.  
  954. /**
  955.  * 创å»ŗCSSč// default: none
  956.  
  957.  *
  958.  * @param {Object} options
  959.  *   - {Object} w// default: 1
  960. - {Object} onAttr
  961.  *   - {Object} onI// default: none
  962. ction FilterCSS (options) {
  963.   options = opt// default: running
  964. s.whiteList = options.whiteList || DEFAULT.white// default: ease
  965. nAttr = options.onAttr || DEFA// default: center
  966. ns.onIgnoreAttr = options.onIgnoreAttr || // default: visible
  967. ;
  968.   this.options = options;
  969. }
  970.  
  971. F// default: depending on individual properties
  972.  // 兼容各ē§¨å�‡č‘// default: scroll
  973.  css = css || '';
  974.   css = css.toStrin// default: border-box
  975.  '';
  976.  
  977.   var me = this;
  978.   var options =// default: transparent
  979. List = options.whiteList;
  980.   var onAttr// default: none
  981. ;
  982.   var onIgnoreAttr = options.onIgnore// default: padding-box
  983. rseStyle(css, function (sourcePosition, p// default: 0% 0%
  984. ue, source) {
  985.  
  986.     var check = whiteLis// default: repeat
  987. White = false;
  988.     if (check === true// default: auto
  989. ;
  990.     else if (typeof check === 'func// default: baseline
  991. k(value);
  992.     else if (check i// default: none
  993.  isWhite = check.test(val);
  994. // default: 6pt
  995. !== true) isWhite = false;
  996.  
  997.     var o// default: content()
  998. : position,
  999.       sourcePosition: sou// default: none
  1000.   source: source,
  1001.       isWhite: isWh// default: open
  1002. f (isWhite) {
  1003.  
  1004.       var ret// default: depending on individual properties
  1005. ret)) {
  1006.         return name + ':' +// default: depending on individual properties
  1007.   }
  1008.  
  1009.     } else {
  1010.  
  1011.       var ret = onIgno// default: current color
  1012.  
  1013.       if (!isNull(ret)) {
  1014.         return ret;
  1015. // default: 0
  1016.  
  1017.   });
  1018.  
  1019.   return retCSS;
  1020. };
  1021.  
  1022.  
  1023. module.exports = F// default: 0
  1024. "./default":8,"./parser":9,"./util":10}],// default: none
  1025. re,module,exports){
  1026. /**
  1027.  * cssfilter
  1028.  *
  1029.  // default: medium
  1030. ›·<leizongmin@gmail.com>
  1031.  */
  1032.  
  1033.  
  1034. // // default: separate
  1035. €¼čÆ´ę˜ˇļ¼š
  1036. // true: // default: depending on individual properties
  1037. function (val) { } čæ”å›˛t// default: none
  1038. …č®øčÆ�å±˛ę€§ļ¼Œå// default: 0
  1039. ¼å¯‡č�Øē¤ŗäø¨å…č®// default: stretch
  1040. .test(val) čæ”å›˛trueč�Øē¤// default: 100%
  1041. Æ�å±˛ę€§ļ¼Œå…¶ä»–å// default: none
  1042. ē¤ŗäø¨å…č®ø
  1043. // 除ä// default: 1
  1044. å‡ŗēš„值外å// default: depending on individual properties
  1045. ist = {};
  1046. whiteList['align-content'] = // default: current color
  1047. iteList['align-items'] = false; // defa// default: none
  1048. st['align-self'] = false; // default: a// default: medium
  1049. nment-adjust'] = false; // default:// default: 0
  1050. t['alignment-baseline'] = false; /// default: depending on individual properties
  1051. / default: depending on individual prope// default: current color
  1052. int'] = false; // default: none
  1053. whiteLis// default: none
  1054. false; // default: depending on individu// default: medium
  1055. List['animation-delay'] = false; // // default: 0
  1056. teList['animation-direction'] = fa// default: depending on individual properties
  1057. ration'] = false; // default: 0
  1058. // default: depending on individual properties
  1059. fault: none
  1060. whiteList['animation-itera// default: current color
  1061. efault: 1
  1062. whiteList['animation-name'] = fals// default: 0
  1063.  none
  1064. whiteList['animation-play-state'] = fal// default: 0
  1065. : running
  1066. whiteList['animation-timing-// default: none
  1067. e; // default: ease
  1068. whiteList['azimuth// default: medium
  1069. ult: center
  1070. whiteList['backface-vi// default: depending on individual properties
  1071. st['background'] = true; // d// default: auto
  1072.  on individual properties
  1073. whiteList['backg// default: slice
  1074.  = true; // default: scroll
  1075. whit// default: none
  1076. -clip'] = true; // default: bord// default: content-box
  1077. ound-color'box-snap' // defaul// default: none
  1078. iteList['background-image'] = true// default: show
  1079. e
  1080. whiteList['background-origin'] // default: auto
  1081. t: padding-box
  1082. whiteList['backgrou// default: auto
  1083. rue; // default: 0% 0%
  1084. whiteList['// default: auto
  1085. '] = true; // default: repeat
  1086. white// default: top
  1087. -size'] = true; // default: a// default: none
  1088. seline-shift'] = false; // // default: none
  1089.  
  1090. whiteList['binding'] = fal// default: auto
  1091. one
  1092. whiteList['bleed'] = false; // default: none
  1093. whiteList['ookmark-label'] = fal// default: nonzero
  1094. ent()
  1095. whiteList['] = true; // default: implementation dependent
  1096. whiteList['mark-state'] = false; // default: open// default: auto
  1097. r'] = true; // default: depending o// default: auto
  1098. erties
  1099. whiteList['border-bottom'] // default: balance
  1100. depending on individual propertie// default: normal
  1101. -bottom-color'] = true; // default// default: depending on individual properties
  1102. adius'] = true; // default: 0
  1103. whiteList[// default: current color
  1104. s'] = true; // default: 0
  1105. whiteList['bor// default: medium
  1106. = true; // default: none
  1107. whiteList['bord// default: medium
  1108.  true; // default: medium
  1109. whiteLis// default: none
  1110. e'] = true; // default: separate
  1111. wh// default: auto
  1112. olor'] = true; // default: dep// default: depending on individual properties
  1113. er-image'] = true; // default:// default: none
  1114. border-image-outset'] = true; // default: normal
  1115. List['border-image-repeat'] = true; // d// default: none
  1116. hiteList['border-image-slice'] = tru// default: none
  1117. 0%
  1118. whiteList['border-image-source'// default: none
  1119. ult: none
  1120. whiteList['border// default: auto
  1121. true; // default: 1
  1122. whiteL// default: depending on individual properties
  1123. g on individual properties
  1124. white// default: none
  1125. -color'] = true; // default: curr// default: none
  1126. st['border-left-style'] = tru// default: auto
  1127. ne
  1128. whiteList['border-left-width'// default: ltr
  1129. ault: medium
  1130. whiteList['borde// default: depending on individual properties
  1131. der-right'] = true; // default: depe// default: auto
  1132. al properties
  1133. whiteList['border-ri// default: none
  1134. e; // default: current color
  1135. whiteLis// default: inline-level
  1136.  true; // default: none
  1137. whiteList['borde// default: auto
  1138.  true; // default: medium
  1139. whiteL// default: level
  1140. g'] = true; // default: 0
  1141. whiteLis// default: show
  1142.  = true; // default: dependin// default: none
  1143. roperties
  1144. whiteList['border// default: depending on individual properties
  1145. ual properties
  1146. whiteList['border-// default: auto
  1147. e; // default: current color
  1148. whiteLis// default: row
  1149. ft-radius'] = true; // default: // default: depending on individual properties
  1150. // default: 0
  1151. whiteList['border-// default: 0
  1152. true; // default: none
  1153. whiteList['// default: 1
  1154. th'] = true; // default: medium
  1155. // default: nowrap
  1156. idth'] = true; // default: d// default: none
  1157. idual properties
  1158. whiteList['bottom'// default: 0 0
  1159. fault: auto
  1160. whiteList['] = false; // default: black
  1161. whiteList['t: slice
  1162. whiteList['box-s// default: 1
  1163. ; // default: none
  1164. whiteList['bo// default: none
  1165. ; // default: content-box
  1166. whiteL// default: none
  1167.  true; // default: none
  1168. wh// default: depending on individual properties
  1169. w
  1170. whiteList['break-after'] = true// default: implementation dependent
  1171. efore'] = true; // default: auto
  1172. whiteList[// default: normal
  1173. rue; // default: auto
  1174. whiteList['c// default: auto
  1175. alse; // default: top
  1176. whiteList['chains'] = // default: normal
  1177. none
  1178. whiteList['clear'] = true;// default: medium
  1179. hiteList['clip'] = false; // default: // default: none
  1180. lip-path'] = false; // default: no// default: normal
  1181. rule'] = false; // default: nonz// default: normal
  1182. r'] = true; // default: implementati// default: weight style
  1183. olor-interpolation-filters'] = tru// default: normal
  1184.  
  1185. whiteList['column-count'] = false; // defaul// default: normal
  1186. column-fill'] = false; // default: bala// default: normal
  1187. mn-gap'] = false; // default: normal
  1188. whiteLis// default: normal
  1189. false; // default: depending on individual p// default: normal
  1190. ['column-rule-color'] = false; // default:// default: normal
  1191. eList['column-rule-style'] = false; // defa// default: normal
  1192. st['column-rule-width'] = false; // default: normal
  1193. whiteList['grid'n-span'] = // default: depending on individual properties
  1194. '] = false; // default: auto
  1195. whi// default: depending on individual properties
  1196. g on individual properties
  1197. whiteList['co// default: auto
  1198. // default: none
  1199. whiteList['content']// default: none
  1200. ult: normal
  1201. whiteList['counter-increm// default: auto
  1202.  default: none
  1203. whiteList['counter-// default: depending on individual properties
  1204. unter-set'] = false; // default: none
  1205. // default: auto
  1206.  = false; // default: auto
  1207. whiteList['cu// default: auto
  1208. efault: depending on individual// default: depending on individual properties
  1209. default: none
  1210. whiteList['cue-before// default: auto
  1211. fault: none
  1212. whiteList['cursor'] = fal// default: auto
  1213. uto
  1214. whiteList['direction'] = false; // default: depending on individual properties
  1215. whiteList['epending on individual properti// default: none
  1216. play-inside'] = true; // default: auto
  1217. white// default: none
  1218. t'] = true; // default: none
  1219. whiteList['d// default: none
  1220. = true; // default: inline-level
  1221. whiteList// default: none
  1222. ne'] = false; // default: au// default: auto
  1223. vation'] = false; // default: // default: manual
  1224. pty-cells'] = false; // def// default: auto
  1225. ist['filter'] = false; // default: none
  1226. // default: auto
  1227.  = false; // default: depending on indi// default: normal
  1228. hiteList['flex-basis'] = false;// default: auto
  1229.  
  1230. whiteList['flex-direction'] = false; // default: normal
  1231. whiteList['x-flow'] = false; // default// default: last
  1232. dividual properties
  1233. whiteList['flex-gr// default: auto
  1234. default: 0
  1235. whiteList['flex-shrink'] // default: auto
  1236. lt: 1
  1237. whiteList['flex-wrap'] = fals// default: auto
  1238. wrap
  1239. whiteList['] = false; // default: auto
  1240. whiteList['List['float-offset'] = fa// default: normal
  1241. 0
  1242. whiteList['flood-color'] = false; // default: white
  1243. whiteList['line-box-contain' false; // // default: block inline replaced
  1244. = false; // default: none
  1245. whiteLi// default: auto
  1246.  false; // default: none
  1247. whiteLi// default: match-parent
  1248. ault: depending on individual prop// default: normal
  1249. ont-family'line-snap'// default:// default: none
  1250. ependent
  1251. whiteList['font-feature-set// default: depending on individual properties
  1252. ont-kerning'] = true; // default: auto
  1253. wh// default: exclude-ruby
  1254. erride'] = true; // default: normal
  1255. whiteL// default: consider-shifts
  1256. default: medium
  1257. whiteList['font-size-adjust']// default: inline-line-height
  1258. List['font-stretch'] = true; // // default: depending on individual properties
  1259.  // default: normal
  1260. whiteList['font-sy// default: none
  1261.  // default: weight style
  1262. whiteList['font// default: outside
  1263. / default: normal
  1264. whiteList['font-var// default: disc
  1265.  = true; // default: normal
  1266. // default: depending on individual properties
  1267. lt: normal
  1268. whiteList['font-variant-// default: 0
  1269.  true; // default: normal
  1270. whiteLi// default: 0
  1271. nt-ligatures'] = true; // default:// default: 0
  1272. ist['font-variant-numeric'] = tr// default: 0
  1273. : normal
  1274. whiteList['font-variant-pos// default: auto
  1275. / default: normal
  1276. whiteList['font-// default: list-item
  1277. fault: normal
  1278. whiteList['gri// default: none
  1279. efault: depending on indivi// default: border-box
  1280. st['grid-area'] = false; // def// default: see individual properties
  1281. es
  1282. whiteList['grid-auto-columns'] = fa// default: 0
  1283. t: auto
  1284. whiteList['grid-auto-flow'] = // default: stretch
  1285. one
  1286. whiteList['grid-auto-rows'] = fal// default: 0 fill
  1287. o
  1288. whiteList['grid-column'] = false; //// default: none
  1289. ng on individual properties
  1290. whiteList// default: auto
  1291. '] = false; // default: auto
  1292. whi// default: border-box
  1293. rt'] = false; // default: auto
  1294. wh// default: none
  1295. '] = false; // default: depending // default: border-box
  1296. s
  1297. whiteList['grid-row-end'] = false;// default: center
  1298. hiteList['grid-row-start'] = false// default: no-repeat
  1299. teList['grid-template'] = false;// default: border-box
  1300. on individual properties
  1301. whiteList['gri// default: auto
  1302. ] = false; // default: none
  1303. whit// default: luminance
  1304. olumns'] = false; // default: no// default: none
  1305. d-template-rows'] = false; // de// default: none
  1306. List['hanging-punctuation'] = f// default: none
  1307.  none
  1308. whiteList['height'] = true// default: 0
  1309. auto
  1310. whiteList['hyphens'] = fal// default: 0
  1311. : manual
  1312. whiteList['icon'] = f// default: normal
  1313. uto
  1314. whiteList['image-orientatio// default: auto
  1315. efault: auto
  1316. whiteList['image-re// default: auto
  1317. e; // default: normal
  1318. whiteList// default: auto
  1319. lse; // default: auto
  1320. whiteList[// default: auto
  1321. ] = false; // default: normal// default: auto
  1322. e-box-align'] = false; // default// default: fill
  1323. 'justify-content'] = false; // default// default: 50% 50%
  1324. stify-items'] = false; // defa// default: 1
  1325. eList['justify-self'] = fals// default: 0
  1326.  auto
  1327. whiteList['left'] = fals// default: 2
  1328.  auto
  1329. whiteList['letter-spacin// default: depending on individual properties
  1330. ing-color'] = true; // default: whit// default: invert
  1331. ox-contain'outline-offset'efault: blo// default: 0
  1332. aced
  1333. whiteList['line-break'] = false// default: none
  1334. o
  1335. whiteList['line-grid'] = false; //// default: medium
  1336. ent
  1337. whiteList['line-height'] = // default: depending on individual properties
  1338. ] = false; // default: none
  1339. whiteLis// default: normal
  1340. = false; // default: depending on// default: visible
  1341. es
  1342. whiteList['line-stacking-ruby'// default: visible
  1343. t: exclude-ruby
  1344. whiteList['li// default: depending on individual properties
  1345. er-shifts
  1346. whiteList['line-stacking-s// default: 0
  1347. lse; // default: inline-line-heigh// default: 0
  1348. ist-style'] = true; // default: dep// default: 0
  1349. vidual properties
  1350. whiteList['list// default: 0
  1351.  = true; // default: none
  1352. w// default: auto
  1353. yle-position'] = true; // default: outs// default: auto
  1354. st-style-type'] = true; // default: disc// default: auto
  1355. n'] = true; // default: depending on ind// default: auto
  1356. s
  1357. whiteList['margin-bottom'] = tru// default: start
  1358. hiteList['margin-left'] = tr// default: implementation dependent
  1359. ight'] = true; // default: 0
  1360. white// default: implementation dependent
  1361. : 0
  1362. whiteList['marker-offset'] = fa// default: implementation dependent
  1363. er-side'] = false; // default: lis// default: none
  1364. 'marks'] = false; // default: none
  1365. whiteL// default: 50% 50%
  1366.  // default: border-box
  1367. whit// default: medium
  1368.  false; // default: see individual// default: 50
  1369. teList['mask-box-outset'] = false;// default: auto
  1370. iteList['mask-box-repeat'] = fa// default: static
  1371. retch
  1372. whiteList['mask-box-slice'] = false// default: 0
  1373. 0 fill
  1374. whiteList['] = false; // default: text
  1375. whiteList['none
  1376. whiteList['] = false; // default: auto
  1377. whiteList['uto
  1378. whiteList['mas// default: none
  1379.  // default: border-box
  1380. whi// default: depending on individual properties
  1381. whiteList['rest-after''] = false;// default: none
  1382. er-box
  1383. whiteList['mask-position'] // default: none
  1384. lt: center
  1385. whiteList['mask-repe// default: 50
  1386. / default: no-repeat
  1387. whiteLi// default: auto
  1388.  false; // default: border-box
  1389. // default: 0
  1390. k-source-type'] = false; // default: // default: 50% 50%
  1391. -type'] = false; // default: lumi// default: auto
  1392. max-height'ruby-merge'/ default: // default: separate
  1393. ines'] = false; // default: none
  1394. whi// default: before
  1395.  = true; // default: none
  1396. whiteList['min-hei// default: 0.0
  1397.  default: 0
  1398. whiteList['min-width'] =// default: none
  1399. : 0
  1400. whiteList['move-to'] = false; /// default: 0
  1401. mal
  1402. whiteList['nav-down'] =// default: auto
  1403. t: auto
  1404. whiteList['nav-index// default: auto
  1405. fault: auto
  1406. whiteList['nav-left// default: normal
  1407. ult: auto
  1408. whiteList['nav-right'] = // default: once
  1409. : auto
  1410. whiteList['nav-up'] = false; // default: continuous
  1411. whiteList['-fit'] = false; // default: f// default: none
  1412. ject-position'] = false; // defaul// default: medium
  1413. t['opacity'stress'se; // defa// default: 50
  1414. t['order'] = false; // default: 0// default: none
  1415. ns'] = false; // default: 2
  1416. whi// default: 8
  1417. e'] = false; // default: depending // default: auto
  1418. perties
  1419. whiteList['outline-color// default: start
  1420. ault: invert
  1421. whiteList['outline-offse// default: auto
  1422. efault: 0
  1423. whiteList['outline-style'] = fal// default: none
  1424. one
  1425. whiteList['outline-width'] = fals// default: none
  1426. dium
  1427. whiteList['overflow'] = false; // defa// default: currentColor
  1428. ual properties
  1429. whiteList['overflow-wrap'] // default: none
  1430. lt: normal
  1431. whiteList['overflow-x'] = false// default: objects
  1432. e
  1433. whiteList['overflow-y'] = false; // defau// default: solid
  1434. ist['padding'] = true; // default: // default: depending on individual properties
  1435. adding-bottom'] = true; // default: 0
  1436. whi// default: currentColor
  1437. true; // default: 0
  1438. whiteList['padding-right// default: over right
  1439. 0
  1440. whiteList['padding-top'] = true; // def// default: none
  1441. ['page'] = false; // default: aut// default: auto
  1442. -break-after'] = false; // defaul// default: 0
  1443. ist['page-break-before'] = false; // default: auto
  1444. whiteList['text-orientation''] = false// default: mixed
  1445.  
  1446. whiteList['page-policy'] = false; // default: clip
  1447.  
  1448. whiteList['pause'] = false; // d// default: none
  1449. ation dependent
  1450. whiteList['pause-after'] // default: collapse
  1451. implementation dependent
  1452. whiteList['// default: none
  1453. false; // default: implementation dependent
  1454. w// default: auto
  1455. tive'] = false; // default: non// default: normal
  1456. ctive-origin'] = false; //// default: auto
  1457.  
  1458. whiteList['pitch'] = false; // // default: none
  1459. hiteList['pitch-range'] = false; // def// default: 50% 50% 0
  1460. ay-during'] = false; // default: auto
  1461. // default: flat
  1462. on'] = false; // default: static
  1463. // default: depending on individual properties
  1464. ault: 0
  1465. whiteList['quotes'] = false; //// default: 0s
  1466. whiteList['transition-duration'false; // d// default: 0s
  1467. iteList['resize'] = false; // default: non// default: all
  1468. t'] = false; // default: depending on individual // default: ease
  1469. ist['rest-after'] = false; // defau// default: normal
  1470. 'rest-before'] = false; // default: n// default: baseline
  1471. ss'] = false; // default: 50
  1472. whit// default: visible
  1473. se; // default: auto
  1474. whiteList['rota// default: center
  1475. default: 0
  1476. whiteList['rotation-point'// default: auto
  1477. ault: 50% 50%
  1478. whiteList['ruby-align// default: implementation dependent
  1479. t['ruby-merge'] = false; // defaul// default: medium
  1480. st['ruby-position'] = false; // de// default: medium
  1481. List['shape-image-threshold'] = f// default: normal
  1482. .0
  1483. whiteList['shape-outside'] = fal// default: normal
  1484. e
  1485. whiteList['shape-margin'] = false// default: medium
  1486. teList['size'] = false; // de// default: medium
  1487. st['speak'] = false; // default: a// default: normal
  1488. k-as'] = false; // default: n// default: 2
  1489. t['speak-header'] = false; // default: auto
  1490. whiteList['will-change'l'] = false// default: auto
  1491. tinuous
  1492. whiteList['speak-punctua// default: normal
  1493. default: none
  1494. whiteList['speech-ra// default: normal
  1495. fault: medium
  1496. whiteList['stress// default: normal
  1497. ult: 50
  1498. whiteList['string-set'] // default: auto
  1499. lt: none
  1500. whiteList['tab-size'] = fa// default: wrap
  1501. 8
  1502. whiteList['table-layout'] = false// default: horizontal-tb
  1503. st['text-align'] = true; // de// default: auto
  1504. eLi/**
  1505.  * 匹酨到ē™½å¨å¨•äøŠēš„äø€äøŖå±˛ę€§ę—¶
  1506.  *
  1507.  * @param {String} name
  1508.  * @param {String} value
  1509.  * @param {Object} options
  1510.  * @return {String}
  1511.  */ault: none
  1512. whiteList['text-decoration-color'// do nothing
  1513. efa/**
  1514.  * 匹酨到äø¨åœØē™½å¨å¨•äøŠēš„äø€äøŖå±˛ę€§ę—¶
  1515.  *
  1516.  * @param {String} name
  1517.  * @param {String} value
  1518.  * @param {Object} options
  1519.  * @return {String}
  1520.  */decoration-style'] = true; // default: solid
  1521. white// do nothing
  1522. hasis'] = true; // default: depending on individual properties
  1523. whiteList['text-emphasis-color'] = true; // default: currentColor
  1524. whiteList['t/**
  1525.  * cssfilter
  1526.  *
  1527.  * @author 老雷<leizongmin@gmail.com>
  1528.  */t['text-emphasis-style'] = true/**
  1529.  * č§£ę˛style
  1530.  *
  1531.  * @param {String} css
  1532.  * @param {Function} onAttr 处ē†å±˛ę€§ēš„å‡½ę•°
  1533.  *   å¸‚ę•°ę ¼å¼¸ļ¼š function (sourcePosition, position, name, value, source)
  1534.  * @return {String}
  1535.  */ = true; // default: mixed
  1536. whiteList['text-overflow'] = true; // default: clip
  1537. whiteList['text-shadow'] = true; // default: none
  1538. whiteList['text-space-collapse'] = true; // default: collapse
  1539. whiteList['text-transform'] = true; // default: none
  1540. whiteList['t// å¦‚ę˛œę²�ęœ‰ę­£åøøēš„é—­åˆåœ†ę‹¬å¸·ļ¼Œåˆ™ē›´ęˇ�åæ½ē•�å½“å‰¨å±˛ę€§
  1541. '] = true; // default: normal
  1542. whiteList['top'] = false; // default: auto
  1543. whiteList['transform'] = false; // default: none
  1544. whiteList['transform-origin'] = false; // default: 50% 50% 0
  1545. whiteList['transform-style'] = false; // default: flat
  1546. whi// åæ…é�»ęœ‰å±˛ę€§å¨ē§°
  1547. lse; // default: depending on individual properties
  1548. whiteList['transition-delay'] = false; // default: 0s
  1549. whiteList['transition-duration'] = false; // default: 0s
  1550. whiteList['transition-property'] = false; // default: all
  1551. whiteList['transition-timing-function'] = false; // default: ea// 备ę³Ø开始
  1552. icode-bidi'] = false; // default: normal
  1553. white// å¦‚ę˛œę²�ęœ‰ę­£åøøēš„备ę³Øē»“ę¯Ÿļ¼Œåˆ™åˇé¯¢ēš„éƒØ分å…ØéƒØč·³čæ‡
  1554. lity'] = false; // default: visib// ē›´ęˇ�将当剨佨ē½®č°ƒåˆ°å¤‡ę³Øē»“å°¾ļ¼Œå¹¶äø”刯始化ēŠ¶ę€
  1555. ['voice-duration'] = false; // default: auto
  1556. whiteList['voice-family'] = false; // default: implementation dependent
  1557. whiteList['voice-pitch'] = false; // default: medium
  1558. whiteList['voice-range'] = false; // default: medium
  1559. whiteList['voice-rate'] = false; // de// åœØåœ†ę‹¬å¸·é‡Œé¯¢ļ¼Œåæ½ē•�
  1560. stress'] = false; // default: normal
  1561. whiteList['voice-volume'] = false; // default: medium
  1562. whiteList['volume'] = false; // default: medium
  1563. whiteList['white-space'] = false; // default: normal
  1564. whiteList['widows'] = false; // default: 2
  1565. whiteList['width'] = true; // default: auto
  1566. whiteList['will-change'] = false; // default: auto
  1567. whiteList['word-break'] = true; // default: normal
  1568. whiteList['word-spacing'] = true; // default: normal
  1569. whiteList['word-wrap'] = true; // default: normal
  1570. whiteList['wrap-flow'] = false; // default: auto
  1571. whiteList['wrap-through'] = false; // default: wrap
  1572. whiteList['writing-mode'] = false; // default: horizontal-tb
  1573. whiteList['z-index'] = false; // default: auto
  1574.  
  1575.  
  1576.  
  1577. /**
  1578.  * 匹酨到ē™½å¨å¨•äøŠēš„äø€äøŖå±˛ę€§ę—¶
  1579.  *
  1580.  * @param {String} name
  1581.  * @param {String} value
  1582.  * @param {Object} options
  1583.  * @return {String}
  1584.  */
  1585. function onAttr (name, value, options) {
  1586.   // do nothing
  1587. }
  1588.  
  1589. /**
  1590.  * 匹酨到äø¨åœØē™½å¨å¨•ä

Paste-bin is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.