commit of finished Evergreen skin as of September 2017
[equinox-eg-opac-skin.git] / skin / openils / var / templates_equinox / opac / parts / result / facets.tt2
1 <div class="facet_box_wrapper">
2
3 <div id="sidebar_search_options">
4     <form action="[% ctx.opac_root %]/results" method="get">
5         <div id="hidden_search_bar">
6             [% INCLUDE "opac/parts/searchbar.tt2" took_care_of_form=1 %]
7         </div>
8         <h3 class="sr-only">[% l('Additional search filters and navigation') %]</h3>
9         <h4>Search Result Options</h4>
10         <div class="almost-content-wrapper">
11         
12             [%# hide the header bar when displaying metarecord constituents
13             instead of skipping it altogether to allow the search form
14             variables to propagate %]
15             [% IF ctx.metarecord;
16             mr_attrs = {marc_xml => ctx.metarecord_master.marc_xml};
17             PROCESS get_marc_attrs args=mr_attrs %]
18             <div class="results_header_lbl">
19                 [% l('Viewing Results for Grouped Record: [_1]',
20                     mr_attrs.title) | html %]
21             </div>
22             [% IF CGI.param('query') %]
23             <div>
24                 <a href="[% mkurl(ctx.opac_root _ '/results', {}, ['metarecord','page']); %]">
25                 [% l('&#9668; Return to Grouped Search Results') %]
26                 </a>
27             </div>
28             <br/>
29             [% END %]
30             [% END %]
31             <div [%- IF ctx.metarecord %]class="hidden"[% END -%]>
32                 <div>
33                     <div id="results_header_sort" class="results_header_btns">
34                         <label class="sr-only" for="opac.result.sort">[% l('Sort by') %]</label>
35                         [% INCLUDE "opac/parts/filtersort.tt2" value=CGI.param('sort') submit_on_change=1 %]
36                     </div>
37                     <div id="results_another_search" class="results_header_btns">
38                         <a href="[% mkurl(ctx.opac_root _ '/home', {$loc_name => loc_value, 'detail_record_view' => show_detail_view}, 1) %]">[% l('Another Search') %]</a>
39                     </div>
40                     <div id="refine_hits" class="results_header_btns result_block_visible">
41                         <a onclick="getFacety();">[% l('Refine these results') %]</a>
42                     </div>
43                     <div id="return_to_hits" class="results_header_btns">
44                         <a onclick="getResulty();">[% l('Back to results') %]</a>
45                     </div>
46
47                     [% IF ctx.mylist.size %]
48                         <div class="results_header_btns">
49                             [%- IF ctx.user; %]
50                             <a href="[% mkurl(ctx.opac_root _ '/myopac/lists') %]">[% l('View My List') %]</a>
51                             [%- ELSE %]
52                             <a href="[% mkurl(ctx.opac_root _ '/mylist') %]">[% l('View My List') %]</a>
53                             [%- END %]
54                         </div>
55
56                     [% END %]
57
58                     [%- IF show_more_details.default != 'hide' -%]
59                         <div class='results_header_sel' id='simple-detail-view-links'>
60                             [% IF show_detail_view %]
61                             <a href="[% mkurl('', {detail_record_view => 0}) %]">[% l('Show Fewer Details') %]</a> [% ELSE %]
62                             <a href="[% mkurl('', {detail_record_view => 1}) %]">[% l('Show More Details') %]</a>
63                             [% END %]
64                         </div>
65                     [%- END -%]
66
67                     <div id="results_check_options">
68                         <label id="results_limit_to_available" class="results_header_lbl" for="limit_to_available">
69                             <input type="checkbox" id="limit_to_available" name="modifier" value="available"
70                                 onchange="search_modifier_onchange('available', this, true)"
71                                 [% CGI.param('modifier').grep('available').size ? ' checked="checked"' : '' %] />
72                             [% l('Limit to Available Items') %]
73                         </label>
74
75                         [% IF NOT metarecords.disabled %]
76                             <label id="results_metabib_search_modifier" class="results_header_lbl" for="metabib_search_modifier">
77                                 <input type="checkbox" id="metabib_search_modifier"
78                                     name="modifier" value="metabib"
79                                     onchange="search_modifier_onchange('metabib', this, true)"
80                                     [% CGI.param('modifier').grep('metabib').size ? ' checked="checked"' : '' %] />
81                                 [% l('Group Formats and Editions') %]
82                             </label>
83                         [% END %]
84
85                         [% IF ctx.depth_sel_checkbox %]
86                             <label id="results_depth_sel" class="results_header_lbl" for="depth_sel" title="[% ctx.depth_sel_tooltip | html %]">
87                                 <input type="checkbox" id="depth_sel" name="depth" value="[% ctx.depth_sel_depth %]"
88                                     onchange="this.form.submit()"
89                                     [% CGI.param('depth') == ctx.depth_sel_depth ? ' checked="checked"' : '' %] />
90                                 [% ctx.depth_sel_checkbox_label | html %]
91                             </label>
92                         [% END %]
93
94                         [% IF ctx.exclude_electronic_checkbox %]
95                             <label id="results_exclude_elec" class="results_header_lbl" for='opac.result.excludeelec'>
96                                 <input type='checkbox' id='opac.result.excludeelec' name="fi:-search_format" value="electronic"
97                                     onchange="exclude_onchange(this)"
98                                     [%- CGI.param('fi:-search_format').grep('electronic').size ? ' checked="checked"' : '' %] />
99                                 [% l("Exclude Electronic Resources") %]
100                             </label>
101                         [% END %]
102                     </div>
103
104                 </div>
105             </div>
106         </div>
107     </form>
108 </div>
109
110
111
112 [% 
113
114 long_facets = CGI.param('long_facet') || [];
115 selected_facets = CGI.param('facet') || [];
116
117 # sorted list of search facets
118 sorted_facets = [];
119
120 # we'll clobber the facet. "namespace" later
121 # Provide a default value if unset in config.tt2
122 DEFAULT_DISPLAY_COUNT = facet.default_display_count || 5;
123
124 IF facet.display;
125
126     # facet display configuration present.  Traverse the 
127     # configuration lists, find the matching facets from 
128     # search facet data, and append them to the sorted 
129     # list of facets.
130
131     FOR display_chunk IN facet.display;
132         FOR display_field IN display_chunk.facet_order;
133             # find the matching facet in the facet data
134             FOR facet IN ctx.search_facets.values;
135                 IF facet.cmf.field_class == display_chunk.facet_class 
136                         AND facet.cmf.name == display_field;
137                     sorted_facets.push(facet);
138                 END;
139             END;
140         END;
141     END;
142
143 ELSE; 
144
145     # No facet display configuration is present.
146     # show all facets, sorted by name.
147
148     # collect facet type labels for easier sorting
149     labels = []; 
150     FOR facet IN ctx.search_facets.values;
151         labels.push(facet.cmf.label);
152     END;
153     
154     # We used to do a sort here, but now that's handled in EGCatLoader.
155     sorted_facets = ctx.search_facets.values;
156 END;
157
158 display_count_by_cmf = {};
159
160 FOR facet IN sorted_facets;
161     fclass = facet.cmf.field_class;
162     fname = facet.cmf.name;
163     fid = facet.cmf.id;
164     long_key = fclass _ fname %]
165
166     <div class="facet_box_temp">
167         <div class="header">
168                 [% IF long_facets.grep(long_key).0;
169                     new_long = [];
170                     FOR fct IN long_facets;
171                         IF fct != long_key;
172                             new_long.push(fct);
173                         END;
174                     END;
175                     expand_url = mkurl('', {long_facet => new_long});
176                     IF new_long.size == 0;
177                         expand_url  = mkurl('', {}, ['long_facet']);
178                     END;
179                 %]
180                     <a class="button" href="[% expand_url %]"
181                       title="[% l('Show Fewer [_1] Entries', facet.cmf.label) %]" rel="nofollow" vocab="">
182                       [% l("Fewer") %]
183                     </a>
184                 [% ELSIF facet.data.size > DEFAULT_DISPLAY_COUNT %]
185                     <a class="button" 
186                       title="[% l('Show More [_1] Entries', facet.cmf.label) %]"
187                       href="[% mkurl('', {long_facet => long_facets.merge([long_key])}) %]" rel="nofollow" vocab="">
188                       [% l("More") %]
189                     </a>
190                 [% END %]
191             <h4 class="title">[% facet.cmf.label %]</h4>
192         </div>
193         <div class="box_wrapper">
194             <div class="box">
195             [% FOR facet_data IN facet.data;
196                 display_value = facet_data.value | html;
197                 param_string = fclass _ '|' _ fname _ '[' _ facet_data.value _ ']';
198                 new_facets = [];
199                 this_selected = 0;
200                 FOR selected IN selected_facets;
201                     IF selected == param_string; 
202                         this_selected = 1; 
203                     ELSE;
204                         new_facets.push(selected);
205                     END;
206                 END;
207
208                 display_count_by_cmf.$fid = display_count_by_cmf.$fid || 0;
209
210                 NEXT UNLESS long_facets.grep(long_key).0 OR
211                     display_count_by_cmf.$fid < DEFAULT_DISPLAY_COUNT;
212
213                 # fix syntax highlighting: >
214
215                 display_count_by_cmf.$fid = display_count_by_cmf.$fid + 1;
216
217                 IF this_selected;
218                     # This facet is already selected by the user. 
219                     # Link removes the facet from the set of selected facets.
220                 %] 
221                     <div class="facet_template facet_template_selected">
222                         <div class="facet">
223                             [% IF new_facets.size == 0 %]
224                             <a
225                               title="[% l('Show all results, not just those matching this term') %]"
226                               href="[% mkurl('', {}, ['facet']) %]" rel="nofollow" vocab="">[% display_value %]</a>
227                             [% ELSE %]
228                             <a
229                               title="[% l('Expand to also show results not matching this term') %]"
230                               href="[% mkurl('', {facet => new_facets}) %]" rel="nofollow" vocab="">[% display_value %]</a>
231                             [% END %]
232                         </div>
233                         <div class="count">([% facet_data.count; IF facet_data.count == (ctx.superpage + 1) * ctx.superpage_size; '+'; END %])</div>
234                     </div>
235                 [% 
236                     ELSE;
237                     # This facet is not currently selected.  If selected, 
238                     # append this facet to the list of currently active facets.
239                 %]
240                     <div class="facet_template">
241                         <div class="facet">
242                             <a
243                               title="[% l('Limit to results matching this term') %]"
244                               href='[% mkurl('', {facet => selected_facets.merge([param_string])}, ['page']) %]' rel="nofollow" vocab="">
245                               [% display_value %]
246                             </a>
247                         </div>
248                         <div class="count">([% facet_data.count %])</div>
249                     </div>
250                 [% END %]
251             [% END %]
252             </div>
253         </div> <!-- box_wrapper -->
254     </div> <!-- facet_box_temp -->
255 [% END %]
256 </div> <!-- facet_box_wrapper -->
257