==b-search

===Описание
Поисковая форма, состоящая из поля для ввода (или двух), кнопки сабмита и дополнительных элементов, расположенных под полями для ввода.

{{TOC}}

===XML-формат
%%(html)
<lego:b-search>
    <lego:input>
        <lego:precise/>
        <lego:sample/>
        <lego:advanced/>
    </lego:input>
    <lego:button/>
</lego:b-search>
%%

Вариант с двумя поисковыми полями:
%%(html)
<lego:b-search lego:type="double">
    <lego:input name="what">
        <lego:precise/>
    </lego:input>
    <lego:input name="where">
        <lego:sample/>
    </lego:input>
    <lego:button/>
</lego:b-search>
%%

===Задание атрибутов поисковой формы
Атрибуты ##action##, ##method## и ##onsubmit## элемента ##lego:b-search##, заданные в xml'е, копируются в тег ##form##:
%%(html)
<lego:b-search action="/search">
    ...
%%
на выходе:
%%(html)
<form action="/search">
    ...
%%

Кроме того, можно переопределять эти атрибуты динамически через xsl, например:
%%(html)
<xsl:template match="lego:b-search" mode="lego:method-content">
    <xsl:text>post</xsl:text>
</xsl:template>
%%

===Обязательные элементы ##lego:input## и ##lego:button##

====##b-search.input##
((input/b-search.input.wiki Подробнее про lego:input))

====##b-search.button##
((button/b-search.button.wiki Подробнее про lego:button))


===hidden-поля
Чтобы вывести в форму скрытые поля, нужно переопределить такой шаблон:
%%(html)
<xsl:template match="lego:b-search" mode="lego:hidden">
    <input type="hidden" name="my-name" value="my-value"/>
</xsl:template>
%%

===Область "##lego:under##"
Это область, расположенная под полем(ями) ввода. В ней могут находиться элементы ##lego:sample##, ##lego:precise## и ##lego:advanced## -- см. ниже.
В ситуации, когда хоть один из этих элементов присутствует в xml, необходимая html-обвязка выведется автоматичиски.

Но бывает ситуация, когда в это место (в ##lego:under##) нужно вывести некий кастомный блок, а ни одного из вышеописанных элементов нет. Например, на Погоде в это место выводится скрытый ##div##, в который выводятся ошибки автокомплита. В этом случае, нужно в ##lego:params## передать флаг:
%%(html)
<xsl:template match="/" mode="lego:params">
<lego:b-search>
    <lego:under/>
    ...
</xsl:template>
%%
и переопределить такой шаблон:
%%(html)
<xsl:template match="lego:b-search/lego:input" mode="lego:under">
    <div class="autocomplete-errors">
    ...
    </div>
</xsl:template>
%%

===Необязательные вложенные элементы

====b-search.advanced
((advanced/b-search.advanced.wiki Подробнее про lego:advanced))

====b-search.precise
((precise/b-search.precise.wiki Подробнее про lego:precise))

====b-search.sample
((sample/b-search.sample.wiki Подробнее про lego:sample))

====##lego:precise## vs ##lego:sample##
В случае, если на странице при одних условиях должна быть поисковая подсказка, а при других чекбокс, в xml'е следуют указать оба элемента:
%%(html)
<lego:b-search>
    <lego:input/>
        <lego:sample/>
        <lego:precise/>
    </lego:input>
    ...
%%
и в ##lego:params## передавать то, что нужно -- или одно, или другое.

