Changeset 6687
- Timestamp:
- 10/20/15 11:27:53 (9 years ago)
- Location:
- vlo/branches/vlo-3.3/vlo-web-app/src/main
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
vlo/branches/vlo-3.3/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/HighlightSearchTermBehavior.java
r6686 r6687 17 17 package eu.clarin.cmdi.vlo.wicket; 18 18 19 import com.google.common.collect.ImmutableSet;20 19 import eu.clarin.cmdi.vlo.JavaScriptResources; 21 import java.util.Collection;22 20 import org.apache.wicket.Component; 23 21 import org.apache.wicket.behavior.Behavior; … … 27 25 import org.apache.wicket.request.Request; 28 26 import org.apache.wicket.util.string.StringValue; 27 import org.apache.wicket.util.string.Strings; 29 28 30 29 /** … … 37 36 public class HighlightSearchTermBehavior extends Behavior { 38 37 39 private static final String HIGHLIGHT_FUNCTION = "$('#%s').highlight(%s, {className:'%s'})"; 40 private static final Collection<String> DEFAULT_EXCLUDE_WORDS = ImmutableSet.of("and", "or", "not", "to"); 38 private final HighlightSearchTermScriptFactory scriptFactory = new HighlightSearchTermScriptFactory(); 41 39 42 40 @Override … … 45 43 response.render(JavaScriptHeaderItem.forReference(JavaScriptResources.getHighlightJS())); 46 44 47 final StringValue words = getWordList(component); 48 if (!words.isEmpty()) { 45 final String words = getWordList(component); 46 if (!Strings.isEmpty(words)) { 47 String selector = getComponentSelector(component.getMarkupId()); 49 48 // after load, highlight 50 response.render(OnDomReadyHeaderItem.forScript(String.format(HIGHLIGHT_FUNCTION, 51 component.getMarkupId(), makeWordListArray(words.toString()), 52 getSearchWordClass() 53 ))); 49 response.render(OnDomReadyHeaderItem.forScript(scriptFactory.createScript(selector, words))); 54 50 } 55 51 } 56 52 57 /** 58 * 59 * @param wordList string of whitespace separated words 60 * @return a string representing a sanitised javascript array of words 61 */ 62 private CharSequence makeWordListArray(String wordList) { 63 final StringBuilder sb = new StringBuilder("["); 64 final String[] words = wordList.split("\\s"); 65 for (int i = 0; i < words.length; i++) { 66 final String word = sanitise(words[i]); //remove white space and quotes at beginning or end 67 // is on exclude list? 68 if (!getExcludeWords().contains(word.toLowerCase())) { 69 // wrap in quotes 70 sb.append("'").append(word).append("'"); 71 if (i + 1 < words.length) { 72 // prepare to append next 73 sb.append(","); 74 } 75 } 76 } 77 return sb.append("]"); 53 protected String getComponentSelector(String componentId) { 54 return "#" + componentId; 78 55 } 79 56 80 private String sanitise(String word) { 81 return word.replaceAll("^[\\s'\"]+|[\\s'\"]+$", ""); 82 } 83 84 /** 85 * 86 * @return CSS class to mark matches with 87 */ 88 protected String getSearchWordClass() { 89 return "searchword"; 90 } 91 92 protected StringValue getWordList(Component component) { 57 protected String getWordList(Component component) { 93 58 Request request = component.getPage().getRequestCycle().getRequest(); 94 return request.getQueryParameters().getParameterValue(getQueryParam()) ;59 return request.getQueryParameters().getParameterValue(getQueryParam()).toString(); 95 60 } 96 61 … … 99 64 } 100 65 101 /**102 *103 * @return Words not to highlight104 */105 protected Collection<String> getExcludeWords() {106 return DEFAULT_EXCLUDE_WORDS;107 }108 109 66 } -
vlo/branches/vlo-3.3/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchResultsPanel.java
r6191 r6687 18 18 19 19 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 20 import eu.clarin.cmdi.vlo.wicket.HighlightSearchTermBehavior; 21 import eu.clarin.cmdi.vlo.wicket.HighlightSearchTermScriptFactory; 20 22 import eu.clarin.cmdi.vlo.wicket.model.SearchContextModel; 21 23 import eu.clarin.cmdi.vlo.wicket.model.SearchResultExpansionStateModel; … … 26 28 import java.util.Set; 27 29 import org.apache.solr.common.SolrDocument; 30 import org.apache.wicket.Component; 31 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; 28 32 import org.apache.wicket.ajax.AjaxRequestTarget; 29 33 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; … … 41 45 import org.apache.wicket.model.Model; 42 46 import org.apache.wicket.model.PropertyModel; 47 import org.apache.wicket.util.string.StringValue; 43 48 44 49 /** … … 93 98 //For Ajax updating of search results 94 99 setOutputMarkupId(true); 100 101 add(new HighlightSearchTermBehavior(){ 102 103 @Override 104 protected String getComponentSelector(String componentId) { 105 return ".searchresultitem"; //"h3, .searchresultdescription" 106 } 107 108 @Override 109 protected String getWordList(Component component) { 110 return selectionModel.getObject().getQuery(); 111 } 112 113 }); 95 114 } 96 115 -
vlo/branches/vlo-3.3/vlo-web-app/src/main/less/eu/clarin/cmdi/vlo/wicket/pages/inc/vlo-search.less
r6665 r6687 143 143 #searchresultitems .searchresultdescription a { 144 144 text-decoration: underline; 145 } 146 147 .searchresultitem .searchword { 148 font-weight: bold; 145 149 } 146 150
Note: See TracChangeset
for help on using the changeset viewer.