Published
Edited
Nov 30, 2019
Fork of Blockly
1 star
Insert cell
Insert cell
viewof src = new BlocklyViewObj(blocklyTarget);
Insert cell
blocklyTarget
Insert cell
Insert cell
src
Insert cell
{
var colored = false;
var color = 998;
var known_types = {} ;
/*
jQuery.getJSON("dtypes.json",function(data){
data.forEach(element => {
known_types[element.name] = element
});
//console.log(data)
updateD()
})
*/
function updateD(){
let out =""
//console.log(known_types)
for (let el in known_types){
out = out+el+"\n"
}
document.getElementById("dlist").innerHTML =out
}
Blockly.Blocks['dtype_value'] = {
init: function() {
var validator = function(newValue) {
if (!known_types[newValue]) return null;
return newValue;
};
this.appendValueInput("NAME")
.setCheck("String")
.appendField(new Blockly.FieldTextInput("uint256", validator), "TYPENAME")
.appendField(new Blockly.FieldTextInput("label"), "LABEL")
.appendField("Ref")
.appendField(new Blockly.FieldCheckbox("FALSE"), "REL");
this.setInputsInline(false);
this.setOutput(true, "String");
this.setColour(color);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['dtype_array'] = {
init: function() {
var validator = function(newValue) {
if (newValue == "") return "";
var num = parseInt(newValue)
if (!num) return null;
return num;
};
this.appendValueInput("NAME")
.setCheck("String")
.appendField("[")
.appendField(new Blockly.FieldTextInput("", validator), "NAME")
.appendField("]");
this.setInputsInline(false);
this.setOutput(true, "String");
this.setColour(color);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['dtype_op'] = {
init: function() {
this.appendValueInput("op0")
.setCheck("String");
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown([["tuple *","*"], ["choice +","+"], ["optional","|"]]), "op");
this.appendValueInput("op1")
.setCheck("String");
this.setInputsInline(false);
this.setOutput(true, "String");
this.setColour(color);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['dtype_def'] = {
init: function() {
this.appendValueInput("NAME")
.setCheck("String")
.appendField(new Blockly.FieldLabelSerializable("Let"), "NAME")
.appendField(new Blockly.FieldTextInput("dtype1"), "TYPE")
.appendField(new Blockly.FieldLabelSerializable("be:"), "AS");
this.setInputsInline(false);
this.setColour(color);
this.setTooltip("Define a new dType");
this.setHelpUrl("https://github.com/pipeos-one/dType");
}
};
}
Insert cell
{
var types=[];
var optionals = [];
var dimensions = {temp:[]}
function noPara(str){
var temp = str
temp = temp.replace(/\(/g,"")
temp = temp.replace(/\)/g,"")
return temp
}
Blockly.JavaScript['dtype_def'] = function(block) {
types = []
optionals = []
dimensions = {temp:[]}
var text_type = block.getFieldValue('TYPE');
var value_name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var typess = ["",""]
//console.log(value_name)
if (value_name) {
//console.log(value_name, "l")
var temp1 = value_name.split("ˆ")
if (!temp1[1]) temp1[1]=""
typess = temp1
}
console.log(typess)
// TODO: Assemble JavaScript into code variable.
var code = "known_types[\""+text_type+'\"] = { \"name\": \"'+text_type
+'\",'+' "types": ['+noPara(typess[0])+'], "optionals": ['+noPara(typess[1])+'], "outputs": [], "lang": 0, "typeChoice": 0, "contractAddress": "TBD in the next step", "source": "TBD in the next step"};\n';
console.log(code)
return code;
};
Blockly.JavaScript['dtype_op'] = function(block) {
var value_op0 = Blockly.JavaScript.valueToCode(block, 'op0', Blockly.JavaScript.ORDER_ATOMIC);
var dropdown_op = block.getFieldValue('op');
var value_op1 = Blockly.JavaScript.valueToCode(block, 'op1', Blockly.JavaScript.ORDER_ATOMIC);
var code1 = "";
var code2 = "";
switch (dropdown_op) {
case "*":
code1 = value_op0+", "+value_op1;
break;
case "+":
code1 = "TBD:)";
break;
case "|":
code1 = ", "+value_op0;
code2 = value_op1+", ";
break;
}
// TODO: Assemble JavaScript into code variable.
//var code = value_op0+", "+value_op1;
// TODO: Change ORDER_NONE to the correct strength.
return [code1+"ˆ"+code2, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['dtype_value'] = function(block) {
var text_name = block.getFieldValue('TYPENAME');
var text_label = block.getFieldValue('LABEL');
var checkbox_rel = block.getFieldValue('REL') == 'TRUE';
var value_name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
//var change = Blockly.Events.BLOCK_CHANGE
//console.log(change)
// TODO: Assemble JavaScript into code variable.
var code = { name: text_name, label: text_label, dimensions: JSON.parse("["+noPara(value_name)+"]"), relation: checkbox_rel? 1:0 }
// TODO: Change ORDER_NONE to the correct strength.
return [JSON.stringify(code), Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['dtype_array'] = function(block) {
var text_name = block.getFieldValue('NAME');
var value_name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
// TODO: Assemble JavaScript into code variable.
var code = '""'
if (text_name) code = '"'+text_name+'"'
if (value_name) code = code+", "+noPara(value_name) ;
// TODO: Change ORDER_NONE to the correct strength.
return [code, Blockly.JavaScript.ORDER_NONE];
};
}
Insert cell
blocklyTarget = blocklyInterfaceTarget()
Insert cell
eval(src)
Insert cell
Insert cell
Blockly = require('blockly');
Insert cell
settings = ({
colored: false,
color: 998,
known_types: {}
})
Insert cell
{
Blockly.Blocks['dtype_value'] = {
init: function() {
var validator = function(newValue) {
if (!settings.known_types[newValue]) return null;
return newValue;
};
this.appendValueInput("NAME")
.setCheck("String")
.appendField(new Blockly.FieldTextInput("uint256", validator), "TYPENAME")
.appendField(new Blockly.FieldTextInput("label"), "LABEL")
.appendField("Ref")
.appendField(new Blockly.FieldCheckbox("FALSE"), "REL");
this.setInputsInline(false);
this.setOutput(true, "String");
this.setColour(settings.color);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['dtype_array'] = {
init: function() {
var validator = function(newValue) {
if (newValue == "") return "";
var num = parseInt(newValue)
if (!num) return null;
return num;
};
this.appendValueInput("NAME")
.setCheck("String")
.appendField("[")
.appendField(new Blockly.FieldTextInput("", validator), "NAME")
.appendField("]");
this.setInputsInline(false);
this.setOutput(true, "String");
this.setColour(settings.color);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['dtype_op'] = {
init: function() {
this.appendValueInput("op0")
.setCheck("String");
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown([["tuple *","*"], ["choice +","+"], ["optional","|"]]), "op");
this.appendValueInput("op1")
.setCheck("String");
this.setInputsInline(false);
this.setOutput(true, "String");
this.setColour(settings.color);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['dtype_def'] = {
init: function() {
this.appendValueInput("NAME")
.setCheck("String")
.appendField(new Blockly.FieldLabelSerializable("Let"), "NAME")
.appendField(new Blockly.FieldTextInput("dtype1"), "TYPE")
.appendField(new Blockly.FieldLabelSerializable("be:"), "AS");
this.setInputsInline(false);
this.setColour(settings.color);
this.setTooltip("Define a new dType");
this.setHelpUrl("https://github.com/pipeos-one/dType");
}
};
}
Insert cell
function blocklyInterfaceTarget(height=300) {
return html`<div style="width: 100%; height: 300px"></div>`
}
Insert cell
class BlocklyViewObj {
constructor(ref) {
Object.defineProperties(this, {
_list: {value: [], writable: true},
_value: {value: '', writable: true}
});
ref.innerHTML = '';
this.workspace = Blockly.inject(ref, {toolbox: bigToolbox})
this.workspace.addChangeListener((e) => {
console.log('change!', e);
//const newValue = Blockly.JavaScript.workspaceToCode(this.workspace);
// let code = Blockly.Dtype.workspaceToCode(this.workspace);
//console.log(code, types, optionals)
//code = code.replace(/\(/g,"")
//code = code.replace(/\)/g,"")
//console.log('updated value to', code)
let newValue = Blockly.JavaScript.workspaceToCode(this.workspace);
if (newValue === this._value) { return; }
this._value = newValue;
console.log('updated value to', this._value);
this.dispatchEvent({type: "input", value: this._value});
})
}
get value() {
return this._value
}
set value(value) {
this._value = value;
this.dispatchEvent({type: "input", value});
}
addEventListener(type, listener) {
if (type != "input" || this._list.includes(listener)) return;
this._list = [listener].concat(this._list);
}
removeEventListener(type, listener) {
if (type != "input") return;
this._list = this._list.filter(l => l !== listener);
}
dispatchEvent(event) {
const p = Promise.resolve(event);
this._list.forEach(l => p.then(l));
}
}
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more