renderer.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. details: ['class', 'style'],
  12. defs: ['stroke', 'fill', 'stroke-width', 'transform'],
  13. div: ['class', 'id', 'style'],
  14. em: ['class', 'style'],
  15. figcaption: ['class', 'style'],
  16. figure: ['class', 'style'],
  17. g: ['transform', 'stroke', 'stroke-width', 'fill'],
  18. h1: ['class', 'id', 'style'],
  19. h2: ['class', 'id', 'style'],
  20. h3: ['class', 'id', 'style'],
  21. h4: ['class', 'id', 'style'],
  22. h5: ['class', 'id', 'style'],
  23. h6: ['class', 'id', 'style'],
  24. i: ['class', 'style'],
  25. img: ['alt', 'class', 'draggable', 'height', 'src', 'style', 'width'],
  26. input: ['class', 'disabled', 'type', 'checked', 'id'],
  27. kbd: ['class'],
  28. label: ['class', 'id', 'for'],
  29. li: ['class', 'style'],
  30. mark: ['class', 'style'],
  31. ol: ['class', 'style', 'start'],
  32. p: ['class', 'style'],
  33. path: ['d', 'style', 'id'],
  34. pre: ['class', 'style'],
  35. section: ['class', 'style'],
  36. span: ['class', 'style', 'aria-hidden'],
  37. strong: ['class', 'style'],
  38. summary: ['class', 'style'],
  39. svg: ['width', 'height', 'viewbox', 'preserveaspectratio', 'style'],
  40. table: ['border', 'class', 'id', 'style', 'width'],
  41. tabset: [],
  42. tbody: ['class', 'style'],
  43. td: ['align', 'class', 'colspan', 'rowspan', 'style', 'valign'],
  44. template: ['v-slot:tabs', 'v-slot:content'],
  45. th: ['align', 'class', 'colspan', 'rowspan', 'style', 'valign'],
  46. thead: ['class', 'style'],
  47. tr: ['class', 'rowspan', 'style', 'align', 'valign'],
  48. ul: ['class', 'style'],
  49. use: ['href', 'transform']
  50. },
  51. css: false
  52. })
  53. }
  54. return input
  55. }
  56. }