Skip to content

Commit 414eb70

Browse files
committed
Update element fill to replace file URIs in image tags
1 parent 2b3d293 commit 414eb70

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

packages/ide/src/fill/electron.ts

+28-9
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,37 @@ const newCreateElement = <K extends keyof HTMLElementTagNameMap>(tagName: K): HT
2525
// tslint:disable-next-line:no-any
2626
return oldCreateElement.call(document, tagName as any);
2727
};
28+
// tslint:disable-next-line:no-any
29+
const getPropertyDescriptor = (object: any, id: string): PropertyDescriptor | undefined => {
30+
let op = Object.getPrototypeOf(object);
31+
while (!Object.getOwnPropertyDescriptor(op, id)) {
32+
op = Object.getPrototypeOf(op);
33+
}
34+
35+
return Object.getOwnPropertyDescriptor(op, id);
36+
};
37+
38+
if (tagName === "img") {
39+
const img = createElement("img");
40+
const oldSrc = getPropertyDescriptor(img, "src");
41+
if (!oldSrc) {
42+
throw new Error("Failed to find src property");
43+
}
44+
Object.defineProperty(img, "src", {
45+
get: (): string => {
46+
return oldSrc!.get!.call(img);
47+
},
48+
set: (value: string): void => {
49+
value = value.replace(/file:\/\//g, "/resource");
50+
oldSrc!.set!.call(img, value);
51+
},
52+
});
53+
54+
return img;
55+
}
2856

2957
if (tagName === "style") {
3058
const style = createElement("style");
31-
// tslint:disable-next-line:no-any
32-
const getPropertyDescriptor = (object: any, id: string): PropertyDescriptor | undefined => {
33-
let op = Object.getPrototypeOf(object);
34-
while (!Object.getOwnPropertyDescriptor(op, id)) {
35-
op = Object.getPrototypeOf(op);
36-
}
37-
38-
return Object.getOwnPropertyDescriptor(op, id);
39-
};
4059
const oldInnerHtml = getPropertyDescriptor(style, "innerHTML");
4160
if (!oldInnerHtml) {
4261
throw new Error("Failed to find innerHTML property");

0 commit comments

Comments
 (0)