Skip to content

Commit a557995

Browse files
committed
Merge branch 'tutorials' into gh-pages
2 parents 866a3e0 + ba5df43 commit a557995

8 files changed

Lines changed: 185 additions & 13 deletions

File tree

blocks/msg/en.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,16 @@ Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC2 = "DoReMi";
119119
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC3 = "Big brother and father";
120120
Blockly.Msg.WEBDUINO_BUZZER_CHOOSE_MUSIC4 = "Super Mario Chord";
121121

122+
Blockly.Msg.WEBDUINO_FIREBASE_NAME = "< Firebase > name:";
123+
Blockly.Msg.WEBDUINO_FIREBASE_URL = ",url:";
124+
Blockly.Msg.WEBDUINO_FIREBASE_DO = "do:";
125+
Blockly.Msg.WEBDUINO_FIREBASE_WRITE = "Write";
126+
Blockly.Msg.WEBDUINO_FIREBASE_IS = "is";
127+
Blockly.Msg.WEBDUINO_FIREBASE_READ = "Read";
128+
Blockly.Msg.WEBDUINO_FIREBASE_ATTR = "'s property";
129+
Blockly.Msg.WEBDUINO_FIREBASE_TO = "to";
130+
Blockly.Msg.WEBDUINO_FIREBASE_CLEAR = "Clear Database";
131+
122132
// LED
123133

124134
Blockly.Msg.WEBDUINO_LIGHT = "Light";

blocks/msg/zh-hant.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,15 @@ Blockly.Msg.WEBDUINO_CAR_R = "右轉";
118118
Blockly.Msg.WEBDUINO_CAR_MOVE_FOR = "持續";
119119
Blockly.Msg.WEBDUINO_CAR_MOVE_SEC = "秒";
120120

121+
Blockly.Msg.WEBDUINO_FIREBASE_NAME = "< Firebase > 名稱:";
122+
Blockly.Msg.WEBDUINO_FIREBASE_URL = "網址:";
123+
Blockly.Msg.WEBDUINO_FIREBASE_DO = "執行:";
124+
Blockly.Msg.WEBDUINO_FIREBASE_WRITE = "寫入";
125+
Blockly.Msg.WEBDUINO_FIREBASE_IS = "為";
126+
Blockly.Msg.WEBDUINO_FIREBASE_READ = "取出";
127+
Blockly.Msg.WEBDUINO_FIREBASE_ATTR = "的屬性";
128+
Blockly.Msg.WEBDUINO_FIREBASE_TO = "到";
129+
Blockly.Msg.WEBDUINO_FIREBASE_CLEAR = "清空資料庫";
121130
// LED
122131

123132
Blockly.Msg.WEBDUINO_LIGHT = "燈泡";

blocks/webduino.js

Lines changed: 86 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,11 @@ Blockly.Blocks['led_toggle'] = {
8282
};
8383

