diff --git a/blockly/iot/IOT_Blocks.js b/blockly/iot/IOT_Blocks.js index 50df6f7..7a1e41d 100644 --- a/blockly/iot/IOT_Blocks.js +++ b/blockly/iot/IOT_Blocks.js @@ -325,6 +325,20 @@ Blockly.Blocks['through_textinput_send'] = { } }; +Blockly.Blocks['through_select_send'] = { + init: function() { + this.setColour(textinput_HUE); + this.appendDummyInput().appendField(Blockly.THROUGH); + this.appendValueInput("name").setCheck("String"); + this.appendDummyInput().appendField(Blockly.SELECT_SEND); + this.appendValueInput("message").setCheck("String"); + this.setInputsInline(true); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setTooltip(""); + } +}; + Blockly.Blocks['get_keyboard_input'] = { init: function() { this.setColour(textinput_HUE); @@ -336,6 +350,17 @@ Blockly.Blocks['get_keyboard_input'] = { } }; +Blockly.Blocks['get_select_options'] = { + init: function() { + this.setColour(textinput_HUE); + this.appendDummyInput().appendField(Blockly.MIXLY_MICROBIT_PY_STORAGE_GET); + this.appendValueInput("name").setCheck("String"); + this.appendDummyInput().appendField(Blockly.GET_SELECT_OPTIONS); + this.setOutput(true, null); + this.setTooltip(""); + } +}; + joystick_HUE = "#4e73df"; Blockly.Blocks['when_joystick_dragged'] = { @@ -711,6 +736,24 @@ Blockly.Blocks['mic_sent'] = { } }; +Blockly.Blocks['select_sent'] = { + init: function() { + this.setColour(lineChart_HUE); + this.appendDummyInput().appendField(Blockly.MIXLY_MICROBIT_JS_CURRENT); + this.appendValueInput("name").setCheck("String"); + this.appendDummyInput().appendField(Blockly.SELECT_SENT); + this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS+"value"); + this.setInputsInline(true); + this.appendStatementInput('DO0').appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setTooltip(""); + }, + getVars:function(){ + return ["time","value"]; + } +}; + Blockly.Blocks['lineChart_send'] = { init: function() { this.appendDummyInput().appendField(Blockly.TO); @@ -2110,7 +2153,14 @@ Blockly.JavaScript.when_textinput_send=function(block) { Blockly.JavaScript.through_textinput_send=function(block) { var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); var message = Blockly.JavaScript.valueToCode(this, 'message', Blockly.JavaScript.ORDER_ATOMIC); - var code="MixIO.getInstance("+name+",MixIO.typeTags.KEYBOARD)\n"+".trigger(MixIO.actionTags.KEYBOARD_SEND,"+message+")" + var code="MixIO.getInstance("+name+",MixIO.typeTags.KEYBOARD)\n"+".trigger(MixIO.actionTags.KEYBOARD_SEND,"+message+")\n" + return code; +}; + +Blockly.JavaScript.through_select_send=function(block) { + var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); + var message = Blockly.JavaScript.valueToCode(this, 'message', Blockly.JavaScript.ORDER_ATOMIC); + var code="MixIO.getInstance("+name+",MixIO.typeTags.SELECT)\n"+".trigger(MixIO.actionTags.SELECT_SEND,"+message+")\n" return code; }; @@ -2127,6 +2177,12 @@ Blockly.JavaScript.get_keyboard_input=function(block) { return [code, Blockly.JavaScript.ORDER_ATOMIC]; }; +Blockly.JavaScript.get_select_options=function(block) { + var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); + var code="MixIO.getInstance("+name+",MixIO.typeTags.SELECT).getOptions()"; + return [code, Blockly.JavaScript.ORDER_ATOMIC]; +}; + Blockly.JavaScript.through_joystick_send=function(block) { var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); var x = Blockly.JavaScript.valueToCode(this, 'x', Blockly.JavaScript.ORDER_ATOMIC); @@ -2283,6 +2339,13 @@ Blockly.JavaScript.mic_sent=function(block) { return code; }; +Blockly.JavaScript.select_sent=function(block) { + var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); + var code="MixIO.getInstance("+name+",MixIO.typeTags.SELECT)\n"+".bind(MixIO.eventTags.SELECT_SENT, function(event,value){\n" + +Blockly.JavaScript.statementToCode(block, "DO0" )+"\n"+"})\n" + return code; +}; + Blockly.JavaScript.lineChart_send=function(block) { var name = Blockly.JavaScript.valueToCode(this, 'name', Blockly.JavaScript.ORDER_ATOMIC); var message = Blockly.JavaScript.valueToCode(this, 'message', Blockly.JavaScript.ORDER_ATOMIC); @@ -3235,6 +3298,7 @@ Blockly.SLIDER_NUM="滑杆的数值"; Blockly.WHEN_TEXTINPUT_SEND="文本输入发送消息时"; Blockly.THROUGH="通过"; Blockly.TEXTINPUT_SEND="文本输入发送消息"; +Blockly.SELECT_SEND="下拉选项发送消息并变更选项为"; Blockly.JOYSTICK_DRAGGED="摇杆被拖动时"; Blockly.JOYSTICK_SENDXY="摇杆发送位置消息"; @@ -3276,6 +3340,7 @@ Blockly.BLUETOOTH_SENT = "蓝牙转发器发送消息" Blockly.CAMERA_SENT = "摄像头发送消息时" Blockly.MIC_SENT = "语音识别发送消息时" +Blockly.SELECT_SENT = "下拉选项发送消息时" Blockly.BARCHART_RECIEVED="柱状图收到消息时"; Blockly.BARCHART_SEND_MESSAGE="柱状图发送消息"; @@ -3351,6 +3416,7 @@ Blockly.GET_LONG = "获取当前经度"; Blockly.GET_LATI = "获取当前纬度"; Blockly.GET_KEYBOARD_INPUT="文本输入的文本"; +Blockly.GET_SELECT_OPTIONS = "下拉选项的选项列表" Blockly.JSON2TEXT = "字典转文本"; Blockly.TEXT2JSON = "文本转字典"; diff --git a/ejs/projects.ejs b/ejs/projects.ejs index 3f9753b..205014f 100644 --- a/ejs/projects.ejs +++ b/ejs/projects.ejs @@ -980,7 +980,34 @@ - + + + + + name + + + + + + + name + + + + + message + + + + + + + name + + + + diff --git a/js/MixIO.js b/js/MixIO.js index 16eddbd..094c2fe 100644 --- a/js/MixIO.js +++ b/js/MixIO.js @@ -84,13 +84,14 @@ var MixIO = { TRIGGER: 15, BLE: 16, CAMERA: 17, - MIC: 18 + MIC: 18, + SELECT: 19 }, oldTags: ["input_button", "input_slider", "input_keyboard", "input_controller", "input_rgb", "output_bulb", "output_text", - "output_chart", "output_bar", "table", "output_dashboard", "output_map", "input_weather", "timer", "trigger", "ble", "camera", "input_mic" + "output_chart", "output_bar", "table", "output_dashboard", "output_map", "input_weather", "timer", "trigger", "ble", "camera", "input_mic", "tinydb" ], - zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器", "条件触发器", "蓝牙转发器", "摄像头", "语音识别"], + zhcnTags: ["按键/开关", "滑杆", "文本输入", "摇杆手柄", "RGB色盘", "指示灯", "文本显示屏", "折线图表", "柱状图表", "数据表格", "仪表盘", "数据地图", "实时气象仪", "定时触发器", "条件触发器", "蓝牙转发器", "摄像头", "语音识别", "下拉选项"], /*合法的MixIO事件种类*/ eventTags: { @@ -136,7 +137,9 @@ var MixIO = { CAMERA_SENT: "1711", - MIC_SENT: "1811" + MIC_SENT: "1811", + + SELECT_SENT: "1911" }, @@ -176,9 +179,11 @@ var MixIO = { WEATHER_SYNC: "1321", //更新气象仪数据 WEATHER_SEND: "1322", //发送气象仪数据 - TRIGGER_TIMER: "1411", + TRIGGER_TIMER: "1421", - BLUETOOTH_SENT: "1611" + BLUETOOTH_SENT: "1621", + + SELECT_SEND: "1921" }, publish: function(topic, message) { // if message undefined @@ -248,6 +253,10 @@ var MixIO = { instance.getText = function() { return instance.attr('user-content') } + } else if (type === MixIO.typeTags.SELECT) { + instance.getOptions = function() { + return instance.attr('user-content').split(",") + } } else if (type === MixIO.typeTags.RGB_PICKER) { //获取RGB色盘当前颜色 instance.getColor = function() { diff --git a/js/widgets.js b/js/widgets.js index 535452f..b19be3c 100644 --- a/js/widgets.js +++ b/js/widgets.js @@ -1307,6 +1307,7 @@ function add_tinydb(user_title, user_topic, user_content, user_style, title_styl sendIcon.bind('click', function(event) { event.stopPropagation() publish(topic.text(), messDiv.val()) + itemdiv.trigger(MixIO.eventTags.SELECT_SENT, messDiv.val()) sendIcon.removeClass("btn-primary") sendIcon.addClass("btn-success") sendIcon.children().removeClass('fa-paper-plane') @@ -1322,6 +1323,7 @@ function add_tinydb(user_title, user_topic, user_content, user_style, title_styl sendIcon.bind('touchend', function(event) { event.stopPropagation() publish(topic.text(), messDiv.val()) + itemdiv.trigger(MixIO.eventTags.SELECT_SENT, messDiv.val()) sendIcon.removeClass("btn-primary") sendIcon.addClass("btn-success") sendIcon.children().removeClass('fa-paper-plane') @@ -1335,7 +1337,8 @@ function add_tinydb(user_title, user_topic, user_content, user_style, title_styl }) contents.push(keyDiv) var itemdiv = add_block(3, 1, contents, attrs) - itemdiv.bind(MixIO.actionTags.KEYBOARD_SEND, function(event, message) { + // Aug 2025 + itemdiv.bind(MixIO.actionTags.SELECT_SEND, function(event, message) { messDiv.val(message) publish(topic.text(), messDiv.val()) sendIcon.removeClass("btn-primary") @@ -1526,6 +1529,7 @@ function add_mic(user_title, user_topic, user_content, user_style, title_style) sendIcon.bind('mouseup', function(event) { event.stopPropagation() }) + // Aug 2025 if (window.screen.width > 800) sendIcon.bind('click', function(event) { event.stopPropagation()