-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathjsBuilder.js
More file actions
133 lines (110 loc) · 4.4 KB
/
jsBuilder.js
File metadata and controls
133 lines (110 loc) · 4.4 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import { Platform } from "react-native"
export const convertToPostMessageString = obj => {
return JSON.stringify(obj, (key, val) => {
if (typeof val === "function") {
return new Function("return " + val.toString())
}
return val
})
}
export const toString = obj => {
if (obj === undefined) return JSON.stringify({})
return JSON.stringify(obj, (key, val) => {
if (typeof val === "function") {
return val.toString()
}
return val
})
}
export const getJavascriptSource = props => {
const { OS } = Platform
const renderer = "canvas"
return `
try{
var chart = echarts.init(document.getElementById('main'), 'walden', {renderer: '${renderer}'});
chart.setOption(parse(decodeURI(\"${encodeURI(
toString(props.option)
)}\")));
setBackgroundColor("${props.backgroundColor}");
function setBackgroundColor(color) {
document.getElementById('main').style.backgroundColor = color;
}
function sendData(data) {
window.ReactNativeWebView.postMessage(JSON.stringify({"types":"DATA","payload": data}));
}
function sendCallbackData(uuid, data) {
window.ReactNativeWebView.postMessage(JSON.stringify({"types":"CALLBACK", "uuid": uuid, "payload": data}));
}
function getOS() {
return ${OS};
}
function parse (data) {
return JSON.parse(data, function (key, value) {
if (value
&& typeof value === "string"
&& value.substr(0,8) === "function") {
var startBody = value.indexOf('{') + 1;
var endBody = value.lastIndexOf('}');
var startArgs = value.indexOf('(') + 1;
var endArgs = value.indexOf(')');
return new Function(value.substring(startArgs, endArgs)
, value.substring(startBody, endBody));
}
return value;
});
}
function toString (obj) {
var result = JSON.stringify(obj, function (key, val) {
if (typeof val === 'function') {
return val.toString();
}
return val;
});
return result;
};
window.onresize = function() {
chart.resize();
};
function processMessage (e) {
var req = parse(e.data);
switch(req.types) {
case "SET_OPTION":
chart.setOption(req.payload.option, req.payload.notMerge,req.payload.lazyUpate);
break;
case "CLEAR":
chart.clear();
break;
case "SET_BACKGROUND_COLOR":
setBackgroundColor(req.color);
break;
case "GET_OPTION":
var option = chart.getOption();
var data = {};
if(req.properties !== undefined) {
req.properties.forEach(function (prop) {
data[prop] = option[prop];
});
} else {
var data = {
option: option
};
}
sendCallbackData(req.uuid, data);
break;
default:
break;
}
}
window.document.addEventListener('message', function(e) {
processMessage(e);
});
window.addEventListener('message', function(e) {
processMessage(e);
});
${props.additionalCode}
}
catch (e) {
alert(e)
}
`
}