<h2>Full-text Regex Search</h2>
<form name="search-form" method="GET" action="/snipsnap/space/RegexSearch">
<input type="text" name="searchExpression"
<%
if (isSearch()) println 'value="'+ searchExpression + '"'
%>
>
<select name="sortOrder">
<option value="viewCount.dsc" <%sel('viewCount.dsc')%>>by popularity</option>
<option value="title.asc" <%sel('title.asc')%>>by name</option>
<option value="mTime.dsc" <%sel('mTime.dsc')%>>by last modified</option>
<option value="mUser.asc" <%sel('mUser.asc')%>>by user</option>
</select>
<input type="submit" value="Search"> <small><a href="space/RegexSearch/RegexSearchSyntax">see Search Syntax</a></small>
</form><br>
<%
int MAX=100
if (isSearch())
{
if (null == sortOrder) sortOrder='viewCount.dsc'
fac = org.snipsnap.snip.SnipSpaceFactory.instance
words = searchExpression.tokenize()
list = fac.all.findAll{ snip |
words.every { currExp |
currExp = '(?si)'+currExp
snip.content =~ currExp || snip.title =~ currExp } }.
sort{
atr=itsortOrder[0..-5]
atr instanceof java.lang.String?atr.toLowerCase():atr }
if (sortOrder.endsWith('.dsc')) list = list.reverse()
list = list0..MAX
table = new SearchResultTable()
table.renderTable(out, '<hr>Search Results: ', list)
}
def isSearch() {
return (searchExpression != null && searchExpression.size() > 0)
}
def sel(order) {
if ( ( isSearch() && order.equals(sortOrder) ) || (!isSearch() && order.equals('viewCount.dsc') ) ) print "selected"
}
class SearchResultTable extends com.canoo.snipsnap.macro.AbstractSnipTableMacro {
public String getName() {
return "search-results";
}
public void execute(java.io.Writer writer, org.snipsnap.render.macro.parameter.SnipMacroParameter params) {
}
}
%>
<br>