@blockdia/scratch-blocks 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/.nvmrc +1 -0
  2. package/LICENSE +674 -0
  3. package/README.md +57 -0
  4. package/TRADEMARK +1 -0
  5. package/blockly_compressed_horizontal.js +2268 -0
  6. package/blockly_compressed_vertical.js +2296 -0
  7. package/blockly_uncompressed_horizontal.js +1212 -0
  8. package/blockly_uncompressed_vertical.js +1212 -0
  9. package/blocks_common/colour.js +61 -0
  10. package/blocks_common/math.js +159 -0
  11. package/blocks_common/matrix.js +54 -0
  12. package/blocks_common/note.js +58 -0
  13. package/blocks_common/text.js +57 -0
  14. package/blocks_compressed.js +37 -0
  15. package/blocks_compressed_horizontal.js +68 -0
  16. package/blocks_compressed_vertical.js +216 -0
  17. package/blocks_horizontal/control.js +212 -0
  18. package/blocks_horizontal/default_toolbox.js +139 -0
  19. package/blocks_horizontal/event.js +190 -0
  20. package/blocks_horizontal/wedo.js +325 -0
  21. package/blocks_vertical/control.js +532 -0
  22. package/blocks_vertical/data.js +666 -0
  23. package/blocks_vertical/default_toolbox.js +571 -0
  24. package/blocks_vertical/event.js +329 -0
  25. package/blocks_vertical/extensions.js +294 -0
  26. package/blocks_vertical/looks.js +591 -0
  27. package/blocks_vertical/motion.js +587 -0
  28. package/blocks_vertical/operators.js +470 -0
  29. package/blocks_vertical/procedures.js +1051 -0
  30. package/blocks_vertical/sensing.js +555 -0
  31. package/blocks_vertical/sound.js +246 -0
  32. package/blocks_vertical/vertical_extensions.js +289 -0
  33. package/build/gen_blocks.js +1 -0
  34. package/build/test_expect.js +1 -0
  35. package/build/test_input.js +1 -0
  36. package/build.py +647 -0
  37. package/cleanup.sh +101 -0
  38. package/core/block.js +1837 -0
  39. package/core/block_animations.js +107 -0
  40. package/core/block_drag_surface.js +299 -0
  41. package/core/block_dragger.js +424 -0
  42. package/core/block_events.js +531 -0
  43. package/core/block_render_svg_horizontal.js +892 -0
  44. package/core/block_render_svg_vertical.js +1734 -0
  45. package/core/block_svg.js +1355 -0
  46. package/core/blockly.js +620 -0
  47. package/core/blocks.js +37 -0
  48. package/core/bubble.js +664 -0
  49. package/core/bubble_dragger.js +285 -0
  50. package/core/colours.js +177 -0
  51. package/core/comment.js +293 -0
  52. package/core/comment_events.js +539 -0
  53. package/core/connection.js +776 -0
  54. package/core/connection_db.js +300 -0
  55. package/core/constants.js +408 -0
  56. package/core/contextmenu.js +534 -0
  57. package/core/css.js +1354 -0
  58. package/core/data_category.js +490 -0
  59. package/core/dragged_connection_manager.js +260 -0
  60. package/core/dropdowndiv.js +408 -0
  61. package/core/events.js +429 -0
  62. package/core/events_abstract.js +113 -0
  63. package/core/extensions.js +450 -0
  64. package/core/field.js +810 -0
  65. package/core/field_angle.js +410 -0
  66. package/core/field_checkbox.js +133 -0
  67. package/core/field_colour.js +253 -0
  68. package/core/field_colour_slider.js +387 -0
  69. package/core/field_date.js +353 -0
  70. package/core/field_dropdown.js +447 -0
  71. package/core/field_iconmenu.js +309 -0
  72. package/core/field_image.js +200 -0
  73. package/core/field_label.js +136 -0
  74. package/core/field_label_serializable.js +125 -0
  75. package/core/field_matrix.js +566 -0
  76. package/core/field_note.js +850 -0
  77. package/core/field_number.js +366 -0
  78. package/core/field_numberdropdown.js +77 -0
  79. package/core/field_textdropdown.js +164 -0
  80. package/core/field_textinput.js +675 -0
  81. package/core/field_textinput_removable.js +105 -0
  82. package/core/field_variable.js +385 -0
  83. package/core/field_variable_getter.js +185 -0
  84. package/core/field_vertical_separator.js +161 -0
  85. package/core/flyout_base.js +935 -0
  86. package/core/flyout_button.js +324 -0
  87. package/core/flyout_dragger.js +83 -0
  88. package/core/flyout_extension_category_header.js +159 -0
  89. package/core/flyout_horizontal.js +475 -0
  90. package/core/flyout_vertical.js +770 -0
  91. package/core/generator.js +426 -0
  92. package/core/gesture.js +1010 -0
  93. package/core/grid.js +227 -0
  94. package/core/icon.js +205 -0
  95. package/core/inject.js +496 -0
  96. package/core/input.js +285 -0
  97. package/core/insertion_marker_manager.js +678 -0
  98. package/core/intersection_observer.js +102 -0
  99. package/core/msg.js +62 -0
  100. package/core/mutator.js +426 -0
  101. package/core/names.js +198 -0
  102. package/core/options.js +244 -0
  103. package/core/procedures.js +739 -0
  104. package/core/rendered_connection.js +417 -0
  105. package/core/scratch_block_comment.js +646 -0
  106. package/core/scratch_blocks_utils.js +246 -0
  107. package/core/scratch_bubble.js +699 -0
  108. package/core/scratch_events.js +131 -0
  109. package/core/scratch_msgs.js +85 -0
  110. package/core/scrollbar.js +875 -0
  111. package/core/toolbox.js +803 -0
  112. package/core/tooltip.js +337 -0
  113. package/core/touch.js +226 -0
  114. package/core/trashcan.js +343 -0
  115. package/core/ui_events.js +91 -0
  116. package/core/ui_menu_utils.js +68 -0
  117. package/core/utils.js +825 -0
  118. package/core/variable_events.js +259 -0
  119. package/core/variable_map.js +415 -0
  120. package/core/variable_model.js +116 -0
  121. package/core/variables.js +674 -0
  122. package/core/warning.js +199 -0
  123. package/core/widgetdiv.js +344 -0
  124. package/core/workspace.js +673 -0
  125. package/core/workspace_audio.js +170 -0
  126. package/core/workspace_comment.js +426 -0
  127. package/core/workspace_comment_render_svg.js +706 -0
  128. package/core/workspace_comment_svg.js +609 -0
  129. package/core/workspace_drag_surface_svg.js +195 -0
  130. package/core/workspace_dragger.js +132 -0
  131. package/core/workspace_svg.js +2382 -0
  132. package/core/xml.js +930 -0
  133. package/core/zoom_controls.js +301 -0
  134. package/dist/horizontal.js +222 -0
  135. package/dist/vertical.js +222 -0
  136. package/dist/web/horizontal.js +232 -0
  137. package/dist/web/vertical.js +232 -0
  138. package/i18n/common.py +234 -0
  139. package/i18n/create_messages.py +162 -0
  140. package/i18n/create_scratch_msgs.js +69 -0
  141. package/i18n/dedup_json.py +73 -0
  142. package/i18n/js_to_json.js +46 -0
  143. package/i18n/js_to_json.py +136 -0
  144. package/i18n/json_to_js.js +52 -0
  145. package/i18n/json_to_js.py +185 -0
  146. package/i18n/sync_tx_translations.js +111 -0
  147. package/i18n/test_scratch_msgs.js +87 -0
  148. package/i18n/tests.py +47 -0
  149. package/i18n/xliff_to_json.py +232 -0
  150. package/local_build.sh +70 -0
  151. package/media/click.mp3 +0 -0
  152. package/media/click.ogg +0 -0
  153. package/media/click.wav +0 -0
  154. package/media/comment-arrow-down.svg +10 -0
  155. package/media/comment-arrow-up.svg +10 -0
  156. package/media/delete-x.svg +10 -0
  157. package/media/delete.mp3 +0 -0
  158. package/media/delete.ogg +0 -0
  159. package/media/delete.wav +0 -0
  160. package/media/dropdown-arrow-dark.svg +1 -0
  161. package/media/dropdown-arrow.svg +1 -0
  162. package/media/extensions/microbit-block-icon.svg +130 -0
  163. package/media/extensions/music-block-icon.svg +17 -0
  164. package/media/extensions/pen-block-icon.svg +19 -0
  165. package/media/extensions/wedo2-block-icon.svg +36 -0
  166. package/media/eyedropper.svg +22 -0
  167. package/media/green-flag.svg +17 -0
  168. package/media/handclosed.cur +0 -0
  169. package/media/handdelete.cur +0 -0
  170. package/media/handopen.cur +0 -0
  171. package/media/icons/arrow.svg +12 -0
  172. package/media/icons/arrow_button.svg +1 -0
  173. package/media/icons/control_forever.svg +1 -0
  174. package/media/icons/control_repeat.svg +1 -0
  175. package/media/icons/control_stop.svg +1 -0
  176. package/media/icons/control_wait.svg +1 -0
  177. package/media/icons/event_broadcast_blue.svg +1 -0
  178. package/media/icons/event_broadcast_coral.svg +1 -0
  179. package/media/icons/event_broadcast_green.svg +1 -0
  180. package/media/icons/event_broadcast_magenta.svg +1 -0
  181. package/media/icons/event_broadcast_orange.svg +1 -0
  182. package/media/icons/event_broadcast_purple.svg +1 -0
  183. package/media/icons/event_when-broadcast-received_blue.svg +1 -0
  184. package/media/icons/event_when-broadcast-received_coral.svg +1 -0
  185. package/media/icons/event_when-broadcast-received_green.svg +1 -0
  186. package/media/icons/event_when-broadcast-received_magenta.svg +1 -0
  187. package/media/icons/event_when-broadcast-received_orange.svg +1 -0
  188. package/media/icons/event_when-broadcast-received_purple.svg +1 -0
  189. package/media/icons/event_whenflagclicked.svg +1 -0
  190. package/media/icons/remove.svg +19 -0
  191. package/media/icons/set-led_blue.svg +1 -0
  192. package/media/icons/set-led_coral.svg +1 -0
  193. package/media/icons/set-led_green.svg +1 -0
  194. package/media/icons/set-led_magenta.svg +1 -0
  195. package/media/icons/set-led_mystery.svg +1 -0
  196. package/media/icons/set-led_orange.svg +1 -0
  197. package/media/icons/set-led_purple.svg +1 -0
  198. package/media/icons/set-led_white.svg +1 -0
  199. package/media/icons/set-led_yellow.svg +1 -0
  200. package/media/icons/wedo_motor-clockwise.svg +1 -0
  201. package/media/icons/wedo_motor-counterclockwise.svg +1 -0
  202. package/media/icons/wedo_motor-speed_fast.svg +1 -0
  203. package/media/icons/wedo_motor-speed_med.svg +1 -0
  204. package/media/icons/wedo_motor-speed_slow.svg +1 -0
  205. package/media/icons/wedo_when-distance_close.svg +1 -0
  206. package/media/icons/wedo_when-tilt-backward.svg +1 -0
  207. package/media/icons/wedo_when-tilt-forward.svg +1 -0
  208. package/media/icons/wedo_when-tilt-left.svg +1 -0
  209. package/media/icons/wedo_when-tilt-right.svg +1 -0
  210. package/media/icons/wedo_when-tilt.svg +1 -0
  211. package/media/repeat.svg +18 -0
  212. package/media/rotate-left.svg +1 -0
  213. package/media/rotate-right.svg +1 -0
  214. package/media/sprites.png +0 -0
  215. package/media/status-not-ready.svg +13 -0
  216. package/media/status-ready.svg +13 -0
  217. package/media/zoom-in.svg +1 -0
  218. package/media/zoom-out.svg +1 -0
  219. package/media/zoom-reset.svg +1 -0
  220. package/msg/js/en.js +290 -0
  221. package/msg/json/en.json +285 -0
  222. package/msg/messages.js +359 -0
  223. package/msg/scratch_msgs.js +22969 -0
  224. package/package.json +60 -0
  225. package/pull_from_blockly.sh +151 -0
  226. package/renovate.json5 +15 -0
  227. package/shim/blockly_compressed_horizontal-blocks_compressed.js +1 -0
  228. package/shim/blockly_compressed_horizontal.Blockly.js +1 -0
  229. package/shim/blockly_compressed_horizontal.goog.js +1 -0
  230. package/shim/blockly_compressed_horizontal.js +1 -0
  231. package/shim/blockly_compressed_vertical-blocks_compressed.js +1 -0
  232. package/shim/blockly_compressed_vertical.Blockly.js +1 -0
  233. package/shim/blockly_compressed_vertical.goog.js +1 -0
  234. package/shim/blockly_compressed_vertical.js +1 -0
  235. package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +1 -0
  236. package/shim/blocks_compressed_horizontal.js +1 -0
  237. package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +1 -0
  238. package/shim/blocks_compressed_vertical.js +1 -0
  239. package/shim/gh-pages.js +1 -0
  240. package/shim/horizontal.js +1 -0
  241. package/shim/index.js +17 -0
  242. package/shim/vertical.js +1 -0
  243. package/universal-python.js +82 -0
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@blockdia/scratch-blocks",
3
+ "version": "0.1.0",
4
+ "description": "Blockdia distribution of TurboWarp Scratch Blocks",
5
+ "author": "Massachusetts Institute of Technology",
6
+ "license": "GPL-3.0",
7
+ "homepage": "https://github.com/blockdia/scratch-blocks#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/blockdia/scratch-blocks.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/blockdia/scratch-blocks/issues"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public",
17
+ "registry": "https://registry.npmjs.org/"
18
+ },
19
+ "main": "./dist/vertical.js",
20
+ "browser": "./shim/vertical.js",
21
+ "scripts": {
22
+ "deploy": "rimraf gh-pages/closure-library/scripts/ci/CloseAdobeDialog.exe && gh-pages -t -d gh-pages -m \"Build for $(git log --pretty=format:%H -n1) [skip ci]\"",
23
+ "build": "node universal-python.js build.py && webpack",
24
+ "prepack": "npm run build",
25
+ "test:unit": "node tests/jsunit/test_runner.js",
26
+ "test:lint": "eslint .",
27
+ "test:messages": "npm run translate && node i18n/test_scratch_msgs.js",
28
+ "test": "npm run test:messages && npm run test:unit",
29
+ "version": "json -f package.json -I -e \"this.repository.sha = '$(git log -n1 --pretty=format:%H)'\"",
30
+ "translate": "node i18n/js_to_json.js && node i18n/json_to_js.js",
31
+ "translate:sync:src": "tx-push-src scratch-editor blocks msg/json/en.json",
32
+ "translate:sync:translations": "node i18n/sync_tx_translations.js",
33
+ "translate:update": "npm run translate:sync:src && npm run translate:sync:translations"
34
+ },
35
+ "dependencies": {
36
+ "exports-loader": "0.7.0",
37
+ "imports-loader": "0.8.0"
38
+ },
39
+ "devDependencies": {
40
+ "async": "2.6.4",
41
+ "chromedriver": "^118.0.1",
42
+ "copy-webpack-plugin": "4.6.0",
43
+ "eslint": "4.19.1",
44
+ "event-stream": "3.3.5",
45
+ "gh-pages": "0.12.0",
46
+ "glob": "7.2.3",
47
+ "google-closure-compiler": "20180402.0.0",
48
+ "google-closure-library": "20190301.0.0",
49
+ "graceful-fs": "4.2.11",
50
+ "json": "9.0.6",
51
+ "rimraf": "2.7.1",
52
+ "scratch-l10n": "3.16.20231013034330",
53
+ "selenium-webdriver": "4.14.0",
54
+ "transifex": "1.6.6",
55
+ "uglifyjs-webpack-plugin": "1.3.0",
56
+ "webpack": "4.47.0",
57
+ "webpack-cli": "3.3.12",
58
+ "which": "^4.0.0"
59
+ }
60
+ }
@@ -0,0 +1,151 @@
1
+ #!/bin/bash
2
+
3
+ # Pull from Blockly into Scratch Blocks and do basic cleanup.
4
+ # Rachel Fenichel (fenichel@google.com)
5
+
6
+ BOLD='\e[1m'
7
+ NOBOLD='\e[21m'
8
+
9
+ # Formatting helper.
10
+ empty_lines() { printf '\n\n'; }
11
+ bold_echo() {
12
+ echo -e "${BOLD}$1${NOBOLD}"
13
+ }
14
+
15
+ stop_on_fail() {
16
+ # Fail if any command fails.
17
+ set -e
18
+ # Even if you're piping the output.
19
+ set -o pipefail
20
+ }
21
+
22
+ # Undo the effects of start_failing.
23
+ continue_on_fail() {
24
+ set +e
25
+ set +o pipefail
26
+ }
27
+
28
+ # Prompt for y/n and put the result in $prompt_result
29
+ # The first argument specifies the text to use in the prompt.
30
+ # The second argument specifies which value to use if we're skipping prompts.
31
+ prompt() {
32
+ if [ $with_prompts ]
33
+ then
34
+ if [ $2 = true ]
35
+ then
36
+ paren_text="(Y/n)"
37
+ else
38
+ paren_text="(y/N)"
39
+ fi
40
+ # Prompt the user and retry if they try any funny business.
41
+ while true; do
42
+ read -p "$1 $paren_text > " yn
43
+ case $yn in
44
+ [Yy]* ) prompt_result=true; break;;
45
+ [Nn]* ) prompt_result=false; break;;
46
+ * ) echo "Please answer yes or no.";;
47
+ esac
48
+ done
49
+ else
50
+ # Running without prompts. Use the default value.
51
+ prompt_result=$2;
52
+ fi
53
+ }
54
+
55
+
56
+ # Ask the user for confirmation, then pull from Blockly's develop branch.
57
+ # The default is to do the pull.
58
+ pull_from_develop_fn() {
59
+ empty_lines
60
+ prompt "Do you want to pull from develop?" true
61
+ if [ $prompt_result = false ]
62
+ then
63
+ bold_echo "You don't want to pull from develop. Why are you running this script?"
64
+ exit
65
+ fi
66
+
67
+ bold_echo "Pulling from Blockly's develop branch"
68
+ sleep .5
69
+ # This pull will likely fail with merge conflicts, but that's okay.
70
+ # However, this means that we won't fail on errors other than merge conflicts.
71
+ continue_on_fail
72
+ git pull https://github.com/google/blockly.git develop
73
+ stop_on_fail
74
+ }
75
+
76
+ # Ask the user for confirmation, then run cleanup.
77
+ # The default is to run cleanup.
78
+ run_cleanup_fn() {
79
+ empty_lines
80
+ prompt "Ready to run cleanup.sh. Continue?" true
81
+ if [ $prompt_result = false ]
82
+ then
83
+ bold_echo "Skipping cleanup.sh"
84
+ prompt_for_merge_abort
85
+ empty_lines
86
+ bold_echo "Done"
87
+ exit
88
+ fi
89
+
90
+ bold_echo "Running cleanup.sh"
91
+ sleep .5
92
+ # Cleanup.sh resolves common conflicts.
93
+ ./cleanup.sh
94
+ }
95
+
96
+ # Ask the user for confirmation, then possibly abort the merge.
97
+ # The default is to *not* abort the merge.
98
+ # Used to clean up the repo instead of leaving it in a bad state.
99
+ prompt_for_merge_abort() {
100
+ empty_lines
101
+ prompt "Do you want to abort this merge?" false
102
+ if [ $prompt_result = false ]
103
+ then
104
+ bold_echo "Continuing with merge..."
105
+ else
106
+ bold_echo "Running git merge --abort"
107
+ git merge --abort
108
+ display_status_fn
109
+ bold_echo "Done"
110
+ exit
111
+ fi
112
+ }
113
+
114
+ # Ask the user for confirmation, then show the current repo status.
115
+ # The default to to show status.
116
+ display_status_fn() {
117
+ empty_lines
118
+ prompt "Do you want to display the current status?" true
119
+ if [ $prompt_result = true ]
120
+ then
121
+ # Tell the user the current state.
122
+ bold_echo "Current status"
123
+ sleep .5
124
+ git status
125
+ else
126
+ bold_echo "Skipping status display."
127
+ fi
128
+ }
129
+
130
+ # Give the user one more chance to abort the merge, then tell them what their
131
+ # next steps should be.
132
+ finish_fn() {
133
+ prompt_for_merge_abort
134
+ bold_echo "Done. You may need to manually resolve conflicts."
135
+ # Helpful tips about what to do next.
136
+ empty_lines
137
+ sleep .5
138
+ echo "Fix conflicts and run 'git commit'."
139
+ echo "Use 'git add <file>' to mark resolution."
140
+ echo "Use 'git merge --abort' to abort this merge."
141
+ }
142
+
143
+ # Check whether we're running with prompts. If unset, we'll skip all prompts.
144
+ with_prompts=$1
145
+
146
+ # Here we go!
147
+ stop_on_fail
148
+ pull_from_develop_fn
149
+ run_cleanup_fn
150
+ display_status_fn
151
+ finish_fn
package/renovate.json5 ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+
4
+ "extends": [
5
+ "github>LLK/scratch-renovate-config"
6
+ ],
7
+
8
+ "packageRules": [
9
+ // Closure compiler & library releases are always "major" so separating them leads to PR SPAM
10
+ {
11
+ "matchPackageNames": ["google-closure-compiler", "google-closure-library"],
12
+ "separateMultipleMajor": false
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?Blockly=./shim/blockly_compressed_horizontal.Blockly!exports-loader?Blockly!../blocks_compressed');
@@ -0,0 +1 @@
1
+ module.exports = require('./blockly_compressed_horizontal').Blockly;
@@ -0,0 +1 @@
1
+ module.exports = require('./blockly_compressed_horizontal').goog;
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?this=>window!exports-loader?Blockly&goog!../blockly_compressed_horizontal');
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?Blockly=./shim/blockly_compressed_vertical.Blockly!exports-loader?Blockly!../blocks_compressed');
@@ -0,0 +1 @@
1
+ module.exports = require('./blockly_compressed_vertical').Blockly;
@@ -0,0 +1 @@
1
+ module.exports = require('./blockly_compressed_vertical').goog;
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?this=>window!exports-loader?Blockly&goog!../blockly_compressed_vertical');
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?Blockly=../shim/blocks_compressed_horizontal,goog=../shim/blockly_compressed_horizontal.goog!exports-loader?Blockly!../msg/messages');
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?Blockly=./shim/blockly_compressed_horizontal-blocks_compressed!exports-loader?Blockly!../blocks_compressed_horizontal');
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?Blockly=../shim/blocks_compressed_vertical,goog=../shim/blockly_compressed_vertical.goog!exports-loader?Blockly!../msg/messages');
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?goog=./shim/blockly_compressed_vertical.goog,Blockly=./shim/blockly_compressed_vertical-blocks_compressed!exports-loader?Blockly!../blocks_compressed_vertical');
@@ -0,0 +1 @@
1
+ // intentionally left empty
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?Blockly=../shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages,goog=../shim/blockly_compressed_horizontal.goog!exports-loader?Blockly!../msg/scratch_msgs');
package/shim/index.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Webpack shim module
3
+ *
4
+ * Uses webpack imports-loader and exports-loader to provide the horizontal and
5
+ * vertical flavors of Blockly. All of the other files in this directory shim
6
+ * Blockly and goog between blockly_compressed_* and blocks_compressed*.
7
+ *
8
+ * Horizontal and Vertical export Blockly out of
9
+ * blockly_compressed_[horizontal, vertical] +
10
+ * blocks_compressed +
11
+ * blocks_compressed_[horizontal, vertical] +
12
+ * msg/messages
13
+ **/
14
+ module.exports = {
15
+ Horizontal: require('./horizontal'),
16
+ Vertical: require('./vertical')
17
+ };
@@ -0,0 +1 @@
1
+ module.exports = require('imports-loader?Blockly=../shim/blocks_compressed_vertical-blockly_compressed_vertical-messages,goog=../shim/blockly_compressed_vertical.goog!exports-loader?Blockly!../msg/scratch_msgs');
@@ -0,0 +1,82 @@
1
+ /* eslint-env node */
2
+
3
+ // There are a lot of different ways that people can install python, and there is no
4
+ // universal name that they use for the actual executable. We can already assume
5
+ // that there is a working Node.js environment, so this script can figure it out.
6
+
7
+ var child_process = require('child_process');
8
+ var _which = require('which');
9
+
10
+ function which(command) {
11
+ return _which.sync(command, {
12
+ nothrow: true
13
+ });
14
+ }
15
+
16
+ function run(command, args) {
17
+ console.log('universal-python: Running ' + command + ' with arguments ' + args.join(', '));
18
+ var subprocess = child_process.spawn(command, args, {
19
+ windowsHide: true,
20
+ shell: false,
21
+ stdio: 'inherit'
22
+ });
23
+ subprocess.on('exit', function(code) {
24
+ // Microsoft Store install shim exits with code 9009
25
+ if (process.platform === 'win32' && code === 9009) {
26
+ // eslint-disable-next-line max-len
27
+ console.log('universal-python: Attempted to start python, but got the Microsoft Store installation shim. Install python from the Microsoft Store or python.org. (code 9009)');
28
+ } else if (code === 0) {
29
+ console.log('universal-python: Success');
30
+ } else {
31
+ console.log('universal-python: Failed with code ' + code);
32
+ }
33
+ process.exit(code);
34
+ });
35
+ subprocess.on('error', function(error) {
36
+ console.log('universal-python: Error starting python; please ensure you have python installed: ' + error);
37
+ process.exit(1);
38
+ });
39
+ process.on('SIGINT', function() {
40
+ subprocess.kill('SIGINT');
41
+ });
42
+ }
43
+
44
+ var argv = process.argv.slice(2);
45
+
46
+ if (process.platform === 'win32') {
47
+ // Python in Windows is weird. Most commonly it will be installed using the python.org installers or
48
+ // from the Microsoft Store. Interestingly the Microsoft Store shims always exist on PATH and are
49
+ // also weird fake files so Node.js' fs does not work very well with them.
50
+ // Python.org installers will usually install the py launcher, so we'll try that first so that we
51
+ // don't open up the Microsoft Store for people who installed Python from there.
52
+ var py = which('py.exe');
53
+ if (py) {
54
+ run(py, ['-3'].concat(argv));
55
+ } else {
56
+ // This will either run the python installation from PATH or the Microsoft Store install shim.
57
+ // Don't know what version we'll get, but 2 and 3 both work so it doesn't matter.
58
+ run('python.exe', argv);
59
+ }
60
+ } else {
61
+ // Python 3 is usually installed as python3
62
+ var python3 = which('python3');
63
+ if (python3) {
64
+ run(python3, argv);
65
+ } else {
66
+ // Sometimes it might only be installed as python
67
+ // Don't know what version we'll get, but 2 and 3 both work so it doesn't matter
68
+ var python = which('python');
69
+ if (python) {
70
+ run(python, argv);
71
+ } else {
72
+ // Some old systems might only have python 2
73
+ var python2 = which('python2');
74
+ if (python2) {
75
+ run(python2, argv);
76
+ } else {
77
+ console.log("universal-python: Could not find python on your PATH; please ensure you have python installed.");
78
+ process.exit(1);
79
+ }
80
+ }
81
+ }
82
+ }