Mercurial Hosting > nabble
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> |