Skip to content

Commit f3e75ee

Browse files
authored
v1.28.21
2 parents f934f32 + 865497e commit f3e75ee

File tree

6 files changed

+82
-35
lines changed

6 files changed

+82
-35
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "automa",
3-
"version": "1.28.19",
3+
"version": "1.28.21",
44
"description": "An extension for automating your browser by connecting blocks",
55
"repository": {
66
"type": "git",

src/content/blocksHandler/handlerElementScroll.js

+55-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,54 @@
11
import handleSelector from '../handleSelector';
22

3+
function isElScrollable(element) {
4+
const excludedTags = ['SCRIPT', 'STYLE', 'SVG', 'HEAD'];
5+
6+
const isOverflow = /scroll|auto/.test(getComputedStyle(element).overflow);
7+
const isScrollable =
8+
element.scrollHeight > element.clientHeight ||
9+
element.scrollWidth > element.clientWidth;
10+
const isExcluded =
11+
element.tagName.includes('-') || excludedTags.includes(element.tagName);
12+
13+
return isOverflow && isScrollable && !isExcluded;
14+
}
15+
16+
function findScrollableElement(
17+
element = document.documentElement,
18+
dir = 'down',
19+
maxDepth = 5
20+
) {
21+
if (maxDepth === 0) return null;
22+
23+
const isScrollable = isElScrollable(element);
24+
if (isScrollable) return element;
25+
26+
if (dir === 'up') {
27+
const parentEl = element.parentElement;
28+
if (!parentEl) return null;
29+
30+
const scrollableElement = findScrollableElement(
31+
parentEl,
32+
dir,
33+
maxDepth - 1
34+
);
35+
if (scrollableElement) return scrollableElement;
36+
} else {
37+
for (let index = 0; index < element.childElementCount; index += 1) {
38+
const currentChild = element.children.item(index);
39+
const scrollableElement = findScrollableElement(
40+
currentChild,
41+
dir,
42+
maxDepth - 1
43+
);
44+
45+
if (scrollableElement) return scrollableElement;
46+
}
47+
}
48+
49+
return null;
50+
}
51+
352
function elementScroll(block) {
453
function incScrollPos(element, data, vertical = true) {
554
let currentPos = vertical ? element.scrollTop : element.scrollLeft;
@@ -22,7 +71,12 @@ function elementScroll(block) {
2271
if (data.scrollIntoView) {
2372
element.scrollIntoView({ behavior, block: 'center' });
2473
} else {
25-
element.scroll({
74+
const scrollableEl =
75+
findScrollableElement(element, 'up', 3) ||
76+
findScrollableElement(element, 'down', 3) ||
77+
element;
78+
79+
scrollableEl.scroll({
2680
behavior,
2781
top: data.incY ? incScrollPos(element, data) : data.scrollY,
2882
left: data.incX ? incScrollPos(element, data, false) : data.scrollX,

src/content/blocksHandler/handlerJavascriptCode.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { jsContentHandler } from '@/workflowEngine/utils/javascriptBlockUtil';
2+
import { getDocumentCtx } from '../handleSelector';
23

34
function javascriptCode({ data, isPreloadScripts, frameSelector }) {
45
if (!isPreloadScripts && Array.isArray(data))
@@ -8,7 +9,7 @@ function javascriptCode({ data, isPreloadScripts, frameSelector }) {
89
let $documentCtx = document;
910

1011
if (frameSelector) {
11-
const iframeCtx = document.querySelector(frameSelector)?.contentDocument;
12+
const iframeCtx = getDocumentCtx(frameSelector);
1213
if (!iframeCtx) return Promise.resolve({ success: false });
1314

1415
$documentCtx = iframeCtx;

src/workflowEngine/WorkflowEngine.js

+9-27
Original file line numberDiff line numberDiff line change
@@ -491,35 +491,17 @@ class WorkflowEngine {
491491
'rw',
492492
dbStorage.tablesItems,
493493
dbStorage.tablesData,
494-
dbStorage.variables,
495494
async () => {
496-
if (tableId) {
497-
await dbStorage.tablesItems.update(tableId, {
498-
modifiedAt: Date.now(),
499-
rowsCount: table.length,
500-
});
501-
await dbStorage.tablesData.where('tableId').equals(tableId).modify({
502-
items: table,
503-
columnsIndex: this.columns,
504-
});
505-
}
495+
if (!tableId) return;
506496

507-
for (const key in variables) {
508-
if (key.startsWith('$$')) {
509-
const varName = key.slice(2);
510-
const varValue = variables[key];
511-
512-
const variable =
513-
(await dbStorage.variables
514-
.where('name')
515-
.equals(varName)
516-
.first()) || {};
517-
variable.name = varName;
518-
variable.value = varValue;
519-
520-
await dbStorage.variables.put(variable);
521-
}
522-
}
497+
await dbStorage.tablesItems.update(tableId, {
498+
modifiedAt: Date.now(),
499+
rowsCount: table.length,
500+
});
501+
await dbStorage.tablesData.where('tableId').equals(tableId).modify({
502+
items: table,
503+
columnsIndex: this.columns,
504+
});
523505
}
524506
);
525507

src/workflowEngine/WorkflowWorker.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
parseJSON,
88
isObject,
99
} from '@/utils/helper';
10+
import dbStorage from '@/db/storage';
1011
import templating from './templating';
1112
import renderString from './templating/renderString';
1213
import { convertData, waitTabLoaded } from './helper';
@@ -110,6 +111,7 @@ class WorkflowWorker {
110111
}
111112

112113
setVariable(name, value) {
114+
let variableName = name;
113115
const vars = this.engine.referenceData.variables;
114116

115117
if (name.startsWith('$push:')) {
@@ -119,9 +121,18 @@ class WorkflowWorker {
119121
else if (!Array.isArray(vars[varName])) vars[varName] = [vars[varName]];
120122

121123
vars[varName].push(value);
124+
variableName = varName;
125+
} else {
126+
vars[name] = value;
127+
}
128+
129+
if (variableName.startsWith('$$')) {
130+
dbStorage.variables.put({
131+
value,
132+
name: variableName.slice(2),
133+
});
122134
}
123135

124-
vars[name] = value;
125136
this.engine.addRefDataSnapshot('variables');
126137
}
127138

src/workflowEngine/utils/javascriptBlockUtil.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { getDocumentCtx } from '@/content/handleSelector';
2+
13
export function automaFetchClient(id, { type, resource }) {
24
return new Promise((resolve, reject) => {
35
const validType = ['text', 'json', 'base64'];
@@ -71,10 +73,7 @@ export function jsContentHandler($blockData, $preloadScripts, $automaScript) {
7173
let $documentCtx = document;
7274

7375
if ($blockData.frameSelector) {
74-
const iframeCtx = document.querySelector(
75-
$blockData.frameSelector
76-
)?.contentDocument;
77-
76+
const iframeCtx = getDocumentCtx($blockData.frameSelector);
7877
if (!iframeCtx) {
7978
reject(new Error('iframe-not-found'));
8079
return;

0 commit comments

Comments
 (0)