blob: bfb4e7bf1bb46d71190a7b977db556b947fd02e8 [file] [log] [blame]
[%# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
#%]
[% types = [
"noop",
"equals",
"notequals",
"anyexact",
"substring",
"casesubstring",
"notsubstring",
"anywordssubstr",
"allwordssubstr",
"nowordssubstr",
"regexp",
"notregexp",
"lessthan",
"lessthaneq",
"greaterthan",
"greaterthaneq",
"anywords",
"allwords",
"nowords",
"changedbefore",
"changedafter",
"changedfrom",
"changedto",
"changedby",
"matches",
"notmatches",
"isempty",
"isnotempty",
] %]
<div class="bz_section_title" id="custom_search_filter">
<div id="custom_search_query_controller" class="arrow">&#9660;</div>
<a id="chart" href="javascript:TUI_toggle_class('custom_search_query')" >
Custom Search</a> <span class="section_help">Didn't find what
you're looking for above? This area allows for ANDs, ORs,
and other more complex searches.</span>
</div>
<div id="custom_search_filter_section"
class="bz_search_section custom_search_query">
[% SET indent_level = 0 %]
[% SET cond_num = 0 %]
[% FOREACH condition = default.custom_search %]
[% SET cond_num = loop.count - 1 %]
[% PROCESS one_condition with_buttons = 0 %]
[% END %]
[% PROCESS one_condition
with_buttons = 1
condition = { f => 'noop' }
cond_num = cond_num + 1 %]
<script type="text/javascript">
TUI_alternates['custom_search_query'] = '&#9658;';
TUI_hide_default('custom_search_query');
TUI_alternates['custom_search_advanced'] = "Show Advanced Features";
TUI_hide_default('custom_search_advanced');
</script>
<script type="text/javascript" src="[% 'js/custom-search.js' FILTER mtime %]"></script>
<script type="text/javascript">
redirect_html4_browsers();
[%# These are alternative labels for the AND and OR options in and_all_select %]
var cs_and_label = 'Match ALL of the following:';
var cs_or_label = 'Match ANY of the following:';
cs_reconfigure('custom_search_last_row');
</script>
<script type="text/javascript" src="[% 'js/history.js/native.history.js' FILTER mtime %]"></script>
</div>
[% BLOCK one_condition %]
[%# Skip any conditions that don't have a field defined. %]
[% RETURN IF !condition.f %]
[% IF !top_level_any_shown %]
[% INCLUDE any_all_select
name = "j_top" selected = default.j_top.0
with_advanced_link = 1 %]
[% top_level_any_shown = 1 %]
[% END %]
[% IF condition.f == "CP" %]
[% indent_level = indent_level - 1 %]
[% END %]
<div class="custom_search_condition"
[% ' style="margin-left: ' _ (indent_level * 2) _ 'em"' IF indent_level %]
[% ' id="custom_search_last_row"' IF with_buttons %]>
[% IF previous_condition.f == "OP" %]
[% INCLUDE any_all_select
name = "j" _ (cond_num - 1)
selected = previous_condition.j %]
[% END %]
[% IF with_buttons %]
<button id="op_button" type="button" class="custom_search_advanced"
title="Start a new group of criteria, including this row"
onclick="custom_search_open_paren()">(</button>
[% END %]
[% UNLESS condition.f == "CP" %]
[%# This only gets hidden via custom_search_advanced if it isn't set. %]
<span id="custom_search_not_container_[% cond_num FILTER html %]"
class="custom_search_not_container
[%- ' custom_search_advanced' UNLESS condition.n %]"
title="Search for the opposite of the criteria here">
<input type="checkbox" id="n[% cond_num FILTER html %]"
class="custom_search_form_field"
name="n[% cond_num FILTER html %]" value="1"
onclick="custom_search_not_changed([% cond_num FILTER js %])"
[% ' checked="checked"' IF condition.n %]>
<label for="n[% cond_num FILTER html %]">Not</label>
</span>
[% END %]
[% IF condition.f == "OP" %]
<input type="hidden" name="f[% cond_num FILTER html %]"
id="f[% cond_num FILTER html %]" value="OP">
(
[% indent_level = indent_level + 1 %]
[% ELSIF condition.f == "CP" %]
<input type="hidden" name="f[% cond_num FILTER html %]"
id="f[% cond_num FILTER html %]" value="CP">
)
[% ELSE %]
<select name="f[% cond_num FILTER html %]" title="Field"
id="f[% cond_num FILTER html %]"
onchange="fix_query_string(this)"
class="custom_search_form_field">
[%# Turn the array in to a hash with the name as the key %]
[%
field_hash = {};
FOREACH field IN fields;
field_hash.${field.name} = field;
END;
%]
[% FOREACH field_name = field_hash.keys.sort_by_field_name(field_descs) %]
[% field = field_hash.$field_name %]
<option value="[% field.name FILTER html %]"
[%~ ' selected="selected"' IF field.name == condition.f %]>
[% field_descs.${field.name} || field.description FILTER html %]
</option>
[% END %]
</select>
[% INCLUDE "search/type-select.html.tmpl"
name = "o${cond_num}", class = "custom_search_form_field"
types = types, selected = condition.o %]
<input name="v[% cond_num FILTER html %]" title="Value"
class="custom_search_form_field"
onchange="fix_query_string(this)"
value="[% condition.v FILTER html %]">
[% END %]
[% IF with_buttons %]
<button class="custom_search_add_button" type="button"
id="add_button" title="Add a new row"
onclick="custom_search_new_row()">+</button>
<span id="cp_container" [% ' class="bz_default_hidden"' IF !indent_level %]>
<button id="cp_button" type="button"
title="End this group of criteria"
onclick="custom_search_close_paren()">)</button>
</span>
[% END %]
</div>
[% previous_condition = condition %]
[% END %]
[% BLOCK any_all_select %]
<div class="any_all_select">
<select name="[% name FILTER html %]" id="[% name FILTER html %]"
onchange="fix_query_string(this)">
<option value="AND">Match ALL of the following separately:</option>
<option value="OR" [% ' selected="selected"' IF selected == "OR" %]>
Match ANY of the following separately:</option>
<option value="AND_G" [% ' selected' IF selected == "AND_G" %]>
Match ALL of the following against the same field:</option>
</select>
[% IF with_advanced_link %]
<a id="custom_search_advanced_controller"
href="javascript:TUI_toggle_class('custom_search_advanced')">
Hide Advanced Features
</a>
[% END %]
</div>
[% END %]