Skip to content
This repository was archived by the owner on Nov 22, 2021. It is now read-only.

Commit 2171b24

Browse files
committed
optimize gen code of firebase block
1 parent 527e1b8 commit 2171b24

File tree

5 files changed

+136
-24
lines changed

5 files changed

+136
-24
lines changed

blocks/msg/en.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,16 +309,24 @@ Blockly.Msg.WEBDUINO_BUZZER_SINGLE_PITCH = "pitch";
309309
Blockly.Msg.WEBDUINO_BUZZER_SINGLE_TEMPOS = "tempo";
310310

311311
Blockly.Msg.WEBDUINO_FIREBASE_NAME = "< Firebase > name:";
312+
Blockly.Msg.WEBDUINO_FIREBASE_ADDCOLUMN = 'Add Column';
313+
Blockly.Msg.WEBDUINO_FIREBASE_COLUMN = 'column';
314+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATA = "Add data";
315+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATACOLUMN = 'column ';
316+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATANAME = ' name:';
317+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATAVAL = ' value:';
312318
Blockly.Msg.WEBDUINO_FIREBASE_URL = ",url:";
313319
Blockly.Msg.WEBDUINO_FIREBASE_DO = "do:";
314320
Blockly.Msg.WEBDUINO_FIREBASE_WRITE = "Write";
315-
Blockly.Msg.WEBDUINO_FIREBASE_IS = "is";
321+
Blockly.Msg.WEBDUINO_FIREBASE_S = "is";
316322
Blockly.Msg.WEBDUINO_FIREBASE_READ = "If";
317323
Blockly.Msg.WEBDUINO_FIREBASE_ATTR = "changed, read property";
318324
Blockly.Msg.WEBDUINO_FIREBASE_TO = "to";
319325
Blockly.Msg.WEBDUINO_FIREBASE_CLEAR = "Clear Database";
320326
Blockly.Msg.WEBDUINO_FIREBASE_READONCE = "Read";
321327
Blockly.Msg.WEBDUINO_FIREBASE_ATTRONCE = "'s property";
328+
Blockly.Msg.WEBDUINO_FIREBASE_DATAALL = "All";
329+
Blockly.Msg.WEBDUINO_FIREBASE_DATALAST = "Last one";
322330

323331
// LED
324332

blocks/msg/zh-hant.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,13 @@ Blockly.Msg.WEBDUINO_FISH_RIGHT = "(右轉)";
401401

402402
// Firebase
403403

404-
Blockly.Msg.WEBDUINO_FIREBASE_NAME = "< Firebase > 名稱";
404+
Blockly.Msg.WEBDUINO_FIREBASE_NAME = "載入 Firebase 資料庫";
405+
Blockly.Msg.WEBDUINO_FIREBASE_ADDCOLUMN = '增加資料欄位';
406+
Blockly.Msg.WEBDUINO_FIREBASE_COLUMN = '欄位';
407+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATA = "寫入資料";
408+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATACOLUMN = '欄位 ';
409+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATANAME = ' 名稱:';
410+
Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATAVAL = ' 值:';
405411
Blockly.Msg.WEBDUINO_FIREBASE_URL = "網址";
406412
Blockly.Msg.WEBDUINO_FIREBASE_DO = "執行";
407413
Blockly.Msg.WEBDUINO_FIREBASE_WRITE = "寫入";
@@ -413,6 +419,8 @@ Blockly.Msg.WEBDUINO_FIREBASE_TO = "到";
413419
Blockly.Msg.WEBDUINO_FIREBASE_CLEAR = "清空資料庫";
414420
Blockly.Msg.WEBDUINO_FIREBASE_READONCE = "載入資料庫";
415421
Blockly.Msg.WEBDUINO_FIREBASE_ATTRONCE = "屬性";
422+
Blockly.Msg.WEBDUINO_FIREBASE_DATAALL = "完整內容";
423+
Blockly.Msg.WEBDUINO_FIREBASE_DATALAST = "最後一筆更新";
416424

417425
// RFID
418426

blocks/webduino.js

