基于Web的、开源的、可视化程序编辑器。
Blockly 是一个完全客户端应用,它无需服务端的任何支持(除非你要使用云存储等服务端功能),且没有第三方的依赖(除非你想重新编译内核),一切都是开源的。
下载zip https://github.com/google/blockly/zipball/master
下载源码并解压后,可以在浏览器打开demos/fixed/index.html
文件,验证 Blockly 的块是否可以拖动等。
demos
有其他demo可以试用
function executeBlockCode() {
var code = Blockly.JavaScript.workspaceToCode(workspace);
var initFunc = function (interpreter, scope) {
var alertWrapper = function (text) {
text = text ? text.toString() : '';
return interpreter.createPrimitive(alert(text));
};
interpreter.setProperty(scope, 'alert',
interpreter.createNativeFunction(alertWrapper));
var promptWrapper = function (text) {
text = text ? text.toString() : '';
return interpreter.createPrimitive(prompt(text));
};
interpreter.setProperty(scope, 'prompt', interpreter.createNativeFunction(promptWrapper));
};
var myInterpreter = new Interpreter(code, initFunc);
//此处循环执行功能(打印等)
var stepsAllowed = 10000;
while (myInterpreter.step() && stepsAllowed) {
stepsAllowed--;
}
if (!stepsAllowed) {
throw EvalError('Infinite loop.');
}
//输出转化出的代码
console.log(myInterpreter.value);
}
document.getElementById('playButton').addEventListener('click', executeBlockCode);
<category id="catLogic" colour="210" name="条件">
<block type="tinet_filter_asr">block>
<block type="tinet_indistinct_match">block>
category>
Blockly.Blocks["tinet_indistinct_match"] = {
init: function () {
this.jsonInit({
"type": "tinet_indistinct_match",
"message0": "项目 %1 匹配 %2",
"args0": [ //参数匹配
{
"type": "input_value",
"name": "ITEM",
"check": "Variable"
},
{
"type": "field_input",
"name": "EXPRESSION",
"text": "表达式" //默认值
}
],
"inputsInline": true,
"output": null,
"colour": 230,
"tooltip": "",
"helpUrl": ""
})
}
}
Blockly.JavaScript['tinet_indistinct_match'] = function (block) {
var item = Blockly.JavaScript.valueToCode(block, 'ITEM', Blockly.JavaScript.ORDER_ATOMIC);
item = item === '' ? 'null' : item;
var express = block.getFieldValue('EXPRESSION');//取出表达式处内容
express = express === '正则表达式' ? '' : express;
var code = 'service.check(\'{"checkType":7, "regular":"' + express + '"}\', ' + item + ', strRegService, result)';
return [code, Blockly.JavaScript.ORDER_ATOMIC];
};
参考文章 https://itbilu.com/other/relate/4JL8NjUP7.html#get-started