33 | 33 |
transformersPanel.style.display = "inline-block";
|
34 | 34 |
transformersPanel.style.verticalAlign = "top";
|
35 | 35 |
|
|
36 |
var MAX_TRANSFORMERS = 8; // TODO dynamic
|
|
37 |
var transformerSlots = [];
|
|
38 |
|
36 | 39 |
var transformerNames = [["identity", "---"]];
|
37 | 40 |
for (var key in transformer) {
|
38 | 41 |
if (key !== 'identity' && transformer.hasOwnProperty(key)) {
|
|
40 | 43 |
}
|
41 | 44 |
}
|
42 | 45 |
|
43 | |
var MAX_TRANSFORMERS = 8; // TODO dynamic
|
44 | |
var transformerSelects = [];
|
|
46 |
var parseOptions = function(text) {
|
|
47 |
var args = text.split(' ');
|
|
48 |
var cfg = {};
|
|
49 |
for (var i = 0; i < args.length; i++) {
|
|
50 |
var paramPair = args[i].split('=');
|
|
51 |
if (paramPair.length == 2) {
|
|
52 |
cfg[paramPair[0]] = paramPair[1];
|
|
53 |
} else {
|
|
54 |
// register an error
|
|
55 |
}
|
|
56 |
}
|
|
57 |
return cfg;
|
|
58 |
};
|
|
59 |
|
|
60 |
var process = function() {
|
|
61 |
var t = transformer['identity'].makeTransformer({});
|
|
62 |
for (var i = 0; i < transformerSlots.length; i++) {
|
|
63 |
var select = transformerSlots[i].select;
|
|
64 |
var transformerName = select.options[select.selectedIndex].value;
|
|
65 |
var options = parseOptions(transformerSlots[i].optionsInput.value);
|
|
66 |
var t2 = transformer[transformerName].makeTransformer(options);
|
|
67 |
t = compose(t2, t);
|
|
68 |
}
|
|
69 |
var inLines = input.value.split('\n');
|
|
70 |
var outLines = [];
|
|
71 |
for (var i = 0; i < inLines.length; i++) {
|
|
72 |
outLines.push(t(inLines[i]));
|
|
73 |
}
|
|
74 |
output.value = outLines.join('\n');
|
|
75 |
};
|
|
76 |
|
|
77 |
processButton = yoob.makeButton(transformersPanel, "Process", process);
|
|
78 |
|
|
79 |
var liveMode;
|
|
80 |
yoob.makeCheckbox(transformersPanel, false, "Live mode", function(b) {
|
|
81 |
liveMode = b;
|
|
82 |
});
|
|
83 |
yoob.makeLineBreak(transformersPanel);
|
45 | 84 |
|
46 | 85 |
for (var i = 0; i < MAX_TRANSFORMERS; i++) {
|
47 | 86 |
var select = yoob.makeSelect(
|
48 | 87 |
transformersPanel, "Transformer " + (i+1), transformerNames
|
49 | 88 |
);
|
50 | |
transformerSelects.push(select);
|
|
89 |
select.onchange = function(e) {
|
|
90 |
if (liveMode) {
|
|
91 |
process();
|
|
92 |
}
|
|
93 |
};
|
51 | 94 |
yoob.makeLineBreak(transformersPanel);
|
52 | |
yoob.makeTextInput(transformersPanel, 24);
|
|
95 |
var optionsInput = yoob.makeTextInput(transformersPanel, 24);
|
|
96 |
optionsInput.onchange = function(e) {
|
|
97 |
if (liveMode) {
|
|
98 |
process();
|
|
99 |
}
|
|
100 |
};
|
|
101 |
optionsInput.title = "Options";
|
53 | 102 |
yoob.makeLineBreak(transformersPanel);
|
|
103 |
transformerSlots.push({
|
|
104 |
select: select,
|
|
105 |
optionsInput: optionsInput
|
|
106 |
});
|
54 | 107 |
}
|
55 | |
|
56 | |
processButton = yoob.makeButton(transformersPanel, "Process", function() {
|
57 | |
var t = transformer['identity'].makeTransformer({});
|
58 | |
for (var i = 0; i < transformerSelects.length; i++) {
|
59 | |
var select = transformerSelects[i];
|
60 | |
var transformerName = select.options[select.selectedIndex].value;
|
61 | |
var t2 = transformer[transformerName].makeTransformer({chars: 'a'});
|
62 | |
t = compose(t2, t);
|
63 | |
}
|
64 | |
output.value = t(input.value);
|
65 | |
});
|
66 | 108 |
|
67 | 109 |
output = yoob.makeTextArea(container, 40, 20);
|
68 | 110 |
</script>
|