8484
Blockly.Blocks['led_intensity'] = {
85-
init: function() {
85+
init: function () {
8686
this.appendValueInput("intensity_")
87-
.setCheck("Number")
88-
.appendField(new Blockly.FieldVariable("led"), "led_")
89-
.appendField(Blockly.Msg.WEBDUINO_LED_INTENSITY, "強度 (0-1):");
87+
.setCheck("Number")
88+
.appendField(new Blockly.FieldVariable("led"), "led_")
89+
.appendField(Blockly.Msg.WEBDUINO_LED_INTENSITY, "強度 (0-1):");
9090
this.setPreviousStatement(true);
9191
this.setNextStatement(true);
9292
this.setTooltip('');
@@ -636,14 +636,14 @@ Blockly.Blocks['buzzer_play'] = {
636636
Blockly.Blocks['buzzer_event'] = {
637637
init: function () {
638638
this.appendDummyInput()
639-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_LET,"讓")
639+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_LET, "讓")
640640
.appendField(new Blockly.FieldVariable("buzzer"), "var_")
641641
.appendField(new Blockly.FieldDropdown([
642642
[Blockly.Msg.WEBDUINO_BUZZER_EVENT_STOP, ".stop()"],
643643
[Blockly.Msg.WEBDUINO_BUZZER_EVENT_PAUSE, ".pause()"],
644644
[Blockly.Msg.WEBDUINO_BUZZER_EVENT_RESUMEPLAY, ".play()"]
645645
]), "event_")
646-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_EVENT_PLAY,"播放");
646+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_EVENT_PLAY, "播放");
647647
this.setPreviousStatement(true);
648648
this.setNextStatement(true);
649649
this.setTooltip('');
@@ -656,13 +656,13 @@ Blockly.Blocks['buzzer_event'] = {
656656
Blockly.Blocks['buzzer_state'] = {
657657
init: function () {
658658
this.appendDummyInput()
659-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_CHECK,"判斷")
659+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_CHECK, "判斷")
660660
.appendField(new Blockly.FieldVariable("buzzer"), "var_")
661-
.appendField(Blockly.Msg.WEBDUINO_BUZZER_STATE,"的狀態為:")
661+
.appendField(Blockly.Msg.WEBDUINO_BUZZER_STATE, "的狀態為:")
662662
.appendField(new Blockly.FieldDropdown([
663-
[Blockly.Msg.WEBDUINO_BUZZER_STATE_STOP,"stopped"],
664-
[Blockly.Msg.WEBDUINO_BUZZER_STATE_PAUSE,"paused"],
665-
[Blockly.Msg.WEBDUINO_BUZZER_STATE_PLAYING,"playing"]
663+
[Blockly.Msg.WEBDUINO_BUZZER_STATE_STOP, "stopped"],
664+
[Blockly.Msg.WEBDUINO_BUZZER_STATE_PAUSE, "paused"],
665+
[Blockly.Msg.WEBDUINO_BUZZER_STATE_PLAYING, "playing"]
666666
]), "state_");
667667
this.setOutput(true);
668668
this.setTooltip('');
@@ -794,3 +794,78 @@ Blockly.Blocks['servo_angle_set'] = {
794794
this.setHelpUrl('http://www.example.com/');
795795
}
796796
};
797+
798+
// https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#qyqz9n
799+
Blockly.Blocks['data_firebase'] = {
800+
init: function() {
801+
this.appendValueInput("name_")
802+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_NAME, "< Firebase > 名稱:");
803+
this.appendDummyInput()
804+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_URL, "網址:")
805+
.appendField(new Blockly.FieldTextInput("https://<YOUR-FIREBASE-APP>.firebaseio.com"), "url_");
806+
this.appendStatementInput("do_")
807+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_DO, "執行:");
808+
this.setPreviousStatement(true);
809+
this.setNextStatement(true);
810+
this.setTooltip('');
811+
this.setColour(200);
812+
this.setHelpUrl('http://www.example.com/');
813+
}
814+
};
815+
816+
Blockly.Blocks['data_firebase_write'] = {
817+
init: function() {
818+
this.appendStatementInput("write_")
819+
.appendField(new Blockly.FieldVariable("myFirebase"), "var_")
820+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_WRITE, "寫入");
821+
this.setPreviousStatement(true);
822+
this.setNextStatement(true);
823+
this.setTooltip('');
824+
this.setColour(160);
825+
this.setHelpUrl('http://www.example.com/');
826+
}
827+
};
828+
829+
Blockly.Blocks['data_firebase_data'] = {
830+
init: function() {
831+
this.appendValueInput("data_")
832+
.appendField(new Blockly.FieldTextInput("..."), "attr_")
833+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_IS, "為");
834+
this.setPreviousStatement(true);
835+
this.setNextStatement(true);
836+
this.setTooltip('');
837+
this.setColour(100);
838+
this.setHelpUrl('http://www.example.com/');
839+
}
840+
};
841+
842+
Blockly.Blocks['data_firebase_read'] = {
843+
init: function() {
844+
this.appendValueInput("read_")
845+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_READ, "取出")
846+
.appendField(new Blockly.FieldVariable("myFirebase"), "name_")
847+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_ATTR, "的屬性")
848+
.appendField(new Blockly.FieldTextInput("..."), "attr_")
849+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_TO, "到");
850+
this.appendStatementInput("do_")
851+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_DO, "執行");
852+
this.setPreviousStatement(true);
853+
this.setNextStatement(true);
854+
this.setTooltip('');
855+
this.setColour(160);
856+
this.setHelpUrl('http://www.example.com/');
857+
}
858+
};
859+
860+
Blockly.Blocks['data_firebase_clear'] = {
861+
init: function() {
862+
this.appendDummyInput()
863+
.appendField(Blockly.Msg.WEBDUINO_FIREBASE_CLEAR, "清空資料庫")
864+
.appendField(new Blockly.FieldVariable("myFirebase"), "name_");
865+
this.setPreviousStatement(true);
866+
this.setNextStatement(true);
867+
this.setTooltip('');
868+
this.setColour(160);
869+
this.setHelpUrl('http://www.example.com/');
870+
}
871+
};

