Merge branch 'master' into ding1-theme
[mkdru-moved-to-drupal.org.git] / mkdru.theme.js
1 Drupal.theme.prototype.mkdruResult = function(hit, num, detailLink) {
2   var html = "";
3
4   // OPEN - result list item
5   html += '<li class="mkdru-result" id="rec_' + hit.recid + '" >'
6
7   // thumbnail
8   html += '<div class="picture"></div>';
9
10   // OPEN - record div
11   html += '<div class="record">';
12
13
14   // media type
15   if (hit["md-medium"] && hit["md-medium"][0]) {
16     html += '<div class="types">'
17       + '<ul class="ting-search-collection-types item-list">'
18       + '<li class="available even first last">';
19     switch (hit["md-medium"][0]) {
20       case '(CD)videorecording':
21         html += Drupal.t('CD');
22         break;
23       case '(DVD)videorecording':
24         html += Drupal.t('DVD');
25         break;        
26       case 'article':
27         html += Drupal.t('article');
28         break;      
29       case 'book':
30         html += Drupal.t('book');
31         break;
32       case 'cartographic material':
33         html += Drupal.t('map');
34         break;
35       case 'electronicresource':
36         html += Drupal.t('online');
37         break;
38       case 'Enregistrementsonore':
39         html += Drupal.t('recording');
40         break;
41       case 'enregistrementvidéo':
42         html += Drupal.t('video');
43         break;
44       case 'map':
45         html += Drupal.t('map');
46         break;
47       case 'microform':
48         html += Drupal.t('microform');
49         break;
50       case 'microforme':
51         html += Drupal.t('microform');
52         break;
53       case 'resourceélectronique':
54         html += Drupal.t('online');
55         break;
56       case 'soundrecording':
57         html += Drupal.t('recording');
58         break;
59       case 'videorecording':
60         html += Drupal.t('video');
61         break;
62       default:
63         html += Drupal.t('other');
64         break;
65     }
66     html += '</li></ul></div>';
67   }
68
69
70   // title and link
71   var link = choose_url(hit);
72   if (!link) link = choose_url(hit['location'][0]);
73
74   html += '<h3 class="title">';
75   if (link) html += '<a href="' + link + '" target="_blank" class="title">';
76   html += hit["md-title"];
77   if (hit["md-title-remainder"])
78     html += ' - ' + hit["md-title-remainder"];
79   if (link) html += '</a>';
80   html += '</h3>';
81
82
83   html += '<div class="meta">';
84   // author
85   if (hit["md-author"]) {
86     html += '<span class="creator">' + Drupal.t('By')
87       + ' <em>' + hit['md-author'] + '</em></span> ';
88   } else if (hit['md-title-responsibility']) {
89     html += '<span class="creator">' + ' <em>' + hit['md-title-responsibility'] + '</em></span>';
90   }
91   // date
92   if (hit['md-date']) {
93     html += '<span class="publication_date"> (<em>'
94       + hit['md-date'] + '</em>)</span>';
95   }
96   html += '</div>';
97
98   // journal title
99   html += '<div class="meta">';
100   if (hit["location"] && hit["location"][0] && hit["location"][0]["md-journal-title"]) {
101     html += hit["location"][0]["md-journal-title"];
102     if (hit["location"][0]["md-journal-subpart"]) {
103       html += '&nbsp;&nbsp;&nbsp;' + hit["location"][0]["md-journal-subpart"];
104     }
105   } else if (hit["md-journal-title"]) {
106     html += hit["md-journal-title"];
107     if (hit["md-journal-subpart"]) {
108       html += '&nbsp;&nbsp;&nbsp;' + hit["md-journal-subpart"];
109     }
110   }
111   html += '</div>';
112   
113   
114   // description
115   if (hit["md-description"]) {
116     html += '<div class="abstract"><p>';
117     // limit description to 400 characters
118     html += hit["md-description"][0].substr(0, 400);
119     html += '</p></div>';
120   }
121
122
123   // subjects
124   if (hit["location"] && hit["location"][0] && hit["location"][0]["md-subject"]) {
125     html += '<div class="subjects"><h4>'
126       + Drupal.t('Subjects') + ':</h4><ul>';
127     for (var i = 0; i < hit["location"][0]["md-subject"].length; i++) {
128       html += '<li>' + hit["location"][0]["md-subject"][i]  + '</li>';
129     }
130     html += '</ul></div>';
131   }
132
133   // CLOSE - record div
134   html += '</div>';
135   // CLOSE - result list item
136   html += '</li>';
137
138   return html;
139 };
140
141 Drupal.theme.prototype.mkdruDetail = function(data, linkBack) {
142   var html = '<table id="det_' + data.recid +'">';
143   if (data["md-title"] != undefined) {
144     html += '<tr><th>' + Drupal.t("Title") + '</th><td><strong>:</strong> '
145             + data["md-title"];
146     if (data["md-title-remainder"] !== undefined) {
147       html += ' : <span>' + data["md-title-remainder"] + ' </span>';
148     }
149     if (data["md-title-responsibility"] !== undefined) {
150       html += ' <span><i>'+ data["md-title-responsibility"] +'</i></span>';
151     }
152     html += '</td></tr>';
153   }
154   if (data["md-date"] != undefined)
155     html += '<tr><th>' + Drupal.t("Date") + '</th><td><strong>:</strong> '
156             + data["md-date"] + '</td></tr>';
157   if (data["md-author"] != undefined)
158     html += '<tr><th>' + Drupal.t("Author") + '</th><td><strong>:</strong> '
159             + data["md-author"] + '</td></tr>';
160   if (data["md-electronic-url"] != undefined)
161     html += '<tr><th>URL</th><td><strong>:</strong> <a href="'
162             + data["md-electronic-url"] + '" target="_blank">'
163             + data["md-electronic-url"] + '</a>' + '</td></tr>';
164   if (data["location"][0]["md-subject"] != undefined)
165     html += '<tr><th>' + Drupal.t("Subject") + '</th><td><strong>:</strong> '
166             + data["location"][0]["md-subject"] + '</td></tr>';
167   if (data["location"][0]["@name"] != undefined)
168     html += '<tr><th>' + Drupal.t("Location") + '</th></td><td><strong>:</strong> '
169             + data["location"][0]["@name"] + " (" + data["location"][0]["@id"] + ")"
170             + '</td></tr>';
171   html += '</table></div>';
172   html += '<a href="' + linkBack + '">Return to result list...</a>';
173   return html;
174 };
175
176 /**
177  * Pager theme
178  *
179  * @param pages
180  *   Array of hrefs for page links.
181  * @param start
182  *   Number of first page.
183  * @param current
184  *   Number of current page.
185  * @param total
186  *   Total number of pages.
187  * @param prev
188  *   Href for previous page.
189  * @param next
190  *   Href for next page.
191  */
192 Drupal.theme.prototype.mkdruPager = function (pages, start, current, total, prev, next) {
193   var html = "";
194   if (prev) 
195     html += '<a href="' + prev + '" class="mkdru-pager-prev">&#60;&#60; '
196             + Drupal.t("Prev") + '</a> | ';
197   else
198     html += '<span class="mkdru-pager-prev">&#60;&#60; ' + Drupal.t("Prev")
199             + '</span> | ';
200
201   if (start > 1)
202     html += '...';
203
204   for (var i = 0; i < pages.length; i++) {
205     if (i + start == current)
206       html += ' <span class="mkdru-pager-current">' + (i + start) + '</span>';
207     else
208       html += ' <a href="' + pages[i] + '">' + (i + start) + '</a>';
209   }
210
211   if (total > i)
212     html += ' ...';
213
214   if (next)
215     html += ' | <a href="' + next + '" class="mkdru-pager-next">'
216       + Drupal.t("Next") + ' &#62;&#62;</a>';
217   else
218     html += ' | <span class="mkdru-pager-next">' + Drupal.t("Next")
219             + ' &#62;&#62;</span>';
220
221   return html;
222 };
223
224 Drupal.theme.prototype.mkdruCounts = function(first, last, available, total) {
225   if (last > 0)
226     return first + Drupal.t(' to ') + last + Drupal.t(' of ') + available
227          + Drupal.t(' available (') + total + Drupal.t(' found)');
228   else
229     return Drupal.t('No results');
230 };
231
232 Drupal.theme.prototype.mkdruStatus = function(activeClients, clients) {
233   return Drupal.t('Waiting on ') + activeClients + Drupal.t(' out of ')
234          + clients + Drupal.t(' targets');
235 };
236
237 Drupal.theme.prototype.mkdruFacet = function (terms, facet, max, selections) {
238   var html = "";
239   for (var i = 0; i < terms.length && i < max; i++ ) {
240     var term = terms[i];
241     html += '<a href="'+term.toggleLink+'"';
242     if (term.selected) html += ' class="cross"><strong';
243     html += '>'+terms[i].name;
244     if (term.selected) html += "</strong>";
245     html += '</a><span> (' + terms[i].freq
246         + ')</span><br/>';
247   }
248   if (terms.length == 0 && selections && selections.length) {
249     for (var i=0; i<selections.length; i++) {
250       if (selections[i]) {
251         // since we have no target name (only id) go for the basename
252         // FIXME get the proper target name
253         var name = facet == "source" ? selections[i].replace(/.*[\/\\]/, "")
254           .replace(/\?.*/, '')
255           : selections[i];
256         html += '<a class="cross" href="'
257           + mkdru.removeLimit(facet, selections[i])
258           + '"><strong>'+name+'</strong></a><span> (0)</span><br/>';
259       }
260     } 
261   }
262   return html;
263 };
264
265 Drupal.theme.prototype.mkdruFacetContainer = function (facetsCfg) {
266   var fs = [];
267   for (var fname in facetsCfg) {
268     facetsCfg[fname].originalKey = fname;
269     fs.push(facetsCfg[fname]);
270   }
271   fs.sort(function (a,b) { return a.orderWeight - b.orderWeight });
272   var html = '<div class="content"><table class="mkdru-facets-table"><tr>';
273   for (var i=0; i<fs.length; i++) {
274     var f = fs[i];
275     html += '<td><fieldset class="form-wrapper">'
276     html += '<legend><span class="fieldset-legend">'+f.displayName
277       +'</span></legend>';
278     html += '<div class="fieldset-wrapper">';
279     html += '<div class="mkdru-facet-list-container mkdru-facet-'
280       +f.originalKey+'"/>';
281     html += '</div>';
282     html += '</fieldset></td>'
283   }
284   html += '</tr></table></div>';
285   return html;
286 };