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,923 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2012 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Text blocks for Blockly.
9
+ * @author fraser@google.com (Neil Fraser)
10
+ */
11
+ 'use strict';
12
+
13
+ goog.provide('Blockly.Blocks.texts'); // Deprecated
14
+ goog.provide('Blockly.Constants.Text');
15
+
16
+ goog.require('Blockly');
17
+ goog.require('Blockly.Blocks');
18
+ goog.require('Blockly.FieldDropdown');
19
+ goog.require('Blockly.FieldImage');
20
+ goog.require('Blockly.FieldMultilineInput');
21
+ goog.require('Blockly.FieldTextInput');
22
+ goog.require('Blockly.FieldVariable');
23
+ goog.require('Blockly.Mutator');
24
+
25
+
26
+ /**
27
+ * Unused constant for the common HSV hue for all blocks in this category.
28
+ * @deprecated Use Blockly.Msg['TEXTS_HUE']. (2018 April 5)
29
+ */
30
+ Blockly.Constants.Text.HUE = 160;
31
+
32
+ Blockly.defineBlocksWithJsonArray([ // BEGIN JSON EXTRACT
33
+ // Block for text value
34
+ {
35
+ "type": "text",
36
+ "message0": "%1",
37
+ "args0": [{
38
+ "type": "field_input",
39
+ "name": "TEXT",
40
+ "text": ""
41
+ }],
42
+ "output": "String",
43
+ "style": "text_blocks",
44
+ "helpUrl": "%{BKY_TEXT_TEXT_HELPURL}",
45
+ "tooltip": "%{BKY_TEXT_TEXT_TOOLTIP}",
46
+ "extensions": [
47
+ "text_quotes",
48
+ "parent_tooltip_when_inline"
49
+ ]
50
+ },
51
+ {
52
+ "type": "text_multiline",
53
+ "message0": "%1 %2",
54
+ "args0": [{
55
+ "type": "field_image",
56
+ "src": 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAARCAYAAADpP' +
57
+ 'U2iAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAdhgAAHYYBXaITgQAAABh0RVh0' +
58
+ 'U29mdHdhcmUAcGFpbnQubmV0IDQuMS42/U4J6AAAAP1JREFUOE+Vks0KQUEYhjm' +
59
+ 'RIja4ABtZ2dm5A3t3Ia6AUm7CylYuQRaUhZSlLZJiQbFAyRnPN33y01HOW08z88' +
60
+ '73zpwzM4F3GWOCruvGIE4/rLaV+Nq1hVGMBqzhqlxgCys4wJA65xnogMHsQ5luj' +
61
+ 'nYHTejBBCK2mE4abjCgMGhNxHgDFWjDSG07kdfVa2pZMf4ZyMAdWmpZMfYOsLiD' +
62
+ 'MYMjlMB+K613QISRhTnITnsYg5yUd0DETmEoMlkFOeIT/A58iyK5E18BuTBfgYX' +
63
+ 'fwNJv4P9/oEBerLylOnRhygmGdPpTTBZAPkde61lbQe4moWUvYUZYLfUNftIY4z' +
64
+ 'wA5X2Z9AYnQrEAAAAASUVORK5CYII=',
65
+ "width": 12,
66
+ "height": 17,
67
+ "alt": '\u00B6'
68
+ },{
69
+ "type": "field_multilinetext",
70
+ "name": "TEXT",
71
+ "text": ""
72
+ }],
73
+ "output": "String",
74
+ "style": "text_blocks",
75
+ "helpUrl": "%{BKY_TEXT_TEXT_HELPURL}",
76
+ "tooltip": "%{BKY_TEXT_TEXT_TOOLTIP}",
77
+ "extensions": [
78
+ "parent_tooltip_when_inline"
79
+ ]
80
+ },
81
+ {
82
+ "type": "text_join",
83
+ "message0": "",
84
+ "output": "String",
85
+ "style": "text_blocks",
86
+ "helpUrl": "%{BKY_TEXT_JOIN_HELPURL}",
87
+ "tooltip": "%{BKY_TEXT_JOIN_TOOLTIP}",
88
+ "mutator": "text_join_mutator"
89
+
90
+ },
91
+ {
92
+ "type": "text_create_join_container",
93
+ "message0": "%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2",
94
+ "args0": [{
95
+ "type": "input_dummy"
96
+ },
97
+ {
98
+ "type": "input_statement",
99
+ "name": "STACK"
100
+ }],
101
+ "style": "text_blocks",
102
+ "tooltip": "%{BKY_TEXT_CREATE_JOIN_TOOLTIP}",
103
+ "enableContextMenu": false
104
+ },
105
+ {
106
+ "type": "text_create_join_item",
107
+ "message0": "%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}",
108
+ "previousStatement": null,
109
+ "nextStatement": null,
110
+ "style": "text_blocks",
111
+ "tooltip": "%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}",
112
+ "enableContextMenu": false
113
+ },
114
+ {
115
+ "type": "text_append",
116
+ "message0": "%{BKY_TEXT_APPEND_TITLE}",
117
+ "args0": [{
118
+ "type": "field_variable",
119
+ "name": "VAR",
120
+ "variable": "%{BKY_TEXT_APPEND_VARIABLE}"
121
+ },
122
+ {
123
+ "type": "input_value",
124
+ "name": "TEXT"
125
+ }],
126
+ "previousStatement": null,
127
+ "nextStatement": null,
128
+ "style": "text_blocks",
129
+ "extensions": [
130
+ "text_append_tooltip"
131
+ ]
132
+ },
133
+ {
134
+ "type": "text_length",
135
+ "message0": "%{BKY_TEXT_LENGTH_TITLE}",
136
+ "args0": [
137
+ {
138
+ "type": "input_value",
139
+ "name": "VALUE",
140
+ "check": ['String', 'Array']
141
+ }
142
+ ],
143
+ "output": 'Number',
144
+ "style": "text_blocks",
145
+ "tooltip": "%{BKY_TEXT_LENGTH_TOOLTIP}",
146
+ "helpUrl": "%{BKY_TEXT_LENGTH_HELPURL}"
147
+ },
148
+ {
149
+ "type": "text_isEmpty",
150
+ "message0": "%{BKY_TEXT_ISEMPTY_TITLE}",
151
+ "args0": [
152
+ {
153
+ "type": "input_value",
154
+ "name": "VALUE",
155
+ "check": ['String', 'Array']
156
+ }
157
+ ],
158
+ "output": 'Boolean',
159
+ "style": "text_blocks",
160
+ "tooltip": "%{BKY_TEXT_ISEMPTY_TOOLTIP}",
161
+ "helpUrl": "%{BKY_TEXT_ISEMPTY_HELPURL}"
162
+ },
163
+ {
164
+ "type": "text_indexOf",
165
+ "message0": "%{BKY_TEXT_INDEXOF_TITLE}",
166
+ "args0": [
167
+ {
168
+ "type": "input_value",
169
+ "name": "VALUE",
170
+ "check": "String"
171
+ },
172
+ {
173
+ "type": "field_dropdown",
174
+ "name": "END",
175
+ "options": [
176
+ [
177
+ "%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}",
178
+ "FIRST"
179
+ ],
180
+ [
181
+ "%{BKY_TEXT_INDEXOF_OPERATOR_LAST}",
182
+ "LAST"
183
+ ]
184
+ ]
185
+ },
186
+ {
187
+ "type": "input_value",
188
+ "name": "FIND",
189
+ "check": "String"
190
+ }
191
+ ],
192
+ "output": "Number",
193
+ "style": "text_blocks",
194
+ "helpUrl": "%{BKY_TEXT_INDEXOF_HELPURL}",
195
+ "inputsInline": true,
196
+ "extensions": [
197
+ "text_indexOf_tooltip"
198
+ ]
199
+ },
200
+ {
201
+ "type": "text_charAt",
202
+ "message0": "%{BKY_TEXT_CHARAT_TITLE}", // "in text %1 %2"
203
+ "args0": [
204
+ {
205
+ "type":"input_value",
206
+ "name": "VALUE",
207
+ "check": "String"
208
+ },
209
+ {
210
+ "type": "field_dropdown",
211
+ "name": "WHERE",
212
+ "options": [
213
+ ["%{BKY_TEXT_CHARAT_FROM_START}", "FROM_START"],
214
+ ["%{BKY_TEXT_CHARAT_FROM_END}", "FROM_END"],
215
+ ["%{BKY_TEXT_CHARAT_FIRST}", "FIRST"],
216
+ ["%{BKY_TEXT_CHARAT_LAST}", "LAST"],
217
+ ["%{BKY_TEXT_CHARAT_RANDOM}", "RANDOM"]
218
+ ]
219
+ }
220
+ ],
221
+ "output": "String",
222
+ "style": "text_blocks",
223
+ "helpUrl": "%{BKY_TEXT_CHARAT_HELPURL}",
224
+ "inputsInline": true,
225
+ "mutator": "text_charAt_mutator"
226
+ }
227
+ ]); // END JSON EXTRACT (Do not delete this comment.)
228
+
229
+ Blockly.Blocks['text_getSubstring'] = {
230
+ /**
231
+ * Block for getting substring.
232
+ * @this {Blockly.Block}
233
+ */
234
+ init: function() {
235
+ this['WHERE_OPTIONS_1'] = [
236
+ [Blockly.Msg['TEXT_GET_SUBSTRING_START_FROM_START'], 'FROM_START'],
237
+ [Blockly.Msg['TEXT_GET_SUBSTRING_START_FROM_END'], 'FROM_END'],
238
+ [Blockly.Msg['TEXT_GET_SUBSTRING_START_FIRST'], 'FIRST']
239
+ ];
240
+ this['WHERE_OPTIONS_2'] = [
241
+ [Blockly.Msg['TEXT_GET_SUBSTRING_END_FROM_START'], 'FROM_START'],
242
+ [Blockly.Msg['TEXT_GET_SUBSTRING_END_FROM_END'], 'FROM_END'],
243
+ [Blockly.Msg['TEXT_GET_SUBSTRING_END_LAST'], 'LAST']
244
+ ];
245
+ this.setHelpUrl(Blockly.Msg['TEXT_GET_SUBSTRING_HELPURL']);
246
+ this.setStyle('text_blocks');
247
+ this.appendValueInput('STRING')
248
+ .setCheck('String')
249
+ .appendField(Blockly.Msg['TEXT_GET_SUBSTRING_INPUT_IN_TEXT']);
250
+ this.appendDummyInput('AT1');
251
+ this.appendDummyInput('AT2');
252
+ if (Blockly.Msg['TEXT_GET_SUBSTRING_TAIL']) {
253
+ this.appendDummyInput('TAIL')
254
+ .appendField(Blockly.Msg['TEXT_GET_SUBSTRING_TAIL']);
255
+ }
256
+ this.setInputsInline(true);
257
+ this.setOutput(true, 'String');
258
+ this.updateAt_(1, true);
259
+ this.updateAt_(2, true);
260
+ this.setTooltip(Blockly.Msg['TEXT_GET_SUBSTRING_TOOLTIP']);
261
+ },
262
+ /**
263
+ * Create XML to represent whether there are 'AT' inputs.
264
+ * @return {!Element} XML storage element.
265
+ * @this {Blockly.Block}
266
+ */
267
+ mutationToDom: function() {
268
+ var container = Blockly.utils.xml.createElement('mutation');
269
+ var isAt1 = this.getInput('AT1').type == Blockly.INPUT_VALUE;
270
+ container.setAttribute('at1', isAt1);
271
+ var isAt2 = this.getInput('AT2').type == Blockly.INPUT_VALUE;
272
+ container.setAttribute('at2', isAt2);
273
+ return container;
274
+ },
275
+ /**
276
+ * Parse XML to restore the 'AT' inputs.
277
+ * @param {!Element} xmlElement XML storage element.
278
+ * @this {Blockly.Block}
279
+ */
280
+ domToMutation: function(xmlElement) {
281
+ var isAt1 = (xmlElement.getAttribute('at1') == 'true');
282
+ var isAt2 = (xmlElement.getAttribute('at2') == 'true');
283
+ this.updateAt_(1, isAt1);
284
+ this.updateAt_(2, isAt2);
285
+ },
286
+ /**
287
+ * Create or delete an input for a numeric index.
288
+ * This block has two such inputs, independent of each other.
289
+ * @param {number} n Specify first or second input (1 or 2).
290
+ * @param {boolean} isAt True if the input should exist.
291
+ * @private
292
+ * @this {Blockly.Block}
293
+ */
294
+ updateAt_: function(n, isAt) {
295
+ // Create or delete an input for the numeric index.
296
+ // Destroy old 'AT' and 'ORDINAL' inputs.
297
+ this.removeInput('AT' + n);
298
+ this.removeInput('ORDINAL' + n, true);
299
+ // Create either a value 'AT' input or a dummy input.
300
+ if (isAt) {
301
+ this.appendValueInput('AT' + n).setCheck('Number');
302
+ if (Blockly.Msg['ORDINAL_NUMBER_SUFFIX']) {
303
+ this.appendDummyInput('ORDINAL' + n)
304
+ .appendField(Blockly.Msg['ORDINAL_NUMBER_SUFFIX']);
305
+ }
306
+ } else {
307
+ this.appendDummyInput('AT' + n);
308
+ }
309
+ // Move tail, if present, to end of block.
310
+ if (n == 2 && Blockly.Msg['TEXT_GET_SUBSTRING_TAIL']) {
311
+ this.removeInput('TAIL', true);
312
+ this.appendDummyInput('TAIL')
313
+ .appendField(Blockly.Msg['TEXT_GET_SUBSTRING_TAIL']);
314
+ }
315
+ var menu = new Blockly.FieldDropdown(this['WHERE_OPTIONS_' + n],
316
+ function(value) {
317
+ var newAt = (value == 'FROM_START') || (value == 'FROM_END');
318
+ // The 'isAt' variable is available due to this function being a
319
+ // closure.
320
+ if (newAt != isAt) {
321
+ var block = this.getSourceBlock();
322
+ block.updateAt_(n, newAt);
323
+ // This menu has been destroyed and replaced.
324
+ // Update the replacement.
325
+ block.setFieldValue(value, 'WHERE' + n);
326
+ return null;
327
+ }
328
+ return undefined;
329
+ });
330
+
331
+ this.getInput('AT' + n)
332
+ .appendField(menu, 'WHERE' + n);
333
+ if (n == 1) {
334
+ this.moveInputBefore('AT1', 'AT2');
335
+ if (this.getInput('ORDINAL1')) {
336
+ this.moveInputBefore('ORDINAL1', 'AT2');
337
+ }
338
+ }
339
+ }
340
+ };
341
+
342
+ Blockly.Blocks['text_changeCase'] = {
343
+ /**
344
+ * Block for changing capitalization.
345
+ * @this {Blockly.Block}
346
+ */
347
+ init: function() {
348
+ var OPERATORS = [
349
+ [Blockly.Msg['TEXT_CHANGECASE_OPERATOR_UPPERCASE'], 'UPPERCASE'],
350
+ [Blockly.Msg['TEXT_CHANGECASE_OPERATOR_LOWERCASE'], 'LOWERCASE'],
351
+ [Blockly.Msg['TEXT_CHANGECASE_OPERATOR_TITLECASE'], 'TITLECASE']
352
+ ];
353
+ this.setHelpUrl(Blockly.Msg['TEXT_CHANGECASE_HELPURL']);
354
+ this.setStyle('text_blocks');
355
+ this.appendValueInput('TEXT')
356
+ .setCheck('String')
357
+ .appendField(new Blockly.FieldDropdown(OPERATORS), 'CASE');
358
+ this.setOutput(true, 'String');
359
+ this.setTooltip(Blockly.Msg['TEXT_CHANGECASE_TOOLTIP']);
360
+ }
361
+ };
362
+
363
+ Blockly.Blocks['text_trim'] = {
364
+ /**
365
+ * Block for trimming spaces.
366
+ * @this {Blockly.Block}
367
+ */
368
+ init: function() {
369
+ var OPERATORS = [
370
+ [Blockly.Msg['TEXT_TRIM_OPERATOR_BOTH'], 'BOTH'],
371
+ [Blockly.Msg['TEXT_TRIM_OPERATOR_LEFT'], 'LEFT'],
372
+ [Blockly.Msg['TEXT_TRIM_OPERATOR_RIGHT'], 'RIGHT']
373
+ ];
374
+ this.setHelpUrl(Blockly.Msg['TEXT_TRIM_HELPURL']);
375
+ this.setStyle('text_blocks');
376
+ this.appendValueInput('TEXT')
377
+ .setCheck('String')
378
+ .appendField(new Blockly.FieldDropdown(OPERATORS), 'MODE');
379
+ this.setOutput(true, 'String');
380
+ this.setTooltip(Blockly.Msg['TEXT_TRIM_TOOLTIP']);
381
+ }
382
+ };
383
+
384
+ Blockly.Blocks['text_print'] = {
385
+ /**
386
+ * Block for print statement.
387
+ * @this {Blockly.Block}
388
+ */
389
+ init: function() {
390
+ this.jsonInit({
391
+ "message0": Blockly.Msg['TEXT_PRINT_TITLE'],
392
+ "args0": [
393
+ {
394
+ "type": "input_value",
395
+ "name": "TEXT"
396
+ }
397
+ ],
398
+ "previousStatement": null,
399
+ "nextStatement": null,
400
+ "style": "text_blocks",
401
+ "tooltip": Blockly.Msg['TEXT_PRINT_TOOLTIP'],
402
+ "helpUrl": Blockly.Msg['TEXT_PRINT_HELPURL']
403
+ });
404
+ }
405
+ };
406
+
407
+ Blockly.Blocks['text_prompt_ext'] = {
408
+ /**
409
+ * Block for prompt function (external message).
410
+ * @this {Blockly.Block}
411
+ */
412
+ init: function() {
413
+ var TYPES = [
414
+ [Blockly.Msg['TEXT_PROMPT_TYPE_TEXT'], 'TEXT'],
415
+ [Blockly.Msg['TEXT_PROMPT_TYPE_NUMBER'], 'NUMBER']
416
+ ];
417
+ this.setHelpUrl(Blockly.Msg['TEXT_PROMPT_HELPURL']);
418
+ this.setStyle('text_blocks');
419
+ // Assign 'this' to a variable for use in the closures below.
420
+ var thisBlock = this;
421
+ var dropdown = new Blockly.FieldDropdown(TYPES, function(newOp) {
422
+ thisBlock.updateType_(newOp);
423
+ });
424
+ this.appendValueInput('TEXT')
425
+ .appendField(dropdown, 'TYPE');
426
+ this.setOutput(true, 'String');
427
+ this.setTooltip(function() {
428
+ return (thisBlock.getFieldValue('TYPE') == 'TEXT') ?
429
+ Blockly.Msg['TEXT_PROMPT_TOOLTIP_TEXT'] :
430
+ Blockly.Msg['TEXT_PROMPT_TOOLTIP_NUMBER'];
431
+ });
432
+ },
433
+ /**
434
+ * Modify this block to have the correct output type.
435
+ * @param {string} newOp Either 'TEXT' or 'NUMBER'.
436
+ * @private
437
+ * @this {Blockly.Block}
438
+ */
439
+ updateType_: function(newOp) {
440
+ this.outputConnection.setCheck(newOp == 'NUMBER' ? 'Number' : 'String');
441
+ },
442
+ /**
443
+ * Create XML to represent the output type.
444
+ * @return {!Element} XML storage element.
445
+ * @this {Blockly.Block}
446
+ */
447
+ mutationToDom: function() {
448
+ var container = Blockly.utils.xml.createElement('mutation');
449
+ container.setAttribute('type', this.getFieldValue('TYPE'));
450
+ return container;
451
+ },
452
+ /**
453
+ * Parse XML to restore the output type.
454
+ * @param {!Element} xmlElement XML storage element.
455
+ * @this {Blockly.Block}
456
+ */
457
+ domToMutation: function(xmlElement) {
458
+ this.updateType_(xmlElement.getAttribute('type'));
459
+ }
460
+ };
461
+
462
+ Blockly.Blocks['text_prompt'] = {
463
+ /**
464
+ * Block for prompt function (internal message).
465
+ * The 'text_prompt_ext' block is preferred as it is more flexible.
466
+ * @this {Blockly.Block}
467
+ */
468
+ init: function() {
469
+ this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);
470
+ var TYPES = [
471
+ [Blockly.Msg['TEXT_PROMPT_TYPE_TEXT'], 'TEXT'],
472
+ [Blockly.Msg['TEXT_PROMPT_TYPE_NUMBER'], 'NUMBER']
473
+ ];
474
+
475
+ // Assign 'this' to a variable for use in the closures below.
476
+ var thisBlock = this;
477
+ this.setHelpUrl(Blockly.Msg['TEXT_PROMPT_HELPURL']);
478
+ this.setStyle('text_blocks');
479
+ var dropdown = new Blockly.FieldDropdown(TYPES, function(newOp) {
480
+ thisBlock.updateType_(newOp);
481
+ });
482
+ this.appendDummyInput()
483
+ .appendField(dropdown, 'TYPE')
484
+ .appendField(this.newQuote_(true))
485
+ .appendField(new Blockly.FieldTextInput(''), 'TEXT')
486
+ .appendField(this.newQuote_(false));
487
+ this.setOutput(true, 'String');
488
+ this.setTooltip(function() {
489
+ return (thisBlock.getFieldValue('TYPE') == 'TEXT') ?
490
+ Blockly.Msg['TEXT_PROMPT_TOOLTIP_TEXT'] :
491
+ Blockly.Msg['TEXT_PROMPT_TOOLTIP_NUMBER'];
492
+ });
493
+ },
494
+ updateType_: Blockly.Blocks['text_prompt_ext'].updateType_,
495
+ mutationToDom: Blockly.Blocks['text_prompt_ext'].mutationToDom,
496
+ domToMutation: Blockly.Blocks['text_prompt_ext'].domToMutation
497
+ };
498
+
499
+ Blockly.Blocks['text_count'] = {
500
+ /**
501
+ * Block for counting how many times one string appears within another string.
502
+ * @this {Blockly.Block}
503
+ */
504
+ init: function() {
505
+ this.jsonInit({
506
+ "message0": Blockly.Msg['TEXT_COUNT_MESSAGE0'],
507
+ "args0": [
508
+ {
509
+ "type": "input_value",
510
+ "name": "SUB",
511
+ "check": "String"
512
+ },
513
+ {
514
+ "type": "input_value",
515
+ "name": "TEXT",
516
+ "check": "String"
517
+ }
518
+ ],
519
+ "output": "Number",
520
+ "inputsInline": true,
521
+ "style": "text_blocks",
522
+ "tooltip": Blockly.Msg['TEXT_COUNT_TOOLTIP'],
523
+ "helpUrl": Blockly.Msg['TEXT_COUNT_HELPURL']
524
+ });
525
+ }
526
+ };
527
+
528
+ Blockly.Blocks['text_replace'] = {
529
+ /**
530
+ * Block for replacing one string with another in the text.
531
+ * @this {Blockly.Block}
532
+ */
533
+ init: function() {
534
+ this.jsonInit({
535
+ "message0": Blockly.Msg['TEXT_REPLACE_MESSAGE0'],
536
+ "args0": [
537
+ {
538
+ "type": "input_value",
539
+ "name": "FROM",
540
+ "check": "String"
541
+ },
542
+ {
543
+ "type": "input_value",
544
+ "name": "TO",
545
+ "check": "String"
546
+ },
547
+ {
548
+ "type": "input_value",
549
+ "name": "TEXT",
550
+ "check": "String"
551
+ }
552
+ ],
553
+ "output": "String",
554
+ "inputsInline": true,
555
+ "style": "text_blocks",
556
+ "tooltip": Blockly.Msg['TEXT_REPLACE_TOOLTIP'],
557
+ "helpUrl": Blockly.Msg['TEXT_REPLACE_HELPURL']
558
+ });
559
+ }
560
+ };
561
+
562
+ Blockly.Blocks['text_reverse'] = {
563
+ /**
564
+ * Block for reversing a string.
565
+ * @this {Blockly.Block}
566
+ */
567
+ init: function() {
568
+ this.jsonInit({
569
+ "message0": Blockly.Msg['TEXT_REVERSE_MESSAGE0'],
570
+ "args0": [
571
+ {
572
+ "type": "input_value",
573
+ "name": "TEXT",
574
+ "check": "String"
575
+ }
576
+ ],
577
+ "output": "String",
578
+ "inputsInline": true,
579
+ "style": "text_blocks",
580
+ "tooltip": Blockly.Msg['TEXT_REVERSE_TOOLTIP'],
581
+ "helpUrl": Blockly.Msg['TEXT_REVERSE_HELPURL']
582
+ });
583
+ }
584
+ };
585
+
586
+ /**
587
+ *
588
+ * @mixin
589
+ * @package
590
+ * @readonly
591
+ */
592
+ Blockly.Constants.Text.QUOTE_IMAGE_MIXIN = {
593
+ /**
594
+ * Image data URI of an LTR opening double quote (same as RTL closing double quote).
595
+ * @readonly
596
+ */
597
+ QUOTE_IMAGE_LEFT_DATAURI:
598
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAA' +
599
+ 'n0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY' +
600
+ '1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1' +
601
+ 'HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMf' +
602
+ 'z9AylsaRRgGzvZAAAAAElFTkSuQmCC',
603
+ /**
604
+ * Image data URI of an LTR closing double quote (same as RTL opening double quote).
605
+ * @readonly
606
+ */
607
+ QUOTE_IMAGE_RIGHT_DATAURI:
608
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAA' +
609
+ 'qUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhg' +
610
+ 'gONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvB' +
611
+ 'O3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5Aos' +
612
+ 'lLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==',
613
+ /**
614
+ * Pixel width of QUOTE_IMAGE_LEFT_DATAURI and QUOTE_IMAGE_RIGHT_DATAURI.
615
+ * @readonly
616
+ */
617
+ QUOTE_IMAGE_WIDTH: 12,
618
+ /**
619
+ * Pixel height of QUOTE_IMAGE_LEFT_DATAURI and QUOTE_IMAGE_RIGHT_DATAURI.
620
+ * @readonly
621
+ */
622
+ QUOTE_IMAGE_HEIGHT: 12,
623
+
624
+ /**
625
+ * Inserts appropriate quote images before and after the named field.
626
+ * @param {string} fieldName The name of the field to wrap with quotes.
627
+ * @this {Blockly.Block}
628
+ */
629
+ quoteField_: function(fieldName) {
630
+ for (var i = 0, input; (input = this.inputList[i]); i++) {
631
+ for (var j = 0, field; (field = input.fieldRow[j]); j++) {
632
+ if (fieldName == field.name) {
633
+ input.insertFieldAt(j, this.newQuote_(true));
634
+ input.insertFieldAt(j + 2, this.newQuote_(false));
635
+ return;
636
+ }
637
+ }
638
+ }
639
+ console.warn('field named "' + fieldName + '" not found in ' + this.toDevString());
640
+ },
641
+
642
+ /**
643
+ * A helper function that generates a FieldImage of an opening or
644
+ * closing double quote. The selected quote will be adapted for RTL blocks.
645
+ * @param {boolean} open If the image should be open quote (“ in LTR).
646
+ * Otherwise, a closing quote is used (” in LTR).
647
+ * @return {!Blockly.FieldImage} The new field.
648
+ * @this {Blockly.Block}
649
+ */
650
+ newQuote_: function(open) {
651
+ var isLeft = this.RTL ? !open : open;
652
+ var dataUri = isLeft ?
653
+ this.QUOTE_IMAGE_LEFT_DATAURI :
654
+ this.QUOTE_IMAGE_RIGHT_DATAURI;
655
+ return new Blockly.FieldImage(
656
+ dataUri,
657
+ this.QUOTE_IMAGE_WIDTH,
658
+ this.QUOTE_IMAGE_HEIGHT,
659
+ isLeft ? '\u201C' : '\u201D');
660
+ }
661
+ };
662
+
663
+ /**
664
+ * Wraps TEXT field with images of double quote characters.
665
+ * @this {Blockly.Block}
666
+ */
667
+ Blockly.Constants.Text.TEXT_QUOTES_EXTENSION = function() {
668
+ this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);
669
+ this.quoteField_('TEXT');
670
+ };
671
+
672
+ /**
673
+ * Mixin for mutator functions in the 'text_join_mutator' extension.
674
+ * @mixin
675
+ * @augments Blockly.Block
676
+ * @package
677
+ */
678
+ Blockly.Constants.Text.TEXT_JOIN_MUTATOR_MIXIN = {
679
+ /**
680
+ * Create XML to represent number of text inputs.
681
+ * @return {!Element} XML storage element.
682
+ * @this {Blockly.Block}
683
+ */
684
+ mutationToDom: function() {
685
+ var container = Blockly.utils.xml.createElement('mutation');
686
+ container.setAttribute('items', this.itemCount_);
687
+ return container;
688
+ },
689
+ /**
690
+ * Parse XML to restore the text inputs.
691
+ * @param {!Element} xmlElement XML storage element.
692
+ * @this {Blockly.Block}
693
+ */
694
+ domToMutation: function(xmlElement) {
695
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
696
+ this.updateShape_();
697
+ },
698
+ /**
699
+ * Populate the mutator's dialog with this block's components.
700
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
701
+ * @return {!Blockly.Block} Root block in mutator.
702
+ * @this {Blockly.Block}
703
+ */
704
+ decompose: function(workspace) {
705
+ var containerBlock = workspace.newBlock('text_create_join_container');
706
+ containerBlock.initSvg();
707
+ var connection = containerBlock.getInput('STACK').connection;
708
+ for (var i = 0; i < this.itemCount_; i++) {
709
+ var itemBlock = workspace.newBlock('text_create_join_item');
710
+ itemBlock.initSvg();
711
+ connection.connect(itemBlock.previousConnection);
712
+ connection = itemBlock.nextConnection;
713
+ }
714
+ return containerBlock;
715
+ },
716
+ /**
717
+ * Reconfigure this block based on the mutator dialog's components.
718
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
719
+ * @this {Blockly.Block}
720
+ */
721
+ compose: function(containerBlock) {
722
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
723
+ // Count number of inputs.
724
+ var connections = [];
725
+ while (itemBlock) {
726
+ connections.push(itemBlock.valueConnection_);
727
+ itemBlock = itemBlock.nextConnection &&
728
+ itemBlock.nextConnection.targetBlock();
729
+ }
730
+ // Disconnect any children that don't belong.
731
+ for (var i = 0; i < this.itemCount_; i++) {
732
+ var connection = this.getInput('ADD' + i).connection.targetConnection;
733
+ if (connection && connections.indexOf(connection) == -1) {
734
+ connection.disconnect();
735
+ }
736
+ }
737
+ this.itemCount_ = connections.length;
738
+ this.updateShape_();
739
+ // Reconnect any child blocks.
740
+ for (var i = 0; i < this.itemCount_; i++) {
741
+ Blockly.Mutator.reconnect(connections[i], this, 'ADD' + i);
742
+ }
743
+ },
744
+ /**
745
+ * Store pointers to any connected child blocks.
746
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
747
+ * @this {Blockly.Block}
748
+ */
749
+ saveConnections: function(containerBlock) {
750
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
751
+ var i = 0;
752
+ while (itemBlock) {
753
+ var input = this.getInput('ADD' + i);
754
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
755
+ i++;
756
+ itemBlock = itemBlock.nextConnection &&
757
+ itemBlock.nextConnection.targetBlock();
758
+ }
759
+ },
760
+ /**
761
+ * Modify this block to have the correct number of inputs.
762
+ * @private
763
+ * @this {Blockly.Block}
764
+ */
765
+ updateShape_: function() {
766
+ if (this.itemCount_ && this.getInput('EMPTY')) {
767
+ this.removeInput('EMPTY');
768
+ } else if (!this.itemCount_ && !this.getInput('EMPTY')) {
769
+ this.appendDummyInput('EMPTY')
770
+ .appendField(this.newQuote_(true))
771
+ .appendField(this.newQuote_(false));
772
+ }
773
+ // Add new inputs.
774
+ for (var i = 0; i < this.itemCount_; i++) {
775
+ if (!this.getInput('ADD' + i)) {
776
+ var input = this.appendValueInput('ADD' + i)
777
+ .setAlign(Blockly.ALIGN_RIGHT);
778
+ if (i == 0) {
779
+ input.appendField(Blockly.Msg['TEXT_JOIN_TITLE_CREATEWITH']);
780
+ }
781
+ }
782
+ }
783
+ // Remove deleted inputs.
784
+ while (this.getInput('ADD' + i)) {
785
+ this.removeInput('ADD' + i);
786
+ i++;
787
+ }
788
+ }
789
+ };
790
+
791
+ /**
792
+ * Performs final setup of a text_join block.
793
+ * @this {Blockly.Block}
794
+ */
795
+ Blockly.Constants.Text.TEXT_JOIN_EXTENSION = function() {
796
+ // Add the quote mixin for the itemCount_ = 0 case.
797
+ this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);
798
+ // Initialize the mutator values.
799
+ this.itemCount_ = 2;
800
+ this.updateShape_();
801
+ // Configure the mutator UI.
802
+ this.setMutator(new Blockly.Mutator(['text_create_join_item']));
803
+ };
804
+
805
+ // Update the tooltip of 'text_append' block to reference the variable.
806
+ Blockly.Extensions.register('text_append_tooltip',
807
+ Blockly.Extensions.buildTooltipWithFieldText(
808
+ '%{BKY_TEXT_APPEND_TOOLTIP}', 'VAR'));
809
+
810
+ /**
811
+ * Update the tooltip of 'text_append' block to reference the variable.
812
+ * @this {Blockly.Block}
813
+ */
814
+ Blockly.Constants.Text.TEXT_INDEXOF_TOOLTIP_EXTENSION = function() {
815
+ // Assign 'this' to a variable for use in the tooltip closure below.
816
+ var thisBlock = this;
817
+ this.setTooltip(function() {
818
+ return Blockly.Msg['TEXT_INDEXOF_TOOLTIP'].replace('%1',
819
+ thisBlock.workspace.options.oneBasedIndex ? '0' : '-1');
820
+ });
821
+ };
822
+
823
+ /**
824
+ * Mixin for mutator functions in the 'text_charAt_mutator' extension.
825
+ * @mixin
826
+ * @augments Blockly.Block
827
+ * @package
828
+ */
829
+ Blockly.Constants.Text.TEXT_CHARAT_MUTATOR_MIXIN = {
830
+ /**
831
+ * Create XML to represent whether there is an 'AT' input.
832
+ * @return {!Element} XML storage element.
833
+ * @this {Blockly.Block}
834
+ */
835
+ mutationToDom: function() {
836
+ var container = Blockly.utils.xml.createElement('mutation');
837
+ container.setAttribute('at', !!this.isAt_);
838
+ return container;
839
+ },
840
+ /**
841
+ * Parse XML to restore the 'AT' input.
842
+ * @param {!Element} xmlElement XML storage element.
843
+ * @this {Blockly.Block}
844
+ */
845
+ domToMutation: function(xmlElement) {
846
+ // Note: Until January 2013 this block did not have mutations,
847
+ // so 'at' defaults to true.
848
+ var isAt = (xmlElement.getAttribute('at') != 'false');
849
+ this.updateAt_(isAt);
850
+ },
851
+ /**
852
+ * Create or delete an input for the numeric index.
853
+ * @param {boolean} isAt True if the input should exist.
854
+ * @private
855
+ * @this {Blockly.Block}
856
+ */
857
+ updateAt_: function(isAt) {
858
+ // Destroy old 'AT' and 'ORDINAL' inputs.
859
+ this.removeInput('AT', true);
860
+ this.removeInput('ORDINAL', true);
861
+ // Create either a value 'AT' input or a dummy input.
862
+ if (isAt) {
863
+ this.appendValueInput('AT').setCheck('Number');
864
+ if (Blockly.Msg['ORDINAL_NUMBER_SUFFIX']) {
865
+ this.appendDummyInput('ORDINAL')
866
+ .appendField(Blockly.Msg['ORDINAL_NUMBER_SUFFIX']);
867
+ }
868
+ }
869
+ if (Blockly.Msg['TEXT_CHARAT_TAIL']) {
870
+ this.removeInput('TAIL', true);
871
+ this.appendDummyInput('TAIL')
872
+ .appendField(Blockly.Msg['TEXT_CHARAT_TAIL']);
873
+ }
874
+
875
+ this.isAt_ = isAt;
876
+ }
877
+ };
878
+
879
+ /**
880
+ * Does the initial mutator update of text_charAt and adds the tooltip
881
+ * @this {Blockly.Block}
882
+ */
883
+ Blockly.Constants.Text.TEXT_CHARAT_EXTENSION = function() {
884
+ var dropdown = this.getField('WHERE');
885
+ dropdown.setValidator(function(value) {
886
+ var newAt = (value == 'FROM_START') || (value == 'FROM_END');
887
+ if (newAt != this.isAt_) {
888
+ var block = this.getSourceBlock();
889
+ block.updateAt_(newAt);
890
+ }
891
+ });
892
+ this.updateAt_(true);
893
+ // Assign 'this' to a variable for use in the tooltip closure below.
894
+ var thisBlock = this;
895
+ this.setTooltip(function() {
896
+ var where = thisBlock.getFieldValue('WHERE');
897
+ var tooltip = Blockly.Msg['TEXT_CHARAT_TOOLTIP'];
898
+ if (where == 'FROM_START' || where == 'FROM_END') {
899
+ var msg = (where == 'FROM_START') ?
900
+ Blockly.Msg['LISTS_INDEX_FROM_START_TOOLTIP'] :
901
+ Blockly.Msg['LISTS_INDEX_FROM_END_TOOLTIP'];
902
+ if (msg) {
903
+ tooltip += ' ' + msg.replace('%1',
904
+ thisBlock.workspace.options.oneBasedIndex ? '#1' : '#0');
905
+ }
906
+ }
907
+ return tooltip;
908
+ });
909
+ };
910
+
911
+ Blockly.Extensions.register('text_indexOf_tooltip',
912
+ Blockly.Constants.Text.TEXT_INDEXOF_TOOLTIP_EXTENSION);
913
+
914
+ Blockly.Extensions.register('text_quotes',
915
+ Blockly.Constants.Text.TEXT_QUOTES_EXTENSION);
916
+
917
+ Blockly.Extensions.registerMutator('text_join_mutator',
918
+ Blockly.Constants.Text.TEXT_JOIN_MUTATOR_MIXIN,
919
+ Blockly.Constants.Text.TEXT_JOIN_EXTENSION);
920
+
921
+ Blockly.Extensions.registerMutator('text_charAt_mutator',
922
+ Blockly.Constants.Text.TEXT_CHARAT_MUTATOR_MIXIN,
923
+ Blockly.Constants.Text.TEXT_CHARAT_EXTENSION);