module BlacklightAdvancedSearch::RenderConstraintsOverride

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,

Public Instance Methods

facet_field_in_params?(field) click to toggle source

override of BL method, so our inclusive facet selections are still recgonized for eg highlighting facet with selected values.

Calls superclass method
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 61
def facet_field_in_params?(field)
  return true if super

  # otherwise use our own logic.
  query = BlacklightAdvancedSearch::QueryParser.new(params, self.blacklight_config)
  return true if query.filters.keys.include?(field)

  false
end
query_has_constraints?(localized_params = params) click to toggle source
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 5
def query_has_constraints?(localized_params = params)
  if is_advanced_search? localized_params
    true
  else
    !(localized_params[:q].blank? && localized_params[:f].blank? && localized_params[:f_inclusive].blank?)
  end
end
remove_advanced_filter_group(field, my_params = params) click to toggle source
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 126
def remove_advanced_filter_group(field, my_params = params)
  if (my_params[:f_inclusive])
    my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
    my_params[:f_inclusive] = my_params[:f_inclusive].dup
    my_params[:f_inclusive].delete(field)

    my_params.delete :f_inclusive if my_params[:f_inclusive].empty?
  end
  my_params
end
remove_advanced_keyword_query(field, my_params = params) click to toggle source
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 120
def remove_advanced_keyword_query(field, my_params = params)
  my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
  my_params.delete(field)
  my_params
end
render_constraints_filters(my_params = params) click to toggle source

Over-ride of Blacklight method, provide advanced constraints if needed, otherwise call super.

Calls superclass method
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 42
def render_constraints_filters(my_params = params)
  content = super(my_params)

  if advanced_query
    advanced_query.filters.each_pair do |field, value_list|
      label = facet_field_label(field)
      content << render_constraint_element(label,
        safe_join(Array(value_list), " <strong class='text-muted constraint-connector'>OR</strong> ".html_safe),
        :remove => search_action_path(remove_advanced_filter_group(field, my_params).except(:controller, :action))
                                          )
    end
  end

  content
end
render_constraints_query(my_params = params) click to toggle source

Over-ride of Blacklight method, provide advanced constraints if needed, otherwise call super.

Calls superclass method
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 15
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 = blacklight_config.search_fields[field][:label]
      content << render_constraint_element(
        label, query,
        :remove =>
          search_action_path(remove_advanced_keyword_query(field, my_params).except(:controller, :action))
      )
    end
    if (advanced_query.keyword_op == "OR" &&
        advanced_query.keyword_queries.length > 1)
      content.unshift content_tag(:span, "Any of:", class: 'operator')
      content_tag :span, class: "inclusive_or appliedFilter well" do
        safe_join(content.flatten, "\n")
      end
    else
      safe_join(content.flatten, "\n")
    end
  end
end
render_search_to_s_filters(my_params) click to toggle source
Calls superclass method
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 71
def render_search_to_s_filters(my_params)
  content = super(my_params)

  advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, blacklight_config)

  unless advanced_query.filters.empty?
    advanced_query.filters.each_pair do |field, values|
      # old-style, may still be in history
      values = values.keys if values.is_a? Hash

      label = facet_field_label(field)

      content << render_search_to_s_element(
        label,
        values.join(" OR ")
      )
    end
  end
  content
end
render_search_to_s_q(my_params) click to toggle source
Calls superclass method
# File lib/blacklight_advanced_search/render_constraints_override.rb, line 92
def render_search_to_s_q(my_params)
  content = super(my_params)

  advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, blacklight_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(blacklight_config.search_fields[field][:label] + ": " + query)
    end.join(" ; ")

    content << render_search_to_s_element("Any of",
      display_as,
      :escape_value => false
                                         )
  elsif !advanced_query.keyword_queries.empty?
    advanced_query.keyword_queries.each_pair do |field, query|
      label = blacklight_config.search_fields[field][:label]

      content << render_search_to_s_element(label, query)
    end
  end

  content
end