blocks-handler.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /* eslint-disable consistent-return, no-param-reassign */
  2. import simulateEvent from '@/utils/simulate-event';
  3. import handleFormElement from '@/utils/handle-form-element';
  4. function handleElement(data, callback) {
  5. if (!data.selector) return null;
  6. const element = data.multiple
  7. ? document.querySelectorAll(data.selector)
  8. : document.querySelector(data.selector);
  9. if (typeof callback === 'boolean' && callback) return element;
  10. if (data.multiple) {
  11. element.forEach(callback);
  12. } else if (element) {
  13. callback(element);
  14. }
  15. }
  16. export function eventClick({ data }) {
  17. return new Promise((resolve) => {
  18. handleElement(data, (element) => {
  19. element.click();
  20. });
  21. resolve('');
  22. });
  23. }
  24. export function getText({ data }) {
  25. return new Promise((resolve) => {
  26. let regex;
  27. let textResult = '';
  28. if (data.regex) {
  29. regex = new RegExp(data.regex, data.regexExp.join(''));
  30. }
  31. handleElement(data, (element) => {
  32. let text = element.innerText;
  33. if (regex) text = text.match(regex).join(' ');
  34. textResult += `${text} `;
  35. });
  36. resolve(textResult);
  37. });
  38. }
  39. export function elementScroll({ data }) {
  40. return new Promise((resolve) => {
  41. handleElement(data, (element) => {
  42. element.scroll(data.scrollX, data.scrollY);
  43. });
  44. resolve('');
  45. });
  46. }
  47. export function attributeValue({ data }) {
  48. return new Promise((resolve) => {
  49. let result = '';
  50. handleElement(data, (element) => {
  51. const value = element.getAttribute(data.attributeName);
  52. window.dispatchEvent(new Event('scroll'));
  53. result += `${value} `;
  54. });
  55. resolve(result);
  56. });
  57. }
  58. export function forms({ data }) {
  59. return new Promise((resolve) => {
  60. const elements = handleElement(data, true);
  61. console.log(elements, 'form');
  62. if (data.multiple) {
  63. const promises = Array.from(elements).map((element) => {
  64. return new Promise((eventResolve) => {
  65. handleFormElement(element, data, eventResolve);
  66. });
  67. });
  68. Promise.allSettled(promises).then(() => {
  69. console.log('hola amigo');
  70. resolve('');
  71. });
  72. } else if (elements) {
  73. handleFormElement(elements, data, resolve);
  74. } else {
  75. resolve();
  76. }
  77. });
  78. }
  79. export function triggerEvent({ data }) {
  80. return new Promise((resolve) => {
  81. handleElement(data, (element) => {
  82. simulateEvent(element, data.eventName, data.eventParams);
  83. });
  84. resolve('');
  85. });
  86. }
  87. export function link({ data }) {
  88. return new Promise((resolve) => {
  89. const element = document.querySelector(data.selector);
  90. if (!element) {
  91. resolve('');
  92. return;
  93. }
  94. const url = element.href;
  95. if (url) window.location.href = url;
  96. resolve('');
  97. });
  98. }