]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/templates/opac/parts/result/facets.tt2
TPac: facet display filtering and sorting
[working/Evergreen.git] / Open-ILS / src / templates / opac / parts / result / facets.tt2
1 <div class="facet_box_wrapper">
2 [% 
3
4 close_facets = CGI.param('close_facet') || [];
5 selected_facets = CGI.param('facet') || [];
6
7 # sorted list of search facets
8 sorted_facets = [];
9
10 IF facet.display;
11
12     # facet display configuration present.  Traverse the 
13     # configuration lists, find the matching facets from 
14     # search facet data, and append them to the sorted 
15     # list of facets.
16
17     FOR display_chunk IN facet.display;
18         FOR display_field IN display_chunk.facet_order;
19             # find the matching facet in the facet data
20             FOR facet IN ctx.search_facets.values;
21                 IF facet.cmf.field_class == display_chunk.facet_class 
22                         AND facet.cmf.name == display_field;
23                     sorted_facets.push(facet);
24                 END;
25             END;
26         END;
27     END;
28
29 ELSE; 
30
31     # No facet display configuration is present.
32     # show all facets, sorted by name.
33
34     # collect facet type labels for easier sorting
35     labels = []; 
36     FOR facet IN ctx.search_facets.values;
37         labels.push(facet.cmf.label);
38     END;
39     
40     FOR facet_label IN labels.sort;
41         FOR facet IN ctx.search_facets.values;
42             IF facet.cmf.label == facet_label;
43                 sorted_facets.push(facet);
44             END;
45         END;
46     END;
47 END;
48
49 FOR facet IN sorted_facets;
50     fclass = facet.cmf.field_class;
51     fname = facet.cmf.name;
52     close_key = fclass _ fname %]
53
54     <div class="facet_box_temp">
55         <div class="header">
56             <span class="button">
57
58                 [% IF close_facets.grep(close_key).0;
59                     new_close = [];
60                     FOR fct IN close_facets;
61                         IF fct != close_key;
62                             new_close.push(fct);
63                         END;
64                     END;
65                     expand_url = mkurl('', {close_facet => new_close});
66                     IF new_close.size == 0;
67                         expand_url  = mkurl('', {}, ['close_facet']);
68                     END;
69                 %]
70                     <a href="[% expand_url %]"><img 
71                         src="[% ctx.media_prefix %]/images/adv_search_plus_btn.png" alt="[% l('Expand') %]" /></a>
72                 [% ELSE %]
73                     <a href="[% mkurl('', {close_facet => close_facets.merge([close_key])}) %]"><img 
74                         src="[% ctx.media_prefix %]/images/adv_search_minus_btn.png" alt="[% l('Collapse') %]" /></a>
75                 [% END %]
76             </span>
77             <div class="title">[% facet.cmf.label %]</div>
78         </div>
79         [% IF !close_facets.grep(close_key).0 %]
80         <div class="box_wrapper">
81             <div class="box">
82             [% FOR facet_data IN facet.data;
83                 display_value = facet_data.value | html;
84                 param_string = fclass _ '|' _ fname _ '[' _ facet_data.value _ ']';
85                 new_facets = [];
86                 this_selected = 0;
87                 FOR selected IN selected_facets;
88                     IF selected == param_string; 
89                         this_selected = 1; 
90                     ELSE;
91                         new_facets.push(selected);
92                     END;
93                 END;
94                 IF this_selected;
95                     # This facet is already selected by the user. 
96                     # Link removes the facet from the set of selected facets.
97                 %] 
98                     <div class="facet_template facet_template_selected">
99                         <div class="facet">
100                             [% IF new_facets.size == 0 %]
101                             <a href="[% mkurl('', {}, ['facet']) %]">[% display_value %]</a>
102                             [% ELSE %]
103                             <a href="[% mkurl('', {facet => new_facets}) %]">[% display_value %]</a>
104                             [% END %]
105                         </div>
106                         <div class="count">([% facet_data.count %])</div>
107                         <div class="clear">&nbsp;</div>
108                     </div>
109                 [% 
110                     ELSE;
111                     # This facet is not currently selected.  If selected, 
112                     # append this facet to the list of currently active facets.
113                 %]
114                     <div class="facet_template">
115                         <div class="facet">
116                             <a href='[% mkurl('', {facet => selected_facets.merge([param_string])}, ['page']) %]'>[% display_value %]</a>
117                         </div>
118                         <div class="count">([% facet_data.count %])</div>
119                         <div class="clear">&nbsp;</div>
120                     </div>
121                 [% END %]
122             [% END %]
123             </div>
124         </div> <!-- box_wrapper -->
125         [% END %]
126     </div> <!-- facet_box_temp -->
127 [% END %]
128 </div> <!-- facet_box_wrapper -->
129