Mercurial Hosting > nabble
diff src/nabble/view/naml/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/search.naml Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,462 @@ +<macro name="search_page" requires="servlet"> + <n.search_page_html/> +</macro> + +<macro name="search_page_html" requires="servlet"> + <n.define_search_query_field/> + <n.node_page.search_namespace.> + <n.set_var name='didSearch' value="false" /> + <n.catch_exception. id="search-block"> + <n.do_search_using_params /> + <n.set_var name='didSearch' value="true" /> + </n.catch_exception.> + <n.html> + <head> + <meta name="robots" content="noindex,nofollow"/> + <n.search_page_title/> + <n.set_cookies did_search="[n.var name='didSearch'/]" /> + <n.search_page_style/> + </head> + <body> + <n.show_search_form/> + <n.show_search_error/> + <n.search_results_header/> + + <n.results.loop.current_node.> + <n.search_result_row/> + </n.results.loop.current_node.> + + <n.search_pagination/> + + <n.if.not.lucene_is_ready> + <then.index_rebuilt_notice/> + </n.if.not.lucene_is_ready> + + <n.if.has_results> + <then.show_search_form/> + </n.if.has_results> + </body> + </n.html> + </n.node_page.search_namespace.> +</macro> + +<macro name="search_page_title" requires="search"> + <n.title.> + <n.case_all.>Search for '<n.search_query_field.value/>'</n.case_all.> + <n.case_author_search.>Messages of <n.user.name/></n.case_author_search.> + </n.title.> +</macro> + +<macro name="search_page_style" requires="search"> + <style type="text/css"> + .nabble td.verbose-search-box { + text-align: left; + padding-top: .33em; + padding-bottom: .33em; + padding-left: .17em; + } + div.search-results-header { + margin:2em 0 1em; + font-size:90%; + } + </style> +</macro> + +<macro name="search_results_header" requires="search"> + <div class="search-results-header"> + <n.if.has_resort> + <then> + <n.sort_controls/> + </then> + </n.if.has_resort> + + <img src="/images/search.png" class="image16"/> + Found <n.total_posts/> <n.search_description/> + </div> +</macro> + +<macro name="search_result_row" requires="node,search"> + <div style="margin-bottom:1.5em"> + <div style="margin-bottom:.2em" class="adbayes-content"> + <n.search_result_topic_subject/> + <n.search_result_post_subject/> + </div> + + <div style="margin-bottom:.2em" class="adbayes-content"> + <n.search_result_message_fragment/> + </div> + + <div class="weak-color" style="font-size:80%"> + <n.search_result_in_app/> + <n.search_result_on_date/> + <n.if.not.is_author_search> + <then> + by <n.owner.user_link/> + </then> + </n.if.not.is_author_search> + — <n.topic_node.replies/> replies in thread + </div> + </div> +</macro> + +<macro name="search_result_topic_subject" requires="node,search"> + <span class="second-font big-title"> + <n.node_link text="[n.highlight.topic_node.subject/]" /> + </span> +</macro> + +<macro name="search_result_post_subject" requires="node,search"> + <n.if.not.regex_matches pattern=".*[n.regex_quote.topic_node.subject/]" text="[n.subject/]"> + <then> (<n.highlight.subject/>)</then> + </n.if.not.regex_matches> +</macro> + +<macro name="search_result_message_fragment" requires="node,search"> + <n.highlight.hide_emails.fragment. size="300"> + <n.message.as_text/> + </n.highlight.hide_emails.fragment.> +</macro> + +<macro name="search_result_in_app" requires="node,search"> + <n.if.is_in_app> + <then> + in <n.get_app_node.><n.node_link text="[n.highlight.subject/]" /></n.get_app_node.> + </then> + </n.if.is_in_app> +</macro> + +<macro name="search_result_on_date" requires="node,search"> + <script type="text/javascript"> + Nabble.postDate = new Date(<n.when_created.raw_time/>); + document.write(Nabble.isToday(Nabble.postDate) ? " at " : " on "); + document.write(Nabble.formatDateShort(Nabble.postDate)); + </script> +</macro> + + +<macro name="search_pagination" requires="search"> + <n.search_paging.> + <n.if.has_paging> + <then> + <div style="font-size:90%;text-align:right;margin-bottom:1em"> + <n.if.has_previous_page> + <then> + <a href="[n.previous_page_path/]">« Prev <n.rows_per_page/></a> + <n.if.has_next_page> + <then> - </then> + </n.if.has_next_page> + </then> + </n.if.has_previous_page> + <n.if.has_next_page> + <then> + <a href="[n.next_page_path/]">Next <n.rows_per_page/> »</a> + </then> + </n.if.has_next_page> + </div> + </then> + </n.if.has_paging> + </n.search_paging.> +</macro> + +<macro name="index_rebuilt_notice" requires="search"> + <div class="info-message rounded" style="text-align:center;padding:.5em;margin:.5em 0"> + <t><b>Warning:</b> The search index is currently being rebuilt. Search results may be incomplete.</t> + </div> +</macro> + +<macro name="sort_controls" requires="search"> + <div style="float:right;margin:0 1em"> + <n.if.sorted_by_date> + <then> + <a href="[n.sort_by_relevance_path/]"><t>Sort by relevance</t></a> | <t>Sorted by date</t> + </then> + <else> + <t>Sorted by relevance</t> | <a href="[n.sort_by_date_path/]"><t>Sort by date</t></a> + </else> + </n.if.sorted_by_date> + </div> +</macro> + +<macro name="search_description" requires="search"> + <n.if.has_query> + <then>matching posts for <b><n.search_query_field.value/></b></then> + <else>posts</else> + </n.if.has_query> + in <n.page_node.node_link/> + <n.case_author_search.> + by <n.user.user_link/> + </n.case_author_search.> + <n.if.has_days> + <then>within <n.days/> days</then> + </n.if.has_days> + <n.search_paging.> + <n.if.has_paging> + <then>Showing posts <n.current_page.page_row.plus.one/> to <n.current_page.page_row.plus.rows_per_page/>.</then> + </n.if.has_paging> + </n.search_paging.> +</macro> + +<macro name="show_search_error" requires="search"> + <n.format_error.handle_exception. for="search-block"> + <n.exception. name="search_query_parse_error"> + This query is invalid. + <br/>For more information, read about <a href="http://lucene.apache.org/java/2_4_1/queryparsersyntax.html">Lucene query parser syntax</a> + </n.exception.> + <n.exception. name="too_many_search_clauses"> + Your search will give too many matches. + </n.exception.> + </n.format_error.handle_exception.> +</macro> + +<macro name="show_search_form" requires="search"> + <div class="shaded-bg-color rounded"> + <n.page_node.search_form.> + <table> + <tr> + <td class="verbose-search-box"> + <style type="text/css"> + div.field-title { margin-top: 0; } + </style> + <div class="second-font field-title">Search</div> + <n.case_author_search.> + <select name="author"> + <option value="[n.author_param/]" selected="true">posts by '<n.user.name/>'</option> + <option value="">all posts</option> + </select> + </n.case_author_search.> + <n.search_query_field.input size="40" /> + <select name="days"> + <n.if.not.contains_substring string="-0-1-7-30-90-180-365-" substring="-[n.days/]-"> + <then> + <n.days_option. value="[n.days/]">past <n.days/> days</n.days_option.> + </then> + </n.if.not.contains_substring> + <n.days_option. value="0">all dates</n.days_option.> + <n.days_option. value="1">past 24 hours</n.days_option.> + <n.days_option. value="7">past week</n.days_option.> + <n.days_option. value="30">past month</n.days_option.> + <n.days_option. value="90">past 3 months</n.days_option.> + <n.days_option. value="180">past 6 months</n.days_option.> + <n.days_option. value="365">past year</n.days_option.> + </select> + <input type="submit" value="Go »" /> + </td> + <td style="font-size:90%;padding:0 0 .3em 1em;vertical-align:bottom"> + <div style="margin-bottom:.4em"> + <a href="[n.advanced_search_path_using_params/]">Advanced Search</a> + </div> + <a href="[n.help.search.url/]">Show Tips</a> + </td> + </tr> + </table> + </n.page_node.search_form.> + </div> +</macro> + +<macro name="case_all" requires="search" dot_parameter="do"> + <n.if.is_all> + <then><n.do/></then> + </n.if.is_all> +</macro> + +<macro name="case_author_search" requires="search" dot_parameter="do"> + <n.if.is_author_search> + <then><n.do/></then> + </n.if.is_author_search> +</macro> + +<macro name="days_option" requires="search" parameters="value" dot_parameter="text"> + <n.option. value="[n.value/]" selected="[n.days/]"><n.text/></n.option.> +</macro> + +<macro name="option" parameters="value,selected" dot_parameter="text"> + <n.if.equal value1="[n.value/]" value2="[n.selected/]"> + <then> + <option value="[n.value/]" selected="true"><n.text/></option> + </then> + <else> + <option value="[n.value/]"><n.text/></option> + </else> + </n.if.equal> +</macro> + +<macro name="define_search_query_field"> + <n.if.not.is_null.search_query_field.value> + <then> + <n.search_query_field.set_value.> + <n.regex_replace_all. pattern="\band\b" replacement="AND"> + <n.regex_replace_all. pattern="\bor\b" replacement="OR"> + <n.trim.search_query_field.value/> + </n.regex_replace_all.> + </n.regex_replace_all.> + </n.search_query_field.set_value.> + </then> + </n.if.not.is_null.search_query_field.value> +</macro> + +<macro name="search_query_field" dot_parameter="do"> + <n.field. name="query"><n.do/></n.field.> +</macro> + +<macro name="do_search_using_params" requires="search"> + <n.if.not.is_empty.author_param> + <then.query_author.author_param/> + </n.if.not.is_empty.author_param> + <n.do_search length="[n.search_page_length/]" + query="[n.query_param/]" + days="[n.get_parameter name='days'/]" + start="[n.search_page_index_record/]" + sort="[n.get_parameter name='sort'/]" + /> +</macro> + +<macro name="author_param"> + <n.get_parameter name='author'/> +</macro> + +<macro name="query_param"> + <n.get_parameter name='query'/> +</macro> + + + +<macro name="previous_page_path" requires="paging,search"> + <n.search_path_using_params index_record="[n.previous_page.page_row/]" /> +</macro> + +<macro name="next_page_path" requires="paging,search"> + <n.search_path_using_params index_record="[n.next_page.page_row/]" /> +</macro> + +<macro name="sort_by_relevance_path"> + <n.search_path_using_params sort="relevance" index_record="0" /> +</macro> + +<macro name="sort_by_date_path"> + <n.search_path_using_params sort="date" index_record="0" /> +</macro> + +<macro name="search_path_using_params" parameters="query,author,days,index_record,sort" requires="node_page,servlet"> + <n.page_node.> + <n.search_path> + <query><n.default_to_param name="query" value="[n.query/]" /></query> + <author><n.default_to_param name="author" value="[n.author/]" /></author> + <days><n.default_to_param name="days" value="[n.days/]" /></days> + <index_record><n.default_to_param name="index_record" value="[n.index_record/]" /></index_record> + <sort><n.default_to_param name="sort" value="[n.sort/]" /></sort> + </n.search_path> + </n.page_node.> +</macro> + +<macro name="default_to_param" parameters="name" dot_parameter="value"> + <n.default> + <text><n.value/></text> + <to><n.get_parameter name="[n.name/]"/></to> + </n.default> +</macro> + +<macro name="search_path" parameters="query,author,days,index_record,sort" requires="node"> + <n.encode_url.remove_spaces.> + /template/NamlServlet.jtp?macro=search_page&node=<n.id/> + <n.add_to_path name="query" value="[n.query/]" /> + <n.add_to_path name="author" value="[n.author/]" /> + <n.add_to_path name="days" value="[n.days/]" /> + <n.add_to_path name="i" value="[n.index_record/]" default_value="0" /> + <n.add_to_path name="sort" value="[n.sort/]" default_value="relevance" /> + </n.encode_url.remove_spaces.> +</macro> + +<macro name="page_search_box" parameters="author" requires="node,servlet"> + <n.search_form. + style="display: inline; margin: 0;" + author="[n.author/]" + > + <input id="nabble.searchQuery" type="text" class="medium-border-color" name="query" size="20" /> + </n.search_form.> +</macro> + +<macro name="search_form" dot_parameter="do" parameters="style,query,author,days" requires="node"> + <form style="[n.style/]" action="/template/NamlServlet.jtp"> + <input type="hidden" name="macro" value="search_page" /> + <input type="hidden" name="node" value="[n.id/]" /> + <n.hidden_field name="query" value="[n.query/]" /> + <n.hidden_field name="author" value="[n.author/]" /> + <n.hidden_field name="days" value="[n.days/]" /> + <n.do/> + </form> +</macro> + +<macro name="hidden_field" parameters="name,default_value" dot_parameter="value"> + <n.if.not.is_null.value> + <then> + <n.if.not.equal value1="[n.value/]" value2="[n.default_value/]"> + <then> + <input type='hidden' name="[n.name/]" value="[n.value/]"/> + </then> + </n.if.not.equal> + </then> + </n.if.not.is_null.value> +</macro> + +<macro name="advanced_search_path_using_params" parameters="days" requires="node"> + <n.advanced_search_path> + <days><n.default_to_param name="days" value="[n.days/]" /></days> + </n.advanced_search_path> +</macro> + +<macro name="advanced_search_path" parameters="days" requires="node"> + <n.encode_url.remove_spaces.> + /template/NamlServlet.jtp?macro=adv_search_page&node=<n.id/> + <n.add_to_path name="days" value="[n.days/]" /> + </n.encode_url.remove_spaces.> +</macro> + + +<macro name="search_page_index_record"> + <n.get_parameter name="i"/> +</macro> + +<macro name="search_page_length"> + 12 +</macro> + +<macro name="search_paging" dot_parameter="do"> + <n.paging + total_rows = "[n.total_posts/]" + current_row="[n.search_page_index_record/]" + rows_per_page="[n.search_page_length/]" + do = "[n.do/]" + /> +</macro> + + +<macro name="is_all"> + <n.not.is_author_search/> +</macro> + +<macro name="is_author_search"> + <n.not.is_empty.author_param /> +</macro> + +<macro name="set_cookies" parameters="did_search"> + <script type="text/javascript"> + <n.if.both condition1="[n.not.is_empty.query_param/]" condition2="[n.did_search/]"> + <then> + Nabble.setCookie("query", "<n.javascript_string_encode.query_param/>"); + Nabble.setCookie("searchterms", "<n.search_terms/>"); + </then> + <else> + Nabble.deleteCookie("query"); + Nabble.deleteCookie("searchterms"); + </else> + </n.if.both> + <n.if.is_author_search> + <then> + Nabble.setCookie("searchuser", "<n.user.search_id/>"); + </then> + <else> + Nabble.deleteCookie("searchuser"); + </else> + </n.if.is_author_search> + </script> +</macro>