nodeskini 1.0.1 → 1.0.2

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 (534) hide show
  1. package/blocklySkini/archive/blocklyControleur.js +87 -0
  2. package/blocklySkini/archive/blocklySkini.js +84 -0
  3. package/blocklySkini/archive/blocklyhop.js +75 -0
  4. package/blocklySkini/archive/clientControleurBlocly.js +170 -0
  5. package/blocklySkini/archive/index.html +76 -0
  6. package/blocklySkini/archive/testHHsuspend.txt +89 -0
  7. package/blocklySkini/archive/testHHtrap.txt +262 -0
  8. package/blocklySkini/archive/testOrchestration.txt +177 -0
  9. package/blocklySkini/archive/testOrchestration.xml +447 -0
  10. package/blocklySkini/archive/testOrchestration2.xml +456 -0
  11. package/blocklySkini/blockly/README.md +77 -0
  12. package/blocklySkini/blockly/blockly.d.ts +21480 -0
  13. package/blocklySkini/blockly/blockly.js +25 -0
  14. package/blocklySkini/blockly/blockly.min.js +2188 -0
  15. package/blocklySkini/blockly/blockly_compressed.js +1455 -0
  16. package/blocklySkini/blockly/blockly_compressed.js.map +1 -0
  17. package/blocklySkini/blockly/blocks/colour.js +122 -0
  18. package/blocklySkini/blockly/blocks/lists.js +862 -0
  19. package/blocklySkini/blockly/blocks/logic.js +635 -0
  20. package/blocklySkini/blockly/blocks/loops.js +357 -0
  21. package/blocklySkini/blockly/blocks/math.js +566 -0
  22. package/blocklySkini/blockly/blocks/procedures.js +1072 -0
  23. package/blocklySkini/blockly/blocks/text.js +923 -0
  24. package/blocklySkini/blockly/blocks/variables.js +163 -0
  25. package/blocklySkini/blockly/blocks/variables_dynamic.js +180 -0
  26. package/blocklySkini/blockly/blocks.d.ts +15 -0
  27. package/blocklySkini/blockly/blocks.js +27 -0
  28. package/blocklySkini/blockly/blocks_compressed.js +182 -0
  29. package/blocklySkini/blockly/blocks_compressed.js.map +1 -0
  30. package/blocklySkini/blockly/browser.js +36 -0
  31. package/blocklySkini/blockly/core/block.js +2010 -0
  32. package/blocklySkini/blockly/core/block_animations.js +203 -0
  33. package/blocklySkini/blockly/core/block_drag_surface.js +212 -0
  34. package/blocklySkini/blockly/core/block_dragger.js +378 -0
  35. package/blocklySkini/blockly/core/block_events.js +548 -0
  36. package/blocklySkini/blockly/core/block_svg.js +1763 -0
  37. package/blocklySkini/blockly/core/blockly.js +674 -0
  38. package/blocklySkini/blockly/core/blocks.js +23 -0
  39. package/blocklySkini/blockly/core/bubble.js +880 -0
  40. package/blocklySkini/blockly/core/bubble_dragger.js +274 -0
  41. package/blocklySkini/blockly/core/comment.js +439 -0
  42. package/blocklySkini/blockly/core/components/component.js +554 -0
  43. package/blocklySkini/blockly/core/components/tree/basenode.js +895 -0
  44. package/blocklySkini/blockly/core/components/tree/treecontrol.js +332 -0
  45. package/blocklySkini/blockly/core/components/tree/treenode.js +172 -0
  46. package/blocklySkini/blockly/core/connection.js +682 -0
  47. package/blocklySkini/blockly/core/connection_checker.js +285 -0
  48. package/blocklySkini/blockly/core/connection_db.js +295 -0
  49. package/blocklySkini/blockly/core/constants.js +277 -0
  50. package/blocklySkini/blockly/core/contextmenu.js +307 -0
  51. package/blocklySkini/blockly/core/contextmenu_items.js +534 -0
  52. package/blocklySkini/blockly/core/contextmenu_registry.js +165 -0
  53. package/blocklySkini/blockly/core/css.js +549 -0
  54. package/blocklySkini/blockly/core/dropdowndiv.js +776 -0
  55. package/blocklySkini/blockly/core/events.js +387 -0
  56. package/blocklySkini/blockly/core/events_abstract.js +106 -0
  57. package/blocklySkini/blockly/core/extensions.js +450 -0
  58. package/blocklySkini/blockly/core/field.js +1162 -0
  59. package/blocklySkini/blockly/core/field_angle.js +562 -0
  60. package/blocklySkini/blockly/core/field_checkbox.js +220 -0
  61. package/blocklySkini/blockly/core/field_colour.js +664 -0
  62. package/blocklySkini/blockly/core/field_dropdown.js +760 -0
  63. package/blocklySkini/blockly/core/field_image.js +286 -0
  64. package/blocklySkini/blockly/core/field_label.js +130 -0
  65. package/blocklySkini/blockly/core/field_label_serializable.js +69 -0
  66. package/blocklySkini/blockly/core/field_multilineinput.js +299 -0
  67. package/blocklySkini/blockly/core/field_number.js +317 -0
  68. package/blocklySkini/blockly/core/field_registry.js +66 -0
  69. package/blocklySkini/blockly/core/field_textinput.js +616 -0
  70. package/blocklySkini/blockly/core/field_variable.js +463 -0
  71. package/blocklySkini/blockly/core/flyout_base.js +1071 -0
  72. package/blocklySkini/blockly/core/flyout_button.js +325 -0
  73. package/blocklySkini/blockly/core/flyout_dragger.js +76 -0
  74. package/blocklySkini/blockly/core/flyout_horizontal.js +388 -0
  75. package/blocklySkini/blockly/core/flyout_vertical.js +397 -0
  76. package/blocklySkini/blockly/core/generator.js +482 -0
  77. package/blocklySkini/blockly/core/gesture.js +993 -0
  78. package/blocklySkini/blockly/core/grid.js +222 -0
  79. package/blocklySkini/blockly/core/icon.js +206 -0
  80. package/blocklySkini/blockly/core/inject.js +487 -0
  81. package/blocklySkini/blockly/core/input.js +296 -0
  82. package/blocklySkini/blockly/core/insertion_marker_manager.js +700 -0
  83. package/blocklySkini/blockly/core/interfaces/i_accessibility.js +72 -0
  84. package/blocklySkini/blockly/core/interfaces/i_bounded_element.js +31 -0
  85. package/blocklySkini/blockly/core/interfaces/i_bubble.js +83 -0
  86. package/blocklySkini/blockly/core/interfaces/i_connection_checker.js +94 -0
  87. package/blocklySkini/blockly/core/interfaces/i_contextmenu.js +26 -0
  88. package/blocklySkini/blockly/core/interfaces/i_copyable.js +40 -0
  89. package/blocklySkini/blockly/core/interfaces/i_deletable.js +27 -0
  90. package/blocklySkini/blockly/core/interfaces/i_deletearea.js +28 -0
  91. package/blocklySkini/blockly/core/interfaces/i_flyout.js +178 -0
  92. package/blocklySkini/blockly/core/interfaces/i_movable.js +27 -0
  93. package/blocklySkini/blockly/core/interfaces/i_registrable.js +22 -0
  94. package/blocklySkini/blockly/core/interfaces/i_registrable_field.js +31 -0
  95. package/blocklySkini/blockly/core/interfaces/i_selectable.js +43 -0
  96. package/blocklySkini/blockly/core/interfaces/i_styleable.js +33 -0
  97. package/blocklySkini/blockly/core/interfaces/i_toolbox.js +131 -0
  98. package/blocklySkini/blockly/core/interfaces/i_toolbox_item.js +148 -0
  99. package/blocklySkini/blockly/core/keyboard_nav/action.js +26 -0
  100. package/blocklySkini/blockly/core/keyboard_nav/ast_node.js +684 -0
  101. package/blocklySkini/blockly/core/keyboard_nav/basic_cursor.js +208 -0
  102. package/blocklySkini/blockly/core/keyboard_nav/cursor.js +170 -0
  103. package/blocklySkini/blockly/core/keyboard_nav/flyout_cursor.js +106 -0
  104. package/blocklySkini/blockly/core/keyboard_nav/key_map.js +190 -0
  105. package/blocklySkini/blockly/core/keyboard_nav/marker.js +120 -0
  106. package/blocklySkini/blockly/core/keyboard_nav/navigation.js +1084 -0
  107. package/blocklySkini/blockly/core/keyboard_nav/tab_navigate_cursor.js +48 -0
  108. package/blocklySkini/blockly/core/marker_manager.js +183 -0
  109. package/blocklySkini/blockly/core/menu.js +465 -0
  110. package/blocklySkini/blockly/core/menuitem.js +280 -0
  111. package/blocklySkini/blockly/core/msg.js +31 -0
  112. package/blocklySkini/blockly/core/mutator.js +555 -0
  113. package/blocklySkini/blockly/core/names.js +186 -0
  114. package/blocklySkini/blockly/core/options.js +365 -0
  115. package/blocklySkini/blockly/core/procedures.js +404 -0
  116. package/blocklySkini/blockly/core/registry.js +265 -0
  117. package/blocklySkini/blockly/core/rendered_connection.js +565 -0
  118. package/blocklySkini/blockly/core/renderers/common/block_rendering.js +81 -0
  119. package/blocklySkini/blockly/core/renderers/common/constants.js +1256 -0
  120. package/blocklySkini/blockly/core/renderers/common/debugger.js +431 -0
  121. package/blocklySkini/blockly/core/renderers/common/drawer.js +468 -0
  122. package/blocklySkini/blockly/core/renderers/common/i_path_object.js +151 -0
  123. package/blocklySkini/blockly/core/renderers/common/info.js +775 -0
  124. package/blocklySkini/blockly/core/renderers/common/marker_svg.js +687 -0
  125. package/blocklySkini/blockly/core/renderers/common/path_object.js +279 -0
  126. package/blocklySkini/blockly/core/renderers/common/renderer.js +301 -0
  127. package/blocklySkini/blockly/core/renderers/geras/constants.js +64 -0
  128. package/blocklySkini/blockly/core/renderers/geras/drawer.js +205 -0
  129. package/blocklySkini/blockly/core/renderers/geras/highlight_constants.js +311 -0
  130. package/blocklySkini/blockly/core/renderers/geras/highlighter.js +256 -0
  131. package/blocklySkini/blockly/core/renderers/geras/info.js +483 -0
  132. package/blocklySkini/blockly/core/renderers/geras/measurables/inputs.js +67 -0
  133. package/blocklySkini/blockly/core/renderers/geras/path_object.js +177 -0
  134. package/blocklySkini/blockly/core/renderers/geras/renderer.js +138 -0
  135. package/blocklySkini/blockly/core/renderers/measurables/base.js +44 -0
  136. package/blocklySkini/blockly/core/renderers/measurables/connections.js +114 -0
  137. package/blocklySkini/blockly/core/renderers/measurables/inputs.js +160 -0
  138. package/blocklySkini/blockly/core/renderers/measurables/row_elements.js +185 -0
  139. package/blocklySkini/blockly/core/renderers/measurables/rows.js +532 -0
  140. package/blocklySkini/blockly/core/renderers/measurables/types.js +349 -0
  141. package/blocklySkini/blockly/core/renderers/minimalist/constants.js +29 -0
  142. package/blocklySkini/blockly/core/renderers/minimalist/drawer.js +32 -0
  143. package/blocklySkini/blockly/core/renderers/minimalist/info.js +45 -0
  144. package/blocklySkini/blockly/core/renderers/minimalist/renderer.js +70 -0
  145. package/blocklySkini/blockly/core/renderers/thrasos/info.js +338 -0
  146. package/blocklySkini/blockly/core/renderers/thrasos/renderer.js +45 -0
  147. package/blocklySkini/blockly/core/renderers/zelos/constants.js +1002 -0
  148. package/blocklySkini/blockly/core/renderers/zelos/drawer.js +233 -0
  149. package/blocklySkini/blockly/core/renderers/zelos/info.js +587 -0
  150. package/blocklySkini/blockly/core/renderers/zelos/marker_svg.js +148 -0
  151. package/blocklySkini/blockly/core/renderers/zelos/measurables/inputs.js +47 -0
  152. package/blocklySkini/blockly/core/renderers/zelos/measurables/row_elements.js +37 -0
  153. package/blocklySkini/blockly/core/renderers/zelos/measurables/rows.js +108 -0
  154. package/blocklySkini/blockly/core/renderers/zelos/path_object.js +244 -0
  155. package/blocklySkini/blockly/core/renderers/zelos/renderer.js +130 -0
  156. package/blocklySkini/blockly/core/requires.js +84 -0
  157. package/blocklySkini/blockly/core/scrollbar.js +880 -0
  158. package/blocklySkini/blockly/core/theme/classic.js +87 -0
  159. package/blocklySkini/blockly/core/theme/dark.js +33 -0
  160. package/blocklySkini/blockly/core/theme/deuteranopia.js +104 -0
  161. package/blocklySkini/blockly/core/theme/highcontrast.js +119 -0
  162. package/blocklySkini/blockly/core/theme/modern.js +108 -0
  163. package/blocklySkini/blockly/core/theme/tritanopia.js +103 -0
  164. package/blocklySkini/blockly/core/theme/zelos.js +106 -0
  165. package/blocklySkini/blockly/core/theme.js +236 -0
  166. package/blocklySkini/blockly/core/theme_manager.js +197 -0
  167. package/blocklySkini/blockly/core/toolbox/category.js +690 -0
  168. package/blocklySkini/blockly/core/toolbox/collapsible_category.js +294 -0
  169. package/blocklySkini/blockly/core/toolbox/separator.js +123 -0
  170. package/blocklySkini/blockly/core/toolbox/toolbox.js +984 -0
  171. package/blocklySkini/blockly/core/toolbox/toolbox_item.js +145 -0
  172. package/blocklySkini/blockly/core/toolbox.js +943 -0
  173. package/blocklySkini/blockly/core/tooltip.js +387 -0
  174. package/blocklySkini/blockly/core/touch.js +255 -0
  175. package/blocklySkini/blockly/core/touch_gesture.js +325 -0
  176. package/blocklySkini/blockly/core/trashcan.js +661 -0
  177. package/blocklySkini/blockly/core/ui_events.js +85 -0
  178. package/blocklySkini/blockly/core/utils/aria.js +167 -0
  179. package/blocklySkini/blockly/core/utils/colour.js +208 -0
  180. package/blocklySkini/blockly/core/utils/coordinate.js +125 -0
  181. package/blocklySkini/blockly/core/utils/deprecation.js +34 -0
  182. package/blocklySkini/blockly/core/utils/dom.js +391 -0
  183. package/blocklySkini/blockly/core/utils/global.js +37 -0
  184. package/blocklySkini/blockly/core/utils/idgenerator.js +33 -0
  185. package/blocklySkini/blockly/core/utils/keycodes.js +164 -0
  186. package/blocklySkini/blockly/core/utils/math.js +56 -0
  187. package/blocklySkini/blockly/core/utils/metrics.js +124 -0
  188. package/blocklySkini/blockly/core/utils/object.js +73 -0
  189. package/blocklySkini/blockly/core/utils/rect.js +54 -0
  190. package/blocklySkini/blockly/core/utils/size.js +58 -0
  191. package/blocklySkini/blockly/core/utils/string.js +284 -0
  192. package/blocklySkini/blockly/core/utils/style.js +281 -0
  193. package/blocklySkini/blockly/core/utils/svg.js +181 -0
  194. package/blocklySkini/blockly/core/utils/svg_paths.js +142 -0
  195. package/blocklySkini/blockly/core/utils/toolbox.js +401 -0
  196. package/blocklySkini/blockly/core/utils/useragent.js +110 -0
  197. package/blocklySkini/blockly/core/utils/xml.js +79 -0
  198. package/blocklySkini/blockly/core/utils.js +652 -0
  199. package/blocklySkini/blockly/core/variable_events.js +248 -0
  200. package/blocklySkini/blockly/core/variable_map.js +414 -0
  201. package/blocklySkini/blockly/core/variable_model.js +95 -0
  202. package/blocklySkini/blockly/core/variables.js +571 -0
  203. package/blocklySkini/blockly/core/variables_dynamic.js +100 -0
  204. package/blocklySkini/blockly/core/warning.js +200 -0
  205. package/blocklySkini/blockly/core/widgetdiv.js +241 -0
  206. package/blocklySkini/blockly/core/workspace.js +786 -0
  207. package/blocklySkini/blockly/core/workspace_audio.js +153 -0
  208. package/blocklySkini/blockly/core/workspace_comment.js +373 -0
  209. package/blocklySkini/blockly/core/workspace_comment_render_svg.js +461 -0
  210. package/blocklySkini/blockly/core/workspace_comment_svg.js +701 -0
  211. package/blocklySkini/blockly/core/workspace_drag_surface_svg.js +176 -0
  212. package/blocklySkini/blockly/core/workspace_dragger.js +85 -0
  213. package/blocklySkini/blockly/core/workspace_events.js +93 -0
  214. package/blocklySkini/blockly/core/workspace_svg.js +2661 -0
  215. package/blocklySkini/blockly/core/ws_comment_events.js +417 -0
  216. package/blocklySkini/blockly/core/xml.js +827 -0
  217. package/blocklySkini/blockly/core/zoom_controls.js +449 -0
  218. package/blocklySkini/blockly/core-browser.js +34 -0
  219. package/blocklySkini/blockly/core.d.ts +15 -0
  220. package/blocklySkini/blockly/core.js +38 -0
  221. package/blocklySkini/blockly/dart.d.ts +15 -0
  222. package/blocklySkini/blockly/dart.js +27 -0
  223. package/blocklySkini/blockly/dart_compressed.js +114 -0
  224. package/blocklySkini/blockly/dart_compressed.js.map +1 -0
  225. package/blocklySkini/blockly/generators/dart/colour.js +114 -0
  226. package/blocklySkini/blockly/generators/dart/lists.js +447 -0
  227. package/blocklySkini/blockly/generators/dart/logic.js +127 -0
  228. package/blocklySkini/blockly/generators/dart/loops.js +169 -0
  229. package/blocklySkini/blockly/generators/dart/math.js +485 -0
  230. package/blocklySkini/blockly/generators/dart/procedures.js +111 -0
  231. package/blocklySkini/blockly/generators/dart/text.js +339 -0
  232. package/blocklySkini/blockly/generators/dart/variables.js +32 -0
  233. package/blocklySkini/blockly/generators/dart/variables_dynamic.js +21 -0
  234. package/blocklySkini/blockly/generators/dart.js +290 -0
  235. package/blocklySkini/blockly/generators/javascript/colour.js +89 -0
  236. package/blocklySkini/blockly/generators/javascript/lists.js +388 -0
  237. package/blocklySkini/blockly/generators/javascript/logic.js +129 -0
  238. package/blocklySkini/blockly/generators/javascript/loops.js +184 -0
  239. package/blocklySkini/blockly/generators/javascript/math.js +409 -0
  240. package/blocklySkini/blockly/generators/javascript/procedures.js +113 -0
  241. package/blocklySkini/blockly/generators/javascript/text.js +367 -0
  242. package/blocklySkini/blockly/generators/javascript/variables.js +32 -0
  243. package/blocklySkini/blockly/generators/javascript/variables_dynamic.js +23 -0
  244. package/blocklySkini/blockly/generators/javascript.js +317 -0
  245. package/blocklySkini/blockly/generators/lua/colour.js +76 -0
  246. package/blocklySkini/blockly/generators/lua/lists.js +368 -0
  247. package/blocklySkini/blockly/generators/lua/logic.js +127 -0
  248. package/blocklySkini/blockly/generators/lua/loops.js +173 -0
  249. package/blocklySkini/blockly/generators/lua/math.js +423 -0
  250. package/blocklySkini/blockly/generators/lua/procedures.js +113 -0
  251. package/blocklySkini/blockly/generators/lua/text.js +353 -0
  252. package/blocklySkini/blockly/generators/lua/variables.js +32 -0
  253. package/blocklySkini/blockly/generators/lua/variables_dynamic.js +21 -0
  254. package/blocklySkini/blockly/generators/lua.js +198 -0
  255. package/blocklySkini/blockly/generators/php/colour.js +91 -0
  256. package/blocklySkini/blockly/generators/php/lists.js +498 -0
  257. package/blocklySkini/blockly/generators/php/logic.js +128 -0
  258. package/blocklySkini/blockly/generators/php/loops.js +170 -0
  259. package/blocklySkini/blockly/generators/php/math.js +370 -0
  260. package/blocklySkini/blockly/generators/php/procedures.js +132 -0
  261. package/blocklySkini/blockly/generators/php/text.js +271 -0
  262. package/blocklySkini/blockly/generators/php/variables.js +32 -0
  263. package/blocklySkini/blockly/generators/php/variables_dynamic.js +21 -0
  264. package/blocklySkini/blockly/generators/php.js +318 -0
  265. package/blocklySkini/blockly/generators/python/colour.js +72 -0
  266. package/blocklySkini/blockly/generators/python/lists.js +349 -0
  267. package/blocklySkini/blockly/generators/python/logic.js +127 -0
  268. package/blocklySkini/blockly/generators/python/loops.js +214 -0
  269. package/blocklySkini/blockly/generators/python/math.js +385 -0
  270. package/blocklySkini/blockly/generators/python/procedures.js +134 -0
  271. package/blocklySkini/blockly/generators/python/text.js +293 -0
  272. package/blocklySkini/blockly/generators/python/variables.js +32 -0
  273. package/blocklySkini/blockly/generators/python/variables_dynamic.js +21 -0
  274. package/blocklySkini/blockly/generators/python.js +322 -0
  275. package/blocklySkini/blockly/index.d.ts +22 -0
  276. package/blocklySkini/blockly/index.js +24 -0
  277. package/blocklySkini/blockly/javascript.d.ts +15 -0
  278. package/blocklySkini/blockly/javascript.js +27 -0
  279. package/blocklySkini/blockly/javascript_compressed.js +115 -0
  280. package/blocklySkini/blockly/javascript_compressed.js.map +1 -0
  281. package/blocklySkini/blockly/lua.d.ts +15 -0
  282. package/blocklySkini/blockly/lua.js +27 -0
  283. package/blocklySkini/blockly/lua_compressed.js +94 -0
  284. package/blocklySkini/blockly/lua_compressed.js.map +1 -0
  285. package/blocklySkini/blockly/media/1x1.gif +0 -0
  286. package/blocklySkini/blockly/media/click.mp3 +0 -0
  287. package/blocklySkini/blockly/media/click.ogg +0 -0
  288. package/blocklySkini/blockly/media/click.wav +0 -0
  289. package/blocklySkini/blockly/media/delete.mp3 +0 -0
  290. package/blocklySkini/blockly/media/delete.ogg +0 -0
  291. package/blocklySkini/blockly/media/delete.wav +0 -0
  292. package/blocklySkini/blockly/media/disconnect.mp3 +0 -0
  293. package/blocklySkini/blockly/media/disconnect.ogg +0 -0
  294. package/blocklySkini/blockly/media/disconnect.wav +0 -0
  295. package/blocklySkini/blockly/media/dropdown-arrow.svg +1 -0
  296. package/blocklySkini/blockly/media/handclosed.cur +0 -0
  297. package/blocklySkini/blockly/media/handdelete.cur +0 -0
  298. package/blocklySkini/blockly/media/handopen.cur +0 -0
  299. package/blocklySkini/blockly/media/pilcrow.png +0 -0
  300. package/blocklySkini/blockly/media/quote0.png +0 -0
  301. package/blocklySkini/blockly/media/quote1.png +0 -0
  302. package/blocklySkini/blockly/media/sprites.png +0 -0
  303. package/blocklySkini/blockly/media/sprites.svg +74 -0
  304. package/blocklySkini/blockly/msg/ab.d.ts +16 -0
  305. package/blocklySkini/blockly/msg/ab.js +447 -0
  306. package/blocklySkini/blockly/msg/ar.d.ts +16 -0
  307. package/blocklySkini/blockly/msg/ar.js +447 -0
  308. package/blocklySkini/blockly/msg/az.d.ts +16 -0
  309. package/blocklySkini/blockly/msg/az.js +447 -0
  310. package/blocklySkini/blockly/msg/ba.d.ts +16 -0
  311. package/blocklySkini/blockly/msg/ba.js +447 -0
  312. package/blocklySkini/blockly/msg/bcc.d.ts +16 -0
  313. package/blocklySkini/blockly/msg/bcc.js +447 -0
  314. package/blocklySkini/blockly/msg/be-tarask.d.ts +16 -0
  315. package/blocklySkini/blockly/msg/be-tarask.js +447 -0
  316. package/blocklySkini/blockly/msg/be.d.ts +16 -0
  317. package/blocklySkini/blockly/msg/be.js +447 -0
  318. package/blocklySkini/blockly/msg/bg.d.ts +16 -0
  319. package/blocklySkini/blockly/msg/bg.js +447 -0
  320. package/blocklySkini/blockly/msg/bn.d.ts +16 -0
  321. package/blocklySkini/blockly/msg/bn.js +447 -0
  322. package/blocklySkini/blockly/msg/br.d.ts +16 -0
  323. package/blocklySkini/blockly/msg/br.js +447 -0
  324. package/blocklySkini/blockly/msg/ca.d.ts +16 -0
  325. package/blocklySkini/blockly/msg/ca.js +447 -0
  326. package/blocklySkini/blockly/msg/constants.d.ts +16 -0
  327. package/blocklySkini/blockly/msg/cs.d.ts +16 -0
  328. package/blocklySkini/blockly/msg/cs.js +447 -0
  329. package/blocklySkini/blockly/msg/da.d.ts +16 -0
  330. package/blocklySkini/blockly/msg/da.js +447 -0
  331. package/blocklySkini/blockly/msg/de.d.ts +16 -0
  332. package/blocklySkini/blockly/msg/de.js +447 -0
  333. package/blocklySkini/blockly/msg/diq.d.ts +16 -0
  334. package/blocklySkini/blockly/msg/diq.js +447 -0
  335. package/blocklySkini/blockly/msg/dty.d.ts +16 -0
  336. package/blocklySkini/blockly/msg/dty.js +447 -0
  337. package/blocklySkini/blockly/msg/ee.d.ts +16 -0
  338. package/blocklySkini/blockly/msg/ee.js +447 -0
  339. package/blocklySkini/blockly/msg/el.d.ts +16 -0
  340. package/blocklySkini/blockly/msg/el.js +447 -0
  341. package/blocklySkini/blockly/msg/en-gb.d.ts +16 -0
  342. package/blocklySkini/blockly/msg/en-gb.js +447 -0
  343. package/blocklySkini/blockly/msg/en.d.ts +16 -0
  344. package/blocklySkini/blockly/msg/en.js +447 -0
  345. package/blocklySkini/blockly/msg/eo.d.ts +16 -0
  346. package/blocklySkini/blockly/msg/eo.js +447 -0
  347. package/blocklySkini/blockly/msg/es.d.ts +16 -0
  348. package/blocklySkini/blockly/msg/es.js +447 -0
  349. package/blocklySkini/blockly/msg/et.d.ts +16 -0
  350. package/blocklySkini/blockly/msg/et.js +447 -0
  351. package/blocklySkini/blockly/msg/eu.d.ts +16 -0
  352. package/blocklySkini/blockly/msg/eu.js +447 -0
  353. package/blocklySkini/blockly/msg/fa.d.ts +16 -0
  354. package/blocklySkini/blockly/msg/fa.js +447 -0
  355. package/blocklySkini/blockly/msg/fi.d.ts +16 -0
  356. package/blocklySkini/blockly/msg/fi.js +447 -0
  357. package/blocklySkini/blockly/msg/fr.d.ts +16 -0
  358. package/blocklySkini/blockly/msg/fr.js +447 -0
  359. package/blocklySkini/blockly/msg/gl.d.ts +16 -0
  360. package/blocklySkini/blockly/msg/gl.js +447 -0
  361. package/blocklySkini/blockly/msg/gor.d.ts +16 -0
  362. package/blocklySkini/blockly/msg/gor.js +447 -0
  363. package/blocklySkini/blockly/msg/ha.d.ts +16 -0
  364. package/blocklySkini/blockly/msg/ha.js +447 -0
  365. package/blocklySkini/blockly/msg/he.d.ts +16 -0
  366. package/blocklySkini/blockly/msg/he.js +447 -0
  367. package/blocklySkini/blockly/msg/hi.d.ts +16 -0
  368. package/blocklySkini/blockly/msg/hi.js +447 -0
  369. package/blocklySkini/blockly/msg/hrx.d.ts +16 -0
  370. package/blocklySkini/blockly/msg/hrx.js +447 -0
  371. package/blocklySkini/blockly/msg/hu.d.ts +16 -0
  372. package/blocklySkini/blockly/msg/hu.js +447 -0
  373. package/blocklySkini/blockly/msg/hy.d.ts +16 -0
  374. package/blocklySkini/blockly/msg/hy.js +447 -0
  375. package/blocklySkini/blockly/msg/ia.d.ts +16 -0
  376. package/blocklySkini/blockly/msg/ia.js +447 -0
  377. package/blocklySkini/blockly/msg/id.d.ts +16 -0
  378. package/blocklySkini/blockly/msg/id.js +447 -0
  379. package/blocklySkini/blockly/msg/ig.d.ts +16 -0
  380. package/blocklySkini/blockly/msg/ig.js +447 -0
  381. package/blocklySkini/blockly/msg/is.d.ts +16 -0
  382. package/blocklySkini/blockly/msg/is.js +447 -0
  383. package/blocklySkini/blockly/msg/it.d.ts +16 -0
  384. package/blocklySkini/blockly/msg/it.js +447 -0
  385. package/blocklySkini/blockly/msg/ja.d.ts +16 -0
  386. package/blocklySkini/blockly/msg/ja.js +447 -0
  387. package/blocklySkini/blockly/msg/kab.d.ts +16 -0
  388. package/blocklySkini/blockly/msg/kab.js +447 -0
  389. package/blocklySkini/blockly/msg/kn.d.ts +16 -0
  390. package/blocklySkini/blockly/msg/kn.js +447 -0
  391. package/blocklySkini/blockly/msg/ko.d.ts +16 -0
  392. package/blocklySkini/blockly/msg/ko.js +447 -0
  393. package/blocklySkini/blockly/msg/lb.d.ts +16 -0
  394. package/blocklySkini/blockly/msg/lb.js +447 -0
  395. package/blocklySkini/blockly/msg/lki.d.ts +16 -0
  396. package/blocklySkini/blockly/msg/lki.js +447 -0
  397. package/blocklySkini/blockly/msg/lo.d.ts +16 -0
  398. package/blocklySkini/blockly/msg/lo.js +447 -0
  399. package/blocklySkini/blockly/msg/lrc.d.ts +16 -0
  400. package/blocklySkini/blockly/msg/lrc.js +447 -0
  401. package/blocklySkini/blockly/msg/lt.d.ts +16 -0
  402. package/blocklySkini/blockly/msg/lt.js +447 -0
  403. package/blocklySkini/blockly/msg/lv.d.ts +16 -0
  404. package/blocklySkini/blockly/msg/lv.js +447 -0
  405. package/blocklySkini/blockly/msg/mk.d.ts +16 -0
  406. package/blocklySkini/blockly/msg/mk.js +447 -0
  407. package/blocklySkini/blockly/msg/mnw.d.ts +16 -0
  408. package/blocklySkini/blockly/msg/mnw.js +447 -0
  409. package/blocklySkini/blockly/msg/ms.d.ts +16 -0
  410. package/blocklySkini/blockly/msg/ms.js +447 -0
  411. package/blocklySkini/blockly/msg/msg.d.ts +444 -0
  412. package/blocklySkini/blockly/msg/nb.d.ts +16 -0
  413. package/blocklySkini/blockly/msg/nb.js +447 -0
  414. package/blocklySkini/blockly/msg/nl.d.ts +16 -0
  415. package/blocklySkini/blockly/msg/nl.js +447 -0
  416. package/blocklySkini/blockly/msg/oc.d.ts +16 -0
  417. package/blocklySkini/blockly/msg/oc.js +447 -0
  418. package/blocklySkini/blockly/msg/pl.d.ts +16 -0
  419. package/blocklySkini/blockly/msg/pl.js +447 -0
  420. package/blocklySkini/blockly/msg/pms.d.ts +16 -0
  421. package/blocklySkini/blockly/msg/pms.js +447 -0
  422. package/blocklySkini/blockly/msg/pt-br.d.ts +16 -0
  423. package/blocklySkini/blockly/msg/pt-br.js +447 -0
  424. package/blocklySkini/blockly/msg/pt.d.ts +16 -0
  425. package/blocklySkini/blockly/msg/pt.js +447 -0
  426. package/blocklySkini/blockly/msg/qqq.d.ts +16 -0
  427. package/blocklySkini/blockly/msg/ro.d.ts +16 -0
  428. package/blocklySkini/blockly/msg/ro.js +447 -0
  429. package/blocklySkini/blockly/msg/ru.d.ts +16 -0
  430. package/blocklySkini/blockly/msg/ru.js +447 -0
  431. package/blocklySkini/blockly/msg/sc.d.ts +16 -0
  432. package/blocklySkini/blockly/msg/sc.js +447 -0
  433. package/blocklySkini/blockly/msg/sd.d.ts +16 -0
  434. package/blocklySkini/blockly/msg/sd.js +447 -0
  435. package/blocklySkini/blockly/msg/shn.d.ts +16 -0
  436. package/blocklySkini/blockly/msg/shn.js +447 -0
  437. package/blocklySkini/blockly/msg/sk.d.ts +16 -0
  438. package/blocklySkini/blockly/msg/sk.js +447 -0
  439. package/blocklySkini/blockly/msg/skr-arab.d.ts +16 -0
  440. package/blocklySkini/blockly/msg/skr-arab.js +447 -0
  441. package/blocklySkini/blockly/msg/sl.d.ts +16 -0
  442. package/blocklySkini/blockly/msg/sl.js +447 -0
  443. package/blocklySkini/blockly/msg/sq.d.ts +16 -0
  444. package/blocklySkini/blockly/msg/sq.js +447 -0
  445. package/blocklySkini/blockly/msg/sr-latn.d.ts +16 -0
  446. package/blocklySkini/blockly/msg/sr-latn.js +447 -0
  447. package/blocklySkini/blockly/msg/sr.d.ts +16 -0
  448. package/blocklySkini/blockly/msg/sr.js +447 -0
  449. package/blocklySkini/blockly/msg/sv.d.ts +16 -0
  450. package/blocklySkini/blockly/msg/sv.js +447 -0
  451. package/blocklySkini/blockly/msg/synonyms.d.ts +16 -0
  452. package/blocklySkini/blockly/msg/ta.d.ts +16 -0
  453. package/blocklySkini/blockly/msg/ta.js +447 -0
  454. package/blocklySkini/blockly/msg/tcy.d.ts +16 -0
  455. package/blocklySkini/blockly/msg/tcy.js +447 -0
  456. package/blocklySkini/blockly/msg/te.d.ts +16 -0
  457. package/blocklySkini/blockly/msg/te.js +447 -0
  458. package/blocklySkini/blockly/msg/th.d.ts +16 -0
  459. package/blocklySkini/blockly/msg/th.js +447 -0
  460. package/blocklySkini/blockly/msg/tl.d.ts +16 -0
  461. package/blocklySkini/blockly/msg/tl.js +447 -0
  462. package/blocklySkini/blockly/msg/tlh.d.ts +16 -0
  463. package/blocklySkini/blockly/msg/tlh.js +447 -0
  464. package/blocklySkini/blockly/msg/tr.d.ts +16 -0
  465. package/blocklySkini/blockly/msg/tr.js +447 -0
  466. package/blocklySkini/blockly/msg/ug-arab.d.ts +16 -0
  467. package/blocklySkini/blockly/msg/ug-arab.js +447 -0
  468. package/blocklySkini/blockly/msg/uk.d.ts +16 -0
  469. package/blocklySkini/blockly/msg/uk.js +447 -0
  470. package/blocklySkini/blockly/msg/ur.d.ts +16 -0
  471. package/blocklySkini/blockly/msg/ur.js +447 -0
  472. package/blocklySkini/blockly/msg/vi.d.ts +16 -0
  473. package/blocklySkini/blockly/msg/vi.js +447 -0
  474. package/blocklySkini/blockly/msg/xmf.d.ts +16 -0
  475. package/blocklySkini/blockly/msg/xmf.js +447 -0
  476. package/blocklySkini/blockly/msg/yo.d.ts +16 -0
  477. package/blocklySkini/blockly/msg/yo.js +447 -0
  478. package/blocklySkini/blockly/msg/zh-hans.d.ts +16 -0
  479. package/blocklySkini/blockly/msg/zh-hans.js +447 -0
  480. package/blocklySkini/blockly/msg/zh-hant.d.ts +16 -0
  481. package/blocklySkini/blockly/msg/zh-hant.js +447 -0
  482. package/blocklySkini/blockly/node.js +35 -0
  483. package/blocklySkini/blockly/package.json +84 -0
  484. package/blocklySkini/blockly/php.d.ts +15 -0
  485. package/blocklySkini/blockly/php.js +27 -0
  486. package/blocklySkini/blockly/php_compressed.js +103 -0
  487. package/blocklySkini/blockly/php_compressed.js.map +1 -0
  488. package/blocklySkini/blockly/python.d.ts +15 -0
  489. package/blocklySkini/blockly/python.js +27 -0
  490. package/blocklySkini/blockly/python_compressed.js +98 -0
  491. package/blocklySkini/blockly/python_compressed.js.map +1 -0
  492. package/blocklySkini/blocklySkini.html +81 -0
  493. package/blocklySkini/orchestrations/.xml +1 -0
  494. package/blocklySkini/orchestrations/BluesSkini-1.xml +231 -0
  495. package/blocklySkini/orchestrations/BluesSkini-2.xml +741 -0
  496. package/blocklySkini/orchestrations/BluesSkini-3.xml +731 -0
  497. package/blocklySkini/orchestrations/BluesSkini-4.xml +695 -0
  498. package/blocklySkini/orchestrations/BluesSkini-5.xml +731 -0
  499. package/blocklySkini/orchestrations/BluesSkini.xml +704 -0
  500. package/blocklySkini/orchestrations/FunkBitwig-1.xml +778 -0
  501. package/blocklySkini/orchestrations/FunkBitwig-2.xml +471 -0
  502. package/blocklySkini/orchestrations/JouerLeBonInstrument1-1.xml +784 -0
  503. package/blocklySkini/orchestrations/MajeurMineur-1.xml +638 -0
  504. package/blocklySkini/orchestrations/Opus5-3 - Copie.xml +1041 -0
  505. package/blocklySkini/orchestrations/Opus5-3.xml +1128 -0
  506. package/blocklySkini/orchestrations/Quatuor1-1.xml +357 -0
  507. package/blocklySkini/orchestrations/TechnoBitwig-1.xml +221 -0
  508. package/blocklySkini/orchestrations/TestBlockly.xml +497 -0
  509. package/blocklySkini/orchestrations/TestBlockly1.xml +500 -0
  510. package/blocklySkini/orchestrations/TestBlockly2.xml +792 -0
  511. package/blocklySkini/orchestrations/TestBlockly3-1.xml +1182 -0
  512. package/blocklySkini/orchestrations/TestBlockly3.xml +1251 -0
  513. package/blocklySkini/orchestrations/TestFunction.xml +143 -0
  514. package/blocklySkini/orchestrations/TestIf.xml +80 -0
  515. package/blocklySkini/orchestrations/TestLoop.xml +127 -0
  516. package/blocklySkini/orchestrations/TestOrchestration2.xml +460 -0
  517. package/blocklySkini/orchestrations/TestPrint.xml +70 -0
  518. package/blocklySkini/orchestrations/TestSubMod.xml +81 -0
  519. package/blocklySkini/orchestrations/Testlogic.xml +113 -0
  520. package/blocklySkini/orchestrations/TrouveLaPercu-1.xml +813 -0
  521. package/blocklySkini/orchestrations/TrouveLaPercu-2.xml +813 -0
  522. package/blocklySkini/orchestrations/bar.xml +496 -0
  523. package/blocklySkini/orchestrations/bar2.xml +496 -0
  524. package/blocklySkini/orchestrations/foo.xml +500 -0
  525. package/blocklySkini/orchestrations/opus5Blockly - Copie.xml +496 -0
  526. package/blocklySkini/orchestrations/opus5Blockly-3.xml +868 -0
  527. package/blocklySkini/orchestrations/opus5Blockly.xml +496 -0
  528. package/blocklySkini/orchestrations/testOrchestration3.xml +483 -0
  529. package/blocklySkini/orchestrations/testOrchestration4.xml +487 -0
  530. package/blocklySkini/scripts/hiphop_blocks.js +6104 -0
  531. package/blocklySkini/scripts/main2.js +801 -0
  532. package/blocklySkini/styles/index.css +320 -0
  533. package/blocklySkini/styles/material.css +11552 -0
  534. package/package.json +3 -3
