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

Commit 0b52eb3

Browse files
committed
make youtube be better
1 parent 29274bd commit 0b52eb3

File tree

5 files changed

+106
-45
lines changed

5 files changed

+106
-45
lines changed

blocks/msg/en.js

+1
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ Blockly.Msg.DEMO_YOUTUBE_CURRENTTIME = "current time (sec)";
302302
Blockly.Msg.DEMO_YOUTUBE_SET = "Set";
303303
Blockly.Msg.DEMO_YOUTUBE_SEEKTO = "seek to";
304304
Blockly.Msg.DEMO_YOUTUBE_SEC = "sec";
305+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_DO = "do";
305306
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET = "Set";
306307
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VOLUME = "Volume:";
307308
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SPEED = "Speed:";

blocks/msg/zh-hant.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -606,20 +606,20 @@ Blockly.Msg.DEMO_YOUTUBE_LIST_LISTNUM = "清單的第";
606606
Blockly.Msg.DEMO_YOUTUBE_LIST_NUM = "段";
607607
Blockly.Msg.DEMO_YOUTUBE_VIDEO_ID = " 預設的影片 id:";
608608
Blockly.Msg.DEMO_YOUTUBE_CHANGEID_ID = "影片,要更換的影片 id:";
609-
Blockly.Msg.DEMO_YOUTUBE_CURRENTTIME = "當前播放時間 ( 秒 )";
609+
Blockly.Msg.DEMO_YOUTUBE_CURRENTTIME = "影片當前播放時間 ( 秒 )";
610610
Blockly.Msg.DEMO_YOUTUBE_SET = "設定";
611-
Blockly.Msg.DEMO_YOUTUBE_SEEKTO = "前往第";
611+
Blockly.Msg.DEMO_YOUTUBE_SEEKTO = "影片前往第";
612612
Blockly.Msg.DEMO_YOUTUBE_SEC = "秒";
613613
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET = "設定";
614-
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VOLUME = "音量";
615-
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SPEED = "播放速度";
614+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VOLUME = "影片音量:";
615+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SPEED = "影片播放速度";
616616
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VERYSLOW = "超級慢";
617617
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SLOW = "慢";
618618
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_NORMAL = "正常";
619619
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_FAST = "快";
620620
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_VERYFAST = "很快";
621621
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SUPERFAST = "超級快";
622-
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_STATUS = " 的狀態為";
622+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_STATUS = "影片的狀態為";
623623
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SETPLAY = "播放";
624624
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SETPAUSE = "暫停";
625625
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SETSTOP = "停止";
@@ -628,6 +628,7 @@ Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_STATUSPAUSE = "暫停";
628628
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_STATUSCUE = "停止";
629629
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_STATUSSTOP = "播放完畢";
630630
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_STATUSSTART = "尚未開始";
631+
Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_DO = "執行";
631632

632633
// Tutorials - Button
633634

blocks/webduino.js

