-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTest.js
More file actions
105 lines (90 loc) · 2.83 KB
/
Test.js
File metadata and controls
105 lines (90 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// =================== Scratch extension ===================
// auto arguments is a little over complicated to deduce argument count
const letter = i => String.fromCharCode(97 + i);
const auto_block = (blockType, opcode, text, args) => ({
blockType,
opcode,
text,
arguments: Object.fromEntries(
new Array(text.split('[').length - 1).fill().map((_, i) => [
letter(i), {
type: (args && args[i]) || "number",
defaultValue: " "
}
])
)
});
const mat_reporter_f = f => o => to_s(f(...new Array(Object.entries(o).length).fill().map((_, i) => from_s(o[letter(i)])));
class ScratchMath {
constructor(runtime) {
this.runtime = runtime;
}
getInfo() {
return {
id: "WECTE",
name: "WE Coin Tools Extension",
blocks: [
auto_block('reporter', "Fetch", "Fetch [a]"),
{
blockType: 'command',
opcode: 'EvalCmd',
text: 'Run [a] in Javascript',
arguments: {
a: {
type: "string",
defaultValue: " "
},
b: {
type: "string",
defaultValue: " "
}
}
},
auto_block('boolean', "isWE", "Is WE Coin?"),
'---',
]
};
}
EvalCmd({ a }) {
try {
eval(a);
} catch (err) {
alert(err);
}
}
Fetch({ a }) {
let file = a;
return fetch(file)
.then(x => x.text())
.then(y => {
let ans = y;
return ans;
});
}
isWE() {
return true;
}
}
// ============== globalize vm and load extension ===============
function findReactComponent(element) {
let fiber = element[Object.keys(element).find(key => key.startsWith("__reactInternalInstance$"))];
if (fiber == null) return null;
const go = fiber => {
let parent = fiber.return;
while (typeof parent.type == "string") {
parent = parent.return;
}
return parent;
};
fiber = go(fiber);
while (fiber.stateNode == null) {
fiber = go(fiber);
}
return fiber.stateNode;
}
window.vm = findReactComponent(document.getElementsByClassName("stage-header_stage-size-row_14N65")[0]).props.vm;
(function () {
var extensionInstance = new ScratchMath(window.vm.extensionManager.runtime);
var serviceName = window.vm.extensionManager._registerInternalExtension(extensionInstance);
window.vm.extensionManager._loadedExtensions.set(extensionInstance.getInfo().id, serviceName);
})();