html.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. export function htmlEscape(s) {
  2. return (s + '').replace(/&/g, '&')
  3. .replace(/</g, '&lt;')
  4. .replace(/>/g, '&gt;')
  5. .replace(/'/g, '&#039;')
  6. .replace(/"/g, '&quot;')
  7. .replace(/\n/g, '<br />')
  8. }
  9. // Given a hash of CSS properties, returns a string of CSS.
  10. // Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.
  11. export function cssToStr(cssProps) {
  12. let statements = []
  13. for (let name in cssProps) {
  14. let val = cssProps[name]
  15. if (val != null) {
  16. statements.push(name + ':' + val)
  17. }
  18. }
  19. return statements.join(';')
  20. }
  21. // Given an object hash of HTML attribute names to values,
  22. // generates a string that can be injected between < > in HTML
  23. export function attrsToStr(attrs) {
  24. let parts = []
  25. for (let name in attrs) {
  26. let val = attrs[name]
  27. if (val != null) {
  28. parts.push(name + '="' + htmlEscape(val) + '"')
  29. }
  30. }
  31. return parts.join(' ')
  32. }
  33. export type ClassNameInput = string | string[]
  34. export function parseClassName(raw: ClassNameInput) {
  35. if (Array.isArray(raw)) {
  36. return raw
  37. } else if (typeof raw === 'string') {
  38. return raw.split(/\s+/)
  39. } else {
  40. return []
  41. }
  42. }