Skip to content

Commit df6069c

Browse files
committed
Testing and bug fixing
1 parent 14fd0c5 commit df6069c

20 files changed

Lines changed: 487 additions & 95 deletions

.claude/skills/blockly/SKILL.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,19 @@ Colors are Blockly hue values (0–360). Always import — never hardcode a numb
112112
## Adding a New Block
113113

114114
1. **Create** `frontend/src/components/blockly/mh_myblock.js` using the pattern above
115-
2. **Import and register** in `component.js`:
116-
- Add `import * as mh_myblock from './mh_myblock.js'` with the other imports
117-
- Add `mh_myblock` to the `customBlocks` object
115+
2. **Import and register** in **all three** files:
116+
- `frontend/src/components/blockly/component.js` — add import + entry in `customBlocks`
117+
- `frontend/scripts/block-renderer.js` — add import + entry in `customBlocks`
118+
- `frontend/scripts/generate-block-docs-simple.js` — add dynamic import in `blockModules` + entry in `customBlocks`
118119
3. **Toolbox**: automatic — `generateToolbox()` groups by `category` field
119120
4. **Write unit tests** — REQUIRED for every new block (see below)
120-
5. **Test** in dev mode: `npm run dev`
121-
6. **Regenerate docs**: `npm run generate-docs` (see below)
121+
5. **Test** in dev mode: `npm run dev` or `npm test`
122+
6. **Regenerate docs** — REQUIRED after every block add/modify/remove:
123+
```bash
124+
cd frontend
125+
npm run generate-docs
126+
```
127+
This regenerates `BLOCKS.md` and all PNG images in `docs/blocks/`. Never skip this step.
122128

123129
---
124130

BLOCKS.md

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Blockly Blocks Documentation
22

3-
**Generated:** 2026-03-05
3+
**Generated:** 2026-03-06
44

5-
This documentation covers all 85 blocks used in the Megahub project, including 37 custom blocks and 48 standard Blockly blocks with custom colors.
5+
This documentation covers all 86 blocks used in the Megahub project, including 38 custom blocks and 48 standard Blockly blocks with custom colors.
66

77
Block images are rendered as high-quality PNG screenshots to accurately show all block features including text inputs, checkboxes, and statement blocks.
88