Lines changed: 106 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,12 +1891,10 @@ Blockly.Blocks['servo_angle_set'] = {
18911891
Blockly.Blocks['data_firebase'] = {
18921892
init: function () {
18931893
this.appendValueInput("name_")
1894-
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_NAME, "< Firebase > 名稱:");
1894+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_NAME, "使用 firebase 資料庫");
18951895
this.appendDummyInput()
18961896
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_URL, "網址:")
18971897
.appendField(new Blockly.FieldTextInput("https://<YOUR-FIREBASE-APP>.firebaseio.com"), "url_");
1898-
this.appendStatementInput("do_")
1899-
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_DO, "執行:");
19001898
this.setPreviousStatement(true);
19011899
this.setNextStatement(true);
19021900
this.setTooltip('');
@@ -1905,17 +1903,115 @@ Blockly.Blocks['data_firebase'] = {
19051903
}
19061904
};
19071905

1908-
Blockly.Blocks['data_firebase_write'] = {
1906+
Blockly.Blocks['data_firebase_write_container'] = {
19091907
init: function () {
1910-
this.appendStatementInput("write_")
1911-
.appendField(new Blockly.FieldVariable("myFirebase"), "var_")
1912-
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_WRITE, "寫入");
1908+
this.setColour(100);
1909+
this.appendDummyInput()
1910+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_ADDCOLUMN, '增加資料欄位');
1911+
this.appendStatementInput('STACK');
1912+
this.setTooltip('');
1913+
this.contextMenu = false;
1914+
}
1915+
};
1916+
1917+
Blockly.Blocks['data_firebase_write_item'] = {
1918+
init: function () {
1919+
this.setColour(100);
1920+
this.appendDummyInput()
1921+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_COLUMN,'欄位');
19131922
this.setPreviousStatement(true);
19141923
this.setNextStatement(true);
19151924
this.setTooltip('');
1925+
this.contextMenu = false;
1926+
}
1927+
};
1928+
1929+
Blockly.Blocks['data_firebase_write'] = {
1930+
init: function () {
1931+
this.appendDummyInput()
1932+
.appendField(new Blockly.FieldVariable("myFirebase"), "var_")
1933+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATA,"寫入資料");
19161934
this.setColour(160);
1935+
this.itemCount_ = 2;
1936+
this.updateShape_();
1937+
this.setMutator(new Blockly.Mutator(['data_firebase_write_item']));
1938+
this.setTooltip('');
1939+
this.setPreviousStatement(true);
1940+
this.setNextStatement(true);
19171941
this.setHelpUrl('http://www.example.com/');
1918-
}
1942+
},
1943+
mutationToDom: function () {
1944+
var container = document.createElement('mutation');
1945+
container.setAttribute('items', this.itemCount_);
1946+
return container;
1947+
},
1948+
domToMutation: function (xmlElement) {
1949+
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
1950+
this.updateShape_();
1951+
},
1952+
decompose: function (workspace) {
1953+
var containerBlock = Blockly.Block.obtain(workspace,
1954+
'data_firebase_write_container');
1955+
containerBlock.initSvg();
1956+
var connection = containerBlock.getInput('STACK').connection;
1957+
for (var i = 0; i < this.itemCount_; i++) {
1958+
var itemBlock = Blockly.Block.obtain(workspace, 'data_firebase_write_item');
1959+
itemBlock.initSvg();
1960+
connection.connect(itemBlock.previousConnection);
1961+
connection = itemBlock.nextConnection;
1962+
}
1963+
return containerBlock;
1964+
},
1965+
compose: function (containerBlock) {
1966+
var itemBlock = containerBlock.getInputTargetBlock('STACK');
1967+
var connections = [];
1968+
while (itemBlock) {
1969+
connections.push(itemBlock.valueConnection_);
1970+
itemBlock = itemBlock.nextConnection &&
1971+
itemBlock.nextConnection.targetBlock();
1972+
}
1973+
this.itemCount_ = connections.length;
1974+
this.updateShape_();
1975+
for (var i = 0; i < this.itemCount_; i++) {
1976+
if (connections[i]) {
1977+
this.getInput('data_' + i).connection.connect(connections[i]);
1978+
}
1979+
}
1980+
},
1981+
saveConnections: function (containerBlock) {
1982+
var itemBlock = containerBlock.getInputTargetBlock('STACK');
1983+
var i = 0;
1984+
while (itemBlock) {
1985+
var input = this.getInput('data_' + i);
1986+
itemBlock.valueConnection_ = input && input.connection.targetConnection;
1987+
i++;
1988+
itemBlock = itemBlock.nextConnection &&
1989+
itemBlock.nextConnection.targetBlock();
1990+
}
1991+
},
1992+
updateShape_: function () {
1993+
var v = [];
1994+
if (this.getInput('EMPTY')) {
1995+
this.removeInput('EMPTY');
1996+
} else {
1997+
var i = 0;
1998+
while (this.getInput('data_' + i)) {
1999+
v[i] = this.getInput('data_' + i).fieldRow[1].text_;
2000+
this.removeInput('data_' + i);
2001+
i++;
2002+
}
2003+
}
2004+
if (this.itemCount_ == 0) {} else {
2005+
for (var i = 0; i < this.itemCount_; i++) {
2006+
this.appendValueInput('data_' + i)
2007+
.setAlign(Blockly.ALIGN_RIGHT)
2008+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATACOLUMN + (i + 1) + Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATANAME)
2009+
.appendField(new Blockly.FieldTextInput('...'), "name_" + i)
2010+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_WRITEDATAVAL);
2011+
}
2012+
}
2013+
},
2014+
newQuote_: Blockly.Blocks['text'].newQuote_
19192015
};
19202016