@@ -0,0 +1,652 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2012 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Utility methods.
9
+ * These methods are not specific to Blockly, and could be factored out into
10
+ * a JavaScript framework such as Closure.
11
+ * @author fraser@google.com (Neil Fraser)
12
+ */
13
+ 'use strict';
14
+
15
+ /**
16
+ * @name Blockly.utils
17
+ * @namespace
18
+ */
19
+ goog.provide('Blockly.utils');
20
+
21
+ goog.require('Blockly.Msg');
22
+ goog.require('Blockly.constants');
23
+ goog.require('Blockly.utils.colour');
24
+ goog.require('Blockly.utils.Coordinate');
25
+ goog.require('Blockly.utils.global');
26
+ goog.require('Blockly.utils.Rect');
27
+ goog.require('Blockly.utils.string');
28
+ goog.require('Blockly.utils.style');
29
+ goog.require('Blockly.utils.userAgent');
30
+
31
+
32
+ /**
33
+ * Don't do anything for this event, just halt propagation.
34
+ * @param {!Event} e An event.
35
+ */
36
+ Blockly.utils.noEvent = function(e) {
37
+ // This event has been handled. No need to bubble up to the document.
38
+ e.preventDefault();
39
+ e.stopPropagation();
40
+ };
41
+
42
+ /**
43
+ * Is this event targeting a text input widget?
44
+ * @param {!Event} e An event.
45
+ * @return {boolean} True if text input.
46
+ */
47
+ Blockly.utils.isTargetInput = function(e) {
48
+ return e.target.type == 'textarea' || e.target.type == 'text' ||
49
+ e.target.type == 'number' || e.target.type == 'email' ||
50
+ e.target.type == 'password' || e.target.type == 'search' ||
51
+ e.target.type == 'tel' || e.target.type == 'url' ||
52
+ e.target.isContentEditable ||
53
+ (e.target.dataset && e.target.dataset.isTextInput == 'true');
54
+ };
55
+
56
+ /**
57
+ * Return the coordinates of the top-left corner of this element relative to
58
+ * its parent. Only for SVG elements and children (e.g. rect, g, path).
59
+ * @param {!Element} element SVG element to find the coordinates of.
60
+ * @return {!Blockly.utils.Coordinate} Object with .x and .y properties.
61
+ */
62
+ Blockly.utils.getRelativeXY = function(element) {
63
+ var xy = new Blockly.utils.Coordinate(0, 0);
64
+ // First, check for x and y attributes.
65
+ var x = element.getAttribute('x');
66
+ if (x) {
67
+ xy.x = parseInt(x, 10);
68
+ }
69
+ var y = element.getAttribute('y');
70
+ if (y) {
71
+ xy.y = parseInt(y, 10);
72
+ }
73
+ // Second, check for transform="translate(...)" attribute.
74
+ var transform = element.getAttribute('transform');
75
+ var r = transform && transform.match(Blockly.utils.getRelativeXY.XY_REGEX_);
76
+ if (r) {
77
+ xy.x += Number(r[1]);
78
+ if (r[3]) {
79
+ xy.y += Number(r[3]);
80
+ }
81
+ }
82
+
83
+ // Then check for style = transform: translate(...) or translate3d(...)
84
+ var style = element.getAttribute('style');
85
+ if (style && style.indexOf('translate') > -1) {
86
+ var styleComponents =
87
+ style.match(Blockly.utils.getRelativeXY.XY_STYLE_REGEX_);
88
+ if (styleComponents) {
89
+ xy.x += Number(styleComponents[1]);
90
+ if (styleComponents[3]) {
91
+ xy.y += Number(styleComponents[3]);
92
+ }
93
+ }
94
+ }
95
+ return xy;
96
+ };
97
+
98
+ /**
99
+ * Return the coordinates of the top-left corner of this element relative to
100
+ * the div Blockly was injected into.
101
+ * @param {!Element} element SVG element to find the coordinates of. If this is
102
+ * not a child of the div Blockly was injected into, the behaviour is
103
+ * undefined.
104
+ * @return {!Blockly.utils.Coordinate} Object with .x and .y properties.
105
+ */
106
+ Blockly.utils.getInjectionDivXY_ = function(element) {
107
+ var x = 0;
108
+ var y = 0;
109
+ while (element) {
110
+ var xy = Blockly.utils.getRelativeXY(element);
111
+ x = x + xy.x;
112
+ y = y + xy.y;
113
+ var classes = element.getAttribute('class') || '';
114
+ if ((' ' + classes + ' ').indexOf(' injectionDiv ') != -1) {
115
+ break;
116
+ }
117
+ element = /** @type {!Element} */ (element.parentNode);
118
+ }
119
+ return new Blockly.utils.Coordinate(x, y);
120
+ };
121
+
122
+ /**
123
+ * Static regex to pull the x,y values out of an SVG translate() directive.
124
+ * Note that Firefox and IE (9,10) return 'translate(12)' instead of
125
+ * 'translate(12, 0)'.
126
+ * Note that IE (9,10) returns 'translate(16 8)' instead of 'translate(16, 8)'.
127
+ * Note that IE has been reported to return scientific notation (0.123456e-42).
128
+ * @type {!RegExp}
129
+ * @private
130
+ */
131
+ Blockly.utils.getRelativeXY.XY_REGEX_ =
132
+ /translate\(\s*([-+\d.e]+)([ ,]\s*([-+\d.e]+)\s*)?/;
133
+
134
+ /**
135
+ * Static regex to pull the x,y values out of a translate() or translate3d()
136
+ * style property.
137
+ * Accounts for same exceptions as XY_REGEX_.
138
+ * @type {!RegExp}
139
+ * @private
140
+ */
141
+ Blockly.utils.getRelativeXY.XY_STYLE_REGEX_ =
142
+ /transform:\s*translate(?:3d)?\(\s*([-+\d.e]+)\s*px([ ,]\s*([-+\d.e]+)\s*px)?/;
143
+
144
+ /**
145
+ * Is this event a right-click?
146
+ * @param {!Event} e Mouse event.
147
+ * @return {boolean} True if right-click.
148
+ */
149
+ Blockly.utils.isRightButton = function(e) {
150
+ if (e.ctrlKey && Blockly.utils.userAgent.MAC) {
151
+ // Control-clicking on Mac OS X is treated as a right-click.
152
+ // WebKit on Mac OS X fails to change button to 2 (but Gecko does).
153
+ return true;
154
+ }
155
+ return e.button == 2;
156
+ };
157
+
158
+ /**
159
+ * Return the converted coordinates of the given mouse event.
160
+ * The origin (0,0) is the top-left corner of the Blockly SVG.
161
+ * @param {!Event} e Mouse event.
162
+ * @param {!Element} svg SVG element.
163
+ * @param {SVGMatrix} matrix Inverted screen CTM to use.
164
+ * @return {!SVGPoint} Object with .x and .y properties.
165
+ */
166
+ Blockly.utils.mouseToSvg = function(e, svg, matrix) {
167
+ var svgPoint = svg.createSVGPoint();
168
+ svgPoint.x = e.clientX;
169
+ svgPoint.y = e.clientY;
170
+
171
+ if (!matrix) {
172
+ matrix = svg.getScreenCTM().inverse();
173
+ }
174
+ return svgPoint.matrixTransform(matrix);
175
+ };
176
+
177
+ /**
178
+ * Get the scroll delta of a mouse event in pixel units.
179
+ * @param {!Event} e Mouse event.
180
+ * @return {{x: number, y: number}} Scroll delta object with .x and .y
181
+ * properties.
182
+ */
183
+ Blockly.utils.getScrollDeltaPixels = function(e) {
184
+ switch (e.deltaMode) {
185
+ case 0x00: // Pixel mode.
186
+ default:
187
+ return {
188
+ x: e.deltaX,
189
+ y: e.deltaY
190
+ };
191
+ case 0x01: // Line mode.
192
+ return {
193
+ x: e.deltaX * Blockly.LINE_MODE_MULTIPLIER,
194
+ y: e.deltaY * Blockly.LINE_MODE_MULTIPLIER
195
+ };
196
+ case 0x02: // Page mode.
197
+ return {
198
+ x: e.deltaX * Blockly.PAGE_MODE_MULTIPLIER,
199
+ y: e.deltaY * Blockly.PAGE_MODE_MULTIPLIER
200
+ };
201
+ }
202
+ };
203
+
204
+ /**
205
+ * Parse a string with any number of interpolation tokens (%1, %2, ...).
206
+ * It will also replace string table references (e.g., %{bky_my_msg} and
207
+ * %{BKY_MY_MSG} will both be replaced with the value in
208
+ * Blockly.Msg['MY_MSG']). Percentage sign characters '%' may be self-escaped
209
+ * (e.g., '%%').
210
+ * @param {string} message Text which might contain string table references and
211
+ * interpolation tokens.
212
+ * @return {!Array.<string|number>} Array of strings and numbers.
213
+ */
214
+ Blockly.utils.tokenizeInterpolation = function(message) {
215
+ return Blockly.utils.tokenizeInterpolation_(message, true);
216
+ };
217
+
218
+ /**
219
+ * Replaces string table references in a message, if the message is a string.
220
+ * For example, "%{bky_my_msg}" and "%{BKY_MY_MSG}" will both be replaced with
221
+ * the value in Blockly.Msg['MY_MSG'].
222
+ * @param {string|?} message Message, which may be a string that contains
223
+ * string table references.
224
+ * @return {string} String with message references replaced.
225
+ */
226
+ Blockly.utils.replaceMessageReferences = function(message) {
227
+ if (typeof message != 'string') {
228
+ return message;
229
+ }
230
+ var interpolatedResult = Blockly.utils.tokenizeInterpolation_(message, false);
231
+ // When parseInterpolationTokens == false, interpolatedResult should be at
232
+ // most length 1.
233
+ return interpolatedResult.length ? String(interpolatedResult[0]) : '';
234
+ };
235
+
236
+ /**
237
+ * Validates that any %{MSG_KEY} references in the message refer to keys of
238
+ * the Blockly.Msg string table.
239
+ * @param {string} message Text which might contain string table references.
240
+ * @return {boolean} True if all message references have matching values.
241
+ * Otherwise, false.
242
+ */
243
+ Blockly.utils.checkMessageReferences = function(message) {
244
+ var validSoFar = true;
245
+
246
+ var msgTable = Blockly.Msg;
247
+
248
+ // TODO (#1169): Implement support for other string tables,
249
+ // prefixes other than BKY_.
250
+ var m = message.match(/%{BKY_[A-Z]\w*}/ig);
251
+ for (var i = 0; i < m.length; i++) {
252
+ var msgKey = m[i].toUpperCase();
253
+ if (msgTable[msgKey.slice(6, -1)] == undefined) {
254
+ console.warn('No message string for ' + m[i] + ' in ' + message);
255
+ validSoFar = false; // Continue to report other errors.
256
+ }
257
+ }
258
+
259
+ return validSoFar;
260
+ };
261
+
262
+ /**
263
+ * Internal implementation of the message reference and interpolation token
264
+ * parsing used by tokenizeInterpolation() and replaceMessageReferences().
265
+ * @param {string} message Text which might contain string table references and
266
+ * interpolation tokens.
267
+ * @param {boolean} parseInterpolationTokens Option to parse numeric
268
+ * interpolation tokens (%1, %2, ...) when true.
269
+ * @return {!Array.<string|number>} Array of strings and numbers.
270
+ * @private
271
+ */
272
+ Blockly.utils.tokenizeInterpolation_ = function(message,
273
+ parseInterpolationTokens) {
274
+ var tokens = [];
275
+ var chars = message.split('');
276
+ chars.push(''); // End marker.
277
+ // Parse the message with a finite state machine.
278
+ // 0 - Base case.
279
+ // 1 - % found.
280
+ // 2 - Digit found.
281
+ // 3 - Message ref found.
282
+ var state = 0;
283
+ var buffer = [];
284
+ var number = null;
285
+ for (var i = 0; i < chars.length; i++) {
286
+ var c = chars[i];
287
+ if (state == 0) {
288
+ if (c == '%') {
289
+ var text = buffer.join('');
290
+ if (text) {
291
+ tokens.push(text);
292
+ }
293
+ buffer.length = 0;
294
+ state = 1; // Start escape.
295
+ } else {
296
+ buffer.push(c); // Regular char.
297
+ }
298
+ } else if (state == 1) {
299
+ if (c == '%') {
300
+ buffer.push(c); // Escaped %: %%
301
+ state = 0;
302
+ } else if (parseInterpolationTokens && '0' <= c && c <= '9') {
303
+ state = 2;
304
+ number = c;
305
+ var text = buffer.join('');
306
+ if (text) {
307
+ tokens.push(text);
308
+ }
309
+ buffer.length = 0;
310
+ } else if (c == '{') {
311
+ state = 3;
312
+ } else {
313
+ buffer.push('%', c); // Not recognized. Return as literal.
314
+ state = 0;
315
+ }
316
+ } else if (state == 2) {
317
+ if ('0' <= c && c <= '9') {
318
+ number += c; // Multi-digit number.
319
+ } else {
320
+ tokens.push(parseInt(number, 10));
321
+ i--; // Parse this char again.
322
+ state = 0;
323
+ }
324
+ } else if (state == 3) { // String table reference
325
+ if (c == '') {
326
+ // Premature end before closing '}'
327
+ buffer.splice(0, 0, '%{'); // Re-insert leading delimiter
328
+ i--; // Parse this char again.
329
+ state = 0; // and parse as string literal.
330
+ } else if (c != '}') {
331
+ buffer.push(c);
332
+ } else {
333
+ var rawKey = buffer.join('');
334
+ if (/[A-Z]\w*/i.test(rawKey)) { // Strict matching
335
+ // Found a valid string key. Attempt case insensitive match.
336
+ var keyUpper = rawKey.toUpperCase();
337
+
338
+ // BKY_ is the prefix used to namespace the strings used in Blockly
339
+ // core files and the predefined blocks in ../blocks/.
340
+ // These strings are defined in ../msgs/ files.
341
+ var bklyKey = Blockly.utils.string.startsWith(keyUpper, 'BKY_') ?
342
+ keyUpper.substring(4) : null;
343
+ if (bklyKey && bklyKey in Blockly.Msg) {
344
+ var rawValue = Blockly.Msg[bklyKey];
345
+ if (typeof rawValue == 'string') {
346
+ // Attempt to dereference substrings, too, appending to the end.
347
+ Array.prototype.push.apply(tokens,
348
+ Blockly.utils.tokenizeInterpolation_(
349
+ rawValue, parseInterpolationTokens));
350
+ } else if (parseInterpolationTokens) {
351
+ // When parsing interpolation tokens, numbers are special
352
+ // placeholders (%1, %2, etc). Make sure all other values are
353
+ // strings.
354
+ tokens.push(String(rawValue));
355
+ } else {
356
+ tokens.push(rawValue);
357
+ }
358
+ } else {
359
+ // No entry found in the string table. Pass reference as string.
360
+ tokens.push('%{' + rawKey + '}');
361
+ }
362
+ buffer.length = 0; // Clear the array
363
+ state = 0;
364
+ } else {
365
+ tokens.push('%{' + rawKey + '}');
366
+ buffer.length = 0;
367
+ state = 0; // and parse as string literal.
368
+ }
369
+ }
370
+ }
371
+ }
372
+ var text = buffer.join('');
373
+ if (text) {
374
+ tokens.push(text);
375
+ }
376
+
377
+ // Merge adjacent text tokens into a single string.
378
+ var mergedTokens = [];
379
+ buffer.length = 0;
380
+ for (var i = 0; i < tokens.length; ++i) {
381
+ if (typeof tokens[i] == 'string') {
382
+ buffer.push(tokens[i]);
383
+ } else {
384
+ text = buffer.join('');
385
+ if (text) {
386
+ mergedTokens.push(text);
387
+ }
388
+ buffer.length = 0;
389
+ mergedTokens.push(tokens[i]);
390
+ }
391
+ }
392
+ text = buffer.join('');
393
+ if (text) {
394
+ mergedTokens.push(text);
395
+ }
396
+ buffer.length = 0;
397
+
398
+ return mergedTokens;
399
+ };
400
+
401
+ /**
402
+ * Generate a unique ID. This should be globally unique.
403
+ * 87 characters ^ 20 length > 128 bits (better than a UUID).
404
+ * @return {string} A globally unique ID string.
405
+ */
406
+ Blockly.utils.genUid = function() {
407
+ var length = 20;
408
+ var soupLength = Blockly.utils.genUid.soup_.length;
409
+ var id = [];
410
+ for (var i = 0; i < length; i++) {
411
+ id[i] = Blockly.utils.genUid.soup_.charAt(Math.random() * soupLength);
412
+ }
413
+ return id.join('');
414
+ };
415
+
416
+ /**
417
+ * Legal characters for the unique ID. Should be all on a US keyboard.
418
+ * No characters that conflict with XML or JSON. Requests to remove additional
419
+ * 'problematic' characters from this soup will be denied. That's your failure
420
+ * to properly escape in your own environment. Issues #251, #625, #682, #1304.
421
+ * @private
422
+ */
423
+ Blockly.utils.genUid.soup_ = '!#$%()*+,-./:;=?@[]^_`{|}~' +
424
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
425
+
426
+ /**
427
+ * Check if 3D transforms are supported by adding an element
428
+ * and attempting to set the property.
429
+ * @return {boolean} True if 3D transforms are supported.
430
+ */
431
+ Blockly.utils.is3dSupported = function() {
432
+ if (Blockly.utils.is3dSupported.cached_ !== undefined) {
433
+ return Blockly.utils.is3dSupported.cached_;
434
+ }
435
+ // CC-BY-SA Lorenzo Polidori
436
+ // stackoverflow.com/questions/5661671/detecting-transform-translate3d-support
437
+ if (!Blockly.utils.global.getComputedStyle) {
438
+ return false;
439
+ }
440
+
441
+ var el = document.createElement('p');
442
+ var has3d = 'none';
443
+ var transforms = {
444
+ 'webkitTransform': '-webkit-transform',
445
+ 'OTransform': '-o-transform',
446
+ 'msTransform': '-ms-transform',
447
+ 'MozTransform': '-moz-transform',
448
+ 'transform': 'transform'
449
+ };
450
+
451
+ // Add it to the body to get the computed style.
452
+ document.body.insertBefore(el, null);
453
+
454
+ for (var t in transforms) {
455
+ if (el.style[t] !== undefined) {
456
+ el.style[t] = 'translate3d(1px,1px,1px)';
457
+ var computedStyle = Blockly.utils.global.getComputedStyle(el);
458
+ if (!computedStyle) {
459
+ // getComputedStyle in Firefox returns null when Blockly is loaded
460
+ // inside an iframe with display: none. Returning false and not
461
+ // caching is3dSupported means we try again later. This is most likely
462
+ // when users are interacting with blocks which should mean Blockly is
463
+ // visible again.
464
+ // See https://bugzilla.mozilla.org/show_bug.cgi?id=548397
465
+ document.body.removeChild(el);
466
+ return false;
467
+ }
468
+ has3d = computedStyle.getPropertyValue(transforms[t]);
469
+ }
470
+ }
471
+ document.body.removeChild(el);
472
+ Blockly.utils.is3dSupported.cached_ = has3d !== 'none';
473
+ return Blockly.utils.is3dSupported.cached_;
474
+ };
475
+
476
+ /**
477
+ * Calls a function after the page has loaded, possibly immediately.
478
+ * @param {function()} fn Function to run.
479
+ * @throws Error Will throw if no global document can be found (e.g., Node.js).
480
+ */
481
+ Blockly.utils.runAfterPageLoad = function(fn) {
482
+ if (typeof document != 'object') {
483
+ throw Error('Blockly.utils.runAfterPageLoad() requires browser document.');
484
+ }
485
+ if (document.readyState == 'complete') {
486
+ fn(); // Page has already loaded. Call immediately.
487
+ } else {
488
+ // Poll readyState.
489
+ var readyStateCheckInterval = setInterval(function() {
490
+ if (document.readyState == 'complete') {
491
+ clearInterval(readyStateCheckInterval);
492
+ fn();
493
+ }
494
+ }, 10);
495
+ }
496
+ };
497
+
498
+ /**
499
+ * Get the position of the current viewport in window coordinates. This takes
500
+ * scroll into account.
501
+ * @return {!Blockly.utils.Rect} An object containing window width, height, and
502
+ * scroll position in window coordinates.
503
+ * @package
504
+ */
505
+ Blockly.utils.getViewportBBox = function() {
506
+ // Pixels, in window coordinates.
507
+ var scrollOffset = Blockly.utils.style.getViewportPageOffset();
508
+ return new Blockly.utils.Rect(
509
+ scrollOffset.y,
510
+ document.documentElement.clientHeight + scrollOffset.y,
511
+ scrollOffset.x,
512
+ document.documentElement.clientWidth + scrollOffset.x
513
+ );
514
+ };
515
+
516
+ /**
517
+ * Removes the first occurrence of a particular value from an array.
518
+ * @param {!Array} arr Array from which to remove
519
+ * value.
520
+ * @param {*} obj Object to remove.
521
+ * @return {boolean} True if an element was removed.
522
+ * @package
523
+ */
524
+ Blockly.utils.arrayRemove = function(arr, obj) {
525
+ var i = arr.indexOf(obj);
526
+ if (i == -1) {
527
+ return false;
528
+ }
529
+ arr.splice(i, 1);
530
+ return true;
531
+ };
532
+
533
+ /**
534
+ * Gets the document scroll distance as a coordinate object.
535
+ * Copied from Closure's goog.dom.getDocumentScroll.
536
+ * @return {!Blockly.utils.Coordinate} Object with values 'x' and 'y'.
537
+ */
538
+ Blockly.utils.getDocumentScroll = function() {
539
+ var el = document.documentElement;
540
+ var win = window;
541
+ if (Blockly.utils.userAgent.IE && win.pageYOffset != el.scrollTop) {
542
+ // The keyboard on IE10 touch devices shifts the page using the pageYOffset
543
+ // without modifying scrollTop. For this case, we want the body scroll
544
+ // offsets.
545
+ return new Blockly.utils.Coordinate(el.scrollLeft, el.scrollTop);
546
+ }
547
+ return new Blockly.utils.Coordinate(
548
+ win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop);
549
+ };
550
+
551
+ /**
552
+ * Get a map of all the block's descendants mapping their type to the number of
553
+ * children with that type.
554
+ * @param {!Blockly.Block} block The block to map.
555
+ * @param {boolean=} opt_stripFollowing Optionally ignore all following
556
+ * statements (blocks that are not inside a value or statement input
557
+ * of the block).
558
+ * @return {!Object} Map of types to type counts for descendants of the bock.
559
+ */
560
+ Blockly.utils.getBlockTypeCounts = function(block, opt_stripFollowing) {
561
+ var typeCountsMap = Object.create(null);
562
+ var descendants = block.getDescendants(true);
563
+ if (opt_stripFollowing) {
564
+ var nextBlock = block.getNextBlock();
565
+ if (nextBlock) {
566
+ var index = descendants.indexOf(nextBlock);
567
+ descendants.splice(index, descendants.length - index);
568
+ }
569
+ }
570
+ for (var i = 0, checkBlock; (checkBlock = descendants[i]); i++) {
571
+ if (typeCountsMap[checkBlock.type]) {
572
+ typeCountsMap[checkBlock.type]++;
573
+ } else {
574
+ typeCountsMap[checkBlock.type] = 1;
575
+ }
576
+ }
577
+ return typeCountsMap;
578
+ };
579
+
580
+ /**
581
+ * Converts screen coordinates to workspace coordinates.
582
+ * @param {Blockly.WorkspaceSvg} ws The workspace to find the coordinates on.
583
+ * @param {Blockly.utils.Coordinate} screenCoordinates The screen coordinates to
584
+ * be converted to workspace coordinates
585
+ * @return {Blockly.utils.Coordinate} The workspace coordinates.
586
+ * @package
587
+ */
588
+ Blockly.utils.screenToWsCoordinates = function(ws, screenCoordinates) {
589
+ var screenX = screenCoordinates.x;
590
+ var screenY = screenCoordinates.y;
591
+
592
+ var injectionDiv = ws.getInjectionDiv();
593
+ // Bounding rect coordinates are in client coordinates, meaning that they
594
+ // are in pixels relative to the upper left corner of the visible browser
595
+ // window. These coordinates change when you scroll the browser window.
596
+ var boundingRect = injectionDiv.getBoundingClientRect();
597
+
598
+ // The client coordinates offset by the injection div's upper left corner.
599
+ var clientOffsetPixels = new Blockly.utils.Coordinate(
600
+ screenX - boundingRect.left, screenY - boundingRect.top);
601
+
602
+ // The offset in pixels between the main workspace's origin and the upper
603
+ // left corner of the injection div.
604
+ var mainOffsetPixels = ws.getOriginOffsetInPixels();
605
+
606
+ // The position of the new comment in pixels relative to the origin of the
607
+ // main workspace.
608
+ var finalOffsetPixels = Blockly.utils.Coordinate.difference(
609
+ clientOffsetPixels, mainOffsetPixels);
610
+
611
+ // The position in main workspace coordinates.
612
+ var finalOffsetMainWs = finalOffsetPixels.scale(1 / ws.scale);
613
+ return finalOffsetMainWs;
614
+ };
615
+
616
+ /**
617
+ * Parse a block colour from a number or string, as provided in a block
618
+ * definition.
619
+ * @param {number|string} colour HSV hue value (0 to 360), #RRGGBB string,
620
+ * or a message reference string pointing to one of those two values.
621
+ * @return {{hue: ?number, hex: string}} An object containing the colour as
622
+ * a #RRGGBB string, and the hue if the input was an HSV hue value.
623
+ * @throws {Error} If the colour cannot be parsed.
624
+ */
625
+ Blockly.utils.parseBlockColour = function(colour) {
626
+ var dereferenced = (typeof colour == 'string') ?
627
+ Blockly.utils.replaceMessageReferences(colour) : colour;
628
+
629
+ var hue = Number(dereferenced);
630
+ if (!isNaN(hue) && 0 <= hue && hue <= 360) {
631
+ return {
632
+ hue: hue,
633
+ hex: Blockly.utils.colour.hsvToHex(hue, Blockly.HSV_SATURATION,
634
+ Blockly.HSV_VALUE * 255)
635
+ };
636
+ } else {
637
+ var hex = Blockly.utils.colour.parse(dereferenced);
638
+ if (hex) {
639
+ // Only store hue if colour is set as a hue.
640
+ return {
641
+ hue: null,
642
+ hex: hex
643
+ };
644
+ } else {
645
+ var errorMsg = 'Invalid colour: "' + dereferenced + '"';
646
+ if (colour != dereferenced) {
647
+ errorMsg += ' (from "' + colour + '")';
648
+ }
649
+ throw Error(errorMsg);
650
+ }
651
+ }
652
+ };