@blockdia/scratch-blocks 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/.nvmrc +1 -0
  2. package/LICENSE +674 -0
  3. package/README.md +57 -0
  4. package/TRADEMARK +1 -0
  5. package/blockly_compressed_horizontal.js +2268 -0
  6. package/blockly_compressed_vertical.js +2296 -0
  7. package/blockly_uncompressed_horizontal.js +1212 -0
  8. package/blockly_uncompressed_vertical.js +1212 -0
  9. package/blocks_common/colour.js +61 -0
  10. package/blocks_common/math.js +159 -0
  11. package/blocks_common/matrix.js +54 -0
  12. package/blocks_common/note.js +58 -0
  13. package/blocks_common/text.js +57 -0
  14. package/blocks_compressed.js +37 -0
  15. package/blocks_compressed_horizontal.js +68 -0
  16. package/blocks_compressed_vertical.js +216 -0
  17. package/blocks_horizontal/control.js +212 -0
  18. package/blocks_horizontal/default_toolbox.js +139 -0
  19. package/blocks_horizontal/event.js +190 -0
  20. package/blocks_horizontal/wedo.js +325 -0
  21. package/blocks_vertical/control.js +532 -0
  22. package/blocks_vertical/data.js +666 -0
  23. package/blocks_vertical/default_toolbox.js +571 -0
  24. package/blocks_vertical/event.js +329 -0
  25. package/blocks_vertical/extensions.js +294 -0
  26. package/blocks_vertical/looks.js +591 -0
  27. package/blocks_vertical/motion.js +587 -0
  28. package/blocks_vertical/operators.js +470 -0
  29. package/blocks_vertical/procedures.js +1051 -0
  30. package/blocks_vertical/sensing.js +555 -0
  31. package/blocks_vertical/sound.js +246 -0
  32. package/blocks_vertical/vertical_extensions.js +289 -0
  33. package/build/gen_blocks.js +1 -0
  34. package/build/test_expect.js +1 -0
  35. package/build/test_input.js +1 -0
  36. package/build.py +647 -0
  37. package/cleanup.sh +101 -0
  38. package/core/block.js +1837 -0
  39. package/core/block_animations.js +107 -0
  40. package/core/block_drag_surface.js +299 -0
  41. package/core/block_dragger.js +424 -0
  42. package/core/block_events.js +531 -0
  43. package/core/block_render_svg_horizontal.js +892 -0
  44. package/core/block_render_svg_vertical.js +1734 -0
  45. package/core/block_svg.js +1355 -0
  46. package/core/blockly.js +620 -0
  47. package/core/blocks.js +37 -0
  48. package/core/bubble.js +664 -0
  49. package/core/bubble_dragger.js +285 -0
  50. package/core/colours.js +177 -0
  51. package/core/comment.js +293 -0
  52. package/core/comment_events.js +539 -0
  53. package/core/connection.js +776 -0
  54. package/core/connection_db.js +300 -0
  55. package/core/constants.js +408 -0
  56. package/core/contextmenu.js +534 -0
  57. package/core/css.js +1354 -0
  58. package/core/data_category.js +490 -0
  59. package/core/dragged_connection_manager.js +260 -0
  60. package/core/dropdowndiv.js +408 -0
  61. package/core/events.js +429 -0
  62. package/core/events_abstract.js +113 -0
  63. package/core/extensions.js +450 -0
  64. package/core/field.js +810 -0
  65. package/core/field_angle.js +410 -0
  66. package/core/field_checkbox.js +133 -0
  67. package/core/field_colour.js +253 -0
  68. package/core/field_colour_slider.js +387 -0
  69. package/core/field_date.js +353 -0
  70. package/core/field_dropdown.js +447 -0
  71. package/core/field_iconmenu.js +309 -0
  72. package/core/field_image.js +200 -0
  73. package/core/field_label.js +136 -0
  74. package/core/field_label_serializable.js +125 -0
  75. package/core/field_matrix.js +566 -0
  76. package/core/field_note.js +850 -0
  77. package/core/field_number.js +366 -0
  78. package/core/field_numberdropdown.js +77 -0
  79. package/core/field_textdropdown.js +164 -0
  80. package/core/field_textinput.js +675 -0
  81. package/core/field_textinput_removable.js +105 -0
  82. package/core/field_variable.js +385 -0
  83. package/core/field_variable_getter.js +185 -0
  84. package/core/field_vertical_separator.js +161 -0
  85. package/core/flyout_base.js +935 -0
  86. package/core/flyout_button.js +324 -0
  87. package/core/flyout_dragger.js +83 -0
  88. package/core/flyout_extension_category_header.js +159 -0
  89. package/core/flyout_horizontal.js +475 -0
  90. package/core/flyout_vertical.js +770 -0
  91. package/core/generator.js +426 -0
  92. package/core/gesture.js +1010 -0
  93. package/core/grid.js +227 -0
  94. package/core/icon.js +205 -0
  95. package/core/inject.js +496 -0
  96. package/core/input.js +285 -0
  97. package/core/insertion_marker_manager.js +678 -0
  98. package/core/intersection_observer.js +102 -0
  99. package/core/msg.js +62 -0
  100. package/core/mutator.js +426 -0
  101. package/core/names.js +198 -0
  102. package/core/options.js +244 -0
  103. package/core/procedures.js +739 -0
  104. package/core/rendered_connection.js +417 -0
  105. package/core/scratch_block_comment.js +646 -0
  106. package/core/scratch_blocks_utils.js +246 -0
  107. package/core/scratch_bubble.js +699 -0
  108. package/core/scratch_events.js +131 -0
  109. package/core/scratch_msgs.js +85 -0
  110. package/core/scrollbar.js +875 -0
  111. package/core/toolbox.js +803 -0
  112. package/core/tooltip.js +337 -0
  113. package/core/touch.js +226 -0
  114. package/core/trashcan.js +343 -0
  115. package/core/ui_events.js +91 -0
  116. package/core/ui_menu_utils.js +68 -0
  117. package/core/utils.js +825 -0
  118. package/core/variable_events.js +259 -0
  119. package/core/variable_map.js +415 -0
  120. package/core/variable_model.js +116 -0
  121. package/core/variables.js +674 -0
  122. package/core/warning.js +199 -0
  123. package/core/widgetdiv.js +344 -0
  124. package/core/workspace.js +673 -0
  125. package/core/workspace_audio.js +170 -0
  126. package/core/workspace_comment.js +426 -0
  127. package/core/workspace_comment_render_svg.js +706 -0
  128. package/core/workspace_comment_svg.js +609 -0
  129. package/core/workspace_drag_surface_svg.js +195 -0
  130. package/core/workspace_dragger.js +132 -0
  131. package/core/workspace_svg.js +2382 -0
  132. package/core/xml.js +930 -0
  133. package/core/zoom_controls.js +301 -0
  134. package/dist/horizontal.js +222 -0
  135. package/dist/vertical.js +222 -0
  136. package/dist/web/horizontal.js +232 -0
  137. package/dist/web/vertical.js +232 -0
  138. package/i18n/common.py +234 -0
  139. package/i18n/create_messages.py +162 -0
  140. package/i18n/create_scratch_msgs.js +69 -0
  141. package/i18n/dedup_json.py +73 -0
  142. package/i18n/js_to_json.js +46 -0
  143. package/i18n/js_to_json.py +136 -0
  144. package/i18n/json_to_js.js +52 -0
  145. package/i18n/json_to_js.py +185 -0
  146. package/i18n/sync_tx_translations.js +111 -0
  147. package/i18n/test_scratch_msgs.js +87 -0
  148. package/i18n/tests.py +47 -0
  149. package/i18n/xliff_to_json.py +232 -0
  150. package/local_build.sh +70 -0
  151. package/media/click.mp3 +0 -0
  152. package/media/click.ogg +0 -0
  153. package/media/click.wav +0 -0
  154. package/media/comment-arrow-down.svg +10 -0
  155. package/media/comment-arrow-up.svg +10 -0
  156. package/media/delete-x.svg +10 -0
  157. package/media/delete.mp3 +0 -0
  158. package/media/delete.ogg +0 -0
  159. package/media/delete.wav +0 -0
  160. package/media/dropdown-arrow-dark.svg +1 -0
  161. package/media/dropdown-arrow.svg +1 -0
  162. package/media/extensions/microbit-block-icon.svg +130 -0
  163. package/media/extensions/music-block-icon.svg +17 -0
  164. package/media/extensions/pen-block-icon.svg +19 -0
  165. package/media/extensions/wedo2-block-icon.svg +36 -0
  166. package/media/eyedropper.svg +22 -0
  167. package/media/green-flag.svg +17 -0
  168. package/media/handclosed.cur +0 -0
  169. package/media/handdelete.cur +0 -0
  170. package/media/handopen.cur +0 -0
  171. package/media/icons/arrow.svg +12 -0
  172. package/media/icons/arrow_button.svg +1 -0
  173. package/media/icons/control_forever.svg +1 -0
  174. package/media/icons/control_repeat.svg +1 -0
  175. package/media/icons/control_stop.svg +1 -0
  176. package/media/icons/control_wait.svg +1 -0
  177. package/media/icons/event_broadcast_blue.svg +1 -0
  178. package/media/icons/event_broadcast_coral.svg +1 -0
  179. package/media/icons/event_broadcast_green.svg +1 -0
  180. package/media/icons/event_broadcast_magenta.svg +1 -0
  181. package/media/icons/event_broadcast_orange.svg +1 -0
  182. package/media/icons/event_broadcast_purple.svg +1 -0
  183. package/media/icons/event_when-broadcast-received_blue.svg +1 -0
  184. package/media/icons/event_when-broadcast-received_coral.svg +1 -0
  185. package/media/icons/event_when-broadcast-received_green.svg +1 -0
  186. package/media/icons/event_when-broadcast-received_magenta.svg +1 -0
  187. package/media/icons/event_when-broadcast-received_orange.svg +1 -0
  188. package/media/icons/event_when-broadcast-received_purple.svg +1 -0
  189. package/media/icons/event_whenflagclicked.svg +1 -0
  190. package/media/icons/remove.svg +19 -0
  191. package/media/icons/set-led_blue.svg +1 -0
  192. package/media/icons/set-led_coral.svg +1 -0
  193. package/media/icons/set-led_green.svg +1 -0
  194. package/media/icons/set-led_magenta.svg +1 -0
  195. package/media/icons/set-led_mystery.svg +1 -0
  196. package/media/icons/set-led_orange.svg +1 -0
  197. package/media/icons/set-led_purple.svg +1 -0
  198. package/media/icons/set-led_white.svg +1 -0
  199. package/media/icons/set-led_yellow.svg +1 -0
  200. package/media/icons/wedo_motor-clockwise.svg +1 -0
  201. package/media/icons/wedo_motor-counterclockwise.svg +1 -0
  202. package/media/icons/wedo_motor-speed_fast.svg +1 -0
  203. package/media/icons/wedo_motor-speed_med.svg +1 -0
  204. package/media/icons/wedo_motor-speed_slow.svg +1 -0
  205. package/media/icons/wedo_when-distance_close.svg +1 -0
  206. package/media/icons/wedo_when-tilt-backward.svg +1 -0
  207. package/media/icons/wedo_when-tilt-forward.svg +1 -0
  208. package/media/icons/wedo_when-tilt-left.svg +1 -0
  209. package/media/icons/wedo_when-tilt-right.svg +1 -0
  210. package/media/icons/wedo_when-tilt.svg +1 -0
  211. package/media/repeat.svg +18 -0
  212. package/media/rotate-left.svg +1 -0
  213. package/media/rotate-right.svg +1 -0
  214. package/media/sprites.png +0 -0
  215. package/media/status-not-ready.svg +13 -0
  216. package/media/status-ready.svg +13 -0
  217. package/media/zoom-in.svg +1 -0
  218. package/media/zoom-out.svg +1 -0
  219. package/media/zoom-reset.svg +1 -0
  220. package/msg/js/en.js +290 -0
  221. package/msg/json/en.json +285 -0
  222. package/msg/messages.js +359 -0
  223. package/msg/scratch_msgs.js +22969 -0
  224. package/package.json +60 -0
  225. package/pull_from_blockly.sh +151 -0
  226. package/renovate.json5 +15 -0
  227. package/shim/blockly_compressed_horizontal-blocks_compressed.js +1 -0
  228. package/shim/blockly_compressed_horizontal.Blockly.js +1 -0
  229. package/shim/blockly_compressed_horizontal.goog.js +1 -0
  230. package/shim/blockly_compressed_horizontal.js +1 -0
  231. package/shim/blockly_compressed_vertical-blocks_compressed.js +1 -0
  232. package/shim/blockly_compressed_vertical.Blockly.js +1 -0
  233. package/shim/blockly_compressed_vertical.goog.js +1 -0
  234. package/shim/blockly_compressed_vertical.js +1 -0
  235. package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +1 -0
  236. package/shim/blocks_compressed_horizontal.js +1 -0
  237. package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +1 -0
  238. package/shim/blocks_compressed_vertical.js +1 -0
  239. package/shim/gh-pages.js +1 -0
  240. package/shim/horizontal.js +1 -0
  241. package/shim/index.js +17 -0
  242. package/shim/vertical.js +1 -0
  243. package/universal-python.js +82 -0