+29-6
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ Blockly.Blocks['demo_youtube_status'] = {
387387
]), "status_");
388388
this.setOutput(true);
389389
this.setTooltip('');
390-
this.setColour(80);
390+
this.setColour(70);
391391
this.setHelpUrl('https://webduino.io');
392392
}
393393
};
@@ -421,7 +421,7 @@ Blockly.Blocks['demo_youtube_listcontrol'] = {
421421
this.setPreviousStatement(true);
422422
this.setNextStatement(true);
423423
this.setTooltip('');
424-
this.setColour(Blockly.Blocks.colour.HUE);
424+
this.setColour(180);
425425
this.setHelpUrl('https://webduino.io');
426426
}
427427
};
@@ -439,7 +439,7 @@ Blockly.Blocks['demo_youtube_listnum'] = {
439439
this.setPreviousStatement(true, null);
440440
this.setNextStatement(true, null);
441441
this.setTooltip('');
442-
this.setColour(Blockly.Blocks.colour.HUE);
442+
this.setColour(180);
443443
this.setHelpUrl('http://www.example.com/');
444444
}
445445
};
@@ -448,11 +448,11 @@ Blockly.Blocks['demo_youtube_listnum'] = {
448448
Blockly.Blocks['demo_youtube_currenttime'] = {
449449
init: function () {
450450
this.appendDummyInput()
451-
.appendField(new Blockly.FieldVariable("youtube"), "name_")
451+
.appendField(new Blockly.FieldVariable("youtube"), "name_")
452452
.appendField(Blockly.Msg.DEMO_YOUTUBE_CURRENTTIME);
453453
this.setOutput(true, null);
454454
this.setTooltip('');
455-
this.setColour(80);
455+
this.setColour(70);
456456
this.setHelpUrl('http://www.example.com/');
457457
}
458458
};
@@ -463,7 +463,7 @@ Blockly.Blocks['demo_youtube_seekto'] = {
463463
this.appendValueInput("sec_")
464464
.setCheck("Number")
465465
.appendField(Blockly.Msg.DEMO_YOUTUBE_SET)
466-
.appendField(new Blockly.FieldVariable("youtube"), "name_")
466+
.appendField(new Blockly.FieldVariable("youtube"), "name_")
467467
.appendField(Blockly.Msg.DEMO_YOUTUBE_SEEKTO);
468468
this.appendDummyInput()
469469
.appendField(Blockly.Msg.DEMO_YOUTUBE_SEC);
@@ -475,6 +475,29 @@ Blockly.Blocks['demo_youtube_seekto'] = {
475475
}
476476
};
477477

478+
Blockly.Blocks['demo_youtube_callback'] = {
479+
init: function () {
480+
this.appendDummyInput()
481+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SET)
482+
.appendField(new Blockly.FieldVariable("youtube"), "val_")
483+
.appendField(Blockly.Msg.DEMO_YOUTUBE_DEFAULT_1)
484+
.appendField(new Blockly.FieldDropdown([
485+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SETSTOP, 0],
486+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SETPAUSE, 2],
487+
[Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SETPLAY, 1]
488+
]), "event_")
489+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_SETPLAY);
490+
this.appendStatementInput("do_")
491+
.setCheck(null)
492+
.appendField(Blockly.Msg.WEBDUINO_ULTRASONIC_YOUTUBE_DO);
493+
this.setPreviousStatement(true, null);
494+
this.setNextStatement(true, null);
495+
this.setTooltip('');
496+
this.setColour(Blockly.Blocks.colour.HUE);
497+
this.setHelpUrl('http://www.example.com/');
498+
}
499+
};
500+
478501

