Changeset 6687


Ignore:
Timestamp:
10/20/15 11:27:53 (9 years ago)
Author:
Twan Goosen
Message:

highlight in search results

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  
    1717package eu.clarin.cmdi.vlo.wicket;
    1818
    19 import com.google.common.collect.ImmutableSet;
    2019import eu.clarin.cmdi.vlo.JavaScriptResources;
    21 import java.util.Collection;
    2220import org.apache.wicket.Component;
    2321import org.apache.wicket.behavior.Behavior;
     
    2725import org.apache.wicket.request.Request;
    2826import org.apache.wicket.util.string.StringValue;
     27import org.apache.wicket.util.string.Strings;
    2928
    3029/**
     
    3736public class HighlightSearchTermBehavior extends Behavior {
    3837
    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();
    4139
    4240    @Override
     
    4543        response.render(JavaScriptHeaderItem.forReference(JavaScriptResources.getHighlightJS()));
    4644
    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());
    4948            // 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)));
    5450        }
    5551    }
    5652
    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;
    7855    }
    7956
    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) {
    9358        Request request = component.getPage().getRequestCycle().getRequest();
    94         return request.getQueryParameters().getParameterValue(getQueryParam());
     59        return request.getQueryParameters().getParameterValue(getQueryParam()).toString();
    9560    }
    9661
     
    9964    }
    10065
    101     /**
    102      *
    103      * @return Words not to highlight
    104      */
    105     protected Collection<String> getExcludeWords() {
    106         return DEFAULT_EXCLUDE_WORDS;
    107     }
    108 
    10966}
  • vlo/branches/vlo-3.3/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchResultsPanel.java

    r6191 r6687  
    1818
    1919import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     20import eu.clarin.cmdi.vlo.wicket.HighlightSearchTermBehavior;
     21import eu.clarin.cmdi.vlo.wicket.HighlightSearchTermScriptFactory;
    2022import eu.clarin.cmdi.vlo.wicket.model.SearchContextModel;
    2123import eu.clarin.cmdi.vlo.wicket.model.SearchResultExpansionStateModel;
     
    2628import java.util.Set;
    2729import org.apache.solr.common.SolrDocument;
     30import org.apache.wicket.Component;
     31import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
    2832import org.apache.wicket.ajax.AjaxRequestTarget;
    2933import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
     
    4145import org.apache.wicket.model.Model;
    4246import org.apache.wicket.model.PropertyModel;
     47import org.apache.wicket.util.string.StringValue;
    4348
    4449/**
     
    9398        //For Ajax updating of search results
    9499        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        });
    95114    }
    96115   
  • vlo/branches/vlo-3.3/vlo-web-app/src/main/less/eu/clarin/cmdi/vlo/wicket/pages/inc/vlo-search.less

    r6665 r6687  
    143143#searchresultitems .searchresultdescription a {
    144144    text-decoration: underline;
     145}
     146
     147.searchresultitem .searchword {
     148    font-weight: bold;
    145149}
    146150
Note: See TracChangeset for help on using the changeset viewer.