forked from gongfudev/Exquis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparamController.js
48 lines (41 loc) · 2.21 KB
/
paramController.js
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
define(['paramsManager'],function(paramsManager){
const paramMgr = paramsManager();
// https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518
const htmlToElement = function(html) {
var template = document.createElement('template');
html = html.trim(); // Never return a text node of whitespace as the result
template.innerHTML = html;
return template.content.firstChild;
};
const refreshController = function(activeContentDiv, theCell, editorController){
activeContentDiv.innerHTML = '';
let params = theCell.canvasAnim.getParams();
for(let key in params){
let param = params[key];
let labelString = `<div>${key}</div>`;
let keyDiv = htmlToElement(labelString);
activeContentDiv.appendChild(keyDiv);
let sliderString = `<input type=range value=${param.value} min=${param.min || 0}
max=${param.max || 1} step=${param.step || 0.0001}>`;
let slider = htmlToElement(sliderString);
keyDiv.appendChild(slider);
slider.addEventListener('input', async (event) => {
if (editorController) {
const sourceCode = await theCell.canvasAnim.getSourceCode();
const codeString = sourceCode.code;
const rootAst = paramMgr.parseCodeString(codeString);
let argsAst = paramMgr.findDefineArguments(rootAst);
let paramsAst = paramMgr.extractParamsFromArguments(argsAst);
let paramsO = paramMgr.extractParamsObject(paramsAst);
paramsO[key].value = event.target.valueAsNumber;
paramMgr.setParamsValue(paramsAst, paramsO);
sourceCode.code = paramMgr.generateCodeString(rootAst);
editorController.updateWithSource(sourceCode, theCell.canvasAnim);
}else{
param.value = event.target.valueAsNumber;
}
});
}
};
return {refreshController};
});