common.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const bool_attrs = {
  2. allowfullscreen: true,
  3. allowpaymentrequest: true,
  4. async: true,
  5. autofocus: true,
  6. autoplay: true,
  7. checked: true,
  8. controls: true,
  9. default: true,
  10. defer: true,
  11. disabled: true,
  12. formnovalidate: true,
  13. hidden: true,
  14. ismap: true,
  15. itemscope: true,
  16. loop: true,
  17. multiple: true,
  18. muted: true,
  19. nomodule: true,
  20. novalidate: true,
  21. open: true,
  22. playsinline: true,
  23. readonly: true,
  24. required: true,
  25. reversed: true,
  26. selected: true,
  27. truespeed: true,
  28. webkitdirectory: true,
  29. };
  30. export function setAttributeInner(node, field, value, ns) {
  31. const name = field;
  32. if (ns === "style") {
  33. // ????? why do we need to do this
  34. if (node.style === undefined) {
  35. node.style = {};
  36. }
  37. node.style[name] = value;
  38. } else if (ns != null && ns != undefined) {
  39. node.setAttributeNS(ns, name, value);
  40. } else {
  41. switch (name) {
  42. case "value":
  43. if (value !== node.value) {
  44. node.value = value;
  45. }
  46. break;
  47. case "initial_value":
  48. node.defaultValue = value;
  49. break;
  50. case "checked":
  51. node.checked = truthy(value);
  52. break;
  53. case "selected":
  54. node.selected = truthy(value);
  55. break;
  56. case "initial_selected":
  57. node.defaultSelected = truthy(value);
  58. break;
  59. case "dangerous_inner_html":
  60. node.innerHTML = value;
  61. break;
  62. default:
  63. // https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364
  64. if (!truthy(value) && bool_attrs.hasOwnProperty(name)) {
  65. node.removeAttribute(name);
  66. } else {
  67. node.setAttribute(name, value);
  68. }
  69. }
  70. }
  71. }
  72. function truthy(val) {
  73. return val === "true" || val === true;
  74. }