sS hselect_list(S name, Cl entries, O... params) { ret hselect_list(entries, paramsPlus_skipFirst(params, +name)); } sS hselect_list(Cl entries, O... params) { new StringBuilder buf; S selected = null; if (odd(l(params))) { selected = str(first(params)); params = dropFirst(params); } ifdef hselect_list_debug printVars_str(+selected); endifdef int i = indexOf(params, "allowEmpty"); if (even(i)) { buf.append("\n"); params[i] = params[i+1] = null; } if (nempty(entries)) for (S k : entries) { S value = k; bool isSelected = eq(selected, k); ifdef hselect_list_debug if (isSelected) print("Selected: " + k); endifdef buf.append(hfulltag option(htmlencode(str(or(value, ""))), value := k, selected := isSelected ? html_valueLessParam() : null)).append("\n"); } ret hfulltag("select", buf, params) + "\n"; }