← Commit history

widget order lab: every registered widget, repeated, adjacent, and out of order

Ray ·078c0852c9 ·1mo ago ·parent 2f524dc
6 files changed +101−32
README.md+57−1
@@ -1,3 +1,59 @@ # Widget order lab -A deliberately awkward page for testing the markdown widget tag and section ordering (adom/wiki#152)+A deliberately awkward page, built for testing the markdown tag and section+ordering shipped in adom/wiki#152. Nothing here is a real part page: it exists to+be difficult.++What it exercises:++- **Every registered widget**, at least once+- **The same widget twice** on one page, with different data and different attrs+- **Widgets between prose**, not only under their own heading+- **Two widgets back to back** with no text between them+- **A widget as the first thing** after a heading, and as the last thing on the page+- **An unregistered tag**, which should render as nothing for a reader and a push hint for me+- **A tag with a bogus attribute**, which should be dropped rather than passed through+- **Sections declared out of their natural order** in page.json++## A wide part, first thing under the heading++::adom-pinout{src="/ray/widget-order-lab/render/pinout.json"}++## Two in a row, nothing between them++::adom-pinout{src="/ray/widget-order-lab/render/pinout-small.json" layout="dual"}+::adom-heatsink-via{src="/ray/widget-order-lab/render/heatsink.json"}++## Interleaved with prose++The paragraph before a widget should not merge into it, and the paragraph after+should not be swallowed. This sentence is the "before".++::adom-molecule{src="/ray/widget-order-lab/render/molecule.json"}++And this sentence is the "after", which should still be its own paragraph.++## The same tag again, further down++The second instance of a widget on one page is where element re-registration+would show up, if it were going to.++::adom-pinout{src="/ray/widget-order-lab/render/pinout.json" layout="quad" heading="Second instance, same data"}++## Things that should fail quietly++An unregistered tag, which a reader should never see:++::adom-not-a-real-widget{src="/ray/widget-order-lab/render/pinout.json"}++A registered tag carrying an attribute that is not on its allowlist. The widget+should render, and `onerror` should be dropped rather than reaching the element:++::adom-chip-thumbnail{mpn="STM32F103C8T6" package="LQFP-48" onerror="should-be-dropped"}++## Last thing on the page++A widget with nothing after it, in case trailing content is what keeps a frame+sized correctly.++::adom-pinout{src="/ray/widget-order-lab/render/pinout-small.json"}
heatsink.jsonadded+1
@@ -0,0 +1 @@+{"mpn":"MCP23017","package":"QFN-28-1EP_6x6mm_P0.65mm_EP4.25x4.25mm","ep":{"w_mm":4.25,"h_mm":4.25,"number":29}}
molecule.jsonadded+1
@@ -0,0 +1 @@+{"name": "STM32F103 \u00b7 minimum support", "components": [{"ref": "U1", "mpn": "STM32F103C8T6", "value": "STM32F103C8", "package": "LQFP-48", "type": "mcu"}, {"ref": "C1", "value": "100nF", "package": "0402", "type": "cap"}, {"ref": "C2", "value": "100nF", "package": "0402", "type": "cap"}, {"ref": "C3", "value": "100nF", "package": "0402", "type": "cap"}, {"ref": "C4", "value": "4.7uF", "package": "0805", "type": "cap"}, {"ref": "C5", "value": "10nF", "package": "0402", "type": "cap"}, {"ref": "C6", "value": "1uF", "package": "0603", "type": "cap"}, {"ref": "Y1", "value": "8MHz", "package": "HC-49", "type": "xtal"}, {"ref": "C7", "value": "20pF", "package": "0402", "type": "cap"}, {"ref": "C8", "value": "20pF", "package": "0402", "type": "cap"}, {"ref": "R1", "value": "10k", "package": "0402", "type": "res"}, {"ref": "C9", "value": "100nF", "package": "0402", "type": "cap"}], "nets": [{"name": "VDD", "pins": [{"ref": "U1", "pin": "VDD_1"}, {"ref": "U1", "pin": "VDD_2"}, {"ref": "U1", "pin": "VDD_3"}, {"ref": "C1", "pin": "1"}, {"ref": "C2", "pin": "1"}, {"ref": "C3", "pin": "1"}, {"ref": "C4", "pin": "1"}]}, {"name": "VDDA", "pins": [{"ref": "U1", "pin": "VDDA"}, {"ref": "C5", "pin": "1"}, {"ref": "C6", "pin": "1"}]}, {"name": "OSC_IN", "pins": [{"ref": "U1", "pin": "PD0"}, {"ref": "Y1", "pin": "1"}, {"ref": "C7", "pin": "1"}]}, {"name": "OSC_OUT", "pins": [{"ref": "U1", "pin": "PD1"}, {"ref": "Y1", "pin": "2"}, {"ref": "C8", "pin": "1"}]}, {"name": "NRST", "pins": [{"ref": "U1", "pin": "NRST"}, {"ref": "C9", "pin": "1"}]}, {"name": "BOOT0", "pins": [{"ref": "U1", "pin": "BOOT0"}, {"ref": "R1", "pin": "1"}]}, {"name": "GND", "pins": [{"ref": "U1", "pin": "VSS_1"}, {"ref": "U1", "pin": "VSSA"}, {"ref": "C1", "pin": "2"}, {"ref": "C4", "pin": "2"}, {"ref": "C9", "pin": "2"}, {"ref": "R1", "pin": "2"}]}]}\ No newline at end of file
page.json+3−31
@@ -1,35 +1,7 @@ {-  "schema_version": 1,+  "title": "Widget order lab",   "slug": "widget-order-lab",   "type": "app",-  "title": "Widget order lab",   "brief": "A deliberately awkward page for testing the markdown widget tag and section ordering (adom/wiki#152)",-  "version": "0.1.0",-  "hero": {-    "type": "billboard",-    "headline": "Widgets, in the worst order we could arrange",-    "subhead": "A test page for the markdown widget tag: repeats, adjacency, bad attrs and unregistered tags"-  },-  "author": {-    "name": "Ray",-    "email": "[email protected]"-  },-  "tags": [],-  "license": "proprietary",-  "visibility": {-    "public": true-  },-  "sample_prompts": [],-  "discovery_triggers": [],-  "discovery_pitch": null,-  "metadata": {},-  "created_at": "2026-08-24T19:30:18.567Z",-  "updated_at": "2026-08-24T19:30:18.567Z",-  "install": {-    "binary_name": "",-    "install_dir": "",-    "install_hint": "",-    "version_cmd": ""-  },-  "skills": []-}\ No newline at end of file+  "sections": ["readme", "hero", "info"]+}
pinout-small.jsonadded+38
@@ -0,0 +1,38 @@+{+ "mpn": "ATTINY85",+ "package": "SOIC-8",+ "pins": [+  {+   "number": 1,+   "name": "RESET"+  },+  {+   "number": 2,+   "name": "PB3"+  },+  {+   "number": 3,+   "name": "PB4"+  },+  {+   "number": 4,+   "name": "GND"+  },+  {+   "number": 5,+   "name": "PB0"+  },+  {+   "number": 6,+   "name": "PB1"+  },+  {+   "number": 7,+   "name": "PB2"+  },+  {+   "number": 8,+   "name": "VCC"+  }+ ]+}\ No newline at end of file
pinout.jsonadded+1
@@ -0,0 +1 @@+{"mpn": "STM32F103C8T6", "package": "LQFP-48", "pins": [{"number": 1, "name": "VBAT", "xy": [-2.75, 4.25], "type": "power"}, {"number": 2, "name": "PC13-TAMPER-RTC", "xy": [-2.25, 4.25], "type": "io"}, {"number": 3, "name": "PC14-OSC32_IN", "xy": [-1.75, 4.25], "type": "clock"}, {"number": 4, "name": "PC15-OSC32_OUT", "xy": [-1.25, 4.25], "type": "clock"}, {"number": 5, "name": "PD0-OSC_IN", "xy": [-0.75, 4.25], "type": "clock"}, {"number": 6, "name": "PD1-OSC_OUT", "xy": [-0.25, 4.25], "type": "clock"}, {"number": 7, "name": "NRST", "xy": [0.25, 4.25], "type": "ctrl"}, {"number": 8, "name": "VSSA", "xy": [0.75, 4.25], "type": "power"}, {"number": 9, "name": "VDDA", "xy": [1.25, 4.25], "type": "power"}, {"number": 10, "name": "PA0-WKUP", "xy": [1.75, 4.25], "type": "io"}, {"number": 11, "name": "PA1", "xy": [2.25, 4.25], "type": "io"}, {"number": 12, "name": "PA2", "xy": [2.75, 4.25], "type": "io"}, {"number": 13, "name": "PA3", "xy": [4.25, 2.75], "type": "io"}, {"number": 14, "name": "PA4", "xy": [4.25, 2.25], "type": "io"}, {"number": 15, "name": "PA5", "xy": [4.25, 1.75], "type": "io"}, {"number": 16, "name": "PA6", "xy": [4.25, 1.25], "type": "io"}, {"number": 17, "name": "PA7", "xy": [4.25, 0.75], "type": "io"}, {"number": 18, "name": "PB0", "xy": [4.25, 0.25], "type": "io"}, {"number": 19, "name": "PB1", "xy": [4.25, -0.25], "type": "io"}, {"number": 20, "name": "PB2", "xy": [4.25, -0.75], "type": "io"}, {"number": 21, "name": "PB10", "xy": [4.25, -1.25], "type": "io"}, {"number": 22, "name": "PB11", "xy": [4.25, -1.75], "type": "io"}, {"number": 23, "name": "VSS_1", "xy": [4.25, -2.25], "type": "power"}, {"number": 24, "name": "VDD_1", "xy": [4.25, -2.75], "type": "power"}, {"number": 25, "name": "PB12", "xy": [2.75, -4.25], "type": "io"}, {"number": 26, "name": "PB13", "xy": [2.25, -4.25], "type": "io"}, {"number": 27, "name": "PB14", "xy": [1.75, -4.25], "type": "io"}, {"number": 28, "name": "PB15", "xy": [1.25, -4.25], "type": "io"}, {"number": 29, "name": "PA8", "xy": [0.75, -4.25], "type": "io"}, {"number": 30, "name": "PA9", "xy": [0.25, -4.25], "type": "io"}, {"number": 31, "name": "PA10", "xy": [-0.25, -4.25], "type": "io"}, {"number": 32, "name": "PA11", "xy": [-0.75, -4.25], "type": "io"}, {"number": 33, "name": "PA12", "xy": [-1.25, -4.25], "type": "io"}, {"number": 34, "name": "PA13", "xy": [-1.75, -4.25], "type": "io"}, {"number": 35, "name": "VSS_2", "xy": [-2.25, -4.25], "type": "power"}, {"number": 36, "name": "VDD_2", "xy": [-2.75, -4.25], "type": "power"}, {"number": 37, "name": "PA14", "xy": [-4.25, -2.75], "type": "io"}, {"number": 38, "name": "PA15", "xy": [-4.25, -2.25], "type": "io"}, {"number": 39, "name": "PB3", "xy": [-4.25, -1.75], "type": "io"}, {"number": 40, "name": "PB4", "xy": [-4.25, -1.25], "type": "io"}, {"number": 41, "name": "PB5", "xy": [-4.25, -0.75], "type": "io"}, {"number": 42, "name": "PB6", "xy": [-4.25, -0.25], "type": "io"}, {"number": 43, "name": "PB7", "xy": [-4.25, 0.25], "type": "io"}, {"number": 44, "name": "BOOT0", "xy": [-4.25, 0.75], "type": "ctrl"}, {"number": 45, "name": "PB8", "xy": [-4.25, 1.25], "type": "io"}, {"number": 46, "name": "PB9", "xy": [-4.25, 1.75], "type": "io"}, {"number": 47, "name": "VSS_3", "xy": [-4.25, 2.25], "type": "power"}, {"number": 48, "name": "VDD_3", "xy": [-4.25, 2.75], "type": "power"}]}\ No newline at end of file