Browse Source

fix: logic of mark element option

Ahmad Kholid 3 years ago
parent
commit
2468e6da2e

+ 2 - 2
src/background/workflow-engine/blocks-handler.js

@@ -501,13 +501,13 @@ export function conditions({ data, outputs }, prevBlockData) {
 
 
 export function repeatTask({ data, id, outputs }) {
 export function repeatTask({ data, id, outputs }) {
   return new Promise((resolve) => {
   return new Promise((resolve) => {
-    if (this.repeatedTasks[id] === data.repeatFor) {
+    if (this.repeatedTasks[id] >= data.repeatFor) {
       resolve({
       resolve({
         data: data.repeatFor,
         data: data.repeatFor,
         nextBlockId: getBlockConnection({ outputs }),
         nextBlockId: getBlockConnection({ outputs }),
       });
       });
     } else {
     } else {
-      this.repeatedTasks[id] = (this.repeatedTasks[id] || 0) + 1;
+      this.repeatedTasks[id] = (this.repeatedTasks[id] || 1) + 1;
 
 
       resolve({
       resolve({
         data: data.repeatFor,
         data: data.repeatFor,

+ 29 - 26
src/content/blocks-handler.js

@@ -2,32 +2,37 @@
 import simulateEvent from '@/utils/simulate-event';
 import simulateEvent from '@/utils/simulate-event';
 import handleFormElement from '@/utils/handle-form-element';
 import handleFormElement from '@/utils/handle-form-element';
 
 
-function isElementUnique(element, { data, id }) {
-  if (!data.markEl) return true;
-
-  const blockId = `block--${id}`;
-
-  if (element.hasAttribute(blockId)) return false;
-
-  element.setAttribute(blockId, '');
-
-  return true;
+function markElement(el, { id, data }) {
+  if (data.markEl) {
+    el.setAttribute(`block--${id}`, '');
+  }
 }
 }
 function handleElement({ data, id }, callback) {
 function handleElement({ data, id }, callback) {
   if (!data || !data.selector) return null;
   if (!data || !data.selector) return null;
 
 
-  const element = data.multiple
-    ? document.querySelectorAll(data.selector)
-    : document.querySelector(data.selector);
+  try {
+    const blockIdAttr = `block--${id}`;
+    const selector = data.markEl
+      ? `${data.selector.trim()}:not([${blockIdAttr}])`
+      : data.selector;
 
 
-  if (typeof callback === 'boolean' && callback) return element;
+    const element = data.multiple
+      ? document.querySelectorAll(selector)
+      : document.querySelector(selector);
 
 
-  if (data.multiple) {
-    element.forEach((el) => {
-      if (isElementUnique(el, { id, data })) callback(el);
-    });
-  } else if (element) {
-    if (isElementUnique(element, { id, data })) callback(element);
+    if (typeof callback === 'boolean' && callback) return element;
+
+    if (data.multiple) {
+      element.forEach((el) => {
+        markElement(el, { id, data });
+        callback(el);
+      });
+    } else if (element) {
+      markElement(element, { id, data });
+      callback(element);
+    }
+  } catch (error) {
+    console.error(error);
   }
   }
 }
 }
 
 
@@ -161,9 +166,8 @@ export function forms(block) {
     if (data.multiple) {
     if (data.multiple) {
       const promises = Array.from(elements).map((element) => {
       const promises = Array.from(elements).map((element) => {
         return new Promise((eventResolve) => {
         return new Promise((eventResolve) => {
-          if (isElementUnique(element, block))
-            handleFormElement(element, data, eventResolve);
-          else eventResolve('');
+          markElement(element, block);
+          handleFormElement(element, data, eventResolve);
         });
         });
       });
       });
 
 
@@ -171,10 +175,9 @@ export function forms(block) {
         resolve('');
         resolve('');
       });
       });
     } else if (elements) {
     } else if (elements) {
-      if (isElementUnique(elements, block))
-        handleFormElement(elements, data, resolve);
+      markElement(element, block);
+      handleFormElement(elements, data, resolve);
     } else {
     } else {
-      alert('else?');
       resolve('');
       resolve('');
     }
     }
   });
   });

+ 0 - 1
src/utils/shared.js

@@ -455,7 +455,6 @@ export const eventList = [
   { id: 'touchcancel', name: 'Touch cancel', type: 'touch-event' },
   { id: 'touchcancel', name: 'Touch cancel', type: 'touch-event' },
   { id: 'keydown', name: 'Keydown', type: 'keyboard-event' },
   { id: 'keydown', name: 'Keydown', type: 'keyboard-event' },
   { id: 'keyup', name: 'Keyup', type: 'keyboard-event' },
   { id: 'keyup', name: 'Keyup', type: 'keyboard-event' },
-  { id: 'keypress', name: 'Keypress', type: 'keyboard-event' },
   { id: 'submit', name: 'Submit', type: 'submit-event' },
   { id: 'submit', name: 'Submit', type: 'submit-event' },
   { id: 'wheel', name: 'Wheel', type: 'wheel-event' },
   { id: 'wheel', name: 'Wheel', type: 'wheel-event' },
 ];
 ];