diff --git a/docs/_static/js/formatted-dropdown.js b/docs/_static/js/formatted-dropdown.js
index 122a2176..c6f07b2f 100644
--- a/docs/_static/js/formatted-dropdown.js
+++ b/docs/_static/js/formatted-dropdown.js
@@ -33,32 +33,44 @@ document.addEventListener("DOMContentLoaded", () => {
}
function updateDropdowns() {
- selects.forEach(sel => {
- const key = sel.dataset.key;
- const field = widget.querySelector(`.dropdown-field[data-field="${key}"]`);
-
- const prevValue = sel.value;
- const available = computeAvailableValues(key);
-
- sel.innerHTML = available
- .map(o => ``)
- .join("");
-
- // Try to restore previous value
- if (available.some(a => a.value === prevValue)) {
- sel.value = prevValue;
- } else {
- // Otherwise pick first valid value
- sel.value = available[0]?.value;
- }
+ for (let pass = 0; pass < selects.length; pass++) {
+ let changed = false;
+
+ selects.forEach(sel => {
+ const key = sel.dataset.key;
+ const field = widget.querySelector(`.dropdown-field[data-field="${key}"]`);
+
+ const prevValue = sel.value;
+ const available = computeAvailableValues(key);
+
+ sel.innerHTML = available
+ .map(o => ``)
+ .join("");
+
+ // Try to restore previous value
+ if (available.some(a => a.value === prevValue)) {
+ sel.value = prevValue;
+ } else {
+ // Otherwise pick first valid value
+ sel.value = available[0]?.value;
+ }
+
+ if (sel.value !== prevValue) {
+ changed = true;
+ }
- // Hide the field if only one possible value
- if (available.length === 1) {
- field.style.display = "none";
- } else {
- field.style.display = "flex";
+ // Hide the field if only one possible value
+ if (available.length === 1) {
+ field.style.display = "none";
+ } else {
+ field.style.display = "flex";
+ }
+ });
+
+ if (!changed) {
+ break;
}
- });
+ }
}
function updateOutput() {
diff --git a/docs/exts/formatted-dropdown.py b/docs/exts/formatted-dropdown.py
index 1e40a857..b505562a 100644
--- a/docs/exts/formatted-dropdown.py
+++ b/docs/exts/formatted-dropdown.py
@@ -26,6 +26,8 @@ def parse_value(self, raw: str):
return {"value": raw.strip(), "conditions": {}}
value = m.group("val").strip()
+ if value == '""':
+ value = ""
conds = m.group("conds")
if not conds:
return {"value": value, "conditions": {}}