Ahmad Kholid пре 3 година
родитељ
комит
831f5f3b85

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
     "drawflow": "^0.0.51",
     "drawflow": "^0.0.51",
     "mousetrap": "^1.6.5",
     "mousetrap": "^1.6.5",
     "nanoid": "3.1.28",
     "nanoid": "3.1.28",
+    "object-path": "^0.11.8",
     "papaparse": "^5.3.1",
     "papaparse": "^5.3.1",
     "prismjs": "^1.25.0",
     "prismjs": "^1.25.0",
     "tiny-emitter": "^2.1.0",
     "tiny-emitter": "^2.1.0",

+ 3 - 0
src/background/workflow-engine.js

@@ -3,6 +3,7 @@ import browser from 'webextension-polyfill';
 import { nanoid } from 'nanoid';
 import { nanoid } from 'nanoid';
 import { toCamelCase } from '@/utils/helper';
 import { toCamelCase } from '@/utils/helper';
 import { tasks } from '@/utils/shared';
 import { tasks } from '@/utils/shared';
+import referenceData from '@/utils/reference-data';
 import errorMessage from './error-message';
 import errorMessage from './error-message';
 import workflowState from './workflow-state';
 import workflowState from './workflow-state';
 import * as blocksHandler from './blocks-handler';
 import * as blocksHandler from './blocks-handler';
@@ -246,6 +247,8 @@ class WorkflowEngine {
     const handler = blocksHandler[handlerName];
     const handler = blocksHandler[handlerName];
 
 
     if (handler) {
     if (handler) {
+      referenceData(block, { data: this.data, prevBlockData });
+
       handler
       handler
         .call(this, block, prevBlockData)
         .call(this, block, prevBlockData)
         .then((result) => {
         .then((result) => {

+ 2 - 0
src/content/element-selector/ElementSelector.ce.vue

@@ -56,6 +56,8 @@ import { finder } from '@medv/finder';
 import { VRemixIcon } from 'v-remixicon';
 import { VRemixIcon } from 'v-remixicon';
 import { riFileCopyLine, riArrowDownLine } from 'v-remixicon/icons';
 import { riFileCopyLine, riArrowDownLine } from 'v-remixicon/icons';
 
 
+/* to-do get list of attribute value */
+
 const element = reactive({
 const element = reactive({
   hovered: {},
   hovered: {},
   selected: {},
   selected: {},

+ 54 - 0
src/utils/reference-data.js

@@ -0,0 +1,54 @@
+import objectPath from 'object-path';
+import { isObject } from '@/utils/helper';
+
+function parseKey(key) {
+  const [dataKey, path] = key.split('@');
+
+  if (dataKey === 'prevBlockData') return { dataKey, path: path || '0' };
+
+  const pathArr = path.split('.');
+  let dataPath = '';
+
+  if (pathArr.length === 1) {
+    dataPath = `${pathArr[0]}.0`;
+  } else if (typeof +pathArr[0] !== 'number') {
+    const firstPath = pathArr.shift();
+
+    dataPath = `${firstPath}.0.${pathArr.join('.')}`;
+  } else {
+    const index = pathArr.shift();
+    const firstPath = pathArr.shift();
+
+    dataPath = `${firstPath}.${index}.${pathArr.join('.')}`;
+  }
+
+  if (dataPath.endsWith('.')) dataPath = dataPath.slice(0, -1);
+
+  return { dataKey: 'data', path: dataPath };
+}
+
+export default function (block, data) {
+  const replaceKeys = ['url', 'fileName', 'name', 'value'];
+
+  replaceKeys.forEach((blockDataKey) => {
+    const blockDataValue = objectPath.get(block, `data.${blockDataKey}`);
+
+    if (!blockDataValue) return;
+
+    const newDataValue = blockDataValue.replace(/\[(.+?)]/g, (match) => {
+      const key = match.replace(/\[|]/g, '');
+      const { dataKey, path } = parseKey(key);
+
+      if (
+        dataKey === 'prevBlockData' &&
+        (!isObject(data.prevBlockData) || !Array.isArray(data.prevBlockData))
+      ) {
+        return data.prevBlockData;
+      }
+
+      return objectPath.get(data, `${dataKey}.${path}`) || match;
+    });
+
+    objectPath.set(block, `data.${blockDataKey}`, newDataValue);
+  });
+}

+ 5 - 0
yarn.lock

@@ -4806,6 +4806,11 @@ object-keys@^1.0.12, object-keys@^1.1.1:
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
   integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
   integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
 
 
+object-path@^0.11.8:
+  version "0.11.8"
+  resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742"
+  integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==
+
 object-visit@^1.0.0:
 object-visit@^1.0.0:
   version "1.0.1"
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
   resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"