Skip to content

Commit 2362bca

Browse files
committed
consolidate search bar component templates and refactor searchpag for mobile (DLC-1118)
- add a missing translation for query field labels
1 parent 9bdbd61 commit 2362bca

20 files changed

+201
-142
lines changed

app/assets/stylesheets/stylesheets/_bootstrap_layout.scss

+10
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,13 @@
8989
}
9090

9191
}
92+
93+
.rounded-left-0 {
94+
border-top-left-radius: 0 !important;
95+
border-bottom-left-radius: 0 !important;
96+
}
97+
98+
.rounded-right-0 {
99+
border-top-right-radius: 0 !important;
100+
border-bottom-right-radius: 0 !important;
101+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<%= helpers.paginate @response, :page_entries_info => helpers.page_entries_info(@response), :theme => :dcv_collapsible %>
1+
<%= helpers.paginate @response, page_entries_info: helpers.page_entries_info(@response), theme: :dcv_collapsible, paginator_class: paginator_class %>

app/components/dcv/response/collapsible_pagination_component.rb

+30-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,40 @@ module Dcv::Response
44
class CollapsiblePaginationComponent < Blacklight::Response::PaginationComponent
55
def will_render?(controller:, helpers:)
66
return false unless controller.has_search_parameters?
7-
@response && helpers.show_pagination? and @response.total_pages > 1
7+
@response && helpers.show_pagination? and @response.total_pages > 0
88
end
99

1010
def render?
1111
will_render?(controller: controller, helpers: helpers)
1212
end
13+
14+
def paginator_class
15+
return OnlyPagePaginator if (@response && @response.total_pages < 2)
16+
Kaminari::Helpers::Paginator
17+
end
18+
19+
class OnlyPagePaginator < Kaminari::Helpers::Paginator
20+
def first?
21+
true
22+
end
23+
24+
def current?
25+
true
26+
end
27+
28+
def last?
29+
true
30+
end
31+
32+
def partial_path
33+
"#{@views_prefix}/kaminari/#{@theme}/paginator".gsub('//', '/')
34+
end
35+
36+
# this is an override to render unconditionally, cf Kaminari::Helpers::Paginator#render
37+
def render(&block)
38+
instance_eval(&block)
39+
@output_buffer.presence
40+
end
41+
end
1342
end
1443
end

app/components/dcv/search_bar/catalog_component.html.erb

-23
This file was deleted.

app/components/dcv/search_bar/catalog_component.rb

+3
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22

33
module Dcv::SearchBar
44
class CatalogComponent < Dcv::SearchBar::DefaultComponent
5+
def search_fields_component_class
6+
Dcv::SearchBar::SearchFields::HiddenComponent
7+
end
58
end
69
end
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
1-
<%= form_tag @url, method: :get, class: ['d-flex','flex-md-row-reverse','flex-sm-column','w-100'] do %>
2-
<%= render_hash_as_hidden_fields(@params.except(:q, :search_field, :qt, :page, :utf8, :format, :slug, :site_slug)) %>
3-
<%= render_hash_as_hidden_fields(search_action_params) %>
4-
<div class="input-group flex-sm-row flex-md-fill">
5-
<%= render pagination_component %>
6-
<div class="input-group-prepend collapseSearch flex-fill p-0<%= ' collapse' if pagination_component.render?%>" id="collapseQuery">
7-
<% unless search_fields.empty? %>
8-
<span class="input-group-append p-0<%= ' hidden' if search_fields.length == 1 %>">
9-
<label for="search_field" class="sr-only"><%= t('blacklight.search.form.search_field.label') %></label>
10-
<%= select_tag(
11-
:search_field,
12-
options_for_select(
13-
search_fields,
14-
h(params[:search_field])
15-
),
16-
title: t('blacklight.search.form.search_field.title'), class: 'btn search-btn btn-primary rounded-0'
17-
)
18-
%>
19-
<span class="sr-only"><%= t('blacklight.search.form.search_field.post_label') %></span>
20-
</span>
21-
<% end %>
1+
<%= form_tag @url, method: :get, class: ['form-inline','flex-md-row-reverse','flex-sm-column','w-100'] do %>
2+
<%= render_hash_as_hidden_fields(params_for_new_search) %>
3+
<%- rendering_pagination = pagination_will_render? -%>
4+
<div class="input-group flex-fill flex-nowrap align-content-end">
5+
<div class="btn-group input-group-prepend btn-group-toggle flex-shrink-0" data-toggle="buttons">
6+
<label for="show-search-mode" class="btn btn-secondary border-info rounded-left<%= ' active' unless rendering_pagination %>" onclick="if ($('#collapseQuery').hasClass('show')) return false;">
7+
<input type="radio" name="searchpag-mode" id="show-search-mode" aria-label="Show search box" aria-controls="collapseQuery collapsePag" <%= 'disabled ' unless rendering_pagination %>data-toggle="collapse" data-target=".collapseSearch" aria-expanded="false">
8+
<i class="previous fa fa-binoculars" title="Show search box" data-toggle="tooltip" data-original-title="Show search box"></i>
9+
</label>
10+
<label for="show-pag-mode" class="btn btn-secondary border-info<%= rendering_pagination ? ' active' : ' disabled' %>" onclick="if ($('#collapsePag').hasClass('show')) return false;">
11+
<input type="radio" name="searchpag-mode" id="show-pag-mode" aria-label="Navigate results" aria-controls="collapseQuery collapsePag" <%= rendering_pagination ? 'checked ' : ' disabled' %>data-toggle="collapse" data-target=".collapseSearch" aria-expanded="false">
12+
<i class="previous fa fa-book-open-reader" title="Navigate results" data-toggle="tooltip" data-original-title="Navigate results"></i>
13+
</label>
14+
</div>
15+
<%= render pagination_component %>
16+
<div class="input-group-prepend p-0 flex-grow-1 collapseSearch<%= ' collapse' if rendering_pagination %>" id="collapseQuery">
17+
<%= render search_fields_component %>
18+
<div class="flex-fill flex-shrink-1">
19+
<input type="hidden" name="search_field" value="all_text_teim">
2220
<label for="q" class="sr-only"><%= t('blacklight.search.form.q') %></label>
23-
<%= text_field_tag :q, params[:q], :placeholder => search_placeholder_text, :class => "search_q q flex-fill bg-white", :id => "q" %>
24-
<div class="input-group-append">
25-
<%= link_to '<i class="fa fa-remove"></i>'.html_safe, start_over_path, :title => 'Start Over', :class => 'btn bg-body btn-outline-info reset-btn' if query_has_constraints? %>
26-
<button class="btn btn-splash" type="submit" aria-label="Submit">
27-
<span class="hidden-xs"><%= (current_page?(root_url)? t('blacklight.search.form.submit') : '') %></span>
28-
<span class="fa fa-search"></span>
29-
</button>
30-
</div>
21+
<%= text_field_tag :q, params[:q], placeholder: search_placeholder_text, class: "search_q q bg-white form-control w-100", id: "q", tabindex: "1" %>
22+
</div>
23+
<div class="btn-group input-group-append">
24+
<%= render format_filter_component %>
25+
<%= link_to '<i class="fa fa-remove"></i>'.html_safe, start_over_path, :title => 'Start Over', :class => 'btn btn-secondary reset-btn' if query_has_constraints? %>
26+
<button class="btn btn-splash" type="submit">
27+
<span class="hidden-xs"><%= (current_page?(root_url)? t('blacklight.search.form.submit') : '') %></span>
28+
<span class="fa fa-search"></span>
29+
</button>
3130
</div>
3231
</div>
32+
</div>
3333

34-
<% end %>
34+
<% end %>

app/components/dcv/search_bar/default_component.rb

+39-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,22 @@ module Dcv::SearchBar
44
class DefaultComponent < Blacklight::SearchBarComponent
55
delegate :query_has_constraints?, :search_action_params, :search_placeholder_text, to: :helpers
66

7+
def search_fields_component_class
8+
Dcv::SearchBar::SearchFields::SelectComponent
9+
end
10+
11+
def search_placeholder_text
12+
(!query_has_constraints? ? t(:"dlc.search_placeholder.new.#{controller.controller_name}", default: :'dlc.search_placeholder.new.default').html_safe : t(:"dlc.search_placeholder.modified.#{controller.controller_name}", default: :'dlc.search_placeholder.modifed.default').html_safe)
13+
end
14+
15+
def params_for_new_search
16+
@params_for_new_search ||= begin
17+
_pfns = @params.except(:q, :search_field, :qt, :page, :utf8, :format, :"searchpag-mode")
18+
_pfns[:f] = _pfns[:f].except(:lib_format_sim) if _pfns.has_key?(:f)
19+
_pfns
20+
end
21+
end
22+
723
def start_over_params
824
params.slice(:search_field, :utf8).permit!
925
end
@@ -28,7 +44,10 @@ def pagination_component
2844
response: helpers.instance_variable_get(:@response), theme: 'dcv_collapsible',
2945
outer_window: 1, window: 1
3046
)
31-
unless _comp.will_render?(controller: controller, helpers: helpers)
47+
48+
if _comp.will_render?(controller: controller, helpers: helpers)
49+
@pagination_will_render = true
50+
else
3251
_comp = Dcv::SearchContext::CollapsiblePaginationComponent.new(
3352
search_context: helpers.instance_variable_get(:@search_context),
3453
search_session: helpers.instance_variable_get(:@search_session)
@@ -37,5 +56,24 @@ def pagination_component
3756
_comp
3857
end
3958
end
59+
60+
def pagination_will_render?
61+
if @pagination_will_render.nil?
62+
@pagination_will_render = pagination_component.will_render?(controller: controller, helpers: helpers)
63+
end
64+
@pagination_will_render
65+
end
66+
67+
def search_fields_component
68+
@search_fields_component ||= search_fields_component_class.new(search_fields: search_fields)
69+
end
70+
71+
def format_filter_list
72+
nil
73+
end
74+
75+
def format_filter_component
76+
@format_filter_component ||= FormatFilterDropdownComponent.new(format_filter_list: format_filter_list)
77+
end
4078
end
4179
end

app/components/dcv/search_bar/durst_component.html.erb

-35
This file was deleted.

app/components/dcv/search_bar/durst_component.rb

+9
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,14 @@
33
module Dcv::SearchBar
44
class DurstComponent < Dcv::SearchBar::DefaultComponent
55
delegate :durst_format_list, :query_has_constraints?, to: :helpers
6+
7+
def format_filter_list
8+
@format_filter_list ||= durst_format_list
9+
end
10+
11+
def search_placeholder_text
12+
return 'Modify current search&hellip;'.html_safe if query_has_constraints?
13+
'Search Postcards, Maps, Photographs, Books, Etc&hellip;'.html_safe
14+
end
615
end
716
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<div class="dropdown">
2+
<button id="format_type_select" type="button" class="btn btn-splash dropdown-toggle d-inline" data-toggle="dropdown" aria-expanded="false" onclick="$(this).dropdown(); return false;" aria-controls="format_filter" aria-pressed="false" data-reference="parent"><span class="d-none d-md-inline">Formats</span>
3+
<span class="sr-only">Toggle Dropdown</span>
4+
</button>
5+
<ul id="format_filter" class="dropdown-menu dropdown-menu-left hide" role="menu">
6+
<li class="dropdown-header text-light">Limit search to:</li>
7+
<% format_filter_list.each do | key, display_label | %>
8+
<li class="dropdown-item text-light"><input type="checkbox" name="f[lib_format_sim][]" <%= (params[:f] && params[:f]['lib_format_sim'] && params[:f]['lib_format_sim'].include?(key)) ? 'checked="checked"' : '' %> value="<%= key %>"> <%= display_label %></li>
9+
<% end %>
10+
</ul>
11+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# frozen_string_literal: true
2+
3+
module Dcv::SearchBar
4+
class FormatFilterDropdownComponent < Blacklight::Component
5+
def initialize(format_filter_list: nil)
6+
@format_filter_list = format_filter_list
7+
end
8+
9+
def render?
10+
@format_filter_list
11+
end
12+
13+
def format_filter_list
14+
@format_filter_list
15+
end
16+
end
17+
end

app/components/dcv/search_bar/repositories_component.html.erb

-25
This file was deleted.

app/components/dcv/search_bar/repositories_component.rb

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ def initialize(content_availability: nil, **_opts)
99
@content_availability = content_availability
1010
end
1111

12+
def params_for_new_search
13+
super.tap { |p| p[:'f[content_availability][]'] = @content_availability if @content_availability }
14+
end
15+
1216
def start_over_params
1317
if @params.dig(:f, :content_availability).present?
1418
super.to_h.merge("f[content_availability][]" => @params.dig(:f, :content_availability))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<% unless search_fields.blank? %>
2+
<span class="input-group-append">
3+
<%= hidden_field_tag(:search_field, h(params[:search_field] || search_fields.first[1]), :title => t('blacklight.search.form.search_field.title')) %>
4+
</span>
5+
<% end %>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
module Dcv::SearchBar::SearchFields
4+
class HiddenComponent < SelectComponent
5+
end
6+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<% unless search_fields.empty? %>
2+
<span class="input-group-prepend <%= 'hidden' if search_fields && search_fields.length < 2 %>">
3+
<label for="search_field" class="sr-only"><%= t('blacklight.search.form.search_field.label') %></label>
4+
<%= select_tag(:search_field, options_for_select(search_fields, h(params[:search_field])), :title => t('blacklight.search.form.search_field.title'), :class=>"search_field") %>
5+
<span class="sr-only"><%= t('blacklight.search.form.search_field.post_label') %></span>
6+
</span>
7+
<% end %>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# frozen_string_literal: true
2+
3+
module Dcv::SearchBar::SearchFields
4+
class SelectComponent < Blacklight::Component
5+
def initialize(search_fields: nil)
6+
@search_fields = search_fields
7+
end
8+
9+
def render?
10+
search_fields
11+
end
12+
13+
def search_fields
14+
@search_fields
15+
end
16+
end
17+
end

0 commit comments

Comments
 (0)