@@ -0,0 +1,285 @@
1
+ /**
2
+ * @license
3
+ * Visual Blocks Editor
4
+ *
5
+ * Copyright 2018 Google Inc.
6
+ * https://developers.google.com/blockly/
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ /**
22
+ * @fileoverview Methods for dragging a bubble visually.
23
+ * @author fenichel@google.com (Rachel Fenichel)
24
+ */
25
+ 'use strict';
26
+
27
+ goog.provide('Blockly.BubbleDragger');
28
+
29
+ goog.require('Blockly.Bubble');
30
+ goog.require('Blockly.Events.CommentMove');
31
+ goog.require('Blockly.WorkspaceCommentSvg');
32
+
33
+ goog.require('goog.math.Coordinate');
34
+ goog.require('goog.asserts');
35
+
36
+
37
+ /**
38
+ * Class for a bubble dragger. It moves things on the bubble canvas around the
39
+ * workspace when they are being dragged by a mouse or touch. These can be
40
+ * block comments, mutators, warnings, or workspace comments.
41
+ * @param {!Blockly.Bubble|!Blockly.WorkspaceCommentSvg} bubble The item on the
42
+ * bubble canvas to drag.
43
+ * @param {!Blockly.WorkspaceSvg} workspace The workspace to drag on.
44
+ * @constructor
45
+ */
46
+ Blockly.BubbleDragger = function(bubble, workspace) {
47
+ /**
48
+ * The item on the bubble canvas that is being dragged.
49
+ * @type {!Blockly.Bubble|!Blockly.WorkspaceCommentSvg}
50
+ * @private
51
+ */
52
+ this.draggingBubble_ = bubble;
53
+
54
+ /**
55
+ * The workspace on which the bubble is being dragged.
56
+ * @type {!Blockly.WorkspaceSvg}
57
+ * @private
58
+ */
59
+ this.workspace_ = workspace;
60
+
61
+ /**
62
+ * Which delete area the mouse pointer is over, if any.
63
+ * One of {@link Blockly.DELETE_AREA_TRASH},
64
+ * {@link Blockly.DELETE_AREA_TOOLBOX}, or {@link Blockly.DELETE_AREA_NONE}.
65
+ * @type {?number}
66
+ * @private
67
+ */
68
+ this.deleteArea_ = null;
69
+
70
+ /**
71
+ * Whether the bubble would be deleted if dropped immediately.
72
+ * @type {boolean}
73
+ * @private
74
+ */
75
+ this.wouldDeleteBubble_ = false;
76
+
77
+ /**
78
+ * The location of the top left corner of the dragging bubble's body at the
79
+ * beginning of the drag, in workspace coordinates.
80
+ * @type {!goog.math.Coordinate}
81
+ * @private
82
+ */
83
+ this.startXY_ = this.draggingBubble_.getRelativeToSurfaceXY();
84
+
85
+ /**
86
+ * The drag surface to move bubbles to during a drag, or null if none should
87
+ * be used. Block dragging and bubble dragging use the same surface.
88
+ * @type {?Blockly.BlockDragSurfaceSvg}
89
+ * @private
90
+ */
91
+ this.dragSurface_ =
92
+ Blockly.utils.is3dSupported() && !!workspace.getBlockDragSurface() ?
93
+ workspace.getBlockDragSurface() : null;
94
+ };
95
+
96
+ /**
97
+ * Sever all links from this object.
98
+ * @package
99
+ */
100
+ Blockly.BubbleDragger.prototype.dispose = function() {
101
+ this.draggingBubble_ = null;
102
+ this.workspace_ = null;
103
+ this.dragSurface_ = null;
104
+ };
105
+
106
+ /**
107
+ * Start dragging a bubble. This includes moving it to the drag surface.
108
+ * @package
109
+ */
110
+ Blockly.BubbleDragger.prototype.startBubbleDrag = function() {
111
+ if (!Blockly.Events.getGroup()) {
112
+ Blockly.Events.setGroup(true);
113
+ }
114
+
115
+ this.workspace_.setResizesEnabled(false);
116
+ this.draggingBubble_.setAutoLayout(false);
117
+ if (this.dragSurface_) {
118
+ this.moveToDragSurface_();
119
+ }
120
+
121
+ this.draggingBubble_.setDragging && this.draggingBubble_.setDragging(true);
122
+
123
+ var toolbox = this.workspace_.getToolbox();
124
+ if (toolbox) {
125
+ var style = this.draggingBubble_.isDeletable() ? 'blocklyToolboxDelete' :
126
+ 'blocklyToolboxGrab';
127
+ toolbox.addStyle(style);
128
+ }
129
+ };
130
+
131
+ /**
132
+ * Execute a step of bubble dragging, based on the given event. Update the
133
+ * display accordingly.
134
+ * @param {!Event} e The most recent move event.
135
+ * @param {!goog.math.Coordinate} currentDragDeltaXY How far the pointer has
136
+ * moved from the position at the start of the drag, in pixel units.
137
+ * @package
138
+ */
139
+ Blockly.BubbleDragger.prototype.dragBubble = function(e, currentDragDeltaXY) {
140
+ var delta = this.pixelsToWorkspaceUnits_(currentDragDeltaXY);
141
+ var newLoc = goog.math.Coordinate.sum(this.startXY_, delta);
142
+
143
+ this.draggingBubble_.moveDuringDrag(this.dragSurface_, newLoc);
144
+
145
+ if (this.draggingBubble_.isDeletable()) {
146
+ this.deleteArea_ = this.workspace_.isDeleteArea(e);
147
+ this.updateCursorDuringBubbleDrag_();
148
+ }
149
+ };
150
+
151
+ /**
152
+ * Shut the trash can and, if necessary, delete the dragging bubble.
153
+ * Should be called at the end of a bubble drag.
154
+ * @return {boolean} whether the bubble was deleted.
155
+ * @private
156
+ */
157
+ Blockly.BubbleDragger.prototype.maybeDeleteBubble_ = function() {
158
+ var trashcan = this.workspace_.trashcan;
159
+
160
+ if (this.wouldDeleteBubble_) {
161
+ if (trashcan) {
162
+ setTimeout(trashcan.close.bind(trashcan), 100);
163
+ }
164
+ // Fire a move event, so we know where to go back to for an undo.
165
+ this.fireMoveEvent_();
166
+ this.draggingBubble_.dispose(false, true);
167
+ } else if (trashcan) {
168
+ // Make sure the trash can is closed.
169
+ trashcan.close();
170
+ }
171
+ return this.wouldDeleteBubble_;
172
+ };
173
+
174
+ /**
175
+ * Update the cursor (and possibly the trash can lid) to reflect whether the
176
+ * dragging bubble would be deleted if released immediately.
177
+ * @private
178
+ */
179
+ Blockly.BubbleDragger.prototype.updateCursorDuringBubbleDrag_ = function() {
180
+ this.wouldDeleteBubble_ = this.deleteArea_ != Blockly.DELETE_AREA_NONE;
181
+ var trashcan = this.workspace_.trashcan;
182
+ if (this.wouldDeleteBubble_) {
183
+ this.draggingBubble_.setDeleteStyle(true);
184
+ if (this.deleteArea_ == Blockly.DELETE_AREA_TRASH && trashcan) {
185
+ trashcan.setOpen_(true);
186
+ }
187
+ } else {
188
+ this.draggingBubble_.setDeleteStyle(false);
189
+ if (trashcan) {
190
+ trashcan.setOpen_(false);
191
+ }
192
+ }
193
+ };
194
+
195
+ /**
196
+ * Finish a bubble drag and put the bubble back on the workspace.
197
+ * @param {!Event} e The mouseup/touchend event.
198
+ * @param {!goog.math.Coordinate} currentDragDeltaXY How far the pointer has
199
+ * moved from the position at the start of the drag, in pixel units.
200
+ * @package
201
+ */
202
+ Blockly.BubbleDragger.prototype.endBubbleDrag = function(
203
+ e, currentDragDeltaXY) {
204
+ // Make sure internal state is fresh.
205
+ this.dragBubble(e, currentDragDeltaXY);
206
+
207
+ var delta = this.pixelsToWorkspaceUnits_(currentDragDeltaXY);
208
+ var newLoc = goog.math.Coordinate.sum(this.startXY_, delta);
209
+
210
+ // Move the bubble to its final location.
211
+ this.draggingBubble_.moveTo(newLoc.x, newLoc.y);
212
+ var deleted = this.maybeDeleteBubble_();
213
+
214
+ if (!deleted) {
215
+ // Put everything back onto the bubble canvas.
216
+ if (this.dragSurface_) {
217
+ this.dragSurface_.clearAndHide(this.workspace_.getBubbleCanvas());
218
+ }
219
+
220
+ this.draggingBubble_.setDragging && this.draggingBubble_.setDragging(false);
221
+ this.fireMoveEvent_();
222
+ }
223
+ this.workspace_.setResizesEnabled(true);
224
+
225
+ if (this.workspace_.toolbox_) {
226
+ var style = this.draggingBubble_.isDeletable() ? 'blocklyToolboxDelete' :
227
+ 'blocklyToolboxGrab';
228
+ this.workspace_.toolbox_.removeStyle(style);
229
+ }
230
+ Blockly.Events.setGroup(false);
231
+ };
232
+
233
+ /**
234
+ * Fire a move event at the end of a bubble drag.
235
+ * @private
236
+ */
237
+ Blockly.BubbleDragger.prototype.fireMoveEvent_ = function() {
238
+ var event = null;
239
+ if (this.draggingBubble_.isComment) {
240
+ event = new Blockly.Events.CommentMove(this.draggingBubble_);
241
+ } else if (this.draggingBubble_ instanceof Blockly.ScratchBubble) {
242
+ event = new Blockly.Events.CommentMove(this.draggingBubble_.comment);
243
+ } else {
244
+ return;
245
+ }
246
+ event.setOldCoordinate(this.startXY_);
247
+ event.recordNew();
248
+ Blockly.Events.fire(event);
249
+ };
250
+
251
+ /**
252
+ * Convert a coordinate object from pixels to workspace units, including a
253
+ * correction for mutator workspaces.
254
+ * This function does not consider differing origins. It simply scales the
255
+ * input's x and y values.
256
+ * @param {!goog.math.Coordinate} pixelCoord A coordinate with x and y values
257
+ * in css pixel units.
258
+ * @return {!goog.math.Coordinate} The input coordinate divided by the workspace
259
+ * scale.
260
+ * @private
261
+ */
262
+ Blockly.BubbleDragger.prototype.pixelsToWorkspaceUnits_ = function(pixelCoord) {
263
+ var result = new goog.math.Coordinate(pixelCoord.x / this.workspace_.scale,
264
+ pixelCoord.y / this.workspace_.scale);
265
+ if (this.workspace_.isMutator) {
266
+ // If we're in a mutator, its scale is always 1, purely because of some
267
+ // oddities in our rendering optimizations. The actual scale is the same as
268
+ // the scale on the parent workspace.
269
+ // Fix that for dragging.
270
+ var mainScale = this.workspace_.options.parentWorkspace.scale;
271
+ result = result.scale(1 / mainScale);
272
+ }
273
+ return result;
274
+ };
275
+ /**
276
+ * Move the bubble onto the drag surface at the beginning of a drag. Move the
277
+ * drag surface to preserve the apparent location of the bubble.
278
+ * @private
279
+ */
280
+ Blockly.BubbleDragger.prototype.moveToDragSurface_ = function() {
281
+ this.draggingBubble_.moveTo(0, 0);
282
+ this.dragSurface_.translateSurface(this.startXY_.x, this.startXY_.y);
283
+ // Execute the move on the top-level SVG component.
284
+ this.dragSurface_.setBlocksAndShow(this.draggingBubble_.getSvgRoot());
285
+ };
@@ -0,0 +1,177 @@
1
+ /**
2
+ * @license
3
+ * Visual Blocks Editor
4
+ *
5
+ * Copyright 2016 Massachusetts Institute of Technology
6
+ * All rights reserved.
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ 'use strict';
22
+
23
+ goog.provide('Blockly.Colours');
24
+
25
+ Blockly.Colours = {
26
+ // SVG colours: these must be specificed in #RRGGBB style
27
+ // To add an opacity, this must be specified as a separate property (for SVG fill-opacity)
28
+ "motion": {
29
+ "primary": "#4C97FF",
30
+ "secondary": "#4280D7",
31
+ "tertiary": "#3373CC",
32
+ "quaternary": "#3373CC"
33
+ },
34
+ "looks": {
35
+ "primary": "#9966FF",
36
+ "secondary": "#855CD6",
37
+ "tertiary": "#774DCB",
38
+ "quaternary": "#774DCB"
39
+ },
40
+ "sounds": {
41
+ "primary": "#CF63CF",
42
+ "secondary": "#C94FC9",
43
+ "tertiary": "#BD42BD",
44
+ "quaternary": "#BD42BD"
45
+ },
46
+ "control": {
47
+ "primary": "#FFAB19",
48
+ "secondary": "#EC9C13",
49
+ "tertiary": "#CF8B17",
50
+ "quaternary": "#CF8B17"
51
+ },
52
+ "event": {
53
+ "primary": "#FFBF00",
54
+ "secondary": "#E6AC00",
55
+ "tertiary": "#CC9900",
56
+ "quaternary": "#CC9900"
57
+ },
58
+ "sensing": {
59
+ "primary": "#5CB1D6",
60
+ "secondary": "#47A8D1",
61
+ "tertiary": "#2E8EB8",
62
+ "quaternary": "#2E8EB8"
63
+ },
64
+ "pen": {
65
+ "primary": "#0fBD8C",
66
+ "secondary": "#0DA57A",
67
+ "tertiary": "#0B8E69",
68
+ "quaternary": "#0B8E69"
69
+ },
70
+ "operators": {
71
+ "primary": "#59C059",
72
+ "secondary": "#46B946",
73
+ "tertiary": "#389438",
74
+ "quaternary": "#389438"
75
+ },
76
+ "data": {
77
+ "primary": "#FF8C1A",
78
+ "secondary": "#FF8000",
79
+ "tertiary": "#DB6E00",
80
+ "quaternary": "#DB6E00"
81
+ },
82
+ // This is not a new category, but rather for differentiation
83
+ // between lists and scalar variables.
84
+ "data_lists": {
85
+ "primary": "#FF661A",
86
+ "secondary": "#FF5500",
87
+ "tertiary": "#E64D00",
88
+ "quaternary": "#E64D00"
89
+ },
90
+ "more": {
91
+ "primary": "#FF6680",
92
+ "secondary": "#FF4D6A",
93
+ "tertiary": "#FF3355",
94
+ "quaternary": "#FF3355"
95
+ },
96
+ "text": "#FFFFFF",
97
+ "workspace": "#F9F9F9",
98
+ "toolboxHover": "#4C97FF",
99
+ "toolboxSelected": "#e9eef2",
100
+ "toolboxText": "#575E75",
101
+ "blackText": "#575E75",
102
+ "toolbox": "#FFFFFF",
103
+ "flyout": "#F9F9F9",
104
+ "scrollbar": "#CECDCE",
105
+ "scrollbarHover": '#CECDCE',
106
+ "textField": "#FFFFFF",
107
+ "textFieldText": "#575E75",
108
+ "insertionMarker": "#000000",
109
+ "insertionMarkerOpacity": 0.2,
110
+ "dragShadowOpacity": 0.3,
111
+ "stackGlow": "#FFF200",
112
+ "stackGlowSize": 4,
113
+ "stackGlowOpacity": 1,
114
+ "replacementGlow": "#FFFFFF",
115
+ "replacementGlowSize": 2,
116
+ "replacementGlowOpacity": 1,
117
+ "colourPickerStroke": "#FFFFFF",
118
+ // CSS colours: support RGBA
119
+ "fieldShadow": "rgba(0,0,0,0.1)",
120
+ "dropDownShadow": "rgba(0, 0, 0, .3)",
121
+ "numPadBackground": "#547AB2",
122
+ "numPadBorder": "#435F91",
123
+ "numPadActiveBackground": "#435F91",
124
+ "numPadText": "white", // Do not use hex here, it cannot be inlined with data-uri SVG
125
+ "valueReportBackground": "#FFFFFF",
126
+ "valueReportBorder": "#AAAAAA",
127
+ "valueReportForeground": "#000000",
128
+ "menuHover": "rgba(0, 0, 0, 0.2)",
129
+ "contextMenuBackground": "#ffffff",
130
+ "contextMenuBorder": "#cccccc",
131
+ "contextMenuForeground": "#000000",
132
+ "contextMenuActiveBackground": "#d6e9f8",
133
+ "contextMenuDisabledForeground": "#cccccc",
134
+ "flyoutLabelColor": "#575E75",
135
+ "checkboxInactiveBackground": "#ffffff",
136
+ "checkboxInactiveBorder": "#c8c8c8",
137
+ "checkboxActiveBackground": "#4C97FF",
138
+ "checkboxActiveBorder": "#3373CC",
139
+ "checkboxCheck": "#ffffff",
140
+ "buttonActiveBackground": "#ffffff",
141
+ "buttonForeground": "#575E75",
142
+ "buttonBorder": "#c6c6c6",
143
+ "zoomIconFilter": "none"
144
+ };
145
+
146
+ /**
147
+ * Override the colours in Blockly.Colours with new values basded on the
148
+ * given dictionary.
149
+ * @param {!Object} colours Dictionary of colour properties and new values.
150
+ * @package
151
+ */
152
+ Blockly.Colours.overrideColours = function(colours) {
153
+ // Colour overrides provided by the injection
154
+ if (colours) {
155
+ for (var colourProperty in colours) {
156
+ if (colours.hasOwnProperty(colourProperty) &&
157
+ Blockly.Colours.hasOwnProperty(colourProperty)) {
158
+ // If a property is in both colours option and Blockly.Colours,
159
+ // set the Blockly.Colours value to the override.
160
+ // Override Blockly category color object properties with those
161
+ // provided.
162
+ var colourPropertyValue = colours[colourProperty];
163
+ if (goog.isObject(colourPropertyValue)) {
164
+ for (var colourSequence in colourPropertyValue) {
165
+ if (colourPropertyValue.hasOwnProperty(colourSequence) &&
166
+ Blockly.Colours[colourProperty].hasOwnProperty(colourSequence)) {
167
+ Blockly.Colours[colourProperty][colourSequence] =
168
+ colourPropertyValue[colourSequence];
169
+ }
170
+ }
171
+ } else {
172
+ Blockly.Colours[colourProperty] = colourPropertyValue;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ };