field-select
O invólucro do field à volta de um select nativo. A partir de dez opções, o select ativa a caixa com filtro do select.js; o que o formulário envia continua a ser o select nativo.
Três opções: um select nativo
Coloque isto dentro de <section rst-box><form rst-form>.
<div rst-field >
<label rst-field-label for ="sel_few" >Função</label >
<select rst-input id ="sel_few" name ="sel_few" >
<option value ="admin" selected >Administrador</option >
<option value ="editor" >Editor</option >
<option value ="member" >Membro</option >
</select >
</div >
Coloque isto dentro de <section rst-box><form rst-form>.
{{ template "field-select" dict
"ID" "sel_few"
"Name" "sel_few"
"Label" "Função"
"Options" (list
(dict "Label" "Administrador" "Selected" true "Value" "admin" )
(dict "Label" "Editor" "Value" "editor" )
(dict "Label" "Membro" "Value" "member" ))}}
Doze opções: a caixa combinada com filtro
Coloque isto dentro de <section rst-box><form rst-form>.
<div rst-field >
<label rst-field-label for ="sel_many" >Cidade</label >
<select rst-input id ="sel_many" name ="sel_many" data-rst-select data-rst-select-filter ="Escreva para filtrar" data-rst-select-results ="{n} resultados" data-rst-select-result-one ="1 resultado" data-rst-select-no-matches ="Sem correspondências" aria-describedby ="sel_many-help" >
<option value ="dublin" selected >Dublin</option >
<option value ="lisbon" >Lisboa</option >
<option value ="madrid" >Madrid</option >
<option value ="berlin" >Berlim</option >
<option value ="rome" >Roma</option >
<option value ="athens" >Atenas</option >
<option value ="helsinki" >Helsínquia</option >
<option value ="reykjavík" >Reiquiavique</option >
<option value ="warsaw" >Varsóvia</option >
<option value ="zagreb" >Zagreb</option >
<option value ="tallinn" >Tallinn</option >
<option value ="valletta" >Valeta</option >
</select >
<p rst-field-help id ="sel_many-help" >Comece a escrever para filtrar.</p >
</div >
Coloque isto dentro de <section rst-box><form rst-form>.
{{ template "field-select" dict
"ID" "sel_many"
"Name" "sel_many"
"Label" "Cidade"
"Options" (list
(dict "Label" "Dublin" "Selected" true "Value" "dublin" )
(dict "Label" "Lisboa" "Value" "lisbon" )
(dict "Label" "Madrid" "Value" "madrid" )
(dict "Label" "Berlim" "Value" "berlin" )
(dict "Label" "Roma" "Value" "rome" )
(dict "Label" "Atenas" "Value" "athens" )
(dict "Label" "Helsínquia" "Value" "helsinki" )
(dict "Label" "Reiquiavique" "Value" "reykjavík" )
(dict "Label" "Varsóvia" "Value" "warsaw" )
(dict "Label" "Zagreb" "Value" "zagreb" )
(dict "Label" "Tallinn" "Value" "tallinn" )
(dict "Label" "Valeta" "Value" "valletta" ))
"Help" "Comece a escrever para filtrar." }}
A partir de dez opções, o parcial ativa o select.js. Abaixo de dez, não: procurar entre um punhado de itens é mobília, não ajuda.
Doze opções, Plain: a melhoria recusada
Coloque isto dentro de <section rst-box><form rst-form>.
<div rst-field >
<label rst-field-label for ="sel_plain" >Cidade</label >
<select rst-input id ="sel_plain" name ="sel_plain" >
<option value ="dublin" selected >Dublin</option >
<option value ="lisbon" >Lisboa</option >
<option value ="madrid" >Madrid</option >
<option value ="berlin" >Berlim</option >
<option value ="rome" >Roma</option >
<option value ="athens" >Atenas</option >
<option value ="helsinki" >Helsínquia</option >
<option value ="reykjavík" >Reiquiavique</option >
<option value ="warsaw" >Varsóvia</option >
<option value ="zagreb" >Zagreb</option >
<option value ="tallinn" >Tallinn</option >
<option value ="valletta" >Valeta</option >
</select >
</div >
Coloque isto dentro de <section rst-box><form rst-form>.
{{ template "field-select" dict
"ID" "sel_plain"
"Name" "sel_plain"
"Label" "Cidade"
"Options" (list
(dict "Label" "Dublin" "Selected" true "Value" "dublin" )
(dict "Label" "Lisboa" "Value" "lisbon" )
(dict "Label" "Madrid" "Value" "madrid" )
(dict "Label" "Berlim" "Value" "berlin" )
(dict "Label" "Roma" "Value" "rome" )
(dict "Label" "Atenas" "Value" "athens" )
(dict "Label" "Helsínquia" "Value" "helsinki" )
(dict "Label" "Reiquiavique" "Value" "reykjavík" )
(dict "Label" "Varsóvia" "Value" "warsaw" )
(dict "Label" "Zagreb" "Value" "zagreb" )
(dict "Label" "Tallinn" "Value" "tallinn" )
(dict "Label" "Valeta" "Value" "valletta" ))
"Plain" true }}
Obrigatório, com um erro
Coloque isto dentro de <section rst-box><form rst-form>.
<div rst-field >
<label rst-field-label for ="sel_error" >Função</label >
<select rst-input id ="sel_error" name ="sel_error" required aria-invalid ="true" aria-describedby ="sel_error-error" >
<option value ="admin" selected >Administrador</option >
<option value ="editor" >Editor</option >
<option value ="member" >Membro</option >
</select >
<p rst-field-error id ="sel_error-error" role ="alert" >Escolha uma função para esta pessoa.</p >
</div >
Coloque isto dentro de <section rst-box><form rst-form>.
{{ template "field-select" dict
"ID" "sel_error"
"Name" "sel_error"
"Label" "Função"
"Options" (list
(dict "Label" "Administrador" "Selected" true "Value" "admin" )
(dict "Label" "Editor" "Value" "editor" )
(dict "Label" "Membro" "Value" "member" ))
"Required" true
"Error" "Escolha uma função para esta pessoa." }}
Escrito à mão, com optgroups
Coloque isto dentro de <section rst-box><form rst-form>.
<div rst-field >
<label rst-field-label for ="sel_grouped" >Região</label >
<select rst-input id ="sel_grouped" name ="sel_grouped" data-rst-select data-rst-select-filter ="Escreva para filtrar" data-rst-select-results ="{n} resultados" data-rst-select-result-one ="1 resultado" data-rst-select-no-matches ="Sem correspondências" >
<optgroup label ="Europa" >
<option value ="dublin" selected >Dublin</option >
<option value ="lisbon" >Lisboa</option >
<option value ="warsaw" >Varsóvia</option >
</optgroup >
<optgroup label ="Américas" >
<option value ="montreal" >Montreal</option >
<option value ="lima" >Lima</option >
<option value ="austin" >Austin</option >
</optgroup >
<optgroup label ="Ásia" >
<option value ="osaka" >Osaka</option >
<option value ="hanoi" >Hanói</option >
<option value ="dhaka" >Daca</option >
</optgroup >
<optgroup label ="África" >
<option value ="accra" >Acra</option >
<option value ="nairobi" >Nairóbi</option >
<option value ="tunis" >Tunes</option >
</optgroup >
</select >
</div >
Aqui o Options é uma lista plana, por isso as opções agrupadas são marcação que a aplicação escreve. O select.js desenha os grupos em vez de os deitar fora; um select escrito à mão também pode recusar a melhoria por completo com data-rst-select="false".