diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/view/naml/adv_search.naml	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,274 @@
+<macro name="adv_search_page" requires="servlet">
+	<n.node_page.>
+		<n.catch_exception. id="set-block">
+			<n.if.is_submitted_form>
+				<then>
+					<n.redirect_to.page_node.>
+						<n.search_path>
+							<query>
+								<n.compress.>
+									<n.set_message_text_contains_group/>
+									<n.set_message_subject_contains_group/>
+									<n.set_author_name_group/>
+									<n.set_any_message_part_contains_group/>
+								</n.compress.>
+							</query>
+							<days>
+								<n.get_int. default="0" exception="days_field_not_integer">
+									<n.get_parameter name="days" />
+								</n.get_int.>
+							</days>
+						</n.search_path>
+					</n.redirect_to.page_node.>
+				</then>
+			</n.if.is_submitted_form>
+		</n.catch_exception.>
+		<n.html>
+			<head>
+				<meta name="robots" content="noindex,nofollow"/>
+				<n.title.><t>Advanced Search</t></n.title.>
+				<style type="text/css">
+					div.group-header {
+						padding: .2em;
+						margin-top:1em;
+						font-size: 120%;
+						font-weight: bold;
+					}
+					td.form-label {
+						white-space: nowrap;
+					}
+				</style>
+			</head>
+			<body>
+				<n.adv_search_exceptions/>
+				<h1><t>Advanced Search</t></h1>
+
+				<p><t>Use the options below to precisely specify your search criteria.</t></p>
+
+				<n.form.>
+					<table class="advanced-search-table">
+						<n.message_text_contains_group/>
+						<n.message_subject_contains_group/>
+						<n.author_name_group/>
+						<n.any_message_part_contains_group/>
+						<n.message_date_group/>
+						<n.submit_button/>
+					</table>
+				</n.form.>
+			</body>
+		</n.html>
+	</n.node_page.>
+</macro>
+
+<macro name="adv_search_exceptions">
+	<n.format_error.handle_exception. for="set-block">
+		<n.exception. name="days_field_not_integer">
+			<t>Invalid number of days, must be integer.</t>
+		</n.exception.>
+	</n.format_error.handle_exception.>
+</macro>
+
+<macro name="set_message_text_contains_group">
+	<n.adv_search_and_query name="messageand" field="message" />
+	<n.adv_search_or_query name="messageor" field="message" />
+	<n.adv_search_phrase_query name="messagephrase" field="message" />
+	<n.adv_search_not_query name="messagenot" field="message" />
+</macro>
+
+<macro name="set_message_subject_contains_group">
+	<n.adv_search_and_query name="subjectand" field="subject" />
+	<n.adv_search_or_query name="subjector" field="subject" />
+	<n.adv_search_phrase_query name="subjectphrase" field="subject" />
+	<n.adv_search_not_query name="subjectnot" field="subject" />
+</macro>
+
+<macro name="set_author_name_group">
+	<n.adv_search_phrase_query name="authorphrase" field="author" />
+	<n.adv_search_not_phrase_query name="authorphrasenot" field="author" />
+</macro>
+
+<macro name="set_any_message_part_contains_group">
+	<n.get_parameter name="alland" />
+	<n.adv_search_or_query name="allor" />
+	<n.adv_search_phrase_query name="allphrase" />
+	<n.adv_search_not_query name="allnot" />
+</macro>
+
+<macro name="message_text_contains_group">
+	<tr>
+		<td colspan="2">
+			<div class="shaded-bg-color rounded second-font group-header">
+				<t>Message text contains</t>
+			</div>
+		</td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>all of the words:</t></td>
+		<td><n.adv_search_input name="messageand" /></td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>at least one of the words:</t></td>
+		<td><n.adv_search_input name="messageor" /></td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>the exact phrase:</t></td>
+		<td><n.adv_search_input name="messagephrase" /></td>
+	</tr>
+	<tr>
+		<td class="form-label end-group"><t>none of the words:</t></td>
+		<td class="end-group"><n.adv_search_input name="messagenot" /></td>
+	</tr>
+</macro>
+
+<macro name="message_subject_contains_group">
+	<tr>
+		<td colspan="2">
+			<div class="shaded-bg-color rounded second-font group-header">
+				<t>Message subject contains</t>
+			</div>
+		</td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>all of the words:</t></td>
+		<td><n.adv_search_input name="subjectand" /></td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>at least one of the words:</t></td>
+		<td><n.adv_search_input name="subjector" /></td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>the exact phrase:</t></td>
+		<td><n.adv_search_input name="subjectphrase" /></td>
+	</tr>
+	<tr>
+		<td class="form-label end-group"><t>none of the words:</t></td>
+		<td class="end-group"><n.adv_search_input name="subjectnot" /></td>
+	</tr>
+</macro>
+
+<macro name="author_name_group">
+	<tr>
+		<td colspan="2">
+			<div class="shaded-bg-color rounded second-font group-header">
+				<t>Author name</t>
+			</div>
+		</td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>is:</t></td>
+		<td><n.adv_search_input name="authorphrase" /></td>
+	</tr>
+	<tr>
+		<td class="form-label end-group"><t>is not:</t></td>
+		<td class="end-group"><n.adv_search_input name="authorphrasenot" /></td>
+	</tr>
+</macro>
+
+<macro name="any_message_part_contains_group">
+	<tr>
+		<td colspan="2">
+			<div class="shaded-bg-color rounded second-font group-header">
+				<t>Any message part contains</t>
+			</div>
+		</td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>all of the words:</t></td>
+		<td><n.adv_search_input name="alland" /></td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>at least one of the words:</t></td>
+		<td><n.adv_search_input name="allor" /></td>
+	</tr>
+	<tr>
+		<td class="form-label"><t>the exact phrase:</t></td>
+		<td><n.adv_search_input name="allphrase" /></td>
+	</tr>
+	<tr>
+		<td class="form-label end-group"><t>none of the words:</t></td>
+		<td class="end-group"><n.adv_search_input name="allnot" /></td>
+	</tr>
+</macro>
+
+<macro name="message_date_group">
+	<tr>
+		<td colspan="2">
+			<div class="shaded-bg-color rounded second-font group-header">
+				<t>Message date</t>
+			</div>
+		</td>
+	</tr>
+	<tr>
+		<td class="form-label end-group"><t>is within the last:</t></td>
+		<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>
+	</tr>
+</macro>
+
+<macro name="submit_button">
+	<tr>
+		<td></td>
+		<td style="padding-top:.5em">
+			<input type="submit" class="toolbar action-button" value="[t]Search[/t]"/>
+		</td>
+	</tr>
+</macro>
+
+<macro name="adv_search_input" parameters="name">
+	<input name="[n.name/]" type="text" style="width:370px;" value="[n.hide_null.get_parameter.name/]"/>
+</macro>
+
+<macro name="adv_search_and_query" parameters="name,field">
+	<n.regex_replace_all. pattern='(".+?"|[^ "]+)' replacement="[n.field/]:$0"><n.get_parameter name="[n.name/]" /></n.regex_replace_all.>
+</macro>
+
+<macro name="remove_double_quotes" dot_parameter="text">
+	<n.regex_replace_all. pattern='"' replacement=""><n.text/></n.regex_replace_all.>
+</macro>
+
+<macro name="adv_search_phrase_query" parameters="name,field">
+	<n.set_var. name="value"><n.trim.remove_double_quotes.get_parameter name="[n.name/]" /></n.set_var.>
+	<n.if.not.is_empty.var name="value">
+		<then>
+			<n.hide_null.append text="[n.field/]" suffix=":" />"<n.var name="value" />"
+		</then>
+	</n.if.not.is_empty.var>
+</macro>
+
+<macro name="adv_search_or_query" parameters="name,field">
+	<n.set_var. name="value"><n.trim.get_parameter name="[n.name/]" /></n.set_var.>
+	<n.set_var. name="field"><n.hide_null.append text="[n.field/]" suffix=":" /></n.set_var.>
+	<n.if.not.is_empty.var name="value">
+		<then>
+			<n.regex. pattern='(".+?"|[^ "]+)' text="[n.var name='value'/]">
+				<n.no_output.next_element/>
+				<n.if.not.has_more_elements>
+					<then>
+						<n.var name="field"/><n.current_element/>
+					</then>
+					<else>
+						<n.var name="field"/>(<n.current_element/>
+						<n.loop.>
+							<n.nop/> OR <n.current_element/>
+						</n.loop.>)
+					</else>
+				</n.if.not.has_more_elements>
+			</n.regex.>
+		</then>
+	</n.if.not.is_empty.var>
+</macro>
+
+<macro name="adv_search_not_query" parameters="name,field">
+	<n.if.not.is_empty.trim.get_parameter name="[n.name/]">
+		<then>
+			NOT <n.adv_search_or_query name="[n.name/]" field="[n.field/]" />
+		</then>
+	</n.if.not.is_empty.trim.get_parameter>
+</macro>
+
+<macro name="adv_search_not_phrase_query" parameters="name,field">
+	<n.if.not.is_empty.trim.get_parameter name="[n.name/]">
+		<then>
+			NOT <n.adv_search_phrase_query name="[n.name/]" field="[n.field/]" />
+		</then>
+	</n.if.not.is_empty.trim.get_parameter>
+</macro>