@@ -15,7 +15,7 @@ Block images are rendered as high-quality PNG screenshots to accurately show all
1515
- [Text](#text) (13 blocks)
1616
- [Lists](#lists) (12 blocks)
1717
- [I/O](#i-o) (5 blocks)
18-
- [LEGO©](#lego-) (2 blocks)
18+
- [LEGO©](#lego-) (3 blocks)
1919
- [Gamepad](#gamepad) (5 blocks)
2020
- [FastLED](#fastled) (4 blocks)
2121
- [IMU](#imu) (1 blocks)
@@ -691,19 +691,36 @@ Block images are rendered as high-quality PNG screenshots to accurately show all
691691

692692
## LEGO©
693693

694+
### lego_get_device_mode
695+
696+
![lego_get_device_mode](docs/blocks/lego-/lego_get_device_mode.png)
697+
698+
**Description:** Returns the currently selected mode index of a port
699+
700+
**Message:** `Selected mode of %1`
701+
702+
**Inputs:**
703+
704+
| Name | Type | Check |
705+
|------|------|-------|
706+
| PORT | input_value | Any |
707+
708+
---
709+
694710
### lego_get_mode_dataset
695711

696712
![lego_get_mode_dataset](docs/blocks/lego-/lego_get_mode_dataset.png)
697713

698-
**Description:** Get a dataset value from the selected mode of a port
714+
**Description:** Get a dataset value from a specific mode of a port
699715

700-
**Message:** `Get dataset %2 from selected mode of %1`
716+
**Message:** `Get dataset %3 from mode %2 of %1`
701717

702718
**Inputs:**
703719

704720
| Name | Type | Check |
705721
|------|------|-------|
706722
| PORT | input_value | Any |
723+
| MODE | input_value | Any |
707724
| DATASET | input_value | Any |
708725

709726
---
@@ -1222,10 +1239,10 @@ output: %10 to %11`
12221239

12231240
## Generation Statistics
12241241

1225-
- Total blocks: 85
1226-
- Custom Megahub blocks: 37
1242+
- Total blocks: 86
1243+
- Custom Megahub blocks: 38
12271244
- Standard Blockly blocks: 48
1228-
- PNG images generated: 85
1245+
- PNG images generated: 86
12291246

12301247
---
12311248

505 Bytes
Loading
6.88 KB
Loading
5.61 KB
Loading
-2 Bytes
Loading

frontend/scripts/block-renderer.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {definition as mh_imu_value} from '../src/components/blockly/mh_imu_value
2929
import {definition as ui_show_value} from '../src/components/blockly/ui_show_value.js';
3030
import {definition as mh_debug_free_heap} from '../src/components/blockly/mh_debug_free_heap.js';
3131
import {definition as mh_port} from '../src/components/blockly/mh_port.js';
32+
import {definition as lego_get_device_mode} from '../src/components/blockly/lego_get_device_mode.js';
3233
import {definition as lego_get_mode_dataset} from '../src/components/blockly/lego_get_mode_dataset.js';
3334
import {definition as lego_select_mode} from '../src/components/blockly/lego_select_mode.js';
3435
import {definition as gamepad_gamepad} from '../src/components/blockly/mh_gamepad_gamepad.js';
@@ -115,6 +116,7 @@ const customBlocks = {
115116
"mh_gamepad_buttonsraw": gamepad_buttonsraw,
116117
"mh_gamepad_value": gamepad_value,
117118
"mh_gamepad_connected": gamepad_connected,
119+
"lego_get_device_mode": lego_get_device_mode,
118120
"lego_get_mode_dataset": lego_get_mode_dataset,
119121
"lego_select_mode": lego_select_mode,
120122
"mh_fastled_addleds": mh_fastled_addleds,

frontend/scripts/dist/block-renderer.js

Lines changed: 55 additions & 55 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/scripts/generate-block-docs-simple.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ async function loadBlockDefinitions() {
7171
ui_show_value : await import('../src/components/blockly/ui_show_value.js'),
7272
mh_debug_free_heap : await import('../src/components/blockly/mh_debug_free_heap.js'),
7373
mh_port : await import('../src/components/blockly/mh_port.js'),
74+
lego_get_device_mode : await import('../src/components/blockly/lego_get_device_mode.js'),
7475
lego_get_mode_dataset : await import('../src/components/blockly/lego_get_mode_dataset.js'),
7576
lego_select_mode : await import('../src/components/blockly/lego_select_mode.js'),
7677
mh_gamepad_gamepad : await import('../src/components/blockly/mh_gamepad_gamepad.js'),
@@ -230,6 +231,7 @@ async function loadBlockDefinitions() {
230231
mh_gamepad_connected : blockModules.mh_gamepad_connected.definition,
231232

232233
// LEGO blocks
234+
lego_get_device_mode : blockModules.lego_get_device_mode.definition,
233235
lego_get_mode_dataset : blockModules.lego_get_mode_dataset.definition,
234236
lego_select_mode : blockModules.lego_select_mode.definition,
235237

frontend/src/components/blockly/component.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { definition as mh_imu_value } from './mh_imu_value.js';
2626
import { definition as ui_show_value } from './ui_show_value.js';
2727
import { definition as mh_debug_free_heap } from './mh_debug_free_heap.js';
2828
import { definition as mh_port } from './mh_port.js';
29+
import { definition as lego_get_device_mode } from './lego_get_device_mode.js';
2930
import { definition as lego_get_mode_dataset } from './lego_get_mode_dataset.js';
3031
import { definition as lego_select_mode } from './lego_select_mode.js';
3132
import { definition as gamepad_gamepad } from './mh_gamepad_gamepad.js';
@@ -270,6 +271,8 @@ const customBlocks = {
270271

271272
mh_gamepad_connected: gamepad_connected,
272273

274+
lego_get_device_mode: lego_get_device_mode,
275+
273276
lego_get_mode_dataset: lego_get_mode_dataset,
274277

275278
lego_select_mode: lego_select_mode,

0 commit comments

Comments
 (0)