harked / blockly

Automatically exported from code.google.com/p/blockly
0 stars 0 forks source link

Add text read (prompt/input) block #24

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Need user input for interactive programing.

I implement javascript & python version of prompt(input) block.

demo: http://www.gasolin.idv.tw/public/blockly/demos/code/index.html

in language/en/text.js

Blockly.Language.text_prompt = {
  // Prompt statement.
  category: 'Text',
  helpUrl: 'http://www.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseNotesnode92.html',
  init: function() {
    this.setColour(160);
    this.addTitle('prompt');
    this.appendInput('', Blockly.INPUT_VALUE, 'TEXT');
    this.setOutput(true);
    this.setTooltip('Prompt for user input with the specified text.');
  }
};

in generator/python/text.js

Blockly.Python.text_prompt = function() {
  // prompt a user input dialog.
  var argument0 = Blockly.JavaScript.valueToCode(this, 'TEXT', true) || '\'\'';
  return 'raw_input(' + argument0 + ');\n';
};

in generator/javascript/text.js

Blockly.JavaScript.text_prompt = function() {
  // prompt a user input dialog.
  var argument0 = Blockly.JavaScript.valueToCode(this, 'TEXT', true) || '\'\'';
  return 'prompt(' + argument0 + ');\n';
};

in dart..

no idea, may be 
http://stackoverflow.com/questions/10257744/is-it-possible-to-read-from-console-
in-dart

Original issue reported on code.google.com by gasolin on 10 Jun 2012 at 5:47

GoogleCodeExporter commented 8 years ago
update with type conversion.

language:

Blockly.Language.text_prompt = {
  // Prompt statement.
  category: 'Text',
  helpUrl: 'http://www.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseNotesnode92.html',
  init: function() {
    this.setColour(160);
    this.appendTitle('read');
    var menu = new Blockly.FieldDropdown(this.OPERATORS);
    this.appendTitle(menu, 'TYPE');
    this.appendInput('', Blockly.INPUT_VALUE, 'TEXT');
    this.setOutput(true);
    this.setTooltip('Prompt for user input with the specified text.');
  }
};

Blockly.Language.text_prompt.OPERATORS =
    [['string', 'STRING'], ['integer', 'INTEGER']];

python generator:

Blockly.Python.text_prompt = function() {
  // prompt a user input dialog.
  var mode = this.getTitleValue('TYPE');
  console.log(mode);
  var operator = Blockly.Python.text_prompt.OPERATORS[mode];
  var argument0 = Blockly.Python.valueToCode(this, 'TEXT', true) || '\'\'';
  return operator+'(raw_input(' + argument0 + '));\n';
};

Blockly.Python.text_prompt.OPERATORS = {
  STRING: 'str',
  INTEGER: 'int'
};

Original comment by gasolin on 16 Jun 2012 at 8:02

GoogleCodeExporter commented 8 years ago
Issue 29 has been merged into this issue.

Original comment by gasolin on 16 Jun 2012 at 8:06

GoogleCodeExporter commented 8 years ago
Done in r260 and r261.

Modal I/O is a terrible UI experience.  As such, Print and Prompt should be 
treated as emergency functions.  Any real environment would have much better 
I/O APIs.  But they are still very useful for debugging and "Hello World" 
applications.

Since this is an emergency debugging function, I've converted the prompt 
message input into an inline field.  This is simpler and sufficient most of the 
time.  If one really wants a dynamically customizable message field, then one 
should probably be using a better API.

Type conversion functions are also something we need, but I've folded them into 
this block, again for convenience.

The use of window.prompt in Dart is questionable.  It will only work in a 
browser, not in the command-line version.  Likewise there's a complicated 
asynchronous readLine version that only works in the command-line version and 
not the browser.

Original comment by neil.fra...@gmail.com on 19 Jun 2012 at 1:01