479502
//https://blockly-demo.appspot.com/static/demos/blockfactory/index.html#85c65d
480503
Blockly.Blocks['demo_tracking'] = {

generators/webduino.js

+61-26
Original file line numberDiff line numberDiff line change
@@ -208,19 +208,20 @@ Blockly.JavaScript['demo_youtube'] = function (block) {
208208
var dropdown_type_ = block.getFieldValue('type_');
209209
var text_id_ = block.getFieldValue('id_');
210210
var codeAdd;
211-
if(dropdown_type_==1){
212-
codeAdd = ' ' + value_name_ + '.loadVideoById({\n'+
213-
' videoId:"' + text_id_ + '"\n'+
214-
' });\n'
215-
}else{
216-
codeAdd = ' ' + value_name_ + '.loadPlaylist({\n'+
217-
' list:"' + text_id_ + '",\n'+
218-
' listType:"playlist",\n'+
219-
' index:0\n'+
220-
' });\n'+
221-
' ' + value_name_ + '.setLoop(true);\n'
211+
if (dropdown_type_ == 1) {
212+
codeAdd = ' ' + value_name_ + '.loadVideoById({\n' +
213+
' videoId:"' + text_id_ + '"\n' +
214+
' });\n'
215+
} else {
216+
codeAdd = ' ' + value_name_ + '.loadPlaylist({\n' +
217+
' list:"' + text_id_ + '",\n' +
218+
' listType:"playlist",\n' +
219+
' index:0\n' +
220+
' });\n' +
221+
' ' + value_name_ + '.setLoop(true);\n'
222222
}
223-
var code =
223+
var code =
224+
'var ' + value_name_ + 'Play, ' + value_name_ + 'Stop, ' + value_name_ + 'Pause;\n' +
224225
'await new Promise(function (resolve) {\n' +
225226
' var tag = document.createElement("script");\n' +
226227
' tag.src = "https://www.youtube.com/iframe_api";\n' +
@@ -238,11 +239,21 @@ Blockly.JavaScript['demo_youtube'] = function (block) {
238239
' events: {\n' +
239240
' onReady: function (evt) {\n' + codeAdd +
240241
' resolve();\n' +
241-
' }\n' +
242+
' },\n' +
243+
' onStateChange: onPlayerStateChange\n' +
242244
' }\n' +
243245
' });\n' +
244246
' };\n' +
245-
'});\n';
247+
'});\n' +
248+
'function onPlayerStateChange(event) {\n' +
249+
' if(event.data == ' + value_name_ + 'Stop) {\n' +
250+
' ' + value_name_ + 'StopCallback();\n' +
251+
' }else if(event.data == ' + value_name_ + 'Play){\n' +
252+
' ' + value_name_ + 'PlayCallback();\n' +
253+
' }else if(event.data == ' + value_name_ + 'Pause){\n' +
254+
' ' + value_name_ + 'PauseCallback();\n' +
255+
' }\n' +
256+
'};\n';
246257
return code;
247258
};
248259

@@ -300,35 +311,59 @@ Blockly.JavaScript['demo_youtube_id'] = function (block) {
300311
};
301312

302313

303-
Blockly.JavaScript['demo_youtube_listcontrol'] = function(block) {
314+
Blockly.JavaScript['demo_youtube_listcontrol'] = function (block) {
304315
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
305316
var dropdown_preornext_ = block.getFieldValue('preOrNext_');
306-
var code = variable_name_ + dropdown_preornext_+';\n';
317+
var code = variable_name_ + dropdown_preornext_ + ';\n';
307318
return code;
308319
};
309320

310321

311-
Blockly.JavaScript['demo_youtube_listnum'] = function(block) {
322+
Blockly.JavaScript['demo_youtube_listnum'] = function (block) {
312323
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
313324
var value_num_ = Blockly.JavaScript.valueToCode(block, 'num_', Blockly.JavaScript.ORDER_ATOMIC);
314-
var code = variable_name_+ '.playVideoAt(' + (value_num_*1 - 1) + ');\n';
325+
var code = variable_name_ + '.playVideoAt(' + (value_num_ * 1 - 1) + ');\n';
315326
return code;
316327
};
317328

318329

319-
Blockly.JavaScript['demo_youtube_currenttime'] = function(block) {
330+
Blockly.JavaScript['demo_youtube_currenttime'] = function (block) {
320331
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
321332
var code = 'Math.round(' + variable_name_ + '.getCurrentTime()*10)/10';
322333
return [code, Blockly.JavaScript.ORDER_NONE];
323334
};
324335

325-
Blockly.JavaScript['demo_youtube_seekto'] = function(block) {
336+
Blockly.JavaScript['demo_youtube_seekto'] = function (block) {
326337
var variable_name_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('name_'), Blockly.Variables.NAME_TYPE);
327338
var value_sec_ = Blockly.JavaScript.valueToCode(block, 'sec_', Blockly.JavaScript.ORDER_ATOMIC);
328339
var code = variable_name_ + '.seekTo(' + value_sec_ + ');\n';
329340
return code;
330341
};
331342

343+
Blockly.JavaScript['demo_youtube_callback'] = function (block) {
344+
var variable_val_ = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('val_'), Blockly.Variables.NAME_TYPE);
345+
var dropdown_event_ = block.getFieldValue('event_');
346+
var statements_do_ = Blockly.JavaScript.statementToCode(block, 'do_');
347+
var code;
348+
if (dropdown_event_ == 0) {
349+
code = variable_val_ + 'Stop = 0;\n' +
350+
'function ' + variable_val_ + 'StopCallback(){\n' +
351+
statements_do_ + '\n' +
352+
'}\n';
353+
} else if (dropdown_event_ == 1) {
354+
code = variable_val_ + 'Play = 1;\n' +
355+
'function ' + variable_val_ + 'PlayCallback(){\n' +
356+
statements_do_ + '\n' +
357+
'}\n';
358+
} else if (dropdown_event_ == 2) {
359+
code = variable_val_ + 'Pause = 2;\n' +
360+
'function ' + variable_val_ + 'PauseCallback(){\n' +
361+
statements_do_ + '\n' +
362+
'}\n';
363+
}
364+
return code;
365+
};
366+
332367
//controller
333368
Blockly.JavaScript['demo_controller'] = function (block) {
334369
var dropdown_event_ = block.getFieldValue('event_');
@@ -641,9 +676,9 @@ Blockly.JavaScript['demo_tracking_action'] = function (block) {
641676
Blockly.JavaScript['demo_tracking_val'] = function (block) {
642677
var dropdown_val_ = block.getFieldValue('val_');
643678
var code = '';
644-
if(dropdown_val_==='total'){
679+
if (dropdown_val_ === 'total') {
645680
code = 'event.data.length';
646-
}else{
681+
} else {
647682
code = 'data.' + dropdown_val_;
648683
}
649684
return [code, Blockly.JavaScript.ORDER_ATOMIC];
@@ -1619,13 +1654,13 @@ Blockly.JavaScript['sound_recognition_check'] = function (block) {
16191654
var statements_do_ = Blockly.JavaScript.statementToCode(block, 'do_');
16201655
var code;
16211656
var a = value_text_.split('');
1622-
if(a[0]=='\''){
1623-
var b = value_text_.replace(/'/g,'');
1657+
if (a[0] == '\'') {
1658+
var b = value_text_.replace(/'/g, '');
16241659
code = 'if(result.resultTranscript.indexOf("' + b + '")!== -1){\n' +
16251660
' ' + statements_do_ +
1626-
' console.log(event.results[result.resultLength]);\n'+
1661+
' console.log(event.results[result.resultLength]);\n' +
16271662
' }\n';
1628-
}else{
1663+
} else {
16291664
code = 'if(result.resultTranscript.indexOf(' + value_text_ + ')!==-1){\n' +
16301665
' ' + statements_do_ +
16311666
' }\n';

toolbox/index.xml

+9-8
Original file line numberDiff line numberDiff line change
@@ -1021,23 +1021,24 @@
10211021
</value>
10221022
</block>
10231023
<block type="demo_youtube_speed"></block>
1024-
<block type="demo_youtube_listcontrol"></block>
1025-
<block type="demo_youtube_listnum">
1026-
<value name="num_">
1027-
<block type="math_number">
1028-
<field name="NUM">1</field>
1029-
</block>
1030-
</value>
1031-
</block>
10321024
<block type="demo_youtube_seekto">
10331025
<value name="sec_">
10341026
<block type="math_number">
10351027
<field name="NUM">30</field>
10361028
</block>
10371029
</value>
10381030
</block>
1031+
<block type="demo_youtube_callback"></block>
10391032
<block type="demo_youtube_status"></block>
10401033
<block type="demo_youtube_currenttime"></block>
1034+
<block type="demo_youtube_listcontrol"></block>
1035+
<block type="demo_youtube_listnum">
1036+
<value name="num_">
1037+
<block type="math_number">
1038+
<field name="NUM">1</field>
1039+
</block>
1040+
</value>
1041+
</block>
10411042
</category>
10421043
<category id="catDemoTracking">
10431044
<block type="demo_tracking">

0 commit comments

Comments
 (0)