generators/webduino.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,3 +367,59 @@ Blockly.JavaScript['servo_angle_set'] = function (block) {
367367
var code = variable_var_ + '.angle = ' + value_angle_ + ';\n';
368368
return code;
369369
};
370+
371+
Blockly.JavaScript['data_firebase'] = function(block) {
372+
var value_name_ = Blockly.JavaScript.valueToCode(block, 'name_', Blockly.JavaScript.ORDER_ATOMIC);
373+
var text_url_ = block.getFieldValue('url_');
374+
var statements_do_ = Blockly.JavaScript.statementToCode(block, 'do_');
375+
var code = value_name_+' = new Firebase("'+text_url_+'");\n'+statements_do_;
376+
return code;
377+
};
378+
379+
Blockly.JavaScript['data_firebase_write'] = function(block) {
380+
var variable_var_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('var_'), Blockly.Variables.NAME_TYPE);
381+
var statements_write_ = Blockly.JavaScript.statementToCode(block, 'write_');
382+
var code = variable_var_+'.push({\n'+
383+
' '+statements_write_+'\n'+
384+
'});\n'+
385+
'console.log("write ok");\n';
386+
return code;
387+
};
388+
389+
Blockly.JavaScript['data_firebase_data'] = function(block) {
390+
var text_attr_ = block.getFieldValue('attr_');
391+
var value_data_ = Blockly.JavaScript.valueToCode(block, 'data_', Blockly.JavaScript.ORDER_ATOMIC);
392+
var next = block.getNextBlock();
393+
var code;
394+
if (next === null) {
395+
code = text_attr_+':'+value_data_;
396+
}else{
397+
code = text_attr_+':'+value_data_+',';
398+
}
399+
return code;
400+
};
401+
402+
Blockly.JavaScript['data_firebase_read'] = function(block) {
403+
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
404+
var text_attr_ = block.getFieldValue('attr_');
405+
var value_read_ = Blockly.JavaScript.valueToCode(block, 'read_', Blockly.JavaScript.ORDER_ATOMIC);
406+
var statements_do_ = Blockly.JavaScript.statementToCode(block, 'do_');
407+
var code = variable_name_+'.on("value", function(snapshot) {\n'+
408+
' var '+value_read_+'=[];\n'+
409+
' snapshot.forEach(function(data) {\n'+
410+
' '+value_read_+'.push(data.val().'+text_attr_+');\n'+
411+
' });\n'+
412+
' '+statements_do_+'\n'+
413+
' }, function (errorObject) {\n'+
414+
' console.log("The read failed: " + errorObject.code);\n'+
415+
'});\n';
416+
return code;
417+
};
418+
419+
420+
Blockly.JavaScript['data_firebase_clear'] = function(block) {
421+
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
422+
var code = variable_name_+'.set({});\n'+
423+
'console.log("clear ok");\n';;
424+
return code;
425+
};

index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<script src="webduino-blockly.js"></script>
1818
<script src="blocks/webduino.js"></script>
1919
<script src="generators/webduino.js"></script>
20+
<script src='https://cdn.firebase.com/js/client/2.2.9/firebase.js'></script>
2021
</head>
2122

2223
<body>

msg/en.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,6 @@ var MSG = {
4141
backIndex: "Webduino Blockly Tutorials",
4242
demoTitle: "Blockly Demo Area",
4343
catTutorials: "Blockly",
44-
linkToBin: "Let's Coding"
44+
linkToBin: "Let's Coding",
45+
catDatabase: "Data base"
4546
};

msg/zh-hant.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,6 @@ var MSG = {
4141
backIndex: "Webduino 積木教學",
4242
demoTitle: "Blockly 範例測試區",
4343
catTutorials: "教學積木",
44-
linkToBin: "程式編輯"
44+
linkToBin: "程式編輯",
45+
catDatabase: "資料庫"
4546
};

views/index.handlebars

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,25 @@
261261
<category id="catConsole">
262262
<block type="console"></block>
263263
</category>
264+
<category id="catDatabase">
265+
<block type="data_firebase">
266+
<value name="name_">
267+
<block type="variables_get">
268+
<field name="VAR">myFirebase</field>
269+
</block>
270+
</value>
271+
</block>
272+
<block type="data_firebase_write"></block>
273+
<block type="data_firebase_data"></block>
274+
<block type="data_firebase_read">
275+
<value name="read_">
276+
<block type="variables_get">
277+
<field name="VAR">var</field>
278+
</block>
279+
</value>
280+
</block>
281+
<block type="data_firebase_clear"></block>
282+
</category>
264283
<sep></sep>
265284
<category id="catBoard">
266285
<block type="board_ready">

0 commit comments

Comments
 (0)