renderer.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const xss = require('xss')
  2. module.exports = {
  3. async init(input, config) {
  4. if (config.safeHTML) {
  5. input = xss(input, {
  6. whiteList: {
  7. ...xss.whiteList,
  8. a: ['class', 'id', 'href', 'style', 'target', 'title'],
  9. blockquote: ['class', 'id', 'style'],
  10. code: ['class', 'style'],
  11. div: ['class', 'id', 'style'],
  12. em: ['class', 'style'],
  13. h1: ['class', 'id', 'style'],
  14. h2: ['class', 'id', 'style'],
  15. h3: ['class', 'id', 'style'],
  16. h4: ['class', 'id', 'style'],
  17. h5: ['class', 'id', 'style'],
  18. h6: ['class', 'id', 'style'],
  19. img: ['alt', 'class', 'draggable', 'height', 'src', 'style', 'width'],
  20. kbd: ['class'],
  21. li: ['class', 'style'],
  22. mark: ['class', 'style'],
  23. ol: ['class', 'style'],
  24. p: ['class', 'style'],
  25. path: ['d', 'style'],
  26. pre: ['class', 'style'],
  27. span: ['class', 'style'],
  28. strong: ['class', 'style'],
  29. svg: ['width', 'height', 'viewBox', 'preserveAspectRatio', 'style'],
  30. table: ['border', 'class', 'id', 'style', 'width'],
  31. tbody: ['class', 'style'],
  32. td: ['align', 'class', 'colspan', 'rowspan', 'style', 'valign'],
  33. th: ['align', 'class', 'colspan', 'rowspan', 'style', 'valign'],
  34. thead: ['class', 'style'],
  35. tr: ['class', 'rowspan', 'style', 'align', 'valign'],
  36. ul: ['class', 'style']
  37. },
  38. css: false
  39. })
  40. }
  41. return input
  42. }
  43. }