Skip to content

Commit e9810b3

Browse files
authored
v1.28.18
2 parents 0457860 + e9105f6 commit e9810b3

File tree

7 files changed

+78
-23
lines changed

7 files changed

+78
-23
lines changed

Diff for: package.json

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

Diff for: src/background/index.js

+35
Original file line numberDiff line numberDiff line change
@@ -253,4 +253,39 @@ if (!isMV2) {
253253
sandboxIframe.id = 'sandbox';
254254

255255
document.body.appendChild(sandboxIframe);
256+
257+
window.addEventListener('message', async ({ data }) => {
258+
if (data?.type !== 'automa-fetch') return;
259+
260+
const sendResponse = (result) => {
261+
sandboxIframe.contentWindow.postMessage(
262+
{
263+
type: 'fetchResponse',
264+
data: result,
265+
id: data.data.id,
266+
},
267+
'*'
268+
);
269+
};
270+
271+
const { type, resource } = data.data;
272+
try {
273+
const response = await fetch(resource.url, resource);
274+
if (!response.ok) throw new Error(response.statusText);
275+
276+
let result = null;
277+
278+
if (type === 'base64') {
279+
const blob = await response.blob();
280+
const base64 = await readFileAsBase64(blob);
281+
282+
result = base64;
283+
} else {
284+
result = await response[type]();
285+
}
286+
sendResponse({ isError: false, result });
287+
} catch (error) {
288+
sendResponse({ isError: true, result: error.message });
289+
}
290+
});
256291
}

Diff for: src/components/newtab/workflow/edit/EditJavascriptCode.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
Run before page loaded
6262
</ui-checkbox>
6363
</template>
64-
<ui-modal v-model="state.showCodeModal" content-class="max-w-4xl">
64+
<ui-modal v-model="state.showCodeModal" content-class="w-11\/12">
6565
<template #header>
6666
<ui-tabs v-model="state.activeTab" class="border-none">
6767
<ui-tab value="code">

Diff for: src/content/handleSelector.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@ export function markElement(el, { id, data }) {
1010
}
1111

1212
export function getDocumentCtx(frameSelector) {
13+
if (!frameSelector) return document;
14+
1315
let documentCtx = document;
1416

15-
if (frameSelector) {
16-
const type = isXPath(frameSelector) ? 'xpath' : 'cssSelector';
17-
const element = FindElement[type]({ selector: frameSelector });
17+
const iframeSelectors = frameSelector.split('|>');
18+
const type = isXPath(frameSelector) ? 'xpath' : 'cssSelector';
19+
iframeSelectors.forEach((selector) => {
20+
if (!documentCtx) return;
21+
22+
const element = FindElement[type]({ selector }, documentCtx);
1823
documentCtx = element?.contentDocument;
19-
}
24+
});
2025

2126
return documentCtx;
2227
}
@@ -62,6 +67,7 @@ export default async function (
6267
}
6368

6469
const documentCtx = getDocumentCtx(frameSelector);
70+
6571
if (!documentCtx) {
6672
if (onError) onError(new Error('iframe-not-found'));
6773

Diff for: src/content/index.js

+19-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import findSelector from '@/lib/findSelector';
55
import { sendMessage } from '@/utils/message';
66
import automa from '@business';
77
import { toCamelCase, isXPath } from '@/utils/helper';
8-
import handleSelector, { queryElements } from './handleSelector';
8+
import handleSelector, {
9+
queryElements,
10+
getDocumentCtx,
11+
} from './handleSelector';
912
import blocksHandler from './blocksHandler';
1013
import showExecutedBlock from './showExecutedBlock';
1114
import shortcutListener from './services/shortcutListener';
@@ -49,19 +52,27 @@ function messageToFrame(frameElement, blockData) {
4952
async function executeBlock(data) {
5053
const removeExecutedBlock = showExecutedBlock(data, data.executedBlockOnWeb);
5154
if (data.data?.selector?.includes('|>')) {
52-
const [frameSelector, selector] = data.data.selector.split(/\|>(.+)/);
55+
const selectorsArr = data.data.selector.split('|>');
56+
const selector = selectorsArr.pop();
57+
const frameSelector = selectorsArr.join('|>');
58+
59+
const framElSelector = selectorsArr.pop();
5360

5461
let findBy = data?.data?.findBy;
5562
if (!findBy) {
5663
findBy = isXPath(frameSelector) ? 'xpath' : 'cssSelector';
5764
}
5865

59-
const frameElement = await queryElements({
60-
findBy,
61-
multiple: false,
62-
waitForSelector: 5000,
63-
selector: frameSelector,
64-
});
66+
const documentCtx = getDocumentCtx(selectorsArr.join('|>'));
67+
const frameElement = await queryElements(
68+
{
69+
findBy,
70+
multiple: false,
71+
waitForSelector: 5000,
72+
selector: framElSelector,
73+
},
74+
documentCtx
75+
);
6576
const frameError = (message) => {
6677
const error = new Error(message);
6778
error.data = { selector: frameSelector };

Diff for: src/newtab/pages/workflows/[id].vue

+7-5
Original file line numberDiff line numberDiff line change
@@ -1239,12 +1239,15 @@ function onDragoverEditor({ target }) {
12391239
}
12401240
function onDropInEditor({ dataTransfer, clientX, clientY, target }) {
12411241
const savedBlocks = parseJSON(dataTransfer.getData('savedBlocks'), null);
1242+
1243+
const editorRect = editor.value.viewportRef.value.getBoundingClientRect();
1244+
const position = editor.value.project({
1245+
y: clientY - editorRect.top,
1246+
x: clientX - editorRect.left,
1247+
});
1248+
12421249
if (savedBlocks && !isPackage) {
12431250
if (savedBlocks.settings.asBlock) {
1244-
const position = editor.value.project({
1245-
x: clientX - 360,
1246-
y: clientY - 18,
1247-
});
12481251
editor.value.addNodes([
12491252
{
12501253
position,
@@ -1285,7 +1288,6 @@ function onDropInEditor({ dataTransfer, clientX, clientY, target }) {
12851288
return;
12861289
}
12871290
1288-
const position = editor.value.project({ x: clientX - 360, y: clientY - 18 });
12891291
const nodeId = nanoid();
12901292
const newNode = {
12911293
position,

Diff for: src/workflowEngine/blocksHandler/handlerHandleDownload.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -144,15 +144,16 @@ async function handleDownload({ data, id: blockId }) {
144144
return;
145145
}
146146

147-
if (downloadId !== id) return;
147+
if (downloadId !== id || !state) return;
148148

149149
if (filename) currentFilename = filename.current;
150150

151-
if (state && state.current === 'complete') {
151+
const DOWNLOAD_STATE = ['complete', 'interrupted'];
152+
if (DOWNLOAD_STATE.includes(state.current)) {
152153
resolvePromise(id);
153154
} else {
154-
browser.downloads.search({ id }).then(([download]) => {
155-
if (!download || !download.endTime) return;
155+
browser.downloads.search({ id: downloadId }).then(([download]) => {
156+
if (!download || !DOWNLOAD_STATE.includes(download.state)) return;
156157

157158
resolvePromise(id);
158159
});

0 commit comments

Comments
 (0)