# Meant to be applied on top of Blacklight view helpers, to over-ride # certain methods from RenderConstraintsHelper (newish in BL), # to effect constraints rendering and search history rendering, module BlacklightAdvancedSearch::RenderConstraintsOverride #Over-ride of Blacklight method, provide advanced constraints if needed, # otherwise call super. Existence of an @advanced_query instance variable # is our trigger that we're in advanced mode. def render_constraints_query(my_params = params) if (@advanced_query.nil? || @advanced_query.keyword_queries.empty? ) return super(my_params) else content = "" @advanced_query.keyword_queries.each_pair do |field, query| label = BlacklightAdvancedSearch.search_field_def_for_key(field)[:display_label] content << render_constraint_element( label, query, :remove => catalog_index_path(remove_advanced_keyword_query(field,my_params)) ) end if (@advanced_query.keyword_op == "OR" && @advanced_query.keyword_queries.length > 1) content = '<span class="inclusive_or appliedFilter">' + '<span class="operator">Any of:</span>' + content + '</span>' end return content end end #Over-ride of Blacklight method, provide advanced constraints if needed, # otherwise call super. Existence of an @advanced_query instance variable # is our trigger that we're in advanced mode. def render_constraints_filters(my_params = params) content = super(my_params) if (@advanced_query) @advanced_query.filters.each_pair do |field, value_list| label = Blacklight.config[:facet][:labels][field] or field.to_s.capitalize content << render_constraint_element(label, value_list.join(" OR "), :remove => catalog_index_path( remove_advanced_filter_group(field, my_params) ) ) end end return content end def render_search_to_s_filters(my_params) content = super(my_params) advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, BlacklightAdvancedSearch.config ) if (advanced_query.filters.length > 0) advanced_query.filters.each_pair do |field, values| label = Blacklight.config[:facet][:labels][field] or field.to_s.capitalize content << render_search_to_s_element( label, values.join(" OR ") ) end end return content end def render_search_to_s_q(my_params) content = super(my_params) advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, BlacklightAdvancedSearch.config ) if (advanced_query.keyword_queries.length > 1 && advanced_query.keyword_op == "OR") # Need to do something to make the inclusive-or search clear display_as = advanced_query.keyword_queries.collect do |field, query| h( BlacklightAdvancedSearch.search_field_def_for_key(field)[:display_label] + ": " + query ) end.join(" ; ") content << render_search_to_s_element("Any of", display_as, :escape_value => false ) elsif (advanced_query.keyword_queries.length > 0) advanced_query.keyword_queries.each_pair do |field, query| label = BlacklightAdvancedSearch.search_field_def_for_key(field)[:display_label] content << render_search_to_s_element(label, query) end end return content end end