]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/templates/opac/parts/result/facets.tt2
c8c7196f65746168c5af3aac33d7ef662560440e
[working/Evergreen.git] / Open-ILS / src / templates / opac / parts / result / facets.tt2
1 <div class="facet_box_wrapper">
2 [% 
3
4 long_facets = CGI.param('long_facet') || [];
5 selected_facets = CGI.param('facet') || [];
6
7 # sorted list of search facets
8 sorted_facets = [];
9
10 # we'll clobber the facet. "namespace" later
11 # Provide a default value if unset in config.tt2
12 DEFAULT_DISPLAY_COUNT = facet.default_display_count || 5;
13
14 IF facet.display;
15
16     # facet display configuration present.  Traverse the 
17     # configuration lists, find the matching facets from 
18     # search facet data, and append them to the sorted 
19     # list of facets.
20
21     FOR display_chunk IN facet.display;
22         FOR display_field IN display_chunk.facet_order;
23             # find the matching facet in the facet data
24             FOR facet IN ctx.search_facets.values;
25                 IF facet.cmf.field_class == display_chunk.facet_class 
26                         AND facet.cmf.name == display_field;
27                     sorted_facets.push(facet);
28                 END;
29             END;
30         END;
31     END;
32
33 ELSE; 
34
35     # No facet display configuration is present.
36     # show all facets, sorted by name.
37
38     # collect facet type labels for easier sorting
39     labels = []; 
40     FOR facet IN ctx.search_facets.values;
41         labels.push(facet.cmf.label);
42     END;
43     
44     # We used to do a sort here, but now that's handled in EGCatLoader.
45     sorted_facets = ctx.search_facets.values;
46 END;
47
48 display_count_by_cmf = {};
49
50 FOR facet IN sorted_facets;
51     fclass = facet.cmf.field_class;
52     fname = facet.cmf.name;
53     fid = facet.cmf.id;
54     long_key = fclass _ fname %]
55
56     <div class="facet_box_temp">
57         <div class="header">
58                 [% IF long_facets.grep(long_key).0;
59                     new_long = [];
60                     FOR fct IN long_facets;
61                         IF fct != long_key;
62                             new_long.push(fct);
63                         END;
64                     END;
65                     expand_url = mkurl('', {long_facet => new_long});
66                     IF new_long.size == 0;
67                         expand_url  = mkurl('', {}, ['long_facet']);
68                     END;
69                 %]
70                     <a class="button" href="[% expand_url %]"
71                       title="[% l('Show Fewer [_1] Entries', facet.cmf.label) %]" rel="nofollow" vocab="">
72                       [% l("Fewer") %]
73                     </a>
74                 [% ELSIF facet.data.size > DEFAULT_DISPLAY_COUNT %]
75                     <a class="button" 
76                       title="[% l('Show More [_1] Entries', facet.cmf.label) %]"
77                       href="[% mkurl('', {long_facet => long_facets.merge([long_key])}) %]" rel="nofollow" vocab="">
78                       [% l("More") %]
79                     </a>
80                 [% END %]
81             <h4 class="title">[% facet.cmf.label %]</h4>
82         </div>
83         <div class="box_wrapper">
84             <div class="box">
85             [% FOR facet_data IN facet.data;
86                 display_value = facet_data.value | html;
87                 param_string = fclass _ '|' _ fname _ '[' _ facet_data.value _ ']';
88                 new_facets = [];
89                 this_selected = 0;
90                 FOR selected IN selected_facets;
91                     IF selected == param_string; 
92                         this_selected = 1; 
93                     ELSE;
94                         new_facets.push(selected);
95                     END;
96                 END;
97
98                 display_count_by_cmf.$fid = display_count_by_cmf.$fid || 0;
99
100                 NEXT UNLESS long_facets.grep(long_key).0 OR
101                     display_count_by_cmf.$fid < DEFAULT_DISPLAY_COUNT;
102
103                 # fix syntax highlighting: >
104
105                 display_count_by_cmf.$fid = display_count_by_cmf.$fid + 1;
106
107                 IF this_selected;
108                     # This facet is already selected by the user. 
109                     # Link removes the facet from the set of selected facets.
110                 %] 
111                     <div class="facet_template facet_template_selected">
112                         <div class="facet">
113                             [% IF new_facets.size == 0 %]
114                             <a
115                               title="[% l('Show all results, not just those matching this term') %]"
116                               href="[% mkurl('', {}, ['facet']) %]" rel="nofollow" vocab="">[% display_value %]</a>
117                             [% ELSE %]
118                             <a
119                               title="[% l('Expand to also show results not matching this term') %]"
120                               href="[% mkurl('', {facet => new_facets}) %]" rel="nofollow" vocab="">[% display_value %]</a>
121                             [% END %]
122                         </div>
123                         <div class="count">([% facet_data.count %])</div>
124                     </div>
125                 [% 
126                     ELSE;
127                     # This facet is not currently selected.  If selected, 
128                     # append this facet to the list of currently active facets.
129                 %]
130                     <div class="facet_template">
131                         <div class="facet">
132                             <a
133                               title="[% l('Limit to results matching this term') %]"
134                               href='[% mkurl('', {facet => selected_facets.merge([param_string])}, ['page']) %]' rel="nofollow" vocab="">
135                               [% display_value %]
136                             </a>
137                         </div>
138                         <div class="count">([% facet_data.count %])</div>
139                     </div>
140                 [% END %]
141             [% END %]
142             </div>
143         </div> <!-- box_wrapper -->
144     </div> <!-- facet_box_temp -->
145 [% END %]
146 </div> <!-- facet_box_wrapper -->
147