Ahmad Kholid 3 年之前
父節點
當前提交
49dd3057f1

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "automa",
-  "version": "1.7.0",
+  "version": "1.7.2",
   "description": "An extension for automating your browser by connecting blocks",
   "license": "MIT",
   "repository": {

+ 17 - 13
src/background/workflow-engine/blocks-handler/handler-javascript-code.js

@@ -23,20 +23,24 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
 
     const result = await this._sendMessageToTab({ ...block, data, refData });
 
-    if (result?.columns.data.$error) {
-      throw new Error(result?.columns.data.message);
-    }
-    if (result?.variables) {
-      Object.keys(result.variables).forEach((varName) => {
-        this.setVariable(varName, result.variables[varName]);
-      });
-    }
-    if (result?.columns.insert) {
-      const params = Array.isArray(result.columns.data)
-        ? result.columns.data
-        : [result.columns.data];
+    if (result) {
+      if (result.columns.data?.$error) {
+        throw new Error(result.columns.data.message);
+      }
 
-      this.addDataToColumn(params);
+      if (result.variables) {
+        Object.keys(result.variables).forEach((varName) => {
+          this.setVariable(varName, result.variables[varName]);
+        });
+      }
+
+      if (result.columns.insert && result.columns.data) {
+        const params = Array.isArray(result.columns.data)
+          ? result.columns.data
+          : [result.columns.data];
+
+        this.addDataToColumn(params);
+      }
     }
 
     return {

+ 19 - 13
src/components/newtab/workflow/WorkflowEditBlock.vue

@@ -28,7 +28,7 @@
     />
     <on-block-error
       v-if="!excludeOnError.includes(data.id)"
-      :key="data.blockId"
+      :key="data.itemId || data.blockId"
       :data="data"
       class="mt-4"
       @change="$emit('update', { ...blockData, onError: $event })"
@@ -148,36 +148,42 @@ export default {
       }
     }
     function traceBlockData(
-      id,
-      { name, inputs, data },
+      blockId,
+      { name, inputs, data, id },
       blocks,
-      maxDepth = 100
+      maxDepth = 20
     ) {
-      if (maxDepth === 0) return;
+      const notFirstDepth = maxDepth !== 20;
+
+      if (maxDepth === 0 || (blockId === id && notFirstDepth)) return;
 
-      if (maxDepth !== 100) {
+      if (notFirstDepth) {
         if (name === 'blocks-group') getGroupBlockData(data.blocks);
         else addAutocompleteData(props.data.blockId, name, data);
       }
 
       inputs?.input_1?.connections.forEach(({ node }) => {
-        traceBlockData(id, blocks[node], blocks, maxDepth - 1);
+        traceBlockData(blockId, blocks[node], blocks, maxDepth - 1);
       });
     }
 
     watch(
       () => [props.data.blockId, props.data.itemId],
       () => {
-        const id = props.data.blockId;
+        const enableAutocomplete =
+          props.workflow.settings?.inputAutocomplete ?? true;
 
-        if (
-          !props.autocomplete ||
-          !props.autocomplete[id] ||
-          props.dataChanged
-        ) {
+        if (!enableAutocomplete) return;
+
+        const id = props.data.blockId;
+        const isDataChanging =
+          !props.autocomplete || !props.autocomplete[id] || props.dataChanged;
+        if (isDataChanging) {
           const blocks = props.editor.export().drawflow.Home.data;
           const currentBlock = blocks[id];
 
+          if (Object.keys(blocks).length > 32) return;
+
           if (props.data.isInGroup)
             getGroupBlockData(currentBlock.data.blocks, props.data.itemId);
 

+ 6 - 0
src/components/newtab/workflow/WorkflowSettings.vue

@@ -109,6 +109,11 @@ const settingItems = [
     name: t('workflow.settings.debugMode.title'),
     description: t('workflow.settings.debugMode.description'),
   },
+  {
+    id: 'inputAutocomplete',
+    name: t('workflow.settings.autocomplete.title'),
+    description: t('workflow.settings.autocomplete.description'),
+  },
   {
     id: 'reuseLastState',
     name: t('workflow.settings.reuseLastState.title'),
@@ -128,6 +133,7 @@ const settingItems = [
 
 const settings = reactive({
   restartTimes: 3,
+  inputAutocomplete: true,
 });
 
 async function onClearCacheClick() {

+ 1 - 0
src/content/element-selector/App.vue

@@ -199,6 +199,7 @@ const getElementSelector = (element, options = {}) =>
           '[src=*]',
           '[data-*]',
           '[href=*]',
+          '[style=*]',
           '[value=*]',
           '[automa-*]',
         ],

+ 4 - 0
src/locales/en/newtab.json

@@ -173,6 +173,10 @@
     "settings": {
       "saveLog": "Save workflow log",
       "executedBlockOnWeb": "Show executed block on web page",
+      "autocomplete": {
+        "title": "Autocomplete",
+        "description": "Enable autocomplete in the input block (disable if it makes Automa unstable)"
+      },
       "clearCache": {
         "title": "Clear cache",
         "description": "Clear cache (state and loop index) of the workflow",

+ 22 - 0
src/locales/zh/blocks.json

@@ -12,6 +12,28 @@
       "base": {
         "moveToGroup": "移动模块到模块组",
         "selector": "元素选择器",
+        "onError": {
+          "info": "这些规则适用于模块发生错误时",
+          "button": "出错时",
+          "title": "发生错误时",
+          "retry": "重试操作",
+          "fallbackTitle": "当模块发生错误时将执行",
+          "times": {
+            "name": "次数",
+            "description": "重试操作的次数",
+          },
+          "interval": {
+            "name": "间隔",
+            "description": "每次尝试等待的时间",
+            "second": "秒"
+          },
+          "toDo": {
+            "error": "抛出错误",
+            "continue": "继续流程",
+            "fallback": "执行回退",
+            "restart": "重启流程"
+          }
+        },
         "table": {
           "checkbox": "插入表格",
           "select": "选择列",

+ 8 - 0
src/locales/zh/newtab.json

@@ -24,6 +24,14 @@
     "shortcuts": {
       "duplicate": "快捷方式已被 \"{name}\" 占用"
     },
+    "editor": {
+      "curvature": {
+        "title": "编辑器线条曲率",
+        "line": "线条",
+        "reroute": "重绘路线",
+        "rerouteFirstLast": "重绘首尾点"
+      },
+    },
     "language": {
       "label": "语言",
       "helpTranslate": "找不到您的语言? 帮助翻译.",

+ 1 - 0
src/models/workflow.js

@@ -36,6 +36,7 @@ class Workflow extends Model {
         debugMode: false,
         restartTimes: 3,
         reuseLastState: false,
+        inputAutocomplete: true,
         onError: 'stop-workflow',
         executedBlockOnWeb: false,
       }),

+ 3 - 2
src/newtab/App.vue

@@ -134,6 +134,7 @@ async function fetchUserData() {
       getSharedWorkflows(),
       getUserWorkflows(),
     ]);
+
     localStorage.setItem('username', user.username);
 
     if (sharedWorkflows.status === 'fulfilled') {
@@ -148,10 +149,10 @@ async function fetchUserData() {
 
       store.commit('updateState', {
         key: 'hostWorkflows',
-        value: hosted,
+        value: hosted || {},
       });
 
-      if (backup.length > 0) {
+      if (backup?.length > 0) {
         const { lastBackup } = browser.storage.local.get('lastBackup');
         if (!lastBackup) {
           const backupIds = backup.map(({ id }) => id);

+ 1 - 1
src/utils/shared.js

@@ -907,7 +907,7 @@ export const firstWorkflows = [
     id: nanoid(),
     name: 'Google search',
     createdAt: Date.now(),
-    drawflow: `{"drawflow":{"Home":{"data":{"d634ff22-5dfe-44dc-83d2-842412bd9fbf":{"id":"d634ff22-5dfe-44dc-83d2-842412bd9fbf","name":"trigger","data":{"type":"manual","interval":10},"class":"trigger","html":"BlockBasic","typenode":"vue","inputs":{},"outputs":{"output_1":{"connections":[{"node":"b9e7e0d4-e86a-4635-a352-31c63723fef4","output":"input_1"}]}},"pos_x":50,"pos_y":300},"b9e7e0d4-e86a-4635-a352-31c63723fef4":{"id":"b9e7e0d4-e86a-4635-a352-31c63723fef4","name":"new-tab","data":{"url":"https://google.com","active":true},"class":"new-tab","html":"BlockBasic","typenode":"vue","inputs":{"input_1":{"connections":[{"node":"d634ff22-5dfe-44dc-83d2-842412bd9fbf","input":"output_1"}]}},"outputs":{"output_1":{"connections":[{"node":"09f3a14c-0514-4287-93b0-aa92b0064fba","output":"input_1"}]}},"pos_x":278,"pos_y":268},"09f3a14c-0514-4287-93b0-aa92b0064fba":{"id":"09f3a14c-0514-4287-93b0-aa92b0064fba","name":"forms","data":{"description":"Type query","selector":"[name='q']","markEl":false,"multiple":false,"selected":true,"type":"text-field","value":"Automa Chrome Extension","delay":"120","events":[]},"class":"forms","html":"BlockBasic","typenode":"vue","inputs":{"input_1":{"connections":[{"node":"b9e7e0d4-e86a-4635-a352-31c63723fef4","input":"output_1"}]}},"outputs":{"output_1":{"connections":[{"node":"5f76370d-aa3d-4258-8319-230fcfc49a3a","output":"input_1"}]}},"pos_x":551,"pos_y":290},"5f76370d-aa3d-4258-8319-230fcfc49a3a":{"id":"5f76370d-aa3d-4258-8319-230fcfc49a3a","name":"event-click","data":{"description":"Click search","selector":"center:nth-child(1) > .gNO89b","markEl":false,"multiple":false},"class":"event-click","html":"BlockBasic","typenode":"vue","inputs":{"input_1":{"connections":[{"node":"09f3a14c-0514-4287-93b0-aa92b0064fba","input":"output_1"}]}},"outputs":{"output_1":{"connections":[]}},"pos_x":794,"pos_y":308}}}}}`,
+    drawflow: `{"drawflow":{"Home":{"data":{"d634ff22-5dfe-44dc-83d2-842412bd9fbf":{"id":"d634ff22-5dfe-44dc-83d2-842412bd9fbf","name":"trigger","data":{"type":"manual","interval":10},"class":"trigger","html":"BlockBasic","typenode":"vue","inputs":{},"outputs":{"output_1":{"connections":[{"node":"b9e7e0d4-e86a-4635-a352-31c63723fef4","output":"input_1"}]}},"pos_x":50,"pos_y":300},"b9e7e0d4-e86a-4635-a352-31c63723fef4":{"id":"b9e7e0d4-e86a-4635-a352-31c63723fef4","name":"new-tab","data":{"url":"https://google.com","active":true},"class":"new-tab","html":"BlockBasic","typenode":"vue","inputs":{"input_1":{"connections":[{"node":"d634ff22-5dfe-44dc-83d2-842412bd9fbf","input":"output_1"}]}},"outputs":{"output_1":{"connections":[{"node":"09f3a14c-0514-4287-93b0-aa92b0064fba","output":"input_1"}]}},"pos_x":278,"pos_y":268},"09f3a14c-0514-4287-93b0-aa92b0064fba":{"id":"09f3a14c-0514-4287-93b0-aa92b0064fba","name":"forms","data":{"description":"Type query","selector":"[name='q']","markEl":false,"multiple":false,"selected":true,"type":"text-field","value":"Automa Extension","delay":"120","events":[]},"class":"forms","html":"BlockBasic","typenode":"vue","inputs":{"input_1":{"connections":[{"node":"b9e7e0d4-e86a-4635-a352-31c63723fef4","input":"output_1"}]}},"outputs":{"output_1":{"connections":[{"node":"5f76370d-aa3d-4258-8319-230fcfc49a3a","output":"input_1"}]}},"pos_x":551,"pos_y":290},"5f76370d-aa3d-4258-8319-230fcfc49a3a":{"id":"5f76370d-aa3d-4258-8319-230fcfc49a3a","name":"event-click","data":{"description":"Click search","selector":"center:nth-child(1) > .gNO89b","markEl":false,"multiple":false},"class":"event-click","html":"BlockBasic","typenode":"vue","inputs":{"input_1":{"connections":[{"node":"09f3a14c-0514-4287-93b0-aa92b0064fba","input":"output_1"}]}},"outputs":{"output_1":{"connections":[]}},"pos_x":794,"pos_y":308}}}}}`,
   },
   {
     id: nanoid(),