diff --git a/blockly_uncompressed.js b/blockly_uncompressed.js index a71db4ce3..55e6ce2c6 100644 --- a/blockly_uncompressed.js +++ b/blockly_uncompressed.js @@ -57,7 +57,7 @@ goog.addDependency("../../../" + dir + "/core/events.js", ['Blockly.Events'], [' goog.addDependency("../../../" + dir + "/core/events_abstract.js", ['Blockly.Events.Abstract'], ['Blockly.Events']); goog.addDependency("../../../" + dir + "/core/extensions.js", ['Blockly.Extensions'], ['Blockly.Mutator', 'Blockly.utils']); goog.addDependency("../../../" + dir + "/core/field.js", ['Blockly.Field'], ['Blockly.Events.BlockChange', 'Blockly.Gesture', 'Blockly.utils', 'goog.math.Size', 'goog.style', 'goog.userAgent']); -goog.addDependency("../../../" + dir + "/core/field_angle.js", ['Blockly.FieldAngle'], ['Blockly.FieldTextInput', 'Blockly.utils', 'goog.userAgent']); +goog.addDependency("../../../" + dir + "/core/field_angle.js", ['Blockly.FieldAngle'], ['Blockly.DropDownDiv', 'Blockly.FieldTextInput', 'Blockly.utils', 'goog.userAgent']); goog.addDependency("../../../" + dir + "/core/field_checkbox.js", ['Blockly.FieldCheckbox'], ['Blockly.Field', 'Blockly.utils']); goog.addDependency("../../../" + dir + "/core/field_colour.js", ['Blockly.FieldColour'], ['Blockly.DropDownDiv', 'Blockly.Field', 'Blockly.utils', 'goog.style']); goog.addDependency("../../../" + dir + "/core/field_date.js", ['Blockly.FieldDate'], ['Blockly.Field', 'Blockly.utils', 'goog.date', 'goog.date.DateTime', 'goog.events', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_he', 'goog.style', 'goog.ui.DatePicker']); @@ -65,7 +65,7 @@ goog.addDependency("../../../" + dir + "/core/field_dropdown.js", ['Blockly.Fiel goog.addDependency("../../../" + dir + "/core/field_image.js", ['Blockly.FieldImage'], ['Blockly.Field', 'Blockly.utils', 'goog.math.Size']); goog.addDependency("../../../" + dir + "/core/field_label.js", ['Blockly.FieldLabel'], ['Blockly.Field', 'Blockly.Tooltip', 'Blockly.utils', 'goog.math.Size']); goog.addDependency("../../../" + dir + "/core/field_number.js", ['Blockly.FieldNumber'], ['Blockly.FieldTextInput']); -goog.addDependency("../../../" + dir + "/core/field_textinput.js", ['Blockly.FieldTextInput'], ['Blockly.Field', 'Blockly.Msg', 'Blockly.utils', 'goog.math.Coordinate', 'goog.userAgent']); +goog.addDependency("../../../" + dir + "/core/field_textinput.js", ['Blockly.FieldTextInput'], ['Blockly.DropDownDiv', 'Blockly.Field', 'Blockly.Msg', 'Blockly.utils', 'goog.math.Coordinate', 'goog.userAgent']); goog.addDependency("../../../" + dir + "/core/field_variable.js", ['Blockly.FieldVariable'], ['Blockly.FieldDropdown', 'Blockly.Msg', 'Blockly.utils', 'Blockly.VariableModel', 'Blockly.Variables', 'goog.math.Size']); goog.addDependency("../../../" + dir + "/core/flyout_base.js", ['Blockly.Flyout'], ['Blockly.Block', 'Blockly.Events', 'Blockly.Events.BlockCreate', 'Blockly.Events.VarCreate', 'Blockly.FlyoutButton', 'Blockly.Gesture', 'Blockly.Touch', 'Blockly.utils', 'Blockly.WorkspaceSvg', 'Blockly.Xml', 'goog.math.Rect']); goog.addDependency("../../../" + dir + "/core/flyout_button.js", ['Blockly.FlyoutButton'], ['Blockly.utils', 'goog.math.Coordinate']); diff --git a/core/css.js b/core/css.js index ff7230396..d689d2d38 100644 --- a/core/css.js +++ b/core/css.js @@ -190,7 +190,7 @@ Blockly.Css.CONTENT = [ 'z-index: 1000;', 'display: none;', 'border: 1px solid;', - 'border-radius: 1px;', + 'border-radius: 2px;', 'padding: 4px;', '-webkit-user-select: none;', '}', diff --git a/core/field_angle.js b/core/field_angle.js index a4ef08a2f..d612effb8 100644 --- a/core/field_angle.js +++ b/core/field_angle.js @@ -26,6 +26,7 @@ goog.provide('Blockly.FieldAngle'); +goog.require('Blockly.DropDownDiv'); goog.require('Blockly.FieldTextInput'); goog.require('Blockly.utils'); @@ -165,11 +166,12 @@ Blockly.FieldAngle.prototype.showEditor_ = function() { goog.userAgent.MOBILE || goog.userAgent.ANDROID || goog.userAgent.IPAD; // Mobile browsers have issues with in-line textareas (focus & keyboards). Blockly.FieldAngle.superClass_.showEditor_.call(this, noFocus); - var div = Blockly.WidgetDiv.DIV; - if (!div.firstChild) { - // Mobile interface uses Blockly.prompt. - return; - } + + // If there is an existing drop-down someone else owns, hide it immediately and clear it. + Blockly.DropDownDiv.hideWithoutAnimation(); + Blockly.DropDownDiv.clearContent(); + var div = Blockly.DropDownDiv.getContentDiv(); + // Build the SVG DOM. var svg = Blockly.utils.createSvgElement('svg', { 'xmlns': 'http://www.w3.org/2000/svg', @@ -204,14 +206,17 @@ Blockly.FieldAngle.prototype.showEditor_ = function() { Blockly.FieldAngle.HALF + ',' + Blockly.FieldAngle.HALF + ')' }, svg); } - svg.style.marginLeft = (15 - Blockly.FieldAngle.RADIUS) + 'px'; + + Blockly.DropDownDiv.setColour(this.sourceBlock_.getColour(), + this.sourceBlock_.getColour()); + Blockly.DropDownDiv.showPositionedByField(this); // The angle picker is different from other fields in that it updates on // mousemove even if it's not in the middle of a drag. In future we may // change this behavior. For now, using bindEvent_ instead of // bindEventWithChecks_ allows it to work without a mousedown/touchstart. this.clickWrapper_ = - Blockly.bindEvent_(svg, 'click', this, Blockly.WidgetDiv.hide); + Blockly.bindEvent_(svg, 'click', this, this.hide_.bind(this)); this.moveWrapper1_ = Blockly.bindEvent_(circle, 'mousemove', this, this.onMouseMove); this.moveWrapper2_ = @@ -219,6 +224,18 @@ Blockly.FieldAngle.prototype.showEditor_ = function() { this.updateGraph_(); }; +/** + * Hide the editor and unbind event listeners. + * @private + */ +Blockly.FieldAngle.prototype.hide_ = function() { + Blockly.unbindEvent_(this.moveWrapper1_); + Blockly.unbindEvent_(this.moveWrapper2_); + Blockly.unbindEvent_(this.clickWrapper_); + Blockly.DropDownDiv.hideIfOwner(this); + Blockly.WidgetDiv.hide(); +}; + /** * Set the angle to match the mouse's position. * @param {!Event} e Mouse move event. diff --git a/core/field_textinput.js b/core/field_textinput.js index d727603fe..a0d3897a9 100644 --- a/core/field_textinput.js +++ b/core/field_textinput.js @@ -26,6 +26,7 @@ goog.provide('Blockly.FieldTextInput'); +goog.require('Blockly.DropDownDiv'); goog.require('Blockly.Field'); goog.require('Blockly.Msg'); goog.require('Blockly.utils'); @@ -260,11 +261,14 @@ Blockly.FieldTextInput.prototype.onHtmlInputKeyDown_ = function(e) { var tabKey = 9, enterKey = 13, escKey = 27; if (e.keyCode == enterKey) { Blockly.WidgetDiv.hide(); + Blockly.DropDownDiv.hideIfOwner(this); } else if (e.keyCode == escKey) { htmlInput.value = htmlInput.defaultValue; Blockly.WidgetDiv.hide(); + Blockly.DropDownDiv.hideIfOwner(this); } else if (e.keyCode == tabKey) { Blockly.WidgetDiv.hide(); + Blockly.DropDownDiv.hideIfOwner(this); this.sourceBlock_.tab(this, !e.shiftKey); e.preventDefault(); } diff --git a/tests/blocks/test_blocks.js b/tests/blocks/test_blocks.js index 267b87abe..3782ce91a 100644 --- a/tests/blocks/test_blocks.js +++ b/tests/blocks/test_blocks.js @@ -173,7 +173,8 @@ Blockly.defineBlocksWithJsonArray([ // BEGIN JSON EXTRACT "text": "NO ANGLE FIELD" } } - ] + ], + "colour": "230" }, { "type": "example_date",