comparison src/nabble/view/naml/adv_search.naml @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:7ecd1a4ef557
1 <macro name="adv_search_page" requires="servlet">
2 <n.node_page.>
3 <n.catch_exception. id="set-block">
4 <n.if.is_submitted_form>
5 <then>
6 <n.redirect_to.page_node.>
7 <n.search_path>
8 <query>
9 <n.compress.>
10 <n.set_message_text_contains_group/>
11 <n.set_message_subject_contains_group/>
12 <n.set_author_name_group/>
13 <n.set_any_message_part_contains_group/>
14 </n.compress.>
15 </query>
16 <days>
17 <n.get_int. default="0" exception="days_field_not_integer">
18 <n.get_parameter name="days" />
19 </n.get_int.>
20 </days>
21 </n.search_path>
22 </n.redirect_to.page_node.>
23 </then>
24 </n.if.is_submitted_form>
25 </n.catch_exception.>
26 <n.html>
27 <head>
28 <meta name="robots" content="noindex,nofollow"/>
29 <n.title.><t>Advanced Search</t></n.title.>
30 <style type="text/css">
31 div.group-header {
32 padding: .2em;
33 margin-top:1em;
34 font-size: 120%;
35 font-weight: bold;
36 }
37 td.form-label {
38 white-space: nowrap;
39 }
40 </style>
41 </head>
42 <body>
43 <n.adv_search_exceptions/>
44 <h1><t>Advanced Search</t></h1>
45
46 <p><t>Use the options below to precisely specify your search criteria.</t></p>
47
48 <n.form.>
49 <table class="advanced-search-table">
50 <n.message_text_contains_group/>
51 <n.message_subject_contains_group/>
52 <n.author_name_group/>
53 <n.any_message_part_contains_group/>
54 <n.message_date_group/>
55 <n.submit_button/>
56 </table>
57 </n.form.>
58 </body>
59 </n.html>
60 </n.node_page.>
61 </macro>
62
63 <macro name="adv_search_exceptions">
64 <n.format_error.handle_exception. for="set-block">
65 <n.exception. name="days_field_not_integer">
66 <t>Invalid number of days, must be integer.</t>
67 </n.exception.>
68 </n.format_error.handle_exception.>
69 </macro>
70
71 <macro name="set_message_text_contains_group">
72 <n.adv_search_and_query name="messageand" field="message" />
73 <n.adv_search_or_query name="messageor" field="message" />
74 <n.adv_search_phrase_query name="messagephrase" field="message" />
75 <n.adv_search_not_query name="messagenot" field="message" />
76 </macro>
77
78 <macro name="set_message_subject_contains_group">
79 <n.adv_search_and_query name="subjectand" field="subject" />
80 <n.adv_search_or_query name="subjector" field="subject" />
81 <n.adv_search_phrase_query name="subjectphrase" field="subject" />
82 <n.adv_search_not_query name="subjectnot" field="subject" />
83 </macro>
84
85 <macro name="set_author_name_group">
86 <n.adv_search_phrase_query name="authorphrase" field="author" />
87 <n.adv_search_not_phrase_query name="authorphrasenot" field="author" />
88 </macro>
89
90 <macro name="set_any_message_part_contains_group">
91 <n.get_parameter name="alland" />
92 <n.adv_search_or_query name="allor" />
93 <n.adv_search_phrase_query name="allphrase" />
94 <n.adv_search_not_query name="allnot" />
95 </macro>
96
97 <macro name="message_text_contains_group">
98 <tr>
99 <td colspan="2">
100 <div class="shaded-bg-color rounded second-font group-header">
101 <t>Message text contains</t>
102 </div>
103 </td>
104 </tr>
105 <tr>
106 <td class="form-label"><t>all of the words:</t></td>
107 <td><n.adv_search_input name="messageand" /></td>
108 </tr>
109 <tr>
110 <td class="form-label"><t>at least one of the words:</t></td>
111 <td><n.adv_search_input name="messageor" /></td>
112 </tr>
113 <tr>
114 <td class="form-label"><t>the exact phrase:</t></td>
115 <td><n.adv_search_input name="messagephrase" /></td>
116 </tr>
117 <tr>
118 <td class="form-label end-group"><t>none of the words:</t></td>
119 <td class="end-group"><n.adv_search_input name="messagenot" /></td>
120 </tr>
121 </macro>
122
123 <macro name="message_subject_contains_group">
124 <tr>
125 <td colspan="2">
126 <div class="shaded-bg-color rounded second-font group-header">
127 <t>Message subject contains</t>
128 </div>
129 </td>
130 </tr>
131 <tr>
132 <td class="form-label"><t>all of the words:</t></td>
133 <td><n.adv_search_input name="subjectand" /></td>
134 </tr>
135 <tr>
136 <td class="form-label"><t>at least one of the words:</t></td>
137 <td><n.adv_search_input name="subjector" /></td>
138 </tr>
139 <tr>
140 <td class="form-label"><t>the exact phrase:</t></td>
141 <td><n.adv_search_input name="subjectphrase" /></td>
142 </tr>
143 <tr>
144 <td class="form-label end-group"><t>none of the words:</t></td>
145 <td class="end-group"><n.adv_search_input name="subjectnot" /></td>
146 </tr>
147 </macro>
148
149 <macro name="author_name_group">
150 <tr>
151 <td colspan="2">
152 <div class="shaded-bg-color rounded second-font group-header">
153 <t>Author name</t>
154 </div>
155 </td>
156 </tr>
157 <tr>
158 <td class="form-label"><t>is:</t></td>
159 <td><n.adv_search_input name="authorphrase" /></td>
160 </tr>
161 <tr>
162 <td class="form-label end-group"><t>is not:</t></td>
163 <td class="end-group"><n.adv_search_input name="authorphrasenot" /></td>
164 </tr>
165 </macro>
166
167 <macro name="any_message_part_contains_group">
168 <tr>
169 <td colspan="2">
170 <div class="shaded-bg-color rounded second-font group-header">
171 <t>Any message part contains</t>
172 </div>
173 </td>
174 </tr>
175 <tr>
176 <td class="form-label"><t>all of the words:</t></td>
177 <td><n.adv_search_input name="alland" /></td>
178 </tr>
179 <tr>
180 <td class="form-label"><t>at least one of the words:</t></td>
181 <td><n.adv_search_input name="allor" /></td>
182 </tr>
183 <tr>
184 <td class="form-label"><t>the exact phrase:</t></td>
185 <td><n.adv_search_input name="allphrase" /></td>
186 </tr>
187 <tr>
188 <td class="form-label end-group"><t>none of the words:</t></td>
189 <td class="end-group"><n.adv_search_input name="allnot" /></td>
190 </tr>
191 </macro>
192
193 <macro name="message_date_group">
194 <tr>
195 <td colspan="2">
196 <div class="shaded-bg-color rounded second-font group-header">
197 <t>Message date</t>
198 </div>
199 </td>
200 </tr>
201 <tr>
202 <td class="form-label end-group"><t>is within the last:</t></td>
203 <td><input name="days" size="5" value="[n.hide_if. equals='0'][n.hide_null.get_parameter name='days' /][/n.hide_if.]" /> <t>days</t></td>
204 </tr>
205 </macro>
206
207 <macro name="submit_button">
208 <tr>
209 <td></td>
210 <td style="padding-top:.5em">
211 <input type="submit" class="toolbar action-button" value="[t]Search[/t]"/>
212 </td>
213 </tr>
214 </macro>
215
216 <macro name="adv_search_input" parameters="name">
217 <input name="[n.name/]" type="text" style="width:370px;" value="[n.hide_null.get_parameter.name/]"/>
218 </macro>
219
220 <macro name="adv_search_and_query" parameters="name,field">
221 <n.regex_replace_all. pattern='(".+?"|[^ "]+)' replacement="[n.field/]:$0"><n.get_parameter name="[n.name/]" /></n.regex_replace_all.>
222 </macro>
223
224 <macro name="remove_double_quotes" dot_parameter="text">
225 <n.regex_replace_all. pattern='"' replacement=""><n.text/></n.regex_replace_all.>
226 </macro>
227
228 <macro name="adv_search_phrase_query" parameters="name,field">
229 <n.set_var. name="value"><n.trim.remove_double_quotes.get_parameter name="[n.name/]" /></n.set_var.>
230 <n.if.not.is_empty.var name="value">
231 <then>
232 <n.hide_null.append text="[n.field/]" suffix=":" />"<n.var name="value" />"
233 </then>
234 </n.if.not.is_empty.var>
235 </macro>
236
237 <macro name="adv_search_or_query" parameters="name,field">
238 <n.set_var. name="value"><n.trim.get_parameter name="[n.name/]" /></n.set_var.>
239 <n.set_var. name="field"><n.hide_null.append text="[n.field/]" suffix=":" /></n.set_var.>
240 <n.if.not.is_empty.var name="value">
241 <then>
242 <n.regex. pattern='(".+?"|[^ "]+)' text="[n.var name='value'/]">
243 <n.no_output.next_element/>
244 <n.if.not.has_more_elements>
245 <then>
246 <n.var name="field"/><n.current_element/>
247 </then>
248 <else>
249 <n.var name="field"/>(<n.current_element/>
250 <n.loop.>
251 <n.nop/> OR <n.current_element/>
252 </n.loop.>)
253 </else>
254 </n.if.not.has_more_elements>
255 </n.regex.>
256 </then>
257 </n.if.not.is_empty.var>
258 </macro>
259
260 <macro name="adv_search_not_query" parameters="name,field">
261 <n.if.not.is_empty.trim.get_parameter name="[n.name/]">
262 <then>
263 NOT <n.adv_search_or_query name="[n.name/]" field="[n.field/]" />
264 </then>
265 </n.if.not.is_empty.trim.get_parameter>
266 </macro>
267
268 <macro name="adv_search_not_phrase_query" parameters="name,field">
269 <n.if.not.is_empty.trim.get_parameter name="[n.name/]">
270 <then>
271 NOT <n.adv_search_phrase_query name="[n.name/]" field="[n.field/]" />
272 </then>
273 </n.if.not.is_empty.trim.get_parameter>
274 </macro>