19212017
Blockly.Blocks['data_firebase_data'] = {
@@ -1940,8 +2036,8 @@ Blockly.Blocks['data_firebase_read'] = {
19402036
.appendField(new Blockly.FieldTextInput("..."), "attr_")
19412037
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_S, "的")
19422038
.appendField(new Blockly.FieldDropdown([
1943-
["完整內容", '1'],
1944-
["最後一筆更新", '2']
2039+
[Blockly.Msg.WEBDUINO_FIREBASE_DATAALL, '1'],
2040+
[Blockly.Msg.WEBDUINO_FIREBASE_DATALAST, '2']
19452041
]), "type_")
19462042
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_TO, "到");
19472043
this.appendStatementInput("do_")

generators/webduino.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,10 +1145,18 @@ Blockly.JavaScript['data_firebase'] = function (block) {
11451145
Blockly.JavaScript['data_firebase_write'] = function (block) {
11461146
var variable_var_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('var_'), Blockly.Variables.NAME_TYPE);
11471147
var statements_write_ = Blockly.JavaScript.statementToCode(block, 'write_');
1148-
var code = variable_var_ + '.push({\n' +
1149-
' ' + statements_write_ + '\n' +
1150-
'});\n' +
1151-
'console.log("write ok");\n';
1148+
var c = '';
1149+
for (var n = 0; n < block.itemCount_; n++) {
1150+
var name = block.getFieldValue('name_' + n) || 'unknow';
1151+
var val = Blockly.JavaScript.valueToCode(block, 'data_' + n) || '""';
1152+
if(n<(block.itemCount_-1)){
1153+
c = c + ' ' + name +':'+val +',\n';
1154+
}else{
1155+
c = c + ' ' + name +':'+val +'\n';
1156+
}
1157+
}
1158+
var code = variable_var_ + '.push({\n'+c+
1159+
'});\n';
11521160
return code;
11531161
};
11541162

views/index.handlebars

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -907,21 +907,13 @@
907907
</value>
908908
</block>
909909
<block type="data_firebase_write"></block>
910-
<block type="data_firebase_data"></block>
911910
<block type="data_firebase_read">
912911
<value name="read_">
913912
<block type="variables_get">
914913
<field name="VAR">val</field>
915914
</block>
916915
</value>
917916
</block>
918-
<block type="data_firebase_readonce">
919-
<value name="read_">
920-
<block type="variables_get">
921-
<field name="VAR">val</field>
922-
</block>
923-
</value>
924-
</block>
925917
<block type="data_firebase_clear"></block>
926918
</category>
927919
<sep></sep>

0 commit comments

Comments
 (0)